@==============================================================================@
@ 3.4.2 Registro Detalhe – Segmento A (Obrigatório – Remessa/Retorno) @
@------------------------------------------------------------------------------@
VGlobal_NumeroSequencialLote++;
@==============================================================================@
@ Definições e Atribuições das variáveis LOCAIS para geração do Registro @
@------------------------------------------------------------------------------@
Definir Alfa xSegmentoA;
Definir Alfa FINPECODAGE;
Definir Alfa FINPENOMFOR;
Definir Alfa FINPECODBAN;
Definir Alfa FINPENUMPGE;
Definir Alfa FINPENUMTIT;
Definir Alfa FINPECODTPT;
Definir Alfa FINPEUTINPE;
Definir Alfa FINPECCBFOR;
Definir Alfa FINPETIPPGT;
Definir Alfa xDigitoVerificadorAgencia;
Definir Alfa xDigitoVerificadorConta;
Definir Alfa xDigitoVerificadorDAC;
Definir Alfa xVariavelAuxiliar;
Definir Alfa xComplementoTipoServico;
Definir Alfa xCodigoOperacaoAlfa;
Definir Alfa xNumeroContaCorrenteCEFAlfa;
Definir Alfa xDigitoCEFALFA;
Definir Numero xCodigoCamara;
Definir Numero xCodigoBancoFavorecido;
Definir Numero xAgenciaMantenedora;
Definir Numero xNumeroContaCorrente;
Definir Numero xPosicaoHifen;
Definir Numero xTamanhoAgencia;
Definir Data xDataPagamento;
@==============================================================================@
@ Algumas Variáveis de Sistema retornam o valor multiplicado por 100, devido a @
@ forma antiga com que era esperado o valor monetário nos leiautes com grid. @
@ Por tanto se faz necessário dividir antes de imprimir no arquivo. @
@ @
@ FINPEVLRABE, FINPEVLRMOV, FINPEVLRDSC, FINPEVLRODE, FINPEVLRJRS, FINPEVLRMUL @
@ FINPEVLRENC, FINPEVLRCOR, FINPEVLROAC e FINPEVLRTOT @
@------------------------------------------------------------------------------@
xValorPagamento = FINPEVLRTOT;
Se (xValorPagamento > 0){
xValorPagamento = xValorPagamento / 100;
Arredonda(xValorPagamento, 2);
}
@------------------------------------------------------------------------------@
xVariavelAuxiliar = FINPECODBAN;
DeixaNumeros(xVariavelAuxiliar);
AlfaParaInt(xVariavelAuxiliar, xCodigoBancoFavorecido);
@==============================================================================@
@ P001 - Código da Câmera Centralizadora @
@------------------------------------------------------------------------------@
xVariavelAuxiliar = 000;
Se ((FINPETIPPGT = DC) ou (FINPETIPPGT = DO)){
Se ((FINPETIPPGT = DC) e ((xCodigoBancoFavorecido = 237) ou (xCodigoBancoFavorecido = 341))) {
xVariavelAuxiliar = 710;
} Senao {
xVariavelAuxiliar = 700;
}
} Senao
Se ((FINPETIPPGT = TO) ou (FINPETIPPGT = TE)){
Se ((FINPETIPPGT = TE) e ((xCodigoBancoFavorecido = 237) ou (xCodigoBancoFavorecido = 341))) {
xVariavelAuxiliar = 810;
} Senao {
xVariavelAuxiliar = 018;
}
} Senao
Se ((FINPETIPPGT = PX) ou (FINPETIPPGT = PQ)){
xVariavelAuxiliar = 009;
}
AlfaParaInt(xVariavelAuxiliar, xCodigoCamara);
@------------------------------------------------------------------------------@
@==============================================================================@
@ P005 - Complemento Tipo de Serviço @
@ Especifico para Caixa Economica Federa (104) e Bradesco (237) @
@------------------------------------------------------------------------------@
xComplementoTipoServico = ;
Se ((VGlobal_CodigoBancoCompensacao = VGlobal_BRADESCO) ou
(VGlobal_CodigoBancoCompensacao = VGlobal_CAIXA_ECONOMICA_FEDERAL)){
xComplementoTipoServico = 13;
}
@------------------------------------------------------------------------------@
@==============================================================================@
@ Agencia / Digito Agencia @
@ @
@ A T E N Ç Ã O @
@ Para utilização do leiaute de pagamento eletrônico LPN é obrigatório que o @
@ cadastro da Agência possua especificamente a separação do digito verificador @
@ com um hífem -. @
@------------------------------------------------------------------------------@
xAgenciaMantenedora = 0;
xDigitoVerificadorAgencia = ;
xVariavelAuxiliar = FINPECODAGE;
xPosicaoHifen = 0;
PosicaoAlfa(-, xVariavelAuxiliar, xPosicaoHifen);
Se (xPosicaoHifen > 0){
@ Antes do Hífen @
CopiarAlfa(xVariavelAuxiliar, 1, xPosicaoHifen -1);
DeixaNumeros(xVariavelAuxiliar);
AlfaParaInt(xVariavelAuxiliar, xAgenciaMantenedora);
@ Primeira Posicação Após o Hífen @
xDigitoVerificadorAgencia = FINPECODAGE;
CopiarAlfa(xDigitoVerificadorAgencia, xPosicaoHifen +1, 1);
} Senao {
@ Sem Hífen - Pega o valor cadastrado e enviar para Agência @
DeixaNumeros(xVariavelAuxiliar);
AlfaParaInt(xVariavelAuxiliar, xAgenciaMantenedora);
}
@------------------------------------------------------------------------------@
@==============================================================================@
@ Número da Conta Corrente / Agência / DAC @
@ @
@ A T E N Ç Ã O @
@ Para utilização do leiaute de pagamento eletrônico LPN é obrigatório que o @
@ cadastro do Número da Conta Corrente possua especificamente a separação do @
@ digito verificador com um hífem -. @
@------------------------------------------------------------------------------@
xNumeroContaCorrente = 0;
xDigitoVerificadorConta = ;
xDigitoVerificadorDAC = ;
xVariavelAuxiliar = FINPECCBFOR;
@============================================================================@
@ Especificamente o banco Caixa Economica Federal (CEF), possui uma informa- @
@ ção adicional que é o Código da Operação, e devemos enviar nos 4 primeiros @
@ digitos junto com o número da conta corrente. @
@ @
@ No ERP a orientação é que este código seja cadastrado juntamente com o nú- @
@ mero da conta corrente, separado por um ponto. @
@ @
@ Exemplo: @
@ Codigo Operação...........: 013 @
@ Número Conta Corrente.....: 00123-9 @
@ No ERP deve ser cadastrado: 013.00123-9 @
@ No arquivo deve ser gerado: 0013000001239 @
@----------------------------------------------------------------------------@
Se (VGlobal_CodigoBancoCompensacao = VGlobal_CAIXA_ECONOMICA_FEDERAL){
xPosicaoPonto = 0;
PosicaoAlfa(., xVariavelAuxiliar, xPosicaoPonto);
Se (xPosicaoPonto > 0){
@ Antes do Ponto @
xCodigoOperacaoAlfa = xVariavelAuxiliar;
CopiarAlfa(xCodigoOperacaoAlfa, 1, xPosicaoPonto -1);
DeixaNumeros(xCodigoOperacaoAlfa);
TamanhoAlfa(xVariavelAuxiliar, xTamanhoConta);
CopiarAlfa(xVariavelAuxiliar, xPosicaoPonto + 1, xTamanhoConta);
xDigitoCEFALFA = ;
PosicaoAlfa(-, xVariavelAuxiliar, xPosicaoHifen);
Se (xPosicaoHifen > 0){
@ Antes do Hífen @
xNumeroContaCorrenteCEFAlfa = xVariavelAuxiliar;
CopiarAlfa(xNumeroContaCorrenteCEFAlfa, 1, xPosicaoHifen -1);
AlfaParaInt(xNumeroContaCorrenteCEFAlfa, xNumeroContaCorrenteCEF);
xDigitoCEFALFA = xVariavelAuxiliar;
CopiarAlfa(xDigitoCEFALFA, xPosicaoHifen, xTamanhoConta);
} Senao {
DeixaNumeros(xVariavelAuxiliar);
AlfaParaInt(xVariavelAuxiliar, xNumeroContaCorrenteCEF);
}
ObterValorNumericoPadraoCNAB(1, 8, xNumeroContaCorrenteCEF, 0, N, xNumeroContaCorrenteCEFAlfa);
xVariavelAuxiliar = xCodigoOperacaoAlfa + xNumeroContaCorrenteCEFAlfa + xDigitoCEFALFA;
}
}
@----------------------------------------------------------------------------@
xPosicaoHifen = 0;
PosicaoAlfa(-, xVariavelAuxiliar, xPosicaoHifen);
Se (xPosicaoHifen > 0){
@ Primeira Posicação Após o Hífen @
xDigitoVerificadorConta = xVariavelAuxiliar;
CopiarAlfa(xDigitoVerificadorConta, xPosicaoHifen +1, 1);
@ Verifica se existe mais de um dígito verificador @
TamanhoAlfa(xVariavelAuxiliar, xTamanhoConta);
Se ((xTamanhoConta - xPosicaoHifen) > 1){
@ Segunda Posição Após o Hífen @
xDigitoVerificadorDAC = xVariavelAuxiliar;
CopiarAlfa(xDigitoVerificadorDAC, xPosicaoHifen +2, 1);
}
@ Antes do Hífen @
CopiarAlfa(xVariavelAuxiliar, 1, xPosicaoHifen -1);
DeixaNumeros(xVariavelAuxiliar);
AlfaParaInt(xVariavelAuxiliar, xNumeroContaCorrente);
} Senao {
@ Sem Hífen - Pega o valor cadastrado e enviar para Agência @
DeixaNumeros(xVariavelAuxiliar);
AlfaParaInt(xVariavelAuxiliar, xNumeroContaCorrente);
}
@------------------------------------------------------------------------------@
@==============================================================================@
@------------------------------------------------------------------------------@
xDataPagamento = FINPEDATPGT;
@Se ((FINPECODTPT = AGR) ou (FINPECODTPT = TRF)){ @
@ xDataPagamento = FINPEDATPGT; @
@} Senao { @
@ xDataPagamento = FINPEVCTPRO; @
@} @
@------------------------------------------------------------------------------@
@==============================================================================@
@ Quando for Agrupamento não enviamos NUMPGE @
@------------------------------------------------------------------------------@
Definir Alfa xSeuNumero;
xSeuNumero = FINPENUMPGE;
Se (FINPECODTPT = AGR){
xSeuNumero = ;
ObterValorNumericoPadraoCNAB(1, 6, 0, 0, S, xSeuNumero);
ObterValorAlfaPadraoCNAB(7, 16, FINPENUMTIT, , S, xSeuNumero);
ObterValorAlfaPadraoCNAB(17, 19, AGR, , S, xSeuNumero);
ObterValorAlfaPadraoCNAB(20, 20, FINPEUTINPE, , S, xSeuNumero);
}
@------------------------------------------------------------------------------@
@==============================================================================@
@ INÍCIO DA GERAÇÃO DO REGISTRO @
@ @
@--------------------------------- Controle -----------------------------------@
xSegmentoA = ;
ObterValorNumericoPadraoCNAB(1, 3, VGlobal_CodigoBancoCompensacao, 0, S, xSegmentoA); @ 01.3A - Código no Banco da Compensação @
ObterValorNumericoPadraoCNAB(4, 7, VGlobal_LoteServico, 0, S, xSegmentoA); @ 02.3A - Lote de Serviço @
ObterValorNumericoPadraoCNAB(8, 8, 3, 0, S, xSegmentoA); @ 03.3A - Tipo de Registro @
ObterValorNumericoPadraoCNAB(9, 13, VGlobal_NumeroSequencialLote, 0, S, xSegmentoA); @ 04.3A - Nº Seqüencial do Registro no Lote @
ObterValorAlfaPadraoCNAB(14, 14, A, , S, xSegmentoA); @ 05.3A - Código de Segmento no Reg. Detalhe @
ObterValorNumericoPadraoCNAB(15, 15, 0, 0, S, xSegmentoA); @ 06.3A - Tipo de Movimento @
ObterValorNumericoPadraoCNAB(16, 17, 0, 0, S, xSegmentoA); @ 07.3A - Código da Instrução p/ Movimento @
@--------------------------------- Favorecido ---------------------------------@
ObterValorNumericoPadraoCNAB(18, 20, xCodigoCamara, 0, S, xSegmentoA); @ 08.3A - Código da Câmara Centralizadora @
ObterValorNumericoPadraoCNAB(21, 23, xCodigoBancoFavorecido, 0, S, xSegmentoA); @ 09.3A - Código do Banco do Favorecido @
ObterValorNumericoPadraoCNAB(24, 28, xAgenciaMantenedora, 0, S, xSegmentoA); @ 10.3A - Ag. Mantenedora da Conta do Fav. @
ObterValorAlfaPadraoCNAB(29, 29, xDigitoVerificadorAgencia, , S, xSegmentoA); @ 11.3A - Dígito Verificador da Agência @
ObterValorNumericoPadraoCNAB(30, 41, xNumeroContaCorrente, 0, S, xSegmentoA); @ 12.3A - Número da Conta Corrente @
ObterValorAlfaPadraoCNAB(42, 42, xDigitoVerificadorConta, , S, xSegmentoA); @ 13.3A - Dígito Verificador da Conta @
ObterValorAlfaPadraoCNAB(43, 43, xDigitoVerificadorDAC, , S, xSegmentoA); @ 14.3A - Dígito Verificador da Ag/Conta @
ObterValorAlfaPadraoCNAB(44, 73, FINPENOMFOR, , S, xSegmentoA); @ 15.3A - Nome do Favorecido @
@---------------------------------- Crédito -----------------------------------@
ObterValorAlfaPadraoCNAB(74, 93, xSeuNumero, , S, xSegmentoA); @ 16.3A - Seu Número @
ObterValorDataPadraoCNAB(94, 101, xDataPagamento, S, xSegmentoA); @ 17.3A - Data do Pagamento @
ObterValorAlfaPadraoCNAB(102, 104, BRL, , S, xSegmentoA); @ 18.3A - Tipo de Moeda @
ObterValorDecimalPadraoCNAB(105, 119, 5, 0, 0, S, xSegmentoA); @ 19.3A - Quantidade de Moeda @
ObterValorDecimalPadraoCNAB(120, 134, 2, xValorPagamento, 0, S, xSegmentoA); @ 20.3A - Valor do Pagamento @
ObterValorAlfaPadraoCNAB(135, 154, , , S, xSegmentoA); @ 21.3A - Nosso Número @
ObterValorDataPadraoCNAB(155, 162, 0, S, xSegmentoA); @ 22.3A - Data Real da Efetivação do Pagamento @
ObterValorDecimalPadraoCNAB(163, 177, 2, 0, 0, S, xSegmentoA); @ 23.3A - Valor Real da Efetivação do Pagamento @
@---------------------------------- Arquivo -----------------------------------@
ObterValorAlfaPadraoCNAB(178, 217, , , S, xSegmentoA); @ 24.3A - Outras Informações (G031) @
ObterValorAlfaPadraoCNAB(218, 219, xComplementoTipoServico, , S, xSegmentoA); @ 25.3A - Complemento Tipo de Serviço @
ObterValorAlfaPadraoCNAB(220, 224, , , S, xSegmentoA); @ 26.3A - Código finalidade da TED/CC @
ObterValorAlfaPadraoCNAB(225, 229, , , S, xSegmentoA); @ 27.3A - Uso Exclusivo @
ObterValorNumericoPadraoCNAB(230, 230, 0, 0, S, xSegmentoA); @ 28.3A - Aviso ao Favorecido @
ObterValorAlfaPadraoCNAB(231, 240, , , S, xSegmentoA); @ 29.3A - Código das Ocorrências para Retorno @
@------------------------------------------------------------------------------@
@ FINAL DA GERAÇÃO DO REGISTRO @
@==============================================================================@
@ Atribuiçao dos totalizadores @
@------------------------------------------------------------------------------@
VGlobal_QtdeRegistrosArquivo++;
VGlobal_QtdeRegistrosLote++;
VGlobal_SomatoriaValoresLote = VGlobal_SomatoriaValoresLote + xValorPagamento;
@------------------------------------------------------------------------------@