-
Total de ítens
76 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por LEANDRODOCOUTO
-
-
Boa tarde...
nenhum dos desenvolvedor está analisando esse caso ?
Posso enviar as linhas alteradas
Grato.
-
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,
-
Boa tarde.. algum retorno ?
Grato..
-
-
Por gentileza, algum dos moderadores pode confirmar e commitar essas alterações..
São importantes para a homologação do Sicredi..
-
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 GerarRegistroHeader240Alterei 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/CNABend;
-
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..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... -
Quando gravo o numero do banco na base de dados, gravo completo, com os digitos... quando o acbr le, ele le somente 8, ignorando os digitos..entendo que deveria ler a informação completa..
-
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,
-
Ja foi corrigido ?
-
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
-
Tenho uma maquina virtual com windows xp SP3 funcionando normalmente...
-
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..
-
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,
-
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...
- 2
-
Colocou a propriedade SSL.lib=libCapicomDelphiSoap ?
-
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 -
dá uma olhada nesse tópico..
-
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
-
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. -
Mudei o SSLib para libCapicomDelphiSoap por causa do erro 12002 que tinha antes, e agora dá o erro 12046 para o provedor ISSNET.
Fontes atualizados
UseCertificado=1
Delphi Seattle
sds,
Leandro
-
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
- 1
-
A unica maneira que deu certo foi colocando na Unit ACBrHTTPReqResp, na procedure TACBrHTTPReqResp.Execute(Resp: TStream) o valor de FUseCertificate para FALSE... ai nao dá mais o erro 12002
-
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 .
Sicredi...
em ACBrBoleto
Postado
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,