Jump to content
Fivewin Brasil

Importar boletos CEF.


kapiaba

Recommended Posts

Amiguinhos,

Caso queira integrar com MrBoleto, analise o meu código.

A primeira função eu uso para marcar os registros do meu arquivo financeiro que farão parte do job de impressões.

A segunda função cria o script que o MrBoleto interpreta e chuta-pro-gol.

/*
 ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** 
 * FUNCAO: Imprime boletos de varios bancos utilizando o aplicativo MRBoleto
 ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** 
 */
function MarcaMRBoleto()
   local oDlg
   local lSave := 2, lEmite := .f., lEmail := .f.
   cPathBLPRO   := VerifyINI( "MRBoleto", "Pasta", "", cPath+"nfw.ini", .f. )
   cArquivoLote := VerifyINI( "MRBoleto", "Lote" , "", cPath+"nfw.ini", .f. )
   if empty( cPathBLPRO )
      if MsgYesNo( "Procurar pasta do componente MRBoleto?" )
         cPathBLPRO := cGetDir("Pasta do MRBoleto",cPathBLPRO) + "\"
         VerifyINI( "MRBoleto", "Pasta", cPathBLPRO, cPath+"nfw.ini", .t. )
      endif
   endif
   if !file( cArquivoLote )
      cArquivoLote := cGetFile( "Arquivo Lote (*.csv) |*.csv|" + "Todos arquivos (*.*) |*.*|", "Selecione o arquivo" )
      VerifyINI( "MRBoleto", "Lote" , cArquivoLote, cPath+"nfw.ini", .t. )
   endif
   if ! file( cPathBLPRO+"\MRBoleto.exe" )
      MsgStop( "Instale o componente MRBoleto" )
      return .t.
   endif
   SET _3DLOOK ON
   DEFINE DIALOG oDlg RESOURCE "dlgConfirma" TITLE "Confirma"
   REDEFINE ICON oIcon100 ID 100 RESOURCE "icon_impresora" OF oDlg
   REDEFINE ICON oIcon103 ID 103 RESOURCE "icon_email"     OF oDlg
   REDEFINE SAY oSay101 ID 101 PROMPT "Atencao: O titulo esta sendo acrescentado ao JOB de boletos a serem amitidos. Confirma?" OF oDlg
   REDEFINE SAY oSay102 ID 102 PROMPT "Voce gostaria de enviar este boleto para a caixa de email deste cliente?" OF oDlg
   REDEFINE BUTTON ID 1 OF oDlg ACTION ( lSave := 1 , oDlg:End() )
   REDEFINE BUTTON ID 2 OF oDlg ACTION ( lSave := 2 , oDlg:End() )
   REDEFINE BUTTON oBtn3 ID 3 OF oDlg ACTION ( lSave := 3 , oDlg:End() ) DEFAULT
   oBtn3:cCaption := "Confirmar e Enviar"
   ACTIVATE DIALOG oDlg CENTERED
   do case
      case lSave = 1
           lEmite := .t.
           lEmail := .f.
      case lSave = 2
           lEmite := .f.
      case lSave = 3
           lEmite := .t.
           lEmail := .t.
   endcase
   if lEmite // MsgYesNo("Atencao:"+CRLF+CRLF+"O titulo esta sendo acrescentado ao JOB de"+CRLF+"boletos a serem amitidos."+CRLF+CRLF+"Continua?",)
      Sacado_Nome      := FDECRIPTA( PESQ( STR(CONTAS->IDCLIENTE,5,0), "CLIENTES", 2,"NOME" ) )
      Sacado_CNPJ      := PESQ( STR(CONTAS->IDCLIENTE,5,0), "CLIENTES", 2,"CGC" )
      Sacado_Rua       := PESQ( STR(CONTAS->IDCLIENTE,5,0), "CLIENTES", 2,"ENDERECO" )
      Sacado_Bairro    := PESQ( STR(CONTAS->IDCLIENTE,5,0), "CLIENTES", 2,"BAIRRO" )
      Sacado_Cidade    := PESQ( STR(CONTAS->IDCLIENTE,5,0), "CLIENTES", 2,"CIDADE" )
      Sacado_Estado    := PESQ( STR(CONTAS->IDCLIENTE,5,0), "CLIENTES", 2,"ESTADO" )
      Sacado_CEP       := PESQ( STR(CONTAS->IDCLIENTE,5,0), "CLIENTES", 2,"CEP" )
      Sacado_EMail     := PESQ( STR(CONTAS->IDCLIENTE,5,0), "CLIENTES", 2,"EMAIL" )
      Boleto_Juros     := PESQ( str(CONTAS->IDBANCO,5,0), "INSTRU",1,"JUROS" )
      Boleto_Taxa      := PESQ( str(CONTAS->IDBANCO,5,0), "INSTRU",1,"TAXA" )
      Boleto_Instrucao := alltrim( PESQ( str(CONTAS->IDBANCO,5,0), "INSTRU",1,"INSTRUCAO1" ) )+"|"+;
                          alltrim( PESQ( str(CONTAS->IDBANCO,5,0), "INSTRU",1,"INSTRUCAO2" ) )+"|"+;
                          alltrim( PESQ( str(CONTAS->IDBANCO,5,0), "INSTRU",1,"INSTRUCAO3" ) )+"|"+;
                          alltrim( PESQ( str(CONTAS->IDBANCO,5,0), "INSTRU",1,"INSTRUCAO4" ) )+"|"+;
                          alltrim( PESQ( str(CONTAS->IDBANCO,5,0), "INSTRU",1,"INSTRUCAO5" ) )
      ImprimeMRBDOC( Banco________, ; // 001
                     Banco_Agencia, ; // 3482
                     Banco_Ag_Dv__, ; // 07
                     Banco_Ag_Un_A, ; // 
                     Conta________, ; // 90090
                     Conta_DV_____, ; // 7
                     Conta_OP_____, ; //     
                     Carteira_____, ; // 18
                     Carteira_Tipo, ; // 
                     CONTAS->IDBOLETO, ;
                     "NFe", ;
                     Prefixo______, ; // 153454
                     Prefixo_DV___, ; // 9
                     CONTAS->DESDOBRA, ;
                     "N", ;
                     "R$", ;
                     CharRem("-/",dtoz(CONTAS->DATA)), ;
                     CharRem("-/",dtoz(CONTAS->ARECEBER)), ;
                     CONTAS->VALOR, ;
                     Boleto_Juros, ;
                     Boleto_Taxa, ;
                     2, ; // Copias
                     PESQ( str(CONTAS->IDBANCO,5,0), "INSTRU",1,"PRACA" ), ; // Pague em qualquer banco até o limite da data de vencimento
                     Boleto_Instrucao, ;
                     "", ; // Demonstrativo-Vetor: pode a exemplo ser utilizado para se demonstrar o rateio de despesas para condominios||Utiliza Fonte com espaçamento de tamanho fixo ( Courier ), o que permite geração de demostrativos financeiros flexiveis.||O limite é sua criatividade :)||Exiba detalhes importantes para o usuario||Valores em cobrança||Contratos||Informações úteis||Etc...
                     Cl_Nome+"|"+Cl_CNPJ, ;
                     Sacado_Nome+"|"+Sacado_CNPJ+"|"+Sacado_Rua+"|"+Sacado_Bairro+"|"+Sacado_Cidade+"|"+Sacado_Estado+"|"+Sacado_cep, ;
                     "", ; // Avalista: CNPJ|Avalista: Nome|Avalista: Endereço ( Opcional )
                     Sacado_Email, lEmail )
   endif
   return .t.

