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: 20416
    Registrado em: 26 Fev 2007 11:59
    Localização: São Paulo-SP
    Curtiram: 1 vez

    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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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