Hoje vou mostrar como chamar a tela padrão da estrutura de um produto, dentro de uma dialog customizada.
Se por acaso você já precisou trazer a estrutura de um produto para dentro de uma dialog, saiba que tem como fazer isso de uma maneira bem simples.
Primeiramente você vai precisar criar duas variáveis private, uma chamada nIndex com conteúdo igual a 1, e uma chamada ldbTree com conteúdo igual a .T..
Depois de criar as duas, você vai instanciar a classe DbTree, definindo o tamanho dela na tela, no nosso exemplo, o nome da DbTree será oTreePad.
Por último, chame a pergunta MTA200 com um .F. para não ser exibida, e em seguida chame a função Ma200Monta passando por parâmetro o seu oTreePad, a janela de diálogo e o código do produto. O resultado será similar ao abaixo:
Abaixo o código fonte desenvolvido:
//Bibliotecas #Include "TOTVS.ch" #Include 'FWMVCDef.ch' /*/{Protheus.doc} zTelEstr Monta a tela da estrutura customizada @type Function @author Atilio @since 31/01/2020 @version 1.0 @param cProduto, character, Codigo do Produto @param cDescric, character, Descricao do Produto /*/ User Function zTelEstr(cProduto, cDescric) Local aArea := GetArea() Local cFontUti := "Tahoma" Local oFontAno := TFont():New(cFontUti,,-38) Local oFontSub := TFont():New(cFontUti,,-20) Local oFontSubN := TFont():New(cFontUti,,-20,,.T.) Local oFontBtn := TFont():New(cFontUti,,-14) Default cProduto := SB1->B1_COD Default cDescric := SB1->B1_DESC Private aTamanho := MsAdvSize() Private nJanLarg := aTamanho[5] Private nJanAltu := aTamanho[6] Private cProdPai := cProduto Private oDlgEstr Private oTreePad //Variaveis para usar o Ma200Monta Private ldbTree := .T. Private nIndex := 1 //Criando a janela DEFINE MSDIALOG oDlgEstr TITLE "Estrutura do Produto" FROM 000, 000 TO nJanAltu, nJanLarg COLORS 0, 16777215 PIXEL //Labels gerais @ 004, 003 SAY "EST" SIZE 200, 030 FONT oFontAno OF oDlgEstr COLORS RGB(149,179,215) PIXEL @ 004, 050 SAY "Produto " + Alltrim(cProduto) SIZE 200, 030 FONT oFontSub OF oDlgEstr COLORS RGB(031,073,125) PIXEL @ 014, 050 SAY Alltrim(cDescric) SIZE 400, 030 FONT oFontSubN OF oDlgEstr COLORS RGB(031,073,125) PIXEL //Criando o DbTree oTreePad := dbTree():New(029, 003, (nJanAltu/2)-26, (nJanLarg/2)-1, oDlgEstr, {|| /* Se quiser colocar alguma função aqui, será chamada ao mudar de cargo */ }, , .T., , oFontBtn) //Monta os dados da Tree Pergunte('MTA200', .F.) Ma200Monta(oTreePad, oDlgEstr, cProduto) //Legenda @ (nJanAltu/2)-23, 003 GROUP oGrpLeg TO (nJanAltu/2)-3, (nJanLarg/2-003)-96 PROMPT "Legenda: " OF oDlgEstr COLOR 0, 16777215 PIXEL @ (nJanAltu/2)-17, 006 BITMAP oBmpPend SIZE 012, 011 OF oDlgEstr FILENAME "FOLDER5" NOBORDER ADJUST PIXEL @ (nJanAltu/2)-17, 067 BITMAP oBmpFina SIZE 012, 011 OF oDlgEstr FILENAME "FOLDER7" NOBORDER ADJUST PIXEL @ (nJanAltu/2)-14, 024 SAY oSayPend PROMPT "Componente Ok" SIZE 040, 007 OF oDlgEstr PIXEL @ (nJanAltu/2)-14, 085 SAY oSayFina PROMPT "Componente Expirado" SIZE 060, 007 OF oDlgEstr PIXEL @ (nJanAltu/2)-23, (nJanLarg/2-003)-93 GROUP oGrpAco TO (nJanAltu/2)-3, (nJanLarg/2)-1 PROMPT "Acoes: " OF oDlgEstr COLOR 0, 16777215 PIXEL @ (nJanAltu/2)-17,(nJanLarg/2-003)-(0042*02) BUTTON "&Ver Prod." Size 040, 012 Font oFontBtn Action (Processa({|| fVisProd()}, "Processando...")) PIXEL @ (nJanAltu/2)-17,(nJanLarg/2-003)-(0042*01) BUTTON "&Sair" Size 040, 012 Font oFontBtn Action (oDlgEstr:End()) PIXEL ACTIVATE MSDIALOG oDlgEstr CENTERED RestArea(aArea) Return Static Function fVisProd() Local aArea := GetArea() Local cCargo := oTreePad:GetCargo() Local nRecno := Val(SubStr(cCargo, Len(SG1->G1_COD + SG1->G1_TRT + SG1->G1_COMP) + 1, 9)) Local cTipo := Right(cCargo,4) Local cCodig := "" //Se houver registro If nRecno > 0 //Posicionando no Recno DbSelectArea('SG1') SG1->(dbSetOrder(1)) SG1->(DbGoTo(nRecno)) DbSelectArea('SB1') SB1->(DbSetOrder(1)) //Pegando o produto If cTipo == 'CODI' cCodig := cProdPai //SG1->G1_COD Else cCodig := SG1->G1_COMP EndIf SB1->(DbSeek(FWxFilial('SB1') + cCodig)) FWExecView("Visualizar produto", "MATA010", MODEL_OPERATION_VIEW,,{||.T.},,,,,,,) EndIf RestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Dan, boa tarde!
Sei que as minhas dúvidas logo mais abaixo não tem relação nenhuma com a publicação, mas vamos lá:
Como eu posso unir duas ou mais colunas em apenas uma (exemplo: B1_COD + B1_DESC + B1_LOCPAD) dentro de um relatório padrão do Protheus?
Outra dúvida seria: sei que existem relatórios (padrão) que já mostram o totalizador de valores, por exemplo, o FINR130. Como eu poderia incluir uma coluna (por exemplo: E1_NOMCLI) na mesma linha de resultado do totalizador, pois hoje sabemos que o relatório sempre grava o resultado do totalizador abaixo de uma linha contínua.
Boa tarde Yuri, tudo bem?
No caso, existem relatórios que usam TReport e os que usam FWMSPrinter, ai para cada caso é um caso.
Como é um outro assunto (diferente do artigo), entre em contato conosco no Skype, Discord, e-Mail ou WhatsApp que nós lhe auxiliamos com sua dúvida. Link para contato: https://terminaldeinformacao.com/contato/