Jump to content
Fivewin Brasil

Arquivo remessa


Luiz Fernando

Recommended Posts

Pessoal alguém aqui gera arquivo remessa com muitos registro , neste exato momento faz uma hora(AINDA NÃO TERMINOU) que estou esperando para gerar uma remessa de 3700 boletos, apenas gravar o arquivo txt sem envolvimento com tabelas

vejam o codigo 

        oFile1 = TTxtFile():New( cPath1+"BOLETO\REMESSA\"+marqui )
    	  wlin='0'                                   // 001 a 001
    	  wlin+='1'                                  // 002 a 002
    	  wlin+='REMESSA'                            // 003 a 009
    	  wlin+='01'                                 // 010 a 011
        wlin+='COBRANÇA'+space(7)                  // 012 a 026
        wlin+='00330221756203300152'               // 027 a 046
        wlin+='EMPRESA TESTE TESTE TESTE TEST'     // 047 a 076
        wlin+='033'                                // 077 a 079
        wlin+='SANTANDER'+space(6)                 // 080 a 094
        wlin+=strzero(day(date()),2)+strzero(month(date()),2)+RIGHT(STR(YEAR(date()),4),2)  // 095 a 100
        wlin+=repl('0',16)                         // 101 a 116
		  wlin+=space(47)                            // 117 a 163
		  wlin+=space(47)                            // 164 a 210
		  wlin+=space(47)                            // 211 a 257
		  wlin+=space(47)                            // 258 a 304
		  wlin+=space(47)                            // 305 a 351
		  wlin+=space(34)                            // 352 a 385
		  wlin+=space(6)                             // 386 a 391
		  wlin+='044'                                // 392 a 394
		  wlin+=strzero(nRegistro,6)+chr(13)+chr(10) // 395 a 400
		  oFile1:PutStr( wlin )
        for i=1 to len(aBoleto)
          nVMulta:=0
          nVMulta:=round((aBoleto[i,5]*aCarteira[11])/100,2)
          oBoleto := oCBX:DocumentosCobranca:Add()
          oBoleto:NossoNumero := aBoleto[i,2]
          oCBX:calcularDadosBoletos()          
          oCBX:GravaArquivoRemessa()
          nNosso:=substr(oBoleto:NossoNumero,6,8)   
		  	 wlin='1'                                  // 001 a 001
          wlin+='02'                                // 002 a 003
          wlin+=R_CnpjLienar(aCarteira[20])         // 004 a 017  tratar
          wlin+='0036'                              // 018 a 021  tratar
          wlin+='02237522'                          // 022 a 029  tratar
			 wlin+='02300372'                          // 030 a 037  tratar
   		 wlin+=aBoleto[i,4]+space(15)              // 038 a 062
			 wlin+=nNosso                              // 063 a 070
          wlin+='000000'                            // 071 a 076
          wlin+=space(1)                            // 077 a 077
          wlin+='0'                                 // 078 a 078 
          wlin+='0000'                              // 079 a 082
          wlin+='00'                                // 083 a 084
          wlin+=repl('0',13)                        // 085 a 097
          wlin+=space(4)                            // 098 a 101
          wlin+='000000'                            // 102 a 107
          wlin+='5'                                 // 108 a 108
          wlin+='01'                                // 109 a 110
          wlin+=aBoleto[i,4]                        // 111 a 120
          wlin+=strzero(day(aBoleto[i,10]),2)+strzero(month(aBoleto[i,10]),2)+RIGHT(STR(YEAR(aBoleto[i,10]),4),2) // 121 a 126
		    wlin+=strzero(aBoleto[i,5]*100,13)        // 127 a 139
			 wlin+='033'                               // 140 a 142
			 wlin+='00000'                             // 143 a 147
			 wlin+='05'                                // 148 a 149
			 wlin+='N'                                 // 150 a 150
          wlin+=strzero(day(aBoleto[i,9]),2)+strzero(month(aBoleto[i,9]),2)+RIGHT(STR(YEAR(aBoleto[i,9]),4),2)    // 151 a 156
			 wlin+='00'                                // 157 a 158
			 wlin+='00'                                // 159 a 160
          wlin+=strzero(nVMulta*100,13)             // 161 a 173
			 wlin+='000000'                            // 174 a 179
			 wlin+=repl('0',13)                        // 180 a 192
			 wlin+=repl('0',13)                        // 193 a 205
			 wlin+=repl('0',13)                        // 206 a 218
			 if len(alltrim(aBoleto[i,20])) <= 14      // 219 a 220
			    wlin+='01'
			 else
			    wlin+='02'
			 endif
			 wlin+=R_CnpjLienar(aBoleto[i,20])         // 221 a 234
			 wlin+=aBoleto[i,8]                        // 235 a 274 
			 wlin+=aBoleto[i,12]                       // 275 a 314
			 wlin+=padr(aBoleto[i,15],12)              // 315 a 326
			 wlin+=substr(aBoleto[i,18],1,5)           // 327 a 331
			 wlin+=substr(aBoleto[i,18],7,3)           // 332 a 334
			 wlin+=substr(aBoleto[i,16],1,15)          // 335 a 349
			 wlin+=aBoleto[i,17]                       // 350 a 351
			 wlin+=space(30)                           // 352 a 381
			 wlin+=space(1)                            // 382 a 382
			 wlin+='I'                                 // 383 a 383
			 wlin+='90'                                // 384 a 385   tratar
			 wlin+=space(6)                            // 386 a 391
			 wlin+='00'                                // 392 a 393
			 wlin+=space(1)                            // 394 a 394
          nRegistro++
			 wlin+=strzero(nRegistro,6)+chr(13)+chr(10) // 395 a 400
  		    oFile1:PutStr( wlin )
  		    nTotal+=aBoleto[i,5]
		  next
		  nRegistro++
		  wlin='9'
		  wlin+=strzero(nRegistro,6)
        wlin+=strzero(nTotal*100,13)
		  wlin+=repl('0',374)
		  wlin+=strzero(nRegistro,6)+chr(13)+chr(10)
  	     oFile1:PutStr( wlin )
        oFile1:End()

 

   

Link to comment
Share on other sites

Ola, Bom dia

 

Como o arquivo envolvido vai ficando muito grade, por que voce não gera esse arquivo por registros, exemplo, a cada 500 boletos, voce regra um arquivo de remessa, creio que ficaria muito mais rápido, ou voce pode usar o proprio Mysql pra isso, digo isso pois quando EU gerava o arquivo de SPED CONTRIBUIÇÃO consolidado e são 22 filiais e arquivo ficava monstruoso o numero de linhas, ai resolvi fazer o proprio Mysql gerar o TXT, ai ficou só o peido... rápidão...

 

é assim que faço em Mysql:

Select dados_1 FROM tempo2 ORDER BY sequencia, sr_recno into outfile '"+Alltrim(oSystema:Caminho_Sped_Fiscal)+"/"+cNomeDestino+"' LINES TERMINATED BY '\r\n';

 

Espero ter ajudado.

Link to comment
Share on other sites

 

Ola, Bom dia

 

Como o arquivo envolvido vai ficando muito grade, por que voce não gera esse arquivo por registros, exemplo, a cada 500 boletos, voce regra um arquivo de remessa, creio que ficaria muito mais rápido, ou voce pode usar o proprio Mysql pra isso, digo isso pois quando EU gerava o arquivo de SPED CONTRIBUIÇÃO consolidado e são 22 filiais e arquivo ficava monstruoso o numero de linhas, ai resolvi fazer o proprio Mysql gerar o TXT, ai ficou só o peido... rápidão...

 

é assim que faço em Mysql:

Select dados_1 FROM tempo2 ORDER BY sequencia, sr_recno into outfile '"+Alltrim(oSystema:Caminho_Sped_Fiscal)+"/"+cNomeDestino+"' LINES TERMINATED BY '\r\n';

 

Espero ter ajudado.

Jackson obrigado pelo retorno, na verdade estes boleto são gerados de uma unica vez e precisa estar no mesmo arquivo remessa, pois ele tem uma sequencia obrigadoria, e o mesmo vai para grafica do banco para eles fazer a impressão por la, tipo agora tenho um lote aqui de 19.962 boletos, se eu gerar o arquivo remessa da forma convencional que costumo geral, vai levar 20 horas, preciso achar um macete.

 

obg

Luiz Fernando

Link to comment
Share on other sites

Usa MultiThread, tipo pegando a ideia do colega miragerr de gerar por partes, faz isso mas pro mesmo arquivo via Thread, ai vc usa mais processadores pra mesma tarefa...

Kkkk isso é uma ideia nem sei se tem como fazer, talvez tenha, pq MultiTrhead é um conceito q existe no Harbour, e jogar pro mesmo arquivo como percebi vc joga pro objeto então se passar esse objeto como parâmetro/referencia vai carregando ele.. será q não dá certo?

Link to comment
Share on other sites

 

Usa MultiThread, tipo pegando a ideia do colega miragerr de gerar por partes, faz isso mas pro mesmo arquivo via Thread, ai vc usa mais processadores pra mesma tarefa...

Kkkk isso é uma ideia nem sei se tem como fazer, talvez tenha, pq MultiTrhead é um conceito q existe no Harbour, e jogar pro mesmo arquivo como percebi vc joga pro objeto então se passar esse objeto como parâmetro/referencia vai carregando ele.. será q não dá certo?

Colega falei com Jackson em off, não tenho como extrair todos dados dentro de um SELECT preciso percorrer mesmo por uma array e montar o arquivo, o lance de quebrar não adianta muito, pois tentei com 1mil e demora proporcional a mesma coisa.

Link to comment
Share on other sites

Pessoal meu problema estava aqui

oBoleto := oCBX:DocumentosCobranca:Add()
          oBoleto:NossoNumero := aBoleto[i,2]
          oCBX:calcularDadosBoletos()          
          oCBX:GravaArquivoRemessa()
          nNosso:=substr(oBoleto:NossoNumero,6,8)   

a cada boleto eu estava usando o recurso da cobrebem para gerar o digito do nosso numero

 

fiz o calculo direto no select

  cSql:=" SELECT boleto,CASE(11-"
  cSql+=" MOD(((SUBSTRING(boleto,1,1)*7)+(SUBSTRING(boleto,2,1)*6)+(SUBSTRING(boleto,3,1)*5)+(SUBSTRING(boleto,4,1)*4)+(SUBSTRING(boleto,5,1)*3)+(SUBSTRING(boleto,6,1)*2)),11))"
  cSql+=" WHEN 0 THEN '0' WHEN 1 THEN '1' WHEN 2 THEN '2' WHEN 3 THEN '3' WHEN 4 THEN '4' WHEN 5 THEN '5' WHEN 6 THEN '6' WHEN 7 THEN '7' WHEN 8 THEN '8' WHEN 9 THEN '9' WHEN 10 THEN '0' WHEN 11 THEN '0' END AS 'mod/11'"
  cSql+=" FROM boleto"
 

agora gera o arquivo em 40 segundos

 

Obigrado a todos

Luiz Fernando

 

 

Link to comment
Share on other sites

 

Ola...Boa noite

Voce gerou o arquivo pelo MYSQL ?

Sim Jackson, na hora que gero boleto eu não gravo o digito do nosso numero, dai na hora de gerar o arquivo remessa uso a função da cobrebem, pelo manual do banco vi que o calculo era simples, dai gerei um select que me traz o numero do boleto e já faz o calculo do digito do nosso numero no proprio select conforme o código acima.

 

Abs

 

Luiz Fernando

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...