Ir para conteúdo
  • Cadastre-se

joedbat

Membros
  • Total de ítens

    36
  • Registro em

  • Última visita

Posts postados por joedbat

  1. No método DefineTamanhoNossoNumeroRetorno, o valor correto de retorno deveria ser 10, quando o retorno do método LerNossoNumeroCompleto for False e está setado para 8.

    Com isto, o nosso numero é carregado apenas parcialmente, com 8 posições ao invés de 10, que seria o correto. Inclusive, não seria o caso de definir o valor de retorno deste método para o mesmo valor da propriedade fpTamanhoMaximoNossoNum ? Uma vez que no arquivo de retorno, independente de quantas posições sejam de fato utilizadas, o componente deve ler sempre 10 posições. As não utilizadas são completadas com zero à esquerda.

    Att,

    Joemerson

  2. Nas linhas 412 e 413 da unit ACBrBancoDaycoval.pas, a instrução:

      Result := PadRight(Result, 392) +
                IntToStrZero(nRegistro, 6);                                   // 395 a 400 - Sequência: Seguir a sequência normal de registros.

     

    Deveria ter como parâmetro 394 e não 392, pois a quantidade de caracteres é insuficiente para atingir os 400 caracteres que o layout exige, o que está fazendo com que o arquivo fique incorreto.

    A última alteração foi feita em 21/07/2023 e permanece desta forma no repositório.
     

  3. Continua apresentando o problema, mesmo utilizando o Demo.

    Alguém sabe se existe a possibilidade de mudar para o hCaptcha, como utilizado pelo site da receita. É dificil fazer o cliente entender que na receita funciona e no seu sistema, não...

  4. Entendo que o ideal, seria a implementação completa. Mas como o inter permite a geração do arquivo de remessa em formato CNAB (a documentação foi anexada acima), não seria interessante deixar disponível esta opção (ao invés de a cada atualização do repositório, ter que alterar manualmente os arquivos com as contribuições aqui enviadas)? Desta forma, poderíamos implementar já o envio de remessa nos aplicativos, reduzindo significativamente o trabalho dos clientes em ter que digitar manualmente os dados de cada boleto. O Inter hoje é uma das melhores opções para PJ para pequenas empresas, pois permite a geração de até 100 boletos sem custo.

    • Curtir 2
  5. Obrigado por sua resposta. Eu suspeitei que seria esta a solução. Entretanto, seria interessante se tivesse uma forma de remover apenas para o projeto, pois ao desabilitar, também perco esta funcionalidade para as demais aplicações, que utilizam os impressos.

    Mais uma vez, agradeço pelo retorno.

  6. Estou tentando compilar uma aplicação em modo console, mas utilizando o componente o componente TAcbrNFe, para executar o método DistribuicaoDFe.

    A ideia é uma aplicação linux, que execute como um Daemon, para realizar estas consultas.

    Mesmo definindo a diretiva NOGUI, ainda assim não consigo compilar, pois ocorre um erro na unit, ACBrDFeReport, que só tem as opções de usar Graphics ou FMX.Graphics.

    Existe alguma forma de contornar este problema, uma vez que não irei utilizar nenhum gerador de relatório, apenas a carga do certificado e a consulta aos DFes emitidos.

    Agradeço pela atenção dispensada.

  7. 14 minutos atrás, José M. S. Junior disse:

    Bom dia, se o banco conseguir enviar as especificações do boleto é importante para validações futuras, caso alguém tenha problemas na homologação. Assim temos a documentação completa para nos basear se alguém solicitar alterações...

    No último manual que enviei, nas páginas 19 e 20, tem a especificação.

  8. Boa tarde,

      No manual, com a versão anterior do arquivo CNAB400, nas duas últimas páginas (19 e 20), estão localizadas as especificações para a geração do boleto do banco Daycoval.

      Estou enviando também este manual em anexo.

      Eu liguei no suporte da cobrança do banco e me informaram que no manual mais recente (março/2019), "esqueceram" de colocar estas as duas últimas páginas, justamente as que tem a especificação do boleto. 

    Manual S. 707 - Banco Daycoval-Com Instruções do Boleto .pdf

  9. Também tenho interesse na utilização do layout deste banco. Inclusive, o Banco Daycoval tem um registro de detalhe específico para o envio das informações da NFe relacionada ao boleto do detalhe. Gostaria de saber se há alguma forma gerar este registro customizado (registro tipo 4 do Daycoval), para que seja enviado no mesmo arquivo.

  10. Apesar de seguir a mesma lógica do exemplo do ACBrNFe, o código é diferente, pois aplica algumas regras de negócio específicas. Mas basicamente pega os dados de um dataset, preenchendo o componente, chamando o Det.Add, para cada registro

    Segue abaixo o código utilizado, para a geração dos itens da NFe:

     

            dsCorpo.First;
            repeat
                with Det.Add do
                begin
                    Prod.nItem := dsCorpo.FieldByName('nitem').AsInteger;
                    Prod.cProd := dsCorpo.FieldByName('cprod').AsString;
            Prod.cEAN := dsCorpo.FieldByName('cean').AsString;
            Prod.cEANTrib := dsCorpo.FieldByName('cean').AsString;
                    Prod.xProd := dsCorpo.FieldByName('xprod').AsString;

                    Prod.NCM := dsCorpo.FieldByName('ncm').AsString;
            if dsCorpo.FindField('cest') <> Nil then
              Prod.CEST := dsCorpo.FieldByName('cest').AsString;
                    Prod.CFOP := dsCorpo.FieldByName('cfop').AsString;
                    // Se houver uma ocorrência de cfop de exportação, mudar a variavel
                    if SubStr(Prod.CFOP, 1, 1) = '7' then
                        bExportacao := True;
                    Prod.uCom := dsCorpo.FieldByName('ucom').AsString;
                    Prod.uTrib := dsCorpo.FieldByName('ucom').AsString;
                    Prod.qCom := dsCorpo.FieldByName('qcom').AsFloat;
                    Prod.qTrib := dsCorpo.FieldByName('qcom').AsFloat;
                    Prod.vUnCom := dsCorpo.FieldByName('vuncom').AsFloat;
                    Prod.vUnTrib := dsCorpo.FieldByName('vuncom').AsFloat;
                    Prod.vProd := dsCorpo.FieldByName('vprod').AsFloat;
            if not bForcarDestaqueFrete then
            begin
              if ((SubStr(Prod.CFOP, 1, 1) = '5') or (SubStr(Prod.CFOP, 1, 1) = '6')
                or (SubStr(Prod.CFOP, 1, 1) = '1')) then
              begin
                bDestacarFrete := False;
                bDestacarSeguro := False;
                Prod.vFrete := 0;
                Prod.vSeg := 0;
              end
              else
              begin
                if bDestacaFreteNFExp then
                begin
                  Prod.vFrete := dsCorpo.FieldByName('vfrete').AsFloat;
                  Prod.vSeg := dsCorpo.FieldByName('vseg').AsFloat;
                end
                else
                begin
                  bDestacarFrete := False;
                  bDestacarSeguro := False;
                  Prod.vFrete := 0;
                  Prod.vSeg := 0;
                end;
              end;
            end
            else
            begin
              Prod.vFrete := dsCorpo.FieldByName('vfrete').AsFloat;
              Prod.vSeg := dsCorpo.FieldByName('vseg').AsFloat;
            end;
                    Prod.vDesc := dsCorpo.FieldByName('vdesc').AsFloat;
                    Prod.vOutro := dsCorpo.FieldByName('voutro').AsFloat;

                    if (dsCorpo.FindField('ndi') <> Nil) then
                        if (dsCorpo.FieldByName('ndi').AsString <> EmptyStr) then
                        begin
                            with Prod.DI.Add do
                            begin
                                nDi := dsCorpo.FieldByName('ndi').AsString;
                                dDi := dsCorpo.FieldByName('ddi').AsDateTime;
                                xLocDesemb := dsCorpo.FieldByName('xlocdesemb').AsString;
                                UFDesemb := dsCorpo.FieldByName('ufdesemb').AsString;
                                dDesemb := dsCorpo.FieldByName('ddesemb').AsDateTime;
                                cExportador := dsNF.FieldByName('docdestinatario').AsString;
                                // necessário, pois o campo dest_cnpjcpf fica em branco para clientes EX
                  if (dsCorpo.FindField('nadicao') <> Nil) then
                  begin
                    with adi.Add do
                    begin
                      nAdicao := dsCorpo.FieldByName('nadicao').AsInteger;
                      nSeqAdi := dsCorpo.FieldByName('nseqadic').AsInteger;
                      cFabricante := dsCorpo.FieldByName('cfabricante').AsString;
                      vDescDI := dsCorpo.FieldByName('vdescdi').AsFloat;
                      nDraw := dsCorpo.FieldByName('ndraw').AsString;
                    end;
                  end;
                            end;
                        end;
            if (dsCorpo.FindField('xped') <> Nil) then
              if (dsCorpo.FieldByName('xped').AsString <> EmptyStr) then
              begin
                Prod.xPed := dsCorpo.FieldByName('xped').AsString;
                Prod.nItemPed := dsCorpo.FieldByName('nitemped').AsString;
              end;
            if Assigned(cdsDetExp) then
            begin
              if not cdsDetExp.IsEmpty then
              begin
                cdsDetExp.First;
                repeat
                  if cdsDetExp.FieldByName('item').AsString =
                    dsCorpo.FieldByName('cprod').AsString then
                  with Prod.detExport.Add do
                  begin
                    nDraw := cdsDetExp.FieldByName('ndraw').AsString;
                    nRE := cdsDetExp.FieldByName('nre').AsString;
                    chNFe := cdsDetExp.FieldByName('chnfe').AsString;
                    qExport := cdsDetExp.FieldByName('qexport').AsFloat;
                  end;
                  cdsDetExp.Next;
                until(cdsDetExp.Eof);
              end;
            end;
                    with Imposto do
                    begin
                        ICMS.CST := StrToCSTICMS(bConv, dsCorpo.FieldByName('icms_cst').AsString);
                        ICMS.orig := StrToOrig(bConv, dsCorpo.FieldByName('icms_orig').AsString);
                        ICMS.modBC := StrTomodBC(bConv, dsCorpo.FieldByName('icms_modbc').AsString);
                        if dsCorpo.FieldByName('icms_vicms').AsFloat > 0 then
                        begin
                            ICMS.vBC := dsCorpo.FieldByName('icms_vbc').AsFloat;
                            ICMS.pRedBC := dsCorpo.FieldByName('icms_predbc').AsFloat;
                            ICMS.pICMS := dsCorpo.FieldByName('icms_picms').AsFloat;
                            ICMS.vICMS := dsCorpo.FieldByName('icms_vicms').AsFloat;
                if (dsCorpo.FindField('icms_pdif') <> Nil) then
                begin
                  if dsCorpo.FindField('icms_pdif').AsFloat > 0 then
                  begin
                    ICMS.vICMSOp := dsCorpo.FieldByName('icms_vicms').AsFloat;
                    ICMS.pDif := dsCorpo.FieldByName('icms_pdif').AsFloat;
                    ICMS.vICMSDif := dsCorpo.FieldByName('icms_vicmsdif').AsFloat;
                    ICMS.vICMS := ICMS.vICMSOp - ICMS.vICMSDif;
                  end;
                end;
                if (ide.idDest = doInterestadual) and (Dest.indIEDest = inNaoContribuinte)
                  and (ide.indFinal = cfConsumidorFinal) then
                begin
                  if (dsCorpo.FindField('icmsufdest_picmsinter') <> Nil) then
                  begin
                    ICMSUFDest.vBCUFDest := dsCorpo.FieldByName('icms_vbc').AsFloat;
                    ICMSUFDest.pFCPUFDest := dsCorpo.FieldByName('icmsufdest_pfcpufdest').AsFloat;
                    ICMSUFDest.pICMSUFDest := dsCorpo.FieldByName('icmsufdest_picmsufdest').AsFloat;
                    ICMSUFDest.pICMSInter := dsCorpo.FieldByName('icmsufdest_picmsinter').AsFloat;
                    ICMSUFDest.pICMSInterPart := dsCorpo.FieldByName('icmsufdest_picmsinterpart').AsFloat;
                    ICMSUFDest.vFCPUFDest := Usar2Dec((ICMSUFDest.vBCUFDest * ICMSUFDest.pFCPUFDest) / 100);
                    vtmpICMSUFDest := Usar2Dec((ICMSUFDest.vBCUFDest * (ICMSUFDest.pICMSUFDest - ICMSUFDest.pICMSInter)) / 100);
                    ICMSUFDest.vICMSUFDest := Usar2Dec((vtmpICMSUFDest * ICMSUFDest.pICMSInterPart) / 100);
                    ICMSUFDest.vICMSUFRemet := Usar2Dec((vtmpICMSUFDest * (100 - ICMSUFDest.pICMSInterPart)) / 100);
                    vTotFCPUFDest := vTotFCPUFDest + ICMSUFDest.vFCPUFDest;
                    vTotICMSUFDest := vTotICMSUFDest + ICMSUFDest.vICMSUFDest;
                    vTotICMSUFRemet := vTotICMSUFRemet + ICMSUFDest.vICMSUFRemet;
                  end;
                end;

                        end;
                        IPI.CST := StrToCSTIPI(bConv, dsCorpo.FieldByName('ipi_cst').AsString);
                        if dsCorpo.FieldByName('ipi_pipi').AsFloat > 0 then
                        begin
                            IPI.vBC := dsCorpo.FieldByName('ipi_vbc').AsFloat;
                            IPI.pIPI := dsCorpo.FieldByName('ipi_pipi').AsFloat;
                            IPI.vIPI := dsCorpo.FieldByName('ipi_vipi').AsFloat;
                        end;
                        if (dsCorpo.FindField('icmsst_modbcst') <> Nil) then
                            if (dsCorpo.FieldByName('icmsst_vbcst').AsFloat > 0) then
                            begin
                                ICMS.modBCST := StrTomodBCST(bConv,
                                    dsCorpo.FieldByName('icmsst_modbcst').AsString);
                                ICMS.vBCST := dsCorpo.FieldByName('icmsst_vbcst').AsFloat;
                                ICMS.pICMSST := dsCorpo.FieldByName('icmsst_picmsst').AsFloat;
                                ICMS.vICMSST := dsCorpo.FieldByName('icmsst_valicmsst').AsFloat;
                            end;
                        // Para o CFOP de importação, deve ser informado o II,
                        // independente da alíquota
                        if SubStr(Prod.CFOP, 1, 1) = '3' then
                        begin
                            II.vBC := dsCorpo.FieldByName('ii_vbc').AsFloat;
                            II.vDespAdu := dsCorpo.FieldByName('vdespadu').AsFloat;
                            II.vIOF := 0;
                            II.vII := dsCorpo.FieldByName('ii_vii').AsFloat;
                        end;

                        PIS.CST := StrToCSTPIS(bConv, dsCorpo.FieldByName('pis_cst')
                            .AsString);
                        PIS.vBC := dsCorpo.FieldByName('pis_vbc').AsFloat;
                        PIS.pPIS := dsCorpo.FieldByName('pis_ppis').AsFloat;
                        PIS.vPIS := dsCorpo.FieldByName('pis_vpis').AsFloat;
                        COFINS.CST := StrToCSTCOFINS(bConv, dsCorpo.FieldByName('cofins_cst')
                            .AsString);
                        COFINS.vBC := dsCorpo.FieldByName('cofins_vbc').AsFloat;
                        COFINS.pCOFINS := dsCorpo.FieldByName('cofins_pcofins').AsFloat;
                        COFINS.vCOFINS := dsCorpo.FieldByName('cofins_vcofins').AsFloat;
                    end;
                end;
                dsCorpo.Next;
            until (dsCorpo.Eof);
     

  11. Boa tarde,

      É realmente estranho. Eu já havia conferido o código e os dois batiam. Até tentei salvar novamente arquivo .fr3, achando que poderia estar corrompido.

      Apenas para testar, eu fiz o seguinte. Ao invés de carregar o stream do Banco, eu simplesmente carreguei o BMP direto do arquivo. Não funcionou, continua dando o mesmo erro. Se eu indico direto mesmo arquivo, funciona.

    Seguem abaixo os dois trechos de código:

    Não funciona: 

        stLogo := TStringStream.Create;
        stLogo.LoadFromFile('C:\CTe\Logo.Bmp');
        CTe.DACTe.Logo := stLogo.DataString;
        stLogo.Free;
     

    Funciona:

        CTe.DACTe.Logo := 'C:\CTe\Logo.bmp';
     

  12. Bom dia,

      Sim, eu atualizei os arquivos .FR3. A versão que estou utilizando do FastReport é a 5.3.5

      Ainda assim o erro persiste. O código é o mesmo que utilizo pra a geração da NF-e, que funciona a contento.

     Se tento passar apenas um arquivo como parâmetro, também funciona.

     Só está ocorrendo erro ao tentar carregar o logotipo de um Stream.

     Na versão anterior do ACBr, funcionava. Inclusive, eu é que submeti os arquivos com a sugestão de mudança para utilizar o logotipo a partir de um stream, conforme descrito no tópico:

    Esta necessidade surgiu, porque o sistema é multi-empresa, com várias empresas acessando simultaneamente. Portanto, a carga do logotipo via stream, é a alternativa mais adequada para imprimir diferentes logotipos.

     

    Agradeço pela atenção dispensada.

  13. Bom Dia, Juliomar

      Na verdade, este é o trecho de código que utilizo para carregar o logotipo do banco de dados. Ele está correto, pois funcionava perfeitamente no trunk1 do acbr. E o mesmo trecho é utilizado para carregar o logotipo na geração do DANF-e, no Trunk2.

      Apenas no DACT-e, do trunk2, é que o erro ocorre.

     

    Att

  14. O carregamento do logotipo do DACT-e (FastReport 5.x) funcionava de maneira correta, ao carregar de um stream, utilizando o código abaixo:

        imgFR := TLogotipoFR.Create(DadosFilho.qryJoker);
        stLogo := TStringStream.Create;
        imgFR.SetEmpresa(FPrincipal.iIDEmpresa);
        imgFR.Load(stLogo);
        imgFR.Free;
        CTe.DACTe.Logo := stLogo.DataString;
        stLogo.Free;
     

    Após a migração para o Trunk2, ao exibir um DACT-e, ocorre um acess violation. Isolando o trecho de código acima (deixando o logo em branco), o DACT-e é exibido corretamente.

    Att.

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