Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 5029 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Moderadores
Postado

Em caso de NFs de serviço canceladas está dando erro:

"Para documento fiscal cancelado (código da situação = 02 ou 03) ou NFe denegada (04) ou NFe inutilizada (05), somente os campos código da situação, indicador de operação, código do modelo e a "chave do documento" e os campos CHV_NFE e CHV_CTE para os registros que possuam os campos."

Então no registroD100 deveria jogar vazio nesses campos, mas os campos marcados não tem como

COD_PART := '';

>>>> DT_DOC := '';

>>>> DT_A_P := '';

TP_CT_e := '';

CHV_CTE_REF := '';

>>>> VL_DOC := '';

>>>> VL_DESC := '';

IND_FRT :=tfNenhum;

>>>> VL_SERV := '';

>>>> VL_BC_ICMS := '';

>>>> VL_ICMS := '';

>>>> VL_NT := '';

COD_INF :='';

COD_CTA :='';

  • Moderadores
Postado

Para solucionar o erro acima (a nivel provisório) foi necessário desconsiderar as NFs de Serviço canceladas. Mas essas notas devem fazer parte do Registro D100

Então no registroD100 deveria jogar vazio nos campos se a nota estiver cancelada:

COD_PART := '';

DT_DOC := '';

DT_A_P := '';

TP_CT_e := '';

CHV_CTE_REF := '';

VL_DOC := '';

VL_DESC := '';

IND_FRT :=tfNenhum;

VL_SERV := '';

VL_BC_ICMS := '';

VL_ICMS := '';

VL_NT := '';

COD_INF :='';

COD_CTA :='';

só que alguns campos são tipo currency ou data.

  • 2 semanas depois ...
  • Consultores
Postado

Olá Gr@ç@,

Eu estou bem por fora dos detalhes sobre CTE. Mas acredito que haja uma solução bem simples.

Existe algum jeito de sabermos, no quando da execução do método TBloco_D.WriteRegistroD100 se a Nota foi cancelada ou não? Não seria só verificar se o campo COD_SIT é 02, 03, 04 ou 05 ?

Isso permitiria escrevermos uma rotina alternativa só pra esses casos... exemplo:

procedure TBloco_D.WriteRegistroD100(RegD001: TRegistroD001) ;
var
intFor: integer;
strIND_FRT: AnsiString;
strCOD_SIT: AnsiString;
begin
if Assigned( RegD001.RegistroD100 ) then
begin
for intFor := 0 to RegD001.RegistroD100.Count - 1 do
begin
with RegD001.RegistroD100.Items[intFor] do
begin
case IND_FRT of
tfPorContaTerceiros: strIND_FRT := '0';
tfPorContaEmitente: strIND_FRT := '1';
tfPorContaDestinatario: strIND_FRT := '2';
tfSemCobrancaFrete: strIND_FRT := '9';
tfNenhum: strIND_FRT := '';
end;
case COD_SIT of
sdRegular: strCOD_SIT := '00';
sdExtempRegular: strCOD_SIT := '01';
sdCancelado: strCOD_SIT := '02';
sdCanceladoExtemp: strCOD_SIT := '03';
sdDoctoDenegado: strCOD_SIT := '04';
sdDoctoNumInutilizada: strCOD_SIT := '05';
sdFiscalCompl: strCOD_SIT := '06';
sdExtempCompl: strCOD_SIT := '07';
sdRegimeEspecNEsp: strCOD_SIT := '08';
end;

//No Caso abaixo não deve informar todos os campos...
if COD_SIT in [sdCancelado, sdCancelado, sdDoctoDenegado, sdDoctoNumInutilizada] then
begin
Add( LFill('D100') +
LFill( Integer(IND_OPER), 0 ) +
LFill( Integer(IND_EMIT), 0 ) +
LFill( '' ) + //COD_PART
LFill( COD_MOD ) +
LFill( strCOD_SIT ) +
LFill( SER ) +
LFill( SUB ) +
LFill( NUM_DOC ) +
LFill( CHV_CTE ) +
LFill( '' ) + //DT_DOC
LFill( '' ) + //DT_A_P
LFill( '' ) + //TP_CT_e
LFill( '' ) + //CHV_CTE_REF
LFill( '' ) + //VL_DOC
LFill( '' ) + //VL_DESC
LFill( strIND_FRT ) +
LFill( '' ) + //VL_SERV
LFill( '' ) + //VL_BC_ICMS
LFill( '' ) + //VL_ICMS
LFill( '' ) + //VL_NT
LFill( '' ) + //COD_INF
LFill( '' ) ) ; //COD_CTA
end
else
Add( LFill('D100') +
LFill( Integer(IND_OPER), 0 ) +
LFill( Integer(IND_EMIT), 0 ) +
LFill( COD_PART ) +
LFill( COD_MOD ) +
LFill( strCOD_SIT ) +
LFill( SER ) +
LFill( SUB ) +
LFill( NUM_DOC ) +
LFill( CHV_CTE ) +
LFill( DT_DOC ) +
LFill( DT_A_P ) +
LFill( TP_CT_e ) +
LFill( CHV_CTE_REF ) +
LFill( VL_DOC,0,2 ) +
LFill( VL_DESC,0,2 ) +
LFill( strIND_FRT ) +
LFill( VL_SERV,0,2 ) +
LFill( VL_BC_ICMS,0,2 ) +
LFill( VL_ICMS,0,2 ) +
LFill( VL_NT,0,2 ) +
LFill( COD_INF ) +
LFill( COD_CTA ) ) ;
end;
/// Registros FILHOS
WriteRegistroD110( RegD001.RegistroD100.Items[intFor] ) ;
WriteRegistroD130( RegD001.RegistroD100.Items[intFor] ) ;
WriteRegistroD140( RegD001.RegistroD100.Items[intFor] ) ;
WriteRegistroD150( RegD001.RegistroD100.Items[intFor] ) ;
WriteRegistroD160( RegD001.RegistroD100.Items[intFor] ) ;
WriteRegistroD170( RegD001.RegistroD100.Items[intFor] ) ;
WriteRegistroD180( RegD001.RegistroD100.Items[intFor] ) ;
WriteRegistroD190( RegD001.RegistroD100.Items[intFor] ) ;

RegistroD990.QTD_LIN_D := RegistroD990.QTD_LIN_D + 1;
end;
/// Variavél para armazenar a quantidade de registro do tipo.
FRegistroD100Count := FRegistroD100Count + RegD001.RegistroD100.Count;
end;
end;[/code]

Substitua esse IF acima no seu código do TBloco_D.WriteRegistroD100 do arquivo ACBrECFBloco_D_Class.pas e veja se resolve por favor... Se resolver eu já subo pro SVN...

"Para documento fiscal cancelado (código da situação = 02 ou 03) ou NFe denegada (04) ou NFe inutilizada (05), somente os campos código da situação, indicador de operação, código do modelo e a "chave do documento" e os campos CHV_NFE e CHV_CTE para os registros que possuam os campos."

Você pode também me indicar onde você encontrou essa informação de preenchimento? Só pra efeito de depois alguém questionar as alterações?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Este tópico foi criado há 5029 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...