-
Total de ítens
670 -
Registro em
-
Última visita
-
Days Won
1
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que Antonio Gomes postou
-
interessante, não mexi em nada... vc não estaria enviado isso pelo sicob? Unit "ACBrBancoCaixaSICOB"
-
@Juliana Tamizou tem como incorporar ao fonte?
-
então, peguei para testar baseado no que reportou. o nosso numero gerado no seu programa foi dv = 3 ? Segue imagem do boleto
-
se pensar no contexto de somar da direita para esquerda, está certo... Eu tenho esse banco funcionando, e desse jeito. Qual problema reportaram para vc? Coloca os dados da conta e carteira para testarmos junto.
-
Não, vc tem que fazer a treta certa, vou passar como faço: TFuncBoleto.ACBrBoleto.DirArqRemessa := ExcludeTrailingPathDelimiter(ADirRemessa); TFuncBoleto.ACBrBoleto.NumeroArquivo := IBDSPai.FieldByName('SEQ_ARQUIVO_BOR').AsLargeInt; TFuncBoleto.ACBrBoleto.NomeArqRemessa := AArqRemessa; AArqRemessa := TFuncBoleto.ACBrBoleto.GerarRemessa(IBDSPai.FieldByName('SEQ_ARQUIVO_BOR').AsLargeInt);
-
Isso tem que ser salvo no banco, no cadastro da conta corrente, vinculado ao banco, para caso o segundo usuario da rede for gerar, ter o mesmo resultado. Sugestão de ter apenas as pastas iguais nas maquinas.
-
vc pode enviar o comando especifico, mas geralmente é mais fácil implementar essa alteracao pelo gerenciador do proprio banco. é uma coisa que quase nao se usa dentro do sistema... seu bordero de envio pode fazer alteração também.
-
Sicoob - Remessa - CNAB240 - Versão Layout 87
Antonio Gomes replied to digao_go's tópico in ACBrBoleto
Mas altera sem mexer na estrutura do arquivo? -
Sicoob - Remessa - CNAB240 - Versão Layout 87
Antonio Gomes replied to digao_go's tópico in ACBrBoleto
https://www.sicoob.com.br/validador-cnab240-cobranca -
Sicoob - Remessa - CNAB240 - Versão Layout 87
Antonio Gomes replied to digao_go's tópico in ACBrBoleto
voce tem esse manual com a versão solicitada ? -
Retorno 240 Bancoob - Problema no Nosso Número
Antonio Gomes replied to Alex Pereira Sousa's tópico in ACBrBoleto
vc está confundindo, o incremento é menor mesmo, o que o siccob pede, é para concatenar mais coisas antes do nosso número. Dai quando vai usar, despreza-se esses dados. A menos que voce grave o o nosso numero com esse monte de coisa que vem no retorno. Um detalhe: No seu programa, como fica o campo nosso número gravado ? apenas a primeira parte? ou nosso numero com DV ? Ex: Gravo tudo separado, para repassar ao componente informação já correta, sem precisar ficar cortando... -
faltou um arquivo ACBrNFSeDANFSeFR.pas
-
A função de enviar email, está com uma divergencia ao gerar o nome do pdf, com isso, quando pede o envio, acusa que nao existe o pdf. Para tanto, existe como ser corrigido: procedure NotaFiscal.EnviarEmail(sPara, sAssunto: String; sMensagem: TStrings; EnviaPDF: Boolean; sCC: TStrings; Anexos: TStrings; sReplyTo: TStrings; ManterPDFSalvo: Boolean); var NomeArq: String; AnexosEmail:TStrings; StreamNFSe: TMemoryStream; begin if not Assigned(TACBrNFSe(TNotasFiscais(Collection).ACBrNFSe).MAIL) then raise EACBrNFSeException.Create('Componente ACBrMail não associado'); AnexosEmail := TStringList.Create; StreamNFSe := TMemoryStream.Create; try AnexosEmail.Clear; if Assigned(Anexos) then AnexosEmail.Assign(Anexos); with TACBrNFSe(TNotasFiscais(Collection).ACBrNFSe) do begin GravarStream(StreamNFSe); if (EnviaPDF) then begin if Assigned(DANFSE) then begin DANFSE.ImprimirDANFSEPDF(FNFSe); // remover isso //DANFSE.ArquivoPDF // desnecessário //NomeArq := PathWithDelim(DANFSE.PathPDF) + NumID[FNFSe] + '-nfse.pdf'; // desnecessario AnexosEmail.Add(DANFSE.ArquivoPDF); <<<<<<<<<<<< acrescentar desse formato end; end; EnviarEmail( sPara, sAssunto, sMensagem, sCC, AnexosEmail, StreamNFSe, NumID[FNFSe] +'-nfse.xml', sReplyTo);ACBrNFSeDANFSeFR.pas end; finally if not ManterPDFSalvo then DeleteFile(NomeArq); AnexosEmail.Free; StreamNFSe.Free; end; end; E na funcao de gerar o pdf, para fast report: procedure TACBrNFSeDANFSeFR.ImprimirDANFSePDF(NFSe: TNFSe); const TITULO_PDF = 'Nota Fiscal de Serviço Eletrônica'; var I : Integer; NomeArqXML: string; OldShowDialog: Boolean; begin if PrepareReport(NFSe) then begin frxPDFExport.Author := Sistema; frxPDFExport.Creator := Sistema; frxPDFExport.Subject := TITULO_PDF; frxPDFExport.EmbeddedFonts := False; frxPDFExport.Background := False; OldShowDialog := frxPDFExport.ShowDialog; try frxPDFExport.ShowDialog := False; for I := 0 to TACBrNFSe(ACBrNFSe).NotasFiscais.Count - 1 do begin with TACBrNFSe(ACBrNFSe).NotasFiscais.Items do begin NomeArqXML := TACBrNFSe(ACBrNFSe).NumID[TACBrNFSe(ACBrNFSe).NotasFiscais.Items.NFSe]; <<<<<<<<<<<<<<<< acrescentar isso // remover isso { if TACBrNFSe(ACBrNFSe).Configuracoes.Arquivos.NomeLongoNFSe then NomeArqXML := GerarNomeNFSe(UFparaCodigo(NFSe.PrestadorServico.Endereco.UF), NFSe.DataEmissao, NFSe.PrestadorServico.IdentificacaoPrestador.Cnpj, StrToInt64Def(NFSe.Numero,0)) else NomeArqXML := NFSe.Numero + NFSe.IdentificacaoRps.Serie;} end; frxPDFExport.FileName := PathPDF + NomeArqXML + '-nfse.pdf'; // Correção aplicada do nome do arquivo para o envio de e-mail if not DirectoryExists(ExtractFileDir(frxPDFExport.FileName)) then ForceDirectories(ExtractFileDir(frxPDFExport.FileName)); frxReport.Export(frxPDFExport); FPArquivoPDF := frxPDFExport.FileName; end; finally frxPDFExport.ShowDialog := OldShowDialog; end; end; end; Em anexo arquivos modificados. A unit que gera para fortesreport já gera correto, inclusive... ACBrNFSeNotasFiscais.pas
-
uai até onde sei, isso que tem que ser feito dentro do loop Titulo:=ACBrBoleto1.CriarTituloNaLista; e não precisa de aplicar o insert da variavel "titulo" ela já pertence ao acbrboleto1... pelo menos uso assim.. I :=1; while i <= 3 do begin Titulo:=ACBrBoleto1.CriarTituloNaLista; preenche dados do titulo inc(i); end imprime;...
-
o nosso número é o mesmo ? note ali no inicio, onde está 001-90 e no outro 001-98 e o final, parece ser um boleto de 140 reais, no segundo o valor nao está igual... falta algo na configuracao que precisa colocar no componente. faça o teste com o mesmo numero de boleto + vencimento + valor, tudo impacta o resultado final.
-
Ficar atento ao repassar nosso numero para o componente, pois pode haver problema com soma de DV e cortes por posição. Vi que o nosso numero seu está formatado. Atente para isso.
- 8 replies
-
- 1
-
- linha digitável
- sicoob
- (e 1 mais)
-
fastreport vi isso acontecer também, só quando gera pdf.
-
Métodos públicos para criação de ClassHelpers
Antonio Gomes replied to everson.turossi's tópico in ACBrBoleto
Eu tenho uma treta dessa, tanto que não uso a impressão que tem de boleto que tem no componente, pois deixo o boleto para ser alterado no cliente, é mais uma ideia. Se vc derivar um componente do original, e rescrever a rotina não funciona? mesmo sendo privada. -
Tem N opções de resolver isso. Voce pode gravar a chave uma unica vez, e se precisar faz o explode da mesma. O que mencionei antes foi: Evento BeforePost do se dataset: if IBDSPai.FieldByName('NFE_NUM_ALEATORIO_NF').AsInteger = 0 then begin Randomize; IBDSPai.FieldByName('NFE_NUM_ALEATORIO_NF').AsInteger := Random(StrToInt(FormatDateTime('yymmddmm', IBDSPai.FieldByName('DATAEMISSAO_NF').AsDateTime + Time))); end; ou if IBDSPai.FieldByName('NFE_NUM_ALEATORIO_NF').AsInteger = 0 then IBDSPai.FieldByName('NFE_NUM_ALEATORIO_NF').AsInteger := ACBrDFeUtil.GerarCodigoDFe( StrToInt(FormatDateTime('yymmddmm', IBDSPai.FieldByName('DATAEMISSAO_NF').AsDateTime + Time))); depois, ao gerar a chave: Chave := ACBrDFeUtil.GerarChaveAcesso( TFuncoesNFe.UFTocUF(ParametroEmpresa.Cidade.UF_Cid), CDSNf.FieldByName('DATAEMISSAO_NF').AsDateTime, iif(ParametroEmpresa.CNPJ <> '', ParametroEmpresa.CNPJ, ParametroEmpresa.CPF), CDSNf.FieldByName('SERIE_NF').AsInteger, CDSNf.FieldByName('NUMNOTA_NF').AsLargeInt, StrToInt(CDSNf.FieldByName('NFE_TIPO_EMISSAO_NF').AsString), CDSNf.FieldByName('NFE_NUM_ALEATORIO_NF').AsInteger, CDSNf.FieldByName('MODELO_NF').AsInteger);
-
if CDS_VENDA.FieldByName( 'VEN_A05_ID' ).AsString = '' then CDS_VENDA.FieldByName( 'VEN_A05_ID' ).AsString := GerarChaveAcesso( CDS_VENDA.FieldByName( 'VEN_B02_CUF' ).AsInteger, // Código da UF do emitente do Documento Fiscal //); := GerarChaveAcesso( CDS_VENDA.FieldByName( 'VEN_B02_CUF' ).AsInteger, // Código da UF do emitente do Documento Fiscal //); usa campo do banco: CDS_VENDA.FieldByName( 'VEN_A05_ID' ).AsString
-
Não deixa a chave gravada no banco e passa trabalhar so com ela? Se não, cria esse campo de numero aleatorio no seu banco e passa usar ele. se mandar gerar a todo momento vai dar problema de duplicidade .
-
Uma vez que fiz homologação com esse banco, vc tinha que avisar para eles mudarem. Olha só: Etapas da implantação: ✓ Banco envia layouts/dados do atendimento; ✓ Cliente envia arquivos; ✓ Banco faz a análise dos arquivos e orienta na parametrização; ✓ Banco assessora cliente na realização de testes; ✓ Finalização do processo em produção. Lembramos que a utilização do convênio em ambiente de produção deve respeitar o fluxo acima. Atenciosamente, Wander Roberto da Silva Santander - Entrega Eletrônica Telefones - (11) 3135-7600 e (11) 3777 8056 Horário de Atendimento – 09:00 às 18:00 E-mail: [email protected] E-mail: [email protected]
-
Na verdade, eu salvo esse campo no banco de dados, em outro campo. Por isso aconteceu de eu ter visto o erro. Eu mesmo que gerei o número aleatório. Poderia eu mesmo agora acionar a funcao do acbr de gerar essa chave e manter gravado, assim já passa pela validação. Isso no passado quando eu gerava ela a todo instante, acontecia o que foi reportado la embaixo, de duplicidade, dai o motivo dela ficar salvo na tabela de nota fiscal.. ao gerar simplesmente repasso o campo. Se você puser o not antes, nao vai dar certo, pois tem que entrar para validar, ou simplesmente gerar, a funcao gera se dentro for zero. Aqui: f ACodigo = 0 then ACodigo := GerarCodigoDFe(ANumero);
-
function GerarChaveAcesso(AUF: Integer; ADataEmissao: TDateTime; const ACNPJ: String; ASerie, ANumero, AtpEmi, ACodigo: Integer; AModelo: Integer): String; var vUF, vDataEmissao, vSerie, vNumero, vCodigo, vModelo, vCNPJ, vtpEmi: String; begin // Se o usuario informar um código maior que zero validar o mesmo // if ACodigo > 0 then if ValidarCodigoDFe(ACodigo, ANumero) then raise EACBrDFeException.Create('Código Numérico inválido, Chave não Gerada'); // Se o usuario informar um código inferior ou igual a -2 a chave não será gerada // if ACodigo <= -2 then raise EACBrDFeException.Create('Código Numérico inválido, Chave não Gerada'); // Se o usuario informar 0 ou -1; o código numerico sera gerado de maneira aleatória // if ACodigo = -1 then ACodigo := 0; if ACodigo = 0 then ACodigo := GerarCodigoDFe(ANumero); // Se o usuario informar -2; o código numerico sera ZERO // // Pela Regra B03-10 que consta na NT 2019/001 versão 1.00 as notas vão ser // rejeitadas se o cNF for igual a zero. // if ACodigo = -2 then // ACodigo := 0; vUF := Poem_Zeros(AUF, 2); vDataEmissao := FormatDateTime('YYMM', ADataEmissao); vCNPJ := PadLeft(OnlyNumber(ACNPJ), 14, '0'); vModelo := Poem_Zeros(AModelo, 2); vSerie := Poem_Zeros(ASerie, 3); vNumero := Poem_Zeros(ANumero, 9); vtpEmi := Poem_Zeros(AtpEmi, 1); vCodigo := Poem_Zeros(ACodigo, 8); Result := vUF + vDataEmissao + vCNPJ + vModelo + vSerie + vNumero + vtpEmi + vCodigo; Result := Result + Modulo11(Result); end; Essa funcao, se eu mando um numero aleatorio = 54251212 está abortando a geracao da chave. penso que teria que que ser : if ACodigo > 0 then if not ValidarCodigoDFe(ACodigo, ANumero) then raise EACBrDFeException.Create('Código Numérico inválido, Chave não Gerada'); Essa funcao está usando em um repeat until, que espera o result true...