Árvore de páginas

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:
NomeTipo Descrição

cTipo

Caracter

Tipo (0 - Criação / 1 - Ret. Dados - Único informado)

cTipo

Caracter

Tipo (0 - Criação / 1 - Ret. Dados)

cSerIte

Caracter

Código Interno do Serviço

Retorno:
NomeTipoDescrição

aRet

Vetor

Retorno dos campos customizáveis virtuais (VO4)

aRetVetor

Retorno dos dados da tabela VO6 (para os campos customizáveis da 1ª Chamada)

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