Você está na página 1de 4

/*/{Protheus.

doc} fGrvApontP
Realiza a inclus�o ou estorno dos apontamentos de perda.
@return lRet, Indica se o processamento foi realizado com sucesso
@param aFields, array, Array com os campos da MsNewGetDados
@param lEstAuto, logical, Indica se � o processo de estorno autom�tico
@type function
/*/
Static Function fGrvApontP(aFields, lEstAuto)
Local aAreas := {}
Local aMata240 := {}
Local cMsgErro := ""
Local cLocal := ""
Local cLocaliz := ""
Local cProduto := ""
Local cLoteCtl := ""
Local lDelete := .F.
Local lRet := .T.
Local lEstorno := .F.
Local nOpcExec := 0
Local nPosDelete := 0
Local nRecno := 0
Local nI := 0
Local nQtde := 0
Local aCab := {}
Local aItem := {}
Local aItens := {}

Private lMsErroAuto := .F.

If !lEstAuto
/* Ajuste para a fun��o GDFieldGet */
If Type("N") == "U"
Private N := 0
EndIf

/* Atualiza o aCols */
aCols := oGetDados:aCols
EndIf

Aadd(aAreas, GetArea())
Aadd(aAreas, SD3->(GetArea()))

ProcRegua(Len(aCols) + 1)

If !lEstAuto
BeginTran()
EndIf

nPosDelete := Len(aHeader) + 1

IncProc("Processando apontamento de perda...")

For nI := 1 To Len(aCols)
/* Limpa as vari�veis */
aMata240 := {}
lDelete := .F.
nOpcExec := 0
nRecno := 0
If !lEstAuto
oGetDados:GoTo(nI)
N := oGetDados:nAt
Else
N := nI
EndIf

If !Empty(GDFieldGet("D3_COD",nI,.T.))
lDelete := aCols[nI,nPosDelete]
nRecno := GDFieldGet("D3_REC_WT",nI,.T.)

/* Define a op��o para passar para o ExecAuto */


If !lDelete .And. nRecno == 0
/* Inclus�o */
nOpcExec := 3

IncProc("Incluindo apontamento de perda da linha " +


CValToChar(nI) + "...")
ElseIf lDelete .And. nRecno > 0
/* Estorno */
nOpcExec := 5

If !lEstAuto
IncProc("Estornando apontamento de perda da linha " +
CValToChar(nI) + "...")
Else
IncProc("Estornando apontamento de perda...")
EndIf
Else
IncProc()

Loop
EndIf

/* Adiciona campos que n�o est�o na MsNewGetDados */


//Aadd(aMata240, {"D3_TM", cTM, Nil})
//Aadd(aMata240, {"D3_OP", cOP, Nil})
AADD(aItem, {"D3_OP", cOP, Nil})

/*
Adiciona os campos que est�o na MsNewGetDados.
Todos os campos que estiverem no array aFields, ser�o passados
automaticamente para o ExecAuto.
*/
//AEval(aFields, {|cField| Aadd(aMata240, {cField,
GDFieldGet(cField,nI,.T.), Nil})})
AEval(aFields, {|cField| Aadd(aItem, {cField,
GDFieldGet(cField,nI,.T.), Nil})})

/* Adiciona campos que n�o est�o na MsNewGetDados */


If nOpcExec == 3
//Aadd(aMata240, {"D3_EMISSAO", dDataBase, Nil})
Aadd(aItem, {"D3_EMISSAO", dDataBase, Nil})
Else
dbSelectArea("SD3")
SD3->(dbSetOrder(3))
SD3->(dbGoTo(nRecno))
//Aadd(aMata240, {"D3_EMISSAO", SD3->D3_EMISSAO, Nil})
//Aadd(aMata240, {"D3_NUMSEQ" , SD3->D3_NUMSEQ , Nil})
//Aadd(aMata240, {"INDEX" , 3
, Nil})
Aadd(aItem, {"D3_EMISSAO", SD3->D3_EMISSAO, Nil})
Aadd(aItem, {"D3_NUMSEQ" , SD3->D3_NUMSEQ , Nil})
Aadd(aItem, {"INDEX" , 3 ,
Nil})
EndIf

//substituido pelo mata241 cabecalho e itens


//MsExecAuto({|x,y| MATA240(x,y)},aMata240,nOpcExec)

aCab:= {{"D3_TM" , cTM, Nil},;


{"D3_EMISSAO" , SD3->D3_EMISSAO, Nil}}

AADD(aItens, {aItem})

lMsErroAuto:= .F.
MSExecAuto({|x,y,z| MATA241(x, y, z)}, aCab, aItens, nOpcExec)

If !lMsErroAuto
cLocal := GDFieldGet("D3_LOCAL" )
cLocaliz := GDFieldGet("D3_LOCALIZ")
cProduto := GDFieldGet("D3_COD" )
cLoteCtl := GDFieldGet("D3_LOTECTL")
nQtde := GDFieldGet("D3_QUANT" )
lEstorno := nOpcExec == 5

/* Atualiza o saldo na tabela SBE */


fAtuSBE(cLocal, cLocaliz, cProduto, cLoteCtl, nQtde,
lEstorno)

/* Atualiza os registros na tabela QPK */


fAtuQPK(cLocal, cLocaliz, cProduto, cLoteCtl, nQtde,
lEstorno)
Else
lRet := .F.

If !lEstAuto
DisarmTransaction()

If nOpcExec == 3
cMsgErro := "Erro na inclus�o do apontamento de
perda." + CRLF
Else
cMsgErro := "Erro no estorno do apontamento de
perda." + CRLF
EndIf

cMsgErro += "Linha: " + CValToChar(oGetDados:nAt)

MsgAlert(cMsgErro, cCadastro)

MostraErro()
EndIf

Exit
EndIf
EndIf
Next nI

If !lEstAuto
EndTran()

If lRet
MsgInfo("Grava��o realizada com sucesso.", cCadastro)
EndIf
EndIf

fRestAreas(aAreas)
Return(lRet)

Você também pode gostar