Imprimi Página | Fechar janela

Ponto de entrada pedido de venda

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: ADVPL
Descrição do Forum: Dúvidas sobre a programação em ADVPL
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=43557
Data da Impressão: quinta-feira, 28 de março de 2024 at 08:05


Topico: Ponto de entrada pedido de venda

Postado por: GCALICCHIO
Assunto: Ponto de entrada pedido de venda
Data Postagem: quarta-feira, 17 de fevereiro de 2021 at 08:59

Bom dia!

Solicito imensamente a ajuda de vocês

Estou tentando realizar alterações no preço do pedido de venda com um resultado obtido via query.

A demanda se da por conta de utilizar o ultimo custo médio da SB9 como preço de venda para alguns tipos de operação.

Entretanto, não estou tendo sucesso, não sei dizer se existe algo de errado no fonte ou então talvez estou utilizando o ponto de entrada errado.

Segue fonte:

User Function M410LIOK()
Local aItens  := {}
Local lRet     := .T.
Local aArea    := GetArea()
Local nPosProd     := GdFieldPos("C6_PRODUTO")
Local nPosTES      := GdFieldPos("C6_TES")
Local nPosPreco      := GdFieldPos("C6_PRCVEN")
Local nPosQtd     := GdFieldPos("C6_QTDVEN")
Local nPosTot      := GdFieldPos("C6_VALOR")
Local nLocal      := GdFieldPos("C6_LOCAL")
Local nFilial      := GdFieldPos("C6_FILIAL")
Local nPosCusto      := 0
Local nX       := 0
Local nLinAtu      := 0
Local rs :=0
Local lRet :=0

// Executa function apenas para TES 587
For nLinAtu := 1 To Len(aCols)
nPosTES := aCols[nLinAtu][nPosPreco] 
If nPosTES = ‘587‘
 CustoB9()
EndIf
Return(lRet)
Next

 Static Function CustoB9()
For nLinAtu := 1 To Len(aCols)
  n := nLinAtu // variável publica que indica a linha posicionada
            
BeginSql Alias "rs"
SELECT B9_CM1 
FROM %table:SB9% SB9
WHERE  SB9.B9_DATA = (SELECT MAX(B9_DATA) FROM SB9010)
AND B9_LOCAL = "‘" + %exp:aCols[nLinAtu][nLocal]% + "‘" 
AND B9_FILIAL = "‘" + %exp:aCols[nLinAtu][nFilial]%+ "‘" 
AND B9_COD = "‘" + %exp:aCols[nLinAtu][nPosProd]% + "‘" 
AND C6_NUM = "‘" + %exp:aCols[nLinAtu][nPedido]% + "‘" 
EndSql
 
rs->(DbSkip())
rs->(DbCloseArea())
MsgInfo("Foram processados "+cValToChar(nLinAtu)+" produtos.", "Atenção")
nPosCusto := rs
aCols[nLinAtu][nPosPreco] := nPosCusto
aCols[nLinAtu][nPosTot] := nPosCusto * nPosQtd
        Next nLinAtu
    RestArea(aArea)


Respostas:

Postado Por: EMERSON.EN
Data Postagem: quinta-feira, 18 de fevereiro de 2021 at 07:16

faça isso nos gatilhos dos campos C6_PRODUTO, C6_OPER e C6_TES

user function RCustSB9( cCodProd, cLocProd, nCustoSB9, lGrava )
local AreaAtiva := GetArea()
local NewAlias := GetNextAlias()
default cCodProd := GDFieldGet(‘C6_PRODUTO‘)
default cLocProd := GDFieldGet(‘C6_LOCAL‘)
default nCustoSB9 := GDFieldGet(‘C6_PRCVEN‘)
default lGrava := .F.

     BeginSql Alias (NewAlias)
          SELECT B9_CM1
          FROM %table:SB9%
          WHERE %notdel%
          AND B9_FILIAL = %xFilial:SB9%
          AND B9_COD = %exp:cCodProd%
          AND B9_LOCAL = %exp:cLocProd%
          AND B9_DATA =
          (
               SELECT MAX(B9_DATA)
               FROM %table:SB9%
               WHERE %notdel%
               AND B9_FILIAL = %xFilial:SB9%
          )
     EndSql

     if !empty((NewAlias)->B9_CM1)
          nCustoSB9 := (NewAlias)->B9_CM1
     endif

     (NewAlias)->(dbCloseArea())

     if lGrava
          GdFieldPut("C6_PRCVEN") := nCustoSB9
     endif

     RestArea( AreaAtiva )

return nCustoSB9

--------
uso:

gatilho do C6_PRODUTO, a regra seria: U_RCustSB9( , , , .T. )
gatilho do C6_OPER, a regra seria: U_RCustSB9( , , , .T. )
gatilho do C6_TES, a regra seria: U_RCustSB9( , , , .T. )

e, para retornar o custo a qualquer momento:
ncusto := U_RCustSB9( ‘codproddesejado‘, ‘localdesejado‘, 0 )







Postado Por: EMERSON.EN
Data Postagem: quinta-feira, 18 de fevereiro de 2021 at 07:26

na verdade, nos gatilhos seria necessário avaliar o TES:

faça isso nos gatilhos dos campos C6_PRODUTO, C6_OPER e C6_TES

user function RCustSB9( cCodProd, cLocProd, nCustoSB9 )
local AreaAtiva := GetArea()
local NewAlias := GetNextAlias()
default cCodProd := GDFieldGet(‘C6_PRODUTO‘)
default cLocProd := GDFieldGet(‘C6_LOCAL‘)
default nCustoSB9 := GDFieldGet(‘C6_PRCVEN‘)

     BeginSql Alias (NewAlias)
          SELECT B9_CM1
          FROM %table:SB9%
          WHERE %notdel%
          AND B9_FILIAL = %xFilial:SB9%
          AND B9_COD = %exp:cCodProd%
          AND B9_LOCAL = %exp:cLocProd%
          AND B9_DATA =
          (
               SELECT MAX(B9_DATA)
               FROM %table:SB9%
               WHERE %notdel%
               AND B9_FILIAL = %xFilial:SB9%
               AND B9_LOCAL = %exp:cLocProd%
          )
     EndSql

     if !empty((NewAlias)->B9_CM1)
          nCustoSB9 := (NewAlias)->B9_CM1
     endif

     (NewAlias)->(dbCloseArea())

     RestArea( AreaAtiva )

return nCustoSB9

--------
uso:

gatilho do C6_PRODUTO, a regra seria:
if(GDFieldGet(‘C6_TES‘)=‘587‘, U_RCustSB9(), GDFieldGet(‘C6_PRCVEN‘))

gatilho do C6_OPER, a regra seria:
if(GDFieldGet(‘C6_TES‘)=‘587‘, U_RCustSB9(), GDFieldGet(‘C6_PRCVEN‘))

gatilho do C6_TES, a regra seria:
if(GDFieldGet(‘C6_TES‘)=‘587‘, U_RCustSB9(), GDFieldGet(‘C6_PRCVEN‘))

os gatilhos sempre com contradomínio no campo C6_PRCVEN


e, para retornar o custo a qualquer momento:
ncusto := U_RCustSB9( ‘codproddesejado‘, ‘localdesejado‘, 0 )





Postado Por: GCALICCHIO
Data Postagem: sexta-feira, 19 de fevereiro de 2021 at 12:00

Emerson, agradeço imensamente a ajuda completa.
Deu certo! Obrigado e sucesso.




Imprimir Página | Fechar Janela