Árvore de páginas

Ponto-de-Entrada: OF350GRORC - Exportação de campos para o orçamento.
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)
Descrição:
Este ponto de entrada está localizado na rotina Agendamento (OFIOM350). Ao incluir um agendamento, é possível informar a kilometragem do veículo através do campo Km Veiculo (VSO_KILOME), (UPDOFIFS),  e no momento de exportá-lo para um novo orçamento, a kilometragem também será exportada.
Eventos


/*
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³ Funcao   ³ FS_EXPAGEND ³ Autor ³ Rubens             ³ Data ³ 18/01/10 ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Descricao³ Verifica se pode exportar o agendamento                    ³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*/
Static Function FS_EXPAGEND()

Local nCntFor, nCntFor2, nAuxPos
Local aTTFatPar := {} // Matriz contendo todos os TT e Faturar Para { TT Peca , TT Servico , Cliente, Loja }
Local lAddFatPar
Local cAuxSeqInc, nAuxSeqVS3, nAuxSeqVS4
Local nValPec, nMarLuc
Local lKilometragem, nValHor
Local aTempPro, cCenCus
Local lVAJGRUMOD := (VAJ->(FieldPos("VAJ_GRUMOD")) > 0)
Local lVAJAPLICA := (VAJ->(FieldPos("VAJ_APLICA")) > 0)
Local lVS4SEQSER := (VS4->(FieldPos("VS4_SEQSER")) > 0 .and. VO7->(FieldPos("VO7_SEQSER")) > 0)
Local cSeqSer
Local lIncSer := .f.
Local cGruMod := ""
Local cAuxChaInt := Space(TamSX3("VV1_CHAINT")[1])
Private cFormulPeca := ""

// Levanta todos os TT e Fat. Para possiveis
For nCntFor := 1 to Len(aIncAg)
    // Pecas
    If aIncAg[nCntFor,11] == "1"
        nAuxPos := aScan(aTTFatPar,{ |x| x[1] == aIncAg[nCntFor,6] .and. x[3] == aIncAg[nCntFor,7] .and. x[4] == aIncAg[nCntFor,8] } )
    // Servicos
    ElseIf aIncAg[nCntFor,11] == "2"
        nAuxPos := aScan(aTTFatPar,{ |x| x[2] == aIncAg[nCntFor,6] .and. x[3] == aIncAg[nCntFor,7] .and. x[4] == aIncAg[nCntFor,8] } )
    EndIf

    lAddFatPar := .t. // Adiciona na matriz ...
    If nAuxPos == 0
        For nAuxPos := 1 to Len(aTTFatPar)
            // Se for o mesmo faturar para ...
            If aTTFatPar[nAuxPos,3] == aIncAg[nCntFor,7] .and. aTTFatPar[nAuxPos,4] == aIncAg[nCntFor,8]
                // Pecas
                If aIncAg[nCntFor,11] == "1" .and. empty(aTTFatPar[nAuxPos,1])
                    aTTFatPar[nAuxPos,1] := aIncAg[nCntFor,6]
                    lAddFatPar := .f.
                    exit
                EndIf
               
                // Servicos
                If aIncAg[nCntFor,11] == "2" .and. empty(aTTFatPar[nAuxPos,2])
                    aTTFatPar[nAuxPos,2] := aIncAg[nCntFor,6]
                    lAddFatPar := .f.
                    exit
                EndIf
            EndIf
        Next nAuxPos

        If lAddFatPar
            AADD( aTTFatPar, { "", "", aIncAg[nCntFor,7], aIncAg[nCntFor,8] } )
            // Atualiza TT de Peca ou Servico ...
            aTTFatPar[Len(aTTFatPar), Val(aIncAg[nCntFor,11])] := aIncAg[nCntFor,6]
        EndIf

    EndIf
   
Next

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³Gera Orcamentos³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Begin Transaction

