Página 1 de 1

duplicidade

Enviado: 18 Set 2011 19:21
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

duplicidade

Enviado: 18 Set 2011 22:17
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

duplicidade

Enviado: 19 Set 2011 11:07
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

    duplicidade

    Enviado: 19 Set 2011 14:22
    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

    duplicidade

    Enviado: 19 Set 2011 17:16
    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.

    duplicidade

    Enviado: 19 Set 2011 17:46
    por JUDIVAN CONTABIL
    gostaria se posivel, você colocar um exemplo de como eu fazer. Agradeço qualquer exemplo.

    duplicidade

    Enviado: 20 Set 2011 00:20
    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

    duplicidade

    Enviado: 20 Set 2011 18:38
    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
    

    duplicidade

    Enviado: 20 Set 2011 19:16
    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

    duplicidade

    Enviado: 21 Set 2011 09:17
    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

    duplicidade

    Enviado: 21 Set 2011 17:24
    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

    duplicidade

    Enviado: 22 Set 2011 08:02
    por JUDIVAN CONTABIL
    Agradeço a colaboração dos colegas. Usei a cláusula UNIQUE e resolveu o problema.