Árvore de páginas

Ponto de Entrada

Descrição:

Este ponto de entrada está localizado na rotina Liberaçao OS (OFIOM140) e é executado no momento da liberação 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 \ Liberação OS

Eventos:

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

//³ Verifica se o todos os TT foram liberados ³

//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

If FS_DISOSV()


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

//³PL 31 - Shark - Rubens ³

//³Verifica se ficou algum residuo de reserva sem estornar³

//³So Verifica se todas as pecas importadas de ORCAMENTO ³

//³Tiverem sido requisitadas na OS ³

//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

nQtdeVSJ := FM_SQL("SELECT COUNT(*) " +;

" FROM " + RetSQLName("VSJ") +;

" WHERE VSJ_FILIAL = '" + xFilial("VSJ") + "'" +;

" AND VSJ_NUMOSV = '" + VO1->VO1_NUMOSV + "'" +;

" AND VSJ_QTDITE > 0" +;

" AND D_E_L_E_T_ = ' '")

IF nQtdeVSJ == 0 .and. FM_SALDORESV(,,VO1->VO1_NUMOSV) > 0


VE6->(dbSeek(xFilial("VE6")+VO1->VO1_NUMOSV+"3"))

While !VE6->(Eof()) .and. VE6->VE6_FILIAL == xFilial("VE6");

.and. VE6->VE6_NUMOSV == VO1->VO1_NUMOSV;

.and. VE6->VE6_INDREG == "3"


//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

//³Processa somente registro de reserva com saldo³

//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

IF (VE6->VE6_QTDITE - VE6->VE6_QTDATE - VE6->VE6_QTDEST) > 0


DbSelectArea("SB1")

DbSeek( xFilial("SB1") + VE6->VE6_GRUITE + VE6->VE6_CODITE )

oPeca:LoadB1()


DbSelectArea("SB2")

dbSetOrder(1)


SB2->(DbSeek(xFilial("SB2")+SB1->B1_COD+GetMv("MV_RESITE")))

nSaldo := SaldoSB2()


nQtdEst := FM_SALDORESV(VSJ->VSJ_GRUITE,VSJ->VSJ_CODITE,VO1->VO1_NUMOSV,VSJ->VSJ_LOTECT, VSJ->VSJ_NUMLOT)

If nQtdEst > nSaldo

nQtdEst := nSaldo

EndIf


IF nQtdEst > 0


// 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] := GetMv( "MV_RESITE" )+Space(TamSx3("B2_LOCAL")[1]-Len(GetMv("MV_RESITE")))

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] := VE6->VE6_NUMSER

aItensNew[nPosAEstq,12] := VE6->VE6_LOTECT

aItensNew[nPosAEstq,13] := VE6->VE6_NUMLOT

aItensNew[nPosAEstq,14] := IIf( !Empty(VE6->VE6_LOTECT) , oPeca:LoteDtValid(VE6->VE6_LOTECT) , criavar('D3_DTVALID') )

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

aItensNew[nPosAEstq,16] := nQtdEst

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

//

ENDIF


// Atualiza a quantidade estornada do registro de ocorrencia ...

dbSelectArea("VE6")

RecLock("VE6",.f.)

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

MsUnLock()

//


ENDIF


VE6->(dbSkip())

End


ENDIF


EndIf


If (ExistBlock("OM140AP"))

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

EndIf

Programa Fonte:

OFIOM140.PRW

Função:

FS_LIBOSV()

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


Local aItensAlt := ParamIxb[1]


MsgInfo("Ponto de Entrada OM140AP executado com sucesso!","Atenção")


Return aItensAlt