Árvore de páginas

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

aItensNew

Matriz

Campos da SD3 que deverão ser atualizados ou inseridos novos campos pelo ponto de entrada para serem utilizados no ExecAuto da rotina de transferência de peças entre armazéns (MATA261).

Retorno:
NomeTipoDescrição

aItensNew

Matriz

Campos da SD3 atualizados pelo ponto de entrada para serem utilizados no ExecAuto da rotina de transferência de peças entre armazéns (MATA261).

Exemplo:

Include totvs.ch

User Function OX001AP()


Local aItensAlt := ParamIxb[1]


MsgInfo("Ponto de Entrada OX001AP executado com sucesso!")


Return aItensAlt