Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Linha de Produto:Microsiga Protheus
Segmento:Recursos Humanos
Módulo:SIGAGPE
Função:MP936.PRX, GPEM044.PRW
Ticket:8682918
Requisito/Story/Issue (informe o requisito relacionado) :DRHGCH-18551


02. SITUAÇÃO/REQUISITO


O Benefício Extraordinário Mensal – B.E.M. - foi criado pelo Governo Federal através da Medida Provisória nº 929/20, que instituiu o benefício extraordinário mensal sob situações de calamidade pública, conforme a Medida Provisória nº 926/20.

Este benefício serve como apoio financeiro aos trabalhadores e suas famílias para a manutenção da renda em um momento de calamidade pública.

A adesão a este benefício é feita por meio das declarações do Leiaute do Arquivo B.E.M Especificações do Layout “Redução de Jornada de Trabalho e Renda” - MP 936/2020dos estabelecimentos (CNPJ e CEI) que firmaram acordo de redução de jornada ou suspensão do contrato de trabalho com seus funcionários em um determinado período.

O prazo para o envio destas declarações é definido pelo Ministério da Economia com base no tempo indicado na legislação que afirma que o pagamento deve ocorrer 30 dias após o envio de uma declaração.

O envio é realizado pelo responsável pela contratação/empregador, que deve reunir as informações de seus funcionários e enviá-las ao Ministério.

Este envio pode ser realizado através do Portal do Benefício Extraordinário, que direcionará o canal adequado para cada tipo de contratante.

03. SOLUÇÃO


Para viabilizar a geração do arquivo .csv contendo as declarações foram disponibilizados os ajustes abaixo:


Informações
titleIMPORTANTE

Incluir manualmente campo e grupo de perguntas através do configurador e posteriormente Módulo Configurador (SIGACFG), posteriormente esses dados serão disponibilizados através do Atualizador.

Dicionário de Dados 

Inclusão do campo RGE_COD - Código do PPE no dicionário de dados

...

O campo RGE_COD será preenchido através da rotina Utilização do Programa de Proteção ao Emprego - PPE


No item 04. Demais Informações está incluido um RDMAKE responsável por gerar o arquivo .csv que deverá ser validado pelo Validador Web.


04. DEMAIS INFORMAÇÕES



                #INCLUDE "RWMAKE.CH"      
                #INCLUDE 'PROTHEUS.CH'



#DEFINE TAB CHR ( 13 ) + CHR ( 10 )

#define STR0001 "Geracao Arquivo Programa B.E.M."
#define STR0002 "Usuario nao possui acesso para filial: "
#define STR0003 "Parametrizacao utilizada:"
#define STR0004 "Filial de "
#define STR0005 "Filial ate " 
#define STR0006 "Matricula de "
#define STR0007 "Matricula ate "
#define STR0008 "Centro de Custo de "
#define STR0009 "Centro de Custo ate "
#define STR0010 "Categorias: "
#define STR0011 "Tipo de Adesao 0=Suspensao de Contrato,1=Reducao de Carga Horaria: "
#define STR0012 "Data do Acordo: "
#define STR0013 "Meses Duracao: "
#define STR0014 "Nao foi possivel carregar as informacoes da empresa."
#define STR0015 "Log de Geracao Arquivo - Programa B.E.M."
#define STR0016 "Para o Tipo de Adesao '0 - Suspensão' e necessario possuir percentual de redução cadastrado - verificar tabela S061."
#define STR0017 "Para o Tipo de Adesao '1 - Redução' não e permitido percentual igual 70 - verificar tabela S061."
#define STR0018 "Verificar Digito de Agencia e Conta Bancarios - verificar cadastro de Bancos/Agencias."
#define STR0019 "Exportacao realizada com sucesso. Busque o arquivo no diretorio escolhido!"
#define STR0020 "Exportação nao pode ser realizada, verifique os parametros e diretorio informado."
#define STR0021 "O Beneficio Extraordinario Mensal - B.E.M. - foi criado pelo Governo Federal atraves da"
#define STR0022 " Medida Provisoria numero 929/20, que instituiu o beneficio extraordinario mensal sob"
#define STR0023 " situacoes de calamidade publica, conforme a Medida Provisoria numero 926/20. "
#define STR0024 "Essa rotina e responsavel por gerar o arquivo que contem as declaracoes do B.E.M. "
#define STR0025 "Percentual de Reducao invalido - verificar tabela S061."

