#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'FWMVCDEF.CH'
// Exemplo de ExecAuto Customizado, de Orçamento de Contrato de Serviço
// Nos ARRAYs, informar o nome do campo e valor
// Usar os Modelos abaixo, no FOR acima
// 'TFJ_REFER'. // 'Ref. Proposta'
// GRID
// 'TFL_LOC' // 'Locais de Atendimento'
// 'TFF_RH' // 'Recursos Humanos'
// SubGRID
// 'TFG_MI' // 'Materiais de Implantação'
// 'TFH_MC' // 'Material de Consumo'
// 'ABP_BENEF' // 'Benefícios'
// 'TFU_HE' // 'Hora Extra'
// 'TFI_LE' // 'Locação de Equipamentos'
// SubGRID
// 'TEV_ADICIO' // 'Cobrança da Locação'
User FunctIon Orc740()
Local aLinha := {}
Local aTFJ := {} // Campos do Cabeçalho
Local aTFL := {} // Locais de Atendimento
Local aTFF := {} // Recursos Humanos
Local aTFG := {} // Material de Implantação
Local aTFH := {} // Material de Consumo
Local aABP := {} // Verbas Adicionais
Local aTFU := {} // Hora Extra
Local aTFI := {} // Locação de Equipamentos
Local aTEV := {} // Cobrança de Locação
Local nDtIni := dDataBase
Local nDtFim := dDataBase + 30
// Cabeçalho
aAdd(aTFJ, {"TFJ_FILIAL", xFilial("TFJ")})
aAdd(aTFJ, {"TFJ_CODIGO", GETSXENUM("TFJ", "TFJ_CODIGO")})
aAdd(aTFJ, {"TFJ_CODENT", "000001"})
aAdd(aTFJ, {"TFJ_LOJA" , "01"})
aAdd(aTFJ, {"TFJ_CONDPG", "001"})
// Locais de Atendimento
aAdd(aTFL , "TFL_LOC")
aAdd(aLinha, {"TFL_FILIAL", xFilial("TFL")})
aAdd(aLinha, {"TFL_LOCAL" , "00000014"})
aAdd(aLinha, {"TFL_DTINI" , nDtIni})
aAdd(aLinha, {"TFL_DTFIM" , nDtFim})
aAdd(aTFL , aLinha)
aLinha := {}
// Recursos Humanos
aAdd(aTFF , "TFF_RH")
aAdd(aLinha, {"TFF_FILIAL", xFilial("TFF")})
aAdd(aLinha, {"TFF_ITEM" , "01"})
aAdd(aLinha, {"TFF_PRODUT", "000000000000001"})
aAdd(aLinha, {"TFF_QTDVEN", 10})
aAdd(aLinha, {"TFF_PRCVEN", 1000})
aAdd(aLinha, {"TFF_PERINI", nDtIni})
aAdd(aLinha, {"TFF_PERFIM", nDtFim})
aAdd(aLinha, {"TFF_TESPED", "502"})
aAdd(aLinha, {"TFF_FUNCAO", "00001"})
aAdd(aLinha, {"TFF_TURNO" , "001"})
aAdd(aLinha, {"TFF_SEQTRN", "01"})
aAdd(aLinha, {"TFF_ESCALA", "000002"})
aAdd(aTFF , aLinha)
aLinha := {}
// Materiais de Implantação
aAdd(aTFG , "TFG_MI")
aAdd(aLinha, {"TFG_FILIAL", xFilial("TFG")})
aAdd(aLinha, {"TFG_ITEM" , "01"})
aAdd(aLinha, {"TFG_PRODUT", "000000000000003"})
aAdd(aLinha, {"TFG_QTDVEN", 1})
aAdd(aLinha, {"TFG_PRCVEN", 100})
aAdd(aLinha, {"TFG_PERINI", nDtIni})
aAdd(aLinha, {"TFG_PERFIM", nDtFim})
aAdd(aLinha, {"TFG_TESPED", "501"})
aAdd(aTFG , aLinha)
aLinha := {}
// Materiais de Consumo
aAdd(aTFH , "TFH_MC")
aAdd(aLinha, {"TFH_FILIAL", xFilial("TFH")})
aAdd(aLinha, {"TFH_ITEM" , "01"})
aAdd(aLinha, {"TFH_PRODUT", "000000000000004"})
aAdd(aLinha, {"TFH_QTDVEN", 1})
aAdd(aLinha, {"TFH_PRCVEN", 100})
aAdd(aLinha, {"TFH_PERINI", nDtIni})
aAdd(aLinha, {"TFH_PERFIM", nDtFim})
aAdd(aLinha, {"TFH_TESPED", "501"})
aAdd(aTFH , aLinha)
aLinha := {}
MsgRun("Orçamento", "Processando", {|| U_Exec740(aTFJ, {aTFL, aTFF, aTFG, aTFH, aABP, aTFU, aTFI, aTEV})})
Return
//*************************************************************
// ExecAuto Customizado
User Function Exec740(aOrca, aModelos)
Local aLinha := {}
Local aGrid := {}
Local cCampo := ""
Local cMsg := ""
Local lRet := .T.
Local nGrd := 0
Local nLin := 0
Local nMod := 0
Local oModel
Local oModAux
Local xValor
If SuperGetMV('MV_ORCPRC')
oModel := FwLoadModel("TECA740F") // Orçamento com precificação
Else
oModel := FwLoadModel("TECA740") // Orçamento sem precificação
Endif
oModel:SetOperation(MODEL_OPERATION_INSERT)
oModel:Activate()
// Cabeçalho
oModAux := oModel:GetModel("TFJ_REFER")
For nMod := 1 To Len(aOrca)
cCampo := aOrca[nMod, 1]
xValor := aOrca[nMod, 2]
lRet := oModAux:SetValue(cCampo, xValor)
If !lRet
Exit
Endif
Next
// Grids
If lRet .And. !Empty(aModelos)
For nMod := 1 To Len(aModelos)
aGrid := aClone(aModelos[nMod])
If !Empty(aGrid)
oModAux := oModel:GetModel(aGrid[1]) // Nome do Modelo
For nGrd := 2 To Len(aGrid) // Registros do Modelo
If nGrd > 2
oModAux:AddLine()
Endif
aLinha := aClone(aGrid[nGrd]) // Campos do Modelo
For nLin := 1 To Len(aLinha)
cCampo := aLinha[nLin, 1]
If FwFldGet(cCampo) == Nil
MsgAlert("O Campo " + cCampo + ' não existe no Modelo ' + aGrid[1], "Erro")
lRet := .F.
Else
xValor := aLinha[nLin, 2]
lRet := oModAux:SetValue(cCampo, xValor)
Endif
If lRet .And. nLin == Len(aLinha)
aLinha := oModel:GetRelation(aGrid[1])[1] // Campos de Relacionamento
For nLin := 2 To Len(aLinha)
cCampo := aLinha[nLin, 2] // Campo Pai
xValor := FwFldGet(cCampo)
cCampo := aLinha[nLin, 1] // Campo Filho
If Empty(FwFldGet(cCampo))
lRet := oModAux:LoadValue(cCampo, xValor)
Endif
If !lRet
nGrd := Len(aGrid)
nMod := Len(aModelos)
Exit
Endif
Next
Exit
Endif
Next
Next
Endif
Next
Endif
At740SCmt(.T.)
lRet := lRet .And. oModel:VldData()
lRet := lRet .And. oModel:CommitData()
If !lRet
aLinha := oModel:GetErrorMessage()
For nLin := 1 To Len(aLinha)
If !Empty(aLinha[nLin])
cMsg += aLinha[nLin] + CRLF
Endif
Next
MsgAlert(cMsg, "Erro")
Else
MsgAlert("Orçamento Gravado com Sucesso", " ")
Endif
Return lRet
|