Você está na página 1de 20

#include "COLORS.

CH"

#include "PROTHEUS.CH"

#include "APVT100.CH"

#include "TBICONN.CH"

#include "TBICODE.CH"

//--------------------------------------------------------------------------------------

/*/

{Protheus.doc} FSACDP01

Função que realiza a Armazenagem e Transferencia do Material.

@author dsm Solutions

@since 11/12/14

@version P.11

@param Nenhum

@return Nenhum

@obs Nenhum

Alterações Realizadas desde a Estruturação Inicial

------------+-----------------+---------------------------------------------------------

Data |Desenvolvedor |Motivo

------------+-----------------+---------------------------------------------------------

/*/

//---------------------------------------------------------------------------------------

User Function FSACDP01()

Local nMaxRow := Val(GetPvProfString( "TELNET", "MAXROW" , "12" , GetADV97()))

Local nMaxCol := Val(GetPvProfString( "TELNET", "MAXCOL" , "24", GetADV97()))

Local cOpcao := space(1)

VTSetSize(nMaxRow,nMaxCol)
cOpcao := Space(1)

Do While !(cOpcao == "9")

cOpcao := space(1)

VTCLEARBUFFER()

VTCLEAR() // Limpa tela

@ 0,0 VTSay "======================="

@ 1,0 VTSay " "+cFilant+ " - ARMAZ./TRANSF. "

@ 2,0 VTSay "======================="

@ 3,0 VTSay "SELECIONE A ROTINA....:"

@ 4,0 VTSay "(1) ARMAZENAR.........:"

@ 5,0 VTSay "(2) TRANSFERIR........:"

@ 6,0 VTSay "(9) SAIR..............:"

@ 7,0 VTGET cOpcao Picture "@!" Valid(cOpcao $ '1/2/9')

VTRead

If Empty(cOpcao)

VTAlert("INFORMAR OPCAO VALIDA.","Erro",.T.,5000)

Loop

Else

If cOpcao $ "1/2"

fArmTra(cOpcao)

EndIf

EndIf

EndDo

Return(Nil)

//--------------------------------------------------------------------------------------
/*/

{Protheus.doc} fArmTra

Função que realiza a Armazenagem e Transferencia do Material.

@author dsm Solutions

@since 11/12/14

@version P.11

@param Nenhum

@return Nenhum

@obs Nenhum

Alterações Realizadas desde a Estruturação Inicial

------------+-----------------+---------------------------------------------------------

Data |Desenvolvedor |Motivo

------------+-----------------+---------------------------------------------------------

/*/

//---------------------------------------------------------------------------------------

Static Function fArmTra(cOpcao)

Local cConfir := Space(1)

Local cArEndO := Space(TamSX3("D3_LOCAL")[1]+TamSX3("D3_LOCALIZ")[1])

Local cPrLoId := Space(TamSX3("D3_LOTECTL")[1]+TamSX3("D3_NUMLOTE")[1])+Space(TamSX3("D3_COD")[1])

Local cQuanti := Space(TamSX3("D3_QUANT")[1])

Local cArEndD := Space(TamSX3("D3_LOCAL")[1]+TamSX3("D3_LOCALIZ")[1])

Local cArmOri := ""

Local cArmDes := ""

Local cEndOri := ""

Local cEndDes := ""

Local cProdut := ""

Local cNuLote := ""

Local cNumIDE := ""


Local cMot := ""

//Local cDesMot := ""

Local nSaldBF := 0

SBE->(dbSetOrder(1))

Do While .T.

VTCLEARBUFFER()

VTCLEAR() // Limpa tela

cArEndO := Space(TamSX3("D3_LOCAL")[1]+TamSX3("D3_LOCALIZ")[1])

@ 0,0 VTSay "INFORME ARMAZEM E "

@ 1,0 VTSay "ENDERECO DE ORIGEM....:"

@ 2,0 VTGET cArEndO Picture "@!" Valid(!Empty(cArEndO))

@ 6,0 VTSay "(999999) SAIR"

VTRead

If (AllTrim(cArEndO) == "999999")

Exit

EndIf