/*/{Protheus.doc} MP936
// RDMAKE disponibilizado para geração do arquivo com declaraçoes do Programa B.E.M.
@author raquel.andrade
@since 08/04/2020
@version 1.0
/*/
User Function ExpMP936()     
Local aSays         := {}
Local aButtons      := {}
Local nOpcA         := 0

Private cCadastro   := OemToAnsi(STR0001// "Geração Arquivo Programa B.E.M."
Private aInfo       := {}
Private aCodFol
Private aArea       := GetArea()
Private aAreaSRA    := SRA->( GetArea() )  

// Realiza execução do pergunte
Pergunte("MP936",.F.)
   
// MV_PAR01        //  FiLial De
// MV_PAR02        //  FiLial Ate
// MV_PAR03        //  Matricula De
// MV_PAR04        //  Matricula Ate
// MV_PAR05        //  Centro De Custo De
// MV_PAR06        //  Centro De Custo Ate
// MV_PAR07        //  Categorias
// MV_PAR08        //  Tipo de Adesão
// MV_PAR09        //  Data de Acordo
// MV_PAR10        //  Meses de Duração
// MV_PAR11        //  Pasta Arquivo Destino

aAdd(aSays,OemToAnsi(STR0021)) //"O Benefício Extraordinário Mensal – B.E.M. - foi criado pelo Governo Federal através da Medida"
aAdd(aSays,OemToAnsi(STR0022)) //"Provisória nº 929/20, que instituiu o benefício extraordinário mensal sob situações de calamidade"
aAdd(aSays,OemToAnsi(STR0023)) //"pública, conforme a Medida Provisória nº 926/20. "
aAdd(aSays,OemToAnsi(STR0024)) //"Essa rotina e responsavel por gerar o arquivo que contem as declaracoes do B.E.M. "

aAdd(aButtons, { 5 ,.T.,{||  Pergunte("MP936",.T. ) } } )
aAdd(aButtons, { 1 ,.T.,{|onOpcA := 1,IF(gpconfOK(),FechaBatch(),nOpcA:=0) }} )
aAdd(aButtons, { 2 ,.T.,{|oFechaBatch() }} )
FormBatchcCadastro, aSays, aButtons )


If nOpcA == 1
    Processa({|lEndu_fMp936(),cCadastro})  //"Geração Arquivo Programa B.E.M."
EndIf

//Restaura os Dados de Entrada                                  
RestAreaaAreaSRA ) 
RestAreaaArea )

Return

