PRG do arquivo TXT da EFD

Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)

Moderador: Moderadores

JUDIVAN CONTABIL
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 20 Mai 2011 07:42
Localização: IMACULADA-PB

PRG do arquivo TXT da EFD

Mensagem por JUDIVAN CONTABIL »

Estou desenvolvendo o prg do arquivo txt da efd em clipper 5.2, estou com dificuldades, gostaria de algumas dicas para concluir o prg.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

PRG DO ARQUIVO TXT DA EFD

Mensagem por alxsts »

Olá!

Poderia ser mais claro?

Quais dificuldades está tendo? Quais dicas precisa?

Informe detalhes para que os colegas possam analisar e propor soluções. Use o recurso de busca do fórum.
[]´s
Alexandre Santos (AlxSts)
JUDIVAN CONTABIL
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 20 Mai 2011 07:42
Localização: IMACULADA-PB

PRG DO ARQUIVO TXT DA EFD

Mensagem por JUDIVAN CONTABIL »

Estou desenvolvendo o prg da SEFD, do arquivo txt, em clipper 5.2, estou com algumas dificuldades e gostaria de ajuda dos colegas: as duvidas são:
o exemplo do arquivo txt é mais ou menos assim:
|0000|204|0|01052011|31052011|ARMSTRONG BRASIL EQUIPAMENTOS IND.LTDA|00258807000129||SP|206084839119|3550308|||B|0|1
|0001|0|
|0005|ARMSTRONG BRASIL EQUIPAMENTOS IND.LTDA|42810000|R.BENZENO|S/N||COPEC||||
|0100|MARCIA APARECIDA|38558505853|4431694||04369000|BRIGADEIRO TOBIAS|3333||Paia Grande|31776764 |||3550308|
|0150|3147F|CONFEROL COMERCIAL DE FERRAMENTAS E PRODUTOS INDUSTRIAIS LTDA|01058|02435456000100|||2927408||RUA BARAO DE COTEGIPE, N. 169||CALCADA|CALCADA|
|0190|un|Unidade|
|0200|AD42900001|Segurança e sinalização - misc.|||un|99|00000000||00||17|
|0400|E04.09|USO OU CONSUMO|
|0460|252486|VL IPI:19,07|
|0990|10|
o registro 0990 refere-se a soma dos arquivos acima, existe a dificuldade como fazer esta soma, tabem colocar essa | que tem nos registgros do efd.
continuando o exemplo, vem os totais abaixo:
|1990|3|
|9001|0|
|9900|0000|1|
|9900|0001|1|
|9900|0005|1|
|9900|0100|1|
|9900|0150|1|
|9900|0190|1|
|9900|0200|1|
|9900|0400|1|
|9900|0460|1|
|9900|0990|1|
|9900|C001|1|
|9900|C100|1|
|9900|C120|1|
|9900|C140|1|
|9900|C141|2|
|9900|C170|2|
|9900|C190|1|
|9900|C195|1|
|9900|C990|1|
|9900|D001|1|
|9900|D990|1|
|9900|E001|1|
|9900|E100|1|
|9900|E110|1|
|9900|E111|2|
|9900|E500|1|
|9900|E510|57|
|9900|E520|1|
|9900|E990|1|
|9900|H001|1|
|9900|H005|1|
|9900|H010|1|
|9900|H990|1|
|9900|1001|1|
|9900|1100|1|
|9900|1990|1|
|9900|9001|1|
|9900|9900|40|
|9900|9990|1|
|9900|9999|1|
|9990|43|
|9999|138|
que é totlizando os registros, essas sao as duvidas.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

PRG DO ARQUIVO TXT DA EFD

Mensagem por alxsts »

Olá!

Neste tipo de programa não tem muito segredo. É só seguir estritamente o que pede o layout do arquivo. Claro que você precisará ter na tua base de dados as informações que devem constar no arquivo texto que vai gerar.