cArmOri := SubStr(cArEndO,1,TamSX3("D3_LOCAL")[1])

cEndOri := SubStr(cArEndO,1+TamSX3("D3_LOCAL")[1],TamSX3("D3_LOCALIZ")[1])

//-- Valida se armazém de origem existe.

If !SBE->(MsSeek(xFilial("SBE")+cArEndO))

VTBEEP(1)

VTAlert("ARMAZEM E ENDERECO DE ORIGEM NAO EXISTE!","Erro",.T.,2000)

Loop

EndIf
VTCLEARBUFFER()

VTCLEAR() // Limpa tela

cPrLoId := Space(TamSX3("D3_LOTECTL")[1]+TamSX3("D3_NUMLOTE")[1]+TamSX3("D3_COD")[1])

@ 0,0 VTSay "INFORME O PRODUTO A "

@ 1,0 VTSay "SER MOVIMENTADO.......:"

@ 2,0 VTGET cPrLoId Picture "@!" Valid(!Empty(cPrLoId))

@ 6,0 VTSay "(999999) SAIR"

VTRead

If (AllTrim(cPrLoId) == "999999")

Exit

EndIf

cNuLote := SubStr(cPrLoId,1,TamSX3("D3_LOTECTL")[1])

cNumIDE := SubStr(cPrLoId,1+TamSX3("D3_LOTECTL")[1],TamSX3("D3_NUMLOTE")[1])

cProdut := SubStr(cPrLoId,1+TamSX3("D3_LOTECTL")[1]+TamSX3("D3_NUMLOTE")[1],TamSX3("D3_COD")[1])

VTCLEARBUFFER()

VTCLEAR() // Limpa tela

cQuanti := Space(TamSX3("D3_QUANT")[1])

@ 0,0 VTSay "INFORME A QUANTIDADE A "

@ 1,0 VTSay "SER MOVIMENTADA.......:"

@ 2,0 VTGET cQuanti Picture "@!" Valid(!Empty(cQuanti))

@ 6,0 VTSay "(999999) SAIR"

VTRead

If (AllTrim(cQuanti) == "999999")

Exit

EndIf

//-- Valida Saldo no Armazém de Origem


nSaldBF := 0

SBF->(dbSetOrder(1))

SBF->(MsSeek(xFilial("SBF")+cArmOri+cEndOri+cProdut+AvKey("","BF_NUMSERI")+cNuLote+cNumIDE)) //--
BF_FILIAL+BF_LOCAL+BF_LOCALIZ+BF_PRODUTO+BF_NUMSERI+BF_LOTECTL+BF_NUMLOTE

nSaldBF := SBFSaldo()

If nSaldBF < Val(cQuanti)

VTBEEP(1)

VTAlert("SALDO INSUFICIENTE NO ENDERECO DE ORIGEM!","Erro",.T.,2000)

Loop

EndIf

VTCLEARBUFFER()

VTCLEAR() // Limpa tela

cArEndD := Space(TamSX3("D3_LOCAL")[1]+TamSX3("D3_LOCALIZ")[1])

@ 0,0 VTSay "INFORME ARMAZEM E "

@ 1,0 VTSay "ENDERECO DE DESTINO...:"

@ 2,0 VTGET cArEndD Picture "@!" Valid(!Empty(cArEndD))

@ 6,0 VTSay "(999999) SAIR"

VTRead

If (AllTrim(cArEndD) == "999999")

Exit

EndIf

cArmDes := SubStr(cArEndD,1,TamSX3("D3_LOCAL")[1])

cEndDes := SubStr(cArEndD,1+TamSX3("D3_LOCAL")[1],TamSX3("D3_LOCALIZ")[1])

If !SBE->(MsSeek(xFilial("SBE")+cArEndD))

VTBEEP(1)

VTAlert("ARMAZEM E ENDERECO DE DESTINO NAO EXISTE!","Erro",.T.,2000)

Loop
EndIf