/*/{Protheus.doc} fMp936
// Função para leitura dos dados para envio do arquivo de declaração do Programa B.E.M.
@author Equipe Protheus RH
@since 08/04/2020
@version 1.0
/*/
User Function fMp936()
Local aItens        := {}
Local aMsg          := {}
Local aCabec        := {}
Local aFunc         := {}
Local aDados        := {}
Local aPerRed       := {}
Local cAcessaSRA    := &( " { || " + ChkRH"MP936" , "SRA" , "2" ) + " } " )
Local cFilDe        := If(Empty(MV_PAR01),"''"  , MV_PAR01)         //Filial De
Local cFilAte       := If(Empty(MV_PAR02),"''"  , MV_PAR02)         //Filial Ate
Local cCCDe         := If(Empty(MV_PAR03),"''"  , MV_PAR03)         //Centro de Custo De
Local cCCAte        := If(Empty(MV_PAR04),"''"  , MV_PAR04)         //Centro de Custo Ate
Local cMatDe        := If(Empty(MV_PAR05),"''"  , MV_PAR05)         //Matricula De
Local cMatAte       := If(Empty(MV_PAR06),"''"  , MV_PAR06)         //Matricula Ate 
Local cCat          := If(Empty(MV_PAR07),"''"  , MV_PAR07)         //Categorias
Local nTpAdes       := If(Empty(MV_PAR08),0 , MV_PAR08)             //Tipo de Adesão
Local dDtAcor       := If(Empty(MV_PAR09),CtoD("//"), MV_PAR09)     //Data de Acordo
Local nMeses        := If(Empty(MV_PAR10),"''"  , MV_PAR10)         //Pasta Arquivo Destino
Local cFile         := If(Empty(MV_PAR11),"''"  , MV_PAR11)         //Pasta Arquivo Destino
Local cInicio       := ""
Local cFim          := ""
Local cExclui       := ""
Local cTipoCTT      := ""
Local cCNOFun       := ""
Local cDtAdmis      := ""
Local cDtNasc       := ""
Local cDtAcord      := ""
Local lResult       := .T.
Local nSvOrdem      := 0
Local nSvRecno      := 0
Local nUltSal       := 0
Local nPenSal       := 0
Local nAntPSal      := 0
Local nPerRed       := 0

    BEGIN TRANSACTION

        BEGIN SEQUENCE

            // Bloco que definira a Consistencia da Parametrizacao dos Intervalos
            // selecionados nas Perguntas De? Ate?
            cExclui := cExclui + "{ || "
            cExclui += "(RA_FILIAL  < cFilDe     .or. RA_FILIAL  > cFilAte    ).or."
            cExclui += "(RA_MAT     < cMatDe     .or. RA_MAT     > cMatAte    ).or."
            cExclui += "(RA_CC      < cCcDe      .or. RA_CC      > cCCAte     ).or."
            cExclui += "!(RA_CATFUNC$cCat)"
            cExclui += " } "
            
            // Parametrizacao utilizada
            aAdd(aMsg,STR0003 + CRLF)                   // "Parametrizacao utilizada:"
            aAdd(aMsg,STR0004 + "'"+cFilDe  +"'"        )// Filial de
            aAdd(aMsg,STR0005 + "'"+cFilAte +"'"        )// Filial ate 
            aAdd(aMsg,STR0006 + "'"+cMatDe  +"'"        )// Matricula de
            aAdd(aMsg,STR0007 + "'"+cMatAte +"'"        )// Matricula ate
            aAdd(aMsg,STR0008 + "'"+cCcDe   +"'"        )// Centro de Custo de
            aAdd(aMsg,STR0009 + "'"+cCcAte  +"'"        )// Centro de Custo ate
            aAdd(aMsg,STR0010 + "'"+cCat    +"'"        )// Categorias
            aAdd(aMsg,STR0011 + "'"+Str(nTpAdes,1)+"'"          )// Tipo de Adesão 0=Suspensao de Contrato,1=Reducao de Carga Horaria
            aAdd(aMsg,STR0012 + "'"+DtoS(dDtAcor)   +"'")// Data do Acordo
            aAdd(aMsg,STR0013 + "'"+Str(nMeses,4)   +"'"        )// Meses Duracao
            aAdd(aMsg," "       )

            // Valores validos de Percentual de Reducao
            aAdd(aPerRed, {25,35,50})

            // Dados do Cabecalho
            aAdd(aCabec, {  "Tipo Inscricao" ,; 
                            "CNPJ/CEI",;
                            "CNO" ,; 
                            "Data Admissao",; 
                            "CPF Trabalhador",; 
                            "PIS/PASEP Trabalhador",;
                            "Nome Trabalhador",;
                            "Nome Mae Trabalhador",;
                            "Data Nascimento Trabalhador",;
                            "Tipo Adesao",;
                            "Data Acordo",;
                            "Percentual Reducao Carga Horaria",;
                            "Meses Duracao",;
                            "Codigo Banco",;
                            "Agencia Bancaria",;
                            "DV Agencia Bancaria",;
                            "Conta Bancaria",; 
                            "DV Conta Bancaria",;
                            "Tipo Conta",; 
                            "Ultimo Salario",;
                            "Penultimo Salario",;
                            "Antepenultimo Salario" })

            dbSelectArea('SRA')
            dbSetOrder(1// RA_FILIAL + RA_MAT
            nSvOrdem := 1
            nSvRecno := Recno()
            cInicio := '{ || RA_FILIAL + RA_MAT }'
            cFim    := cFilAte + cMatAte

            // Ira Executar Enquanto Estiver dentro do Escopo dos Parametros
            While SRA->( !Eof() .and. Eval( &(cInicio) ) <= cFim )

                // Consiste Parametrizacao do Intervalo de Geracao
                If SRA->( Eval ( &(cExclui) ) )
                    dbSelectArea("SRA")
                    SRA->( dbSkip() )
                    Loop
                EndIf

                // Consiste Filiais e Acessos
                If !( SRA->RA_FILIAL $ fValidFil() .and. EvalcAcessaSRA ) )
                    dbSelectArea("SRA")
                    aAdd(aMsg, STR0002 + SRA->RA_FILIAL + "."// "Usuario nao possui acesso para filial: "
                    SRA->( dbSkip() )
                    Loop
                EndIf


                // Consiste Filial/Identificador
                If !fInfo(@aInfo,SRA->RA_FILIAL.Or. !( Fp_CodFol(@aCodFol,SRA->RA_FILIAL) )
                    aAdd(aMsg,STR0014)// "Nao foi possivel carregar as informacoes da empresa."
                    Exit
                EndIf
                

                // Consiste Tipo de Adesao
                If !u_fTpAdesao(nTpAdes,@nPerRed)
                    If nTpAdes == "0"
                        aAdd(aMsg,STR0016)// "Para o Tipo de Adesao '0 - Suspensão' e necessario possuir percentual de redução cadastrado - verificar tabela S061."
                        Exit
                    ElseIf nTpAdes == "1"
                        aAdd(aMsg,STR0017)// "Para o Tipo de Adesao '1 - Redução' não e permitido percentual igual 70 - verificar tabela S061."
                        Exit
                    EndIf
                ElseIf aScan(aPerRed, {|xx[1] == nPerRed }) = 0
                        aAdd(aMsg,STR0025)// "Percentual de Reducao invalido - verificar tabela S061."
                        Exit
                EndIf

                // Consiste dados Bancarios - Agencia + Digito
                If !u_fVldBanco(SRA->RA_BCDEPSA, @aDados)
                    aAdd(aMsg,STR0018)// "Verificar Digito de Agencia e Conta Bancarios - verificar cadastro de Bancos/Agencias."
                    Exit
                EndIf

                // Captura CNO
                cTipoCTT := Posicione("CTT",1,xFilial("CTT")+SRA->RA_CC ,"CTT->CTT_TIPO2")
                cCNOFun := If (cTipoCTT == "4",  Posicione("CTT",1,xFilial("CTT")+SRA->RA_CC ,"CTT->CTT_CEI2"), "")
                
                nUltSal     := 0.00
                nPenSal     := 0.00
                nAntPSal    := 0.00

                u_fSalarios(@nUltSal,@nPenSal,@nAntPSal, SRA->RA_ADMISSA,SRA->RA_DEMISSA, dDtAcor)
                
                // Adiciona dados do Funcionario
                If Len(aDados) > 0 

                    aFunc       := {}

                    // Formata Data de Admissao
                    cDtAdmis    := DtoS(SRA->RA_ADMISSA)
                    cDtAdmis    := Substr(cDtAdmis,7,2) + "/" + Substr(cDtAdmis,5,2) + "/" + Substr(cDtAdmis,1,4)
                    
                    // Formata Data de Nascimento
                    cDtNasc     := DtoS(SRA->RA_NASC)
                    cDtNasc     := Substr(cDtNasc,7,2) + "/" + Substr(cDtNasc,5,2) + "/" + Substr(cDtNasc,1,4)

                    // Formata Data de Acordo
                    cDtAcord    := DtoS(dDtAcor)
                    cDtAcord    := Substr(cDtAcord,7,2) + "/" + Substr(cDtAcord,5,2) + "/" + Substr(cDtAcord,1,4)

                    nUltSal     := Val(StrTran(Str(nUltSal), ".", ""))
                    nPenSal     := Val(StrTran(Str(nPenSal), ".", ""))
                    nAntPSal    := Val(StrTran(Str(nAntPSal), ".", ""))

                    aAdd(aFunc, {   If(aInfo[15] == 2, "1" ,"2",;     // 1- Tipo de Inscrição, 1=CNPJ; 2= CEI
                                    AllTrim(aInfo[08]) ,;               // 2- CNPJ/CEI 
                                    cCNOFun,;                           // 3- CNO
                                    cDtAdmis,;                          // 4- Data Admissao
                                    SRA->RA_CIC,;                       // 5- CPF
                                    SRA->RA_PIS,;                       // 6- PIS/PASEP Trabalhador
                                    AllTrim(SRA->RA_NOME),;             // 7- Nome Trabalhador
                                    AllTrim(SRA->RA_MAE),;              // 8- Nome Mae Trabalhador
                                    cDtNasc,;                           // 9- Data Nascimento Trabalhador
                                    Str(nTpAdes,1),;                    // 10- Tipo de Adesao
                                    cDtAcord,;                          // 11- Data do Acordo
                                    Str(nPerRed,2),;                    // 12- Percentual de Reducao
                                    AllTrim(Str(nMeses,4)),;            // 13- Meses Duracao    
                                    aDados[1],;                         // 14- Codigo Banco
                                    aDados[2],;                         // 15- Agencia Bancaria
                                    aDados[3],;                         // 16- DV Agencia Bancaria
                                    aDados[4],;                         // 17- Conta Bancaria
                                    aDados[5],;                         // 18- DV Conta Bancaria    
                                    If(Empty(aDados[6]),"", If(aDados[6] == "1", "0", "1")),;   // 19- Tipo Conta, 0=Corrente;1=Poupanca
                                    AllTrim(Str(nUltSal,10)),;                  // 20- Ultimo Salario
                                    AllTrim(Str(nPenSal,10)),;                  // 21- Penultimo Salario
                                    AllTrim(Str(nAntPSal,10));                  // 22- Antepenultimo Salario
                                })
                EndIf

                If Len(aFunc) > 0
                    aAdd(aItens,aFunc)
                EndIf

                dbSelectArea("SRA")
                SRA->( dbSkip() )

            Enddo

        END SEQUENCE

    END TRANSACTION

    // Exporta arquivo para .csv
    If Len(aItens) > 0
        lResult := fExpArq(aCabec,aItens,cFile)
        If lResult
            aAdd(aMsg,STR0019)// "Exportação realizada com sucesso. Busque o arquivo no diretorio escolhido!"
        Else
            aAdd(aMsg,STR0020)// "Exportação não pode ser realizada, verifique os parametros e diretorio informado."
        EndIf
    EndIf

    // Restaurando dados de Entrada
    dbSelectArea('SRA')
    dbSetOrdernSvOrdem )
    dbGoTonSvRecno )

    IF Len(aMsg) > 1
        bMkLog := { || fMakeLog( { aMsg } ,STR0015 } ,NIL , .T. , FunName() , NIL , "M" , "L" , NIL , .F. ) }//"Log de Geracao Arquivo - Programa B.E.M."
        MsAguardebMkLog , OemToAnsiSTR0015 ) )//"Log de Geracao Arquivo - Programa B.E.M."
    EndIF


