Abrangências: | Microsiga Protheus 10 , Microsiga Protheus 11 |
Versões: | Microsiga Protheus 10 , Microsiga Protheus 11 |
Compatível Países: | Todos |
Sistemas Operacionais: | Todos |
Compatível às Bases de Dados: | Todos |
Idiomas: | Português (Brasil) |
Este ponto de entrada tem como finalidade selecionar campos para serem alterados na OS durante a exportação de um orçamento por fases.
/*
===============================================================================
###############################################################################
##+----------+------------+-------+-----------------------+------+----------+##
##|Função |OX001FAT |Autor | Luis Delorme | Data | 20/05/09 |##
##+----------+------------+-------+-----------------------+------+----------+##
##|Descrição | Faturamento do Orcamento |##
##+----------+--------------------------------------------------------------+##
##|Uso | Veiculos |##
##+----------+--------------------------------------------------------------+##
###############################################################################
===============================================================================
*/
Function OX001FAT(nOpc, lSoGravar)
// ############################################################
// # Verifica se trata-se de CANCELAMENTO DE ORCAMENTO #
// ############################################################
Local cOrcAtu := VS1->VS1_NUMORC
Local nCntFor2
Local lret := .t.
Local lAbortProc
Local aInconv
Local lOk := .f.
Local cMotCancel := ""
Local aSrvcAdic := {} // Servicos adicionais de 1ª Revisao (Orc. Oficina com Inc. de Revisao)
Local cCpoAlt := "" // Lista dos campos que poderão ser alterados
Local aCpoAlt := {} // Controla os Campos que poderão sofrer alteracoes na VO1
Local nPos := 0
Local nCol := 42
Local nLin := 4
Local nDisLin := 11
Local nTamGet := 0
Local lOkOSV := .f.
Local cObjGName := ""
Local cMsgErroInc := "" // Critica retornada pelo OM420VALINC
Local lRetT := .t.
Local cAlias := VAI->(GetArea())
Local lPedApr := .t. //exibe a janela que pede autorizacao de aprovacao
Local lAprUsr := .f. //informa se inconveniente foi aprovado ou nao
Private cMotivo := "000004" //Filtro da consulta do motivo de Cancelamentos (Orcamento)
Private cNumOrd := "" //numero do orcamento
//
if ExistBlock("OXA001DBFAT") // <<<--- O B S O L E T O
if !ExecBlock("OXA001DBFAT",.f.,.f.)
Return(.f.)
Endif
Endif
//
if ExistBlock("OX001FAT")
if !ExecBlock("OX001FAT",.f.,.f.)
Return(.f.)
Endif
Endif
//
if EXCLUI
if lOX001Auto .or. MsgYesNo(STR0064,STR0025)
BEGIN TRANSACTION
//
if ExistBlock("OX01CANCEL") // <<<--- O B S O L E T O
if !ExecBlock("OX01CANCEL",.f.,.f.)
Return(.f.)
Endif
Endif
if ExistBlock("OX001CAN")
if !ExecBlock("OX001CAN",.f.,.f.)
Return(.f.)
Endif
Endif
If !lOX001Auto
If VS1->(FieldPos("VS1_MOTIVO")) > 0
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
//³ Motivo do Cancelamento do Orcamento
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
While !lOk
lOk := PERGUNTE("OFI151",.t.)
EndDo
cMotCancel := MV_PAR01
EndIf
EndIf
If OXI001REVF(VS1->VS1_NUMORC, "0")
DBSelectArea("VS1")
DBSetOrder(1)
DBSeek(xFilial("VS1")+VS1->VS1_NUMORC)
//
DBSelectArea("VS1")
reclock("VS1",.f.)
VS1->VS1_STATUS := "C"
If !Empty(cMotCancel)
VS1->VS1_MOTIVO := cMotCancel
EndIf
msunlock()
If FindFunction("FM_GerLog")
//grava log das alteracoes das fases do orcamento
FM_GerLog("F",VS1->VS1_NUMORC)
EndIF
//
OX001CEV("C",VS1->VS1_NUMORC) // Gerar CEV no Cancelamento do Orcamento
//
If FindFunction("OM350STATUS")
OM350STATUS(VS1->VS1_NUMAGE,"2","4")
EndIf
//
oDlgXX001:End()
DBSelectArea("VS3")
DBSetOrder(1)
if DBSeek(xFilial("VS3")+VS1->VS1_NUMORC)
cCont := 1
While !Eof() .and. VS3->VS3_FILIAL == xFilial("VS3") .and. VS1->VS1_NUMORC == VS3->VS3_NUMORC
DBSelectArea("VPJ")
DBSetOrder(1)
if !DBSeek(xFilial("VPJ") + VS3->VS3_NUMORC + VS3->VS3_GRUITE + VS3->VS3_CODITE)
dbSelectArea("VPJ")
RecLock("VPJ",.t.)
VPJ->VPJ_FILIAL := xFilial("VPJ")
VPJ->VPJ_NUMORC := VS3->VS3_NUMORC
VPJ->VPJ_DATCAN := dDataBase
VPJ->VPJ_HORCAN := val(left(time(),2)+substr(time(),4,2))
VPJ->VPJ_GRUITE := VS3->VS3_GRUITE
VPJ->VPJ_CODITE := VS3->VS3_CODITE
VPJ->VPJ_QTDITE := VS3->VS3_QTDITE
VPJ->VPJ_VALTOT := VS3->VS3_VALTOT
dbSelectArea("VS0")
dbSetOrder(1)
dbSeek(xFilial("VS0")+cMotCancel)
VPJ->VPJ_MOTIVO := VS0->VS0_DESMOT
VPJ->VPJ_ORDEM := STRZERO(cCont,3)
If VPJ->(FieldPos("VPJ_NOMCLI")) <> 0
VPJ->VPJ_NOMCLI:= M->VS1_NCLIFT
EndIf
MsUnlock()
cCont += 1
Endif
dbSelectArea("VS3")
dbSkip()
Enddo
Endif
DBSelectArea("VS4")
DBSetOrder(1)
if DBSeek(xFilial("VS4")+VS1->VS1_NUMORC)
cCont := 1
While !Eof() .and. VS4->VS4_FILIAL == xFilial("VS4") .and. VS1->VS1_NUMORC == VS4->VS4_NUMORC
DBSelectArea("VPM")
DBSetOrder(1)
if !DBSeek(xFilial("VPM") + VS4->VS4_NUMORC + VS4->VS4_GRUSER + VS4->VS4_CODSER)
dbSelectArea("VPM")
RecLock("VPM",.t.)
VPM->VPM_FILIAL := xFilial("VPJ")
VPM->VPM_NUMORC := VS4->VS4_NUMORC
VPM->VPM_DATCAN := dDataBase
VPM->VPM_HORCAN := val(left(time(),2)+substr(time(),4,2))
VPM->VPM_GRUSER := VS4->VS4_GRUSER
VPM->VPM_CODSER := VS4->VS4_CODSER
VPM->VPM_TIPSER := VS4->VS4_TIPSER
VPM->VPM_VALVEN := VS4->VS4_VALSER
dbSelectArea("VS0")
dbSetOrder(1)
dbSeek(xFilial("VS0")+cMotCancel)
VPM->VPM_MOTIVO := VS0->VS0_DESMOT
VPM->VPM_ORDEM := STRZERO(cCont,3)
If VPM->(FieldPos("VPM_NOMCLI")) <> 0
VPM->VPM_NOMCLI:= M->VS1_NCLIFT
EndIf
MsUnlock()
cCont += 1
Endif
dbSelectArea("VS4")
dbSkip()
Enddo
Endif
if ExistBlock("OX001DCN")
ExecBlock("OX001DCN",.f.,.f.)
Endif
else
DisarmTransaction()
MsgInfo(STR0065,STR0025)
lRetT := .f.
endif
End Transaction()
return lRetT
else
return .f.
endif
return .t.
endif
// ############################################################
// # Verifica se trata-se de VISUALIZACAO DE ORCAMENTO #
// ############################################################
if !lOX001Auto
if VISUALIZA
oDlgXX001:end()
return .t.
endif
// ############################################################
// # Pergunta se deseja faturar realmente #
// ############################################################
if M->VS1_TIPORC == "1"
if !MsgYesNo(STR0067,STR0025)
return .f.
endif
endif
endif
// ############################################################
// # Grava o orcamento (VS1,VS3,VS4) #
// ############################################################
if !(cVS1Status $ "234")
if !OX001GRV(nOpc,.t.)
return .f.
endif
cOrcAtu := VS1->VS1_NUMORC
endif
// ############################################################
// # A fase 4 (conferencia deve ser realizada pelo estoque #
// ############################################################
if cVS1Status == "4"
if !lOX001Auto
MsgInfo(STR0068,STR0025)
endif
return .f.
endif
// ##########################################################################
// # I N I C I A O P R O C E S S O D E F A T U R A M E N T O #
// ##########################################################################
if M->VS1_TIPORC == "2"
// Dar o tratamento aqui para verificar pendência de O.S.
if ExistBlock("OX001VPO") // Antes da Exportacao
lRet := ExecBlock("OX001VPO",.f.,.f.)
If !lRet
Return (lRet)
Endif
Endif
if VS1->VS1_STATUS == "P"
MsgStop("O orçamento está pendente. Impossível continuar.","Atencao")
oDlgXX001:end()
return .f.
endif
// ##############################
// # VERIFICA INCONVENIENTES #
// ##############################
// PECAS //
DbSelectArea("VS3")
DbSetOrder(1)
DbSeek(xFilial("VS3")+VS1->VS1_NUMORC)
While !Eof() .and. xFilial("VS3")==VS3->VS3_FILIAL .and. VS3->VS3_NUMORC==VS1->VS1_NUMORC
// # VERIFICA INCONVENIENTES #
// If lInconveniente .and. !OX001VALINC("P",VS3->VS3_GRUINC,VS3->VS3_CODINC,VS1->VS1_CHAINT,VS1->VS1_KILOME,VS1->VS1_TIPTEM)
cMsgErroInc := ""
If lInconveniente .and. !Empty(VS3->VS3_SEQINC) .and. !OM420VALINC("P",,,VS1->VS1_CHAINT,VS1->VS1_KILOME,VS1->VS1_TIPTEM,VS1->VS1_NUMORC,"1",VS3->VS3_SEQINC,@cMsgErroInc)
aInconv := OM420CONSINC( "1" , VS1->VS1_NUMORC, VS3->VS3_SEQINC )
if !lOX001Auto
MsgStop(cMsgErroInc+CHR(13)+CHR(10)+CHR(13)+CHR(10)+STR0070+aInconv[1]+"-"+aInconv[2]+CHR(13)+CHR(10)+STR0071+VS1->VS1_TIPTEM,STR0025)
//
//verificar se o usuario tem permissao para utilizar inconveniente
If lPedApr//primeiro item a pedir aprovacao .t.
lPedApr := .f.
DbSelectArea("VAI")
Dbsetorder(4)
DbSeek(xFilial("VAI")+__cUserID)
If VAI->VAI_INCFPV<>"0" //usuario sem permissao para utilizar inconveniente fora da validade
If VAI->VAI_INCFPV=="1"//solicitar aprovacao (usuario e senha do usuario autorizado)
If !OFX001USR(aInconv[1],aInconv[2])
RestArea(cAlias)
return .f.
EndIF
else //nao autorizado
RestArea(cAlias)
return .f.
Endif
EndIf
EndIF
//
endif
EndIf
If VS3->VS3_VALPEC <= 0
if !lOX001Auto
MsgStop(STR0072,STR0025)
endif
Return .f.
EndIf
DbSelectArea("VS3")
DbSkip()
EndDo
// SERVICOS //
DbSelectArea("VS4")
DbSetOrder(1)
DbSeek(xFilial("VS4")+VS1->VS1_NUMORC)
While !Eof() .and. xFilial("VS4")==VS4->VS4_FILIAL .and. VS4->VS4_NUMORC==VS1->VS1_NUMORC
// # VERIFICA INCONVENIENTES #
cMsgErroInc := ""
If lInconveniente .and. !Empty(VS4->VS4_SEQINC) .and. !OM420VALINC("S",,,VS1->VS1_CHAINT,VS1->VS1_KILOME,VS1->VS1_TIPTEM,VS1->VS1_NUMORC,"1",VS4->VS4_SEQINC,@cMsgErroInc)
aInconv := OM420CONSINC( "1" , VS1->VS1_NUMORC, VS4->VS4_SEQINC )
if !lOX001Auto
MsgStop(cMsgErroInc+CHR(13)+CHR(10)+CHR(13)+CHR(10)+STR0074+aInconv[1]+"-"+aInconv[2]+CHR(13)+CHR(10)+STR0075+VS1->VS1_TIPTEM,STR0025)
//verificar se o usuario tem permissao para utilizar inconveniente
If lPedApr//primeiro item a pedir aprovacao .t.
lPedApr := .f.
DbSelectArea("VAI")
Dbsetorder(4)
DbSeek(xFilial("VAI")+__cUserID)
If VAI->VAI_INCFPV<>"0" //usuario sem permissao para utilizar inconveniente fora da validade
If VAI->VAI_INCFPV=="1"//solicitar aprovacao (usuario e senha do usuario autorizado)
If !OFX001USR(aInconv[1],aInconv[2])
RestArea(cAlias)
return .f.
EndIF
else //nao autorizado
RestArea(cAlias)
return .f.
Endif
EndIf
EndIF
endif
EndIf
If VS4->VS4_VALSER <= 0
MsgStop(STR0076,STR0025)
Return .f.
EndIf
DbSelectArea("VS4")
DbSkip()
EndDo
// EndIf
if !MsgYesNo(STR0077,STR0025)
return .f.
endif
//
if ExistBlock("OX001AEX") // Antes da Exportacao
lRet := ExecBlock("OX001AEX",.f.,.f.)
If !lRet
Return (lRet)
Endif
Endif
// ##############################
// # VERIFICA LIMITE DE CREDITO #
// ##############################
if VS1->VS1_STATUS != "F" .and. VS1->VS1_STATUS != "2"
DBSelectArea("VOI")
DBSetOrder(1)
DBSeek(xFilial("VOI") + VS1->VS1_TIPTEM)
if VOI->VOI_SITTPO == "1"
cTipPag := VS1->VS1_FORPAG
if Empty(GetNewPar("MV_CPNCLC","")) .or. !alltrim(cTipPag) $ GetMv("MV_CPNCLC") .or. Empty(cTipPag)
If "I" $ GetMv("MV_CHKCRE")
DBSelectArea("SA1")
DBSetOrder(1)
if GetMv("MV_CREDCLI") == "C"
if !DBSeek(xFilial("SA1")+VS1->VS1_CLIFAT + "01")
DBSeek(xFilial("SA1")+VS1->VS1_CLIFAT + VS1->VS1_LOJA)
endif
else
DBSeek(xFilial("SA1")+VS1->VS1_CLIFAT + VS1->VS1_LOJA)
endif
If !MaAvalCred(SA1->A1_COD, SA1->A1_LOJA, (VS1->VS1_VTOTNF+FG_AVALCRED(SA1->A1_COD, SA1->A1_LOJA)) ,1,.T.)
if !lOX001Auto
MsgInfo(STR0078,STR0025)
endif
OI001ATU(VS1->VS1_NUMORC,"3")
return .f.
EndIf
EndIf
Endif
endif
//
endif
if VS1->VS1_STATUS != "F" .and. !(OX001LDOFI(VS1->VS1_NUMORC))
return .f.
endif
//
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Verifica se deve adicionar servicos para o inconveniente ( REVISAO ) ³
//³ quando o orcamento nao foi gerado pelo agendamento ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
IF lInconveniente
if VS1->(FieldPos("VS1_NUMAGE")) == 0 .or. (VS1->(FieldPos("VS1_NUMAGE")) <> 0 .and. Empty(VS1->VS1_NUMAGE))
aSrvcAdic := {}
if !OX001SRVAD(@aSrvcAdic)
Return .f.
endif
EndIf
EndIf
// ########################
// # ORCAMENTO DE OFICINA #
// ########################
// ------------------------------------------------------------------------------------------------------------
BEGIN TRANSACTION // --------I-N-I-C-I-O---D-A---T-R-A-N-S-A-C-A-O---------------------------------------------
// ------------------------------------------------------------------------------------------------------------
// ##########################################################################
// # VERIFICA SE EH O CASO O CASO DE ABRIR UMA NOVA O.S. OU NAO #
// ##########################################################################
if lOX001Auto .or. MsgYesNo(STR0088 ,STR0025)
If !OX001VERQMX(cNumOrd)
DisarmTransaction()
Return .f.
EndIF
cNumOrd := FM_ABREOSV( @aCodErro ,,M->VS1_CHAINT , M->VS1_KILOME , M->VS1_CLIFAT, M->VS1_LOJA , M->VS1_OBSMEM, If(Type("M->VS1_DATENT")<>"U",M->VS1_DATENT,Ctod("")) )
if Empty(cNumOrd)
if !lOX001Auto
MsgInfo(aCodErro[2],STR0025 +" - "+aCodErro[1])
endif
DisarmTransaction()
return .f.
else
dbSelectArea("VO1")
dbSetOrder(1)
if !dbSeek(xFilial("VO1")+cNumOrd)
if !lOX001Auto
MsgStop(STR0089)
endif
Return(.f.)
else
reclock("VO1",.f.)
VO1->VO1_NATURE := VS1->VS1_NATURE
msunlock()
endif
If ExistBlock("OFX01OSV")
cCpoAlt := ExecBlock("OFX01OSV",.f.,.f.)
EndIf
OFIXX001, OFX01OSV
OFX01OSV - Retorna os campos do VO1 que terão possibilidade de alteração no momento da exportação do Orçamento para a OS. ( [ ] ) --> cCamposVO1
Nome | Tipo | Descrição | Default | Obrigatório | Referência | ||||||||||||
Array of Record |
-
cCamposVO1(caracter)
- Campos que serão alterados.
#include "Protheus.ch"/*===============================================================================#################################################################################+----------+------------+-------+-----------------------+------+----------+####|Funcao | OFX01OSV | Autor | Andre Luis Almeida | Data | 06/10/10 |####+----------+------------+-------+-----------------------+------+----------+####|Descricao | Ponto de Entrada para retornar os campos do VO1 que terao |####| | possibilidade de alteracao no momento da exportacao do Orcto |####| | para a OS |####+----------+--------------------------------------------------------------+####|Uso | Oficina |####+----------+--------------------------------------------------------------+#################################################################################===============================================================================*/User Function OFX01OSV()Local cCamposVO1 := ""/////////////////////////////////////////////////// Informe os campos que poderao ser alterados ///////////////////////////////////////////////////cCamposVO1 := "VO1_CODCOR/VO1_PRISMA/"/////////////////////////////////////////////////Return cCamposVO1
Nome | Tipo | Escopo | Pode Alterar | descrição | ||||||||||
Array of Record | Global | Não |