in reply to Refactor huge subroutine

Duplicated (non-trivial) code should be extracted into subroutines. For example:
Date_Cmp( _dateformat($_->get('hb_Local_date_lodged')), _dateformat($self->{date_str}) )
could become a function.

As a matter of personal taste, I'd turn

exists $check{$_->qcs_job_name} {$lodgement->{reference}} {$_->qcs_sequence_no}) && ($check{$_->qcs_job_name} {$lodgement->{reference}} {$_->qcs_sequence_no}) && ($client_job_spoil ->hb_Local_spoils == 0);
into a function. When I encounter a "next if", I don't want to dwell on the logic of the test, but to simply note that a test exists.

Finally (and again, this is all just personal taste), consider changing

$total_lodged = $_->qcs_document_count() - $client_job_spoil ->hb_Local_spoils;
to
$total_lodged = $_->qcs_document_count() - $client_job_spoil->hb_Loc +al_spoils;
It takes fewer lines and (if you align equal signs and operations) should be just as readable, if not more.