FUNCTION ImprimeMRBDOC( Banco________, ;
                      Banco_Agencia, ;
                      Banco_Ag_Dv__, ;
                      Banco_Ag_Un_A, ;
                      Conta________, ;
                      Conta_DV_____, ;
                      Conta_OP_____, ;
                      Carteira_____, ;
                      Carteira_Tipo, ;
                      NossoNumero__, ;
                      Doc_Origem___, ;
                      Prefixo______, ;
                      Prefixo_DV___, ;
                      Doc_Numero___, ;
                      Doc_Aceite___, ;
                      Doc_Especie__, ;
                      Doc_Data_____, ;
                      Vencimento___, ;
                      Valor________, ;
                      Multa_Auto___, ;
                      Juros_Mes____, ;
                      Numero_Vias__, ;
                      Local_Pagamen, ;
                      Instrucoes___, ;
                      Demonstrativo, ;
                      Cedente______, ;
                      Sacado_______, ;
                      Avalista_____, ;
                      cEmail, lEmail )
   LOCAL nHandle, nLenght, cHeader
   if file( cPathBLPRO+"\MRBoleto.ini" )
      VerifyINI( "MRBoleto", "Banco________","001"     , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Banco_Agencia","3482"    , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Banco_Ag_Dv__","07"      , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Banco_Ag_Un_A",""        , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Conta________","90090"   , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Conta_DV_____","7"       , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Conta_OP_____",""        , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Carteira_____","18"      , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Carteira_Tipo",""        , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "NossoNumero__","62160101", cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Doc_Origem___","NFe"     , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Prefixo______","153454"  , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Prefixo_DV___","9"       , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Doc_Numero___","00001234", cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Doc_Aceite___","N"       , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Doc_Especie__","R$"      , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Doc_Data_____","20121127", cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Vencimento___","20121226", cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Valor________",13.37     , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Multa_Auto___",2         , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Juros_Mes____",2         , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Numero_Vias__",2         , cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Local_Pagamen","Pague em qualquer banco até o limite da data de vencimento", cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Instrucoes___","Desconto de 5% se pago até o dia 07/12/2012|Não receber após 30 dias da data de vencimento", cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Demonstrativo","Vetor: pode a exemplo ser utilizado para se demonstrar o rateio de despesas para condominios||Utiliza Fonte com espaçamento de tamanho fixo ( Courier ), o que permite geração de demostrativos financeiros flexiveis.||O limite é sua criatividade :)||Exiba detalhes importantes para o usuario||Valores em cobrança||Contratos||Informações úteis||Etc...", cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Cedente______","Cedente: CNPJ|Cedente: Nome|Cedente: Endereço ( Opcional )", cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Sacado_______","Sacado: CNPJ|Sacado: Nome|Sacado: Endereço Completo", cPathBLPRO+"\MRBoleto.ini", .t. )
      VerifyINI( "MRBoleto", "Avalista_____","Avalista: CNPJ|Avalista: Nome|Avalista: Endereço ( Opcional )", cPathBLPRO+"\MRBoleto.ini", .t. )
   endif
   cPathBLPRO   := VerifyINI( "MRBoleto", "Pasta", "", cPath+"nfw.ini", .f. )
   cArquivoLote := VerifyINI( "MRBoleto", "Lote" , "", cPath+"nfw.ini", .f. )
   if empty( cPathBLPRO )
      if MsgYesNo( "Procurar pasta do componente MRBoleto?" )
         cPathBLPRO := cGetDir("Pasta do MRBoleto",cPathBLPRO) + "\"
         VerifyINI( "MRBoleto", "Pasta", cPathBLPRO, cPath+"nfw.ini", .t. )
      endif
   endif
   if !file( cArquivoLote )
      cArquivoLote := cGetFile( "Arquivo Lote (*.csv) |*.csv|" + "Todos arquivos (*.*) |*.*|", "Selecione o arquivo" )
      VerifyINI( "MRBoleto", "Lote" , cArquivoLote, cPath+"nfw.ini", .t. )
   endif
   if file( cPathBLPRO+"\MRBoleto.exe" ) //  
      VerifyINI( "MRBoleto", "Banco________",Banco________, cPathBLPRO+"\MRBoleto.ini", .t. ) // "341"     
      VerifyINI( "MRBoleto", "Banco_Agencia",Banco_Agencia, cPathBLPRO+"\MRBoleto.ini", .t. ) // "3482"    
      VerifyINI( "MRBoleto", "Banco_Ag_Dv__",Banco_Ag_Dv__, cPathBLPRO+"\MRBoleto.ini", .t. ) // "07"      
      VerifyINI( "MRBoleto", "Banco_Ag_Un_A",Banco_Ag_Un_A, cPathBLPRO+"\MRBoleto.ini", .t. ) // ""        
      VerifyINI( "MRBoleto", "Conta________",Conta________, cPathBLPRO+"\MRBoleto.ini", .t. ) // "90090"   
      VerifyINI( "MRBoleto", "Conta_DV_____",Conta_DV_____, cPathBLPRO+"\MRBoleto.ini", .t. ) // "7"       
      VerifyINI( "MRBoleto", "Conta_OP_____",Conta_OP_____, cPathBLPRO+"\MRBoleto.ini", .t. ) // ""        
      VerifyINI( "MRBoleto", "Carteira_____",Carteira_____, cPathBLPRO+"\MRBoleto.ini", .t. ) // "18"      
      VerifyINI( "MRBoleto", "Carteira_Tipo",Carteira_Tipo, cPathBLPRO+"\MRBoleto.ini", .t. ) // ""        
      VerifyINI( "MRBoleto", "NossoNumero__",NossoNumero__, cPathBLPRO+"\MRBoleto.ini", .t. ) // "62160101"
      VerifyINI( "MRBoleto", "Doc_Origem___",Doc_Origem___, cPathBLPRO+"\MRBoleto.ini", .t. ) // "NFe"     
      VerifyINI( "MRBoleto", "Prefixo______",Prefixo______, cPathBLPRO+"\MRBoleto.ini", .t. ) // "153454"  
      VerifyINI( "MRBoleto", "Prefixo_DV___",Prefixo_DV___, cPathBLPRO+"\MRBoleto.ini", .t. ) // "9"       
      VerifyINI( "MRBoleto", "Doc_Numero___",Doc_Numero___, cPathBLPRO+"\MRBoleto.ini", .t. ) // "00001234"
      VerifyINI( "MRBoleto", "Doc_Aceite___",Doc_Aceite___, cPathBLPRO+"\MRBoleto.ini", .t. ) // "N"       
      VerifyINI( "MRBoleto", "Doc_Especie__",Doc_Especie__, cPathBLPRO+"\MRBoleto.ini", .t. ) // "R$"      
      VerifyINI( "MRBoleto", "Doc_Data_____",Doc_Data_____, cPathBLPRO+"\MRBoleto.ini", .t. ) // "20121127"
      VerifyINI( "MRBoleto", "Vencimento___",Vencimento___, cPathBLPRO+"\MRBoleto.ini", .t. ) // "20121226"
      VerifyINI( "MRBoleto", "Valor________",Valor________, cPathBLPRO+"\MRBoleto.ini", .t. ) // 13.37     
      VerifyINI( "MRBoleto", "Multa_Auto___",Multa_Auto___, cPathBLPRO+"\MRBoleto.ini", .t. ) // 2         
      VerifyINI( "MRBoleto", "Juros_Mes____",Juros_Mes____, cPathBLPRO+"\MRBoleto.ini", .t. ) // 2         
      VerifyINI( "MRBoleto", "Numero_Vias__",Numero_Vias__, cPathBLPRO+"\MRBoleto.ini", .t. ) // 2         
      VerifyINI( "MRBoleto", "Local_Pagamen",Local_Pagamen, cPathBLPRO+"\MRBoleto.ini", .t. ) // "Pague em qualquer banco até o limite da data de vencimento"
      VerifyINI( "MRBoleto", "Instrucoes___",Instrucoes___, cPathBLPRO+"\MRBoleto.ini", .t. ) // "Desconto de 5% se pago até o dia 07/12/2012|Não receber após 30 dias da data de vencimento"
      VerifyINI( "MRBoleto", "Demonstrativo",Demonstrativo, cPathBLPRO+"\MRBoleto.ini", .t. ) // "Vetor: pode a exemplo ser utilizado para se demonstrar o rateio de despesas para condominios||Utiliza Fonte com espaçamento de tamanho fixo ( Courier ), o que permite geração de demostrativos financeiros flexiveis.||O limite é sua criatividade :)||Exiba detalhes importantes para o usuario||Valores em cobrança||Contratos||Informações úteis||Etc..."
      VerifyINI( "MRBoleto", "Cedente______",Cedente______, cPathBLPRO+"\MRBoleto.ini", .t. ) // "Cedente: CNPJ|Cedente: Nome|Cedente: Endereço ( Opcional )"
      VerifyINI( "MRBoleto", "Sacado_______",Sacado_______, cPathBLPRO+"\MRBoleto.ini", .t. ) // "Sacado: CNPJ|Sacado: Nome|Sacado: Endereço Completo"
      VerifyINI( "MRBoleto", "Avalista_____",Avalista_____, cPathBLPRO+"\MRBoleto.ini", .t. ) // "Avalista: CNPJ|Avalista: Nome|Avalista: Endereço ( Opcional )"
      //                                                  
      if lEmail // MsgYesNo("Voce deseja enviar este boleto por email?") // empty(cEmail)
         WaitRun( cPathBLPRO+"\MRBoleto.exe -M /E /QM /QE /F:"+cArquivoLote ) 
      else
         WaitRun( cPathBLPRO+"\MRBoleto.exe -M /P /QM /QE /F:"+cArquivoLote ) 
      endif
   else
      MsgStop( "MRBoleto nao instalado." )
   endif
   RETURN .T.

