Perguntas ITENS PEDIDO DE COMPRA

Mais
6 anos 11 meses atrás #32038 por admin
Respondido por admin no tópico ITENS PEDIDO DE COMPRA
Acho que entendi, não pode ser superior ao total das solicitações correto ?

anexa o fonte que vc criou ai, compacta ele e anexa aqui, assim já mexo direto nele.

Por favor Acessar ou Registrar para participar da conversa.

Mais
6 anos 11 meses atrás #32042 por manoelcarlosjunior
Respondido por manoelcarlosjunior no tópico ITENS PEDIDO DE COMPRA
Aqui a rede da empresa não permite upload no seu site amigo :S mas usei esse ultimo seu pode colar como texto se possível amigo. Isso mesmo mas só reforçando só depois que você vincula ele permite a alteração do valor. Ai nos teríamos que ou impedir essa alteração ou na confirmação acusar, quantidade maior que a quantidade da solicitação acho que esse é o enigma amigão !! Se conseguirmos vou fazer um vídeo e mencionar a grande ajuda do Master ADVPL kkk
Abraço !

Por favor Acessar ou Registrar para participar da conversa.

Mais
6 anos 11 meses atrás #32062 por admin
Respondido por admin no tópico ITENS PEDIDO DE COMPRA
Blz cara não esqueci de você não, é que estou numa correria danada, mas essa semana vejo se consigo te ajudar ok.

Por favor Acessar ou Registrar para participar da conversa.

Mais
6 anos 11 meses atrás #32079 por manoelcarlosjunior
Respondido por manoelcarlosjunior no tópico ITENS PEDIDO DE COMPRA
Resolvido Com a ajuda de um amigo Emerson !

#include "protheus.ch"

User Function MT120OK()

Local cAreaSC1 := GetArea("SC1")
Local lRet := .T. // retorno, em principio, verdadeiro
Local cMsg := ""
Local lHaSC
Local aItensSC := {}
Local nItensSC := 0
Local _i := 0
Local nPosDelete := len( aHeader ) + 1
Local nPosPRODUTO := ascan( aheader,{ |aVal| alltrim( aVal[2] ) == "C7_PRODUTO" } )
Local nPosNUMSC := ascan( aheader,{ |aVal| alltrim( aVal[2] ) == "C7_NUMSC" } ) // Numero da SC
Local nPosITEMSC := ascan( aheader,{ |aVal| alltrim( aVal[2] ) == "C7_ITEMSC" } ) // Item da SC
Local nPosITEMPED := ascan( aheader,{ |aVal| alltrim( aVal[2] ) == "C7_ITEM" } ) // Item do pedido
Local nPosQTD := ascan( aheader,{ |aVal| alltrim( aVal[2] ) == "C7_QUANT" } ) // Quantidade entregue

SC1->( dbsetorder(1) )

// varre todos os itens do pedido e soma as quantidades por SC/Item
// isto é necessário porque alguém pode repetir a mesma solicitação/item no pedido
For _i := 1 to len( aCols )
// verifico se o resgistro está ativo e têm informação da solicitação de compra
lHaSC := ! aCols[_i,nPosDelete] .AND. ! EMPTY( aCols[_i,nPosNUMSC] ) .AND. ! EMPTY( aCols[_i,nPosITEMSC] )

// se o registro estiver ativo e houver informação da solicitação de compra,
// preencho o array aItensSC, que terá o numero da SC, o item da SC e a quantidade total do pedido de compra
if lHaSC
// procuro pela SC e item da SC no array aItensSC
nItemSC := aScan( aItensSC, { |x| x[1] == aCols[_i,nPosNUMSC] .AND. x[2] == aCols[_i,nPosITEMSC] } )

// se não encontrou um registro para solicitação/item, cria um
if nItemSC == 0
aAdd( aItensSC, { aCols[_i,nPosNUMSC], aCols[_i,nPosITEMSC], aCols[_i,nPosQTD], aCols[_i,nPosITEMPED] } ) // SC, item SC e quantidade do pedido
else // se encontrou, soma a quantidade
aItensSC[ nItemSC,3 ] += aCols[_i,nPosQTD]
aItensSC[ nItemSC,4 ] += ", " + aCols[_i,nPosITEMPED]
endif
endif
Next

// agora varre o array aItensSC e avalia se a solicitação de compra comporta a quantidade informada no pedido
for _i := 1 to len( aItensSC )
// procura pela solicitação de compra e item da solicitação de compra
SC1->( dbseek( xFilial() + aItensSC[_i,1] + aItensSC[_i,2] ) )
// verifica se a quantidade no pedido pode ser atendida pelo saldo da SC
If aItensSC[_i,3] > SC1->(C1_QUANT - C1_QUJE)
cMsg += iif( Empty(cMsg),"","," ) + aItensSC[_i,4]
EndIf
Next

RestArea(cAreaSC1)

if ! EMPTY(cMsg)
Msginfo("Prezado, de acordo com a política interna não é permitido que a quantidade do item seja maior que a quantidade do saldo disponível na solicitação de compra, revise o(s) item(ns) " + cMsg,"ATENÇÃO!!!")
lRet := .F. // retorna falso, bloqueando a confirmação do pedido
endif

Return lRet

Por favor Acessar ou Registrar para participar da conversa.

