Árvore de páginas

Ponto de Entrada

Descrição:

Este ponto de entrada está localizado na rotina Transf. de Peças (OFIOM430) e é executado no momento da efetivação da transferência de peças de uma filial para a outra quando esta transferencia foi originada a partir de um orçamento de venda balcão da filial destino. 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 \ Transf. de Peças

Eventos:

Static Function FS_VS3VDD(nQtdOriSD1)

Local nY := 0

Local aVS3 := {}


Local nTamAEstq := 0

Local nPosAEstq

Local nUltPos

Local oPeca := DMS_Peca():New()


Local lCtrlLote := GetNewPar("MV_RASTRO","N") == "S"

Local nQtdItem := 0

Local cSql := ""

Local cSQLSD1 := "SQLSD1"

Local nQtdVS3 := 0

Local lAtuVDD := .t.

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

DBSetOrder(2)

If DBSeek(VDD->VDD_FILORC + VDD->VDD_NUMORC + VDD->VDD_GRUPO + VDD->VDD_CODITE)


cSql := "SELECT SUM(VS3_QTDITE) FROM "+RetSQLName("VS3")+" VS3 WHERE VS3.VS3_FILIAL='"+VDD->VDD_FILORC+"' AND VS3.VS3_NUMORC= '"+VDD->VDD_NUMORC+"' AND "

cSql += "VS3.VS3_GRUITE = '"+VDD->VDD_GRUPO+"' AND VS3.VS3_CODITE = '"+VDD->VDD_CODITE+"' AND VS3.D_E_L_E_T_ = ' ' "

nQtdVS3 := FM_SQL(cSql)


SB1->(DbSetOrder(7))

SB1->(DBSeek(xFilial("SB1")+VS3->VS3_GRUITE+VS3->VS3_CODITE))

SB1->(DbSetOrder(1))

oPeca:LoadB1()


cSql := "SELECT SD1.R_E_C_N_O_ RECSD1 FROM "+RetSQLName("SD1")+" SD1 WHERE SD1.D1_FILIAL='"+VDD->VDD_FILORC+"' AND SD1.D1_DOC= '"+VDD->VDD_NUMNFI+"' AND "

cSql += "SD1.D1_SERIE = '"+VDD->VDD_SERNFI+"' AND SD1.D1_FORNECE = '"+VDD->VDD_CODFOR+"' AND SD1.D1_LOJA = '"+VDD->VDD_LOJA+"' AND SD1.D1_COD = '"+SB1->B1_COD+"' AND "

cSql += "SD1.D_E_L_E_T_ = ' ' "

dbUseArea( .T., "TOPCONN", TcGenQry( ,, cSql ), cSQLSD1 , .F., .T. )


While (cSqlSD1)->(!eof()) .and. nQtdVS3 > 0


SD1->(DbGoTo((cSqlSD1)->(RECSD1)))

lAtuVDD := .t.


if lCtrlLote .and. !Empty(SD1->D1_LOTECTL) .and. VS3->(FieldPos("VS3_LOTECT"))> 0


nSaldoLote := 0

nQtdOri := VS3->VS3_QTDITE

If Rastro( SB1->B1_COD )

if Empty(VS3->VS3_LOTECT)

lUsaVenc:= SuperGetMv('MV_LOTVENC')=='S'

aSaldos := SldPorLote(SB1->B1_COD,VS3->VS3_LOCAL,VS3->VS3_QTDITE,NIL,SD1->D1_LOTECTL,SD1->D1_NUMLOTE,"","",NIL,NIL,NIL,lUsaVenc,nil,nil,dDataBase)

If Len(aSaldos) == 0

lAtuVDD := .f.

(cSqlSD1)->(DbSkip())

Loop

Endif

DbSelectArea("VS3")

RecLock("VS3",.f.)

VS3->VS3_LOTECT := aSaldos[1,1]

VS3->VS3_NUMLOT := aSaldos[1,2]

VS3->VS3_QTDITE := aSaldos[1,5]

VS3->VS3_QTDINI := VS3->VS3_QTDITE

VS3->VS3_VALDES := (VS3->VS3_VALDES/nQtdOri)* VS3->VS3_QTDITE

VS3->VS3_VALTOT := (VS3->VS3_QTDITE * VS3->VS3_VALPEC)-VS3->VS3_VALDES

MsUnLock()

Else