Função VerifyINI()

FUNCTION VerifyINI( _section_, _entry_, _var_, _inifile_, _grava_ )
 oIni := TIni():New( _inifile_ )
 if _grava_ = .t.
   oIni:Set( _section_, _entry_, _var_ )
 endif
 return oIni:Get( _section_, _entry_, _var_, _var_ )

 

Link to comment
Share on other sites

Amiguinhos,

resource:

dlgConfirma DIALOG 31, 35, 283, 105
STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Confirmar rotina"
FONT 8, "Tahoma"
{
 DEFPUSHBUTTON "Não", 2, 228, 32, 50, 14
 PUSHBUTTON "Sim", 1, 175, 32, 50, 14
 PUSHBUTTON "Inativar", 3, 174, 86, 104, 14
 ICON "icon_lixeira", 100, 6, 5, 21, 20
 LTEXT "Tem certeza de que deseja excluir o registro escolhido? Isto não poderá ser revertido posteriormente.", 101, 35, 5, 244, 26
 ICON "icon_info", 103, 6, 58, 21, 20
 LTEXT "Voce poderá colocar o registro na situação de inativo ou arquivo morto e poderá recuperá-lo posteriormente.", 102, 35, 58, 244, 26
 GROUPBOX "", -1, -6, 48, 296, 62, BS_GROUPBOX
}
	 

 

