- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Pontos de Entrada
- ITENS PEDIDO DE COMPRA
Perguntas ITENS PEDIDO DE COMPRA
- admin
- Desconectado
- Administrador
Menos
Mais
- Postagens: 297
- Obrigados Recebidos: 21
7 anos 7 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.
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.
- manoelcarlosjunior
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 116
- Obrigados Recebidos: 0
7 anos 7 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 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 !
Abraço !
Por favor Acessar ou Registrar para participar da conversa.
- admin
- Desconectado
- Administrador
Menos
Mais
- Postagens: 297
- Obrigados Recebidos: 21
- manoelcarlosjunior
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 116
- Obrigados Recebidos: 0
7 anos 7 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
#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.
- manoelcarlosjunior
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 116
- Obrigados Recebidos: 0
7 anos 7 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ç !
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.
- manoelcarlosjunior
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 116
- Obrigados Recebidos: 0
7 anos 6 meses atrás - 7 anos 6 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
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: 7 anos 6 meses atrás por manoelcarlosjunior.
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Pontos de Entrada
- ITENS PEDIDO DE COMPRA
Tempo para a criação da página:0.100 segundos