cSql := "SELECT VS3.R_E_C_N_O_ RECVS3 FROM "+RetSQLName("VS3")+" VS3 WHERE VS3.VS3_FILIAL='"+VDD->VDD_FILORC+"' AND VS3.VS3_NUMORC= '"+VDD->VDD_NUMORC+"' AND "

cSql += "VS3.VS3_GRUITE = '"+VDD->VDD_GRUPO+"' AND VS3.VS3_CODITE = '"+VDD->VDD_CODITE+"' AND VS3.VS3_LOTECT = '"+SD1->D1_LOTECTL+"' AND VS3.D_E_L_E_T_ = ' ' "

nRecNoVS3 := FM_SQL(cSql)

if nRecNoVS3 == 0

aVS3 := {}

lUsaVenc:= SuperGetMv('MV_LOTVENC')=='S'

aSaldos := SldPorLote(SB1->B1_COD,VS3->VS3_LOCAL,VS3->VS3_QTDITE,NIL,SD1->D1_LOTECTL,SD1->D1_NUMLOTE,"","",NIL,NIL,NIL,lUsaVenc,nil,nil,dDataBase)

If Len(aSaldos) == 0

lAtuVDD := .f.

(cSqlSD1)->(DbSkip())

Loop

Endif

For nY := 1 To VS3->(FCount())

aadd(aVS3,VS3->(FieldGet(nY)))

Next nY

cSql := "SELECT SUM(D1_QUANT) FROM "+RetSQLName("SD1")+" SD1 WHERE SD1.D1_FILIAL='"+VDD->VDD_FILORC+"' AND SD1.D1_DOC= '"+VDD->VDD_NUMNFI+"' AND "

cSql += "SD1.D1_SERIE = '"+VDD->VDD_SERNFI+"' AND SD1.D1_FORNECE = '"+VDD->VDD_CODFOR+"' AND SD1.D1_LOJA = '"+VDD->VDD_LOJA+"' AND SD1.D1_COD = '"+SB1->B1_COD+"' AND "

cSql += "SD1.D_E_L_E_T_ = ' ' "

nQtdOri := FM_SQL(cSql)

RecLock("VS3",.T.)

For nY := 1 To Len(aVS3)

If !"_MSIDENT"$VS3->(FieldName(nY))

FieldPut(nY,aVS3[nY])

EndIf

Next nY

VS3->VS3_QTDITE := aSaldos[1,5]

VS3->VS3_LOTECT := aSaldos[1,1]

VS3->VS3_NUMLOT := aSaldos[1,2]

VS3->VS3_QTDRES := 0

VS3->VS3_QTDINI := VS3->VS3_QTDITE

VS3->VS3_VALDES := (VS3->VS3_VALDES/nQtdOri)* VS3->VS3_QTDITE

VS3->VS3_VALTOT := (VS3->VS3_QTDITE * VS3->VS3_VALPEC)-VS3->VS3_VALDES

MsUnLock()

Endif

Endif

Endif

Endif

//

nQtdVS3 := nQtdVS3 - VS3->VS3_QTDITE

//

if lCtrlLote .and. !Empty(SD1->D1_LOTECTL)

nQtdItem := VS3->VS3_QTDITE

Else

nQtdItem := Iif(VDD->VDD_QUANT < nQtdOriSD1,VDD->VDD_QUANT,nQtdOriSD1)

Endif

//

cDocumento := Criavar("D3_DOC")

cDocumento := IIf(Empty(cDocumento),NextNumero("SD3",2,"D3_DOC",.T.),cDocumento)

cDocumento := A261RetINV(cDocumento)


aItensNew := {}

aadd (aItensNew,{ cDocumento , ddatabase})


AADD( aItensNew , Array(nTamAEstq) )

nPosAEstq := 2

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

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

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

aItensNew[nPosAEstq,04] := SD1->D1_LOCAL

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

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

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

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

aItensNew[nPosAEstq,09] := GetMv( "MV_RESITE" )+Space(TamSx3("B2_LOCAL")[1]-Len(GetMv("MV_RESITE")))

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

aItensNew[nPosAEstq,11] := ""

aItensNew[nPosAEstq,12] := Iif(lCtrlLote .and. !Empty(SD1->D1_LOTECTL),SD1->D1_LOTECTL,"")

aItensNew[nPosAEstq,13] := ""

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

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

aItensNew[nPosAEstq,16] := nQtdItem

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

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

EndIf

Programa Fonte:

VEIFUNB.PRW

Função:

FS_VS3VDD()

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


Local aItensAlt := ParamIxb[1]


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


Return aItensAlt