No vídeo de hoje, vamos demonstrar em como buscar o total do pedido de venda usando as funções FillGetDados e Ma410Impos.
A dúvida de hoje, nos perguntaram, se seria possível buscar o total do pedido de venda, mas sem precisar ficar usando as MaFis* (como MaFisIni, MaFisAdd, entre outras).
Pensando nisso, montamos um exemplo, onde vamos mostrar em como montar o aCols e aHeader do pedido de vendas através da FillGetDados e depois buscar o total do pedido com a Ma410Impos.
Segue abaixo o vídeo exemplificando:
E abaixo o código fonte desenvolvido:
//Bibliotecas #Include "tlpp-core.th" //Declaração da namespace Namespace custom.terminal.youtube #Define CRLF Chr(13) + Chr(10) //Carriage Return Line Feed /*/{Protheus.doc} User Function video0196 Buscando o valor total do pedido sem precisar usar manualmente as MaFis* @type Function @author Atilio @since 14/08/2024 @example custom.terminal.youtube.u_video0196() /*/ User Function video0196() Local aArea := FWGetArea() As Array Local aParameters := {} As Array Local cOrderId := Space(TamSX3('C5_NUM')[1]) As Character Local nTotalValue := 0 As Numeric Local nOption := 2 As Numeric Local lReturnTotal := .T. As Logical Local aReferences := {} As Array //Variáveis abaixo usadas no FillGetDados Local cSeek := "" As Character Local bWhile := {|| } As CodeBlock Local aNoFields := {"C6_NUM", "C6_QTDEMP", "C6_QTDENT", "C6_QTDEMP2", "C6_QTDENT2", "C6_INFAD"} As Array Local bCond := {|| .T.} As CodeBlock Local bAction1 := {|| .T.} As CodeBlock Local bAction2 := {|| .T.} As CodeBlock Private aHeader := {} As Array Private aCols := {} As Array //Adicionando os parametros do ParamBox aAdd(aParameters, {1, "Número do Pedido", cOrderId, "", "ExistCPO('SC5')", "SC5", ".T.", 60, .T.}) //Se a pergunta for confirmada If ParamBox(aParameters, 'Informe os parâmetros', /*aRet*/, /*bOk*/, /*aButtons*/, /*lCentered*/, /*nPosx*/, /*nPosy*/, /*oDlgWizard*/, /*cLoad*/, .F., .F.) cOrderId := MV_PAR01 //Abre os itens do pedido e posiciona no pedido de venda DbSelectArea("SC6") SC6->(DbSetOrder(1)) // C6_FILIAL + C6_NUM + C6_ITEM + C6_PRODUTO DbSelectArea("SC5") SC5->(DbSetOrder(1)) // C5_FILIAL + C5_NUM SC5->(MsSeek(FWxFilial("SC5") + cOrderId)) //Monta as variáveis usadas no FillGetDados cSeek := FWxFilial("SC6") + SC5->C5_NUM bWhile := {|| C6_FILIAL + C6_NUM } cQuery := "SELECT * " + CRLF cQuery += "FROM " + RetSqlName("SC6") + " SC6 " + CRLF cQuery += "WHERE SC6.C6_FILIAL = '" + FWxFilial("SC6") + "' AND " + CRLF cQuery += "SC6.C6_NUM = '" + SC5->C5_NUM + "' AND " + CRLF cQuery += "SC6.D_E_L_E_T_ = ' ' " + CRLF cQuery += "ORDER BY "+SqlOrder(SC6->(IndexKey())) + CRLF //Gera o aHeader e aCols, conforme documentação do TDN: https://tdn.totvs.com/display/public/framework/FillGetDados FillGetDados(nOption, "SC6", 1, cSeek, bWhile, {{bCond, bAction1, bAction2}}, aNoFields, /*aYesFields*/, /*lOnlyYes*/, cQuery, /*bMontCols*/, .F., /*aHeaderAux*/, /*aColsAux*/, /*bAfterCols*/, /*bBeforeCols*/, /*bAfterHeader*/, "SC6") //Coloca a pergunta padrão da tela do pedido em memória, altera as flags de INCLUI e ALTERA e joga a tabela SC5 para a memória (M->) Pergunte("MTA410",.F.) INCLUI := .F. ALTERA := .F. RegToMemory("SC5", .F.) //Busca o valor total do pedido de venda //Caso utilize o array aReferences, essas são as posições (igual Aba Rentabilidade da opção Outras Ações > Planilha): // [01] = Código do Produto // [02] = Valor Total // [03] = C.M.V. // [04] = Valor Presente // [05] = Lucro Bruto // [06] = Margem de Contribuição em % nTotalValue := Ma410Impos(nOption, lReturnTotal, @aReferences) FWAlertInfo("Valor total do pedido '" + cOrderId + "' é de " + cValToChar(nTotalValue), "Atenção") EndIf FWRestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.