Perguntas MTA105LIN

Mais
6 anos 8 meses atrás #32297 por diegoo_martins
MTA105LIN foi criado por diegoo_martins
Pessoal, bom dia.

Utilizo o PE MTA105LIN com o objetivo de NÃO permitir solicitação ao Armazém para produtos SEM SALDO.
Se coloco o mesmo produto, o PE faz a verificação do saldo total na linha que está sendo digitada. Se informo o mesmo produto na segunda linha, o PE NÃO subtrai o valor informado na primeira linha, deixando entrar com a SA e com isso o saldo em estoque vai ficando negativo...
Alguém pode me ajudar a ajustar este PE para que quando for produto igual somar as quantidades e verificar o saldo em estoque...Se atingir não deixa entrar com a SA...

User Function MTA105LIN()

lValida := .T.
nSOLIC := aCols[n][5]
nSALDO := Posicione("SB2",1,xFilial("SB2")+Acols[n][2]+Acols[n][11],"B2_QATU")
nSALDO := SB2->(SaldoSB2())

if (nSALDO = 0) .OR. (nSOLIC > nSALDO)

Alert ( "Produto sem saldo suficiente em estoque ou indisponivel" )

lValida := .F.
//elseif (nSOLIC <= nSALDO)
//lValida := .T.
elseif empty(aCols[n][12]) .And. empty(aCols[n][13])
Alert("Favor preencher a OF ou Centro de Custo")

lValida := .F.

else
lValida := .T.


endif

Return lValida

Por favor Acessar ou Registrar para participar da conversa.

Mais
6 anos 8 meses atrás #32298 por diegoo_martins
Respondido por diegoo_martins no tópico MTA105LIN
Vi que este PE MTA105LIN somente valida por linha e o correto seria utilizar o PE MTA105OK. Montei desta forma, porém falta a parte principal..rsrs (somar quantidades de produtos iguais e verificar o saldo em estoque)

Alguém consegue me ajudar?


User Function MTA105OK

Local _area := getarea()
Local cProduto := aCols[n,aScan(aHeader,{|x| Alltrim(x[2])="CP_PRODUTO"})]
Local lRet := .T.

nSALDO := Posicione("SB2",1,xFilial("SB2")+Acols[n][2]+Acols[n][11],"B2_QATU")
nSALDO := SB2->(SaldoSB2())
nQuant :=aCols[n][5]

For Nx:=1 To Len(aCols)
//somar quantidades de produtos iguais e verificar o saldo em estoque
Next Nx

IF nQuant > nSALDO
Alert ( "Produto NÃO tem saldo em estoque.")
lRet:= .F.
Else
lRet:= .T.
EndIf

Return lRet

Por favor Acessar ou Registrar para participar da conversa.

Mais
6 anos 8 meses atrás #32299 por diegoo_martins
Respondido por diegoo_martins no tópico MTA105LIN
Alguém consegue me ajudar?

Por favor Acessar ou Registrar para participar da conversa.

Mais
6 anos 8 meses atrás - 6 anos 8 meses atrás #32300 por admin
Respondido por admin no tópico MTA105LIN
#include "rwmake.ch"
#INCLUDE "ap5mail.ch"

User Function MtA105OK()
// Variaveis Usadas no Controle de Envio de E-mail para Liberador
Local _cNomUser := Upper(Alltrim(SubStr(cUsuario,7,15)))
Local _cCodUser := __CUSERID
Local _nPosCod  := Ascan(aHeader, {|x| x[2] = "CP_PRODUTO"})
Local _nPosItem := Ascan(aHeader, {|x| x[2] = "CP_ITEM"})
Local _nPosQTD  := Ascan(aHeader, {|x| x[2] = "CP_QUANT"})
Local _nPrcCmp   := 0.00
Local _cDesProd  := ""
Local _cLocPad   := ""
Local _cNumReq := CA105NUM
Local _dDataReq := DA105DATA
// **************************************************************
Public cItem := ""
For a:=1 to Len(aCols)
	If !aCols[a,Len(aCols[a])]
		cItem := ALLTRIM(aCols[a,1])
	Endif
