Histórico da Página
Ponto de Entrada PONAPO4 - Alteração das horas apontadas
Descrição: | Este ponto de entrada é utilizado para alteração ou inclusão de novos eventos na tabela de apontamentos (SPC) |
Eventos: | É chamado após o apontamento das marcações, antes da gravação da tabela de apontamentos (SPC) |
Programa Fonte: | PONXAPO.PRX |
Função: | Aponta() |
Retorno: | Nenhum. O array "aEventos" é declarado como PRIVATE no programa PONXAPO.PRX e, por isso, pode ter seu conteúdo modificado pelo Ponto de Entrada. Caso tenha sido modificado, serão assumidas as modificações realizadas.
|
Observações
O Ponto de Entrada PONAPO4 receberá o ParamIxb como parâmetro ‚ um Array com quatro Elementos, sendo o primeiro a cópia do array "aMarcacoes", o segundo a cópia do array "aTabCalend", o terceiro a cópia do array "aCodigos" e o quarto a cópia do array "aEvesIds
Exemplo de como incluir um evento especifico em todos os dias trabalhados que houver marcação:
Bloco de código |
---|
#INCLUDE 'PROTHEUS.CH' // Exemplo de Uso do PE PONAPO4 para gerar novos eventos conforme o tipo de dia e quantidade de horas desejada. /*----------------------*/ User Function PONAPO4() /*----------------------*/ Local __aMarcacoes := aClone( ParamIxb[1] ) Local __aTabCalend := aClone( ParamIxb[2] ) Local __aCodigos := aClone( ParamIxb[3] ) Local __aEvesIds := aClone( ParamIxb[4] ) Local __aEventos := aClone( aEventos ) Local __aResult := aClone( aEventos ) Local cEvedeFaltas := __aEvesIds[ 009 , 02 ]+'/'+__aEvesIds[ 010 , 02 ]//Faltas Nao Autorizadas e Autorizadas Local cFilRegra := fFilFunc("SPA") Local cFilSRA := AllTrim(SRA->RA_FILIAL) Local cCCusto := SRA->RA_CC Local cRegras := '01/24/09/06' //No configurador é possivel criar o parametro MV_CREGRA (tipo caracter) e informar as regras para apurar as horas //Abaixo basta retirar os sinais '//'. E coloca-los na instrucao acima. //Local cRegras := SuperGetMv("MV_CREGRA",,"",cFilSRA) Local cFilGeraHrs:= 'D MG 01/D MG 02' //Local cFilGeraHrs := SuperGetMv("MV_CFilhrsIT",,"",cFilSRA) //Codigos dos eventos validos para todas as filiais //substitui-los pelos codigos desejados Local cEveTrab := '010' Local cEveComp := '011' Local cEveFeriado := '012' Local cEveDSR := '013' Local cEveNTrab := '014' //Qtde horas a pagar para cada tipo de dia //alterar conforme a filial Local nEveTrab := 1 //Trabalhado Local nEveComp := 1 //Compensado Local nEveFeriado := 1 //Feriado Local nEveDSR := 1 //DSR Local nEveNTrab := 1 //Nao Trabalhado Local aSpaFields :={} Local aSpaInfo :={} Local dDataApo := CTOD('//') Local cTipodia := '' Local cRegra := '' Local cNewRegra := '' Local cOrdem := '' Local cEvento := '' Local cTurno := '' Local cSeqTurno := '' Local lTrbFeriado :=.F. Local nX := 0 Local nHrsGera := 0 //Verifica se a Regra do funcionario nao está entre as possiveis de se gerar horas If !(cFilSRA $ cFilGeraHrs) Return EndIf //Se desejar maior flexibilidade é possível criar campos na tabela de regras SPA //para o usuario informar os eventos para cada tipo de dia: //Por exemplo: Criar o campo PA_EVETRAB através do Configurador na tabela SPA - Regra de Apontamento. //Titulo: Evento Trabalhado //Tipo: Caracter //Tamanho: 3 //Criar na tabela SPA campo para conter a quantidade de horas a serem pagas para cada Tipo de Dia //Titulo: Evento Trabalhado //Tipo: Numerico //Tamanho: 5 //Decimais: 2 //Picture: 99.99 //Na variavel cEveTrab, substitua o conteúdo de exemplo, pelo conte´´udo do campo criado. //Por exemplo: cEveTrab := SPA->PA_EVETRAB //Faca o mesmo para os demais Tipos de dia. //Da mesma forma, na variavel nEveTrab, substitua o conteudo exemplo, pelo conteudo do campo criado. //Por exemplo: nEveTrab := SPA->PA_HRSTRAB //Faca o mesmo para os demais Tipos de dia. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³ Carrega os Campos para a PosSpa() ³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ*/ aAdd( aSpaFields , "PA_FERIADO" ) //01 - Se funcionario trabalha em Feriado /*Eventos para cada tipo de dia aAdd( aSpaFields , "PA_EVTRAB" ) //02 - Trabalhado aAdd( aSpaFields , "PA_EVCOMP" ) //03 - Compensado aAdd( aSpaFields , "PA_EVDSR" ) //04 - DSR aAdd( aSpaFields , "PA_EVNTRAB" ) //05 - Nao Trabalhado aAdd( aSpaFields , "PA_EVFERDO" ) //06 - Feriado //Horas a serem pagas para cada tipo de dia aAdd( aSpaFields , "PA_HRTRAB" ) //07 - Trabalhado aAdd( aSpaFields , "PA_HRCOMP" ) //08 - Compensado aAdd( aSpaFields , "PA_HRDSR" ) //09 - DSR aAdd( aSpaFields , "PA_HRNTRAB" ) //10 - Nao Trabalhado aAdd( aSpaFields , "PA_HRFERDO" ) //11 - Feriado */ //Se forem criados pelo configurador os campos acima, não será necessario o bloco de instruções abaixo onde se define os eventos e quantidades de horas //para cada filial. //Abaixo toma-se como codigo da Filial o conteudo 'D MG 01'. Substitua-o pelo conteúdo correspondente a filial do sistema. Por exemplo: "01" ou '103', etc, //para a qual se pode gerar horas //=== Bloco de Instrucao para Tratamento por Filial === If cFilSRA = 'D MG 01' //Codigos dos eventos validos para a Filial "01" //substitutui-los pelos codigos desejados ou campo do configurador (cEveTrab := PosSPA( cRegra , cFilRegra , "PA_EVETRAB" , 1 , .F. ) cEveTrab := '010' cEveComp := '011' cEveFeriado := '012' cEveDSR := '013' cEveNTrab := '014' //Qtde horas a pagar para cada tipo de dia //alterar conforme a filial nEveTrab := 1 nEveComp := 0 nEveFeriado := 0 nEveDSR := 0 nEveNTrab := 0 //Nao Trabalhado ElseIf cFilSRA = 'D MG 02' //'Informar outro codigo de filial caso possua alguma configuracao diferente' //Duplique aqui as variaveis cEVe??? e nEve se os valores forem diferentes EndIf //=== Fim do Bloco de Instrucao para Tratamento por Filial === //Trata cada dia de apontamento For nX := 1 To Len(__aTabCalend) //Se a data de apontamento foi tratada vai para o proximo dia If dDataApo == __aTabCalend[nX,48] Loop EndIf dDataApo := __aTabCalend[nX,48] cOrdem := __aTabCalend[nX,02] cRegra := __aTabCalend[nX,23] cTipoDia := __aTabCalend[nX,06] cTurno := __aTabCalend[nX,14] cSeqTurno := __aTabCalend[nX,08] //===== Bloco para Tratamento por Regra definida em variavel ===================== //Se a regra nao define o pagamento das horas ou se nenhum dia possui horas para pagar //vai para o proximo dia If ! (cRegra $ cRegras) .and. ( (nEveTrab + nEveComp + nEveFeriado + nEveDSR) > 0 ) Loop EndIf //===== Fim do Bloco para Tratamento por Regra definida em variavel ===================== If cRegra <> cNewRegra cNewRegra := cRegra aSpaInfo := PosSPA( cRegra , cFilRegra , aSpaFields , 1 , .F. ) lTrbFeriado := aSpaInfo[01] == "S" EndIf //Se estiver demitido ou transferido e a data de apontamento for depois da demissao/transferencia ou //se esta em situacao normal mas a data de apontamento for anterior a data de admissao //entao vai para o proximo dia If SRA->( ( RA_SITFOLH $ 'D.T' .and. dDataApo > RA_DEMISSA) .or. ( Empty(RA_SITFOLH).and. dDataApo < RA_ADMISSA) ) Loop Endif // *** Verifica Tipo Dia *** //-- Se Feriado //-- Se Excecao //Tipo Dia //--Senao Excecao //-- Se NaoTrabalha Feriado // Tipo dia = "Feriado" //---Senao NaoTrabalha Feriado // Tipo dia //-- Fim se Nao Trabalha Feriado //-- Fim se Excecao //Senao // Tipo Dia //-- Fim se Feriado cTipoDia := IF( __aTabCalend[ nX , 19 ] , IF( __aTabCalend[ nX , 10 ] == "E" , __aTabCalend[ nX , 06 ] , IF(!lTrbFeriado,"F", __aTabCalend[ nX , 06 ] ) ) , __aTabCalend[ nX , 06 ] ) If ( cTipoDia == "S" .and. Empty(nEveTrab) ) .or.; ( cTipoDia == "C" .and. Empty(nEveComp) ) .or.; ( cTipoDia == "F" .and. Empty(nEveFeriado) ) .or.; ( cTipoDia == "D" .and. Empty(nEveDSR) ) .or.; ( cTipoDia == "N" .and. Empty(nEveNTrab) ) Loop EndIf //-- Se não tem marcacoes para o dia vai para o proximo dia If !(( aScan( __aMarcacoes , { |x| x[3] == cOrdem } ) ) > 0 ) Loop EndIf If ( cTipoDia == "S" ) nHrsGera := nEveTrab cEvento := cEveTrab ElseIf ( cTipoDia == "C" ) nHrsGera := nEveComp cEvento := cEveComp ElseIf ( cTipoDia == "F" ) nHrsGera := nEveFeriado cEvento := cEveFeriado ElseIf ( cTipoDia == "D" ) nHrsGera := nEveDSR cEvento := cEveDSR ElseIf ( cTipoDia == "N" ) nHrsGera := nEveNTrab cEvento := cEveNTrab EndIf fGeraRes( __aResult ,; //01 -> Array com os Resultados do Dia dDataApo ,; //02 -> Data da Geracao nHrsGera ,; //03 -> Numero de Horas Resultantes cEvento ,; //04 -> Codigo do Evento cCCusto ,; //05 -> Centro de Custo a ser Gravado NIL ,; //06 -> Tipo de Marcacao .F. ,; //07 -> True para Acumular as Horas NIL ,; //08 -> Periodo de Apuracao NIL ,; //09 -> Tolerancia NIL ,; //10 -> Tipo de Arredondamento a Ser Utilizado .T. ,; //11 -> Substitui a(s) Hora(s) Existente(s) ( Garanto Apenas 1 DSR por Data ) /*cFuncao */ ,; //12 -> Funcao /*cDepto */ ,; //13 -> Depto para gravacao /*cPosto */ ,; //14 -> Posto para gravacao /*cProcesso */ ,; //15 -> Periodo para Gravacao /*cRoteiro */ ,; //16 -> Processo para Gravacao /*cPerApo */ ,; //17 -> Periodo para Gravacao /*cNumPagto */ ,; //18 -> NumPagto para Gravacao cTurno ,; //19 -> Turno de Trabalho cSeqTurno ; //20 -> Semana/Sequencia do Turno ) aEventos := aClone( __aResult ) Next nX Return (Nil) |