/*If Posicione("NNR",1,xFilial("NNR")+AvKey(cArmDes,"D3_LOCAL"),"NNR_ZMOT") = "S"

VTCLEARBUFFER()

VTCLEAR() // Limpa tela

cMot := Space(TamSX3("ZR_CODIGO")[1])

@ 0,0 VTSay "INFORMAR MOTIVO "

@ 1,0 VTGET cMot Picture "@!" Valid(!Empty(cMot))

@ 6,0 VTSay "(9) SAIR"

VTRead

If (AllTrim(cMot) == "9")

Exit

EndIf

//Valida se existe o motivo

//If !Posicione("SZR",1,xFilial("SZR")+AvKey(cMot,"ZR_CODIGO"),"ZR_DESCRI")

DbSelectArea("SZR")

SZR->(dbSetOrder(1))

SZR->(dbGoTop(1))

If !SZR->(MsSeek(xFilial("SZR")+cMot))

VTBEEP(1)

VTAlert("MOTIVO NAO EXISTE!","Erro",.T.,2000)

Loop

Else

cDesMot := SZR->ZR_DESCRI

EndIf

EndIf*/

cConfir := Space(1)

VTCLEARBUFFER()
VTCLEAR() // Limpa tela

@ 0,0 VTSay "CONFIRMA OS DADOS? "

@ 1,0 VTSay "ORIGEM....: "+ALLTRIM(cArmOri)+"/"+ALLTRIM(cEndOri)

@ 2,0 VTSay "DESTINO...: "+ALLTRIM(cArmDes)+"/"+ALLTRIM(cEndDes)

@ 3,0 VTSay "PRODUTO...: "+ALLTRIM(cProdut)+"/"+ALLTRIM(cNuLote)+"/"+ALLTRIM(cNumIDE)

@ 4,0 VTSay "QUANTIDADE: "+ALLTRIM(cQuanti)

//@ 5,0 VTSay "MOTIVO....: "+ALLTRIM(cMot)+" - "+ALLTRIM(cDesMot)

@ 5,0 VTSay "(1) SIM...: "

@ 6,0 VTSay "(2) NAO...: "

@ 7,0 VTGET cConfir Picture "@!" Valid(cConfir $ '1/2')

VTRead

If (AllTrim(cConfir) == "2")

Loop

EndIf

//-- Valida se produto pode ser enviado para armazém de destino

If cOpcao = "1" .And. cArmOri <> SubStr(GetMv("MV_DISTAUT",,"89"),1,2)

VTBEEP(1)

VTAlert("ARMAZENAGEM SOMENTE PODE SER REALIZADA ORIGINANDO DO ARMAZEM:


"+SubStr(GetMv("MV_DISTAUT",,"89"),1,2),"Erro",.T.,2000)

Loop

ElseIf !fValArm(cArmOri,cArmDes,cProdut)

VTBEEP(1)

VTAlert("PRODUTO NAO PODE SER MOVIDO PARA O ARMAZEM DE DESTINO!","Erro",.T.,2000)

Loop

EndIf

//fMovPro(cArmOri,cArmDes,cEndOri,cEndDes,cProdut,cNuLote,cNumIDE,cQuanti,cMot)

fMovPro(cArmOri,cArmDes,cEndOri,cEndDes,cProdut,cNuLote,cNumIDE,cQuanti)
EndDo

Return(Nil)

//--------------------------------------------------------------------------------------

/*/

{Protheus.doc} fMovPro

Função que realiza movimentação do produto da origem para o destino.

@author dsm Solutions

@since 11/12/14

@version P.11

@param Nenhum

@return Nenhum

@obs Nenhum

O Campos necessarios sao:

Titulo Campo Tipo Tamanho Decimal

---------- ---------- ---- ------- -------

Prod.Orig. D3_COD C 15 0

Desc.Orig. D3_DESCRI C 60 0

UM Orig. D3_UM C 2 0

Armazem Or D3_LOCAL C 2 0

Endereco O D3_LOCALIZ C 15 0

Prod.Desti D3_COD C 15 0

Desc.Desti D3_DESCRI C 60 0

UM Destino D3_UM C 2 0

Armazem De D3_LOCAL C 2 0

Endereco D D3_LOCALIZ C 15 0

Numero Ser D3_NUMSERI C 20 0

Lote D3_LOTECTL C 10 0
Sub-Lote D3_NUMLOTE C 6 0

Validade D3_DTVALID D 8 0

Potencia D3_POTENCI N 6 2

Quantidade D3_QUANT N 12 2

Qt 2aUM D3_QTSEGUM N 12 2

Estornado D3_ESTORNO C 1 0

Sequencia D3_NUMSEQ C 6 0

Lote Desti D3_LOTECTL C 10 0

Validade D D3_DTVALID D 8 0

Item Grade D3_ITEMGRD C 3 0

Alterações Realizadas desde a Estruturação Inicial

------------+-----------------+---------------------------------------------------------

Data |Desenvolvedor |Motivo

------------+-----------------+---------------------------------------------------------

/*/

//---------------------------------------------------------------------------------------

//Static Function fMovPro(cArmOri,cArmDes,cEndOri,cEndDes,cProdut,cNuLote,cNumIDE,cQuanti,cMot)

Static Function fMovPro(cArmOri,cArmDes,cEndOri,cEndDes,cProdut,cNuLote,cNumIDE,cQuanti)

Local aAuto := {}

Local nSavRegSD3 := 0

Local cDocumento := GetSxENum("SD3","D3_DOC",1)//CriaVar('D3_DOC')

Local cMay := ""

Local cMsg := ""

Private lMsErroAuto := .F.

Private nModulo := 4

//-- Início - Busca o próximo código de documento para movimentação no SD3 - (Códificação utilizada pelo padrão -
MATA261)
nSavRegSD3 := SD3->(RecNo())

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

