Montando a estrutura de um produto com as funções Estrut2 e FimEstrut2 – Maratona AdvPL e TL++ 155

Nesse vídeo demonstraremos a utilização das funções Estrut2 e FimEstrut2, que servem para montar uma temporária com a estrutura de um produto (conforme cadastro na SG1).

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zExe155
Monta a estrutura de um produto em uma tabela temporária
@type Function
@author Atilio
@since 18/12/2022
@see https://tdn.totvs.com/pages/releaseview.action?pageId=287060852 e https://tdn.totvs.com/pages/releaseview.action?pageId=287060899
@obs 
    Função Estrut2
    Parâmetros
        + cProduto     , Caractere   , Código do produto (passar com os espaços a direita)
        + nQuantidade  , Numérico    , Quantidade base para ser calculada na estrutura
        + cAliasEstru  , Caractere   , Nome do alias da estrutura
        + oTempTable   , Objeto      , Objeto que será criado como temporária
        + lAsShow      , Lógico      , Monta a estrutura exatamente igual é na visualização em tela
        + lPreEstru    , Lógico      , Se for .T. olha a pré estrutura na SGG senão se for .F. olha na estrutura na SG1
        + lVldData     , Lógico      , Faz a consistência se os componentes estão dentro ou fora das datas de vigência (data ini e fim)
    Retorno
        Não tem Retorno

    Função FimEstrut2
    Parâmetros
        + cAliasEstru    , Caractere       , Nome do alias usado
        + oTempTable     , Objeto          , Objeto da Tabela temporária criada na Estrut2
    Retorno
        Não tem Retorno

    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/

User Function zExe155()
    Local aArea     := FWGetArea()
    Local cMensagem := ""
    Local cCodProd  := "E0001" //Produto raíz da estrutura
    Local nQuant    := 5       //Quantidade a produzir

    //Variáveis Private para utilização da função Estrut2
    Private oTempTable  := Nil
    Private cAliasTmp   := "ESTRUT"
    Private nEstru      := 0
    
    //Cria a estrutura temporária
    cCodProd := AvKey(cCodProd, "B1_COD")
    Estrut2(cCodProd, nQuant, cAliasTmp, @oTempTable)
    
    //Se houver dados
    (cAliasTmp)->(DbGoTop())
    If ! (cAliasTmp)->(EoF())
        
        //Enquanto houver dados, monta mensagem do produto, componente e quantidade
        While ! (cAliasTmp)->(EoF())
            cMensagem += "Produto: " + (cAliasTmp)->CODIGO + ", Componente: " + (cAliasTmp)->COMP + ", Quantidade: " + cValToChar((cAliasTmp)->QUANT) + CRLF
            
            (cAliasTmp)->(DbSkip())
        EndDo
        
        FWAlertInfo(cMensagem, "Estrutura através de Estrut2")

    Else
        FWAlertError("Estrutura não encontrada!", "Falha Estrut2")
    EndIf
    
    //Finaliza a função de estrutura
    FimEstrut2(cAliasTmp, @oTempTable)

    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