ReturnlResult )

/*/{Protheus.doc} fTpAdesao
// Função para validar Percentual Reducao Carga Horaria de Acordo com Tipo de Adesao
@author Equipe Protheus RH
@since 08/04/2020
@return lRet, flag, variavel de controle
@version 1.0
/*/
User Function fTpAdesao(nTipo, nPerRed)
Local aArea     := GetArea()
Local cCod061   := ""
Local lRet      := .T.
Local nPosTab   := 0

Default nTipo       := ""
Default nPerRed     := 0
    
    dbSelectArea("RGE")
    RGE->(DbSetOrder(2)) // RGE_FILIAL+RGE_MAT+DTOS(RGE_DATAIN)+RGE_TIPOCO
    If dbSeek(SRA->RA_FILIAL + SRA->RA_MAT)
        While !Eof() .And. RGE->RGE_FILIAL+RGE->RGE_MAT == SRA->RA_FILIAL + SRA->RA_MAT
            If RGE->RGE_PPE == "1" 
                If RGE->(FieldPos("RGE_COD")) # 0  
                    cCod061 := RGE->RGE_COD
                    Exit
                EndIf
            EndIf
            RGE->( dbSkip() )
        EndDo
    EndIf

    If !Empty(cCod061)

        nPosTab := fPosTab("S061", SRA->RA_SINDICA, "==", 5, cCod061 ,"==",4)

        //Se não encontrou o sindicato, verifica se o sindicato está vazio na tabela
        If nPosTab == 0
            nPosTab := fPosTab("S061", Space(2), "==",5, cCod061,"==",4)
        EndIf

        If nPosTab > 0
            nPerRed :=  fTabela("S061", nPosTab, 8)     //Percentual de reducao
            If nTipo == 0 .And. nPerRed == 0
                lRet := .F.
            ElseIf nTipo == 1 .And. nPerRed == 70
                lRet := .F.
            EndIf
        EndIf

    EndIf


