Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: Como Criar Relatórios de Cotações com Dados Agrupados Usando SQL

img: DALL·E 2024-08-09 07.00.00 - A high-quality image showcasing a detailed SQL query being written in a code editor, such as VS Code, on a dark theme background. ... ## Como Criar Relatórios de Cotações com Dados Agrupados Usando SQL Quando trabalhamos com sistemas ERP e precisamos gerar relatórios de cotações que apresentam dados de múltiplos fornecedores, é comum encontrarmos a necessidade de pivotar registros que, originalmente, são apresentados de forma vertical. Isso é especialmente útil quando o objetivo é comparar preços ou condições de diferentes fornecedores para um mesmo produto em uma única linha do relatório. Neste artigo, vamos explorar uma abordagem para transformar registros verticais em colunas, facilitando a impressão de relatórios que consolidam informações de vários fornecedores em uma única linha. Vamos utilizar SQL com técnicas de pivotagem, e ao final, mostraremos como estender essa técnica para um número variável de fornecedores. ### Estrutura do Relatór

Protheus :: ADVPL utilizando MVC

ADVPL com MVC "é o que há". Por muito tempo a totvs não implementava melhoria significativa em sua linguagem ADVPL (à despeito das melhorias implementadas por outros fornecedores de linguagens no padrão CodBase Harbour, xHarbour dentre outras) mas MVC foi a campeã. Muito fácil programar agora: vou ensinar ao meu filho e curtir um bom e merecido descanso em Dubai ou começar a programar em Assembly me distraindo com o MenuetOS porque em ADVPL com MVC está muito, mas muito fácil.

Não deixem de baixar o "Tutorial" e mais ainda, não deixem de utilizar.

[]s
иαldσ dj

