14/05/2021 | Coronavírus - Como adequar o seu Gestão de Pessoas para a MP 1046/2021
Texto alterado em 25/05/2021: Adicionadas informações referentes ao Desconto de Férias Antecipadas. Essa solução tem previsão para ser liberada no dia 28/05/2021.
A Medida Provisória 1046/2021 permite a flexibilização de algumas rotinas realizadas através do sistema Gestão de Pessoas.
AVISO IMPORTANTE
É imprescindível que sempre sejam realizados testes e validações antes da aplicação desses procedimentos no seu ambiente em produção.
Este conteúdo procura abranger o cenário mais frequente e cabe a cada empresa analisar os impactos de acordo com as características específicas do seu negócio.
Pagamento do Evento de 1/3 de Férias Covid-19
O Evento de 1/3 de Férias Covid-19, conforme a MP 1046/21, poderá ser pago no mesmo prazo do 13º Salário, ou seja, até a data de 20/12/2021.
- O eSocial não aceita o tipo de incidência da rubrica de férias na Folha tipo 32 - 13º Salário Integral e, por isso, o evento de 1/3 de Férias do Covid-19 não poderá ser lançado nessa Folha;
- Para que o pagamento seja realizado na Folha do tipo 11 - Pagamento Mensal, o pagamento deverá ser efetuado até a competência 11/2021;
- Caso a Empresa opte por pagar o valor de 1/3 de Férias do Covid-19 após o pagamento da Folha mensal 11/2021, o pagamento deverá ser feito em uma Folha específica com data de pagamento até dia 20/12/2021, e deverá utilizar a Folha de cálculo do tipo 93 - Especiais, exclusiva para esse pagamento.
Cálculo Recibo de Férias
A solução encontrada para atender emergencialmente foi através de regra especial e criação de eventos. Segue detalhamento do processo que deverá ser feito no sistema:
Neste modelo o sistema irá proceder o adiantamento na data do recibo. Para o sistema identificar que o recibo calculado é referente a MP 1046/2021, ou seja, o evento de 1/3 ser pago futuramente, deverá:
- Informar na tela de cálculo do recibo de férias, no campo “% Provisão Desconto” o valor de 0,01.
- IMPORTANTE: Quem utiliza o campo “% Provisão Desconto” no cálculo das férias individual ou coletivas para alguma necessidade específica da empresa, deve entrar em contado com a Senior para mais informações através de chamado.
- Desabilitar os eventos com características 42A, trocando a característica para 49Z.
- Criar evento para descontar o valor do evento de 1/3 (descrição do novo evento).
- IMPORTANTE: Este tratamento se aplica as telas de cálculo:
- Férias Individuais
- Férias Coletivas
- Férias Programadas. Sendo que, na tela de Férias Programadas o campo “Gerar Adiantamento” só pode ser utilizado a opção “S” ou “N”. A opção “P” não habilita o campo “% Provisão Desconto” que inviabiliza esta solução.
- IMPORTANTE: Este tratamento se aplica as telas de cálculo:
Para o sistema identificar que o recibo calculado é referente à MP 1046/2021, sem adiantamento do valor das férias, e que será pago na ficha financeira proporcionalmente aos dias usufruídos em cada competência e o evento de 1/3 ser pago futuramente, deverá:
- Informar no campo “Gerar Adiantamento” a opção N,
- A data de início das férias ser posterior 28/04/2021.
- Criar evento para descontar o valor do evento de 1/3 (descrição do novo evento).
O sistema irá calcular normalmente o evento de 1/3 das férias no recibo de férias e na ficha financeira. Para isto é necessário criar um evento que desconte este valor, com as informações abaixo:
- Característica: 11G
- Regra: 018
- Tipo do Evento: 3 - Desconto
- Valor de Cálculo: 100
- CLC – criar um novo CLC com tipo de lançamento - crédito.
- Base: Somente o Evento de 1/3 de férias original
- Incidências: Inverter as incidências que estão (+) para (–).
- Cálculos: 11
Dica: Você pode duplicar o evento de 1/3 atual alterando os campos conforme orientação acima.
Definir Numero xNumEmp;
Definir Numero xTipCol;
Definir Numero xNumCad;
Definir Numero xCodEve;
Definir Numero xCodTab;
Definir Numero xAchou;
Definir data dIniPer;
Definir data dIniFer;
Definir data dIniCovid20;
Definir data dFimCovid20;
Definir data dIniCovid21;
Definir data dFimCovid21; @ MP 927 - Ano 2020 @
MontaData (22,03,2020,dIniCovid20);
MontaData (19,07,2020,dFimCovid20); @ MP 1046 - Ano 2021 @
MontaData (28,04,2021,dIniCovid21);
MontaData (24,08,2021,dFimCovid21); @ Calculo refere ao recibo de ferias Normal e Coletiva@
Se ((tipCal >= 51) e (tipCal <= 53))
inicio
@ Caso não seja referente a MP COVID19 zera o evento@
Se (((R040FEM.GerAdt = 'S') e (R040FEM.PrvDes <> 0.01)) ou ((R040FEM.GerAdt = 'N') e ((R040FEM.IniFer < dIniCovid20) ou
((R040FEM.IniFer > dFimCovid20) e (R040FEM.IniFer < dIniCovid21)) ou
(R040FEM.IniFer > dFimCovid21))))
valEvt = 0;
fim
senao
Se (tipCal = 54)@ Integração das ferias com a Folha@
inicio
xNumEmp = r034fun.NumEmp;
xTipCol = r034fun.TipCol;
xNumCad = r034fun.NumCad;
xCodEve = codEvt;
dIniPer = r040fem.IniPer;
dIniFer = r040fem.IniFer; @ busca Recibo de ferias Colaborador @
Definir cursor cur_R040Fem;
cur_R040Fem.SQL "select PrvDes, IniFer, GerAdt from R040Fem \
Where NumEmp = :xNumEmp and TipCol = :xTipCol and NumCad = :xNumCad and IniPer = :dIniPer and IniFer = :dIniFer";
cur_R040Fem.AbrirCursor();
Se (cur_R040Fem.Achou)
inicio
@ Caso não seja referente a MP COVID19 zera o evento@
Se (((cur_R040Fem.GerAdt = 'S') e (cur_R040Fem.PrvDes <> 0.01)) ou ((cur_R040Fem.GerAdt = 'N') e ((cur_R040Fem.IniFer < dIniCovid20) ou
((cur_R040Fem.IniFer > dFimCovid20) e (cur_R040Fem.IniFer < dIniCovid21)) ou
(cur_R040Fem.IniFer > dFimCovid21))))
inicio
valEvt = 0;
fim
senao
inicio
@ Se recibo com adiantamtamento e for MP COVID19 @
Se ((cur_R040Fem.GerAdt = 'S') e (cur_R040Fem.PrvDes = 0.01))
inicio
xAchou = 0;
Definir cursor cur_R030Emp;
cur_R030Emp.SQL "select CalDpn, TabEve from R030Emp Where NumEmp = :xNumEmp";
cur_R030Emp.AbrirCursor();
@Busca assinalmento da empresa pra a rotina de Diferenca Positiva/Negativa de Ferias@
Se (cur_R030Emp.Achou)
Inicio
@Caso utilize a rotina mas não tenha evento configurado trata valor no evento normal de diferença @
se (cur_R030Emp.CalDpn = 'S')
inicio
xCodTab = cur_R030Emp.TabEve;
Definir cursor cur_R008Evc;
cur_R008Evc.SQL "select * from R008Evc Where CodTab = :xCodTab and CodEve = :xCodEve and EveDpo > 0";
cur_R008Evc.AbrirCursor();
Se (cur_R008Evc.Achou)
inicio
xAchou = 1;
fim
cur_R008Evc.FecharCursor();
fim
fim
cur_R030Emp.FecharCursor();
@ Caso não use a rotina de Diferenca Positiva/Negativa ou nao tenha o evento calculado, busca o valor original calculado no recibo de ferias@
se (xAchou = 0)
inicio
Definir cursor cur_R040Fev;
cur_R040Fev.SQL "select ValEve from R040Fev \
Where NumEmp = :xNumEmp and TipCol = :xTipCol and NumCad = :xNumCad and IniPer = :dIniPer and IniFer = :dIniFer and CodEve = :xCodEve";
cur_R040Fev.AbrirCursor();
Se (cur_R040Fev.Achou)
inicio
valEvt = cur_R040Fev.ValEve;
fim
cur_R040Fev.FecharCursor();
fim
fim
fim
fim
cur_R040Fem.FecharCursor();
fim
senao
inicio
valEvt = 0;
fim;
Uma vez a data ajustada e iniciado o calculo de férias neste modelo, a data na regra não poderá mais ser ajustada.
CLC a ser cadastrado para este evento:
Nota: O código deve ser um número que estiver livre na sua tabela de CLC.
Evento:
Exemplos de Recibo de Férias e Ficha Financeira com o novo evento de 1/3:
Recibo de férias:
A Ficha Financeira:
Caso haja valores de diferença de férias na folha, o sistema pagará junto o valor da diferença do 1/3 correspondente.
Se a empresa quiser separar o valor do 1/3 do valor total do evento de diferença de férias para pagamento futuro (MP 1046/2021) poderá utilizar a Rotina de diferença Positiva / Negativa de férias e criar um evento para a separação deste valor, indicando o mesmo CLC.
Alteramos o modelo 002 - Aviso de Férias (FPFE002.COL) para possibilitar informar quantos dias antes da data de início das férias foi dado o aviso de férias para o colaborador.
Caminho: Colaborador > Férias > Listar > Doctos Férias > 002 – Aviso de Férias (FPFE002.COL).
Cálculo das provisões/contabilização
Colaboradores / Provisões / Férias
Na tela de Provisão o valor do 1/3 de férias + encargos, dos dias de férias que estão sendo concedidos no mês serão baixados do saldo da provisão, e consequentemente serão efetuados estes lançamentos na contabilização da Folha.
A solução para estornar a baixa dos valores do 1/3 de férias nas contas contábeis, se dará através de:
- CLC do evento novo para o desconto do 1/3 de férias no recibo e na Folha
- Novos CLC’s para tratamento dos encargos
- Regra especial para CLC dos encargos
Os novos CLCs lançarão de volta nas contas contábeis o valor do 1/3 férias + encargos, deixando o saldo das contas corretas. O valor do 1/3 será baixado na contabilização no mês em que a empresa o pagar, limite dia 20/12.
Desta forma, o valor demonstrado na tela de Provisão do colaborador estará a menor, tendo em vista que o sistema não terá como ajustar isto agora. Contudo, nos lançamentos para a contabilidade, os valores estarão corretos.
Importante:
Este CLC não precisa ser criado quando no cadastro do evento de 1/3 de férias constar a incidência “N” no campo INSS Mensal.
Importante:
Este CLC não precisa ser criado quando no cadastro do evento de 1/3 de férias constar a incidência “N” no campo INSS Mensal.
Observação
O campo Nível de lançamento pode ser adequado de acordo com o entendimento do contador da empresa.
Importante
- Para os clientes que utilizam Rateio, o nível de lançamento do CLC 63 deve ser por Centro de Custo para que a Contabilização seja realizada corretamente.
- Para as empresas que utilizam Partidas Dobradas, torna-se necessário para as configurações de CLCs, que sejam criados outros CLCs de contrapartida. Ou seja, para todos os CLCs, deverá ser criado no mesmo nível, outro CLC com tipo de lançamento diferente. Sendo que o CLC normal deverá constar na base do CLC criado.
Contabilização por partidas dobradas
Para os CLCs 63 e 71, outro CLC com tipo de lançamento diferente deverá ser criado no mesmo nível. Exemplo:
CLC | Descrição | Tipo do Lançamento | Nível do Lançamento |
---|---|---|---|
Normal: 63 | Desconto 1/3 Férias Covid-19 | "C" | "T" |
Contra-partida: 163 | Desconto 1/3 Férias Covid-19 | "D" | "T" |
Além disso, devem ser criados dois novos CLCs com a mesma configuração que os CLCs 63 e 71. Por exemplo:
CLC 64 com a mesma configuração que o 63, exceto pelo tipo de base que deve ser "C", e vincular o CLC 63 neste CLC 64. No evento de contra-partida criado (163), inserir o CLC 64 na base.
No momento de informar as contas, deixar os CLCs 63 e 71 sem contas e informá-las nos CLCs 64 e 72.
Observação
O campo Nível de lançamento pode ser adequado de acordo com o entendimento do contador da empresa.
/* Regra para reversão dos valores de FGTS sobre 1/3 de férias MP 927 */ /* Compilação: 01/04/2021 */ /* Definição dos Cursores de Pesquisa */ Definir Alfa CurR146Prv; /* Definição da Variaveis globais */ Definir Numero vNumEmp; Definir Numero vTipCol; Definir Numero vNumCad; Definir Numero vTipPrv; Definir Numero vTipVal; Definir Numero vPerVal; Definir Numero vValClc; Definir Data vPerRef; /* Inicialização da Varivies Globais */ vNumEmp = R048Ctb.NumEmp; vTipCol = R048Ctb.TipCol; vNumCad = R048Ctb.NumCad; vTipPrv = 1; @ Defini que é exclusivo para a provisão de férias @ vTipVal = 4; @ Defini que é exclusivo para o FGTS @ vPerVal = 0; vValClc = R048Ctb.ValLan; vPerRef = PerRef; /* Pesquisa o percentual de FGTS aplicado no último calculo realizado da provisão */ SQL_Criar(CurR146Prv); SQL_UsarAbrangencia(CurR146Prv,0); SQL_USARSQLSENIOR2(CurR146Prv,0); SQL_DefinirComando(CurR146Prv,"Select PerVal From R146Prv B \ where B.NumEmp = :vNumEmp \ and B.Tipcol = :vTipCol \ and B.NumCad = :vNumCad \ and B.TipPrv = :vTipPrv \ and B.TipVal = :vTipVal \ and B.MesAno = (Select Max(A.MesAno) From R146Prv A \ Where B.NumEmp = A.NumEmp \ and B.TipCol = A.TipCol \ and B.NumCad = A.NumCad \ and B.TipPrv = A.TipPrv \ and B.TipVal = A.TipVal \ and A.MesAno <= :vPerRef)"); SQL_DefinirInteiro(CurR146Prv,"vNumEmp",vNumEmp); SQL_DefinirInteiro(CurR146Prv,"vTipCol",vTipCol); SQL_DefinirInteiro(CurR146Prv,"vNumCad",vNumCad); SQL_DefinirInteiro(CurR146Prv,"vTipPrv",vTipPrv); SQL_DefinirInteiro(CurR146Prv,"vTipVal",vTipVal); SQL_DefinirData(CurR146Prv,"vPerRef",vPerRef); SQL_AbrirCursor(CurR146Prv); Enquanto (SQL_EOF(CurR146Prv) = 0) Inicio SQL_RetornarFlutuante(CurR146Prv, "PerVal", vPerVal); SQL_Proximo(CurR146Prv); Fim; SQL_FecharCursor(CurR146Prv); SQL_Destruir(CurR146Prv); /* Apura o valor a ser atibuido ao CLC */ vValClc = (vValClc * vPerVal) / 100; ArredondarValor(vValClc, 2); @ Arredonda o valor para duas casas decimais @ R048Ctb.ValLan = vValClc; @ Atribui o valor do lançamento contábil @
/* Regra para reversão dos valores de INSS sobre 1/3 de férias MP 927 */ /* Compilação: 01/04/2021 */ /* Definição dos Cursores de Pesquisa */ Definir Alfa CurR146Prv; /* Definição da Variaveis globais */ Definir Numero vNumEmp; Definir Numero vTipCol; Definir Numero vNumCad; Definir Numero vTipPrv; Definir Numero vTipVal; Definir Numero vPerVal; Definir Numero vValClc; Definir Data vPerRef; /* Inicialização da Varivies Globais */ vNumEmp = R048Ctb.NumEmp; vTipCol = R048Ctb.TipCol; vNumCad = R048Ctb.NumCad; vTipPrv = 1; @ Defini que é exclusivo para a provisão de férias @ vTipVal = 3; @ Defini que é exclusivo para o INSS @ vPerVal = 0; vValClc = R048Ctb.ValLan; vPerRef = PerRef; /* Pesquisa o percentual de INSS aplicado no último calculo realizado da provisão */ SQL_Criar(CurR146Prv); SQL_UsarAbrangencia(CurR146Prv,0); SQL_USARSQLSENIOR2(CurR146Prv,0); SQL_DefinirComando(CurR146Prv,"Select PerVal From R146Prv B \ where B.NumEmp = :vNumEmp \ and B.Tipcol = :vTipCol \ and B.NumCad = :vNumCad \ and B.TipPrv = :vTipPrv \ and B.TipVal = :vTipVal \ and B.MesAno = (Select Max(A.MesAno) From R146Prv A \ Where B.NumEmp = A.NumEmp \ and B.TipCol = A.TipCol \ and B.NumCad = A.NumCad \ and B.TipPrv = A.TipPrv \ and B.TipVal = A.TipVal \ and A.MesAno <= :vPerRef)"); SQL_DefinirInteiro(CurR146Prv,"vNumEmp",vNumEmp); SQL_DefinirInteiro(CurR146Prv,"vTipCol",vTipCol); SQL_DefinirInteiro(CurR146Prv,"vNumCad",vNumCad); SQL_DefinirInteiro(CurR146Prv,"vTipPrv",vTipPrv); SQL_DefinirInteiro(CurR146Prv,"vTipVal",vTipVal); SQL_DefinirData(CurR146Prv,"vPerRef",vPerRef); SQL_AbrirCursor(CurR146Prv); Enquanto (SQL_EOF(CurR146Prv) = 0) Inicio SQL_RetornarFlutuante(CurR146Prv, "PerVal", vPerVal); SQL_Proximo(CurR146Prv); Fim; SQL_FecharCursor(CurR146Prv); SQL_Destruir(CurR146Prv); /* Apura o valor a ser atibuido ao CLC */ vValClc = (vValClc * vPerVal) / 100; ArredondarValor(vValClc, 2); @ Arredonda o valor para duas casas decimais @ R048Ctb.ValLan = vValClc; @ Atribui o valor do lançamento contábil @
/* Regra para reversão dos valores de PIS sobre 1/3 de férias MP 927 */
/* Compilação: 26/03/2021 */ /* Definição dos Cursores de Pesquisa */ Definir Cursor Cur_R146Prv; /* Definição da Variaveis globais */ Definir Numero vNumEmp; Definir Numero vTipCol; Definir Numero vNumCad; Definir Numero vTipPrv; Definir Numero vTipVal; Definir Numero vPerVal; Definir Numero vValClc; Definir Data vPerRef; /* Inicialização da Varivies Globais */ vNumEmp = R048Ctb.NumEmp; vTipCol = R048Ctb.TipCol; vNumCad = R048Ctb.NumCad; vTipPrv = 1; @ Defini que é exclusivo para a provisão de férias @ vTipVal = 5; @ Defini que é exclusivo para o PIS @ vPerVal = 0; vValClc = R048Ctb.ValLan; vPerRef = PerRef; /* Pesquisa o percentual de PIS aplicado no calculo da provisão */ Cur_R146Prv.Sql "Select PerVal From R146Prv \ where NumEmp = :vNumEmp \ and Tipcol = :vTipCol \ and NumCad = :vNumCad \ and TipPrv = :vTipPrv \ and TipVal = :vTipVal \ and MesAno = :vPerRef"; Cur_R146Prv.AbrirCursor(); Se (Cur_R146PRV.Achou) Inicio vPerVal = Cur_R146Prv.PerVal; @ retorna o percentual de encarco aplicado no calculo da provisão @ Fim; Cur_R146Prv.FecharCursor(); /* Apura o valor a ser atibuido ao CLC */ vValClc = (vValClc * vPerVal) / 100; ArredondarValor(vValClc, 2); @ Arredonda o valor para duas casas decimais @ R048Ctb.ValLan = vValClc; @ atribui o valor do lançamento contábil @
Alteramos os relatórios 001 - Provisão por Rateio (FPNR001.PRV), 002 - Provisão por Local (FPNR002.PRV) e 003 - Provisão por Centro de Custo (FPNR003.PRV), adicionando uma coluna para demonstrar o valor do 1/3 e encargos devidos, e um novo saldo da conta, para facilitar o fechamento do confronto com a conta contábil passiva da provisão.
IMPORTANTE:
Se dentro do mês o colaborador tiver mais de um recibo, e em um deles o valor do 1/3 foi pago agora, somente o valor do 1/3 não pago será tratado conforme esta orientação, o valor pago de 1/3 terá a sua baixa mantida normalmente.
O Colaborador teve férias integradas em março e abril:
- Evento 1/3 Férias Compensatório Covid Folha 05/2021 = 30,00 / Coluna COVID no relatório da provisão de 05/2021 = 30,00
- Evento 1/3 Férias Compensatório Covid Folha 06/2021 = 400,00 / Coluna COVID no relatório da provisão de 06/2021 = 430,00
- Evento 1/3 Férias Compensatório Covid Folha 07/2021 = 0,00 / Coluna COVID no relatório da provisão de 07/2021 = 430,00 > esse valor ficará em saldo demonstrado nessa coluna até que ocorra a devida baixa (pagamento 1/3 futuro)
A coluna COVID, adicionada nos relatórios da provisão, tem a finalidade de demonstrar o valor do 1/3 e encargos devidos e um novo saldo da conta, ou seja, este valor permanecerá ali até que ocorra o pagamento no evento criado para quitação futura. Neste momento que ocorrer o pagamento, o valor será baixado nesta coluna, para assim a contabilidade ter o melhor controle deste saldo.
Quando a coluna dos relatórios de provisão apresentarem divergências, com valores de INSS de reversão de Férias, torna-se necessário realizar o ajuste de valores da reversão sobre 1/3 de Férias.
Veja, abaixo, como deverão ser configurados os CLCs para ajustar os valores, ocasionados pela alteração de percentual em período de vigência da MP 1046/2021. Esse procedimento ajustará os valores da contabilização. Para isso, será necessário estabelecer as seguintes configurações:
- Criar regra para CLC de ajuste de reversão de INSS:
/* Regra para ajuste da reversão dos valores de INSS sobre 1/3 de férias MP 927 e MP-1046*/
/* Definição dos cursores de pesquisa */
Definir Alfa CurR146Prv;
Definir Alfa CurR048Ctb;
/* Definição da variáveis globais */
Definir Numero vNumEmp;
Definir Numero vTipCol;
Definir Numero vNumCad;
Definir Numero vTipPrv;
Definir Numero vTipVal;
Definir Numero vPerVal;
Definir Numero vValClc;
Definir Numero vValBas;
Definir Numero vValPro;
Definir Numero vClcRev;
Definir Numero vClcIns;
Definir Numero vClcAju;
Definir Numero vDia;
Definir Numero vMes;
Definir Numero vAno;
Definir Alfa vConGer;
Definir Data vPerRef;
Definir Data vDatLan;
/* Inicialização da variáveis globais */
vNumEmp = R048Ctb.NumEmp;
vTipCol = R048Ctb.TipCol;
vNumCad = R048Ctb.NumCad;
vTipPrv = 1; @ Define que é exclusivo para a provisão de férias @
vTipVal = 3; @ Define que é exclusivo para o INSS @
vPerVal = 0;
vConGer = "0"; @ Define que é exclusivo para registros não gerenciais @
vDia = 0;
vMes = 0;
vAno = 0;
vPerRef = PerRef;
DesMontaData(vPerRef,vDia,vMes,vAno);
Se (vAno = 2021)
MontaData (28, 04, 2021, vDatLan);
Senao
MontaData (22, 03, 2021, vDatLan);
/* O cliente deve informar os códigos dos CLCs criados para reversão e ajuste */
vClcRev = 1; /* Código do CLC de reversão do valor de 1/3 */
vClcIns = 2; /* Código do CLC de reversão do valor de 1/3 sobre INSS*/
vClcAju = 3; /* Código do CLC de ajuste de reversão do valor de 1/3 sobre INSS*/
/* Buscar último lançamento do CLC de ajuste de reversão */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"Select MAX(DatLan) DatLan \
From R048ctb B \
where B.NumEmp = :vNumEmp \
and B.Tipcol = :vTipCol \
and B.NumCad = :vNumCad \
and B.CodClc = :vClcAju \
and B.ConGer = :vConGer \
and B.DatLan < :vPerRef");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vNumCad);
SQL_DefinirInteiro(CurR048Ctb,"vClcAju",vClcAju);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vPerRef",vPerRef);
SQL_AbrirCursor(CurR048Ctb);
Se (SQL_EOF(CurR048Ctb) = 0)
SQL_RetornarData(CurR048Ctb, "DatLan", vDatLan);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Buscar o valor do CLC de 1/3 reversão */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"Select SUM(ValLan) ValLan \
From R048ctb B \
where B.NumEmp = :vNumEmp \
and B.Tipcol = :vTipCol \
and B.NumCad = :vNumCad \
and B.CodClc = :vClcRev \
and B.ConGer = :vConGer \
and B.DatLan < :vPerRef \
and B.DatLan > :vDatLan");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vNumCad);
SQL_DefinirInteiro(CurR048Ctb,"vClcRev",vClcRev);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vPerRef",vPerRef);
SQL_DefinirData(CurR048Ctb,"vDatLan",vDatLan);
SQL_AbrirCursor(CurR048Ctb);
Se (SQL_EOF(CurR048Ctb) = 0)
SQL_RetornarFlutuante(CurR048Ctb, "ValLan", vValBas);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Buscar o valor do CLC de reversão de 1/3 INSS */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"Select SUM(ValLan) ValLan \
From R048ctb B \
where B.NumEmp = :vNumEmp \
and B.Tipcol = :vTipCol \
and B.NumCad = :vNumCad \
and B.CodClc = :vClcIns \
and B.ConGer = :vConGer \
and B.DatLan < :vPerRef \
and B.DatLan > :vDatLan");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vNumCad);
SQL_DefinirInteiro(CurR048Ctb,"vClcIns",vClcIns);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vPerRef",vPerRef);
SQL_DefinirData(CurR048Ctb,"vDatLan",vDatLan);
SQL_AbrirCursor(CurR048Ctb);
Se (SQL_EOF(CurR048Ctb) = 0)
SQL_RetornarFlutuante(CurR048Ctb, "ValLan", vValPro);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Pesquisa o percentual de INSS aplicado no último cálculo realizado da provisão */
SQL_Criar(CurR146Prv);
SQL_UsarAbrangencia(CurR146Prv,0);
SQL_USARSQLSENIOR2(CurR146Prv,0);
SQL_DefinirComando(CurR146Prv,"Select PerVal \
From R146Prv B \
where B.NumEmp = :vNumEmp \
and B.Tipcol = :vTipCol \
and B.NumCad = :vNumCad \
and B.TipPrv = :vTipPrv \
and B.TipVal = :vTipVal \
and B.MesAno = (Select Max(A.MesAno) \
From R146Prv A \
Where B.NumEmp = A.NumEmp \
and B.TipCol = A.TipCol \
and B.NumCad = A.NumCad \
and B.TipPrv = A.TipPrv \
and B.TipVal = A.TipVal \
and A.MesAno <= :vPerRef)");
SQL_DefinirInteiro(CurR146Prv,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR146Prv,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR146Prv,"vNumCad",vNumCad);
SQL_DefinirInteiro(CurR146Prv,"vTipPrv",vTipPrv);
SQL_DefinirInteiro(CurR146Prv,"vTipVal",vTipVal);
SQL_DefinirData(CurR146Prv,"vPerRef",vPerRef);
SQL_AbrirCursor(CurR146Prv);
Enquanto (SQL_EOF(CurR146Prv) = 0)
Inicio
SQL_RetornarFlutuante(CurR146Prv, "PerVal", vPerVal);
SQL_Proximo(CurR146Prv);
Fim;
SQL_FecharCursor(CurR146Prv);
SQL_Destruir(CurR146Prv);
/* Apurar o valor a ser atribuido ao CLC */
vValClc = (vValBas * vPerVal) / 100;
ArredondarValor(vValClc, 2); @ Arredonda o valor para duas casas decimais @
/* Verificar se vai ter Ajuste nos valores provisionados de 1/3 INSS */
/* Definição de variáveis de contabilização. */
Definir Alfa xDebCre;
Definir Alfa xConCre;
Definir Alfa xConDeb;
Definir Alfa xConCrP;
Definir Alfa xConDeP;
Definir Numero xValLan;
Definir Numero xRedCre;
Definir Numero xRedDeb;
Definir Numero xRedCrP;
Definir Numero xRedDeP;
xValLan = vValClc - vValPro;
/* Se o valor do lançamento for negativo. */
Se (xValLan < 0)
Inicio
/* Tornar o valor positivo. */
xValLan = xValLan * -1;
/* Inverter o tipo da conta. */
Se (R048Ctb.DebCre = "C")
Inicio
xDebCre = "D";
Fim;
Senao
Inicio
xDebCre = "C";
Fim;
/* Trocar as contas de crédito e débito. */
xConCre = R048Ctb.ConDeb;
xConDeb = R048Ctb.ConCre;
xConCrP = R048Ctb.ConDeP;
xConDeP = R048Ctb.ConCrP;
xRedCre = R048Ctb.RedDeb;
xRedDeb = R048Ctb.RedCre;
xRedCrP = R048Ctb.RedDeP;
xRedDeP = R048Ctb.RedCrP;
/* Atribuir os valores da contabilização. */
R048Ctb.DebCre = xDebCre;
R048Ctb.ConCre = xConCre;
R048Ctb.ConDeb = xConDeb;
R048Ctb.ConCrP = xConCrP;
R048Ctb.ConDeP = xConDeP;
R048Ctb.RedCre = xRedCre;
R048Ctb.RedDeb = xRedDeb;
R048Ctb.RedCrP = xRedCrP;
R048Ctb.RedDeP = xRedDeP;
Fim;
R048Ctb.ValLan = xValLan; @ Atribuir o valor do lançamento contábil @
- Ajustar as informações da regra:
Alterar os campos mencionados no print pelos códigos dos CLCs correspondentes.
- vClcRev: informa o código do CLC de reversão do valor de 1/3;
- vClcIns: informar o código do CLC de reversão do valor de 1/3 sobre INSS;
- vClcAju: informar o código do CLC de ajuste de reversão do valor de 1/3 sobre INSS.
- Criar novo(s) CLC(s) e informar a nova regra criada no processo anterior, que receberá o valor do ajuste:
Para ajustar valores de férias de colaboradores que possuem um saldo de Covid-19 a receber decorrentes da MP 1046/2021, mas foram transferidos de empresa e/ou filial antes de sua quitação, explicaremos como deverão ser configurados os CLCs:
- Criar dois CLCs (Débito/Crédito) para cada valor vinculado ao Covid-19 que deseja transferir:
- Criar uma regra LSP para cada saldo de Covid-19 a ser contabilizado e vincular ao CLC correspondente, configurado com opção Tipo Base igual R - Regra:
Exemplo: 1/3 Férias precisa de dois CLCs (C/D), o INSS outros dois CLCs, o mesmo ocorre para FGTS, PIS e possíveis valores de ajustes da reversão dos encargos.
Um CLC deverá ser Tipo Base igual Regra, onde será vinculada uma nova regra para transferência de saldo:
Outro CLC deverá conter o Nível Lançamento igual a T – Total Empresa e Tipo Base igual a C – CLCs informando o CLC criado anteriormente no campo Bases.
Observação
Para cada saldo "COVID19" a ser transferido será necessário criar 2 CLCs com essas características.
/*------------------------------------------------------------------*/
/* Versão: 2 */
/* Regra para tranferência de valores para atender MP-927 e MP-1046 */
/*------------------------------------------------------------------*/
/* Definição dos cursores de pesquisa */
Definir Alfa CurR038Hfi;
Definir Alfa CurR048Ctb;
/* Definição das variáveis */
Definir Numero vNumEmp;
Definir Numero vEmpAnt;
Definir Numero vCodFil;
Definir Numero vFilAnt;
Definir Numero vTipCol;
Definir Numero vNumCad;
Definir Numero vCadAnt;
Definir Numero vClcDCV;
Definir Numero vClcQCV;
Definir Numero vClcTCr;
Definir Numero vClcTDe;
Definir Numero vDia;
Definir Numero vMes;
Definir Numero vAno;
Definir Alfa vConGer;
Definir Alfa vConCtC;
Definir Alfa vConCtD;
Definir Data vDatLan;
Definir Data vPerRef;
Definir Data vIniPer;
Definir Data vFimPer;
/* Inicialização das variáveis */
vNumEmp = R048Ctb.NumEmp;
vCodFil = R048Ctb.CodFil;
vTipCol = R048Ctb.TipCol;
vNumCad = R048Ctb.NumCad;
vConGer = R048Ctb.ConGer;
vEmpAnt = 0;
vFilAnt = 0;
vCadAnt = 0;
vDia = 0;
vMes = 0;
vAno = 0;
vPerRef = PerRef;
DesMontaData(vPerRef,vDia,vMes,vAno);
Se (vAno = 2021)
MontaData (28, 04, 2021, vDatLan);
Senao
MontaData (22, 03, 2021, vDatLan);
/* O cliente deve informar os códigos dos CLCs criados para atender MP-927 */
vIniPer = IniCmp; @--- Início do período de transferências ---@
vFimPer = FimCmp; @--- Fim do período de transferências ---@
vClcDCV = nnnn; @--- CLC desconto ---@
vClcQCV = nnnn; @--- CLC quitação ---@
vClcTCr = nnnn; @--- CLC transferência "COVID" - 1º CLC ---@
vClcTDe = nnnn; @--- CLC transferência "COVID" - 2º CLC ---@
vConCtC = "aaaa"; @--- Conta Contábil - 1º CLC de transferência ---@
vConCtD = "aaaa"; @--- Conta Contábil - 2º CLC de transferência ---@
/*------------------ TRANSFERÊNCIA FILIAIS COM MESMO NUMCAD ------------------*/
Se(vCadAnt = 0)
Inicio
/* Retorna registros do colaborador com transferência de filial */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.NUMEMP NUMEMP, \
H.CODFIL CODFIL, \
H.NUMCAD NUMCAD \
FROM R038HFI H \
WHERE H.NUMEMP = :vNumEmp \
AND H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.NUMCAD = :vNumCad \
AND H.CADATU = :vCadAtu \
AND H.CODFIL <> :vCodFil \
AND EXISTS (SELECT * \
FROM R038HFI F \
WHERE F.NUMEMP = H.NUMEMP \
AND F.EMPATU = H.EMPATU \
AND F.TIPCOL = H.TIPCOL \
AND F.NUMCAD = H.NUMCAD \
AND F.CADATU = H.CADATU \
AND F.DATALT >= :vIniPer \
AND F.DATALT <= :vFimPer)");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vNumCad);
SQL_DefinirInteiro(CurR038Hfi,"vCadAtu",vNumCad);
SQL_DefinirInteiro(CurR038Hfi,"vCodFil",vCodFil);
SQL_DefinirData(CurR038Hfi,"vIniPer",vIniPer);
SQL_DefinirData(CurR038Hfi,"vFimPer",vFimPer);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"NUMEMP",vEmpAnt);
SQL_RetornarInteiro(CurR038Hfi,"CODFIL",vFilAnt);
SQL_RetornarInteiro(CurR038Hfi,"NUMCAD",vCadAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Fim;
/*------------------ TRANSFERÊNCIA FILIAIS COM TROCA NUMCAD ------------------*/
Se(vCadAnt = 0)
Inicio
/* Retorna registros do colaborador com transferência de filial */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.NUMEMP NUMEMP, \
H.NUMCAD NUMCAD \
FROM R038HFI H \
WHERE H.NUMEMP = :vNumEmp \
AND H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.CADATU = :vCadAtu \
AND H.NUMCAD <> :vNumCad \
AND H.DATALT >= :vIniPer \
AND H.DATALT <= :vFimPer");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vCadAtu",vNumCad);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vNumCad);
SQL_DefinirData(CurR038Hfi,"vIniPer",vIniPer);
SQL_DefinirData(CurR038Hfi,"vFimPer",vFimPer);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"NUMEMP",vEmpAnt);
SQL_RetornarInteiro(CurR038Hfi,"NUMCAD",vCadAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Se(vCadAnt <> 0)
Inicio
/* Retorna à Filial anterior à transferência */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.CODFIL CODFIL \
FROM R038HFI H \
WHERE H.NUMEMP = :vNumEmp \
AND H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.NUMCAD = :vNumCad \
AND H.CADATU = :vNumCad");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vCadAnt);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"CODFIL",vFilAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Fim;
Fim;
/*------------------ TRANSFERÊNCIA EMPRESA COM MESMO NUMCAD ------------------*/
Se(vCadAnt = 0)
Inicio
/* Retorna registros do colaborador com transferência de empresa */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.NUMEMP NUMEMP, \
H.CODFIL CODFIL, \
H.NUMCAD NUMCAD \
FROM R038HFI H \
WHERE H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.NUMCAD = :vNumCad \
AND H.CADATU = :vCadAtu \
AND H.NUMEMP <> :vNumEmp \
AND H.DATALT >= :vIniPer \
AND H.DATALT <= :vFimPer");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vNumCad);
SQL_DefinirInteiro(CurR038Hfi,"vCadAtu",vNumCad);
SQL_DefinirData(CurR038Hfi,"vIniPer",vIniPer);
SQL_DefinirData(CurR038Hfi,"vFimPer",vFimPer);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"NUMEMP",vEmpAnt);
SQL_RetornarInteiro(CurR038Hfi,"NUMCAD",vCadAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Se(vCadAnt <> 0)
Inicio
/* Retorna à Filial anterior à transferência */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.CODFIL CODFIL \
FROM R038HFI H \
WHERE H.NUMEMP = :vNumEmp \
AND H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.NUMCAD = :vNumCad \
AND H.CADATU = :vNumCad");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vCadAnt);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"CODFIL",vFilAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Fim;
Fim;
/*------------------ TRANSFERÊNCIA EMPRESA COM TROCA NUMCAD ------------------*/
Se(vCadAnt = 0)
Inicio
/* Retorna registros do colaborador com transferência de empresa */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.NUMEMP NUMEMP, \
H.CODFIL CODFIL, \
H.NUMCAD NUMCAD \
FROM R038HFI H \
WHERE H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.CADATU = :vCadAtu \
AND H.NUMEMP <> :vNumEmp \
AND H.NUMCAD <> :vNumCad \
AND H.DATALT >= :vIniPer \
AND H.DATALT <= :vFimPer");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vCadAtu",vNumCad);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vNumCad);
SQL_DefinirData(CurR038Hfi,"vIniPer",vIniPer);
SQL_DefinirData(CurR038Hfi,"vFimPer",vFimPer);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"NUMEMP",vEmpAnt);
SQL_RetornarInteiro(CurR038Hfi,"NUMCAD",vCadAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Se(vCadAnt <> 0)
Inicio
/* Retorna à Filial anterior à transferência */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.CODFIL CODFIL \
FROM R038HFI H \
WHERE H.NUMEMP = :vNumEmp \
AND H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.NUMCAD = :vNumCad \
AND H.CADATU = :vNumCad");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vCadAnt);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"CODFIL",vFilAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Fim;
Fim;
/*---------------- CONSISTÊNCIA DE DADOS PARA CONTABILIZAÇÃO -----------------*/
Se(vCadAnt <> 0)
Inicio
Definir Numero xValDCV;
Definir Numero xValQCV;
Definir Numero xValLan;
Definir Alfa xExiste;
Definir Data xDatLan;
xValDCV = 0;
xValQCV = 0;
xValLan = 0;
xExiste = "N";
xDatLan = R048Ctb.DatLan;
/* Verifica se CLC de transferência existe na base de dados */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"SELECT * FROM R048CTB C \
WHERE C.NUMEMP = :vNumEmp \
AND C.CODFIL = :vCodFil \
AND C.TIPCOL = :vTipCol \
AND C.NUMCAD = :vNumCad \
AND C.CODCLC = :vCodClc \
AND C.CONGER = :vConGer \
AND C.DATLAN = :vDatLan");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodFil",vFilAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",vClcTCr);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vDatLan",xDatLan);
SQL_AbrirCursor(CurR048Ctb);
Se(SQL_EOF(CurR048Ctb) = 0)
Inicio
xExiste = "S";
Fim;
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Exclui o registro do CLC Crédito de transferência, caso exista */
Se (xExiste = "S")
Inicio
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"DELETE FROM R048CTB \
WHERE NUMEMP = :vNumEmp \
AND CODFIL = :vCodFil \
AND TIPCOL = :vTipCol \
AND NUMCAD = :vNumCad \
AND CODCLC = :vCodClc \
AND CONGER = :vConGer \
AND DATLAN = :vDatLan");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodFil",vFilAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",vClcTCr);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vDatLan",xDatLan);
SQL_AbrirCursor(CurR048Ctb);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
Fim;
xExiste = "N";
/* Verifica se CLC de transferência existe na base de dados */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"SELECT * FROM R048CTB C \
WHERE C.NUMEMP = :vNumEmp \
AND C.CODFIL = :vCodFil \
AND C.TIPCOL = :vTipCol \
AND C.NUMCAD = :vNumCad \
AND C.CODCLC = :vCodClc \
AND C.CONGER = :vConGer \
AND C.DATLAN = :vDatLan");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodFil",vFilAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",vClcTDe);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vDatLan",xDatLan);
SQL_AbrirCursor(CurR048Ctb);
Se(SQL_EOF(CurR048Ctb) = 0)
Inicio
xExiste = "S";
Fim;
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Exclui o registro do CLC Débito de transferência, caso exista */
Se (xExiste = "S")
Inicio
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"DELETE FROM R048CTB \
WHERE NUMEMP = :vNumEmp \
AND CODFIL = :vCodFil \
AND TIPCOL = :vTipCol \
AND NUMCAD = :vNumCad \
AND CODCLC = :vCodClc \
AND CONGER = :vConGer \
AND DATLAN = :vDatLan");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodFil",vFilAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",vClcTDe);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vDatLan",xDatLan);
SQL_AbrirCursor(CurR048Ctb);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
Fim;
/* Retorna valor(es) do CLC Desconto para atender MP-927 */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"SELECT SUM(C.VALLAN) VALLAN \
FROM R048CTB C \
WHERE C.NUMEMP = :vNumEmp \
AND C.TIPCOL = :vTipCol \
AND C.NUMCAD = :vNumCad \
AND C.CODCLC = :vClcDCV \
AND C.CONGER = :vConGer \
AND C.DATLAN < :vPerRef \
AND C.DATLAN > :vDatLan \
AND NOT EXISTS (SELECT B.CODCLC CODCLC \
FROM R048CTB B \
WHERE B.NUMEMP = C.NUMEMP \
AND B.TIPCOL = C.TIPCOL \
AND B.NUMCAD = C.NUMCAD \
AND B.CODCLC = :vClcTCr \
AND B.CONGER = C.CONGER \
AND B.DATLAN >= :vIniPer \
AND B.DATLAN <= :vFimPer)");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vClcDCV",vClcDCV);
SQL_DefinirInteiro(CurR048Ctb,"vClcTCr",vClcTCr);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vPerRef",vPerRef);
SQL_DefinirData(CurR048Ctb,"vDatLan",vDatLan);
SQL_DefinirData(CurR048Ctb,"vIniPer",vIniPer);
SQL_DefinirData(CurR048Ctb,"vFimPer",vFimPer);
SQL_AbrirCursor(CurR048Ctb);
Se (SQL_EOF(CurR048Ctb) = 0)
Inicio
SQL_RetornarFlutuante(CurR048Ctb, "ValLan", xValDCV);
Fim;
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Retorna valor(es) do CLC Quitação para atender MP-927 */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"SELECT SUM(C.VALLAN) VALLAN \
FROM R048CTB C \
WHERE C.NUMEMP = :vNumEmp \
AND C.TIPCOL = :vTipCol \
AND C.NUMCAD = :vNumCad \
AND C.CODCLC = :vClcQCV \
AND C.CONGER = :vConGer \
AND C.DATLAN < :vPerRef \
AND C.DATLAN > :vDatLan \
AND NOT EXISTS (SELECT B.CODCLC CODCLC \
FROM R048CTB B \
WHERE B.NUMEMP = C.NUMEMP \
AND B.TIPCOL = C.TIPCOL \
AND B.NUMCAD = C.NUMCAD \
AND B.CODCLC = :vClcTDe \
AND B.CONGER = C.CONGER \
AND B.DATLAN >= :vIniPer \
AND B.DATLAN <= :vFimPer)");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vClcQCV",vClcQCV);
SQL_DefinirInteiro(CurR048Ctb,"vClcTDe",vClcTDe);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vPerRef",vPerRef);
SQL_DefinirData(CurR048Ctb,"vDatLan",vDatLan);
SQL_DefinirData(CurR048Ctb,"vIniPer",vIniPer);
SQL_DefinirData(CurR048Ctb,"vFimPer",vFimPer);
SQL_AbrirCursor(CurR048Ctb);
Se (SQL_EOF(CurR048Ctb) = 0)
Inicio
SQL_RetornarFlutuante(CurR048Ctb, "VALLAN", xValQCV);
Fim;
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Atribui o valor do lançamento do CLC de transferência */
xValLan = xValDCV - xValQCV;
/*---------------- Ajustes de dados a serem contabilizados -----------------*/
Se(xValLan <> 0)
Inicio
Definir Numero tNumEmp;
Definir Numero tTipCol;
Definir Numero tNumCad;
Definir Numero tCodFil;
Definir Numero tCodOem;
Definir Numero tSeqPag;
Definir Numero tTabOrg;
Definir Numero tTabEve;
Definir Numero tCodClc;
Definir Data tDatLan;
Definir Numero tOpcCtb;
Definir Numero tCodCal;
Definir Numero tCodLot;
Definir Numero tSeqLot;
Definir Alfa tDebCre;
Definir Numero tHisPad;
Definir Alfa tCplHis;
Definir Numero tNatDes;
Definir Numero tConFin;
Definir Numero tCodAux;
Definir Alfa tConGer;
Definir Numero tPerRat;
Definir Numero tCodFor;
Definir Numero tClcPdb;
Definir Alfa tNumDoc;
Definir Alfa tNomCon;
Definir Alfa tOriCtb;
Definir Numero tLotSap;
Definir Numero tValLan;
Definir Numero tFilCtb;
Definir Alfa tCcuRat;
Definir Numero tLocRat;
Definir Numero tCodRat;
Definir Alfa tConDeb;
Definir Alfa tConCre;
Definir Numero tRedDeb;
Definir Numero tRedCre;
Definir Numero tFilCtp;
Definir Alfa tCodCcu;
Definir Numero tNumLoc;
Definir Numero tRatPad;
Definir Alfa tConDep;
Definir Alfa tConCrp;
Definir Numero tRedDep;
Definir Numero tRedCrp;
Definir Numero tDefCon;
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb, "SELECT C.NUMEMP, \
C.TIPCOL, \
C.NUMCAD, \
C.CODFIL, \
C.CODOEM, \
C.SEQPAG, \
C.TABORG, \
C.TABEVE, \
C.CODCLC, \
C.DATLAN, \
C.OPCCTB, \
C.CODCAL, \
C.CODLOT, \
C.SEQLOT, \
C.DEBCRE, \
C.HISPAD, \
C.CPLHIS, \
C.NATDES, \
C.CONFIN, \
C.CODAUX, \
C.CONGER, \
C.PERRAT, \
C.CODFOR, \
C.CLCPDB, \
C.NUMDOC, \
C.NOMCON, \
C.ORICTB, \
C.LOTSAP, \
C.VALLAN, \
C.FILCTB, \
C.CCURAT, \
C.LOCRAT, \
C.CODRAT, \
C.CONDEB, \
C.CONCRE, \
C.REDDEB, \
C.REDCRE, \
C.FILCTP, \
C.CODCCU, \
C.NUMLOC, \
C.RATPAD, \
C.CONDEP, \
C.CONCRP, \
C.REDDEP, \
C.REDCRP, \
C.DEFCON \
FROM R048CTB C \
WHERE C.NUMEMP = :vNumEmp \
AND C.TIPCOL = :vTipCol \
AND C.NUMCAD = :vNumCad \
AND C.CODCLC = :vCodClc \
AND C.CONGER = :vConGer \
AND C.DATLAN = (SELECT MAX(B.DATLAN) \
FROM R048CTB B \
WHERE B.NUMEMP = C.NUMEMP \
AND B.TIPCOL = C.TIPCOL \
AND B.NUMCAD = C.NUMCAD \
AND B.CODCLC = C.CODCLC \
AND B.CONGER = C.CONGER \
AND B.DATLAN < :vPerRef)");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",vClcDCV);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vPerRef",vPerRef);
SQL_AbrirCursor(CurR048Ctb);
Se (SQL_EOF(CurR048Ctb) = 0)
Inicio
SQL_RetornarInteiro(CurR048Ctb,"NUMEMP",tNumEmp);
SQL_RetornarInteiro(CurR048Ctb,"TIPCOL",tTipCol);
SQL_RetornarInteiro(CurR048Ctb,"NUMCAD",tNumCad);
SQL_RetornarInteiro(CurR048Ctb,"CODFIL",tCodFil);
SQL_RetornarInteiro(CurR048Ctb,"CODOEM",tCodOem);
SQL_RetornarInteiro(CurR048Ctb,"SEQPAG",tSeqPag);
SQL_RetornarInteiro(CurR048Ctb,"TABORG",tTabOrg);
SQL_RetornarInteiro(CurR048Ctb,"TABEVE",tTabEve);
SQL_RetornarInteiro(CurR048Ctb,"CODCLC",tCodClc);
SQL_RetornarData(CurR048Ctb,"DATLAN",tDatLan);
SQL_RetornarInteiro(CurR048Ctb,"OPCCTB",tOpcCtb);
SQL_RetornarInteiro(CurR048Ctb,"CODCAL",tCodCal);
SQL_RetornarInteiro(CurR048Ctb,"CODLOT",tCodLot);
SQL_RetornarInteiro(CurR048Ctb,"SEQLOT",tSeqLot);
SQL_RetornarAlfa(CurR048Ctb,"DEBCRE",tDebCre);
SQL_RetornarInteiro(CurR048Ctb,"HISPAD",tHisPad);
SQL_RetornarAlfa(CurR048Ctb,"CPLHIS",tCplHis);
SQL_RetornarInteiro(CurR048Ctb,"NATDES",tNatDes);
SQL_RetornarInteiro(CurR048Ctb,"CONFIN",tConFin);
SQL_RetornarInteiro(CurR048Ctb,"CODAUX",tCodAux);
SQL_RetornarAlfa(CurR048Ctb,"CONGER",tConGer);
SQL_RetornarFlutuante(CurR048Ctb,"PERRAT",tPerRat);
SQL_RetornarInteiro(CurR048Ctb,"CODFOR",tCodFor);
SQL_RetornarInteiro(CurR048Ctb,"CLCPDB",tClcPdb);
SQL_RetornarAlfa(CurR048Ctb,"NUMDOC",tNumDoc);
SQL_RetornarAlfa(CurR048Ctb,"NOMCON",tNomCon);
SQL_RetornarAlfa(CurR048Ctb,"ORICTB",tOriCtb);
SQL_RetornarInteiro(CurR048Ctb,"LOTSAP",tLotSap);
SQL_RetornarFlutuante(CurR048Ctb,"VALLAN",tValLan);
SQL_RetornarInteiro(CurR048Ctb,"FILCTB",tFilCtb);
SQL_RetornarAlfa(CurR048Ctb,"CCURAT",tCcuRat);
SQL_RetornarInteiro(CurR048Ctb,"LOCRAT",tLocRat);
SQL_RetornarInteiro(CurR048Ctb,"CODRAT",tCodRat);
SQL_RetornarAlfa(CurR048Ctb,"CONDEB",tConDeb);
SQL_RetornarAlfa(CurR048Ctb,"CONCRE",tConCre);
SQL_RetornarInteiro(CurR048Ctb,"REDDEB",tRedDeb);
SQL_RetornarInteiro(CurR048Ctb,"REDCRE",tRedCre);
SQL_RetornarInteiro(CurR048Ctb,"FILCTP",tFilCtp);
SQL_RetornarAlfa(CurR048Ctb,"CODCCU",tCodCcu);
SQL_RetornarInteiro(CurR048Ctb,"NUMLOC",tNumLoc);
SQL_RetornarInteiro(CurR048Ctb,"RATPAD",tRatPad);
SQL_RetornarAlfa(CurR048Ctb,"CONDEP",tConDep);
SQL_RetornarAlfa(CurR048Ctb,"CONCRP",tConCrp);
SQL_RetornarInteiro(CurR048Ctb,"REDDEP",tRedDep);
SQL_RetornarInteiro(CurR048Ctb,"REDCRP",tRedCrp);
SQL_RetornarInteiro(CurR048Ctb,"DEFCON",tDefCon);
Fim;
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/*---------------------- INVERTER CONTAS CONTÁBEIS -----------------------*/
Definir Alfa xDebCre;
Definir Alfa xConCre;
Definir Alfa xConDeb;
Definir Alfa xConCrP;
Definir Alfa xConDeP;
Definir Numero xRedCre;
Definir Numero xRedDeb;
Definir Numero xRedCrP;
Definir Numero xRedDeP;
Definir Numero xDefCon;
/* Inverte dados do lançamentos contábeis */
Se (xValLan < 0)
Inicio
xValLan = xValLan * -1;
Se(R048Ctb.DebCre = "C")
Inicio
xDebCre = "D";
Fim;
Senao
Inicio
xDebCre = "C";
Fim;
/* Trocar as contas de crédito e débito. */
xConCre = R048Ctb.ConDeb;
xConDeb = R048Ctb.ConCre;
xConCrP = R048Ctb.ConDeP;
xConDeP = R048Ctb.ConCrP;
xRedCre = R048Ctb.RedDeb;
xRedDeb = R048Ctb.RedCre;
xRedCrP = R048Ctb.RedDeP;
xRedDeP = R048Ctb.RedCrP;
/* Atribuir os valores da contabilização. */
R048Ctb.DebCre = xDebCre;
R048Ctb.ConCre = xConCre;
R048Ctb.ConDeb = xConDeb;
R048Ctb.ConCrP = xConCrP;
R048Ctb.ConDeP = xConDeP;
R048Ctb.RedCre = xRedCre;
R048Ctb.RedDeb = xRedDeb;
R048Ctb.RedCrP = xRedCrP;
R048Ctb.RedDeP = xRedDeP;
Fim;
R048Ctb.ValLan = xValLan;
/*---------------------- INSERIR REGISTROS CONTÁBEIS -----------------------*/
/* Inverte o Tipo Lançamento */
Se (R048Ctb.DebCre = "C")
Inicio
xDebCre = "D";
Fim;
Senao
Inicio
xDebCre = "C";
Fim;
/* Insere dados do CLC de tranferência saída */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"INSERT INTO R048CTB (NUMEMP, TIPCOL, NUMCAD, CODFIL, CODOEM, SEQPAG, TABORG, TABEVE, CODCLC, \
DATLAN, OPCCTB, CODCAL, CODLOT, SEQLOT, DEBCRE, HISPAD, CPLHIS, NATDES, \
CONFIN, CODAUX, CONGER, PERRAT, CODFOR, CLCPDB, NUMDOC, NOMCON, ORICTB, \
LOTSAP, VALLAN, FILCTB, CCURAT, LOCRAT, CODRAT, CONDEB, CONCRE, REDDEB, \
REDCRE, FILCTP, CODCCU, NUMLOC, RATPAD, CONDEP, CONCRP, REDDEP, REDCRP, DEFCON) \
VALUES (:vNumEmp, :vTipCol, :vNumCad, :vCodFil, :vCodOem, :vSeqPag, :vTabOrg, :vTabEve, \
:vCodClc, :vDatLan, :vOpcCtb, :vCodCal, :vCodLot, :vSeqLot, :vDebCre, :vHisPad, \
:vCplHis, :vNatDes, :vConFin, :vCodAux, :vConGer, :vPerRat, :vCodFor, :vClcPdb, \
:vNumDoc, :vNomCon, :vOriCtb, :vLotSap, :vValLan, :vFilCtb, :vCcuRat, :vLocRat, \
:vCodRat, :vConDeb, :vConCre, :vRedDeb, :vRedCre, :vFilCtp, :vCodCcu, :vNumLoc, \
:vRatPad, :vConDep, :vConCrp, :vRedDep, :vRedCrp, :vDefCon)");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodFil",vFilAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodOem",tCodOem);
SQL_DefinirInteiro(CurR048Ctb,"vSeqPag",R048Ctb.SeqPag);
SQL_DefinirInteiro(CurR048Ctb,"vTabOrg",tTabOrg);
SQL_DefinirInteiro(CurR048Ctb,"vTabEve",tTabEve);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",R048Ctb.CodClc);
SQL_DefinirData(CurR048Ctb,"vDatLan",R048Ctb.DatLan);
SQL_DefinirInteiro(CurR048Ctb,"vOpcCtb",R048Ctb.OpcCtb);
SQL_DefinirInteiro(CurR048Ctb,"vCodCal",R048Ctb.CodCal);
SQL_DefinirInteiro(CurR048Ctb,"vCodLot",R048Ctb.CodLot);
SQL_DefinirInteiro(CurR048Ctb,"vSeqLot",R048Ctb.SeqLot);
SQL_DefinirAlfa(CurR048Ctb,"vDebCre",xDebCre);
SQL_DefinirInteiro(CurR048Ctb,"vHisPad",R048Ctb.HisPad);
SQL_DefinirAlfa(CurR048Ctb,"vCplHis",R048Ctb.CplHis);
SQL_DefinirInteiro(CurR048Ctb,"vNatDes",R048Ctb.NatDes);
SQL_DefinirInteiro(CurR048Ctb,"vConFin",tConFin);
SQL_DefinirInteiro(CurR048Ctb,"vCodAux",tCodAux);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirFlutuante(CurR048Ctb,"vPerRat",tPerRat);
SQL_DefinirInteiro(CurR048Ctb,"vCodFor",tCodFor);
SQL_DefinirInteiro(CurR048Ctb,"vClcPdb",R048Ctb.ClcPDb);
SQL_DefinirAlfa(CurR048Ctb,"vNumDoc",R048Ctb.NumDoc);
SQL_DefinirAlfa(CurR048Ctb,"vNomCon",R048Ctb.NomCon);
SQL_DefinirAlfa(CurR048Ctb,"vOriCtb",R048Ctb.OriCtb);
SQL_DefinirInteiro(CurR048Ctb,"vLotSap",R048Ctb.LotSAP);
SQL_DefinirFlutuante(CurR048Ctb,"vValLan",R048Ctb.ValLan);
SQL_DefinirInteiro(CurR048Ctb,"vFilCtb",vFilAnt);
SQL_DefinirAlfa(CurR048Ctb,"vCcuRat",tCcuRat);
SQL_DefinirInteiro(CurR048Ctb,"vLocRat",tLocRat);
SQL_DefinirInteiro(CurR048Ctb,"vCodRat",tCodRat);
SQL_DefinirAlfa(CurR048Ctb,"vConDeb",R048Ctb.ConCre);
SQL_DefinirAlfa(CurR048Ctb,"vConCre",R048Ctb.ConDeb);
SQL_DefinirInteiro(CurR048Ctb,"vRedDeb",R048Ctb.RedCre);
SQL_DefinirInteiro(CurR048Ctb,"vRedCre",R048Ctb.RedDeb);
SQL_DefinirInteiro(CurR048Ctb,"vFilCtP",vFilAnt);
SQL_DefinirAlfa(CurR048Ctb,"vCodCcu",tCodCcu);
SQL_DefinirInteiro(CurR048Ctb,"vNumLoc",tNumLoc);
SQL_DefinirInteiro(CurR048Ctb,"vRatPad",tRatPad);
SQL_DefinirAlfa(CurR048Ctb,"vConDeP",R048Ctb.ConCrP);
SQL_DefinirAlfa(CurR048Ctb,"vConCrP",R048Ctb.ConDeP);
SQL_DefinirInteiro(CurR048Ctb,"vRedDeP",R048Ctb.RedCrP);
SQL_DefinirInteiro(CurR048Ctb,"vRedCrP",R048Ctb.RedDeP);
SQL_DefinirInteiro(CurR048Ctb,"vDefCon",R048Ctb.DefCon);
SQL_AbrirCursor(CurR048Ctb);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Alterar Contas Contábeis */
Se (R048Ctb.DebCre = "C")
Inicio
xDebCre = "C";
xConCre = vConCtD;
xConDeb = R048Ctb.ConDeb;
xConCrP = vConCtD;
xConDeP = R048Ctb.ConDeP;
xRedCre = R048Ctb.RedCre;
xRedDeb = R048Ctb.RedDeb;
xRedCrP = R048Ctb.RedCrP;
xRedDeP = R048Ctb.RedDeP;
xDefCon = 6;
Fim;
Senao
Inicio
xDebCre = "D";
xConCre = R048Ctb.ConCre;
xConDeb = vConCtD;
xConCrP = R048Ctb.ConCrP;
xConDeP = vConCtD;
xRedCre = R048Ctb.RedCre;
xRedDeb = R048Ctb.RedDeb;
xRedCrP = R048Ctb.RedCrP;
xRedDeP = R048Ctb.RedDeP;
xDefCon = 6;
Fim;
/* Insere dados CLC de tranferência saída */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"INSERT INTO R048CTB (NUMEMP, TIPCOL, NUMCAD, CODFIL, CODOEM, SEQPAG, TABORG, TABEVE, CODCLC, \
DATLAN, OPCCTB, CODCAL, CODLOT, SEQLOT, DEBCRE, HISPAD, CPLHIS, NATDES, \
CONFIN, CODAUX, CONGER, PERRAT, CODFOR, CLCPDB, NUMDOC, NOMCON, ORICTB, \
LOTSAP, VALLAN, FILCTB, CCURAT, LOCRAT, CODRAT, CONDEB, CONCRE, REDDEB, \
REDCRE, FILCTP, CODCCU, NUMLOC, RATPAD, CONDEP, CONCRP, REDDEP, REDCRP, DEFCON) \
VALUES (:vNumEmp, :vTipCol, :vNumCad, :vCodFil, :vCodOem, :vSeqPag, :vTabOrg, :vTabEve, \
:vCodClc, :vDatLan, :vOpcCtb, :vCodCal, :vCodLot, :vSeqLot, :vDebCre, :vHisPad, \
:vCplHis, :vNatDes, :vConFin, :vCodAux, :vConGer, :vPerRat, :vCodFor, :vClcPdb, \
:vNumDoc, :vNomCon, :vOriCtb, :vLotSap, :vValLan, :vFilCtb, :vCcuRat, :vLocRat, \
:vCodRat, :vConDeb, :vConCre, :vRedDeb, :vRedCre, :vFilCtp, :vCodCcu, :vNumLoc, \
:vRatPad, :vConDep, :vConCrp, :vRedDep, :vRedCrp, :vDefCon)");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodFil",vFilAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodOem",tCodOem);
SQL_DefinirInteiro(CurR048Ctb,"vSeqPag",R048Ctb.SeqPag);
SQL_DefinirInteiro(CurR048Ctb,"vTabOrg",tTabOrg);
SQL_DefinirInteiro(CurR048Ctb,"vTabEve",tTabEve);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",vClcTDe);
SQL_DefinirData(CurR048Ctb,"vDatLan",R048Ctb.DatLan);
SQL_DefinirInteiro(CurR048Ctb,"vOpcCtb",R048Ctb.OpcCtb);
SQL_DefinirInteiro(CurR048Ctb,"vCodCal",R048Ctb.CodCal);
SQL_DefinirInteiro(CurR048Ctb,"vCodLot",R048Ctb.CodLot);
SQL_DefinirInteiro(CurR048Ctb,"vSeqLot",R048Ctb.SeqLot);
SQL_DefinirAlfa(CurR048Ctb,"vDebCre",xDebCre);
SQL_DefinirInteiro(CurR048Ctb,"vHisPad",R048Ctb.HisPad);
SQL_DefinirAlfa(CurR048Ctb,"vCplHis",R048Ctb.CplHis);
SQL_DefinirInteiro(CurR048Ctb,"vNatDes",R048Ctb.NatDes);
SQL_DefinirInteiro(CurR048Ctb,"vConFin",tConFin);
SQL_DefinirInteiro(CurR048Ctb,"vCodAux",tCodAux);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirFlutuante(CurR048Ctb,"vPerRat",tPerRat);
SQL_DefinirInteiro(CurR048Ctb,"vCodFor",tCodFor);
SQL_DefinirInteiro(CurR048Ctb,"vClcPdb",R048Ctb.ClcPdb);
SQL_DefinirAlfa(CurR048Ctb,"vNumDoc",R048Ctb.NumDoc);
SQL_DefinirAlfa(CurR048Ctb,"vNomCon",R048Ctb.NomCon);
SQL_DefinirAlfa(CurR048Ctb,"vOriCtb",R048Ctb.OriCtb);
SQL_DefinirInteiro(CurR048Ctb,"vLotSap",R048Ctb.LotSap);
SQL_DefinirFlutuante(CurR048Ctb,"vValLan",R048Ctb.ValLan);
SQL_DefinirInteiro(CurR048Ctb,"vFilCtb",vFilAnt);
SQL_DefinirAlfa(CurR048Ctb,"vCcuRat",tCcuRat);
SQL_DefinirInteiro(CurR048Ctb,"vLocRat",tLocRat);
SQL_DefinirInteiro(CurR048Ctb,"vCodRat",tCodRat);
SQL_DefinirAlfa(CurR048Ctb,"vConDeb",xConDeb);
SQL_DefinirAlfa(CurR048Ctb,"vConCre",xConCre);
SQL_DefinirInteiro(CurR048Ctb,"vRedDeb",xRedDeb);
SQL_DefinirInteiro(CurR048Ctb,"vRedCre",xRedCre);
SQL_DefinirInteiro(CurR048Ctb,"vFilCtp",vFilAnt);
SQL_DefinirAlfa(CurR048Ctb,"vCodCcu",tCodCcu);
SQL_DefinirInteiro(CurR048Ctb,"vNumLoc",tNumLoc);
SQL_DefinirInteiro(CurR048Ctb,"vRatPad",tRatPad);
SQL_DefinirAlfa(CurR048Ctb,"vConDep",xConDeP);
SQL_DefinirAlfa(CurR048Ctb,"vConCrp",xConCrP);
SQL_DefinirInteiro(CurR048Ctb,"vRedDep",xRedDeP);
SQL_DefinirInteiro(CurR048Ctb,"vRedCrp",xRedCrP);
SQL_DefinirInteiro(CurR048Ctb,"vDefCon",xDefCon);
SQL_AbrirCursor(CurR048Ctb);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
Fim;
Fim;
- Ajustar as informações da regra, alterando os campos mencionados a seguir, conforme indicado na imagem:
- vIniPer: data de início do período de transferências. Pode-se utilizar o IniCmp (Data de início da contabilização) ou vDatLan (28/04/2021, data de início da MP 1046/2021);
- vFimPer: data de fim do período de transferências. Pode-se utilizar FimCmp (Data de fim contabilização) ou PerRef (1º dia do período de referência da contabilização);
- vClcDCV: CLC desconto correspondente ao saldo que deseja transferir, configurado conforme documentação MP 1046/2021;
- vClcQCV: CLC quitação correspondente ao saldo que deseja transferir, configurado conforme documentação MP 1046/2021;
- vClcTCr: CLC novo criado para crédito de transferência correspondente ao saldo que deseja transferir;
- vClcTDe: CLC novo criado para débito transferência correspondente ao saldo que deseja transferir;
- vConCtC: código da Conta Contábil configurado com Nível Lançamento igual a C - Centro de Custo ou I - Individual e Tipo Base igual Regra;
- vConCtD: código da Conta Contábil configurado com Nível Lançamento igual T - Total Empresa e Tipo Base igual CLC's, correspondente ao saldo que deseja transferir.
Ajustes para transferências realizadas no período de competência da contabilização:
Ajustes para transferências realizadas desde o início da MP 1046/2021:
Observação
Quando realizar a contabilização, serão gerados os CLCs na empresa e/ou filial de origem e destino da transferência do colaborador, para representar saída e entrada de valores transferidos.
Pagamento evento 1/3 de férias Covid-19
Para quitar o evento de 1/3 de férias que não foi pago na data da competência do recibo ou da ficha financeira, deverão ser criados:
Para o pagamento do evento de 1/3 de férias não quitado na concessão das férias, foi criado o relatório modelo 002 – Lançamentos Pagamento 1/3 Férias Covid-19 (FPLV002.LAN).
Caminho: Cálculos / Lançamentos / Variáveis / Listar.
O relatório irá lançar um evento de quitação na tela: Manutenção Lançamentos p/ Colaborador (Caminho: Cálculos / Lançamentos / Variáveis / Manutenção).
Observação
O campo Nível de lançamento pode ser adequado de acordo com o entendimento do contador da empresa.
Importante
Para os clientes que utilizam Rateio, o nível de lançamento do CLC 71 deve ser por Centro de Custo para que a Contabilização seja realizada corretamente.
O Evento de 1/3 de Férias Covid-19 poderá ser pago no mesmo prazo do 13º Salário, conforme a MP 1046/2021, ou seja, 20/12/2021.
Como tratar no Sistema Senior:
- Este evento Não poderá ser lançado na Folha de 13º Salário do tipo 32 - 13º Salário Integral, porque o eSocial não aceita o tipo de incidência dessa rubrica.
- Para pagar em Folha mensal, tipo 11 - Pagamento Mensal, deverá ser efetuado até a competência 11/2021.
Caso a empresa opte por pagar o valor de 1/3 de Férias do Covid-19 após o pagamento da Folha mensal 11/2021, o pagamento deverá ser feito em uma Folha específica com data de pagamento até dia 20/12/2021, e deverá utilizar a Folha de cálculo do tipo 93 - Especiais, exclusiva para esse pagamento.
Verifique o cálculo de INSS e IRRF:
INSS Férias
- Ao calcular a Folha 93 - Especiais, os valores de recibo de férias com data de pagamento anterior à data de pagamento dessa Folha, deverão ser considerados para a base de cálculo;
- Ao realizar o cálculo do recibo de férias com data de pagamento após a data de pagamento da Folha 93 - Especiais, os valores de base de cálculo e limitação do teto do mês deverão ser considerados.
IR de Férias
- Ao calcular o recibo de férias com data de pagamento igual ou após a data do pagamento do cálculo 93 - Especiais, o recibo apresentará os valores de IR da Folha 93 - Especiais;
- Ao calcular a Folha 93 - Especiais, os valores de recibo de férias com data de pagamento anterior ao da data de pagamento dessa folha deverão ser considerados.
Importante
O lançamento do evento deve seguir o mesmo processo já documentado no tópico referente à MP 1046/2021, item Pagamento evento 1/3 de férias Covid-19.
Acompanhe o calendário de liberações.
Recibo com adiantamento e pagamento do evento de 1/3 futuro:
O sistema identificava que o recibo calculado era referente à MP 1046/2021 através do valor 0,01 informado no campo % Provisão Desconto. Portanto, para assumir o cálculo de recibo de férias padrão, basta não informar o valor 0,01 neste campo.
Novo evento de 1/3 Covid-19:
A regra especial do novo evento de 1/3 Covid-19 precisa ser alterada para considerar a data de vigência da MP 1046/2021.
Regra ajustada:
Definir Numero xNumEmp; Definir Numero xTipCol; Definir Numero xNumCad; Definir Numero xCodEve; Definir Numero xCodTab; Definir Numero xAchou; Definir data dIniPer; Definir data dIniFer; Definir data dIniCovid; Definir data dFimCovid; MontaData (22,03,2020,dIniCovid); MontaData (19,07,2020,dFimCovid); @ Calculo refere ao recibo de ferias Normal e Coletiva@ Se ((tipCal >= 51) e (tipCal <= 53)) inicio @ Caso não seja referente a MP COVID19 zera o evento@ Se (((R040FEM.GerAdt = 'S') e (R040FEM.PrvDes <> 0.01)) ou ((R040FEM.GerAdt = 'N') e ((R040FEM.IniFer < dIniCovid) ou (R040FEM.IniFer > dFimCovid)))) valEvt = 0; fim senao Se (tipCal = 54)@ Integração das ferias com a Folha@ inicio xNumEmp = r034fun.NumEmp; xTipCol = r034fun.TipCol; xNumCad = r034fun.NumCad; xCodEve = codEvt; dIniPer = r040fem.IniPer; dIniFer = r040fem.IniFer; @ busca Recibo de ferias Colaborador @ Definir cursor cur_R040Fem; cur_R040Fem.SQL "select PrvDes, IniFer, GerAdt from R040Fem \ Where NumEmp = :xNumEmp and TipCol = :xTipCol and NumCad = :xNumCad and IniPer = :dIniPer and IniFer = :dIniFer"; cur_R040Fem.AbrirCursor(); Se (cur_R040Fem.Achou) inicio @ Caso não seja referente a MP COVID19 zera o evento@ Se (((cur_R040Fem.GerAdt = 'S') e (cur_R040Fem.PrvDes <> 0.01)) ou ((cur_R040Fem.GerAdt = 'N') e ((cur_R040Fem.IniFer < dIniCovid) ou (cur_R040Fem.IniFer > dFimCovid)))) inicio valEvt = 0; fim senao inicio @ Se recibo com adiantamtamento e for MP COVID19 @ Se ((cur_R040Fem.GerAdt = 'S') e (cur_R040Fem.PrvDes = 0.01)) inicio xAchou = 0; Definir cursor cur_R030Emp; cur_R030Emp.SQL "select CalDpn, TabEve from R030Emp Where NumEmp = :xNumEmp"; cur_R030Emp.AbrirCursor(); @Busca assinalmento da empresa pra a rotina de Diferenca Positiva/Negativa de Ferias@ Se (cur_R030Emp.Achou) Inicio @Caso utilize a rotina mas não tenha evento configurado trata valor no evento normal de diferença @ se (cur_R030Emp.CalDpn = 'S') inicio xCodTab = cur_R030Emp.TabEve; Definir cursor cur_R008Evc; cur_R008Evc.SQL "select * from R008Evc Where CodTab = :xCodTab and CodEve = :xCodEve and EveDpo > 0"; cur_R008Evc.AbrirCursor(); Se (cur_R008Evc.Achou) inicio xAchou = 1; fim cur_R008Evc.FecharCursor(); fim fim cur_R030Emp.FecharCursor(); @ Caso não use a rotina de Diferenca Positiva/Negativa ou nao tenha o evento calculado, busca o valor original calculado no recibo de ferias@ se (xAchou = 0) inicio Definir cursor cur_R040Fev; cur_R040Fev.SQL "select ValEve from R040Fev \ Where NumEmp = :xNumEmp and TipCol = :xTipCol and NumCad = :xNumCad and IniPer = :dIniPer and IniFer = :dIniFer and CodEve = :xCodEve"; cur_R040Fev.AbrirCursor(); Se (cur_R040Fev.Achou) inicio valEvt = cur_R040Fev.ValEve; fim cur_R040Fev.FecharCursor(); fim fim fim fim cur_R040Fem.FecharCursor(); fim senao inicio valEvt = 0; fim;
A MEDIDA PROVISÓRIA Nº 1.046, DE 27 DE ABRIL DE 2021, além contemplar o que dispôs a MP 927/2020, ou seja, antecipação das férias mesmo que um colaborador ainda não tenha completado o período de 12 (doze) meses, a contar da data de sua admissão, regulamentou que as férias antecipadas em sua vigência (28/04/21 a 25/08/21) possam ser descontadas das verbas rescisórias devidas ao colaborador em caso de pedido de demissão. Sendo assim, criamos o campo Descontar Férias Antecipadas, na tela Causas Demissão, que considera esses dias como férias indenizadas sem tributação de INSS e IR. Também criamos a documentação referente à Regra de sistema 75 - Desconto de Férias Antecipadas Covid-19 e à característica 42H - Desconto de Férias Antecipadas Covid-19.
Importante
- Caso o empregador entenda que este desconto é passível de compensação da tributação percebida na concessão do recibo de férias, este deverá ajustar as incidências do evento. É imprescindível que na rescisão tenha base positiva de INSS e IR para compensar este valor, pois no eSocial não é possível enviar bases com incidência negativa.
- Se acaso o desligamento do colaborador for em 2021 e a empresa ainda não tenha quitado o 1/3 de férias, como permitido pela MP 1046/2021, o cliente deverá lançar o valor do 1/3 conforme o evento do recibo de férias, seguindo a documentação da MP 1046/2021. Assim, a Regra de sistema 75 - Desconto de Férias Antecipadas deverá lançar o evento de desconto dos dias ainda não adquiridos proporcionalmente.
- Tratar através de programações de ponte;
- Mudar as tabelas de feriado.
Quando não existir banco de horas vigente:
- Neste caso, basta criar um novo banco de horas conforme definições da MP.
Quando já existir algum banco de horas vigente:
- Criar um novo período no banco de horas que inicialmente pode ser parametrizado “sem prazo para compensação”. A partir do momento que ficar definido o fim do estado de calamidade pública, deve-se ajustar a parametrização do banco definindo o prazo de compensação de 18 meses mais o tempo que durar o estado de calamidade pública. Após ajustar a parametrização, deve-se realizar um recálculo do banco de horas a partir da data inicial do novo período criado.
Neste caso, o sistema irá realizar a compensação das horas antes e após a MP.
Caso seja necessário diferenciar as horas (antes e após a MP), é necessário criar um novo banco de horas.
Durante o período de calamidade pública devido ao COVID-19, a obrigatoriedade dos exames médicos ocupacionais, clínicos e complementares foi suspensa, exceto dos exames demissionais, que continuam obrigatórios.
Na rotina de Geração de Solicitação de Exames (Medicina > PCMSO > Gerar Solicitação) é necessário que tenha os candidatos cadastrados e ainda não efetivados para gerar os exames admissionais.
Em um caso, onde é realizada a admissão de um colaborador no módulo Administração de Pessoal sem existir a efetivação de um candidato, o usuário atualmente já não poderá utilizar a rotina de geração de solicitação de exames, tendo que cadastrar diretamente a solicitação em Medicina > PCMSO > Solicitação ou o resultado em Medicina > PCMSO > Resultados.
Desta forma, as possibilidades para gerar um exame após 60 dias da contratação são:
- Utilizar a rotina de Geração de Solicitação de Exames (Medicina > PCMSO > Gerar Solicitação) normalmente antes da efetivação do(s) candidato(s), preenchendo o campo Data Exame com uma data já considerando os 60 dias permitidos. Depois, se o colaborador acabar fazendo o exame antes da data selecionada, o sistema permite alterar a data do resultado.
- Depois da admissão do(s) colaborador(es), quando o colaborador for realizar o exame, cadastrar a solicitação e/ou resultado do exame diretamente em Menu > Medicina > PCMSO > Solicitação ou Menu > Medicina > PCMSO > Resultados.
O empregador que quiser seguir a MP 1046/2021 e a circular da CEF pertinente a esta alteração, poderá escolher entre uma das opções abaixo.
IMPORTANTE: Caso o empregador não queira fazer as alterações no sistema da Senior, poderá optar em fazer dentro do programa SEFIP, alterando para a modalidade 1, após a importação do arquivo sefip.re.
Empresas > Filiais > Cadastro, guia FGTS – Competência 04/2021.
IMPORTANTE: Esta opção é mais segura se vier a ocorrer retificações futuras de GFIP destas competencias.
Lembrete: Em agosto/2021 deverá criar novo histórico com a modalidade = 0.
Impostos/Fundo de Garantia / SEFIP / Gerar
IMPORTANTE: Esta opção só pode ser utilizada se a empresa não tiver modalidades distintas no cadastro da filial.
Este campo se refere a uma abrangência de cadastros de colaboradores, então para indicar todos, deverá preencher o campo com abrangência 1-99999999.
Perguntas e Respostas
1 - Calculei o recibo de férias e excluí o evento de 1/3 de férias para atender a MP 1046/2021, como devo proceder agora com esta solução?
Deverá implementar a solução acima e recalcular o recibo de férias e ficha financeira.
IMPORTANTE:
Nos recibos de férias com adiantamento, enviamos para o eSocial uma rubrica de pagamento do adiantamento com as incidências de IR Férias. E quando gerada a folha de pagamento é enviada uma rubrica sem incidência de IR porque já foi tributado na rubrica de adiantamento.
Nos recibos de férias sem adiantamento, não será enviado para o eSocial a rubrica de pagamento do adiantamento, somente a rubrica do pagamento das férias gerado na folha que estará sem incidência de IR porque é o mesmo evento da situação anterior.
Portanto a base de IR Férias no retorno do S-5002 do eSocial estará menor que a base do IR Férias do Senior. Quanto ao valor de desconto do IR, este estará correto porque o eSocial acata o valor que é informado nos leiautes.
2 - Quero calcular um recibo de férias gerando o pagamento do adiantamento no 5º dia útil do mês subsequente ao início do gozo das férias, como devo proceder?
Deverá informar a data de pagamento na tela de cálculo do recibo. Desta forma o sistema irá calcular os dias de férias e o desconto de adiantamento de férias em cada folha conforme os dias de cada competência. Já o IRRF será gerado conforme a data de pagamento informado no momento da geração.
3 - Conforme o Art. 9º da MP 1046/2021, posso suspender as férias dos profissionais da área de saúde ou daqueles que desempenham funções essenciais, como devo proceder no sistema da Senior?
Este processo pode ser atendido pela rotina de Alterar Gozo de Férias já existente.
4 - Como será gerado o evento de 1/3 de Férias para ser pago Futuramente?
Confira as instruções acima.
5 - Ao acessar o Editor de Regras em Recursos / Implementações / Editor de Regras o sistema solicita usuário e senha. Como proceder?
Confira as instruções no nosso Banco de Soluções: 12617 - Solicitação de senha para os artefatos customizados
6 - Como devo proceder com o recolhimento parcelado do FGTS conforme a MP 1046/2021?
Veja as orientações da Caixa Econômica sobre suspensão da exigibilidade do FGTS.
A Caixa também disponibilizou uma FAQ sobre os principais temas relacionados à suspensão do recolhimento.
7 - Por que no recibo de férias e na ficha financeira está demonstrando o evento de 1/3 de férias como provento e outro evento de desconto do 1/3 de férias Covid-19 com o mesmo valor?
Porque este valor é devido para aquele recibo de férias e através destes eventos, é o que o sistema efetuará o tratamento para provisão, contabilização e também para o pagamento futuro em rescisão ou folha de pagamento até 20/12/21. Portanto estes eventos não devem ser excluídos.