RestArea(aArea)

ReturnlRet )

/*/{Protheus.doc} fVldBanco
// Função para validar digitos verificadores da Agencia/Banco do Funcionario
@author Equipe Protheus RH
@since 08/04/2020
@param cAgConta, character, representa Agencia e Conta Bancaria Funcionario
@return lRet, flag, variavel de controle
@version 1.0
/*/
User Function fVldBanco(cBcAgen,aDados)
Local aArea     := GetArea()
Local cDigito   := ""
Local lRet      := .T.
Local lTrataDig := .T.
Local nPos      := 0

Default cBcAgen     := ""
Default aDados      := {}
 

 If !Empty(cBcAgen.And. lTrataDig
    dbSelectArea("SA6")
    SA6->(dbSetOrder(RetOrdem("SA6","A6_FILIAL+A6_COD+A6_AGENCIA+A6_NUMCON")))
    IF  SA6->(dbSeek(xFilial("SA6")+Subs(cBcAgen,1,3)+Subs(cBcAgen,4,5))) 
        If !Empty(SA6->A6_DVAGE

            // Caso a conta tenha o digito separado por hifen
            cConta  := AllTrim(SRA->RA_CTDEPSA)
            If nPos := ATcConta, "-" ) 
                cDigito := SubStr(cConta,nPos,1)
            Else
                nPos    := Len(cConta)
                cDigito := SubStr(cConta,nPos,1)
            EndIf

            aAdd(aDados, SA6->A6_COD)       // Codigo Banco
            aAdd(aDados,SA6->A6_AGENCIA)    // Agencia
            aAdd(aDados,SA6->A6_DVAGE)      // Digito Agencia
            aAdd(aDados,SRA->RA_CTDEPSA)    // Conta Bacaria Funcionario
            aAdd(aDados,cDigito)            // Digito Conta Bancaria Funcionario
            aAdd(aDados,SRA->RA_TPCTSAL)    // Tipo de Conta, 1=Corrente;2=Poupanca
        EndIf
    EndIf

    If Len(aDados) == 0
        lRet := .F.
    EndIf
Else
    aDados  := {"","","","","",""}
EndIf

RestArea(aArea)

ReturnlRet )