kapiaba.jpg

Link to comment
Share on other sites

Tenho uma aqui via código mesmo Kapi, veja se serve...

#INCLUDE "FiveWin.ch"
#include "barcode.ch"
#include "TSButton.ch"

// Para testar o codigo de barras
// http://evandro.net/codigo_barras.html

static oWnd, oImage, oImageSm
static oprn, xa, xb, ofon2, ofont, ofontn, ofont2
static x_1, y_1, x, y, i, k, aonde, vnossonm, _mod10, _mod11
static f_venc, c_livre, v_docum, datavenc, valor, dv_codb
static cod_dig, cod_barra, mano, ika, kra,vEmpr, vCNPJ, vMens1
static vFant, vEnd, vBai, vCid, vUf, vCep, vCeden, vNNum, vCod, JUROS

FUNCTION IBOL(cTitle,mano)

   PRIVATE oPrn, oFont, oFont1, oFont2, oIni, oPrinter, ct , nColP , nLinP , nLinC , Pag, ika,nlBol,nlBarra,contaBol, oFont, oFont1
   
   IF oNumBolE = 0
      MSGSTOP("Não existem boletos a imprimir!","Boletos")
      RETURN nil
   ENDI

   _mod10 := '12121212121212121212121212121212121212121212121212121212121212121212121212121212'
   _mod11 := '98765432987654329876543298765432987654329876543298765432987654329876543298765432'

   SELECT Filiais   
   vEmpr    := Filiais->cedente
   vCeden   := ALLTRIM(Filiais->cod_ced)
   vAgenc   := Filiais->agencia
   vesp_doc := Filiais->especie_do
   vesp_moe := Filiais->especie_mo
   vcarteir := Filiais->carteira
   vlocalPg := Filiais->localpg
   vmodbol  := Filiais->modbol
   vMensBol1:= Filiais->MensBol1
   vMensBol2:= Filiais->MensBol2   
	vMensBol3:= Filiais->MensBol3            
   vMensBol4:= Filiais->MensBol4
   vMensBol5:= Filiais->MensBol5   
	vMensBol6:= Filiais->MensBol6            
   vMensBol7:= Filiais->MensBol7
   vMensBol8:= Filiais->MensBol8   
	vMensBol9:= Filiais->MensBol9            
	vMensBol10:= Filiais->MensBol10            

   printer oprn DOC "Imprime Boletos "+cTitle preview

   x_1 := oprn:nhorzres()
   y_1 := oprn:nvertres()

   xa := oprn:cmtr2pix(1, 2.5) // Deslocamento
   xb := oprn:cmtr2pix(2, 3.5) // Deslocamento

   y := (xb[1] - xa[1]) / 10
   x := (xb[2] - xa[2]) / 10

   DEFINE FONT oFont NAME "COURIER NEW" SIZE 0,-8 BOLD OF oPrn
   DEFINE FONT oFont1 NAME "COURIER NEW" SIZE 0,-10 OF oPrn BOLD

   nRowStep = oPrn:nVertRes() / 60   // We want 20 rows
   nColStep = oPrn:nHorzRes() / 280   // We want 15 cols

	conta    := 1
	contaBol := 0
   nlBol    := 1.1      // --> Boleto do topo
   //nlBol    := .8      // --> Boleto do topo
   IF vmodbol = 0   
      nlBol := 3.24      // --> Boleto do topo
	ENDIF
	
   CABBOL()

   FOR a := 1 TO oNumBolE 
   
   IF conta > 3 .OR. ( vmodbol = 0 .AND. conta > 1)
   
	   oprn:endpage()     
      conta := 1  
      nlBol := 1.1      // --> Boleto do topo
      //nlBol := .8      // --> Boleto do topo
      
		IF vmodbol = 0   
         nlBol := 3.24      // --> Boleto do topo
	   ENDIF
      
      CABBOL()
      
   ENDIF
	
   SELECT Clientes
   vDoc     := mano[a,1]
   datavenc := mano[a,2]
   valor    := mano[a,3]
   vCod     := mano[a,4]
   vNomeCli := mano[a,5]
   vCpf     := mano[a,6]
   vEndereco:= mano[a,7]
   vPerimetr:= mano[a,8]
   vBairro  := mano[a,9]
   vCidade  := mano[a,10]
   vEstado  := mano[a,11]
   vCep     := mano[a,12]
   vParc    := mano[a,13]
   vnossonm := mano[a,14]
   vdoc_pro := mano[a,15]
   vcodclbo := mano[a,16]
   
   IF AT(vParc,"/") = 0
      vDoc := ALLTRIM(vParc)+"/"+ALLTRIM(vDoc)
   endif   

   IF conta = 1
      nlBarra := 1760
      IF vmodbol = 0
         nlBarra := 4000
		ENDIF
   ELSEIF conta = 2
      nlBarra := 3820
   ELSEIF conta = 3
      nlBarra := 5870
   ENDIF
 
   ACAO()
	
	conta++

   nlBol += 8.7
   
  NEXT