Mais
6 anos 11 meses atrás #32097 por manoelcarlosjunior
Respondido por manoelcarlosjunior no tópico ITENS PEDIDO DE COMPRA
Help Galera !!

O P.E ta perfeito mano só que na inclusão... Quando vou alterar o pedido de compra ele refaz o calculo e diz que a quantidade ta excedendo detalhe se alterar qualquer dado até o valor. Já identifiquei causa acredito ser no ultimo for ele busca de novo a quantidade já entregue da SC anterior já gravada no pedido.

Quem puder me ajudar ..
To correndo atras aqui como sempre qualquer coisa encontrando a solução vou atualizar para gerações futuras rsrsr

Abç !

Por favor Acessar ou Registrar para participar da conversa.

Mais
6 anos 11 meses atrás - 6 anos 11 meses atrás #32105 por manoelcarlosjunior
Respondido por manoelcarlosjunior no tópico ITENS PEDIDO DE COMPRA
Fiz uma modificação acho que agora ta funcionando normalmente !
Abraço !




#include "protheus.ch"

User Function MT120OK()

Local cAreaSC1 := GetArea("SC1")
Local lRet := .T. // retorno, em principio, verdadeiro
Local cMsg := ""
Local lHaSC
Local cAltera
Local aItensSC := {}
Local nItensSC := 0
Local _i := 0
Local nPosDelete := len( aHeader ) + 1
Local nPosPRODUTO := ascan( aheader,{ |aVal| alltrim( aVal[2] ) == "C7_PRODUTO" } )
Local nPosNUMSC := ascan( aheader,{ |aVal| alltrim( aVal[2] ) == "C7_NUMSC" } ) // Numero da SC
Local nPosITEMSC := ascan( aheader,{ |aVal| alltrim( aVal[2] ) == "C7_ITEMSC" } ) // Item da SC
Local nPosITEMPED := ascan( aheader,{ |aVal| alltrim( aVal[2] ) == "C7_ITEM" } ) // Item do pedido
Local nPosQTD := ascan( aheader,{ |aVal| alltrim( aVal[2] ) == "C7_QUANT" } ) // Quantidade entregue

SC1->( dbsetorder(1) )

// varre todos os itens do pedido e soma as quantidades por SC/Item
// isto é necessário porque alguém pode repetir a mesma solicitação/item no pedido
For _i := 1 to len( aCols )
// verifico se o resgistro está ativo e têm informação da solicitação de compra
lHaSC := ! aCols[_i,nPosDelete] .AND. ! EMPTY( aCols[_i,nPosNUMSC] ) .AND. ! EMPTY( aCols[_i,nPosITEMSC] )

// se o registro estiver ativo e houver informação da solicitação de compra,
// preencho o array aItensSC, que terá o numero da SC, o item da SC e a quantidade total do pedido de compra
if lHaSC
// procuro pela SC e item da SC no array aItensSC
nItemSC := aScan( aItensSC, { |x| x[1] == aCols[_i,nPosNUMSC] .AND. x[2] == aCols[_i,nPosITEMSC] } )

// se não encontrou um registro para solicitação/item, cria um
if nItemSC == 0
aAdd( aItensSC, { aCols[_i,nPosNUMSC], aCols[_i,nPosITEMSC], aCols[_i,nPosQTD], aCols[_i,nPosITEMPED] } ) // SC, item SC e quantidade do pedido
else // se encontrou, soma a quantidade
aItensSC[ nItemSC,3 ] += aCols[_i,nPosQTD]
aItensSC[ nItemSC,4 ] += ", " + aCols[_i,nPosITEMPED]
endif
endif
Next

// agora varre o array aItensSC e avalia se a solicitação de compra comporta a quantidade informada no pedido

IF INCLUI == .T.
for _i := 1 to len( aItensSC )
// procura pela solicitação de compra e item da solicitação de compra
SC1->( dbseek( xFilial() + aItensSC[_i,1] + aItensSC[_i,2] ) )
// verifica se a quantidade no pedido pode ser atendida pelo saldo da SC
If aItensSC[_i,3] > SC1->(C1_QUANT - C1_QUJE)
cMsg += iif( Empty(cMsg),"","," ) + aItensSC[_i,4]
EndIf
Next
ENDIF
IF ALTERA == .T.
for _i := 1 to len( aItensSC )
// procura pela solicitação de compra e item da solicitação de compra
SC1->( dbseek( xFilial() + aItensSC[_i,1] + aItensSC[_i,2] ) )
// verifica se a quantidade no pedido pode ser atendida pelo saldo da SC
If aItensSC[_i,3] >= SC1->(C1_QUANT + C1_QUJE)
// If aItensSC[_i,3] >= SC7->(C7_QUANT + C7_QUJE)
cMsg += iif( Empty(cMsg),"","," ) + aItensSC[_i,4]
EndIf
Next
ENDIF


RestArea(cAreaSC1)

if !EMPTY(cMsg)
Msginfo("Prezado, de acordo com a política interna não é permitido que a quantidade do item seja maior que a quantidade do saldo disponível na solicitação de compra, revise o(s) item(ns) " + cMsg,"ATENÇÃO!!!")
lRet := .F. // retorna falso, bloqueando a confirmação do pedido
endif

Return lRet
Ultima edição: 6 anos 11 meses atrás por manoelcarlosjunior.

Por favor Acessar ou Registrar para participar da conversa.

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