/*/{Protheus.doc} fSalarios
// Função para carregar ultimos salarios do funcionario.
@author Equipe Protheus RH
@since 08/04/2020
@param nUltSal, character, representa Ultimo Salario do Funcionario
@param nPenSal, character, representa Penultimo Salario do Funcionario
@param nAntPSal, character, representa AntePenultimo Salario do Funcionario
@param dDtAdmis, data, representa Data de Admissao do funcionario
@param dDtAcor, data, representa a Data de Acordo
@return lRet, flag, variavel de controle
@version 1.0
/*/
/*/{Protheus.doc} fSalarios
// Função para carregar ultimos salarios do funcionario.
@author Equipe Protheus RH
@since 08/04/2020
@param nUltSal, character, representa Ultimo Salario do Funcionario
@param nPenSal, character, representa Penultimo Salario do Funcionario
@param nAntPSal, character, representa AntePenultimo Salario do Funcionario
@param dDtAdmis, data, representa Data de Admissao do funcionario
@param dDtDemis, data, representa Data de Demissao do funcionario
@return lRet, flag, variavel de controle
@version 1.0
/*/
User Function fSalarios(nUltSal,nPenSal,nAntPSal, dDtAdmis, dDtDemis, dDtAcordo)
Local aArea         := GetArea()
Local aPerAtual     := {}
Local cAnoMesAtu    := ""
Local dDTUltSal     := StoD("//")
Local dDTPenSal     := StoD("//")
Local dDTAntSal     := StoD("//")
Local NValUltSal    := 0.00
Local nValPenSal    := 0.00
Local nValAntSal    := 0.00

