Árvore de páginas

Ponto de Entrada

Descrição:

Este ponto de entrada está localizado na rotina Documento Entrada (MATA103) e é executado no momento da exclusão de uma nota fiscal de entrada por compra quando esta possui um pedido de compra vinculado originado de orçamento balcão que gerou sugestão de compras. 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 \ Movimentos \ Documento Entrada

Eventos:

Function FM_ESTRESITE(_cProduto, _cLocal, _cTES, _cPedC, _cItemPedC, _cForn, _cLoja, _cSerie, _cDoc)


Local aArea := {}, aItensNew

Local nQtdEstorno, cQuery, nSaldoResv


Local nTamAEstq := 0

Local nPosAEstq

Local nUltPos

Local oPeca := DMS_Peca():New()

Local l261IntWMS := a261IntWMS()


Private lMsErroAuto := .f.


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

//³Se nao foi informado o pedido, nao fez reserva³

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

IF Empty(_cPedC)

Return .t.

ENDIF


dbSelectArea("SF4")

dbSetOrder(1)

IF !SF4->(dbSeek(xFilial("SF4") + _cTES))

Return .t.

ENDIF


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

//³TES não movimenta estoque, nao faz nada³

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

IF SF4->F4_ESTOQUE <> "S"

Return .t.

ENDIF


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

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

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


aArea := sGetArea(aArea,"SB1")

aArea := sGetArea(aArea,"SB2")

aArea := sGetArea(aArea,"SB5")

aArea := sGetArea(aArea,"SF4")

If !Empty(Alias())

aArea := sGetArea(aArea,Alias())

EndIf


dbSelectArea("SB1")

dbSetOrder(1)

dbSeek(xFilial("SB1")+_cProduto)

oPeca:LoadB1()


dbSelectArea("VE6")

dbSetOrder(6) // VE6_FILIAL+VE6_PEDCOM+VE6_ITEMPC


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

//³Monta um cursor com os registros que sofrerão alteracao³

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

cQuery := "SELECT VE6.R_E_C_N_O_ NUMREG, VE6_NUMOSV, VE6_NUMORC, VE6_PEDCOM, VE6_ITEMPC"

cQuery += " FROM "+RetSQLName("VE6")+" VE6"

cQuery += " WHERE VE6_FILIAL = '" + xFilial("VE6") + "'"

cQuery += " AND VE6_PEDCOM = '" + _cPedC + "'"

cQuery += " AND VE6_ITEMPC = '" + _cItemPedC + "'"

cQuery += " AND VE6_CODFOR = '" + _cForn + "'"

cQuery += " AND VE6_LOJFOR = '" + _cLoja + "'"

cQuery += " AND VE6_SERNFI LIKE '" + _cSerie + "%'"

cQuery += " AND VE6_NUMNFI = '" + _cDoc + "'"

cQuery += " AND VE6_INDREG IN ('3', '4') " // S O M E N T E R E S E R V A e Bo

cQuery += " AND VE6.D_E_L_E_T_ = ' '"

cQuery += " ORDER BY VE6_NUMOSV, VE6_NUMORC, VE6_ORIREQ"

TCQUERY cQuery NEW ALIAS "TVE6"

dbSelectArea("TVE6")

While !TVE6->(Eof())


dbSelectArea("VE6")

VE6->(dbGoTo(TVE6->NUMREG))


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

//³Estorna somente a dif. entre a qtde reservada e a qtde nao atendida, ³

//³pois o que tiver sido atendido, deve ser devolvido antes de excluir a nota³

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

nQtdEstorno := VE6->VE6_QTDITE - VE6->VE6_QTDATE


IF nQtdEstorno > 0

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

//³Movimentacao interna do Item ³

//³Estorna movimento, voltando a peca do almox. de reserva para o almox.³

//³que foi dado entrada a nota fiscal ³

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

aItensNew:={}

DbSelectArea("SB5")

DbSetOrder(1)

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

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 O R I G E M

// produto, descricao, unidade de medida,

// local/localizacao D E S T I N O

// numero de serie, lote, sublote, data de validade,

// Q U A N T I D A D E

// 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 ] := 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 ] := _cLocal

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 ] := nQtdEstorno

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("VFUNB6"))

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

EndIf

Programa Fonte:

VEIFUNB.PRW

Função:

FM_ESTRESITE()

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


Local aItensAlt := ParamIxb[1]


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


Return aItensAlt