Protheus :: ADVPL :: Ponto de Entrada PNMTABC01 (edição do array aTabCalend)
E, pra matar a saudade, … , uma palhinha no SIGAPON.
Exemplo de implementação do Ponto de Entrada PNMTABC01 para a edição do array aTabCalend.
1: #include "protheus.ch"
2: #include "poncalen.ch"
3: 4: /*/
5: Funcao: U_PNMTABC01
6: Data: 28/12/2011
7: Autor: Marinaldo de Jesus
8: Uso: Ponto de Entrada para edicao do array aTabCalend
9: */
10: User Function PNMTABC01() 11: 12: Local aAfasta := {} 13: Local aTabCalend := ParamIxb[1] 14: 15: Local lCriaCalOk := ParamIxb[2] 16: Local lAfastper := .F. 17: 18: Local cTipAfas 19: 20: Local dData:= ( dPerIni - 1 ) 21: Local dIniAfas 22: Local dFimAfas 23: 24: Local nPosTabIni 25: Local nPosTabFim 26: 27: Local uRet 28: 29: BEGIN SEQUENCE 30: 31: IF !( StacksApon() ) 32: BREAK 33: EndIF 34: 35: IF !( lCriaCalOk ) 36: BREAK 37: EndIF 38: 39: lAfastper := SRA->(fAfastaPer(@aAfasta,dPerIni,dPerFim,RA_FILIAL,RA_MAT)) 40: IF !( lAfastper ) 41: BREAK 42: EndIF 43: 44: IF !( Type( "aTabPadrao" ) == "A" )
45: Private aTabPadrao := {} 46: EndIF 47: 48: While ( ( ++dData ) <= dPerFim ) 49: 50: dIniAfas := Ctod("//")
51: dFimAfas := Ctod("//")
52: lAfast := SRA->(fAfasta(RA_FILIAL,RA_MAT,dData,@dIniAfas,@dFimAfas,@cTipAfas,aAfasta)) 53: 54: IF (; 55: !( lAfast ); 56: .or.;57: !( cTipAfas == "Y" );
58: ) 59: Loop 60: EndIF 61: 62: uRet := GetInfoPosTab(;63: CALEND_POS_TIPO_DIA ,;//01:Posicao em aTabCalend para Obtencao da Informacao
64: "1E" ,;//02:Flag da Marcacao "1E,1S,..."
65: dData ,;//03:Data em aTabCalend
66: aTabCalend ,;//04:Calendario de Marcacoes
67: aTabPadrao ,;//05:Tabela de Horario Padrao
68: dPerIni ,;//06:Periodo Inicial de Apontamento
69: dPerFim ,;//07:Periodo Final de Apontamento
70: .T. ,;//08:Informacao Referente a Funcionario
71: SRA->RA_TNOTRAB ,;//09:Turno de Trabalho
72: SRA->RA_SEQTURN ,;//10:Sequencia
73: SRA->RA_FILIAL ,;//11:Filial
74: .T. ,;//12:Carrega Excecoes
75: NIL ,;//13:Bloco para Pesquisa em aTabCalend
76: @nPosTabIni ;//14:Retorno da Posicao do aTabCalend
77: ) 78: 79: IF !( uRet == "N" )
80: Loop 81: EndIF 82: 83: uRet := GetInfoPosTab(;84: CALEND_POS_TIPO_DIA ,;//01:Posicao em aTabCalend para Obtencao da Informacao
85: "__LASTMARC__" ,;//02:Flag da Marcacao "1E,1S,..."
86: dData ,;//03:Data em aTabCalend
87: aTabCalend ,;//04:Calendario de Marcacoes
88: aTabPadrao ,;//05:Tabela de Horario Padrao
89: dPerIni ,;//06:Periodo Inicial de Apontamento
90: dPerFim ,;//07:Periodo Final de Apontamento
91: .T. ,;//08:Informacao Referente a Funcionario
92: SRA->RA_TNOTRAB ,;//09:Turno de Trabalho
93: SRA->RA_SEQTURN ,;//10:Sequencia
94: SRA->RA_FILIAL ,;//11:Filial
95: .T. ,;//12:Carrega Excecoes
96: NIL ,;//13:Bloco para Pesquisa em aTabCalend
97: @nPosTabFim ;//14:Retorno da Posicao do aTabCalend
98: ) 99: 100: nPosTabIni -= 1 101: While ( ( ++nPosTabIni ) <= nPosTabFim )102: aTabCalend[ nPosTabIni ][ CALEND_POS_TIPO_DIA ] := "S"
103: aTabCalend[ nPosTabIni ][ CALEND_POS_AFAST ] := .F. 104: End While 105: 106: End While 107: 108: END SEQUENCE 109: 110: Return( aTabCalend ) 111: 112: /*/
113: Funcao: StacksApon
114: Data: 28/12/2011
115: Autor: Marinaldo de Jesus
116: Uso: Verifica se esta nas Rotinas de Apontamento de Marcacoes
117: */
118: Static Function StacksApon() 119: 120: Local aStacks := {} 121: 122: Local lStack := .F. 123: 124: Local nStack 125: Local nStacks 126: 127: aAdd( aStacks , { "PONA040" , .F. } )
128: aAdd( aStacks , { "PONA280" , .F. } )
129: aAdd( aStacks , { "PONA230" , .F. } )
130: aAdd( aStacks , { "PONM010" , .F. } )
131: 132: nStacks := Len( aStacks ) 133: For nStack := 1 To nStacks 134: lStack := IsInCallStack( aStacks[ nStack ][ 1 ] ) 135: aStacks[ nStack ][ 2 ] := lStack 136: IF ( lStack ) 137: Exit 138: EndIF 139: Next nStack 140: 141: Return( lStack )[]s
иαldσ dj
Comentários
Postar um comentário