For nAuxPos := 1 to Len(aTTFatPar)

    //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    //³Verifica se nao ficou algum TT em branco, e atualiza ele..³
    //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    // Se o TT de Peca estiver vazio, grava o TT de Servico
    If empty(aTTFatPar[nAuxPos,1])
        aTTFatPar[nAuxPos,1] := aTTFatPar[nAuxPos,2]
    EndIf
    // Se o TT de Servico estiver vazio, grava o TT de Peca
    If empty(aTTFatPar[nAuxPos,2])
        aTTFatPar[nAuxPos,2] := aTTFatPar[nAuxPos,1]
    EndIf
    //
   
    // Posiciona Cliente
    dbSelectArea("SA1")
    dbSetOrder(1)
    dbSeek(xFilial("SA1")+aTTFatPar[nAuxPos,3]+aTTFatPar[nAuxPos,4])
   
    // Posiciona Veiculo
    dbSelectArea("VV1")
    dbSetOrder(2)
    dbSeek(xFilial("VV1")+VSO->VSO_GETKEY)
   
    // Procura Modelo do veiculo
    cGruMod := FM_SQL("SELECT VV2_GRUMOD FROM "+RetSQLName("VV2")+" WHERE VV2_FILIAL = '"+xFilial("VV2")+"' AND VV2_CODMAR = '"+VV1->VV1_CODMAR+"' AND VV2_MODVEI = '"+VV1->VV1_MODVEI+"' AND D_E_L_E_T_ = ' '")
   
    // Posiciona o TT de Peca
    dbSelectArea("VOI")
    dbSetOrder(1)
    dbSeek(xFilial("VOI")+aTTFatPar[nAuxPos,1])

    // Formula para calculo do valor das pecas
    cFormulPeca := iif( !Empty(VOI->VOI_VALPEC) , VOI->VOI_VALPEC , &(GETMV("MV_FMLPECA")) )
   
    //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    //³Cabecalho do Orcamento³
    //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    dbSelectArea("VS1")
    RecLock("VS1",.T.)
    VS1->VS1_FILIAL := xFilial("VS1")
    VS1->VS1_NUMORC := GetSXENum("VS1","VS1_NUMORC")
    VS1->VS1_TIPORC := "2" // Orcamento de Oficina
    VS1->VS1_NUMAGE := VSO->VSO_NUMIDE

    VS1->VS1_CLIFAT := aTTFatPar[nAuxPos,3]
    VS1->VS1_LOJA   := aTTFatPar[nAuxPos,4]
    VS1->VS1_NCLIFT := SA1->A1_NOME
    VS1->VS1_TIPCLI := SA1->A1_TIPO

    VS1->VS1_OBSMEM := VSO->VSO_OBSMEM
    VS1->VS1_CODMAR := VSO->VSO_CODMAR

    VS1->VS1_DATORC := CriaVar("VS1_DATORC")
    VS1->VS1_HORORC := CriaVar("VS1_HORORC")
    VS1->VS1_CODVEN := CriaVar("VS1_CODVEN")
    VS1->VS1_DATVAL := CriaVar("VS1_DATVAL")
    VS1->VS1_TIPTEM := aTTFatPar[nAuxPos,1]  // TT de Peca   
    VS1->VS1_TIPTSV := aTTFatPar[nAuxPos,2]  // TT de Servico
    //VS1->VS1_FORPAG
    //VS1->VS1_CODBCO
    VS1->VS1_FORMUL := cFormulPeca
    VS1->VS1_CHAINT := VV1->VV1_CHAINT
    VS1->VS1_TIPVEN := "1" // Varejo
    //VS1->VS1_NATURE
    VS1->VS1_STATUS := "0"
    VS1->VS1_CFNF   := "1" // Gera Nota Fiscal
    VS1->VS1_KILOME := VSO->VSO_KILOME
    //VS1_PGTFRE
    //Ponto de entrada para gravacao do agendamento no orcamento.
    if ExistBlock("OF350GRORC")
        ExecBlock("OF350GRORC",.f.,.f.)
    Endif
    MsUnLock()

Programa Fonte
OFIOM350, OF350GRORC
Sintaxe

OF350GRORC - Exportação de campos para o orçamento. ( [ ] )

Parâmetros:
Nome Tipo Descrição Default Obrigatório Referência
Array of Record
Retorno
    ()
Exemplos
#INCLUDE "PROTHEUS.CH"/*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜܱ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±±±ºPrograma  ³OF350GRORCºAutor  ³ Otavio Favarelli   º Data ³  24/03/11  			º±±±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±±±ºDesc.     ³ Ponto de entrada para gravacao de campos do agendamento no orcamento º±±±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±±±ºUso       ³ SIGAOFI                                                			    º±±±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/User Function OF350GRORC()//VS1->VS1_DEPTO  := GETMV("MV_DEPTOAG")//VS1->VS1_NATURE := GETMV("MV_NATUREZ")MsgInfo("O ponto de entrada OF350GRORC foi executado!","Atencao!")Return
Variáveis
Nome Tipo Escopo Pode Alterar descrição
Array of Record Global Não