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 |