Usando a função Ma410Impos para Buscar o Total do Pedido com Impostos | Ti Responde 0196

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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação