O boleto pode ser direto para o cliente, ou para um "ciente do cliente".
WITH OBJECT cnSQL
:cSQL := "SELECT IDFINAN, FINUMBAN, FIDATEMI, FICADASTRO, FISACADO, FIPARCELA, FIDATVEN," + ;
" FIVALOR, FIDOCAUX, FIDATVEN, JPCADASTRO.CDNOME AS CADNOME," + ;
" JPCADASTRO.CDCNPJ AS CADCNPJ, SACADO.CDCNPJ AS SACCNPJ," + ;
" IF( FISACADO = 0, JPCADASTRO.CDCNPJ, SACADO.CNPJ ) AS DOCCNPJ," + ;
" IF( FISACADO = 0, JPCADASTRO.CDNOME, SACADO.CDNOME ) AS DOCNOME," + ;
" IF( FISACADO = 0, CONCAT_WS( JPCADASTRO.CDENDCOB, JPCADASTRO.CDNUMCOB, JPCADASTRO.CDCOMCOB ), " + ;
" CONCAT_WS( SACADO.CDENDCOB, SACADO.CDNUMCOB, SACADO.CDCOMCOB ) ) AS DOCENDERECO," + ;
" IF( FISACADO = 0, JPCADASTRO.CDBAICOB, SACADO.BAICOB ) AS DOCBAIRRO," + ;
" IF( FISACADO = 0, JPCADASTRO.CDCEPCOB, SACADO.CEPCOB ) AS DOCCEP," + ;
" IF( FISACADO = 0, JPCADASTRO.CDUFCOB, SACADO.UFCOB ) AS DOCUF," + ;
" FROM JPFINAN" + ;
" LEFT JOIN JPCADASTRO ON JPCADASTRO.IDCADASTRO = JPFINAN.FICADASTRO" + ;
" LEFT JOIN JPAUXILIAR ON JPTAUXILIAR.AXTABELA = " + StringSQL( AUX_FINPOR ) + " AND AXCODIGO = JPCADASTRO.CDPORTADOR" + ;
" LEFT JOIN JPCADASTRO AS SACADO ON SACADO.IDCADASTRO = JPFINAN.FICADASTRO" + ;
" WHERE FIPEDIDO = " + NumberSQL( nIdPedido ) + " AND FITIPLAN = '1'"
:Execute()
Pra facilitar na definição de nomes, usei DOCxxxx para definir os campos que saem no documento, que podem ser de um ou de outro.