Ir para conteúdo
  • Cadastre-se

José S. Simione

Membros
  • Total de ítens

    51
  • Registro em

  • Última visita

Tudo que José S. Simione postou

  1. Bom dia Italo, Obrigado pelo retorno. Eu entendo isso, porem você consegue imaginar esse campo sendo alimentado como lista sem pertencer a um grupo? Poderia me dar um exemplo de uma XML assim ou me mostrar um campo semelhante de exemplo? Ao meu entendimento, o XML ficaria dessa maneira, o que não creio que seja correto. <aereo> <nOCA>00000000000</nOCA> <dPrevAereo>2017-03-23</dPrevAereo> <natCarga> <xDime>15x10x15</xDime> <cInfManu>01</cInfManu> <cInfManu>02</cInfManu> <cInfManu>03</cInfManu> <cInfManu>04</cInfManu> <cInfManu>05</cInfManu> <cInfManu>06</cInfManu> ... </natCarga> <tarifa> <CL>M</CL> <cTar>001</cTar> <vTar>10.00</vTar> </tarifa> </aereo> Outro ponto seria que mesmo que façamos em lista o Schemas atual não esta preparado para tratar esse campo como lista. Grato pela atenção! Att, José S. Simione
  2. Eu fiz a correção desse problema, ainda não foi validado pelos moderadores, mas pode ajudar.
  3. Olá Cleonir, Estou com um tópico aberto onde estou ajustando o componente para o CT-e 3.00, la eu anexei um modelo de DACTe que deve solucionar esse seu problema. Essas alterações ainda nao foram verificadas pelos moderadores mas pode ajudar você em algo.
  4. Bom dia! Hoje, atualizei o componente e conferi minha alterações, fiz alguns ajustes no código para ficar mais limpo e funcional mas nada muito diferente do que já postei acima. Referente ao campo cInfManu eu não alterei para lista, seguindo a logica explicada no post anterior. Segue as UNITs alteradas para emissão do CT-e 3.00, e um modelo da DACTe 3.00. Aguardo retorno. pcteConversaoCTe.pas pcteCTe.pas pcteCTeR.pas pcteCTeW.pas ACBrCTeDACTEFR.pas DACTE_Ve300.fr3
  5. Italo, Eu dei uma olhada no manual e creio que isso possa ser um erro. Pois o próprio Schema não trata o campo como uma Lista, e no manual o tipo do campo não esta como grupo (G), por padrão os campos de lista são grupos que possuem ao menos uma tag, o que não se aplica com o caso do cInfManu, validando minha teoria de que isso é algum erro no manual. Veja a tag cInfManu: podemos ver a diferencia de um campo indicado como lista: Sem contar os Schemas onde a tag cInfManu não contem o grupo <xs:sequence> que seria o indicador de uma lista. Podemos concluir que se isso for alterado o Schema não validará. Att José S. Simione
  6. Bom dia Italo, Ok, vou efetuar as correções, e retornarei aqui. Obrigado pela atenção.
  7. Bom dia Italo, Ok, vou efetuar as correções, e retornarei aqui. Obrigado pela atenção.
  8. Segue o modelo da DACTe para a Versão CT-e 3.00. Tive inserir mais algumas validações na UNIT "pcteCTeW" devido a um erro na tag IE do tomador. Pois pela regra do 3.00 a tag não deverá ser existir quando o tomador não for contribuinte. Att José S. Simione pcteCTeW.pas DACTE_Ve300.fr3
  9. Estou implantando o CT-e 3.00 em meu sistema, tive que fazer algumas alterações no componente para evitar alguns erros sobre os Schemas da Versão 3.00. Segue as alterações feitas: "pcteCTe" Alterado de: TNatCarga = class(TPersistent) private FxDime : String; FcinfManu : Integer; // Alterar para ser uma lista FcIMP : String; // Alterar para ser uma lista public property xDime: String read FxDime write FxDime; property cinfManu: Integer read FcinfManu write FcinfManu; property cIMP: String read FcIMP write FcIMP; end; para: TNatCarga = class(TPersistent) private FxDime : String; FcinfManu : TpInfManu; FcIMP : String; // Alterar para ser uma lista public property xDime: String read FxDime write FxDime; property cinfManu: TpInfManu read FcinfManu write FcinfManu; property cIMP: String read FcIMP write FcIMP; end; "pcteCTeR" Alterado de: if Leitor.rExtrai(3, 'natCarga') <> '' then begin CTe.infCTeNorm.aereo.natCarga.xDime := Leitor.rCampo(tcStr,'xDime'); CTe.infCTeNorm.aereo.natCarga.cinfManu := Leitor.rCampo(tcInt,'cInfManu'); CTe.infCTeNorm.aereo.natCarga.cIMP := Leitor.rCampo(tcStr,'cIMP'); end; para: if Leitor.rExtrai(3, 'natCarga') <> '' then begin CTe.infCTeNorm.aereo.natCarga.xDime := Leitor.rCampo(tcStr,'xDime'); CTe.infCTeNorm.aereo.natCarga.cinfManu := StrToTpInfManu(ok, Leitor.rCampo(tcStr,'cInfManu')); CTe.infCTeNorm.aereo.natCarga.cIMP := Leitor.rCampo(tcStr,'cIMP'); end; "pcteCTeW" a procedure "GerarAereo" foi Alterado de: Gerador.wGrupo('tarifa', '#07'); Gerador.wCampo(tcStr, '#08', 'CL ', 01, 02, 0, CTe.infCTeNorm.aereo.tarifa.CL, DSC_CL); Gerador.wCampo(tcStr, '#09', 'cTar ', 01, 04, 0, CTe.infCTeNorm.aereo.tarifa.cTar, DSC_CTAR); Gerador.wCampo(tcDe2, '#10', 'vTar ', 01, 15, 0, CTe.infCTeNorm.aereo.tarifa.vTar, DSC_VTAR); Gerador.wGrupo('/tarifa'); if (trim(CTe.infCTeNorm.aereo.natCarga.xDime) <> '') or (CTe.infCTeNorm.aereo.natCarga.cinfManu <> 0) or (trim(CTe.infCTeNorm.aereo.natCarga.cImp) <> '') then begin Gerador.wGrupo('natCarga', '#11'); Gerador.wCampo(tcStr, '#12', 'xDime ', 05, 14, 0, CTe.infCTeNorm.aereo.natCarga.xDime, DSC_XDIME); Gerador.wCampo(tcInt, '#13', 'cInfManu', 01, 02, 0, CTe.infCTeNorm.aereo.natCarga.cinfManu, DSC_CINFMANU); Gerador.wCampo(tcStr, '#14', 'cIMP ', 03, 03, 0, CTe.infCTeNorm.aereo.natCarga.cIMP, DSC_CIMP); Gerador.wGrupo('/natCarga'); para: if CTe.infCTe.versao >= 3 then begin if (trim(CTe.infCTeNorm.aereo.natCarga.xDime) <> '') or (TpInfManuToStr(CTe.infCTeNorm.aereo.natCarga.cinfManu) <> '') then begin Gerador.wGrupo('natCarga', '#11'); Gerador.wCampo(tcStr, '#12', 'xDime ', 05, 14, 0, CTe.infCTeNorm.aereo.natCarga.xDime, DSC_XDIME); Gerador.wCampo(tcInt, '#13', 'cInfManu', 02, 02, 0, TpInfManuToStr(CTe.infCTeNorm.aereo.natCarga.cinfManu), DSC_CINFMANU); Gerador.wGrupo('/natCarga'); end; Gerador.wGrupo('tarifa', '#07'); Gerador.wCampo(tcStr, '#08', 'CL ', 01, 02, 0, CTe.infCTeNorm.aereo.tarifa.CL, DSC_CL); Gerador.wCampo(tcStr, '#09', 'cTar ', 01, 04, 0, CTe.infCTeNorm.aereo.tarifa.cTar, DSC_CTAR); Gerador.wCampo(tcDe2, '#10', 'vTar ', 01, 15, 0, CTe.infCTeNorm.aereo.tarifa.vTar, DSC_VTAR); Gerador.wGrupo('/tarifa'); end else begin Gerador.wGrupo('tarifa', '#07'); Gerador.wCampo(tcStr, '#08', 'CL ', 01, 02, 0, CTe.infCTeNorm.aereo.tarifa.CL, DSC_CL); Gerador.wCampo(tcStr, '#09', 'cTar ', 01, 04, 0, CTe.infCTeNorm.aereo.tarifa.cTar, DSC_CTAR); Gerador.wCampo(tcDe2, '#10', 'vTar ', 01, 15, 0, CTe.infCTeNorm.aereo.tarifa.vTar, DSC_VTAR); Gerador.wGrupo('/tarifa'); if (trim(CTe.infCTeNorm.aereo.natCarga.xDime) <> '') or (TpInfManuToStr(CTe.infCTeNorm.aereo.natCarga.cinfManu) <> '') or (trim(CTe.infCTeNorm.aereo.natCarga.cImp) <> '') then begin Gerador.wGrupo('natCarga', '#11'); Gerador.wCampo(tcStr, '#12', 'xDime ', 05, 14, 0, CTe.infCTeNorm.aereo.natCarga.xDime, DSC_XDIME); Gerador.wCampo(tcInt, '#13', 'cInfManu', 01, 02, 0, TpInfManuToStr(CTe.infCTeNorm.aereo.natCarga.cinfManu), DSC_CINFMANU); Gerador.wCampo(tcStr, '#14', 'cIMP ', 03, 03, 1, CTe.infCTeNorm.aereo.natCarga.cIMP, DSC_CIMP); Gerador.wGrupo('/natCarga'); end; procedure "GerarAquav" foi Alterado de: procedure TCTeW.GerarAquav; var i, j: Integer; begin Gerador.wGrupo('aquav', '#01'); Gerador.wCampo(tcDe2, '#02', 'vPrest ', 01, 15, 1, CTe.infCTeNorm.aquav.vPrest, DSC_VPREST); Gerador.wCampo(tcDe2, '#03', 'vAFRMM ', 01, 15, 1, CTe.infCTeNorm.aquav.vAFRMM, DSC_VAFRMM); Gerador.wCampo(tcStr, '#04', 'nBooking ', 01, 10, 0, CTe.infCTeNorm.aquav.nBooking, DSC_NBOOKING); Gerador.wCampo(tcStr, '#05', 'nCtrl ', 01, 10, 0, CTe.infCTeNorm.aquav.nCtrl, DSC_NCTRL); Gerador.wCampo(tcStr, '#06', 'xNavio ', 01, 60, 1, CTe.infCTeNorm.aquav.xNavio, DSC_XNAVIO); ... Gerador.wCampo(tcStr, '#09', 'nViag ', 01, 10, 0, CTe.infCTeNorm.aquav.nViag, DSC_NVIAG); Gerador.wCampo(tcStr, '#10', 'direc ', 01, 01, 1, TpDirecaoToStr(CTe.infCTeNorm.aquav.direc), DSC_DIREC); Gerador.wCampo(tcStr, '#11', 'prtEmb ', 01, 60, 0, CTe.infCTeNorm.aquav.prtEmb, DSC_PRTEMB); Gerador.wCampo(tcStr, '#12', 'prtTrans ', 01, 60, 0, CTe.infCTeNorm.aquav.prtTrans, DSC_PRTTRANS); Gerador.wCampo(tcStr, '#13', 'prtDest ', 01, 60, 0, CTe.infCTeNorm.aquav.prtDest, DSC_PRTDEST); Gerador.wCampo(tcStr, '#14', 'tpNav ', 01, 01, 1, TpNavegacaoToStr(CTe.infCTeNorm.aquav.tpNav), DSC_TPNAV); Gerador.wCampo(tcStr, '#15', 'irin ', 01, 10, 1, CTe.infCTeNorm.aquav.irin, DSC_IRIN); para: procedure TCTeW.GerarAquav; var i, j: Integer; begin Gerador.wGrupo('aquav', '#01'); Gerador.wCampo(tcDe2, '#02', 'vPrest ', 01, 15, 1, CTe.infCTeNorm.aquav.vPrest, DSC_VPREST); Gerador.wCampo(tcDe2, '#03', 'vAFRMM ', 01, 15, 1, CTe.infCTeNorm.aquav.vAFRMM, DSC_VAFRMM); if (CTe.infCTe.versao = 2) then begin Gerador.wCampo(tcStr, '#04', 'nBooking ', 01, 10, 0, CTe.infCTeNorm.aquav.nBooking, DSC_NBOOKING); Gerador.wCampo(tcStr, '#05', 'nCtrl ', 01, 10, 0, CTe.infCTeNorm.aquav.nCtrl, DSC_NCTRL); end; Gerador.wCampo(tcStr, '#06', 'xNavio ', 01, 60, 1, CTe.infCTeNorm.aquav.xNavio, DSC_XNAVIO); ... Gerador.wCampo(tcStr, '#09', 'nViag ', 01, 10, 0, CTe.infCTeNorm.aquav.nViag, DSC_NVIAG); Gerador.wCampo(tcStr, '#10', 'direc ', 01, 01, 1, TpDirecaoToStr(CTe.infCTeNorm.aquav.direc), DSC_DIREC); if (CTe.infCTe.versao = 2) then begin Gerador.wCampo(tcStr, '#11', 'prtEmb ', 01, 60, 0, CTe.infCTeNorm.aquav.prtEmb, DSC_PRTEMB); Gerador.wCampo(tcStr, '#12', 'prtTrans ', 01, 60, 0, CTe.infCTeNorm.aquav.prtTrans, DSC_PRTTRANS); Gerador.wCampo(tcStr, '#13', 'prtDest ', 01, 60, 0, CTe.infCTeNorm.aquav.prtDest, DSC_PRTDEST); Gerador.wCampo(tcStr, '#14', 'tpNav ', 01, 01, 1, TpNavegacaoToStr(CTe.infCTeNorm.aquav.tpNav), DSC_TPNAV); end; Gerador.wCampo(tcStr, '#15', 'irin ', 01, 10, 1, CTe.infCTeNorm.aquav.irin, DSC_IRIN); "pcnConversao" Foi adicionado as seguintes funções: TpInfManu = (imCEEAV, imAPCDEA, imSAC, imAPDENR, imAPQI, imGSR, imNR, imAPCC, imAAGA, imPI965, imPI966, imPI967, imPI968, imPI969, imPI970, imOUTRO); function TpInfManuToStr(const t: TpInfManu): string; function StrToTpInfManu(out ok: boolean; const s: string): TpInfManu; function TpInfManuToStr(const t: TpInfManu): string; begin result := EnumeradoToStr(t, ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','99'], [imCEEAV, imAPCDEA, imSAC, imAPDENR, imAPQI, imGSR, imNR, imAPCC, imAAGA, imPI965, imPI966, imPI967, imPI968, imPI969, imPI970, imOUTRO]); end; function StrToTpInfManu(out ok: boolean; const s: string): TpInfManu; begin result := StrToEnumerado(ok, s, ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','99'], [imCEEAV, imAPCDEA, imSAC, imAPDENR, imAPQI, imGSR, imNR, imAPCC, imAAGA, imPI965, imPI966, imPI967, imPI968, imPI969, imPI970, imOUTRO]); end; em Anexo as UNIT's Alteradas. E um fr3 alterado para a Versão 3.00, já com os campos sobre vale pedágio, veículos, motorista e outros campos removidos conforme o Manual de Ve300. att José Suzano Simione pcteCTe.pas pcteCTeR.pas pcteCTeW.pas pcnConversao.pas
  10. O fr3 que estou trabalhando vai compor muitas mudanças referentes ao CT-e 3.00, como a remoção de algumas informações da DACTe e do XML, isso requer mudanças em outras UNITs. Creio que vai fugir do assunto do tópico. Devo abrir outro tópico para isso?
  11. Estou ajustando o fr3 e validando outros pontos, provavelmente terei mais alteração para passar, vou compor tudo e assim que tiver tudo ok posto aqui. att José S. Simione
  12. Segue o fr3 DAMDFe_Retrato.fr3
  13. A alteração referente aos Documentos Transportados na UNIT pcteCTeW pode ignorar por hora, estou verificando com a SeFaz, pois a uma discrepância nas informações do Manual. Acontece que o campo cita essas informações como Opcionais nesses casos, porem existe uma validação que apresenta uma Rejeição nesses casos. Separei os pontos que estou questionando a SeFaz, assim que me retornarem eu posto aqui. Segue em anexo.
  14. Olá, Devido a solicitação de um cliente adicionei o campo RENAVAM no DataSet cdsModalRodo e na procedure CarregaModalRodoviario. Segue a Unit alterada. Att José S. Simione ACBrMDFeDAMDFEFRDM.pas
  15. Olá, Estou ajustando o sistema para emissão do CT-e 3.00 e tive que adicionar um novo campo para Observações de CT-e Globalizado. Foi adicionado o campo 'ObsGlobalizado' no DataSet "cdsIdentificacao". E o no momento de setar as informações foi Alterado de: if indGlobalizado = tiSim then FieldByName('indGlobalizado').AsString := 'Sim' else FieldByName('indGlobalizado').AsString := 'Não'; Para: if indGlobalizado = tiSim then begin FieldByName('indGlobalizado').AsString := 'Sim'; if (Trim(FCTe.infCTeNorm.infGlobalizado.xObs) <> '') then FieldByName('ObsGlobalizado').AsString := FCTe.infCTeNorm.infGlobalizado.xObs; end else FieldByName('indGlobalizado').AsString := 'Não'; Efetuei outra alteração referente aos Documentos Originários que não eram informados em CT-e de Redespacho Intermediário e Vinculado e Multimodal. Porem segundo manual da SeFaz a inserção desses dados é opcional, sendo assim, devido a uma solicitação de um cliente, alterei a unit 'pcteCTeW' de: procedure TCTeW.GerarInfCTeNorm; var versao: String; begin if (CTe.Ide.tpCTe = tcNormal) or (CTe.Ide.tpCTe = tcSubstituto) then begin Gerador.wGrupo('infCTeNorm', '#252'); if (CTe.infCTe.versao >= 3) and (CTe.ide.modelo = 67) then begin GerarinfServico; GerarinfDocRef; GerarInfSeg; end else begin GerarinfCarga; if (CTe.Ide.tpServ <> tsIntermediario) and (CTe.Ide.tpServ <> tsMultimodal) then GerarInfDoc; if CTe.infCTeNorm.docAnt.emiDocAnt.Count > 0 then GerarDocAnt; if CTe.infCTe.versao = 2 then GerarInfSeg; end; ... Para: procedure TCTeW.GerarInfCTeNorm; var versao: String; begin if (CTe.Ide.tpCTe = tcNormal) or (CTe.Ide.tpCTe = tcSubstituto) then begin Gerador.wGrupo('infCTeNorm', '#252'); if (CTe.infCTe.versao >= 3) and (CTe.ide.modelo = 67) then begin GerarinfServico; GerarinfDocRef; GerarInfSeg; end else begin GerarinfCarga; GerarInfDoc; if CTe.infCTeNorm.docAnt.emiDocAnt.Count > 0 then GerarDocAnt; if CTe.infCTe.versao = 2 then GerarInfSeg; end; ... As Units alteradas estão em anexo e me mantenho a disposição para esclarecimentos. Att José S. Simione ACBrCTeDACTEFR.pas pcteCTeW.pas
  16. Grato pela atenção e retorno imediato!
  17. Bom dia! Estou trabalhando na otimização de um processo de envio de DACTe por e-mail, nesse processo notei uma lentidão na execução da procedure "TACBrCTeDACTEFR.ImprimirDACTEPDF" apos uma análise vi que o laço FOR esta sendo executado sem necessidade. Quando carrego o componente com mais de um CT-e ele constrói o PDF com mais de uma DACTe, perfeito, porem com o laço ele faz o processo repetidamente de acordo com a quantidade de CT-e carregados. Segue o código citado e em anexo a UNIT corrigida. Unit ACBrCTeDACTEFR procedure TACBrCTeDACTEFR.ImprimirDACTEPDF(ACTE: TCTe); begin ... try frxPDFExport.ShowDialog := False; for i := 0 to TACBrCTe(ACBrCTe).Conhecimentos.Count - 1 do // O LAÇO FOR FOI REMOVIDO begin frxPDFExport.FileName := IncludeTrailingPathDelimiter(PathPDF) + OnlyNumber(CTE.infCTe.Id) + '-cte.pdf'; if not DirectoryExists(ExtractFileDir(frxPDFExport.FileName)) then ForceDirectories(ExtractFileDir(frxPDFExport.FileName)); frxReport.Export(frxPDFExport); end; finally frxPDFExport.ShowDialog := OldShowDialog; end; ... end; Grato e aguardando retorno. ACBrCTeDACTEFR.pas
  18. Olá, Estou desenvolvendo uma consulta de NFe destinada e não esta retornando peso, remetente e Destinatário, queria saber como fazer retornar essas informações? Estou usando o componente DistribuicaoDFe.
  19. Foi aberto dois tópicos iguais. Poderia Encerrar este por favor!
  20. Olá, Estou implementando uma consulta de NFe Destinadas utilizando o componente DistribuicaoDFe (Que esta funcionando corretamente), porem necessito de mais dados que este componente esta fornecendo. A idéia é utilizar alguns dos dados das NFe consultas para agilizar a emissão de um CTe, sendo assim seria necessário dados da Nota como PESO, Remetente, Destinatário, entre outros. Os dados retornados pelo componente são resumidos, queria saber se há algum modo de obter esses dados pelo componente ou se há outro componente que possa me auxiliar nessa tarefa? Agradeço pela atenção.
  21. Olá, Estou implementando uma consulta de NFe Destinadas utilizando o componente DistribuicaoDFe (Que esta funcionando corretamente), porem necessito de mais dados que este componente esta fornecendo. A idéia é utilizar alguns dos dados das NFe consultas para agilizar a emissão de um CTe, sendo assim seria necessário dados da Nota como PESO, Remetente, Destinatário, entre outros. Os dados retornados pelo componente são resumidos, queria saber se há algum modo de obter esses dados pelo componente ou se há outro componente que possa me auxiliar nessa tarefa? Agradeço pela atenção.
  22. Acredito que o problema deriva da seguinte função localizada em "ACBrUtil", de acordo com a Observação ela converte de acordo com o compilador segue o font, no trunk1 não era necessário a conversão, pois era preenchido a string: '<?xml version="1.0" encoding="UTF-8"?>' Ao seguir as modificação do usuário @Jemison Vidal, obtive sucesso, porem conforme dito pelo Daniel o problema ja foi encerrado, devo entender que se refere realmente ao meu compilador? {----------------------------------------------------------------------------- Converte a AString nativa do Compilador, para UTF8, de acordo o suporte a UNICODE/UTF8 do Compilador -----------------------------------------------------------------------------} function ACBrStrToUTF8( AString : String ) : AnsiString; {$IFNDEF FPC} {$IFDEF UNICODE} var RBS: RawByteString; {$ENDIF} {$ENDIF} begin {$IFNDEF FPC} {$IFDEF UNICODE} RBS := UTF8Encode(AString); SetCodePage(RBS, 0, False); Result := AnsiString(RBS); {$ELSE} Result := UTF8Encode(AString); {$ENDIF} {$ELSE} Result := AString; {$ENDIF} end;
  23. Bom dia, Italo! Você esta com todos os fontes de todas as pastas atualizados? R: Sim, foi deletado e baixado tudo novamente!. Recompilou a sua aplicação com a opção Build? R: Sim, dei um Clear e na sequencia um Make e Build. Tem algum fonte cujo ícone possui uma bolinha vermelha ou triangulo amarelo? R: Estão todos verdes! Obrigado pela atenção!
  24. Olá Daniel, Bom dia! Não consegui localizar um post com a solução dessa questão. Pois estou com o mesmo problema, contando que utilizo o Delphi XE6 poderia ser algo com meu compilador? Att
  25. Olá, estou com erro na consulta dos não encerrados, segue o erro: --------------------------- Error --------------------------- Rejeição: Falha no schema XML --------------------------- OK --------------------------- Baixei hoje os Schemas atualizado. Poderia me ajudar?
×
×
  • 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...