Histórico da Página
Ponto de Entrada
Descrição: | Este ponto de entrada está localizado na rotina Orc. Por Fases (OFIXA011) e é executado no momento da reserva de peças. A finalidade deste ponto de entrada é permitir a manipulação / inserção de novos campos no momento de realizar a movimentação de transferência de armazéns na chamada da rotina MATA261 (tabela SD3). | ||||||
Localização: | Atualizações \ Mov Peças \ Orc. Por Fases | ||||||
Eventos: | Function OX001RESITE(cNumOrc,lRes, aVetSeq , lValidFase) Local cDocumento := "" Local aItensNew := {} Local aAuxItens := {} Local nQtAtend := 0 Local aVetLocPec := {} Local iVLP, ii Local i := 0 Local cQuery := "" Local cQAlias := "SQLSDB" Local lUsaVenc := .F. Local nSaldoLote := 0 Local nPosAcolsLt:= 0 Local lCanc := .f. Local nVS3GRUITE := "" Local nVS3CODITE := "" Local lCtrlLote := GetNewPar("MV_RASTRO","N") == "S" Local aRecVS3 := {} Local nSlvQtdTra := 0 Local nSlvQtdAgu := 0 Local lAtuFis := .f. Local nRecLote := 0 Local nPosRecL := 0 Local aVetRecLt := {} Local nPDevLoc := GetNewPar("MV_PDEVLOC","1") // Define se quando ocorrer um estorno de movimento com controle de localizacao deve-se: 0-Redistribuir, 1-Localizacao Original, 2-Perguntar. Local lObrRes := .f. Local oPeca := DMS_Peca():New() Local cTesMvEst := "" Local cFaseConfer := Alltrim(GetNewPar("MV_MIL0095","4")) // Fase de Conferencia e Separacao Local cFaseTransf := GetNewPar("MV_MIL0104","") // Fase Default Conferencia/Reserva para Transferencia de Pecas ( OFIOM430 ) Local nTamAEstq := 0 Local nPosAEstq Local nUltPos Local l261IntWMS := a261IntWMS() Local lESTNEG := GetNewPar("MV_ESTNEG","S") == "S" Local lVS3_TRSFER := VS3->(FieldPos('VS3_TRSFER')) > 0 Default aVetSeq :={} Default lValidFase:= .t. lRejLib:= If(Type("lRejLib")=="U",.f.,lRejLib) /////////////////////////////////////////////////// // Posicoes no Vetor de Integracao com o MATA261 // /////////////////////////////////////////////////// nTamAEstq := 21 If l261IntWMS nTamAEstq += 1 EndIf nTamAEstq += 1 If SD3->(FieldPos("D3_IDDCF"))>0 .And. l261IntWMS nTamAEstq += 1 EndIf If SD3->(FieldPos("D3_OBSERVA")) <> 0 nTamAEstq += 1 EndIf /////////////////////////////////////////////////// If lCtrlLote if lValidFase If (Funname() $ "OFIXA015.OFIXA013.OFIXA016.OFIXA019" .or. lRejLib) Return "" Endif If Funname() <> "OFIXA021" .AND. (Funname() <> "OFIXA018" .OR. (Funname() == "OFIXA018" .AND. !lXA018CancPed)) nVS3GRUITE := FG_POSVAR("VS3_GRUITE","aHeaderP") nVS3CODITE := FG_POSVAR("VS3_CODITE","aHeaderP") Endif Endif EndIf If Type("Exclui")=="U" Exclui := .f. Endif If lValidFase cFaseOrc := OI001GETFASE(VS1->VS1_NUMORC) nPosR := At("R",cFaseOrc) nPosA := At(VS1->VS1_STATUS,cFaseOrc) lObrRes := ( nPosR <= nPosA .and. nPosR != 0) EndIf //+------------------------------------------------------------+ //| PE para desviar e não fazer a reserva, pois há especifícos | //| que podem fazer a reserva do produto on-line. | //+------------------------------------------------------------+ if ExistBlock("OX00RESERV") cDocumento := ExecBlock("OX00RESERV",.F.,.F.) Endif if ExistBlock("OX001RES") cDocumento := ExecBlock("OX001RES",.F.,.F.) Endif // If ! Empty( cDocumento ) Return( cDocumento ) Endif cDocumento := Criavar("D3_DOC") cDocumento := IIf(Empty(cDocumento),NextNumero("SD3",2,"D3_DOC",.T.),cDocumento) cDocumento := A261RetINV(cDocumento) // DBSelectArea("VS1") DBSetOrder(1) DBSeek(xFilial("VS1")+ cNumOrc) // if (VS1->VS1_TIPORC <> "2" .and. lValidFase) .or. VS1->VS1_TIPORC == "3" cFaseOrc := OI001GETFASE(VS1->VS1_NUMORC) if VS1->VS1_TIPORC == "3" // Transferencia If cFaseConfer $ IIf(!Empty(cFaseTransf),cFaseTransf,cFaseOrc) .and. ; ( VS1->VS1_STATUS <> "0" .and. VS1->VS1_STATUS <> cFaseConfer ) // Fase de Conferencia esta contida nas Fases de Transferencia (OFIOM430) lVerConf := .t. else lVerConf := .f. EndIf Else nPos4 := At(cFaseConfer,cFaseOrc) nPosAtu := At(VS1->VS1_STATUS,cFaseOrc) if nPos4 < nPosAtu .and. nPos4 > 0 lVerConf := .t. else lVerConf := .f. endif EndIf Else lVerConf := .f. Endif // If lESTNEG // Quando MV_ESTNEG igual a "S", NAO validar Conferencia lVerConf := .f. EndIf // ////////////////////////////////////////////////////////////////////// // // // TESTAR SEM ESSE BLOCO! CASO O MATA261 NAO BLOQUEIA, VOLTAR BLOCO // // // ////////////////////////////////////////////////////////////////////// /* cLocalRes := GetMv( "MV_RESITE" )+Space(TamSx3("B2_LOCAL")[1]-Len(GetMv("MV_RESITE"))) DBSelectArea("VS3") DBSetOrder(1) DBSeek(xFilial("VS3")+cNumOrc) While !eof() .and. xFilial("VS3") + cNumOrc == VS3->VS3_FILIAL + VS3->VS3_NUMORC SB1->(DbSetOrder(7)) SB1->(MsSeek(xFilial("SB1")+VS3->VS3_GRUITE+VS3->VS3_CODITE)) If !MaAvalPerm( 3 , { VS3->VS3_LOCAL , SB1->B1_COD } ) .or. !MaAvalPerm( 3 , { cLocalRes , SB1->B1_COD } ) SB1->(DbSetOrder(1)) Return "" // Usuario sem permissao para utilizar o Almoxarifado EndIf VS3->(DbSkip()) EndDo */ ////////////////////////////////////////////////////////////////////// // DBSelectArea("VS3") DBSetOrder(1) DBSeek(xFilial("VS3")+ cNumOrc) // Adiciona cabecalho com numero do documento e data da transferencia modelo II aadd (aItensNew,{ cDocumento , dDataBase}) // If lCtrlLote .and. lRes .and. lValidFase if VS3->(FieldPos("VS3_LOTECT"))> 0 While !eof() .and. xFilial("VS3") + cNumOrc == VS3->VS3_FILIAL + VS3->VS3_NUMORC SB1->(DbSetOrder(7)) SB1->(DBSeek(xFilial("SB1")+VS3->VS3_GRUITE+VS3->VS3_CODITE)) oPeca:LoadB1() nSaldoLote := 0 lAtuFis := .f. cTesMvEst := FM_SQL("SELECT F4_ESTOQUE FROM " + RetSQLName("SF4") + " SF4 WHERE F4_FILIAL = '" + xFilial("SF4") + "' AND F4_CODIGO = '"+VS3->VS3_CODTES+"' AND D_E_L_E_T_=' '") If Rastro( SB1->B1_COD ) .and. cTesMvEst == "S" nRecLote := VS3->(Recno()) nPosRecL := aScan(aVetRecLt,nRecLote) If nPosRecL == 0 aAdd(aVetRecLt,nRecLote) Else VS3->(DbSkip()) Loop Endif if Empty(VS3->VS3_LOTECT) nSlvQtdTra := VS3->VS3_QTDTRA nSlvQtdAgu := VS3->VS3_QTDAGU lUsaVenc:= SuperGetMv('MV_LOTVENC')=='S' aSaldos := SldPorLote(SB1->B1_COD,VS3->VS3_LOCAL,VS3->VS3_QTDITE,NIL,"","","","",NIL,NIL,NIL,lUsaVenc,nil,nil,dDataBase) nPosAcolsLt := aScan( oGetPecas:aCols,{ |x| x[nVS3GRUITE]+x[nVS3CODITE] == VS3->VS3_GRUITE+VS3->VS3_CODITE }) For i := 1 to Len(aSaldos) For ii:=1 to Len(aHeaderP) M->&(aHeaderP[ii,2]):= oGetPecas:aCols[Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)),ii] Next If VS3->VS3_QTDITE <= aSaldos[i,5] RecLock("VS3",.f.) VS3->VS3_LOTECT := aSaldos[i,1] VS3->VS3_NUMLOT := aSaldos[i,2] VS3->VS3_DTVALI := aSaldos[i,7] oGetPecas:aCols[Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)),FG_POSVAR("VS3_LOTECT","aHeaderP")]:= aSaldos[i,1] oGetPecas:aCols[Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)),FG_POSVAR("VS3_NUMLOT","aHeaderP")]:= aSaldos[i,2] oGetPecas:aCols[Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)),FG_POSVAR("VS3_DTVALI","aHeaderP")]:= aSaldos[i,7] MsUnLock() lPPrepec := .f. __ReadVar := 'M->VS3_QTDITE' M->VS3_QTDITE := oGetPecas:aCols[Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)),fg_posvar("VS3_QTDITE","aHeaderP")] oGetPecas:nAt := Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)) OX001PREPEC() RecLock("VS3",.f.) VS3->VS3_QTDINI := M->VS3_QTDITE VS3->VS3_VALTOT := M->VS3_VALTOT VS3->VS3_SEQUEN := M->VS3_SEQUEN VS3->VS3_PERDES := M->VS3_PERDES VS3->VS3_VALPEC := M->VS3_VALPEC VS3->VS3_VALDES := M->VS3_VALDES if FG_POSVAR("VS3_VALPIS","aHeaderP") > 0 VS3->VS3_VALPIS := M->VS3_VALPIS endif if FG_POSVAR("VS3_VALCOF","aHeaderP") > 0 VS3->VS3_VALCOF := M->VS3_VALCOF endif if FG_POSVAR("VS3_ICMCAL","aHeaderP") > 0 VS3->VS3_ICMCAL := M->VS3_ICMCAL endif if FG_POSVAR("VS3_MARLUC","aHeaderP") > 0 VS3->VS3_MARLUC := M->VS3_MARLUC endif if FG_POSVAR("VS3_VALCMP","aHeaderP") > 0 VS3->VS3_VALCMP := M->VS3_VALCMP endif if FG_POSVAR("VS3_DIFAL","aHeaderP") > 0 VS3->VS3_DIFAL := M->VS3_DIFAL endif MsUnLock() If Len(aVetSeq) > 0 .and. aScan(aVetSeq,{ |x| x == VS3->VS3_SEQUEN } ) == 0 aAdd(aVetSeq,VS3->VS3_SEQUEN) EndIf Else lAtuFis := .t. nSaldoLote := (VS3->VS3_QTDITE - aSaldos[i,5]) RecLock("VS3",.f.) VS3->VS3_QTDITE := aSaldos[i,5] VS3->VS3_LOTECT := aSaldos[i,1] VS3->VS3_NUMLOT := aSaldos[i,2] VS3->VS3_DTVALI := aSaldos[i,7] VS3->VS3_QTDAGU := 0 VS3->VS3_QTDTRA := 0 oGetPecas:aCols[Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)),FG_POSVAR("VS3_QTDITE","aHeaderP")]:= aSaldos[i,5] oGetPecas:aCols[Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)),FG_POSVAR("VS3_LOTECT","aHeaderP")]:= aSaldos[i,1] oGetPecas:aCols[Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)),FG_POSVAR("VS3_NUMLOT","aHeaderP")]:= aSaldos[i,2] oGetPecas:aCols[Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)),FG_POSVAR("VS3_DTVALI","aHeaderP")]:= aSaldos[i,7] MsUnLock() lPPrepec := .t. __ReadVar := 'M->VS3_QTDITE' M->VS3_QTDITE := oGetPecas:aCols[Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)),fg_posvar("VS3_QTDITE","aHeaderP")] oGetPecas:nAt := Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)) OX001PREPEC() RecLock("VS3",.f.) VS3->VS3_QTDINI := M->VS3_QTDITE VS3->VS3_SEQUEN := M->VS3_SEQUEN VS3->VS3_PERDES := M->VS3_PERDES VS3->VS3_VALPEC := M->VS3_VALPEC VS3->VS3_VALDES := M->VS3_VALDES VS3->VS3_VALTOT := M->VS3_VALTOT if FG_POSVAR("VS3_VALPIS","aHeaderP") > 0 VS3->VS3_VALPIS := M->VS3_VALPIS endif if FG_POSVAR("VS3_VALCOF","aHeaderP") > 0 VS3->VS3_VALCOF := M->VS3_VALCOF endif if FG_POSVAR("VS3_ICMCAL","aHeaderP") > 0 VS3->VS3_ICMCAL := M->VS3_ICMCAL endif if FG_POSVAR("VS3_MARLUC","aHeaderP") > 0 VS3->VS3_MARLUC := M->VS3_MARLUC endif if FG_POSVAR("VS3_VALCMP","aHeaderP") > 0 VS3->VS3_VALCMP := M->VS3_VALCMP endif if FG_POSVAR("VS3_DIFAL","aHeaderP") > 0 VS3->VS3_DIFAL := M->VS3_DIFAL endif MsUnLock() If Len(aVetSeq) > 0 .and. aScan(aVetSeq,{ |x| x == VS3->VS3_SEQUEN } ) == 0 aAdd(aVetSeq,VS3->VS3_SEQUEN) EndIf OX001CriRLt(nSaldoLote,nPosAcolsLt) aAdd(aVetRecLt,VS3->(Recno())) Endif Next If lAtuFis lPPrepec := .t. __ReadVar := 'M->VS3_QTDITE' M->VS3_QTDITE := oGetPecas:aCols[Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)),fg_posvar("VS3_QTDITE","aHeaderP")] oGetPecas:nAt := Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)) OX001PREPEC() RecLock("VS3",.f.) VS3->VS3_QTDINI := M->VS3_QTDITE VS3->VS3_SEQUEN := M->VS3_SEQUEN VS3->VS3_PERDES := M->VS3_PERDES VS3->VS3_VALPEC := M->VS3_VALPEC VS3->VS3_VALDES := M->VS3_VALDES VS3->VS3_VALTOT := M->VS3_VALTOT if FG_POSVAR("VS3_VALPIS","aHeaderP") > 0 VS3->VS3_VALPIS := M->VS3_VALPIS endif if FG_POSVAR("VS3_VALCOF","aHeaderP") > 0 VS3->VS3_VALCOF := M->VS3_VALCOF endif if FG_POSVAR("VS3_ICMCAL","aHeaderP") > 0 VS3->VS3_ICMCAL := M->VS3_ICMCAL endif if FG_POSVAR("VS3_MARLUC","aHeaderP") > 0 VS3->VS3_MARLUC := M->VS3_MARLUC endif if FG_POSVAR("VS3_VALCMP","aHeaderP") > 0 VS3->VS3_VALCMP := M->VS3_VALCMP endif if FG_POSVAR("VS3_DIFAL","aHeaderP") > 0 VS3->VS3_DIFAL := M->VS3_DIFAL endif MsUnlock() Endif // RecLock("VS3",.f.) VS3->VS3_QTDAGU := nSlvQtdAgu VS3->VS3_QTDTRA := nSlvQtdTra VS3->VS3_VALTOT := (VS3->VS3_VALPEC-(VS3->VS3_VALDES/VS3->VS3_QTDITE))*VS3->VS3_QTDITE MsUnLock() // oGetPecas:oBrowse:refresh() // Else if Empty(VS3->VS3_DTVALI) RecLock("VS3",.f.) VS3->VS3_DTVALI := oPeca:LoteDtValid(VS3->VS3_LOTECT) MsUnlock() oGetPecas:aCols[Iif(i==1,nPosAcolsLt,Len(oGetPecas:aCols)),FG_POSVAR("VS3_DTVALI","aHeaderP")]:= VS3->VS3_DTVALI Endif Endif VS3->(DbGoto(nRecLote)) EndIf VS3->(DbSkip()) EndDo EndIf EndIf DBSelectArea("VS3") DBSetOrder(1) DBSeek(xFilial("VS3")+ cNumOrc) while !eof() .and. xFilial("VS3") + cNumOrc == VS3->VS3_FILIAL + VS3->VS3_NUMORC // If lCtrlLote .and. !lRes If (VS1->(FieldPos("VS1_STARES"))) > 0 If VS1->VS1_STARES == "3" .or. ( VS1->VS1_STARES == "2" .and. (aScan(aVetSeq,{ |x| x == VS3->VS3_SEQUEN } ) == 0 .and. aScan(aVetSeq,{ |x| x == "9999" } ) == 0) ) DbSelectArea("VS3") DBSkip() loop EndIf endif EndIf if VS3->VS3_QTDITE == 0 .and. aScan(aVetSeq,VS3->VS3_SEQUEN) == 0 DbSelectArea("VS3") DBSkip() loop endif If !lVS3_TRSFER .or. (lVS3_TRSFER .and. VS3->VS3_TRSFER <> "1" ) SF4->(dbSeek(xFilial("SF4")+VS3->VS3_CODTES)) if SF4->F4_ESTOQUE != "S" DbSelectArea("VS3") DBSkip() loop endif endif if Exclui if Empty(VS3->VS3_DOCSDB) DbSelectArea("VS3") DBSkip() loop Endif Endif if VS3->(FieldPos("VS3_RESERV")) > 0 if Len(aVetSeq) > 0 if lRes == .t. if aScan(aVetSeq,{ |x| x == VS3->VS3_SEQUEN } ) == 0 DBSelectArea("VS3") DBSkip() loop endif else if aVetSeq[1] == "9999" if Alltrim(VS3->VS3_RESERV) != "1" .and. !lObrRes DBSelectArea("VS3") DBSkip() loop endif else if aScan(aVetSeq,{ |x| x == VS3->VS3_SEQUEN } ) == 0 .and. !lObrRes DBSelectArea("VS3") DBSkip() loop endif endif endif endif if lRes == .t. if VS3->VS3_RESERV == "1" .and. Len(aVetSeq) == 0 DBSelectArea("VS3") DBSkip() loop endif endif endif // DbSelectArea("SB1") DbSetOrder(7) DBSeek(xFilial("SB1")+VS3->VS3_GRUITE+VS3->VS3_CODITE) DbSetOrder(1) // DbSelectArea("SB5") DbSetOrder(1) DbSeek( xFilial("SB5") + SB1->B1_COD ) // // sequencia // produto, descricao, unidade de medida, local/localizacao origem // produto, descricao, unidade de medida, local/localizacao destino // numero de serie, lote, sublote, data de validade, qunatidade // quantidade na 2 unidade, estorno, numero de sequencia If Exclui .and. Localiza(SB1->B1_COD) cLocalDis := GetMv( "MV_RESITE" )+Space(TamSx3("B2_LOCAL")[1]-Len(GetMv("MV_RESITE"))) cLocalRes := VS3->VS3_LOCAL Else cLocalDis := VS3->VS3_LOCAL cLocalRes := GetMv( "MV_RESITE" )+Space(TamSx3("B2_LOCAL")[1]-Len(GetMv("MV_RESITE"))) Endif // // 07/01/2014 - Manoel/Andre/Otavio - Quando é feito o cancelamento de um Orçamento ainda não Faturado e sem localizacão If !Localiza(SB1->B1_COD) .and. !lRes if Exclui lCanc := .t. Endif Exclui := .f. Endif // cLote := "" cNumLote := "" if VS3->(FieldPos("VS3_LOTECT"))> 0 if !Empty(VS3->VS3_LOTECT) cLote := VS3->VS3_LOTECT cNumLote := VS3->VS3_NUMLOT Else If lCtrlLote .and. Rastro( SB1->B1_COD ) DBSelectArea("VS3") DBSkip() loop endif endif endif if VS3->(FieldPos("VS3_LOCALI")) > 0 .and. !Empty(VS3->VS3_LOCALI) If lVerConf aVetLocPec := {{VS3->VS3_LOCALI,VS3->VS3_QTDCON}} Else If lCtrlLote .and. Rastro( SB1->B1_COD ) aVetLocPec := {{VS3->VS3_LOCALI,VS3->VS3_QTDITE}} Else aVetLocPec := {{VS3->VS3_LOCALI,VS3->VS3_QTDITE-IIF( VS3->(FieldPos("VS3_QTDAGU")) > 0, VS3->VS3_QTDAGU+VS3->VS3_QTDTRA,0)}} Endif Endif else If lVerConf aVetLocPec := OX001PRAUTLC(SB1->B1_COD,IIf(lRes.or.(Exclui.and. Len(aVetSeq) == 0),cLocalDis,cLocalRes),VS3->VS3_QTDCON,cLote,cNumLote) // Funcao de Priorizacao Automatica das Localizacoes Else aVetLocPec := OX001PRAUTLC(SB1->B1_COD,IIf(lRes.or.(Exclui.and. Len(aVetSeq) == 0),cLocalDis,cLocalRes),VS3->VS3_QTDITE-IIF( VS3->(FieldPos("VS3_QTDAGU")) > 0, VS3->VS3_QTDAGU+VS3->VS3_QTDTRA,0),cLote,cNumLote) // Funcao de Priorizacao Automatica das Localizacoes Endif If Len(aVetLocPec) == 1 .and. aVetLocPec[1,1] == "" .and. aVetLocPec[1,2] == 0 If lVerConf aVetLocPec := {{"",VS3->VS3_QTDCON}} Else If lCtrlLote .and. Rastro( SB1->B1_COD ) aVetLocPec := {{"",VS3->VS3_QTDITE}} Else aVetLocPec := {{"",VS3->VS3_QTDITE-IIF( VS3->(FieldPos("VS3_QTDAGU")) > 0, VS3->VS3_QTDAGU+VS3->VS3_QTDTRA,0)}} Endif Endif Endif endif // nQtAtend := 0 for iVLP := 1 to Len(aVetLocPec) nQtAtend += aVetLocPec[iVLP,2] Next If lVerConf If VS3->VS3_QTDCON > nQtAtend if VS3->(FieldPos("VS3_RESERV")) > 0 reclock("VS3",.f.) VS3->VS3_RESERV := "1" msunlock() endif MsgStop(STR0238+CHR(13)+CHR(10)+VS3->VS3_GRUITE+" "+VS3->VS3_CODITE,STR0025) Return "" Endif Else If VS3->VS3_QTDITE-IIF( VS3->(FieldPos("VS3_QTDAGU")) > 0, VS3->VS3_QTDAGU+VS3->VS3_QTDTRA,0) > nQtAtend if VS3->(FieldPos("VS3_RESERV")) > 0 reclock("VS3",.f.) VS3->VS3_RESERV := "1" msunlock() endif MsgStop(STR0238+CHR(13)+CHR(10)+VS3->VS3_GRUITE+" "+VS3->VS3_CODITE,STR0025) Return "" Endif Endif for iVLP := 1 to Len(aVetLocPec) If lRes.or.Exclui cLocalizDis := aVetLocPec[iVLP,1] Else cLocalizDis := FM_SQL("SELECT SDB.DB_LOCALIZ FROM "+RetSQLName("SDB")+" SDB WHERE SDB.DB_FILIAL='"+xFilial("SDB")+"' AND SDB.DB_PRODUTO ='"+SB1->B1_COD+"' AND SDB.DB_LOCAL ='"+VS3->VS3_LOCAL+"' AND SDB.DB_DOC ='"+VS3->VS3_DOCSDB+"' AND SDB.D_E_L_E_T_=' '") Endif cLocalizRes := If(Exclui,FM_PRODSBZ(SB1->B1_COD,"SB5->B5_LOCALI2"),IIf(Localiza(SB1->B1_COD),GetMv( "MV_RESLOC" )+Space(TamSx3("B5_LOCALI2")[1]-Len(GetMv("MV_RESLOC"))),Space(15))) If Empty(cLocalizRes) cQuery := "SELECT SBF.BF_LOCALIZ FROM "+RetSqlName("SBF")+" SBF WHERE SBF.BF_FILIAL = '"+xFilial("SBF")+"' AND " cQuery += "SBF.BF_PRODUTO = '"+SB1->B1_COD+"' AND SBF.BF_LOCAL = '"+VS3->VS3_LOCAL+"' AND SBF.BF_QUANT > 0 AND " If !Empty(cLote) cQuery += "SBF.BF_LOTECTL = '"+cLote+"' AND " Endif If !Empty(cNumLote) cQuery += "SBF.BF_NUMLOTE = '"+cNumLote+"' AND " Endif cQuery += "SBF.D_E_L_E_T_=' ' ORDER BY SBF.BF_PRIOR" cLocalizRes := Alltrim(FM_SQL(cQuery)) Endif IF ExistBlock("PERESITE") // Alterado por Manoel/Thiago pois no cliente Jaracatia estava sendo chamado o MATA261 2X (Alteração temporaria pois o Rubens esta revendo o processo de reserva) nVReserva := ExecBlock("PERESITE",.f.,.f.,{"OFIXX001"}) nQtdLocPec := aVetLocPec[iVLP,2] - If(lRes .or. lCanc,nVReserva,0) Else nQtdLocPec := aVetLocPec[iVLP,2] Endif nQtdAgu := IIF( VS3->(FieldPos("VS3_QTDAGU")) > 0, VS3->VS3_QTDAGU+VS3->VS3_QTDTRA,0) If Exclui .and. Localiza(SB1->B1_COD)// .and. Empty(VS3->VS3_LOCALI) lRes := .f. cQuery := "SELECT SDB.DB_LOCAL, SDB.DB_LOCALIZ, SDB.DB_QUANT,SDB.DB_NUMSEQ, SDB.DB_TM FROM "+RetSqlName("SDB")+" SDB WHERE SDB.DB_FILIAL = '"+xFilial("SDB")+"' AND " cQuery += "SDB.DB_PRODUTO = '"+SB1->B1_COD+"' AND SDB.DB_DOC = '"+VS3->VS3_DOCSDB+"' AND SDB.DB_QUANT > 0 AND " cQuery += "SDB.D_E_L_E_T_ = ' ' ORDER BY SDB.R_E_C_N_O_ " dbUseArea( .T., "TOPCONN", TcGenQry( ,, cQuery ), cQAlias, .F., .T. ) nNumLeitura := 0 Do While !( cQAlias )->( Eof() ) If ( cQAlias )->( DB_TM ) < "500" cLocalDis := ( cQAlias )->( DB_LOCAL ) cLocalizDis := ( cQAlias )->( DB_LOCALIZ ) Else cLocalRes := ( cQAlias )->( DB_LOCAL ) cLocalizRes := ( cQAlias )->( DB_LOCALIZ ) Endif nNumLeitura++ If nNumLeitura <> 1 nNumLeitura := 0 Endif If nNumLeitura == 0 if (lVerConf .and. VS3->VS3_QTDCON > 0) .or. (!lVerConf .and. VS3->VS3_QTDITE-nQtdAgu > 0) // AADD( aItensNew , Array(nTamAEstq) ) nPosAEstq := Len(aItensNew) // Produto Origem aItensNew[nPosAEstq,01] := SB1->B1_COD aItensNew[nPosAEstq,02] := SB1->B1_DESC aItensNew[nPosAEstq,03] := SB1->B1_UM aItensNew[nPosAEstq,04] := IIf(lRes.or.(Exclui.and. Len(aVetSeq) == 0),cLocalDis,cLocalRes) aItensNew[nPosAEstq,05] := IIf(lRes.or.(Exclui.and. Len(aVetSeq) == 0),cLocalizDis,cLocalizRes) // Produto Destino aItensNew[nPosAEstq,06] := SB1->B1_COD aItensNew[nPosAEstq,07] := SB1->B1_DESC aItensNew[nPosAEstq,08] := SB1->B1_UM aItensNew[nPosAEstq,09] := IIf(lRes.or.(Exclui.and. Len(aVetSeq) == 0),cLocalRes,cLocalDis) If nPDevLoc == 0 .or. nPDevLoc == 2 // Define se quando ocorrer um estorno de movimento com controle de localizacao deve-se: 0-Redistribuir, 1-Localizacao Original, 2-Perguntar. aItensNew[nPosAEstq,10] := IIF(lRes.or.(Exclui.and. Len(aVetSeq) == 0),cLocalizRes,"") Else aItensNew[nPosAEstq,10] := IIF(lRes.or.(Exclui.and. Len(aVetSeq) == 0),cLocalizRes,cLocalizDis) EndIf // aItensNew[nPosAEstq,11] := "" aItensNew[nPosAEstq,12] := IIf(!Empty(VS3->VS3_LOTECT),VS3->VS3_LOTECT,"") aItensNew[nPosAEstq,13] := IIf(!Empty(VS3->VS3_NUMLOT),VS3->VS3_NUMLOT,"") aItensNew[nPosAEstq,14] := IIf(!Empty(VS3->VS3_DTVALI),VS3->VS3_DTVALI,cTod("")) // criavar("D3_LOTECTL") aItensNew[nPosAEstq,15] := criavar('D3_POTENCI') aItensNew[nPosAEstq,16] := ( cQAlias )->( DB_QUANT ) aItensNew[nPosAEstq,17] := criavar("D3_QTSEGUM") aItensNew[nPosAEstq,18] := criavar("D3_ESTORNO") aItensNew[nPosAEstq,19] := criavar("D3_NUMSEQ") aItensNew[nPosAEstq,20] := IIf(!Empty(VS3->VS3_LOTECT),VS3->VS3_LOTECT,criavar("D3_LOTECTL")) // criavar("D3_LOTECTL") aItensNew[nPosAEstq,21] := aItensNew[nPosAEstq,14] nUltPos := 21 If l261IntWMS aItensNew[nPosAEstq,++nUltPos] := criavar("D3_SERVIC") EndIf aItensNew[nPosAEstq,++nUltPos] := criavar("D3_ITEMGRD") If SD3->(FieldPos("D3_IDDCF"))>0 .And. l261IntWMS aItensNew[nPosAEstq,++nUltPos] := criavar("D3_IDDCF") EndIf If SD3->(FieldPos("D3_OBSERVA")) <> 0 aItensNew[nPosAEstq,++nUltPos] := criavar("D3_OBSERVA") EndIf aadd(aRecVS3,VS3->(Recno())) //POSICAO 12 - lotectl //POSICAO 13 - numlot If ( ExistBlock("OX001ARS") ) aAuxItens := ExecBlock("OX001ARS",.F.,.F.,{aClone(aItensNew)}) If ( ValType(aAuxItens) == "A" ) aItensNew := aClone(aAuxItens) EndIf EndIf EndIf Endif ( cQAlias )->( DbSkip() ) Enddo ( cQAlias )->( DbCloseArea() ) Else if ((lVerConf .and. VS3->VS3_QTDCON > 0) .or. (!lVerConf .and. VS3->VS3_QTDITE-nQtdAgu > 0) .or. Len(aVetSeq) > 0) .AND. Nqtdlocpec > 0 // AADD( aItensNew , Array(nTamAEstq) ) nPosAEstq := Len(aItensNew) // Produto Origem aItensNew[nPosAEstq,01] := SB1->B1_COD aItensNew[nPosAEstq,02] := SB1->B1_DESC aItensNew[nPosAEstq,03] := SB1->B1_UM aItensNew[nPosAEstq,04] := IIf(lRes.or.(Exclui.and. Len(aVetSeq) == 0),cLocalDis,cLocalRes) aItensNew[nPosAEstq,05] := IIf(lRes.or.(Exclui.and. Len(aVetSeq) == 0),cLocalizDis,cLocalizRes) // Produto Destino aItensNew[nPosAEstq,06] := SB1->B1_COD aItensNew[nPosAEstq,07] := SB1->B1_DESC aItensNew[nPosAEstq,08] := SB1->B1_UM aItensNew[nPosAEstq,09] := IIf(lRes.or.(Exclui.and. Len(aVetSeq) == 0),cLocalRes,cLocalDis) If nPDevLoc == 0 .or. nPDevLoc == 2 // Define se quando ocorrer um estorno de movimento com controle de localizacao deve-se: 0-Redistribuir, 1-Localizacao Original, 2-Perguntar. aItensNew[nPosAEstq,10] := IIf(lRes.or.(Exclui.and. Len(aVetSeq) == 0),cLocalizRes,"") Else aItensNew[nPosAEstq,10] := IIf(lRes.or.(Exclui.and. Len(aVetSeq) == 0),cLocalizRes,cLocalizDis) EndIf // aItensNew[nPosAEstq,11] := "" aItensNew[nPosAEstq,12] := IIf(!Empty(VS3->VS3_LOTECT),VS3->VS3_LOTECT,"") aItensNew[nPosAEstq,13] := IIf(!Empty(VS3->VS3_NUMLOT),VS3->VS3_NUMLOT,"") aItensNew[nPosAEstq,14] := IIf(!Empty(VS3->VS3_DTVALI),VS3->VS3_DTVALI,cTod("")) // criavar("D3_LOTECTL") aItensNew[nPosAEstq,15] := criavar('D3_POTENCI') aItensNew[nPosAEstq,16] := nQtdLocPec aItensNew[nPosAEstq,17] := criavar("D3_QTSEGUM") aItensNew[nPosAEstq,18] := criavar("D3_ESTORNO") aItensNew[nPosAEstq,19] := criavar("D3_NUMSEQ") aItensNew[nPosAEstq,20] := IIf(!Empty(VS3->VS3_LOTECT),VS3->VS3_LOTECT,criavar("D3_LOTECTL")) aItensNew[nPosAEstq,21] := aItensNew[nPosAEstq,14] nUltPos := 21 If l261IntWMS aItensNew[nPosAEstq,++nUltPos] := criavar("D3_SERVIC") EndIf aItensNew[nPosAEstq,++nUltPos] := criavar("D3_ITEMGRD") If SD3->(FieldPos("D3_IDDCF"))>0 .And. l261IntWMS aItensNew[nPosAEstq,++nUltPos] := criavar("D3_IDDCF") EndIf If SD3->(FieldPos("D3_OBSERVA")) <> 0 aItensNew[nPosAEstq,++nUltPos] := criavar("D3_OBSERVA") EndIf aadd(aRecVS3,VS3->(Recno())) //POSICAO 12 - lotectl //POSICAO 13 - numlot If ( ExistBlock("OX001ARS") ) aAuxItens := ExecBlock("OX001ARS",.F.,.F.,{aClone(aItensNew)}) If ( ValType(aAuxItens) == "A" ) aItensNew := aClone(aAuxItens) EndIf EndIf Endif endif Next DBSelectArea("VS3") DBSkip() enddo // SB1->(DBSetOrder(1)) // If (ExistBlock("OX001AP")) aItensNew := ExecBlock("OX001AP", .f., .f., {aItensNew}) EndIf | ||||||
Programa Fonte: | OFIXX001.PRW | ||||||
Função: | OX001RESITE() | ||||||
Parâmetros: |
| ||||||
Retorno: |
|
Exemplo:
Include totvs.ch
User Function OX001AP()
Local aItensAlt := ParamIxb[1]
MsgInfo("Ponto de Entrada OX001AP executado com sucesso!")
Return aItensAlt