duplicidade

Fórum sobre a linguagem CA-Clipper.

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

duplicidade

Mensagem por JUDIVAN CONTABIL »

olá, Pessoal

Estou aqui novamente para peder ajuda. Estou desenvolvendo a rotina para o bloco 0150 do sped, só que quando mando criar o arquivo txt, esta gerando o arquivo em duplicidade, como exemplo abaixo:
|0150|77941490019506|GAZIN IND.COM.DE MOVEIS E ELET. LTDA.|1058|77941490019506||161630987|||R JOSE PEDRO FIRMINO|33|||
|0150|77941490019506|GAZIN IND.COM.DE MOVEIS E ELET. LTDA.|1058|77941490019506||161630987|||R JOSE PEDRO FIRMINO|33|||
gostaria de ajuda para quando gerar esse arquivo gerar apenas com um participante.

Agradece

Judivan
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

duplicidade

Mensagem por Clipper »

Prezado Colega

Seria possível você postar a parte do programa onde gera o TXT ? Porque sem isso fica difícil ajudá-lo.

Até logo.

Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
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

duplicidade

Mensagem por JUDIVAN CONTABIL »

Código: Selecionar todos

Static Function MontaBloco0_Reg150()
/*  Monta os registros com Base na lLista    e Retorna a quantidade de Registros*/
Local x ,nOk := 0
SELECT ENTRADA
GO TOP
SEEK M->vMes
DO WHILE (PERIODO=M->vMes)
nOk++         
Reg       := "0150"         
Codpart   := STRZERO(Val(LimpaStr(ENTRADA->CNPJ_CPF)),14)
Nome      := Alltrim(Substr(ENTRADA->r_social,1,40))
Cod_pais  := '1058'         
CNPJ      := STRZERO(Val(LimpaStr(ENTRADA->CNPJ_CPF)),14)
CPF       := ''         
cIE       := Alltrim(MemoTran(STRTRAN(ENTRADA->insc_est,".","")))
Cod_Num   := ''
Suframa   := ''         
*End       := Alltrim(ENTRADA->endereco)         
*Num       := ENTRADA->numero         
*Compl     := ''         
*cBairro   := Alltrim(ENTRADA->bairro)         

cTxt :=  Reg       +cSepa+;
         Codpart  +cSepa+;                  
         Nome      +cSepa+;                  
         Cod_pais  +cSepa+;                  
         CNPJ      +cSepa+;                  
         CPF       +cSepa+;                  
         cIE       +cSepa+;                  
         Cod_Num   +cSepa+;                  
         Suframa   +cSepa+;                  
         End       +cSepa+;                  
         Num       +cSepa+;                  
         Compl     +cSepa+;                  
         cBairro   +cSepa              
Fwrite( nTMP,cSepa+cTxt+CRLF)     
*Next
                    Skip
ENDDO
Return nOk
    Avatar do usuário
    Clipper
    Colaborador
    Colaborador
    Mensagens: 1334
    Registrado em: 23 Ago 2004 00:04
    Localização: Recife/PE

    duplicidade

    Mensagem por Clipper »

    Prezado Colega

    Creio que o problema esteja ocorrendo porque o FWRITE() esteja dentro do loop DO WHILE, então a cada novo registro ele está escrevendo uma linha no arquivo.

    Não sei nada sobre o SPED e como deve funcionar a geração deste arquivo, mas aparentemente o problema me parece esse.

    Coloque o FWRITE() após o ENDDO e faça o teste.

    Até logo.

    Marcelo
    Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
    Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
    Dr_Spock_Two
    Usuário Nível 1
    Usuário Nível 1
    Mensagens: 2
    Registrado em: 18 Ago 2011 11:40
    Localização: Brasilia/DF

    duplicidade

    Mensagem por Dr_Spock_Two »

    - Boa tarde Jurivan

    - Esta ocorrendo porque possivelmente você possua duas notas para o mesmo agente.
    - Isso ocorrerá também quando você gerar o bloco 0200 (Produtos originários dos Itens da Nota).
    - Para contornar este problema você poderá jogar os dados para um vetor e a cada inclusão verificar se o cliente já se encontra neste vetor, ou mesmo verificar diretamente no arquivo que você esta gerando.

    - Espero ter ajudado.
    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

    duplicidade

    Mensagem por JUDIVAN CONTABIL »

    gostaria se posivel, você colocar um exemplo de como eu fazer. Agradeço qualquer exemplo.
    Avatar do usuário
    Clipper
    Colaborador
    Colaborador
    Mensagens: 1334
    Registrado em: 23 Ago 2004 00:04
    Localização: Recife/PE

    duplicidade

    Mensagem por Clipper »

    Prezado Colega

    Neste caso então basta criar um índice pelo CNPJ e utilizar a clausula UNIQUE.

    Dessa forma na geração só irá aparecer 1 agente por arquivo.

    Até logo.

    Marcelo
    Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
    Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
    Avatar do usuário
    JoséQuintas
    Administrador
    Administrador
    Mensagens: 20267
    Registrado em: 26 Fev 2007 11:59
    Localização: São Paulo-SP

    duplicidade

    Mensagem por JoséQuintas »

    Não estou mexendo no Sped Fiscal, mas...
    Estranhei o DO WHILE não conter .And. .Not. Eof()
    Se entendi direito, o 0150 é de cadastros, então poderia trabalhar com o cadastro, ao invés do movimento.
    E se quiser enviar somente os cadastros utilizados:

    Código: Selecionar todos

    select cadastro
    do while .not. eof()
       If encontra(cnpj,"movimento")
          // gera sped
       endif
       skip
    enddo
    
    José M. C. Quintas
    Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
    "The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

    https://github.com/JoseQuintas/
    Avatar do usuário
    Clipper
    Colaborador
    Colaborador
    Mensagens: 1334
    Registrado em: 23 Ago 2004 00:04
    Localização: Recife/PE

    duplicidade

    Mensagem por Clipper »

    Prezado Colega

    No caso o Do While não precisa fazer até o fim do arquivo pois pelo que percebi ele precisa de um determinado período.
    DO WHILE (PERIODO=M->vMes)
    Não creio que ele precise enviar o cadastro do fornecedor em si, e sim dos fornecedores com notas de entrada em um determinado período, como pode haver mais de uma nota de entrada para um fornecedor então o problema acontece, por isso sugeri a solução de um índice com o CNPJ utilizando a cláusula UNIQUE.

    Até logo.

    Marcelo
    Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
    Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
    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

    duplicidade

    Mensagem por JUDIVAN CONTABIL »

    Prezado Colega
    Marcelo
    Desculpe a ignorância, mais peço um exemplo de como eu coloco a cláusula unique.

    Antecipadamente agradeço,


    Judivan
    Avatar do usuário
    Clipper
    Colaborador
    Colaborador
    Mensagens: 1334
    Registrado em: 23 Ago 2004 00:04
    Localização: Recife/PE

    duplicidade

    Mensagem por Clipper »

    Prezado Judivan

    Veja um exemplo de criação de índice com a cláusula UNIQUE :

    Código: Selecionar todos

    index on CNPJ to indcnpj UNIQUE
    Até logo.

    Marcelo
    Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
    Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
    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

    duplicidade

    Mensagem por JUDIVAN CONTABIL »

    Agradeço a colaboração dos colegas. Usei a cláusula UNIQUE e resolveu o problema.
    Responder