Árvore de páginas

Ponto de Entrada

Descrição:

Este ponto de entrada está localizado na rotina Registr Ocorrência (OFIPM900) e é executado no momento da realização de um bloqueio de uma peça. 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 \ Registr Ocorrência

Eventos:

Function FS_VALIND(lOPM900Val,lOPM900Rel)


Local aItensNew := {} , aSaldo := {}

Local lReturn := .t.

Local nX := 0

Local cAglSug := GetNewPar("MV_MIL0053","S")

Local cAtualiza := .f.

Local cCodigo := ""

Local cFJClassif := ""


Local oPeca := DMS_Peca():New()


Local nTamAEstq := 0

Local nPosAEstq

Local nUltPos

Local l261IntWMS := a261IntWMS()


Private aMemos

Private lMsHelpAuto , lMsErroAuto, lMsFinalAuto := .f.


Default lOPM900Val := .f.

Default lOPM900Rel := .f.


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

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

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


oPedido := DMS_Pedido():New()

If TYPE('M->VE6_FORPED') != "U" .AND. M->VE6_FORPED == oPedido:GtTpPedBO() .AND. M->VE6_INDREG != '4' /* Backorder */

MsgInfo(STR0054 /* "Para sugestão de backorder utilizar tipo 4 ('Backorder') ou utilize o painel de orçamento " */, STR0032 /* Atenção */)

return .f.

EndIf


If Type("M->VE6_QTDITE") # "U"

If M->VE6_QTDITE == 0

Return( .t. )

Endif

Endif


if Type("M->VE6_GRUITE") # "U" .and. Type("M->VE6_CODITE") # "U"

cGruite := M->VE6_GRUITE

cCodite := M->VE6_CODITE

Endif



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

//³FNC 4436/2009 ³

//³Rubens - 11/09/2009 ³

//³Validacao de Req. de Compra, Origem = Oficina e Forma requer Num. OS ³

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

if M->VE6_INDREG == "0" .OR. M->VE6_INDREG == "4"

DbSelectArea("VEJ")

DbSetOrder(1)

If DbSeek( xFilial("VEJ") + M->VE6_CODMAR + M->VE6_FORPED )

if empty(M->VE6_NUMOSV) .and. VEJ->VEJ_PEDOSV == "1"

help(" ",1,"OFIPM90003") //ordem de serico nao informada

return(.f.)

endif

endif

endif


if FG_SEEK("SB1","cGruite+cCodIte",7,.f.)


If M->VE6_INDREG == "2" .Or. M->VE6_INDREG == "3"

SB2->(dbSetOrder(1))

SB2->(dbSeek(xFilial("SB2")+SB1->B1_COD+FM_PRODSBZ(SB1->B1_COD,"SB1->B1_LOCPAD")))

nSaldo := SaldoSB2()


//aSaldo := CalcEst(SB1->B1_COD,FM_PRODSBZ(SB1->B1_COD,"SB1->B1_LOCPAD"),dDataBase+1)


if nSaldo <= 0

MsgInfo(STR0030+SB1->B1_DESC+STR0031,STR0032) //"Produto -> "###" sem Estoque, Verifique..."###"Atencao!"

Return( .f. )

Endif


EndIf


Endif



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

//³Ponto de Entrada para validaca ³

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

If ( ExistBlock("OFIPMCHK") )

lReturn := ExecBlock("OFIPMCHK",.F.,.F.,{lReturn})

If !lReturn

return .f.

EndIf

EndIf


lMsErroAuto := .f.

lMsHelpAuto := .t.


Begin Transaction


DbSelectArea("SB2")

DbSetOrder(1)


DbSelectArea("SB1")

DbSetOrder(7)

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

DbSetOrder(1)

oPeca:LoadB1()


DbSelectArea("SB5")

DbSetOrder(1)

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


If M->VE6_INDREG == "2" .Or. M->VE6_INDREG == "3"


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

//³Movimentacao interna do Item ³

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

aItensNew:={}


DbSelectArea("SB1")

DbSetOrder(1)


//

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

//

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


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

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] := FM_PRODSBZ(SB1->B1_COD,"SB1->B1_LOCPAD")

aItensNew[nPosAEstq,05] := IIf(Localiza(SB1->B1_COD),FM_PRODSBZ(SB1->B1_COD,"SB5->B5_LOCALI2"),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] := IIf( M->VE6_INDREG == "2" , GetMv("MV_BLQITE") , GetMv("MV_RESITE") )

aItensNew[nPosAEstq,10] := IIf(Localiza(SB1->B1_COD),IIf( M->VE6_INDREG == "2" , GetMv("MV_BLQLOC") , GetMv("MV_RESLOC") ) , Space(15))

//

aItensNew[nPosAEstq,11] := M->VE6_NUMSER

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

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

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

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

aItensNew[nPosAEstq,16] := M->VE6_QTDITE

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


If (ExistBlock("OF900AP"))

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

EndIf

Programa Fonte:

OFIPM900.PRW

Função:

FS_VALIND()

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


Local aItensAlt := ParamIxb[1]


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


Return aItensAlt