oprn:endpage()

endprint

oFont:END()
oFont1:END()
return(Nil)

FUNCTION VERHISTBOL(aHistBol)
LOCAL oFont 
IF LEN(aHistBol) > 0

   DEFINE FONT oFont  NAME "MS SANS SERIF" SIZE 0,-6
   DEFINE CURSOR oCursor RESOURCE 1
   
	DEFINE DIALOG proccli RESOURCE "histbol" TITLE "Boletos Já Gerados neste Intervalo"

   REDEFINE LISTBOX oBrw FIELDS aHistBol[oBrw:nat,1],aHistBol[oBrw:nat,2],aHistBol[oBrw:nat,3],aHistBol[oBrw:nat,4],aHistBol[oBrw:nat,5],aHistBol[oBrw:nat,6],aHistBol[oBrw:nat,7]; //Dependente->nomedep,Dependente->grau_dep,DTOC(Dependente->datacad);
   HEADERS 'Código','Cliente','Vencimento','Prc','Valor','Nosso Número','Proc. em' ;
   FIELDSIZES 60,236,65,24,45,115,65 ;
   ID 100 OF proccli CURSOR oCursor COLOR nRGB(179,239,255),RGB(0,0,0) UPDATE

   oBrw:SetArray(aHistBol)
   oBrw:REFRESH()
   
   REDEFINE SBUTTON ID 201 OF proccli PIXELS  FONT oFont ;
   PROMPT "Ok" TEXT POSITION 4 ACTION proccli:END()

   ACTIVATE DIALOG proccli CENTER 
   
ENDIF
RETURN (.t.)

STATIC FUNCTION CABBOL()
LOCAL aNumBol                           
		oprn:startpage()
		
		DO CASE 
		   CASE vmodbol = 0
              oPrn:SayBitmap(8,8,fdefa+"\boletoFL.bmp",4410,6190) //,4190,5990)
		   CASE oNumBolE = 1
              oPrn:SayBitmap(8,8,fdefa+"\boleto1.bmp",4410,6190) //,4190,5990)
		   CASE oNumBolE = 2
              oPrn:SayBitmap(8,8,fdefa+"\boleto2.bmp",4410,6190) //,4190,5990)
		   CASE oNumBolE  >= 3		        
		        aNumBol := oNumBolE-contaBol
		        DO CASE
   	   	      CASE aNumBol  >= 3		        	        
                       oPrn:SayBitmap(8,8,fdefa+"\boleto3.bmp",4410,6190) //,4190,5990)
		            CASE aNumBol = 1
                       oPrn:SayBitmap(8,8,fdefa+"\boleto1.bmp",4410,6190) //,4190,5990)
		            CASE aNumBol = 2
                       oPrn:SayBitmap(8,8,fdefa+"\boleto2.bmp",4410,6190) //,4190,5990)
   	   	      CASE vParcelas = 6		        	        
                       oPrn:SayBitmap(8,8,fdefa+"\boleto3.bmp",4410,6190) //,4190,5990)
              ENDCASE
		ENDCASE
		
RETURN nil


******************************************************************
STATIC FUNCTION ACAO()
******************************************************************
vnossonm += '-' + mod11("24"+vnossonm)

prepara()

monta_codigo()


*******************************************************************
*                      Recibo do Sacado                           *
*******************************************************************

