Histórico da Página
...
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 | ||
---|---|---|
| ||
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.,{|o| nOpcA := 1,IF(gpconfOK(),FechaBatch(),nOpcA:=0) }} )
aAdd(aButtons, { 2 ,.T.,{|o| FechaBatch() }} )
FormBatch( cCadastro, aSays, aButtons )
If nOpcA == 1
Processa({|lEnd| u_fMp936(),cCadastro}) //"Geração Arquivo Programa B.E.M."
EndIf
//Restaura os Dados de Entrada
RestArea( aAreaSRA )
RestArea( aArea )
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. Eval( cAcessaSRA ) )
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, {|x| x[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')
dbSetOrder( nSvOrdem )
dbGoTo( nSvRecno )
IF Len(aMsg) > 1
bMkLog := { || fMakeLog( { aMsg } ,{ STR0015 } ,NIL , .T. , FunName() , NIL , "M" , "L" , NIL , .F. ) }//"Log de Geracao Arquivo - Programa B.E.M."
MsAguarde( bMkLog , OemToAnsi( STR0015 ) )//"Log de Geracao Arquivo - Programa B.E.M."
EndIF
Return( lResult )
/*/{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)
Return( lRet )
/*/{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 := AT( cConta, "-" )
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)
Return( lRet )
/*/{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 := fBuscaAcm( aCodFol[318,1] ,,dDTPenSal,dDTPenSal,"V")
EndIf
// Antepenultimo
If !Empty(dDTAntSal)
nValAntSal := fBuscaAcm( aCodFol[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 fExpArq( aCabec, 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
Return( lRet )
05. ASSUNTOS RELACIONADOS
...