Boa tarde Kaolox.
Analisando o seu código, acredito que o problema esteja neste ponto do fonte:
376 While cAlias->(!Eof()) .AND. cAlias->CJ_NUM == cOrc
377
378 If nLinha >= 2360
379 //Linhas Horizontais - FIM ORCAMENTO
380 oPrint:Box(nLinha, nColuna + 0040, nLinha + 0050, nColuna + 2360)
381 //
382 IMPROD(@nLinha, @nColuna, NPag, nTotal)
383 IMPCAB(@nLinha, @nColuna, cOrc, cEmissao) //Nesta linha aqui - 383
384
385 nPag++
Isso porque na função IMPCAB a variável nColuna é alterada conforme mostrado abaixo:
161//================================================================
162==================================================================
163Static Function IMPCAB(nLinha, nColuna, cOrc, cEmissao)
164//================================================================
165==================================================================
166 Local cTexto := ""
167
168 nLinha := 0050 // Controle de Linhas
169 nColuna := 1500 // Indica a posição da primeira coluna - BEM AQUI É ALTERADA NA LINHA 169
Aí quando volta para a função IMPPRO o valor de nColuna será 1500 e não o valor que estava antes. Isso acontece porque o envio do parâmetro é por referência.
Sendo isso, uma ideia para resolver seria guardar um backup do valor de nColuna antes de chamar IMPCAB e voltar o valor que estava antes após a chamada.