cDocumento := A261RetINV(cDocumento)

cMay := "SD3"+Alltrim(xFilial("SD3"))+cDocumento

SD3->(dbSetOrder(2))

SD3->(dbSeek(xFilial("SD3")+cDocumento))

Do While (SD3->D3_FILIAL+SD3->D3_DOC == xFilial("SD3")+cDocumento) .Or. !MayIUseCode(cMay)

If SD3->D3_ESTORNO # "S"

cDocumento := Soma1(cDocumento)

cMay := "SD3"+Alltrim(xFilial("SD3"))+cDocumento

EndIf

SD3->(dbSkip())

EndDo

SD3->(dbSetOrder(1))

SD3->(dbGoTo(nSavRegSD3))

//-- Fim - Busca o próximo código de documento para movimentação no SD3 - (Códificação utilizada pelo padrão -
MATA261)

SB8->(dbSetOrder(2))

SB8->(MsSeek(xFilial("SB8")+cNumIDE+cNuLote+cProdut+cArmOri))///--
B8_FILIAL+B8_NUMLOTE+B8_LOTECTL+B8_PRODUTO+B8_LOCAL+DTOS(B8_DTVALID)

aAuto := {{cDocumento,dDataBase}}

aSB1 := GetAdvfVal("SB1",{"B1_DESC","B1_UM"},xFilial("SB1")+cProdut,1,{"",""},.T.)

aItem := {}

//ORIGEM

aadd(aItem,{"ITEM",'001',Nil})

aAdd(aItem,{"D3_COD", AvKey(cProdut,"D3_COD") , Nil})

aAdd(aItem,{"D3_DESCRI", aSB1[1], Nil})


aAdd(aItem,{"D3_UM", aSB1[2], Nil})

aAdd(aItem,{"D3_LOCAL", AvKey(cArmOri,"D3_LOCAL"), Nil})

aAdd(aItem,{"D3_LOCALIZ", AvKey(cEndOri,"D3_LOCALIZ"),Nil})

//DESTINO

aAdd(aItem,{"D3_COD", AvKey(cProdut,"B8_PRODUTO"), Nil})

aAdd(aItem,{"D3_DESCRI", aSB1[1], Nil})

aAdd(aItem,{"D3_UM", aSB1[2], Nil})

aAdd(aItem,{"D3_LOCAL", AvKey(cArmDes,"D3_LOCAL"), Nil})

aAdd(aItem,{"D3_LOCALIZ", AvKey(cEndDes,"D3_LOCALIZ"),Nil})

aAdd(aItem,{"D3_NUMSERI", "", Nil})

