Ir para conteúdo
  • Cadastre-se

LEANDRODOCOUTO

Membros
  • Total de ítens

    76
  • Registro em

  • Última visita

Posts postados por LEANDRODOCOUTO

  1.  

    function TACBrBancoSicredi.GerarRegistroHeader240(
      NumeroRemessa: Integer): String;
    var TipoInsc: String;
    begin
      case ACBrBanco.ACBrBoleto.Cedente.TipoInscricao of
        pFisica:   TipoInsc := '1';
        pJuridica: TipoInsc := '2';
      else
        TipoInsc := '9';
      end;

      with ACBrBanco.ACBrBoleto.Cedente do
      begin
        { HEADER DE ARQUIVO }
        Result := '748'                                                         + // 001 a 003 - Código do banco na compensação "748" SCIREDI
                  '0000'                                                        + // 004 a 007 - Lote de serviço "0000"
                  '0'                                                           + // 008 a 008 - Tipo de registro = "0" HEADER ARQUIVO
                  Space(9)                                                      + // 009 a 017 - Uso exclusivo FEBRABAN/CNAB
                  TipoInsc                                                      + // 018 a 018 - Tipo de inscrição da empresa = "1" Pessoa Física "2" Pessoa Jurídica
                  PadLeft(OnlyNumber(CNPJCPF), 14, '0')                         + // 019 a 032 - Número de inscrição da empresa
                  Space(20)                                                     + // 033 a 052 - Código do convênio no banco (O SICREDI não valida este campo; cfe Manual Agosto 2010 pág. 35)
                  PadLeft(OnlyNumber(Agencia), 5, '0')                          + // 053 a 057 - Agência mantenedora da conta
                  Space(1)                                                      + // 058 a 058 - Dígito verificador da agência
                  PadLeft(OnlyNumber(Conta), 12, '0')                   + // 059 a 070 - Código do cedente
                  PadRight(ContaDigito, 1, '0')                                 + // 071 a 071 - DV Conta
                  Space(1)                                                      + // 072 a 072 - Dígito verificador da ag
                  PadRight(Nome, 30)                                            + // 073 a 102 - Nome da empresa
                  PadRight('SICREDI', 30)                                       + // 103 a 132 - Nome do banco = "SICREDI"
                  Space(10)                                                     + // 133 a 142 - Uso exclusivo FEBRABAN/CNAB
                  '1'                                                           + // 143 a 143 - Código Remessa/Retorno = "1" Remessa "2" Retorno
                  FormatDateTime('ddmmyyyy', Now)                               + // 144 a 151 - Data de geração do arquivo
                  FormatDateTime('hhnnss', Now)                                 + // 152 a 157 - Hora de geração do arquivo
                  IntToStrZero(NumeroRemessa, 6)                                + // 158 a 163 - Número sequencial do arquivo
                  '081'                                                         + // 164 a 166 - Nº da versão do leiaute do arquivo = "081"
                  '01600'                                                       + // 167 a 171 - Densidade de gravação do arquivo = "01600"
                  Space(20)                                                     + // 172 a 191 - Para uso reservado do banco
                  Space(20)                                                     + // 192 a 211 - Para uso reservado da empresa
                  Space(29);                                                      // 212 a 240 - Uso exclusivo FEBRABAN/CNAB

        { HEADER DE LOTE }
        Result := Result + #13#10                                               +
                  '748'                                                         + // 001 a 003 - Código do banco na compensação "748" SICREDI
                  '0001'                                                        + // 004 a 007 - Lote de serviço "0001"
                  '1'                                                           + // 008 a 008 - Tipo de registro = "1" HEADER LOTE
                  'R'                                                           + // 009 a 009 - Tipo de operação = "R" Arquivo de Remessa
                  '01'                                                          + // 010 a 011 - Tipo de serviço = "01" Cobrança
                  Space(2)                                                      + // 012 a 013 - Uso exclusivo FEBRABAN/CNAB
                  '040'                                                         + // 014 a 016 - Nº da versão do leiaute do lote = "040"
                  Space(1)                                                      + // 017 a 017 - Uso exclusivo FEBRABAN/CNAB
                  TipoInsc                                                      + // 018 a 018 - Tipo de inscrição da empresa = "1" Pessoa Física "2" Pessoa Jurídica
                  PadLeft(OnlyNumber(CNPJCPF), 15, '0')                         + // 019 a 033 - Número de inscrição da empresa
                  Space(20)                                                     + // 034 a 053 - Código do convênio no banco (O SICREDI não valida este campo; cfe Manual Agosto 2010 pág. 35)
                  PadLeft(OnlyNumber(Agencia), 5, '0')                          + // 054 a 058 - Agência mantenedora da conta
                  Space(1)                                                      + // 059 a 059 - Dígito verificador da agência
                  PadLeft(OnlyNumber(Conta), 12, '0')                   + // 060 a 071 - Código do cedente
                  PadRight(ContaDigito,1)                                       + // 072 a 072 - Zeros
                  Space(1)                                                      + // 073 a 073 - Dígito verificador da coop/ag/conta
                  PadRight(Nome, 30)                                            + // 074 a 103 - Nome da empresa
                  Space(40)                                                     + // 104 a 143 - Mensagem 1
                  Space(40)                                                     + // 144 a 183 - Mensagem 2
                  IntToStrZero(NumeroRemessa, 8)                                + // 184 a 191 - Número remessa/retorno
                  FormatDateTime('ddmmyyyy', Now)                               + // 192 a 199 - Data de gravação rem./ret.
                  PadRight('', 8, '0')                                          + // 200 a 207 - Data do crédito
                  Space(33);                                                      // 208 a 240 - Uso exclusivo FEBRABAN/CNAB

        end;

        Result := UpperCase(Result);

     

    As linhas em negrito são as linhas alteradas.. antes ali o acbr colocava o código do cedente..

     

    sds,

     

  2. Boa tarde...

    Também tenho vários clientes homologados desta forma. O que acontece... O Sicredi mudou a forma de homologação da cobrança.. antes eles enviavam uma tabela do excel somente para conferir a geração da linha digitável e o arquivo era validado pelo site do sicredi, que não fazia a validação do digito do nosso número. Agora eles mandam uma planilha em excel que cheia de macros que valida o arquivo e o digito de controle do nosso numero. Liguei para o suporte e eles me disseram que essa planilha segue rigorosamente o que está no manual, que nos headers do arquivo deve ir o numero da conta ( COMO ESTÁ NO MANUAL ) e que para o calculo do digito nosso numero eles usam o código do cedente ( MAS ESSE NÃO VAI NO ARQUIVOS ). Conferi o manual e de fato está correta a informação que o suporte me passou. O ACBR deve seguir o que está no manual. Nessa nova planilha, se coloco o codigo do cedente ela da erro no header, por espera o numero da conta, se coloco o numero da conta como código do cedente, ele valida o header, mas calcula errado o digito do nosso numero. Minha opinião é que o ACBR deve seguir exatamente o que diz nos manuais dos bancos e que essa é uma alteração que deve ser feita.

    sds,

  3. Consegui homologar o Sicredi na planilha deles..

    Conforme o Manual padrao 240, no Header e no Header do Lote, deve ir o numero da Conta e o ACBR esta mandando o código do Cedente.
    Fiz as Seguintes Alterações
    No Método GerarRegistroHeader240

    Alterei o código em destaque... ali estava mandando o codigo do Cedente, quando deveria mandar o numero da Conta..
    Depois disso, consegui homologar normalmente...

     with ACBrBanco.ACBrBoleto.Cedente do
      begin
        { HEADER DE ARQUIVO }
        Result := '748'                                                         + // 001 a 003 - Código do banco na compensação "748" SCIREDI
                  '0000'                                                        + // 004 a 007 - Lote de serviço "0000"
                  '0'                                                           + // 008 a 008 - Tipo de registro = "0" HEADER ARQUIVO
                  Space(9)                                                      + // 009 a 017 - Uso exclusivo FEBRABAN/CNAB
                  TipoInsc                                                      + // 018 a 018 - Tipo de inscrição da empresa = "1" Pessoa Física "2" Pessoa Jurídica
                  PadLeft(OnlyNumber(CNPJCPF), 14, '0')                         + // 019 a 032 - Número de inscrição da empresa
                  Space(20)                                                     + // 033 a 052 - Código do convênio no banco (O SICREDI não valida este campo; cfe Manual Agosto 2010 pág. 35)
                  PadLeft(OnlyNumber(Agencia), 5, '0')                          + // 053 a 057 - Agência mantenedora da conta
                  Space(1)                                                      + // 058 a 058 - Dígito verificador da agência
                  PadLeft(OnlyNumber(Conta), 12, '0')                           + // 059 a 070 - Código do cedente
                  PadRight(ContaDigito, 1, '0')                                 + // 071 a 071 - DV Conta
                  Space(1)                                                      + // 072 a 072 - Dígito verificador da ag
                  PadRight(Nome, 30)                                            + // 073 a 102 - Nome da empresa
                  PadRight('SICREDI', 30)                                       + // 103 a 132 - Nome do banco = "SICREDI"
                  Space(10)                                                     + // 133 a 142 - Uso exclusivo FEBRABAN/CNAB
                  '1'                                                           + // 143 a 143 - Código Remessa/Retorno = "1" Remessa "2" Retorno
                  FormatDateTime('ddmmyyyy', Now)                               + // 144 a 151 - Data de geração do arquivo
                  FormatDateTime('hhnnss', Now)                                 + // 152 a 157 - Hora de geração do arquivo
                  IntToStrZero(NumeroRemessa, 6)                                + // 158 a 163 - Número sequencial do arquivo
                  '081'                                                         + // 164 a 166 - Nº da versão do leiaute do arquivo = "081"
                  '01600'                                                       + // 167 a 171 - Densidade de gravação do arquivo = "01600"
                  Space(20)                                                     + // 172 a 191 - Para uso reservado do banco
                  Space(20)                                                     + // 192 a 211 - Para uso reservado da empresa
                  Space(29);                                                      // 212 a 240 - Uso exclusivo FEBRABAN/CNAB

        { HEADER DE LOTE }
        Result := Result + #13#10                                               +
                  '748'                                                         + // 001 a 003 - Código do banco na compensação "748" SICREDI
                  '0001'                                                        + // 004 a 007 - Lote de serviço "0001"
                  '1'                                                           + // 008 a 008 - Tipo de registro = "1" HEADER LOTE
                  'R'                                                           + // 009 a 009 - Tipo de operação = "R" Arquivo de Remessa
                  '01'                                                          + // 010 a 011 - Tipo de serviço = "01" Cobrança
                  Space(2)                                                      + // 012 a 013 - Uso exclusivo FEBRABAN/CNAB
                  '040'                                                         + // 014 a 016 - Nº da versão do leiaute do lote = "040"
                  Space(1)                                                      + // 017 a 017 - Uso exclusivo FEBRABAN/CNAB
                  TipoInsc                                                      + // 018 a 018 - Tipo de inscrição da empresa = "1" Pessoa Física "2" Pessoa Jurídica
                  PadLeft(OnlyNumber(CNPJCPF), 15, '0')                         + // 019 a 033 - Número de inscrição da empresa
                  Space(20)                                                     + // 034 a 053 - Código do convênio no banco (O SICREDI não valida este campo; cfe Manual Agosto 2010 pág. 35)
                  PadLeft(OnlyNumber(Agencia), 5, '0')                          + // 054 a 058 - Agência mantenedora da conta
                  Space(1)                                                      + // 059 a 059 - Dígito verificador da agência
                  PadLeft(OnlyNumber(Conta), 12, '0')                   + // 060 a 071 - Código do cedente
                  PadRight(ContaDigito,1)                                       + // 072 a 072 - Zeros
                  Space(1)                                                      + // 073 a 073 - Dígito verificador da coop/ag/conta
                  PadRight(Nome, 30)                                            + // 074 a 103 - Nome da empresa
                  Space(40)                                                     + // 104 a 143 - Mensagem 1
                  Space(40)                                                     + // 144 a 183 - Mensagem 2
                  IntToStrZero(NumeroRemessa, 8)                                + // 184 a 191 - Número remessa/retorno
                  FormatDateTime('ddmmyyyy', Now)                               + // 192 a 199 - Data de gravação rem./ret.
                  PadRight('', 8, '0')                                          + // 200 a 207 - Data do crédito
                  Space(33);                                                      // 208 a 240 - Uso exclusivo FEBRABAN/CNAB

        end;
     

  4. Fui olhar no manual cnab240 do sicredi.. e de fato e isso mesmo..

    Isso está no ACBR... na geração do header 240
    PadLeft(OnlyNumber(CodigoCedente), 12, '0')                   + // 059 a 070 - Código do cedente
    Segue em anexo print do Manual..

    Capturar.thumb.PNG.7f22e06729bf2286ea3fe77df4ff1895.PNG

     

     

    Boa tarde Agnaldo..

    O Acbr utiliza a propriedade Cedente.CodigoCedente para calcular o digido do NossoNumero ( isso está correto ). 
    O Sicredi agora tem uma planilha em execel que analisa os arquivos de remessa. Se eu coloco nesse campo o código do Cedente
    fornecido pela Agência, o arquivo não é validado, porque o acbr vai jogar no header o campo CodigoDoCedente (PadLeft(OnlyNumber(CodigoCedente), 12, '0')   )
    quando deveria jogar o numero da conta. Se eu coloco o numero da conta nessa propriedade, ele valida o header mas ai não valida o digito do nosso numero
    porque o acbr vai usar o valor da propriedade CodigoCedente.. 
    Vou mudar aqui o fonte do acbr pra ver se funciona.. se der certo coloco a alteração aqui...

     

  5. Não estou conseguindo hologar o sicredi com aquela planilha deles no padrao CNAB240..
    Se coloco o numero do cedente no local , ele não valida dizendo que espera o codigo da conta
    se coloco o numero da conta, ele não gera o digito do nosso numero corretamente.
    Enviei um email e eles retornaram com a seguinte informação.. 

    Na 240 nos campos header’s de arquivo e lote, e segmento P o Sicredi espera o número da conta. E para desenvolvimento do Nosso Número deve ser utilizado o código do cedente.

    O Acbr trata dessa forma ?

     

    sds,

  6. Na leitura do arquivo de retorno do Banrisul CNAB400.. o acbr está lendo 8 caracteres..

    NossoNumero          := Copy(Linha,63,08);

    Porém no manual, são 10 digitos ( posicao 10 a 72 )..( pagina 18 )

    063 072 IDENTIFICAÇÃO DO TÍTULO PARA O BANCO - Nosso Número

     

  7. Fiz uma alteração na Unit ACBr Boleto no método ChecarDadosObrigatorios

     

    fiz mensagens de erro individuais para cada erro, ao invés de aparecer somente "Dados do Cedente faltando"

     

    if (Cedente.Nome= '') then
          raise Exception.Create(ACBrStr('Nome do cedente faltando'));

       if (cedente.Conta = '') then
          raise Exception.Create(ACBrStr('Conta do cedente faltando'));

       if((Cedente.ContaDigito ='') and (Banco.TipoCobranca <> cobBanestes)) then
          raise Exception.Create(ACBrStr('Digito da conta faltando'));

       if (Cedente.Agencia = '') or ((Cedente.AgenciaDigito = '') and (Banco.TipoCobranca <> cobBanestes)) then
          raise Exception.Create(ACBrStr('Agência da conta faltando'));
     

    Segue em anexo a Unit alterada..

     

     

    ACBrBoleto.pas

  8. Na UNIT AcbrBancoBanrisul, na linha. 811, está faltando um TRIM... está trazendo com espaço em branco no final, e aqui pra mim não estava lendo os retornos, sempre dava erro de agencia / conta do arquivo inválido.. ajustei conforme abaixo e funcionou:
    rConta         := Trim( Copy(ARetorno.Strings[0], 31, 9) );

    sds,

  9. O que eu fiz aqui pra mim e deu certo, pros provedores Thema e ISSNET, na unit ACBrDFeCapicomDelphiSoap, la linha 106, tem uma exception.. eu tirei ela, deixei somente assim.

        if (UseCertificate) then
            InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT,  Pointer(HCertContext), SizeOf(CERT_CONTEXT));

    nos arquivo INI, deixei UseCertificado=1 e no componente lib = libCapicomDelphiSoap.

    Sempre que atualizo os componente, entro nessa unit e modifico...

    • Curtir 2
  10. Tamem fiz o seguinte, que deu certo, com lib=libCapicomDelphiSoap , na unit AcbrDfeCapicomDelphiSoap, ma linha 107, aonde define o parametro , INTERNET_OPTION_CLIENT_CERT_CONTEXT, deixei assim.

        if (UseCertificate) then
          InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, Pointer(HCertContext), SizeOf(CERT_CONTEXT))
    ou seja, não mostra a mensagem em caso de erro. Funcionou pra envio da NFS-e e NF-e.   Só consigo testar nos provedores ISSnet e Thema, não sei o impacto nos outros provedores.
    Não consegui entender ainda, porque a mesma chamada funciona pra emissão de NF-e e pra NFS-e não funciona.. estou analisando mais a fundo pra ver se descubro, mas por ora esta funcionando

  11. tenta mudar no teu componente a propriedade configuracoes.geral.SSLLib        := libCapicom;
    Pra mim dá erro 12002 com Capicom, Caso dê esse erro, ( 12002 com libCapicom ), tem uma solução emergencial que pra mim deu certo.

    Abre a unit ACBrHTTPReqResp do acbr, na pasta Fontes\AcbrCapicom, na procedure TACBrHTTPReqResp.Execute(Resp: TStream);, logo apos o begin, coloque
    FUseCertificate=false; Importante que essa seja a primeir alinha da procedure... desse jeito, aqui pra mim funciona, ou seja, usar o certificado pra assinar mas não pra transmitir. Só que isso é uma gambiarra, pelo menos pra sair do sufoco. Estou depurando pra ver se descubro algo..

     

    sds,

     

    Leandro

  12. Se colocar UseCertificado=0 e algumas dessas opções

    [Assinar]
    RPS=0
    Lote=1
    URI=1
    Recepcionar=0
    ConsSit=0
    ConsLote=0
    ConsNFSeRps=0
    ConsNFSe=0
    Cancelar=1
    RpsGerar=0
    LoteGerar=0
    RecSincrono=0
    Substituir=0


    Estiver marcada como 1, esse erro vai acontecer, pois o componente vai tentar assinar e está configurado para não usar certificado, então a mensagem de erro é coerente. Se quiser usar UseCerticado=0, coloque tudo como 0. Porém acho que em algum momento, será necessária a assinatura, e portanto o uso do certificado. Aqui pra mim não deu certo sem certificado para os provedores ISSnet e Thema.

  13. Bom dia Italo...

    Sei disso.. passei dois dias debugando até chegar na linha aonde ocorre o problema. Essa mudança fiz de forma  emergencial, para alguém que esteja na mesma situação que eu talvez essa alterção vai quebrar um galho como quebrou pra mim. Sei que não pode ser definitiva...agora vou depurar pra ver qual a real situação que causa o erro 12002...

    sds,

    Leandro

    • Curtir 1
  14. Mudei os headers soap no arquivo INI pra deixar como o manual ( soap: ao inves de S: ) mas mesmo assim não resolveu...

    Então..

    na Unit ACBrHTTPReqResp, na procedure TACBrHTTPReqResp.Execute(Resp: TStream) o valor de FUseCertificate vem sempre como TRUE.. mesmo no arquivo INI estar como 0. Somente coloquei FUseCertificate := false; na primeira linha dessa unit e o erro 12002 parou...

    Tem uma maneira de nessa procedure, pegar o objeto NFSE pra verificar o status da Propriedadae UseCertificado ?

    Isso resolveria o problema, porque era só associar o valor da propriedade a variavel FFUseCertificate .

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