Não sei qual é o teu nível de conhecimento na liguagem Clipper. O conhecimento necessário é basicamente concatenação de strings, conversão de tipos, busca em arquivos (DbSeek() e aritmética simples. Claro que conhecimento em programação será necesário.

Normalmente, neste tipo de programa, ocorrem os seguintes passos:
- abertura dos arquivos de entrada necessários
- abertura do arquivo texto de saída. Normalmente usa-se a função FCreate()
- criação do registro header (cabeçalho) do arquivo. A linha gerada tem que ficar no formato daquela que você colocou no teu exemplo:
"|0000|204|0|01052011|31052011|ARMSTRONG BRASIL EQUIPAMENTOS IND.LTDA|00258807000129||SP|206084839119|3550308|||B|0|1|0001|0|"
- Loop na tabela principal e geração das linhas de detalhe
- Geração do registro final (rodapé ou footer)
Veja um esboço:

Código: Selecionar todos

PROCEDURE GeraTxt()

   LOCAL nHandle, cLinha
   
   // Abrir os arquivos de antrada
   
   // abrir o arquivo de saida
   If ( nHandle := FCreate( "Saida.Txt" ) ) <=0
      Alert( "Falha na criacao do arquivo de saida" )
   Else
      // gerar o cabeçalho do arquivo
      If GeraHeader()
         // percorrer a tabela principal, gravando as linhas de dealhe do arquivo
         WHILE Tabela->( ! Eof() )
      
            // formatar linha
            cLinha := GeraLinha()
            
            // aqui você já terá que ir somando os campos que precisa
            
            
            // gravar a linha
            If ! Gravar( cLinha )
               EXIT
            Endif   
         ENDDO
         
         // final do arquivo... gerar o registro footer (rodapé)
         
         cLinha := cSep + "0990" + cSep
         cLinha += demais campos
   Endif
   
   DbCloseAll()
   
   If nHandle > 0
      FClose( nHandle )
   Endif
   
   RETURN
//------------------------------------------------------------------------------
STATIC FUNCTION GeraHeader()

   LOCAL cString, lRet
   
   // inicializa a string com o separador de campos conforme o teu layout
   cString := cSep
   // daqui em diante, você terá que ir acrescentando os demais campos, um a um e o separador
   // tem que ver no manual o que tem que gravar em cada campo.
   // Lembre-se que o arquivo de saída é texto. Se o campo do teu arquivo é numérico ou data,
   // precisará ser convertido para caracter. Use as funções Transform(), Str(), DtoS() confome necessário
   cString += "0000" + cSep
   cString += "204" + cSep
   
   lRet := Gravar()
   
   RETURN lRet
//------------------------------------------------------------------------------
STATIC FUNCTION GeraLinha()

   LOCAL cString
   
   // comandos para formatar uma linha
   
   RETURN cString
//------------------------------------------------------------------------------
STATIC FUNCTION Gravar( cString )

   // gravar uma linha no arquivo texto
   
   LOCAL lRet
   
   // comandos para gravar uma linha no txt
   
   If ! lRet
      Alert( "Falha de gravação..." )
   Endif
         
   RETURN lRet
//------------------------------------------------------------------------------

Veja o tópico Exportar dados usando 2 ou mais dbf´s para um exemplo mais detalhado.

Boa sorte
[]´s
Alexandre Santos (AlxSts)
JUDIVAN CONTABIL
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 20 Mai 2011 07:42
Localização: IMACULADA-PB

PRG do arquivo TXT da EFD

Mensagem por JUDIVAN CONTABIL »

Olá
Bom dia

desculpe a existencia, montar este arquivo, achado complicado, gostaria de ajuda, abaixo as tabelas que eu uso e o arquivo txt da efd, mans ou menos como deve ficar.

Código: Selecionar todos

SELECT CONFIG

 vreg:="0000"
 vcod_ver:=cod_ver
 vcod_fin:=cod_fin
 vDT_INI:=vDataI
 vDT_FIN:=VdataF 
 vNOME:=RAZAO
 vCNPJJ:=STRTRAN(CGC,".","")
 vCNPJJ:=STRTRAN(vCNPJJ,"/","")
 vCNPJJ:=STRTRAN(vCNPJJ,"-","")
 vCPF:="0"
 vUF:=UF
 vINSCESTA:=STRTRAN(IE,".","")
 vINSCESTA:=STRTRAN(vINSCESTA,"/","")
 vINSCESTA:=STRTRAN(vINSCESTA,"-","")
 vCOD_MUN:=COD_MUNI
 vIM:="|" // INSCRICAO MUNICIPAL DA ENTIDADE
 vSUFRAMA:="|" // INSCRICAO DA ENTIDADE NA SUFRAMA
 vIND_PERFIL:=IND_PERFIL // Perfil de apresentacao do arquivo fiscal, A-Perfil A;B-perfil B; C-perfil C
 vIND_ATIV:=IND_ATIV // Indicador tipo de atividade: 0-industrial ou equiparado a industrial e 1-outros

SELECT REG0000

IF LASTREC()=0
 APPEND BLANK
ENDIF
        
REPL REG WITH vREG,;
     COD_VER WITH vCOD_VER,;
     COD_FIN WITH vCOD_FIN,;
     DT_INI WITH vDT_INI,;
     DT_FIN WITH vDT_FIN,;
     NOME WITH vNOME,;
     CNPJJ WITH vCNPJJ,;
     CPF WITH vCPF,;
     UF WITH vUF,;
     INSCESTA WITH vINSCESTA,;
     COD_MUN WITH vCOD_MUN,;
     IM WITH vIM,;
     SUFRAMA WITH vSUFRAMA,;
     IND_PERFIL WITH vIND_PERFIL,;
     IND_ATIV WITH vIND_ATIV

SELECT CONFIG
 SKIP
ENDDO
********************************************
SELE CONFIG
vREG0001:="0001"
vIND_MOV:="0"

SELE REG0001
IF LASTREC()=0
 APPEND BLANK
ENDIF
REPL REG0001 WITH vREG0001,;
     IND_MOV WITH vIND_MOV
SELECT CONFIG
 SKIP
ENDDO
********************************************
SELE CONFIG
vREG0005:="0005"
vFANTASIA:=RAZAO
vCEP:=STRTRAN(CEP,".","")
vCEP:=STRTRAN(vCEP,"/","")
vCEP:=STRTRAN(vCEP,"-","")
vEND:=ENDERECO
vNUM:=NUMERO
vCOMPL:=COMPLEM
vBAIRRO:=BAIRRO
vFONE:=FONE
vFAX:="|"
vEMAIL:=E_MAILS

SELE REG0005
IF LASTREC()=0
 APPEND BLANK
ENDIF
REPL REG0005 WITH vREG0005,;
     FANTASIA WITH vFANTASIA,;
     CEP WITH vCEP,;
     END WITH vEND,;
     NUM WITH vNUM,;
     COMPL WITH vCOMPL,;
     BAIRRO WITH vBAIRRO,;
     FONE WITH vFONE,;
     FAX WITH vFAX,;
     EMAIL WITH vEMAIL

SELECT CONFIG

 SKIP
ENDDO
********************************************
SELE CONFIG
vREG:="0100"
vNOME:=NOME_CON
vCPF:=CPF_CGC
vCRC:=REG
vCNPJ:="|"
vCEP:=STRTRAN(CEP_CONT,".","")
vCEP:=STRTRAN(vCEP,"/","")
vCEP:=STRTRAN(vCEP,"-","")
vEND:=END_CONT
vNUM:=NUM_CONT
vCOMPL:=COMPL_CONT
vBAIRRO:=BAIRO_CONT
vFONE:=FONE
vFAX:="|"
vE_MAIL:=E_MAIL
vCOD_MUN:=COD_MUNI

SELE REG0100
IF LASTREC()=0
 APPEND BLANK
ENDIF
REPL REG WITH vREG,;
     NOME WITH vNOME,;
     CPF WITH vCPF,;
     CRC WITH vCRC,;
     CNPJ WITH vCNPJ,;
     CEP WITH vCEP,;
     END WITH vEND,;
     NUM WITH vNUM,;
     COMPL WITH vCOMPL,;
     BAIRRO WITH vBAIRRO,;
     FONE WITH vFONE,;
     FAX WITH vFAX,;
     E_MAIL WITH vE_MAIL,;
     COD_MUN WITH vCOD_MUN

SELECT CONFIG

 SKIP
ENDDO
********************************************
SELECT ENTRADA

vTotreg0000+=1
vREG:="0150"
vCOD_PART:=STRTRAN(CNPJ_CPF,".","")
vCOD_PART:=STRTRAN(vCNPJ,"/","")
vCOD_PART:=STRTRAN(vCNPJ,"-","")
vNOME:=R_SOCIAL
vCOD_PAIS:="|"
vCNPJ:=STRTRAN(CNPJ_CPF,".","")
vCNPJ:=STRTRAN(vCNPJ,"/","")
vCNPJ:=STRTRAN(vCNPJ,"-","")
vCPF:="|"
vIE:=STRTRAN(INSC_EST,".","")
vCOD_MUN:="0000000"
vSUFRAMA:="|"
vEND:="|"
vNUM:="|"
vCOMPL:="|"
vBAIRRO:="|"

SELE REG0150
       If (Adireg(0))
REPL REG WITH vREG,;
     COD_PART WITH vCOD_PART,;
     NOME WITH vNOME,;
     COD_PAIS WITH vCOD_PAIS,;
     CNPJ WITH vCNPJ,;
     CPF WITH vCPF,;
     IE WITH vIE,;
     COD_MUN WITH vCOD_MUN,;
     SUFRAMA WITH vSUFRAMA,;
     END WITH vEND,;
     NUM WITH vNUM,;
     COMPL WITH vCOMPL,;
     BAIRRO WITH vBAIRRO
 SELECT ENTRADA
 SKIP
          Unlock
       Endif
ENDDO
********************************************
SELECT CONFIG
vREG:="0190"
vUNID:="01"
vDESCR:="unidade"

SELE REG0190
       If (Adireg(0))
REPL REG WITH vREG,;
     UNID WITH vUNID,;
     DESCR WITH vDESCR

SELECT CONFIG
 SKIP
     Endif
ENDDO
********************************************
para formar esse arquivo txt:

|0000|004|0|01042011|30042011|GENIVAL FRANCISCO DE OLIVEIRA|11453139000107||PB|161145795|2500106|||A|1|
|0001|0|
|0005|GENIVAL FRANCISCO DE OLIVEIRA|58748000|R JOSE BARBOSA|23||CENTRO|0083348210||judivanc ... uol.com.br|
|0100|FRANCISCO JUDIVAN RAMALHO FERREIRA|49179250459|PB004267O7||58748000|RUA VEREADOR ROLDAO LOPES FERNANDES|09||CENTRO|0083348210||judiva ... uol.com.br|2500106|
|0150|01396747000173|CASA NORTE LTDA||08713513000828||161505945|||||||
|0150|01396747000173|CASA NORTE LTDA||08713513000828||161505945|||||||
|0190|01|unidade|
|0990|8|
|C001|1|
|C990|2|
|D001|1|
|D990|2|
|E001|1|
|E990|2|
|G001|1|
|G990|2|
|H001|1|
|H990|2|
|1001|1|
|1990|2|
|9001|0|
|9900|0000|1|
|9900|0001|1|
|9900|0005|1|
|9900|0100|1|
|9900|0150|2|
|9900|0190|1|
|9900|0990|1|
|9900|C001|1|
|9900|C990|1|
|9900|D001|1|
|9900|D990|1|
|9900|E001|1|
|9900|E990|1|
|9900|G001|1|
|9900|G990|1|
|9900|H001|1|
|9900|H990|1|
|9900|1001|1|
|9900|1990|1|
|9900|9001|1|
|9900|9900|23|
|9900|9990|1|
|9900|9999|1|
|9990|26|
|9999|46|

Agradeço pela ajuda.
Editado pela última vez por anacatacombs em 26 Mai 2011 08:25, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Responder