aAdd(aItem,{"D3_LOTECTL", AvKey(cNuLote,"D3_LOTECTL"), Nil})

aAdd(aItem,{"D3_NUMLOTE", AvKey(cNumIDE,"D3_NUMLOTE"), Nil})

aAdd(aItem,{"D3_DTVALID", SB8->B8_DTVALID ,Nil})

aAdd(aItem,{"D3_POTENCI", 0, Nil})

aAdd(aItem,{"D3_QUANT", Val(cQuanti) , Nil})

aAdd(aItem,{"D3_QTSEGUM", 0, Nil})

aAdd(aItem,{"D3_ESTORNO", "" , Nil})

aAdd(aItem,{"D3_NUMSEQ", "" , Nil})

aAdd(aItem,{"D3_LOTECTL", AvKey(cNuLote,"D3_LOTECTL") ,Nil})

//aAdd(aItem,{"D3_NUMLOTE", AvKey(cNumIDE,"D3_NUMLOTE"), Nil})

aAdd(aItem,{"D3_DTVALID", SB8->B8_DTVALID ,Nil})

aAdd(aItem,{"D3_ITEMGRD", "", Nil})

//aadd(aItem,{"D3_CODLAN", "", Nil})

//aadd(aItem,{"D3_CODLAN", "", Nil}) //cat83 prod destinoa

aadd(aItem,{"D3_OBSERVA", CriaVar("D3_OBSERVA"), Nil})

/*

//aadd(aItem,'001')
aAdd(aItem,AvKey(cProdut,"D3_COD")) //
D3_COD //Prod.Orig.

aAdd(aItem,aSB1[1])//Posicione("SB1",1,xFilial("SB1")+cProdut,"B1_DESC")) // D3_DESCRI //Desc.Orig.

aAdd(aItem,aSB1[2])//Posicione("SB1",1,xFilial("SB1")+cProdut,"B1_UM")) // D3_UM //UM Orig.

aAdd(aItem,AvKey(cArmOri,"D3_LOCAL")) // D3_LOCAL
//Armazem Or

aAdd(aItem,AvKey(cEndOri,"D3_LOCALIZ")) // D3_LOCALIZ
//Endereco O

//destino

aAdd(aItem,AvKey(cProdut,"B8_PRODUTO")) // D3_COD
//Prod.Desti

aAdd(aItem,aSB1[1])//Posicione("SB1",1,xFilial("SB1")+cProdut,"B1_DESC")) // D3_DESCRI //Desc.Desti

aAdd(aItem,aSB1[2])//Posicione("SB1",1,xFilial("SB1")+cProdut,"B1_UM")) // D3_UM //UM Destino

aAdd(aItem,AvKey(cArmDes,"D3_LOCAL")) // D3_LOCAL
//Armazem De

aAdd(aItem,AvKey(cEndDes,"D3_LOCALIZ")) // D3_LOCALIZ
//Endereco D

aAdd(aItem,CriaVar("D3_NUMSERI")) // D3_NUMSERI`
//Numero Ser

aAdd(aItem,AvKey(cNuLote,"D3_LOTECTL")) // D3_LOTECTL
//Lote

aAdd(aItem,AvKey(cNumIDE,"D3_NUMLOTE")) // D3_NUMLOTE
//Sub-Lote

aAdd(aItem,SB8->B8_DTVALID) //
D3_DTVALID //Validade

aAdd(aItem,0)
// D3_POTENCI //Potencia

aAdd(aItem,Val(cQuanti)) //
D3_QUANT //Quantidade

aAdd(aItem,0)
// D3_QTSEGUM //Qt 2aUM

aAdd(aItem,CriaVar("D3_ESTORNO")) // D3_ESTORNO
//Estornado

aAdd(aItem,CriaVar("D3_NUMSEQ")) // D3_NUMSEQ
//Sequencia
aAdd(aItem,AvKey(cNuLote,"D3_LOTECTL")) // D3_LOTECTL
//Lote Desti

aAdd(aItem,AvKey(cNumIDE,"D3_NUMLOTE")) // D3_NUMLOTE
//Sub-Lote

aAdd(aItem,SB8->B8_DTVALID) //
D3_DTVALID //Validade D

aAdd(aItem,CriaVar("D3_ITEMGRD")) // D3_ITEMGRD
//Item Grade

//aadd(aItem,CriaVar("D3_CODLAN")) //cat83 prod origem

//aadd(aItem,CriaVar("D3_CODLAN")) //cat83 prod destino

aAdd(aItem,CriaVar("D3_OBSERVA")) // D3_OBSERVA
//Observa磯

//aAdd(aItem,CriaVar("D3_IDDCF")) //
D3_IDDCF //Id DCF

*/