Next
//Rotina para a geracao do E-mail para liberacao dos reponsaveis Conforme Tabela
DbSelectarea("SZM")
DbSetOrder(1) //ZM_FILIAL+ZM_USER
If DbSeek(xFilial("SZM")+_cCodUser) .And. !Empty(SZM->ZM_EMSUP)
	For _nx:=1 to Len(aCols)
		If !(aCols[_nx,Len(aCols[_nx])]) //Verifica se nao esta Deletado
			//Pega o Ultimo preco de Compra do produto
			_nPrcCmp := Posicione("SB1",1,xFilial("SB1")+aCols[_nx,_nPosCod],"B1_UPRC")
			_cLocPad := Posicione("SB1",1,xFilial("SB1")+aCols[_nx,_nPosCod],"B1_LOCPAD")
			If _nPrcCmp <= 0.00
				_nPrcCmp := Posicione("SB2",1,xFilial("SB2")+aCols[_nx,_nPosCod]+_cLocPad,"B2_CM1")
			Endif
			_cDesProd:= Posicione("SB1",1,xFilial("SB1")+aCols[_nx,_nPosCod],"B1_DESC")
		Endif
	Next
Endif
Return(.t.)
Ultima edição: 6 anos 8 meses atrás por admin.

Por favor Acessar ou Registrar para participar da conversa.

Mais
6 anos 8 meses atrás #32301 por diegoo_martins
Respondido por diegoo_martins no tópico MTA105LIN
fiz desta forma e deu error.log..

THREAD ERROR ([17360], Diego Martins, FENIX) 11/08/2017 16:14:21
type mismatch on compare on U_MTA105OK(MTA105OK.PRW) 11/08/2017 15:32:31 line : 18

User Function MTA105OK

Local _nPosCod := Ascan(aHeader, {|x| x[2] = "CP_PRODUTO"})
Local _nPosQTD := Ascan(aHeader, {|x| x[2] = "CP_QUANT"})
Local lRet := .T.

nSALDO := Posicione("SB2",1,xFilial("SB2")+Acols[n][2]+Acols[n][11],"B2_QATU")
nSALDO := SB2->(SaldoSB2())
nQuant := 0

For Nx:=1 To Len(aCols)
dbSelectArea("SCP")
dbSetOrder(1)
dbSeek(xFilial("SCP")+aCols[Nx][_nPosCod])

If _nPosCod == aCols[Nx][_nPosCod] //Se produto igual somar quantidades de produtos
nQuant += aCols[Nx][_nPosQTD]

If nQuant > nSALDO //Verificar o saldo em estoque
Alert ( "Produto NÃO tem saldo em estoque.")
lRet:= .F.
Else
lRet:= .T.
EndIf
Endif
Next Nx

Return lRet

Por favor Acessar ou Registrar para participar da conversa.

Mais
6 anos 8 meses atrás #32307 por diegoo_martins
Respondido por diegoo_martins no tópico MTA105LIN
Boa tarde,

Consegui desenvolver o PE MTA105OK e está funcionando. Só tem um probleminha...
Quando deleto a linha do item que ultrapassou o saldo em estoque o sistema não limpa a memória, ou seja, permanece com o mesmo valor.

Ex.: Produto A -> Saldo = 25

linha 1 = PRODUTO A -> QTDE = 25
linha 2 = PRODUTO A -> QTDE = 20

O sistema acusa que não tem saldo, ok. Mas se deleto a LINHA 2 o sistema continua informando que não tem saldo.

Tem alguma forma para limpar a memória quando deletar a linha?

Segue fonte em anexo.

Arquivo Anexo:

Nome do Arquivo: MTA105OK.prw
Tamanho do Arquivo:3 KB



Att,
Anexos:

Por favor Acessar ou Registrar para participar da conversa.

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