Perguntas MTA105LIN
- diegoo_martins
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 175
- Obrigados Recebidos: 0
7 anos 3 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
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.
- diegoo_martins
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 175
- Obrigados Recebidos: 0
7 anos 3 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
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.
- diegoo_martins
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 175
- Obrigados Recebidos: 0
7 anos 3 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.
- admin
- Desconectado
- Administrador
Menos
Mais
- Postagens: 297
- Obrigados Recebidos: 21
7 anos 3 meses atrás - 7 anos 3 meses atrás #32300
por admin
#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: 7 anos 3 meses atrás por admin.
Por favor Acessar ou Registrar para participar da conversa.
- diegoo_martins
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 175
- Obrigados Recebidos: 0
7 anos 3 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
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.
- diegoo_martins
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 175
- Obrigados Recebidos: 0
7 anos 3 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.
Att,
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.
Att,
Por favor Acessar ou Registrar para participar da conversa.
Tempo para a criação da página:0.094 segundos