IF vmodbol = 0
//oPrn:CmSay(  (nlBol-1.1) ,0.0  , "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ",oFont)
oPrn:CmSay(  (nlBol-0.85) ,06.35 , transform(cod_dig,  '@R 99999.99999 99999.999999 99999.999999 9 99999999999999'),oFont1)
oPrn:CmSay(  (nlBol     ) ,00.94, vEmpr,oFont)
oPrn:CmSay(  (nlBol     ) ,08.74 , vAgenc+"/"+vCeden+"-"+c_digCed,oFont)
oPrn:CmSay(  (nlBol     ) ,12.11 , vesp_doc,oFont)
oPrn:CmSay(  (nlBol     ) ,14.35 , "14/"+vnossonm,oFont)
nlBol+=0.70
oPrn:CmSay(  (nlBol     ) ,00.94, ALLTRIM(vdoc),oFont)
oPrn:CmSay(  (nlBol     ) ,05.98 , vcpf,oFont)
oPrn:CmSay(  (nlBol     ) ,09.57 , DTOC(datavenc),oFont)
oPrn:CmSay(  (nlBol     ) ,16.00 , TRANSFORM(valor,'@E 999,999.99'),oFont)
nlBol+=1.30
oPrn:CmSay(  (nlBol     ) ,00.94, vNomeCli,oFont)
nlBol+=0.60
IF !EMPTY(vMensBol1)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol1,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol2)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol2,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol3)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol3,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol4)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol4,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol5)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol5,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol6)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol6,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol7)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol7,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol8)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol8,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol9)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol9,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol10)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol10,oFont)
   nlBol+=0.20
ENDIF   
ELSEIF vmodbol = 1  
//oPrn:CmSay(  (nlBol-1.1) ,0.0  , "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ",oFont)
oPrn:CmSay(  (nlBol+1.2) ,0.7  , vdoc,oFont)
oPrn:CmSay(  (nlBol+1.8) ,0.7  , DTOC(datavenc),oFont)
oPrn:CmSay(  (nlBol+2.4) ,0.7  , vAgenc+"/"+vCeden+"-"+c_digCed,oFont)
oPrn:CmSay(  (nlBol+3.0) ,0.7  , "24/"+vnossonm,oFont)
oPrn:CmSay(  (nlBol+3.7) ,0.7  , TRANSFORM(valor,'@E 999,999.99'),oFont)
oPrn:CmSay(  (nlBol+7.4) ,0.7  , LEFT(vNomeCli,22),oFont)
ENDIF
*******************************************************************
*                      Ficha de compensação                       *
*******************************************************************
IF vmodbol = 0
nlBol:=9.88
oPrn:CmSay(  (nlBol-0.85),6.35 , transform(cod_dig,  '@R 99999.99999 99999.999999 99999.999999 9 99999999999999'),oFont1)
oPrn:CmSay(  (nlBol    ),00.94 , vlocalPg,oFont)
oPrn:CmSay(  (nlBol    ),16.00 , DTOC(datavenc),oFont)

nlBol+=0.64
oPrn:CmSay(  (nlBol    ),00.94, vEmpr,oFont)
oPrn:CmSay(  (nlBol    ),15.50 , vAgenc+"/"+vCeden+"-"+c_digCed,oFont)

nlBol+=0.70
oPrn:CmSay(  (nlBol    ),00.94 , DTOC(DATE()),oFont)
oPrn:CmSay(  (nlBol    ),03.99 , ALLTRIM(vdoc),oFont)
oPrn:CmSay(  (nlBol    ),08.10 , vesp_doc,oFont)
oPrn:CmSay(  (nlBol    ),09.85 , "NÃO",oFont)
oPrn:CmSay(  (nlBol    ),10.87 , DTOC(vdoc_pro),oFont)
oPrn:CmSay(  (nlBol    ),14.30 , "24/"+vnossonm,oFont)

nlBol+=0.70
oPrn:CmSay(  (nlBol    ),03.99 , vcarteir,oFont)
oPrn:CmSay(  (nlBol    ),06.29 , vesp_moe,oFont)
oPrn:CmSay(  (nlBol    ),16.00 , TRANSFORM(valor,'@E 999,999.99'),oFont)

nlBol+=0.60
IF !EMPTY(vMensBol1)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol1,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol2)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol2,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol3)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol3,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol4)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol4,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol5)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol5,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol6)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol6,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol7)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol7,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol8)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol8,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol9)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol9,oFont)
   nlBol+=0.20
ENDIF   
IF !EMPTY(vMensBol10)
   oPrn:CmSay(  (nlBol    ) ,00.94, vMensBol10,oFont)
   nlBol+=0.20
ENDIF   

//oPrn:CmSay(  (nlBol+5.0),4.0   , IIF(Filiais->imp_parcel,'PARCELA '+vParc,""),oFont)
 nlBol:=15.85

tEndeP := vEndereco+' - '+vBairro+' - '+vCidade+' - '+vEstado+' - '+vcep
//oPrn:CmSay(  (nlBol+5.5),4.8   , "CÓDIGO: "+vcodclbo,oFont) 
oPrn:CmSay(  (nlBol    ),00.94, vNomeCli,oFont)
oPrn:CmSay(  (nlBol    ),13.20 , "CPF/CNPJ: "+vCpf,oFont)
nlBol+=0.20
oPrn:CmSay(  (nlBol    ),00.94, vEndereco,oFont)
oPrn:CmSay(  (nlBol    ),13.20 , "UF: "+VeSTADO,oFont)
oPrn:CmSay(  (nlBol    ),14.60 , "CEP: "+Vcep,oFont)
nlBol+=0.20                                                                                             
oPrn:CmSay(  (nlBol    ),00.94, vBairro,oFont)
oPrn:CmSay(  (nlBol    ),13.20 , "Município: "+vcidade,oFont)

@ nlBarra ,085  int25 cod_barra OF oPrn SIZE 1.1

//nlBol+=5.2
//oPrn:CmSay(  (nlBol    ),00.94, cod_barra,oFont)

