Ir para conteúdo
  • Cadastre-se

carlosmarian

Membros
  • Total de ítens

    235
  • Registro em

  • Última visita

  • Days Won

    1

Posts postados por carlosmarian

  1. Olá EMBarbosa

     

      De acordo com manual da versão 2.0.15 alguns outros campos tbm possuem este tratamento de que em alguns momentos podem ser gerados como vazio:

      Exemplo :

       No reg C100 os campos 25 e 26

            reg C170 do campo 25 ao 36

     

     Obs: no reg 460, 470 e 500 tbm tem isso.

     

     Sabe me informar se existe tratamento para tbm converter estes campos para Variant?

     

    Obrigado pela atenção.

  2. Olá,

      Estou ajustando a aplicação para permitir uso de impressoras do convênio 09/09.

      Verifiquei que não existe comando(no SCU) para obter o nro do último item vendido/registrado;

      Fiz um pequeno ajuste no fonte "ACBrECFEscECF.pas", será que pode ser adicionado ao repositório?

      A alteração consiste em um contador interno que é alimentado pelo retorno do comando de vende item.

      ..
      procedure TACBrECFEscECF.VendeItem(Codigo, Descricao: String;
      ...
      RespostasComando.AddField( 'NumUltItem', EscECFResposta.Params[0] );
      RespostasComando.AddField( 'TotalItem',  EscECFResposta.Params[1] );
      RespostasComando.AddField( 'SubTotal',   EscECFResposta.Params[2] );
      fsEmPagamento := false ;
    
    
      fsNroUltimoItem := StrToIntDef(EscECFResposta.Params[0], 1);
      ...
    

    Obrigado pela  atenção.

    ACBrECFEscECF.pas

  3. Olá,

      Estou fazendo testes com o uso da Impressora Bematech MP-4000 TH FI(USB), ao executar a impressão dos Parâmetros de Configuração do PAF(Exemplo: ACBrECF1.PafMF_RelParametrosConfiguracao(ACBrECF1.AAC.IdentPAF.Paf)), alguns dados estão sendo impressos em duplicidade(exemplo: IDENTIFICAÇÃO E CARACTERISITICAS DO PROGRAMA APLICATIVO FISCAL). Sempre duplica neste impressora de teste.

      Em outras impressoras esta duplicidade de dados não ocorre. Será que isso seria só um erro na impressora?

     

      Outro fato que percebi, é que ao final deste mesmo relatório, o papel não é cortado e a impressora permanece com o relatório aberto.

     

      Fis os testes usando minha aplicação e o "ECFTeste.exe".

     

      Revisão atual do ACBr: 8242

     

    Exemplo de dados duplicados gerados pelo relatório a partir do "ECFTeste.exe".

     

    post-2764-0-83961900-1422280030_thumb.pn

     

     

  4. Olá,

     

    Estou gerado uns MDFe para homologar a atualização do ACBr e me deparei um com problema que pode estar relacionado a este post.

    Ao validar o XML apresenta o erro:

     

    "'42141211111111111111580010000000201003358722' violates pattern constraint of 'MDFe[0-9]{44}'.

    The attribute 'Id' with value '42141211111111111111580010000000201003358722' failed to parse."

     

    Avaliando XML pude verificar que o atributo "Id" da tag "infMDFe" foi gerado sem o prefixo "MDFe".

     

    Acredito que a unit "pmdfeMDFeR" tbm precise de ajustes.
    Ao executar o load de um XML, esta lendo o atributo ID da seguinte forma:

    MDFe.infMDFe.ID := SomenteNumeros(Leitor.rAtributo('Id=')); 

    Desta forma lê somente os nros e não o prefixo MDFe;

     

    Minha forma de trabalho é a seguinte:

    1º Carrego o componente com as informações;

         Atribuindo os valores ao atributos;

    2º Gerado o XML;

    3º Carrego o componente através da leitura do XML;

    4º Solicito a validação;

         Neste ponto apresenta o erro.

     

     

    Não tenho ideia de como resolver isso.

     

    Avaliando os commits na revisão 7173 foi adicionado o uso do método "SomenteNumeros" ao obter o valor o atributo ID, e adicionado um tratamento para verificar se o campo esta preenchido.

     

    Valeu.

  5. Possível falha no método "TBloco_A.WriteRegistroA350(RegA001: TRegistroA001);"

    A chamado do "WriteRegistroA360(A350);" esta fora do loop;

    procedure TBloco_A.WriteRegistroA350(RegA001: TRegistroA001);
    var
      intFor: Integer;
      A350: TRegistroA350;
    begin
       if Assigned(RegA001.RegistroA350) then
       begin
          for intFor := 0 to RegA001.RegistroA350.Count - 1 do
          begin
             A350 := RegA001.RegistroA350.Items[intFor];
             with A350 do
             begin
             ....
             end;
             RegistroA990.QTD_LIN_A := RegistroA990.QTD_LIN_A + 1;
          end;
          //FORA DO LOOP
          WriteRegistroA360(A350);
          FRegistroA350Count := FRegistroA350Count + RegA001.RegistroA350.Count;
      end;
    end;
    
    procedure TBloco_A.WriteRegistroA350(RegA001: TRegistroA001);
    var
      intFor: Integer;
      A350: TRegistroA350;
    begin
       if Assigned(RegA001.RegistroA350) then
       begin
          for intFor := 0 to RegA001.RegistroA350.Count - 1 do
          begin
             A350 := RegA001.RegistroA350.Items[intFor];
             with A350 do
             begin
             ....
             end;
             RegistroA990.QTD_LIN_A := RegistroA990.QTD_LIN_A + 1;
             WriteRegistroA360(A350);
          end;      
          FRegistroA350Count := FRegistroA350Count + RegA001.RegistroA350.Count;
      end;
    end;
    
  6. Uma forma que usei para contornar este problema foi tratar o status 563, caso tenha este retorno eu obtenho os dados de inutilização(protocolo) que vem no retorno e inutilizo meu registro interno de nota.

     Só neste caso não tenho o XML de Inutilização, mas... desta forma consegui contornar parcialmente.

     

    at+

  7. Como eu tenho acesso a lista com os responsáveis por cada projeto?

    Na sua opinião, qual seria o projeto mais adequado para tentar iniciar este tipo de gerenciamento? LEvando em conta tamanho, nro de commits e tbm o fator humano, onde possua um colaborar disposto e de fácil acesso para tentar implantar isso

  8. Sr Isaque, 

       Só implantar suas alterações não trouxe uma melhoria muto grande, ainda estava com problemas no C481 e C485 do Contribuições;

       Para contornar, além dos seus ajustes fiz a seguinte alteração:

       De:     

    procedure TBloco_C.WriteRegistroC481(RegC405: TRegistroC405);
    var
      intFor: integer;
      NullVL_BC_PIS: Boolean;
      NullALIQ_PIS: Boolean;
      NullQUANT_BC_PIS: Boolean;
      NullALIQ_PIS_QUANT: Boolean;
      NullVL_PIS: Boolean;
    begin
       NullVL_BC_PIS := false;
       NullALIQ_PIS  := false;
       NullQUANT_BC_PIS := false;
       NullALIQ_PIS_QUANT := false;
       NullVL_PIS := false; 

       Para:

    procedure TBloco_C.WriteRegistroC481(RegC405: TRegistroC405);
    var
      intFor: integer;
      NullVL_BC_PIS: Boolean;
      NullALIQ_PIS: Boolean;
      NullQUANT_BC_PIS: Boolean;
      NullALIQ_PIS_QUANT: Boolean;
      NullVL_PIS: Boolean;
    begin
       NullVL_BC_PIS := true;
       NullALIQ_PIS  := true;
       NullQUANT_BC_PIS := true;
       NullALIQ_PIS_QUANT := true;
       NullVL_PIS := true;
    

    Mudei o valor padrão dos flags de FALSE para TRUE.

    Mesmo critério foi aplicado ao "WriteRegistroC485".

     

     

     

     

    Obrigado pela  atenção.

  9. OK EMBarbosa,

      Hj no ACBr temos alguns usuários com permissão de commit de alterações.

      O que poderíamos estar iniciando agora seria levantar quais implementações/ajustes estão sendo feitos por estes usuários.

      Identificar com cada responsável quais das datas legais(limite legal para atender solicitações do governo, por exemplo) que devem ser atendidas, desta forma seria(na minha opinião) uma boa forma de agendar as datas previstas de liberação destas versões;

         Dentro de cada versão principal criar pequenos releases de ajustes que possam ser gerados depois de uma liberação de versão.

     

      Para não causar um grande impacto, poderíamos escolher um projeto menor, que hj apresenta um nro menor de melhorias, desta forma poderíamos esta melhorando nosso processo e depois replicar este conhecimento para os demais projetos.

     

     

      Acredito que muitos de vc´s já fazem uso de versionamento de liberação, basicamento seria só colocar em prática no ACBr os mesmo conhecimentos e experiências obtidas em suas vivências profissionais.

     

     

    at+

  10. Olá,

      Ok vou verificar.
     Só um detalhe...

      analisando as alterações que foram desfeitas, isso esta correto? exemplo "WriteRegistroC405"

      Antes de vc voltar a versão:    

    with RegC400.RegistroC405.Items[intFor] do
    begin
      Add( LFill('C405') +
           LFill( DT_DOC ) +
           LFill( CRO,3 ) +
           LFill( CRZ,6 ) +
           LFill( NUM_COO_FIN,6  ) +
           LFill( GT_FIN,0,2  ) +
           LFill( VL_BRT,0,2  ) ) ;
    end; 

      Depois de vc voltar a versão:    

    with RegC400.RegistroC405.Items[intFor] do
    begin
       Add( LFill('C405') +
            LFill( DT_DOC ) +
            LFill( CRO,3 ) +
            LFill( CRZ,6 ) +
                   IfThen( DT_INI >= EncodeDate(2013,10,01), LFill( NUM_COO_FIN, 9) , LFill( NUM_COO_FIN, 6) ) +
            LFill( GT_FIN,0,2  ) +
            LFill( VL_BRT,0,2  ) ) ;
    end;
    

    Isto confere?

     

    OBS: revisão base 6642;

     

    at+

  11. Olá Sr. Isaque.

      Só reiterando minha opinião, em nenhum momento que ofender ou criticar as pessoas que implementam código e disponibilizam junto ao ACBr, pelo contrário agradeço ao empenho de todos.

      Sobre o seu comentário(acima) referente ao impacto da alteração, sim meu problema foi constatado nos registros C481 e C485 do Contribuições.

      No código implementávamos o C481 desta forma :

    with Pai.RegistroC481.New do
    begin
      CST_PIS        := StrToCstPis(QAux.FieldByName('codcst').AsString) ; 
      VL_ITEM        := QAux.FieldByName('valtot').AsFloat;
      VL_BC_PIS      := QAux.FieldByName('bascal').AsFloat;
      ALIQ_PIS       := QAux.FieldByName('aliimp').AsFloat;
      QUANT_BC_PIS   := 0.00;
      ALIQ_PIS_QUANT := 0.00;
      VL_PIS         := QAux.FieldByName('valimp').AsFloat; 
      COD_ITEM       := QAux.FieldByName('codpro').AsString; 
      COD_CTA        := CampoSpedS(StrRegistro, 'COD_CTA'); 
    end; 

      Desta forma com a atualização do ACBr o valor gerado pelo <b>TBloco_C.WriteRegistroC481</b>(ACBrEPCBloco_C_Class), passou a gerar um valor inconsistente, com "0,00" onde deveria ser vazio;

     

      Minha revisão atual do ACBr em uso é 6642.

     

    Só um comentário:

      Aqui na empresa não conseguimos manter nossa versão do ACBr sempre atualizada, visto que em virtude e erros anterior do ACBr causaram grandes impactos, e geraram uma grande rejeição por parte dos diretores e demais membros da equipe em manter sempre o ACBr atualizado com a última revisão.

      Para nós existe um grande custo(tempo, profissionais, dinheirooo) envolvido a cada atualização do ACBr.

     

      Talvez isso minimize caso fosse implementado um versionamento das liberações, talvez aé um versionamento para cada componente do ACBr, onde cada versão seria elaborada(montada) identificando quais novas implementações e ajustes iriam compor a versão. Similar como ocorre em outros projetos.

       Mas isso tudo é papo para um outro momento.

     

     

     

     

     

     

  12. Olá Juliomar,

      Obrigado pelo retorno, não quero gerar polêmica ou criticar quem trabalhando esta disponibilizando as atualizações/implementações no ACBr mas este é um exemplo que pode ser usado como cuidado para novas implementações. Se existe a necessidade de atender a um exceção, o padrão deve ser mantido e quem necessitar atender a exceção então deveria ajustar sua implementação, neste caso por exemplo usando o evento "onbeforewriteregistroc481" e "onbeforewriteregistroc485".

      Novamente, não que criticar o senhor ou o Sr. Isaque só verificar a possibilidade de usar este critério durante as implementações.

      

     

    At++++

  13. Olá,

      só uma dúvida, os valores não deveriam ficar vazios? ao invés de receber zero?

      tbm estou tendo um série de erros gerados em virtude disso.

      Se existe a necessidade de que em alguns casos o valor seja gerado com ZERO e não VAZIO, que fique por conta do implementador, no momento de alimentar os campos(usando o novo método LFILL com variant).

      Só para constar, esta pequena alteração me causou e esta causando muita dor de cabeça.

     

    At+

  14. Olá,

       O DFM que coloquei como sugestão foi uma solução imediata para atender ao meu cliente, no caso dele só existe um documento originário por isso reduzi o tamanho da banda para deixar tudo na mesma página;

      Vou tentar implementar este relatório usando Report Manager, este gerador de relatório tem apresentado(aqui nos nossos projetos) uma maior flexibilidade e estabilidade em comparação ao QuickReport.

     

    At+

  15. Dupliquei meu XML e troquei a informação de "<lota>1</lota>" para "<lota>0</lota>" e a impressão passou a ocorre em uma página.

    Realmente, no meu caso estava sendo gerado XML incorreto, já que não era Lotação.

  16. Olá,

       tbm estou tendo este problema de impressão em duas páginas;

       Comparando a impressão antiga a e anova, parece que a impressão esta se perdendo no item "DOCUMENTOS ORIGINARIOS", foi impresso o cabeçalho deste trecho mais de uma vês mesmo tendo somente 1 documento vinculado ao CT-e

       Ainda o Ct-e foi impresso na seguinte ordem:

       Página 1:

        Dados do emitente:

        OBSERVACOES

        DADOS ESPECIFICOS DO MODAL RODOVIARIO - LOTACAO

        <Aki pulou de página>

       Página 2:

        DOCUMENTOS ORIGINARIOS

        COMPONENTES DO VALOR DA PRESTACAO DE SERVICO

        INFORMACOES RELATIVAS AO IMPOSTO

        DOCUMENTOS ORIGINARIOS

        DOCUMENTOS ORIGINARIOS

        

     

    Minha revisão do acbr é 6638

     

    At+

×
×
  • 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.