aAdd(aAuto,aItem)

MSExecAuto({|x,y| mata261(x,y)},aAuto,3)

If lMsErroAuto

VTBEEP(1)

VTAlert("ERRO AO REALIZAR MOVIMENTO! ENTRE EM CONTATO COM O ADMINISTRADOR.","Erro",.T.,2000)

cMsg += "Erro na transferencia multipla: "+MemoRead(NomeAutoLog())

conout(cMsg)

VTAlert(cMsg)

Else

/*If !EMPTY(cMot)//Posicione("NNR",1,xFilial("NNR")+AvKey(aItem[9],"D3_LOCAL"),"NNR_ZMOT") = "S"

fCriaMot(aItem,cMot)

EndIf*/

VTBEEP(2)

VTAlert("MOVIMENTO REALIZADO COM SUCESSO!","Atencao",.T.,2000)

EndIf
Return()

//--------------------------------------------------------------------------------------

/*/

{Protheus.doc} fValArm

Função que realiza validação de amazém de origem e destino.

@author dsm Solutions

@since 11/12/14

@version P.11

@param Nenhum

@return Nenhum

@obs Nenhum

Alterações Realizadas desde a Estruturação Inicial

------------+-----------------+---------------------------------------------------------

Data |Desenvolvedor |Motivo

------------+-----------------+---------------------------------------------------------

/*/

//---------------------------------------------------------------------------------------

Static Function fValArm(cArmOri,cArmDes,cProdut)

Local lOk := .F.

SB1->(dbSetOrder(1))

SB1->(MsSeek(xFilial("SB1")+cProdut))

If cArmOri == cArmDes

lOk := .T.

ElseIf cArmDes $ ("20/21")

If SB1->B1_LOCPAD $ ("01/02/03/04") .And. cArmDes == "20"


lOk := .T.

ElseIf SB1->B1_LOCPAD $ ("05/06/07/08") .And. cArmDes == "21"

lOk := .T.

EndIf

ElseIf cArmDes $ ("30/32")

If SB1->B1_LOCPAD $ ("01/02/03") .And. cArmDes == "30"

lOk := .T.

ElseIf SB1->B1_LOCPAD $ ("05/06/07") .And. cArmDes == "32"

lOk := .T.

EndIf

ElseIf cArmDes $ ("31/33")

If SB1->B1_LOCPAD $ ("04") .And. cArmDes == "31"

lOk := .T.

ElseIf SB1->B1_LOCPAD $ ("08") .And. cArmDes == "33"

lOk := .T.

EndIf

ElseIf cArmDes $ ("40/41")

If cArmDes == "40" .And. cArmOri == "20"

lOk := .T.

ElseIf cArmDes == "41" .And. cArmOri == "21"

lOk := .T.

EndIf

ElseIf cArmOri $ ("40/41")

If SB1->B1_LOCPAD == cArmDes

lOk := .T.

EndIf

ElseIf cArmDes $ ("70/71")

If SB1->B1_LOCPAD $ ("01/02/03/04") .And. cArmDes == "70"

lOk := .T.

ElseIf SB1->B1_LOCPAD $ ("05/06/07/08") .And. cArmDes == "71"

lOk := .T.
EndIf

ElseIf cArmDes $ ("50/51")

If SB1->B1_LOCPAD $ ("01/02/03/04") .And. cArmDes == "50"

lOk := .T.

ElseIf SB1->B1_LOCPAD $ ("05/06/07/08") .And. cArmDes == "51"

lOk := .T.

EndIf