Default nUltSal     := 0.00
Default nPenSal     := 0.00
Default nAntPSal    := 0.00
Default dDtAdmis    := StoD("//")
Default dDtDemis    := StoD("//")
Default dDtAcordo   := StoD("//")

    Begin Sequence  
        
        // Data do Ultimo Salario 
        dDTUltSal   := If(Month(dDtDemis)-1 != 0, CtoD('01/' +StrZero(Month(dDtDemis)-1,2)+'/'+Right(StrZero(Year(dDtDemis),4),2)),CtoD('01/12/'+Right(StrZero(Year(dDtDemis)-1,4),2)) )
        If !Empty(dDtDemis.And. MesAno(dDTUltSal) < MesAno(dDtAdmis
            dDTUltSal   := CTOD("  /  /  ")
            NValUltSal  := 0.00
        Else
            dDTUltSal   := dDtAcordo
        EndIf                   

        // Data do Penultimo Salario    
        dDTPenSal := If(Month(dDTUltSal)-1 != 0, CtoD('01/' +StrZero(Month(dDTUltSal)-1,2)+'/'+Right(StrZero(Year(dDTUltSal),4),2)),CtoD('01/12/'+Right(StrZero(Year(dDTUltSal)-1,4),2)) )
        If !Empty(dDtDemis.And. MesAno(dDtPenSal) < MesAno(dDtAdmis)
            dDTPenSal   := CTOD("  /  /  ")
            nValPenSal  := 0.00
        Else
            dDTPenSal   := dDtAcordo
        EndIf

        // Data do Antepenultimo Salario    
        dDTAntSal := If(Month(dDtPenSal)-1 != 0,CtoD('01/'+StrZero(Month(dDtPenSal)-1,2)+'/'+Right(StrZero(Year(dDtPenSal),4),2)),CtoD('01/12/'+Right(StrZero(Year(dDtPenSal)-1,4),2)) )    
        If  MesAno(dDtAntSal) < MesAno(dDtAdmis)
            dDTAntSal   := CTOD("  /  /  ")
            nValAntSal  := 0.00
        Else
            dDTAntSal   := dDtAcordo
        EndIf
        
        // Busca Salario (+ verba incorporada)do Movto Acumulado        
        // Ultimo 
        If !Empty(dDTUltSal)
        
            nValUltSal := fBuscaAcm(aCodFol[318,1],,dDTUltSal,dDTUltSal,"V")    

            // Pesquisa no movimento mensal quando o mes corrente estiver aberto e nao encontrar salario nos acumulados anuais.
            fGetPerAtual( @aPerAtual, xFilial('RCH', SRA->RA_FILIAL), SRA->RA_PROCES, fGetRotOrdinar() )
            
            If nValUltSal == 0 
                If SRC->(Dbseek(SRA->(RA_FILIAL+RA_MAT)))
                    While !SRC->(eof()) .And. SRA->(RA_FILIAL+RA_MAT) == SRC->(RC_FILIAL+RC_MAT)
                        If SRC->RC_PD $ aCodFol[318,1]
                            nValUltSal += SRC->RC_VALOR
                        Endif
                        SRC->(dbskip())
                    Enddo
                EndIf
            EndIf
            
        EndIf   
        
        // Penultimo 
        If !Empty(dDTPenSal)              
            nValPenSal := fBuscaAcmaCodFol[318,1]  ,,dDTPenSal,dDTPenSal,"V"
        EndIf
        
        // Antepenultimo
        If !Empty(dDTAntSal)
            nValAntSal := fBuscaAcmaCodFol[318,1], NIL, dDTAntSal, dDTAntSal, "V")    
        EndIf

        nUltSal     += nValUltSal
        nPenSal     += nValPenSal
        nAntPSal    += nValAntSal

    End Sequence


RestArea(aArea)

Return

/*/{Protheus.doc} fExpArq
// Função para gerar arquivo .csv no diretorio informado
@author Equipe Protheus RH
@since 08/04/2020
@param cFile, character, representa caminho indicado pelo ususario
@return lRet, flag, variavel de controle
@version 1.0
/*/
Static Function fExpArqaCabec, aItens, cLocal )

Local cArq      := cEmpAnt+"-"+"MP936"+Alltrim(DTOS(DATE()))+"-T"+Replace(Time(),':','')+".CSV"
Local nHandle   := 0
Local nX        := 0
Local nY        := 0
Local nZ        := 0
Local cCrLf     := ""
Local cConteudo := ""
Local lRet      := .F.

If !( Substr(AllTrim(cLocal),Len(AllTrim(cLocal)),1) == "\")
    cLocal := AllTrim(cLocal) + "/"
Else
    cLocal := AllTrim(cLocal)
EndIf

nHandle := MsfCreate(cLocal+cArq,0)

If nHandle > 0
        
    For nX := 1 to Len(aCabec)
        For nY := 1 to Len(aCabec[nX])
            If Len(aCabec[nX]) == nY
                cCrLf   += '"' + aCabec[nX][nY] + '"'
            Else
                cCrLf   += '"' + aCabec[nX][nY] + '"' + ";"
            EndIf
        NExt nY
    Next nX
    
    fWrite(nHandle, cCrLf )
    
    For nY := 1 To Len(aItens)
        
        cCrLf := ""
        cCrLf += + TAB

        For nZ := 1 to Len(aItens[nY][1])       
            If nZ == Len(aItens[nY][1]) 
                cConteudo   := AllTrim(aItens[nY][1][nZ])
                If !Empty(cConteudo)
                    cCrLf += '"' + aItens[nY][1][nZ] + '"' 
                Else
                    cCrLf +=  cConteudo     
                EndIf
            Else
                cConteudo   := AllTrim(aItens[nY][1][nZ])
                If !Empty(cConteudo)
                    cCrLf += '"' + aItens[nY][1][nZ] + '"' + ";" 
                Else
                    cCrLf +=  cConteudo + ";"   
                EndIf
                
            EndIf
        Next nZ     

        fWrite(nHandle, cCrLf )
    
    Next nY
    
    lRet    := .T.

    fClose(nHandle)

EndIf

ReturnlRet )


05. ASSUNTOS RELACIONADOS

...