Jump to content

romerofartura

Membros Pro
  • Posts

    15
  • Joined

  • Last visited

Everything posted by romerofartura

  1. Bom dia, fiz o ajuste a algum tempo, já estão em produção e funcionando. Atualizei o componente e alguns ajustes ainda foram necessários, outros verifiquei que foram feitos. Segue o que ajustei, se for possível atualizar o componente ajudaria a quem mais for utilizar. Versão do manual 67.126 v018 micro https://www.caixa.gov.br/Downloads/cobranca-caixa/Manual_de_Leiaute_de_Arquivo_Eletronico_CNAB_400.pdf REMESSA CNAB 400 HEADER - REGISTROS TIPO 0 Quando a versão do layout for nula nas posições 101 a 103 o código do beneficiário nas posições 31 a 37 será com 7 casas sendo a última em branco e NÃO 0. Pág. 20, NE004 pág. 35. Como já possui o tratamento do código do cedente para ajustar em 6 ou 7 dígitos na function TACBrCaixaEconomica.DefineCodigoCedente(const ACBrCedente: TACBrCedente): String; Ao sair desta função sugiro apenas alterar a linha PadRight(ACodCedente, 7, '0') para PadRight(ACodCedente, 7, ' '); DETALHES - REGISTROS TIPO 1 Posição 32 a 56 X(25) - Identificação do título na empresa é alfanumérico. Pág. 21, NE014 pág. 37. Hoje os valores permitem somente números conforme a Linha 1040: PadLeft(OnlyNumber(ACBrTitulo.SeuNumero), 25) Tirar a função OnlyNumber. Posição 57 a 58 - Modalidade de identificação. pág 21, NE015. Se a CAIXA for responsável pela emissão do boleto: o campo Nosso Número (posições 57-73) pode ser preenchido com zeros. Nesse caso, a numeração será feita pelo Banco. Hoje as validações das posições 57 a 58 não contemplam a modalidade 00; MENSAGENS - REGISTROS TIPO 2 Posições 22 a 28 segue a mesma regra de validação do HEADER (código do beneficiário) pág. 23 NE004. pág. 35. Já descrita no primeiro tópico desta mensagem. Por favor validem e se for possível a atualização ficarei grato. Obrigado.
  2. Ontem instalamos o bartender pego no site da elgin para ver se poderia ser a etiqueta com problemas, mas imprimiu normalmente na Elgin L42Pro sem pular. Hoje, após ver a resposta aqui no fórum conectei no cliente para fazer o procedimento proposto, mas antes de qualquer ajuste tentei uma impressão sem alterar nada, e por incrível que pareça funcionou perfeitamente. Coisas de informática! Como as duas impressoras estão no mesmo PC, pode ter sido algum arquivo do bartender que atualizou ao ser instalado ou ao imprimir por ele a detecção da etiqueta foi feita corretamente. Mas de qualquer forma funcionou. Quanto a zebra por hora não vamos mais usar, depois passamos ela em outro PC para testes. Obrigado pela atenção.
  3. Boa tarde, estou com problemas na impressão de etiquetas pelo ACBrETQ quem puder dar uma orientação que eu possa seguir. Nas impressoras Elgin L42Pro em PPLB e na na Zebra GC420t em EPL2 (configurando para cada sua posição vertical e horizontal correta) ela imprime uma etiqueta e pula outra, seja quantas etiquetas eu mandar. Já fiz reset e calibração da etiqueta nas duas e continua o mesmo problema. Fiz na minha impressora Argox OS 214Plus em PPLA e a função funciona sem pular (porém usei outra etiqueta, não tenho em mãos a mesma do cliente). Segue a função caso eu esteja fazendo algo errado ou alguma sugestão do que possa ser. try acbr_Etiqueta.Desativar; acbr_Etiqueta.DPI := TACBrETQDPI(FConfiguracaoPDV.IMP_TERMICA.TERMICA_DPI); acbr_Etiqueta.Modelo := TACBrETQModelo(FConfiguracaoPDV.IMP_TERMICA.TERMICA_MODELO); acbr_Etiqueta.LimparMemoria := (FConfiguracaoPDV.IMP_TERMICA.TERMICA_LMEMORIA = 0); acbr_Etiqueta.Porta := FConfiguracaoPDV.IMP_TERMICA.TERMICA_PORTA; acbr_Etiqueta.Temperatura := 10; acbr_Etiqueta.Velocidade := -1; acbr_Etiqueta.Unidade := etqMilimetros; acbr_Etiqueta.Origem := TACBrETQOrigem(cbbOrigem.ItemIndex); if chkFeed.Checked then acbr_Etiqueta.BackFeed := bfOn else acbr_Etiqueta.BackFeed := bfOff; acbr_Etiqueta.Ativar; Result := True; except on E:Exception do ShowMessage('Erro ativando impressora térmica.'+ sLineBreak + e.ToString()); end; FDM_Etiquetas.First; while not FDM_Etiquetas.Eof do begin acbr_Etiqueta.IniciarEtiqueta; FDQ_EtiqConfLn.First; while not FDQ_EtiqConfLn.Eof do begin ORIENTACAO := OrientacaoRetornar(FDQ_EtiqConfLn.FieldByName('ORIENTACAO').AsInteger); EAN_BARRA_LARGA := FDQ_EtiqConfLn.FieldByName('EAN_BARRA_LARGA').AsInteger; EAN_BARRA_FINA := FDQ_EtiqConfLn.FieldByName('EAN_BARRA_FINA').AsInteger; EAN_ALTURA := FDQ_EtiqConfLn.FieldByName('EAN_ALTURA').AsInteger; EAN_EXIBE_CODIGO := FDQ_EtiqConfLn.FieldByName('EAN_EXIBE_CODIGO').AsInteger; EAN_TIPO := FDQ_EtiqConfLn.FieldByName('EAN_TIPO').AsString; FONTE := FDQ_EtiqConfLn.FieldByName('FONTE').AsInteger; MULTIPLICADORH := FDQ_EtiqConfLn.FieldByName('MULTIPLICADORH').AsInteger; MULTIPLICADORV := FDQ_EtiqConfLn.FieldByName('MULTIPLICADORV').AsInteger; VERTICAL := FDQ_EtiqConfLn.FieldByName('VERTICAL').AsInteger; HORIZONTAL := FDQ_EtiqConfLn.FieldByName('HORIZONTAL').AsInteger; SUBFONTE := FDQ_EtiqConfLn.FieldByName('SUBFONTE').AsInteger; REVERSO := FDQ_EtiqConfLn.FieldByName('REVERSO').AsInteger; TEXTO_LIVRE := FDQ_EtiqConfLn.FieldByName('TEXTO_LIVRE').AsString; if ((FDQ_EtiqConfLn.FieldByName('CAMPO').AsString = 'CODBARRAS') and (FDQ_EtiqConfLn.FieldByName('TIPO').AsInteger in [3..5])) then begin TipoEAN := EAN_Tratar2(FDM_Etiquetas.FieldByName('CODBARRAS').AsString, acbr_Etiqueta.Modelo); if (EAN_EXIBE_CODIGO = 1) then exibeCodigo := becSIM else exibeCodigo := becNAO; acbr_Etiqueta.ImprimirBarras(ORIENTACAO, TipoEAN, EAN_BARRA_LARGA, EAN_BARRA_FINA, VERTICAL, HORIZONTAL, FDM_Etiquetas.FieldByName('CODBARRAS').AsString, EAN_ALTURA, exibeCodigo); end else begin nomeCampo := FDQ_EtiqConfLn.FieldByName('CAMPO').AsString; textoVlr := ifThen((nomeCampo = 'PRVISTA'), 'R$ ', ''); texto := Copy(textoVlr + FDM_Etiquetas.FieldByName(nomeCampo).AsString, 0, 29); //textoVlr + copy(FDM_Etiquetas.FieldByName(nomeCampo).AsString, 1, 20) if (nomeCampo = 'TEXTO_LIVRE') then texto := FDQ_EtiqConfLn.FieldByName('TEXTO_LIVRE').AsString; acbr_Etiqueta.ImprimirTexto(ORIENTACAO, FONTE, MULTIPLICADORH, MULTIPLICADORV, VERTICAL, HORIZONTAL, texto); end; FDQ_EtiqConfLn.Next; end; //acbr_Etiqueta.FinalizarEtiqueta(FDM_Etiquetas.FieldByName('QTDE').AsInteger, FConfiguracaoPDV.IMP_TERMICA.TERMICA_AVANCO); acbr_Etiqueta.Imprimir(FDM_Etiquetas.FieldByName('QTDE').AsInteger, FConfiguracaoPDV.IMP_TERMICA.TERMICA_AVANCO); FDM_Etiquetas.Next; end; //acbr_Etiqueta.Imprimir(1, FConfiguracaoPDV.IMP_TERMICA.TERMICA_AVANCO); acbr_Etiqueta.Desativar;
  4. Muito obrigado! Não cheguei a ver o comunica na época. Resolvido, pode fechar o tópico.
  5. Bom dia, após a atualização do componente a DANFE passou a imprimir descentralizada, está bem para a esquerda. Fiz o teste em mais de um equipamento inclusive em equipamentos de clientes e todos apresentaram a mesma impressão fora do centro. Seria algum problema no componente ou configuração que agora passou a ser necessária? Obrigado. 35200413251001000150550010000009501613053625.pdf
  6. Bom dia! O arquivo de remessa CNAB 240 do SICREDI de um cliente nosso estava sendo rejeitado quando tentava usar o "tipo de Documento" como "DSI" o componente estava alterando para 99 "Outros" e no caso da conta ou carteira dele acontece a rejeição. Fiz alteração na Unit e enviei o arquivo para o banco e foi validado. Estou disponibilizando para conferência pelos administradores e posterior publicação se possível. Unit ACBrBancoSicredi.pas em GerarREgistroTranscacao240. Tenho o manual do banco caso precise, mas como é maior que 2mb não consigo postar aqui. De acordo com o Layout enviado pelo SICREDI, as opções de "Espécie do Título" são: '03' = DMI duplicata mercantil por indicação '05' = DSI duplicata de serviço por indicação '06' = DR duplicata rural '07' = LC letra de câmbio '12' = NP nota promissória '13' = NPR nota promissória rural '16' = NS nota de seguro '17' = RC recibo '19' = ND nota de débito ‘32’ = Boleto Proposta '99' = Outros //Código REMOVIDO {Espécie} {if (EspecieDoc = 'DM') then Especie := '03' else if (EspecieDoc = 'DMI') then Especie := '03' else Especie := '99';} //Código ADICIONADO case AnsiIndexStr(EspecieDoc, ['DMI', 'DSI', 'DR', 'LC', 'NP', 'NPR', 'NS', 'RC', 'ND', 'BP']) of 0 : Especie := '03'; //DMI duplicata mercantil por indicação 1 : Especie := '05'; //DSI duplicata de serviço por indicação 2 : Especie := '06'; //DR duplicata rural 3 : Especie := '07'; //LC letra de câmbio 4 : Especie := '12'; //NP nota promissóri 5 : Especie := '13'; //NPR nota promissória rural 6 : Especie := '16'; //NS nota de seguro 7 : Especie := '17'; //RC recibo 8 : Especie := '19'; //ND nota de débito 9 : Especie := '32'; //Boleto Proposta else Especie := '99'; //Outros end; ACBrBancoSicredi.pas
  7. Mando assim veja se tem algo diferente. DM.ACBrBoleto1.LayoutRemessa := c240; with DM.ACBrBoleto1.Banco do begin Nome := DmFd.FDQ_Boletos.FieldByName('BANCO_NOME').AsString; Numero := StrToInt(DmFd.FDQ_Boletos.FieldByName('BANCO_NRO').AsString); case DmFd.FDQ_Boletos.FieldByName('BANCO_NRO').AsInteger of 1 : TipoCobranca := cobBancoDoBrasil; 33 : TipoCobranca := cobSantander; 104 : TipoCobranca := cobCaixaEconomica; 237 : TipoCobranca := cobBradesco; 341 : TipoCobranca := cobItau; 748 : TipoCobranca := cobSicred; 756 : TipoCobranca := cobBancoob; //SICOOB end; end; with DM.ACBrBoleto1.Cedente do //Beneficiario begin Agencia := DmFd.FDQ_Boletos.FieldByName('AGENCIA_NRO').AsString; AgenciaDigito := DmFd.FDQ_Boletos.FieldByName('AGENCIA_NRO_DIG').AsString; Conta := DmFd.FDQ_Boletos.FieldByName('CONTA').AsString; ContaDigito := DmFd.FDQ_Boletos.FieldByName('CONTA_DIG').AsString; Convenio := DmFd.FDQ_Boletos.FieldByName('CONVENIO').AsString; // Modalidade := IBDS_boleto.FieldByName('CONVENIO').AsString; CodigoCedente := DmFd.FDQ_Boletos.FieldByName('CEDENTE_COD').AsString; Nome := DmFd.FDQ_Boletos.FieldByName('CEDENTE_NOME').AsString; CNPJCPF := so_numeros(Dm.empCNPJ); Logradouro := tira_acento(trim(Dm.empEnder)); NumeroRes := trim(Dm.empNro); Complemento := tira_acento(trim(Dm.empCompl)); Bairro := tira_acento(trim(Dm.empBairro)); Cidade := tira_acento(Dm.empCid); UF := Dm.empUF; CEP := Dm.empCEP; case StrToInt(DmFd.FDQ_Boletos.FieldByName('BANCO_NRO').AsString) of 756 : Modalidade := '01'; 001 : Modalidade := '027'; end; if (Length(CNPJCPF) = 11) then TipoInscricao := pFisica else TipoInscricao := pJuridica; end; DM.ACBrBoleto1.ListadeBoletos.Clear; for I := 0 to NrTitulos - 1 do begin Abrir(emp, Boletos[i]); //Abre a tabela do boleto coms os dados Titulo := DM.ACBrBoleto1.CriarTituloNaLista; with Titulo do begin DataProcessamento := Now; DataDocumento := DmFd.FDQ_Boletos.FieldByName('DATA_INC').AsDateTime; Vencimento := DmFd.FDQ_Boletos.FieldByName('DT_VENCTO').AsDateTime; Carteira := DmFd.FDQ_Boletos.FieldByName('CARTEIRA').AsString; NumeroDocumento := DmFd.FDQ_Boletos.FieldByName('N_DOC').AsString; NossoNumero := DmFd.FDQ_Boletos.FieldByName('N_NUMERO').AsString; SeuNumero := DmFd.FDQ_Boletos.FieldByName('CODIGO').AsString; //DmFd.FDQ_Boletos.FieldByName('COD_CONTA').AsString; EspecieDoc := DmFd.FDQ_Boletos.FieldByName('ESPECIE').AsString; //EspecieMod := '01'; Aqui para BANCOOP, se precisar ValorDocumento := DmFd.FDQ_Boletos.FieldByName('VALOR').AsFloat; ValorDesconto := DmFd.FDQ_Boletos.FieldByName('DESCONTO').AsFloat; //VALOR, Se percentual calcular o valor na hora de gerar o boleto e passar o valor. DataDesconto := 0; //AQUI Adicionar ValorAbatimento := 0; //AQUI Adicionar PercentualMulta := DmFd.FDQ_Boletos.FieldByName('MULTA').AsFloat; //Percentual ValorMoraJuros := DmFd.FDQ_Boletos.FieldByName('JUROS').AsFloat; //VALOR, Se percentual calcular o valor na hora de gerar o boleto e passar o valor. //DataMoraJuros := DmFd.FDQ_Boletos.FieldByName('DT_JUROS').AsFloat; //AQUI Adicionar. 0 A contar do atraso DataBaixa := DmFd.FDQ_Boletos.FieldByName('DT_VENCTO').AsDateTime + 90; case DM.ACBrBoleto1.Banco.TipoCobranca of cobBancoob : begin CodigoMora := '2'; //SICOOB if (ValorMoraJuros > 0) then Instrucao1 := '01'; //Mandar a instrução 01 já na remessa. 01 - Cobrar juros e 07 não protestar end; end; DataProtesto := DmFd.FDQ_Boletos.FieldByName('DT_PROT').AsDateTime; //Mandar data como zero, sem protesto if (DataProtesto > 0) then TipoDiasProtesto := diCorridos; case AnsiIndexStr(DmFd.FDQ_Boletos.FieldByName('ACEITE').AsString, ['A', 'S', 'N', 'B']) of 0 : Aceite := atAceite; 1 : Aceite := atSim; 2 : Aceite := atNao; 3 : Aceite := atBNao; end; Sacado.NomeSacado := tira_acento(DmFd.FDQ_Boletos.FieldByName('SACADO').AsString); Sacado.CNPJCPF := DmFd.FDQ_Boletos.FieldByName('CPF_CNPJ').AsString; Sacado.Logradouro := tira_acento(DmFd.FDQ_Boletos.FieldByName('ENDERECO').AsString); Sacado.Numero := DmFd.FDQ_Boletos.FieldByName('NRO').AsString; Sacado.Bairro := tira_acento(DmFd.FDQ_Boletos.FieldByName('BAIRRO').AsString); Sacado.Cidade := tira_acento(DmFd.FDQ_Boletos.FieldByName('NOMECID').AsString); Sacado.UF := DmFd.FDQ_Boletos.FieldByName('UF').AsString; LocalPagamento := tira_acento(DmFd.FDQ_Boletos.FieldByName('LOC_PAGTO').AsString); if (remessa > 0) then //remesa 0 impressão e 1 remessa Sacado.CEP := so_numeros(DmFd.FDQ_Boletos.FieldByName('CEP').AsString) else Sacado.CEP := DmFd.FDQ_Boletos.FieldByName('CEP').AsString; if (Length( so_numeros(Sacado.CNPJCPF)) = 11) then Sacado.Pessoa := pFisica else Sacado.Pessoa := pJuridica; if (remessa = 0) then ////remesa 0 impressão e 1 remessa begin if (Trim(DmFd.FDQ_Boletos.FieldByName('INSTRUCOES').AsString) <> '') then Mensagem.Text := tira_acento(DmFd.FDQ_Boletos.FieldByName('INSTRUCOES').AsString); if (Trim(DmFd.FDQ_Boletos.FieldByName('INSTRUCOES2').AsString) <> '') then Mensagem.Text := Mensagem.Text + tira_acento(DmFd.FDQ_Boletos.FieldByName('INSTRUCOES2').AsString); if (Trim(DmFd.FDQ_Boletos.FieldByName('INSTRUCOES3').AsString) <> '') then Mensagem.Text := Mensagem.Text + tira_acento(DmFd.FDQ_Boletos.FieldByName('INSTRUCOES3').AsString); end; DM.ACBrBoleto1.AdicionarMensagensPadroes(Titulo, Mensagem); //ACBrBoleto.Banco.MontarCampoNossoNumero() end; end; DM.ACBrBoleto1.ChecarDadosObrigatorios; if (remessa = 0) then //0 Imprimir e 1 remessa begin DM.ACBrBoleto1.Imprimir; DM.ACBrBoleto1.GerarPDF; end else DM.ACBrBoleto1.GerarRemessa(remessa); Minha função de emissão é basicamente esta. Veja se te ajuda.
  8. Boa tarde. Verifique se a carteira é esta mesmo, porque as carteiras sem registros (Carteira :=SR) não vão mais existir. Na minha homologação foi usada a carteira RG (com registro). Fique atento também ao gerar a remessa dê preferência pelo no CNAB240. Na homologação que estou fazendo para o SICREDI, vei a orientação, pois a FEBRABAN, segundo eles vai descontinuar o CNAB 400 este ano. No mais as informações parecem esta corretas.
  9. Nelas tem alterações nas linhas que contém os novos aceites: atAceite = 'A' e atBnao = 'B' e notei que em algumas units não tem o else deixando o aceite com algum valor padrão. case Aceite of atSim, atAceite : ATipoAceite := 'A'; atNao, atBnao : ATipoAceite := 'N'; else ATipoAceite := 'N'; end;
  10. Precisa ver com seu gerente qual o tipo de cobrança que está sendo usada na sua conta se não me engano a caixa tem duas a SIGCB que é a discutida aqui no tópico e a SICOB. Identificando qual foi colocada em sua conta vc ajusta o componente.
  11. Boa tarde. Meu cliente acabou por não usar a CEF, mas foi homologado com ressalva. Segue transcrição abaixo. " Corrigir a distância entre o fim da folha e o código de barras, de acordo com item 4.2.10.1 do MO67.119 - "Posição: 12mm desde a margem inferior da Ficha de compensação até o centro do código de barras" (foi necessário cortar a folha ao fim da margem para leitura do código de barras); Quanto aos cálculos todos foram aplicados corretamente. Enviei os 20 boletos que eles pedem com dígitos verificadores diferentes e aprovaram. Aliás (Juliana), aproveito o post para que verifique a possibilidade de aplicar estas alterações no fonte, caso já não tenham sido feitas, possivelmente irá ajudar muitos usuários. Depois delas já consegui homologar, além da CEF o BB e Itaú e estou no aguardo do SICREDI, mas ao que tudo indica vai passar. As alterações principais solicitadas nas homologações foram no layout mesmo, pouca coisa. A linha "corte aqui" abaixo do código de barras, foi o que resolveu, mas veio a ressalva). O ideal seria posicionar a 12mm, o que ainda irei fazer. Segue as alterações dos fontes novamente. Agradeço a todos que interagiram e se dispuseram a ajudar. ACBrBancoBrasil.pas ACBrBancoCaixa.pas ACBrBoleto.pas ACBrBoletoFCFortesFr.dfm ACBrBoletoFCFortesFr.pas
  12. Boa noite. O Banco ainda não deu o retorno. Assim que retornarem vou postando aqui.
  13. Bom dia pessoal, estou tendo problemas com a homologação do Boleto impresso na Caixa Econômica Federal - SIGCB. A principal é o layout que estou modificando e assim que homologar posto o arquivo a quem interessar. Antes da modificação do Layout foram necessárias duas pequenas alterações nos fonte, que ao meu ver não vão interferir nos outros bancos, mas segue sugestão para análise, e se possível que seja adicionada ao projeto. O aceite tem que ser "A" e não "S". Também existe mais uma opção possível em outros Bancos que é a "B", Banco do Nordeste. No arquivo ACBrBoleto.pas, na linha: TACBrAceiteTitulo = (atSim, atNao); Modificar para: TACBrAceiteTitulo = (atSim, atNao, atAceite, atBNao); No arquivo \FC\Fortes\ACBrBoletoFCFortesFr.pas (aqui uso somente fortes) mudar a linha: txtAceite.Caption := IfThen((atSim = Titulo.Aceite), 'A', 'N'); para: case Titulo.Aceite of atSim : txtAceite.Caption := 'S'; atNao : txtAceite.Caption := 'N'; atAceite : txtAceite.Caption := 'A'; atBnao : txtAceite.Caption := 'B'; end; O mesmo para a linha com txtAceite2.Caption. Outro problema sempre me ocorreu (em qualquer banco),é a duplicação das instruções, principalmente quando se usa os campos abaixo Titulo.PercentualMulta e Titulo.ValorMoraJuros. No arquivo \FC\Fortes\ACBrBoletoFCFortesFr.pas removendo a linha (: ACBrBoletoFC.ACBrBoleto.AdicionarMensagensPadroes(Titulo,MensagemPadrao); Esta duplicação não ocorre (efetuei o teste pelo demo). Segue sugestões, caso não interfiram no componente seriam bem vindas. Obrigado a todos.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.