Árvore de páginas

Ponto de Entrada

Descrição:

Este ponto de entrada está localizado na rotina Cancelamento OS (OFIOM150) e é executado no momento do cancelamento de um tipo de tempo que contenha 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 Oficina \ Cancelamento OS

Eventos:

Static Function OM150ESTRE(cNumOsv)


Local aItensNew := {}

Local nQtdEst

Local nSaldoSB2

Local aProdEst := {} // Contem os itens para estorno

Local nPosProdEst


Local oPeca := DMS_Peca():New()


Local nTamAEstq := 0

Local nPosAEstq

Local nUltPos

Local l261IntWMS := a261IntWMS()


///////////////////////////////////////////////////

// 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

///////////////////////////////////////////////////


dbSelectArea("SB1")

dbSetOrder(7)


dbSelectArea("SB2")

dbSetOrder(1)


dbSelectArea("SB5")

dbSetOrder(1)


cLocal := GetMv("MV_RESITE")


dbSelectArea("VE6")

dbSetOrder(5)

VE6->(dbSeek( xFilial("VE6") + cNumOsv + "3"))

While !VE6->(Eof()) .and. VE6->VE6_FILIAL == xFilial("VE6") .and. VE6->VE6_NUMOSV == cNumOsv .and. VE6->VE6_INDREG == "3"


// Estorna somente a quantidade não requisitada

IF VE6->VE6_QTDITE <= ( VE6->VE6_QTDATE + VE6->VE6_QTDEST )

VE6->(dbSkip())

Loop

EndIf

//


nPosProdEst := aScan( aProdEst , { |x| x[1] == VE6->VE6_GRUITE .and. x[2] == VE6->VE6_CODITE .and. x[4] == VE6->VE6_LOTECT .and. X[5] == VE6->VE6_NUMLOT .and. x[6] == VE6->VE6_NUMSER } )

If nPosProdEst == 0

AADD( aProdEst , { VE6->VE6_GRUITE , VE6->VE6_CODITE , 0 , VE6->VE6_LOTECT , VE6->VE6_NUMLOT , VE6->VE6_NUMSER } )

nPosProdEst := Len(aProdEst)

EndIf

aProdEst[nPosProdEst,3] += (VE6->VE6_QTDITE - VE6->VE6_QTDATE)


// Atualiza a quantidade estornada

RecLock("VE6",.f.)

VE6->VE6_QTDEST += (VE6->VE6_QTDITE - VE6->VE6_QTDATE)

MsUnLock()


VE6->(dbSkip())

EndDo


For nPosProdEst := 1 to Len(aProdEst)


DbSelectArea("SB1")

DbSeek( xFilial("SB1") + aProdEst[nPosProdEst,1] + aProdEst[nPosProdEst,2] )

oPeca:LoadB1()


// Adiciona cabecalho com numero do documento e data da transferencia modelo II

If Len(aItensNew) == 0

aadd (aItensNew,{ NextNumero("SD3",2,"D3_DOC",.t.), ddatabase})

EndIf


DbSelectArea("SB5")

DbSeek( xFilial("SB5") + SB1->B1_COD )


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] := PadR(cLocal, TamSx3("B2_LOCAL")[1] )

aItensNew[nPosAEstq,05] := IIf(Localiza(SB1->B1_COD),GetMv("MV_RESLOC")+Space(TamSx3("B5_LOCALI2")[1]-Len(GetMv("MV_RESLOC"))),Space(15))

// Produto Destino

aItensNew[nPosAEstq,06] := SB1->B1_COD

aItensNew[nPosAEstq,07] := SB1->B1_DESC

aItensNew[nPosAEstq,08] := SB1->B1_UM

aItensNew[nPosAEstq,09] := FM_PRODSBZ(SB1->B1_COD,"SB1->B1_LOCPAD")

aItensNew[nPosAEstq,10] := IIf(Localiza(SB1->B1_COD),FM_PRODSBZ(SB1->B1_COD,"SB5->B5_LOCALI2"),Space(15))

//

aItensNew[nPosAEstq,11] := aProdEst[nPosProdEst,6] // Numero de Serie

aItensNew[nPosAEstq,12] := aProdEst[nPosProdEst,4] // Lote

aItensNew[nPosAEstq,13] := aProdEst[nPosProdEst,5] // Sub-Lote

aItensNew[nPosAEstq,14] := IIf( !Empty(aProdEst[nPosProdEst,4]) , oPeca:LoteDtValid(aProdEst[nPosProdEst,4]) , criavar('D3_DTVALID') )

aItensNew[nPosAEstq,15] := criavar('D3_POTENCI')

aItensNew[nPosAEstq,16] := aProdEst[nPosProdEst,3]

aItensNew[nPosAEstq,17] := criavar("D3_QTSEGUM")

aItensNew[nPosAEstq,18] := criavar("D3_ESTORNO")

aItensNew[nPosAEstq,19] := criavar("D3_NUMSEQ")

aItensNew[nPosAEstq,20] := 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


Next nPosProdEst


If (ExistBlock("OM150AP"))

aItensNew := ExecBlock("OM150AP", .f., .f., {aItensNew})

EndIf

Programa Fonte:

OFIOM150.PRW

Função:

OM150ESTRE()

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 OM150AP()


Local aItensAlt := ParamIxb[1]


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


Return aItensAlt