×
Linguagem de Programação ADVPL
Perguntas Função GravaEmp()
- Sato
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 14
- Obrigados Recebidos: 0
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
11 anos 3 meses atrás #16695
por kanaamlrr
Respondido por kanaamlrr no tópico Função GravaEmp()
Acho que está desatualizada, mas dá pra usar.
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³Funcao ³GravaEmp ³ Autor ³ Rodrigo de A. Sartorio³ Data ³ 18.03.99 ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡…o ³Tratamento na geracao de empenhos ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Retorno ³[1] Lote de Controle ³±±
±±³ ³[2] Sub-Lote ³±±
±±³ ³[3] Localizacao ³±±
±±³ ³[4] Numero de Serie ³±±
±±³ ³[5] Quantidade ³±±
±±³ ³[6] Data de Validade ³±±
±±³ ³[7] Registro do SB2 ³±±
±±³ ³[8] Registro do SBF ³±±
±±³ ³[9] Array com Registros do SB8 e qtd ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Parametros³ExpC01: Codigo do Produto - Obrigatorio ³±±
±±³ ³ExpC02: Local - Obrigatorio ³±±
±±³ ³ExpN01: Quantidade - Obrigatorio ³±±
±±³ ³ExpN02: Quantidade 2a UM - Obrigatorio ³±±
±±³ ³ExpC03: Lote de Controle - Obrig. se Inf. Sub-Lote ³±±
±±³ ³ExpC04: Sub-Lote ³±±
±±³ ³ExpC05: Localizacao ³±±
±±³ ³ExpC06: Numero de Serie ³±±
±±³ ³ExpC07: Ordem de Producao ³±±
±±³ ³ExpC08: Sequencia do Empenho / Liberacao do Pedido de Venda ³±±
±±³ ³ExpC09: Pedido de Venda ³±±
±±³ ³ExpC10: Item do Pedido de Venda ³±±
±±³ ³ExpC11: Origem do Empenho ³±±
±±³ ³ExpC12: Op original ³±±
±±³ ³ExpD01: Data de Entrega do Empenho ³±±
±±³ ³ExpA01: Array para o travamento dos saldos, caso nao seja ³±±
±±³ ³ informado nao havera travamento. ³±±
±±³ ³ExpL01: Flag que indica se estorna empenho ³±±
±±³ ³ExpL02: Flag que indica se e chamada da Projecao de Estoques³±±
±±³ ³ExpL03: Flag que indica se empenha material do SB2 ³±±
±±³ ³ExpL04: Flag que indica se grava registro no SD4 ³±±
±±³ ³ExpL05: Flag que indica se considera Lotes Vencidos ³±±
±±³ ³ExpL06: Flag que indica se empenha material no SB8/SBF ³±±
±±³ ³ExpL07: Flag que indica se CRIA registros no SDC ³±±
±±³ ³ExpL08: Flag que indica se encerra empenho de OP ³±±
±±³ ³ExpC13: Identificador do DCF ³±±
±±³ ³ExpA02: Array de campos utilizados no ajuste de empenho SD4 ³±±
±±³ ³ExpN03: Posicao atual do elemento do array de campos ³±±
±±³ ³ExpL09: Flag que indica se a OP esta Encerrada ³±±
±±³ ³ExpC14: Tipo OP ³±±
±±³ ³ExpC15: Codigo CAT 83 ³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
Function GravaEmp(cProduto,cLocal,nQtd,nQtd2UM,cLoteCtl,cNumLote,cLocaliza,cNumSerie,cOp,cTrt,cPedido,cItem,cOrigem,cOpOrig,dEntrega,aTravas,lEstorno,lProj,lEmpSB2,lGravaSD4,lConsVenc,lEmpSB8SBF,lCriaSDC,lEncerrOp,cIdDCF,aSalvCols,nSG1,lOpEncer,cTpOp,cCAT83)
Local i := 0
Local z := 0
Local nBaixa := 0
Local nQuant := 0
Local cSeekLoc := ""
Local cSeek := ""
Local nBaixa2 := 0
Local nQuant2 := 0
Local nQtdAtEmpN := 0
Local nQtdDif := 0
Local aArray := {}
Local aArea := GetArea()
Local aAreaSC2 := {}
Local aAreaSC6 := {}
Local lSelLote := (SuperGetMV("MV_SELLOTE") == "1")
Local lAtuSGJ := SuperGetMV("MV_PVCOMOP",.F.,.F.) .And. FindFunction("ALIASINDIC") .And. AliasIndic("SGJ")
DEFAULT aSalvCols := {}
DEFAULT cIdDCF := ''
DEFAULT lEncerrOp := .F.
DEFAULT nSG1 := 0
DEFAULT cTpOp := "F"
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Preenche parametros nao recebidos pela funcao ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
lProj := IF(lProj == NIL, .F., lProj)
lEstorno := IF(lEstorno == NIL, .F., lEstorno)
lGravaSD4 := IF(lGravaSD4 == NIL, .F., lGravaSD4)
lEmpSB2 := IF(lEmpSB2 == NIL, .T., lEmpSB2)
lEmpSB8SBF := IF(lEmpSB8SBF == NIL, lEmpSB2, lEmpSB8SBF)
lCriaSDC := IF(lCriaSDC == NIL, If(Localiza(cProduto),.T.,.F.), lCriaSDC)
cPedido := IF(cPedido == NIL, CriaVar("DC_PEDIDO"), cPedido)
cOpOrig := IF(cOpOrig == NIL, CriaVar("D4_OPORIG"), cOpOrig)
cLoteCtl := IF(cLoteCtl == NIL, CriaVar("BF_LOTECTL"), cLoteCtl)
cNumLote := IF(cNumLote == NIL, CriaVar("BF_NUMLOTE", If(SuperGetMV('MV_LOTEUNI', .F., .F.), .F., Nil)),cNumLote)
cLocaliza := IF(cLocaliza == NIL, CriaVar("BF_LOCALIZ"), cLocaliza)
cNumSerie := IF(cNumSerie == NIL, CriaVar("BF_NUMSERI"), cNumSerie)
cOrigem := IF(cOrigem == NIL, CriaVar("DC_ORIGEM"), cOrigem)
cItem := IF(cItem == NIL, CriaVar("DC_ITEM"), cItem)
cTrt := IF(cTrt == NIL, If(lGravaSD4.And.Empty(cPedido),CriaVar("DC_TRT"),CriaVar("DC_SEQ")),cTrt)
cOp := IF(cOp == NIL, CriaVar("DC_OP"), cOp)
lConsVenc := IF(lEstorno, .T., IF(lConsVenc == NIL,GetMV('MV_LOTVENC')=='S', lConsVenc))
nQtd2UM := IF(nQtd2UM == NIL, ConvUm(cProduto,nQtd,0,2), nQtd2UM)
lOpEncer := IF(lOpEncer == NIL, .F., lOpEncer)
lEncerrOp := lEncerrOp .And. !Empty(cOP)
cCAT83 :=IF(cCAT83 == NIL,"",cCAT83)
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Caso nao exista as variaveis l380 e l381 |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If Type("l380") <> "L"
l380 := .F.
EndIf
If Type("l381") <> "L"
l381 := .F.
EndIf
// Verifica tipo de empenho a ser atualizado
If !Empty(cOP)
dbSelectArea("SC2")
aAreaSC2:=GetArea()
dbSetOrder(1)
If dbSeek(xFilial()+cOP)
cTpOp:=SC2->C2_TPOP
EndIf
RestArea(aAreaSC2)
EndIf
If !lEstorno
If (Localiza(cProduto) .And. (lCriaSDC .Or. !Empty(cLocaliza) .Or. !Empty(cNumSerie))) .Or. (Rastro(cProduto) .And. (!Empty(cLoteCtl) .Or. !Empty(cNumLote)))
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Faz FIFO Lote/Sub-Lote/Localizacao/Numero de Serie ³
//³ caso seja digitado na OP pelo menos um dos quatro ou ³
//³ caso seja empenho que nao esteja amarrado ao SD4 ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
aArray:=SldPorLote(cProduto,cLocal,nQtd,nQtd2UM,cLoteCtl,cNumLote,cLocaliza,cNumSerie,@aTravas,NIL,NIL,lConsVenc, , cTpOp=="P")
For i:=1 to Len(aArray)
If lGravaSD4
// Gera registro do empenho no SD4
A650ReplD4(cProduto,cLocal,dEntrega,aArray[i,5],cOp,cTrt,aArray[i,2],aArray[i,1],aArray[i,7],cOpOrig,aArray[i,6],aArray[i,12],lOpEncer,cCAT83)
EndIf
If lEmpSB2
// Soma empenho no SB2
dbSelectArea("SB2")
dbGoto(aArray[i,8])
GravaB2Emp("+",aArray[i,5],cTpOp,!Empty(cPedido).And.cOrigem!="SDD",aArray[i,6])
EndIf
// Caso utilize registros da Rastreabilidade soma empenho no SB8
If lEmpSB8SBF
dbSelectArea("SB8")
For z:=1 to Len(aArray[i,10])
dbGoto(aArray[i,10,z,1])
GravaB8Emp("+",aArray[i,10,z,2],cTpOp,!Empty(cPedido).And.cOrigem!="SDD",aArray[i,10,z,3])
Next z
// Caso utilize registros da Localizacao Fisica soma empenho no SBF
If aArray[i,9] > 0
dbSelectArea("SBF")
dbGoto(aArray[i,9])
GravaBFEmp("+",aArray[i,5],cTpOp,!Empty(cPedido).And.cOrigem!="SDD",aArray[i,6])
// Gera registro do empenho no SDC
If lCriaSDC
Reclock("SDC",.T.)
Replace DC_FILIAL With xFilial()
Replace DC_ORIGEM With cOrigem
Replace DC_PRODUTO With cProduto
Replace DC_LOCAL With cLocal
Replace DC_LOTECTL With aArray[i,1]
If Rastro(cProduto,"S")
Replace DC_NUMLOTE With aArray[i,2]
EndIf
Replace DC_LOCALIZ With aArray[i,3]
Replace DC_NUMSERI With aArray[i,4]
Replace DC_QTDORIG With Iif((l380 .Or. l381), SD4->D4_QTDEORI, aArray[i,5])
Replace DC_QUANT With aArray[i,5]
Replace DC_QTSEGUM With ConvUM(SDC->DC_PRODUTO,aArray[i,5],aArray[i,6],2)
Replace DC_OP With cOp
Replace DC_TRT With cTrt
If !lGravaSD4 .And. !Empty(cPedido)
Replace DC_PEDIDO With cPedido
Replace DC_ITEM With cItem
Replace DC_SEQ With cTrt
EndIf
If SDC->(FieldPos('DC_IDDCF'))>0
SDC->DC_IDDCF := cIdDCF
EndIf
MsUnlock()
EndIf
EndIf
EndIf
Next i
Else
If lGravaSD4
A650ReplD4(cProduto,cLocal,dEntrega,nQtd,cOp,cTrt,NIL,NIL,NIL,cOpOrig,nQtd2UM,NIL,lOpEncer,cCAT83)
EndIf
If lEmpSB2
dbSelectArea("SB2")
If !(B2_FILIAL+B2_COD+B2_LOCAL == xFilial()+cProduto+cLocal)
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Posiciona SB2 ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If !dbSeek(xFilial()+cProduto+cLocal)
CriaSB2(cProduto,cLocal)
EndIf
EndIf
If nQtd > 0
GravaB2Emp("+",nQtd,cTpOp,!Empty(cPedido).And.cOrigem!="SDD",nQtd2UM)
If SB2->B2_QEMPN > 0 .And. !Empty(cPedido) .And. cOrigem <> "SDD" .And. ( lAtuSGJ <> NIL .And. !lAtuSGJ )
nQtdAtEmpN := nQtd
If ! SuperGetMv("MV_LIBACIM")
dbSelectArea("SC6")
aAreaSC6 := GetArea()
dbSetOrder(1)
MsSeek(xFilial("SC6")+cPedido+cItem+cProduto)
nQtdDif := SC6->(C6_QTDVEN-C6_QTDENT) - nQtdAtEmpN
// Indica liberacao acima do saldo do pedido e nao grava o excesso liberado em B2_QEMPN
If QtdComp(nQtdDif) < QtdComp(0)
nQtdAtEmpN += nQtdDif
EndIf
RestArea(aAreaSC6)
EndIf
A650AtEmpn(nQtdAtEmpN,"-",cTpOP)
Endif
Else
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Atualiza o B2_SALPED ou B2_SALPRE, somente se o produto ³
//³ for negativo na estrutura. Caso nao tenha estrutura ou ³
//³ nao seja uma producao, nao executara a funcao GravaB2Pre³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If IsCompENeg(NIL,cProduto,cOp,.F.)
GravaB2Pre("+",ABS(nQtd),cTpOp)
EndIf
EndIf
EndIf
EndIf
Else
dbSelectArea("SB2")
If !dbSeek(xFilial()+cProduto+cLocal)
CriaSB2(cProduto,cLocal)
EndIf
If nQtd > 0
If lEmpSB8SBF
If Rastro(cProduto) .And. !Empty(cLoteCtl+cNumLote) .And. !(Localiza(cProduto))
aArray:=SldPorLote(cProduto,cLocal,nQtd,nQtd2UM,cLoteCtl,cNumLote,,,,If(cPaisLoc=="BRA",.T.,lEmpSB8SBF),NIL,lConsVenc,NIL,cTpOp=="P")
nQtd:=0
nQtd2UM:=0
For i:=1 to Len(aArray)
dbSelectArea("SB8")
For z:=1 to Len(aArray[i,10])
nQtd+=aArray[i,10,z,2]
nQtd2UM+=aArray[i,10,z,3]
Next z
Next i
EndIf
If !Empty(cLoteCtl+cNumLote) .And. Rastro(cProduto,"S")
dbSelectArea("SB8")
dbSetOrder(2)
cSeek:=xFilial()+cNumLote+cLoteCtl+cProduto+cLocal
If dbSeek(cSeek)
GravaB8Emp("-",nQtd,cTpOp,!Empty(cPedido).And.cOrigem!="SDD",nQtd2UM)
EndIf
ElseIf !Empty(cLoteCtl) .And. Rastro(cProduto,"L")
dbSelectArea("SB8")
dbSetOrder(3)
cSeek:=xFilial()+cProduto+cLocal+cLoteCtl
dbSeek(cSeek)
nQuant:=nQtd
nQuant2:=nQtd2UM
Do While !Eof() .And. B8_FILIAL+B8_PRODUTO+B8_LOCAL+B8_LOTECTL == cSeek .And. nQuant > 0
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Baixa o empenho que conseguir neste lote ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If cTpOp=="P"
nBaixa:=Min(AvalQtdPre("SB8",1,NIL,NIL,.T.),nQuant)
nBaixa2:=Min(AvalQtdPre("SB8",1,.T.,NIL,.T.),nQuant2)
Else
nBaixa:=Min(B8_EMPENHO,nQuant)
nBaixa2:=Min(B8_EMPENH2,nQuant2)
EndIf
nQuant-=nBaixa
nQuant2-=nBaixa2
GravaB8Emp("-",nBaixa,cTpOp,!Empty(cPedido).And.cOrigem!="SDD",nBaixa2)
dbSkip()
EndDo
EndIf
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Tratamento referente a localizacao fisica ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If Localiza(cProduto) .And. lCriaSDC
dbSelectArea("SDC")
If !lGravaSD4
dbSetOrder(1)
cComparaLoc:="DC_FILIAL+DC_PRODUTO+DC_LOCAL+DC_ORIGEM+DC_PEDIDO+DC_ITEM+DC_SEQ+DC_LOTECTL+DC_NUMLOTE"
cSeekLoc:=xFilial()+cProduto+cLocal+cOrigem+cPedido+cItem+cTrt+cLoteCtl+cNumLote
If lSelLote
cComparaLoc:="DC_FILIAL+DC_PRODUTO+DC_LOCAL+DC_ORIGEM+DC_PEDIDO+DC_ITEM+DC_SEQ+DC_LOTECTL"
cSeekLoc:=xFilial()+cProduto+cLocal+cOrigem+cPedido+cItem+cTrt+cLoteCtl
EndIf
Else
dbSetOrder(2)
cComparaLoc:="DC_FILIAL+DC_PRODUTO+DC_LOCAL+DC_OP+DC_TRT+DC_LOTECTL+DC_NUMLOTE"
cSeekLoc:=xFilial()+cProduto+cLocal+cOp+cTrt+cLoteCtl+cNumLote
If lSelLote
cComparaLoc:="DC_FILIAL+DC_PRODUTO+DC_LOCAL+DC_OP+DC_TRT+DC_LOTECTL"
cSeekLoc:=xFilial()+cProduto+cLocal+cOp+cTrt+cLoteCtl
EndIf
EndIf
dbSeek(cSeekLoc)
nQuant:=nQtd
nQuant2:=nQtd2UM
Do While !Eof() .And. &cComparaLoc == cSeekLoc .And. nQuant > 0
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Limpa Registros com qtd zerada para comp. versoes ant.³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If (QtdComp(SDC->DC_QUANT) <= QtdComp(0)) .And. SDC->DC_ORIGEM $ "SC6/SL2"
RecLock("SDC",.F.,.T.)
dbDelete()
MsUnLock()
dbSkip()
Loop
EndIf
nBaixa:=Min(nQuant,SDC->DC_QUANT)
nBaixa2:=Min(nQuant2,SDC->DC_QTSEGUM)
nQuant-=nBaixa
nQuant2-=nBaixa2
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³Retira empenho do SBF ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
dbSelectArea("SBF")
dbSetOrder(1)
If dbSeek(xFilial()+SDC->DC_LOCAL+SDC->DC_LOCALIZ+SDC->DC_PRODUTO+SDC->DC_NUMSERI+SDC->DC_LOTECTL+SDC->DC_NUMLOTE)
GravaBFEmp("-",nBaixa,cTpOp,!Empty(cPedido).And.cOrigem!="SDD",nBaixa2)
EndIf
dbSelectArea("SDC")
If If(lEncerrOp,(nBaixa <= SDC->DC_QUANT),(nBaixa < SDC->DC_QUANT))
RecLock("SDC",.F.)
Replace DC_QUANT With SDC->DC_QUANT - nBaixa
Replace DC_QTSEGUM With ConvUM(SDC->DC_PRODUTO, SDC->DC_QUANT - nBaixa, 0, 2)
ElseIf !lEncerrOp
RecLock("SDC",.F.,.T.)
dbDelete()
EndIf
MsUnLock()
dbSkip()
EndDo
EndIf
EndIf
If lEmpSB2
GravaB2Emp("-",nQtd,cTpOp,!Empty(cPedido).And.cOrigem!="SDD",nQtd2UM)
EndIf
Else
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Atualiza o B2_SALPED ou B2_SALPRE, somente se o produto ³
//³ for negativo na estrutura. Caso nao tenha estrutura ou ³
//³ nao seja uma producao, nao executara a funcao GravaB2Pre³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If IsCompENeg(NIL,cProduto,cOp,.F.)
GravaB2Pre("-",ABS(nQtd),cTpOp)
EndIf
EndIf
EndIf
If ExistBlock("MTGRVEMP")
ExecBlock("MTGRVEMP",.F.,.F.,{cProduto,cLocal,nQtd,nQtd2UM,cLoteCtl,cNumLote,cLocaliza,cNumSerie,cOp,cTrt,cPedido,cItem,cOrigem,lEstorno,aSalvCols,nSG1})
Endif
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Remove travas dos registros utilizados ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
MaDesTrava(aTravas)
RestArea(aArea)
Return aArray
Por favor Acessar ou Registrar para participar da conversa.
- Sato
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 14
- Obrigados Recebidos: 0
Tempo para a criação da página:0.103 segundos