Ponto de Entrada
Descrição: | Este Ponto de Entrada será executado na rotina Fechamento OS Mod2 (OFIXA100) ao ser executada a funcionalidade Fechar (OS). A mesma permite na gridbox "Negociar Serviços" de incluir campos customizáveis da tabela VO4 (1ª Chamada) e retornar dados da tabela VO6 (2ª Chamada). | ||||||||||||
Localização: | Atualizações \ Mov Oficina \ Fechamento OS Mod2 (OFIXA100) | ||||||||||||
Eventos: | 1ª Chamada - Criação // Monta Variaveis para a GetDados de Servicos cVO4RMostra := "VO4_TIPTEM/VO4_TIPSER/VO4_DESTPS/VO4_TEMPAD/VO4_TEMTRA/VO4_OPER/VO4_CODTES/VO4_VALBRU/VO4_PERDES/VO4_VALDES/VO4_VALTOT" cVO4RMostra += "/VO4_CENCUS/VO4_CONTA/VO4_ITEMCT/VO4_CLVL" cVO4RnEdit := "VO4_TIPTEM/VO4_TIPSER/VO4_DESTPS/VO4_TEMPAD/VO4_TEMTRA" cVO4DMostra := "VO4_TIPTEM/VO4_GRUSER/VO4_CODSER/VO4_DESSER/VO4_TIPSER/VO4_DESTPS/VO4_KILROD/VO4_VALBRU/VO4_PERDES/VO4_VALDES/VO4_VALTOT/VO4_TEMPAD/VO4_TEMTRA/VO4_TEMCOB/VO4_TEMVEN" cVO4DnEdit := "VO4_TIPTEM/VO4_GRUSER/VO4_CODSER/VO4_DESSER/VO4_TIPSER/VO4_DESTPS/VO4_TEMPAD/VO4_TEMTRA/VO4_TEMCOB/VO4_TEMVEN/VO4_PREKIL/VO4_KILROD/VO4_VALSER" // Ponto de entrada para: // 0 - Criação (X) // 1 - Ret. Dados ( ) // de campos customizáveis da gridbox de Serviços If lVO4Ser aVO4CSer := ExecBlock("OX100SER", .f., .f., {"0", ""}) If !Empty(aVO4CSer) For nCntFor := 1 To Len(aVO4CSer[nCntFor]) cVO4DMostra += "/" + aVO4CSer[1, nCntFor] Next EndIf EndIf dbSelectArea("SX3") dbSetOrder(1) dbSeek("VO4") While !SX3->(Eof()) .And. (SX3->X3_ARQUIVO == "VO4") &("M->"+AllTrim(SX3->X3_CAMPO)) := CriaVar(SX3->X3_CAMPO,.f.) If X3USO(SX3->X3_USADO) .And. cNivel>=SX3->X3_NIVEL // aHeader da GetDados de Servicos - RESUMO If (AllTrim(SX3->X3_CAMPO) $ cVO4RMostra) Aadd(aHVO4Res, {AllTrim(X3Titulo()), SX3->X3_CAMPO, SX3->X3_PICTURE, SX3->X3_TAMANHO,; SX3->X3_DECIMAL, SX3->X3_VALID, SX3->X3_USADO, SX3->X3_TIPO,; SX3->X3_F3, SX3->X3_CONTEXT, X3CBOX(), SX3->X3_RELACAO }) IF SX3->X3_VISUAL <> "V" .and. !(AllTrim(SX3->X3_CAMPO) $ cVO4RnEdit) Aadd(aHVO4RAlt,SX3->X3_CAMPO) ENDIF Endif // aHeader da GetDados de Servicos - Detalhado If (AllTrim(SX3->X3_CAMPO) $ cVO4DMostra) Aadd(aHVO4Det, {AllTrim(X3Titulo()), SX3->X3_CAMPO, SX3->X3_PICTURE, SX3->X3_TAMANHO,; SX3->X3_DECIMAL, SX3->X3_VALID, SX3->X3_USADO, SX3->X3_TIPO,; SX3->X3_F3, SX3->X3_CONTEXT, X3CBOX(), SX3->X3_RELACAO }) IF SX3->X3_VISUAL <> "V" .and. !(AllTrim(SX3->X3_CAMPO) $ cVO4DnEdit) Aadd(aHVO4AAlt,SX3->X3_CAMPO) ENDIF Endif Endif SX3->(dbSkip()) End ------------------------------------------------------------------------------------ 2ª Chamada - Ret. Dados IF nPosAux == 0 VOK->(MsSeek( xFilial("VOK") + aAuxValSer[nCntFor,05] )) AADD( aAuxVO4, Array(28) ) nPosAux := Len(aAuxVO4) aAuxVO4[ nPosAux , AS_NUMOSV ] := cNumOS // 01 - Numero da OS aAuxVO4[ nPosAux , AS_TIPSER ] := aAuxValSer[nCntFor,05] // 02 - Tipo do Servico aAuxVO4[ nPosAux , AS_GRUSER ] := aAuxValSer[nCntFor,01] // 03 - Grupo do Servico aAuxVO4[ nPosAux , AS_CODSER ] := aAuxValSer[nCntFor,02] // 04 - Codigo do Servico aAuxVO4[ nPosAux , AS_VALBRU ] := 0 // 05 - Valor Bruto aAuxVO4[ nPosAux , AS_TIPTEM ] := aAuxValSer[nCntFor,04] // 06 - Tipo de Tempo aAuxVO4[ nPosAux , AS_PERDES ] := 0 // 07 - Percentual de Desconto aAuxVO4[ nPosAux , AS_VALDES ] := 0 // 08 - Valor do Desconto aAuxVO4[ nPosAux , AS_INCMOB ] := aAuxValSer[nCntFor,06] // 09 - Tipo de Cobranca aAuxVO4[ nPosAux , AS_TEMPAD ] := aAuxValSer[nCntFor,10] // 10 - Tempo Padrao aAuxVO4[ nPosAux , AS_TEMTRA ] := aAuxValSer[nCntFor,11] // 11 - Tempo Trabalhado aAuxVO4[ nPosAux , AS_TEMCOB ] := nAuxTemCob // 12 - Tempo Cobrado aAuxVO4[ nPosAux , AS_TEMVEN ] := nAuxTemVen // 13 - Tempo Vendido aAuxVO4[ nPosAux , AS_SERINT ] := aAuxValSer[nCntFor,37] // 14 - Codigo Interno do Servico aAuxVO4[ nPosAux , AS_SECAO ] := aAuxValSer[nCntFor,18] // 15 - Codigo da Secao aAuxVO4[ nPosAux , AS_KILROD ] := aAuxValSer[nCntFor,19] // 16 - Km Rodados aAuxVO4[ nPosAux , AS_APONTA ] := {} // 17 - Contem todos os apontamentos do servico aAuxVO4[ nPosAux , AS_PERCVLB ] := 0 // 18 - Percentual do Servico em Relacao ao Tipo de Tempo (Valor Bruto) aAuxVO4[ nPosAux , AS_PERCVLL ] := 0 // 19 - Percentual do Servico em Relacao ao Tipo de Tempo (Valor Liquido) aAuxVO4[ nPosAux , AS_ITTOTFISC ] := 0 // 20 - Total Fiscal (IT_TOTAL) já Rateado ... aAuxVO4[ nPosAux , AS_ITBASEDUP ] := 0 // 21 - Valor Base Duplicata do Item ja Rateado aAuxVO4[ nPosAux , AS_LIBVOO ] := aAuxValSer[nCntFor,38] // 22 - Numero da Liberacao (VOO_LIBVOO) aAuxVO4[ nPosAux , AS_INCTEM ] := VOK->VOK_INCTEM // 23 - Tempo para Calculo aAuxVO4[ nPosAux , AS_SEQINC ] := aAuxValSer[nCntFor,SRVC_INCONV_SEQ] if RVO4CENCUS <> 0 .and. RVO4CONTA <> 0 .and. RVO4ITEMCT <> 0 .and. RVO4CLVL <> 0 aAuxVO4[ nPosAux , AS_CENCUS ] := aAuxValSer[nCntFor,SRVC_CENCUS] aAuxVO4[ nPosAux , AS_CONTA ] := aAuxValSer[nCntFor,SRVC_CONTA] aAuxVO4[ nPosAux , AS_ITEMCT ] := aAuxValSer[nCntFor,SRVC_ITEMCTA] aAuxVO4[ nPosAux , AS_CLVL ] := aAuxValSer[nCntFor,SRVC_CLVL] Endif For nCntApont := 1 to Len(aAuxValSer[nCntFor, 14]) AADD( aAuxVO4[nPosAux,AS_APONTA] , Array(09) ) aAuxVO4[nPosAux, AS_APONTA, nCntApont,AS_APONTA_CODPRO] := aAuxValSer[nCntFor, 14, nCntApont, 01] // 17,01 - Codigo do Produtivo aAuxVO4[nPosAux, AS_APONTA, nCntApont,AS_APONTA_DATINI] := aAuxValSer[nCntFor, 14, nCntApont, 02] // 17,02 - Data de Inicio do Apontamento aAuxVO4[nPosAux, AS_APONTA, nCntApont,AS_APONTA_HORINI] := aAuxValSer[nCntFor, 14, nCntApont, 03] // 17,03 - Hora de Inicio do Apontamento aAuxVO4[nPosAux, AS_APONTA, nCntApont,AS_APONTA_DATFIN] := aAuxValSer[nCntFor, 14, nCntApont, 04] // 17,04 - Data de Fim do Apontamento aAuxVO4[nPosAux, AS_APONTA, nCntApont,AS_APONTA_HORFIN] := aAuxValSer[nCntFor, 14, nCntApont, 05] // 17,05 - Hora de Inicio do Apontamento aAuxVO4[nPosAux, AS_APONTA, nCntApont,AS_APONTA_TEMTRA] := aAuxValSer[nCntFor, 14, nCntApont, 06] // 17,06 - Tempo Trabalhado aAuxVO4[nPosAux, AS_APONTA, nCntApont,AS_APONTA_SEQUEN] := aAuxValSer[nCntFor, 14, nCntApont, 07] // 17,07 - Sequencia aAuxVO4[nPosAux, AS_APONTA, nCntApont,AS_APONTA_RECNO ] := aAuxValSer[nCntFor, 14, nCntApont, 08] // 17,08 - RECNO do VO4 aAuxVO4[nPosAux, AS_APONTA, nCntApont,AS_APONTA_PERCEN] := 1 // 17,09 - Percentual do Apontamento no Total do Tempo Trabalhado */ // 2-Servico de Terceiros If aAuxValSer[nCntFor,06] $ "2" aAuxVO4[nPosAux, AS_APONTA, nCntApont, AS_APONTA_PERCEN] := aAuxValSer[nCntFor, SRVC_APONT, nCntApont, SRVC_APONT_VALVEN] / aAuxValSer[nCntFor,SRVC_VALBRU] // 0=Mao-de-Obra Gratuita / 1=Mao-de-Obra / 3=Vlr Livre c/Base na Tabela / 4=Retorno de Srv ElseIf aAuxValSer[nCntFor,06] $ "0/1/3/4" aAuxVO4[nPosAux, AS_APONTA, nCntApont, AS_APONTA_PERCEN] := aAuxValSer[nCntFor, SRVC_APONT, nCntApont, SRVC_APONT_TEMTRA] / aAuxVO4[nPosAux,AS_TEMTRA] EndIf // nPerApont += aAuxVO4[nPosAux, AS_APONTA, nCntApont, AS_APONTA_PERCEN] Next nCntApont // If (nPerApont - 1) <> 0 // Alert("Percentual de apontamento com problema" + CHR(13) + CHR(10) + Str(nPerApont,10,9)) // aAuxVO4[nPosAux, 17, nCntApont, 09] += (nPerApont - 1) // EndIf // EndIf aAuxVO4[nPosAux,AS_VALBRU] += nVlrSrvc aAuxVO4[nPosAux,AS_VALDES] += nValDes // // Ponto de entrada para: // 0 - Criação ( ) // 1 - Ret. Dados (X) // de campos customizáveis da gridbox de Peças If lVO4Ser .And. !Empty(aVO4CSer) aVO4DSer := ExecBlock("OX100SER", .f., .f., {"1", aAuxValSer[nCntFor, 37]}) // VO4_SERINT If !Empty(aVO4DSer) For nCntAux := 1 To Len(aVO4DSer[nCntAux]) If FG_POSVAR(aVO4CSer[1, nCntAux], "aHVO4Det") > 0 oGetDetVO4:aCols[nCntFor, FG_POSVAR(aVO4CSer[1, nCntAux], "aHVO4Det")] := aVO4DSer[1, nCntAux] EndIf Next EndIf EndIf | ||||||||||||
Programa Fonte: | OFIXA100.PRW | ||||||||||||
Função: | OX100EXEC() / OX100SRVC() | ||||||||||||
Parâmetros: |
| ||||||||||||
Retorno: |
|
Exemplo:
Include totvs.ch
/*
===============================================================================================
###############################################################################################
##+----------+------------+-------+---------------------------------------+------+----------+##
##|Função | OX100SER | Autor | MIL | Data | 18/03/2020 |##
##+----------+------------+-------+---------------------------------------+------+----------+##
##|Descrição | Ponto de entrada OX100PEC localizado na rotina Fechamento OS Mod2 (OFIXA100)|##
##| | que retornará campos customizáveis da VO4 e dados necessários da VO6 |##
##+----------+------------------------------------------------------------------------------+##
###############################################################################################
===============================================================================================
*/
User Function OX100SER()
cTipo := ParamIxb[1]
cSerIte := ParamIxb[2]
aRet := {}
If cTipo == "0"
// Criação (campos virtuais - exemplo)
Aadd(aRet, {"VO4_APLICA", "VO4_DETENG"})
Else
// Ret. Dados
VO6->(DbSetOrder(1))
VO6->(DbSeek(xFilial("VO6") + cSerIte))
Aadd(aRet, {VO6->VO6_APLICA, VO6->VO6_DETENG})
EndIf
MsgInfo("Ponto de entrada OX100SER executado com sucesso!", "")
Return aRet