Comentários

  1. Ainda bem que eu sigo o seu blog... valeu Naldo por compartilhar essa belíssima informação.

    Saudações Nordestinas mais especificamente de Alagoas.

    Abraço.

    ResponderExcluir
  2. Muito bom o material. Bem mais organizado que as formas tradicionais de desenvolvimento ADVPL. Pena que não tem funções para desenvolvimento de relatórios.

    ResponderExcluir
  3. Para relatórios, ultimamente, utilizo o IReport baseado no JasperReports.

    Afinal, o protheus não é uma aplicação especializada na emissão de relatórios.

    []s
    иαldσ dj

    ResponderExcluir
  4. Você tem algum material ou algum post relacionado aqui no blog?

    ResponderExcluir
  5. Tenho planos para uma série de 'posts' sobre o IReports. Ainda não tive tempo para monta-la. Acho que tenho uma documentação em algum lugar. Se acha-la te passo o link.

    []s
    иαldσ dj

    ResponderExcluir
  6. Estou estudando o material mas não encontro a include FWMVCDEF
    Onde posso encontra-la?
    Poderia me envia-la por email?
    Att,
    Henrique
    henrique@esdeva.com.br

    ResponderExcluir
  7. Só com o pessoal da Totvs.

    []s
    иαldσ dj

    ResponderExcluir
  8. Boa tarde Naldo.

    Você pode me tirar uma dúvida por favor?!

    O conceito MVC funciona na versão 10?

    Outra coisa, seguindo a apostila, como eu faço para que dentro do meu fonte exemplo: ( User Function teste01() ) as funções Static Function ModelDef, ViewDef sejam usadas, pergunto isso pois fiz a declaração dessas duas funções dentro da minha User function e não funcionou, mais também não apresentou nenhum erro.

    Desculpa te incomodar e obrigado por responder.

    Abraço.

    ResponderExcluir
    Respostas
    1. Este comentário foi removido pelo autor.

      Excluir
    2. Bom dia Talvane.
      Não sei se ainda está com dúvidas, mas respondendo a sua pergunta o MVC funciona sim na versão 10, mas precisa baixas os arquivos include (.ch) no portal.
      Sobre as funções ModelDef e ViewDef, você não precisa chamar elas na sua função... Elas são chamadas automaticamente se você fizer a declaração correta do menu no array aRotina, que deve estar declarado da seguinte forma na função Static Function MenuDef()

      // ----------------------------------------
      User Function myFunction()
      Private aRotina := MenuDef()
      .
      .
      .
      Return Nil

      // ----------------------------------------
      Static Function MenuDef()
      Local aRotina := {}

      ADD OPTION aRotina
      Title 'nome_do_item_no_menu'
      Action 'VIEWDEF.nome_do_arquivo_fonte'
      OPERATION valor_que_define_a_operacao_a_ser_executada(inclusão,alteração,etc)
      ACCESS valor_que_define_o_nivel_de_acesso

      Return aRotina

      // ----------------------------------------
      Static Function ViewDef()
      Local oView
      Local oModel := FWLoadModel("nome_do_arquivo_fonte")
      .
      .
      .
      Return oView
      // ----------------------------------------

      Por definição o sistema vai chamar a rotina ViewDef do arquivo fonte definido no array aRotina Action 'VIEWDEF.nome_do_arquivo_fonte', que por sua vez usará as definições do ModelDef do arquivo fonte definido na função ViewDef (oModel := FWLoadModel("nome_do_arquivo_fonte"))

      Espero ter ajudado.

      Excluir
  9. Talvane,

    Acredito que sim, mas só a Totvs para ratificar. Provavelmente dependerá da atualização de algum Framework. Entre em contato com eles.

    []s
    иαldσ dj

    ResponderExcluir
  10. Não está mais disponivel o download do tutorial ...

    ResponderExcluir
    Respostas
    1. Leonardo, o "link" foi corrigido. Apontava para o antigo TDN

      Excluir
  11. Naldo,

    Soube o que era MVC através dessa pagina. Muito interessante.
    Li toda a apostila, e fiz alguns programinhas.
    Agora estou tentando usar o comando NEW MODEL, e não tem funcionado direito.
    Voce poderia me dizer o que há de errado com o codigo abaixo?
    User Function COMP043_MVC()
    Local oBrowse
    NEW MODEL ;
    TYPE 3 ;
    DESCRIPTION "Pedidos" ;
    BROWSE oBrowse ;
    SOURCE "COMP043_MVC" ;
    MODELID "MDCOMP043" ;
    MASTER "SC5" ;
    DETAIL "SC6" ;
    RELATION { { 'C6_FILIAL', 'xFilial( "SC6" )' }, { 'C6_NUM' , 'C5_NUM' } } ;
    ORDERKEY SC6->( IndexKey( 1 ) )
    Return NIL

    ResponderExcluir
  12. O problema era q eu estava testando pelo cadastro de formulas, so funciona se adicionar ao menu.

    Valeu!

    ResponderExcluir
  13. Naldo, procurei em vários lugares e inclusive com a Totvs, como realizo o doubleclick com o MVC?

    ResponderExcluir
    Respostas
    1. Daniel a classe especializada em tratar a interação com o usuário é a TControl. Nela encontramos as propriedades:

      DATA bLClicked
      DATA bLDblClick
      DATA bRClicked

      As classes de interface TDialog, TWindow, TBitMap, Tetc... herdam essas propriedades e podem implementar controles específicos. Considerando que a interface MVC tem interação com o usuário é possível sim utilizar, se implementado pela TOTVS, os eventos acima relacionados. Então terá que identificar em que momento quer usar o evento relacionado a bLDblClick e implementá-lo.

      Excluir
    2. Também estou precisando disso.
      Naldo! Por acaso, você teria um exemplo de como fazer isso?

      Excluir
  14. Naldo, muito bom seu site, contrui uma app mvc aqui e gostei muito, mas tem uma coisa que estou apanhando um bocado, na tabela do browse tenho campo virtuais que são preenchidos de acordo com uma consulta padrão na hora da edição.

    Porem quando volto para consultar o cadastro ele não traz os dados, mesmo eu usando o "inic Browse" no configurador do campo.

    Como eue trago estes valores ?

    ResponderExcluir
  15. Boa tarde!

    Gelera, oque MODELID está esperando, sei que é uma string mas oque devo passar?
    não tem na documentação. algem aberia me informar?






    cid:421714164268
    STRING
    STRING


    ResponderExcluir
  16. Boa tarde. Não sei se vc vai poder me ajudar. Criei um programa em MVC para o modelo3 com duas tabelas customisadas. As duas são exclusivas. Ai vem a duvida. somente na tabela PAI é que é gravada a filial na tabela filha não. Detalhe o relacionamente entre as duas é a filial e um codigo, que digito na tabela PAI. Esse codigo via pra tabela Filha, mas a filial não

    ResponderExcluir

Postar um comentário

Postagens mais visitadas