× Linguagem de Programação ADVPL

Perguntas Função GravaEmp()

Mais
11 anos 3 meses atrás - 11 anos 3 meses atrás #16683 por Sato
Função GravaEmp() foi criado por Sato
Boa a noite a todos.

Gostaria de saber se alguem tem o código da função GravaEmp()?
Ultima edição: 11 anos 3 meses atrás por Sato.

Por favor Acessar ou Registrar para participar da conversa.

Mais
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.

Mais
11 anos 3 meses atrás #16716 por Sato
Respondido por Sato no tópico Função GravaEmp()
Muito obrigado Kanaãn, antes ela do que nada.

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.103 segundos
Joomla templates by a4joomla