ELSEIF vmodbol = 1
//oPrn:CmSay(  (nlBol-0.1),8.4   , transform(cod_dig,  '@R 99999.99999 99999.999999 99999.999999 9 99999999999999'),oFont1)
oPrn:CmSay(  (nlBol+0.1),8.3   , transform(cod_barra,'@R 99999999999999999999999999999999999999999999999'),oFont1)

oPrn:CmSay(  (nlBol+0.8),4.0   , vlocalPg,oFont)
oPrn:CmSay(  (nlBol+0.8),17.3  , DTOC(datavenc),oFont)

oPrn:CmSay(  (nlBol+1.1),4.0   , vEmpr,oFont)
oPrn:CmSay(  (nlBol+1.1),16.9  , vAgenc+"/"+vCeden+"-"+c_digCed,oFont)

oPrn:CmSay(  (nlBol+2.0),4.0   , DTOC(DATE()),oFont)
oPrn:CmSay(  (nlBol+2.0),6.7   , vdoc,oFont)
oPrn:CmSay(  (nlBol+2.0),9.8   , vesp_doc,oFont)
oPrn:CmSay(  (nlBol+2.0),11.7  , "NÃO",oFont)
oPrn:CmSay(  (nlBol+2.0),13.8  , DTOC(vdoc_pro),oFont)
oPrn:CmSay(  (nlBol+2.0),16.0  , "24/"+vnossonm,oFont)

oPrn:CmSay(  (nlBol+2.6),6.6   , vcarteir,oFont)
oPrn:CmSay(  (nlBol+2.6),8.7   , vesp_moe,oFont)
oPrn:CmSay(  (nlBol+2.6),17.3  , TRANSFORM(valor,'@E 999,999.99'),oFont)

// Comentários com espaço de 92 caracteres
oPrn:CmSay(  (nlBol+3.0),4.0   , vMensBol1,oFont)
oPrn:CmSay(  (nlBol+3.2),4.0   , vMensBol2,oFont)
oPrn:CmSay(  (nlBol+3.4),4.0   , vMensBol3,oFont)
oPrn:CmSay(  (nlBol+3.6),4.0   , vMensBol4,oFont)
oPrn:CmSay(  (nlBol+3.8),4.0   , vMensBol5,oFont)
oPrn:CmSay(  (nlBol+4.0),4.0   , vMensBol6,oFont)
oPrn:CmSay(  (nlBol+4.2),4.0   , vMensBol7,oFont)
oPrn:CmSay(  (nlBol+4.4),4.0   , vMensBol8,oFont)
oPrn:CmSay(  (nlBol+4.6),4.0   , vMensBol9,oFont)
oPrn:CmSay(  (nlBol+4.8),4.0   , vMensBol10,oFont)
oPrn:CmSay(  (nlBol+5.0),4.0   , IIF(Filiais->imp_parcel .AND. AT(vParc,"/") > 0,'PARCELA '+vParc,""),oFont)

tEndeP := vEndereco+' - '+vBairro+' - '+vCidade+' - '+vEstado+' - '+vcep
oPrn:CmSay(  (nlBol+6.4),4.8   , "CÓDIGO: "+vcodclbo,oFont) 
oPrn:CmSay(  (nlBol+5.7),4.8   , vNomeCli+' - '+vCpf,oFont)
oPrn:CmSay(  (nlBol+5.9),4.8   , LEFT(tEndeP,80),oFont)
oPrn:CmSay(  (nlBol+6.1),4.8  , IIF( LEN(tEndeP) > 80,ALLTRIM(SUBST(tEndep,81,40))+" - ","")+vPerimetr,oFont)

@ nlBarra ,872  int25 cod_barra OF oPrn SIZE 1.1
ENDIF
contaBol++

return(Nil)

***
*** Calcula Módulo 10
***
**************************************************
STATIC function mod10(q_num)
**************************************************
local x1, x2, x3, x4, x5, x6, x7
if empty(q_num)
   return('X')
end
x1 := len(q_num)
x2 := right(_mod10, x1)
x3 := 0
for x4 := 1 to x1
   x5 := val(substr(q_num, x4, 1)) * val(substr(x2, x4, 1))
   x6 := strzero(x5, 2)
   x7 := val(left(x6, 1)) + val(right(x6, 1))
   x3 += x7
next
x5 := int(x3 / 10)
x7 := x3 - (x5 * 10)
x2 := str(iif(x7 = 0, 0, 10 - x7), 1)
return(x2)

***
*** Calcula Módulo 11
***
*************************************************
STATIC function mod11(q_num,ff)
*************************************************
local x1, x2, x3, x4, x5, x6, x7
if empty(q_num)
   return('X')
end
x1 := len(q_num)
x2 := right(_mod11, x1)
x3 := 0
for x4 := 1 to x1
   x5 := val(substr(q_num, x4, 1)) * val(substr(x2, x4, 1))
   x3 += x5
next

x5 := int(x3 / 11)
x7 := x3 - (x5 * 11)
t:=x7
DO CASE
   CASE x7 <= 1              
       IF ff != NIL
          x2 := str( 1, 1)
			 ELSE
          x2 := str( 0, 1)
       ENDIF
   CASE x7 >  9   
       x2 := str( 1, 1)
   OTHER
       x2 := str( 11 - x7, 1)
ENDCASE

return(x2)
*****************************************************************************************
STATIC function mod11X(q_num)
*****************************************************************************************
local x1, x2, x3, x4, x5, x6, x7
if empty(q_num)
   return('X')
end
x1 := len(q_num)
x2 := right(_mod11, x1)
x3 := 0
for x4 := 1 to x1
   x5 := val(substr(q_num, x4, 1)) * val(substr(x2, x4, 1))
   x3 += x5