ElseIf cArmDes $ ("60/61")

If SB1->B1_LOCPAD $ ("01/02/03/04") .And. cArmDes == "60"

lOk := .T.

ElseIf SB1->B1_LOCPAD $ ("05/06/07/08") .And. cArmDes == "61"

lOk := .T.

EndIf

ElseIf cArmDes $ ("72/73")

If SB1->B1_LOCPAD $ ("04") .And. cArmDes == "72"

lOk := .T.

ElseIf SB1->B1_LOCPAD $ ("08") .And. cArmDes == "73"

lOk := .T.

EndIf

ElseIf cArmOri $ SubStr(GetMv("MV_DISTAUT",,"98"),1,2)

If SB1->B1_LOCPAD == cArmDes

lOk := .T.

EndIf

ElseIf cArmOri $ ("90") .and. cArmDes $ ("72/73/70/71/30/31/32/33/21/20/50/51/41/40")

If SB1->B1_LOCPAD == cArmDes

lOk := .T.

EndIf

EndIf

Return(lOk)
//--------------------------------------------------------------------------------------

/*/

{Protheus.doc} fCriaMot

Função que grava motivo de estoque.

@author Gabriel Gon硬ves

@since 09/03/15

@version P.11

@param Nenhum

@return Nenhum

@obs Nenhum

Alterações Realizadas desde a Estruturação Inicial

------------+-----------------+---------------------------------------------------------

Data |Desenvolvedor |Motivo

------------+-----------------+---------------------------------------------------------

/*/

//---------------------------------------------------------------------------------------

Static Function fCriaMot(aZSD3,cMot)

Local cArmazem := ""

//Grava o motivo nas tabelas

DbSelectArea("SB8")

SB8->(DbSetOrder(3))

If SB8-
>(MsSeek(xFilial("SB8")+AvKey(aZSD3[1],"D3_COD")+AvKey(aZSD3[9],"D3_LOCAL")+AvKey(aZSD3[12],"D3_LOTECTL")+A
vKey(aZSD3[13],"D3_NUMLOTE")))

If RecLock("SB8",.F.)

SB8->B8_ZMOTIVO := AllTrim(cMot)
SB8->(MsUnlock())

EndIf

cArmazem := Posicione("NNR",1,xFilial("NNR")+AvKey(aZSD3[9],"D3_LOCAL"),"NNR_DESCRI")

DbSelectArea("SZW")

If RecLock("SZW",.T.)

SZW->ZW_FILIAL := SB8->B8_FILIAL

SZW->ZW_IDLOTE := AvKey(aZSD3[13],"D3_NUMLOTE")

SZW->ZW_EMISSAO := DDATABASE

SZW->ZW_PRODUTO := AvKey(aZSD3[1],"D3_COD")

SZW->ZW_DESCRI := AllTrim(aZSD3[2])//AvKey(aZSD3[2],"D3_DESCRI")

SZW->ZW_QUANT := aZSD3[16]//AvKey(aZSD3[16],"D3_QUANT")

SZW->ZW_LOTE := AvKey(aZSD3[12],"D3_LOTECTL")

SZW->ZW_VENLOTE := aZSD3[21]//AvKey(aZSD3[21],"D3_DTVALID")

SZW->ZW_ARMAZEM := AvKey(aZSD3[9],"D3_LOCAL")

SZW->ZW_DESCARM := AllTrim(cArmazem)

SZW->ZW_MOTIVO := AllTrim(cMot)

SZW->ZW_AREA := "Logistica"

SZW->ZW_USER := __CUSERID

//INICIO CHAMADO 70496

SZW->ZW_NOTA := ""

SZW->ZW_SERIE := ""

SZW->ZW_FORMUL := ""

SZW->ZW_CLIENTE := ""

SZW->ZW_LOJA := ""

SZW->ZW_IDAREA := "001"

SZW->ZW_DESCMOT := posicione("SZR",1,xFilial("SZR")+AVKEY(cMot,"ZR_CODIGO"),"ZR_DESCRI")

//FIM CHAMADO 70496

SZW->(MsUnlock())

EndIf
EndIf

Return()

Você também pode gostar