PERGUNTAS E RESPOSTAS
 
Bem Vindo, Visitante  Todos os Fórums
  ADVPL
Enviar para a impressoraImprimir  Enviar e-mail para um amigoEnviar Para um Amigo
Precisa estar Logado

Subject Assunto:
Ponto de entrada pedido de venda
Versão:
12.1.27
Plataforma:
Microsoft
Complemento:
DB:
SQL Server
Complemento:
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário GCALICCHIO GCALICCHIO em 17/02/2021, 08:59 h
Local: SP  Registro: 15/02/2021  Postagens: 4
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)

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário EMERSON.EN EMERSON.EN em 18/02/2021, 07:16 h
Local: SP  Registro: 20/08/2010  Postagens: 580
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 )




Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário EMERSON.EN EMERSON.EN em 18/02/2021, 07:26 h
Local: SP  Registro: 20/08/2010  Postagens: 580
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 )


Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário GCALICCHIO GCALICCHIO em 19/02/2021, 12:00 h
Local: SP  Registro: 15/02/2021  Postagens: 4
Emerson, agradeço imensamente a ajuda completa.
Deu certo! Obrigado e sucesso.

Para postar no Fórum você precisa efetuar o seu login ou se registrar

 Mudar para Fórum

 

 

 
 
   
Pagina Principal Shopping PROTHEUS Tire suas duvidas Vagas Microsiga em todo Brasil Aprofunde seus conhecimentos Noticias Online Fale Conosco Pagina Principal