next

x5 := int(x3 / 11)
x7 := x3 - (x5 * 11)
g:=x7
//x2 := str(iif(x7 <= 1 , 0, 11 - x7), 1)
x2 := str(iif(x7 <= 1 .or. x7 > 9, 0, 11 - x7), 1)

return(x2)

***
***
*****************************************************************************************
STATIC function monta_codigo
*****************************************************************************************
local xcod, xbarra

xbarra := '1049' // Código do Banco + Moeda (9 - Real)
xbarra += f_venc // Fator de Vencimento
xbarra += v_docum // Valor do Documento
xbarra += c_livre // Campo Livre
dv_codb := mod11(xbarra,1) //
xbarra := stuff(xbarra, 5, 0, dv_codb) // Digito Verificador Geral Código de Barras

xcod := '1049' + substr(c_livre, 1, 5)
xcod += mod10(xcod) // 1o. campo
xcod += substr(c_livre, 6, 10) + mod10(substr(c_livre, 6, 10)) // 2o. campo
xcod += substr(c_livre, 16, 10) + mod10(substr(c_livre, 16, 10)) // 3o. campo
xcod += dv_codb // 4o. campo (digito verificador geral do código de barra)
xcod += f_venc // 5o. campo (1/2)
xcod += v_docum // 5o. campo (2/2)

cod_dig   := xcod
cod_barra := xbarra

return(Nil)

***
*** Calcula o fator de vencimento
*** Monta Valor Documento
*** Monta Campo Livre
***
*****************************************************************************************
STATIC function prepara
*****************************************************************************************
f_venc  := strzero(datavenc - ctod('07/10/1997'), 4)
v_docum := strzero(valor * 100, 10)
c_digCed:= mod11(vCeden) // Dígto cedente  
c_livre := ALLTRIM(vCeden)+c_digCed+SUBST(vnossonm,1,3)+"2"+SUBST(vnossonm,4,3)+"4"+SUBST(vnossonm,7,9)
c_digLiv:= mod11(c_livre)  // Digito campo livre
c_livre := c_livre+c_digLiv
return(Nil)

Antigão mas da uma olhada blz!

Abraços 

Link to comment
Share on other sites

Amiguinhos,

kapiaba muitas das informações contidas num boleto podem sesr automatizadas quando voce fecha o pedido e lança as parcelas financeiras no seu arquivo financeiro.

Numa tela como esta você pode apresentar os dados de um boleto existente para possível complemento de informação. 

Para cadastro, imagine que fuçuários são preguicosos ao ponto de terem pavor de preencher estes documentos.

Não sei se você vai colocar uma imagem de um boleto vazio como fundo desta tela, ficaria legal pois o boleto wysewyg ficaria perfeito na apresentação pré-impressão. e muitos dos campos ai teriam de ser suportados por combos para prevenir preguiça(erros de preenchimento) e invalidação do boleto.

Não cheguei a completar a compilação do trecho que o Ladinilson postou para verificar a saida final, mas antes de criar a tela, programe a impressão com dados da empresa e proceda a homologação. Passando pela homologação junto ao banco(homologação: nome bonito que define: Você ir até um banco, enfrentar fila, pagar um boleto e o caixa lhe responder que o boleto é inválido ou não).

Resumindo, acrescente a opção de Emitir Boleto deste Registro? e complete internamente todos os campos necessários e gere a impressão. Tudo ok? cliente satisfeito? fuçonários felizes, ai pare com tempo, abra uma breja, pegue um torresminho e começe a desenhar a tela.

Alguns Fuçuário são chatos o bastante pra colocar tanta exigência que se um sistema pudesse ser baseado no que eles querem ver o sistema teria apenas uma dialogo e um botão no meio dizendo:

Aperte aqui que eu faço o Resto.

Link to comment
Share on other sites

5 minutos atrás, rochinha disse:

Amiguinhos,

kapiaba muitas das informações contidas num boleto podem sesr automatizadas quando voce fecha o pedido e lança as parcelas financeiras no seu arquivo financeiro.

Numa tela como esta você pode apresentar os dados de um boleto existente para possível complemento de informação. 

Para cadastro, imagine que fuçuários são preguicosos ao ponto de terem pavor de preencher estes documentos.

Não sei se você vai colocar uma imagem de um boleto vazio como fundo desta tela, ficaria legal pois o boleto wysewyg ficaria perfeito na apresentação pré-impressão. e muitos dos campos ai teriam de ser suportados por combos para prevenir preguiça(erros de preenchimento) e invalidação do boleto.

Não cheguei a completar a compilação do trecho que o Ladinilson postou para verificar a saida final, mas antes de criar a tela, programe a impressão com dados da empresa e proceda a homologação. Passando pela homologação junto ao banco(homologação: nome bonito que define: Você ir até um banco, enfrentar fila, pagar um boleto e o caixa lhe responder que o boleto é inválido ou não).

Resumindo, acrescente a opção de Emitir Boleto deste Registro? e complete internamente todos os campos necessários e gere a impressão. Tudo ok? cliente satisfeito? fuçonários felizes, ai pare com tempo, abra uma breja, pegue um torresminho e começe a desenhar a tela.

Alguns Fuçuário são chatos o bastante pra colocar tanta exigência que se um sistema pudesse ser baseado no que eles querem ver o sistema teria apenas uma dialogo e um botão no meio dizendo:

Aperte aqui que eu faço o Resto.

rsrsrsrs a última frase é fantástica, além de verdadeira é claro.

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...