Em algumas circunstâncias a solução técnica pode estar em outra plataforma. Este é um caso onde, meus colegas e eu, implementamos em VBA uma solução de relatório no BW.
Solução simples e fácil de se implementar. Se você conhecer um pouco de Visual Basic fica ainda mais fácil. Se você não conhecer, também não se preocupe, as macros do Excel podem ajudar.
Algumas pessoas podem não saber o que é BW, portanto acho legal fazer um breve resumo. Mais um dos muitos módulos no SAP, o BW conta com uma plataforma diferenciada e arquitetura dedicada. Tudo isso para suportar o armazenamento de uma grande quantidade de dados. BW é uma sigla simplificada de Business Information Warehouse, que traduzindo significa Depósito de Informações de Negócio. É um módulo especializado em tratamento e organização de dados na forma de cubo, onde se possibilita que informações possam ser montadas e formatadas de várias formas e níveis diferentes, resultando em várias possibilidades de relatórios.
O VBA é a implementação da plataforma do bom e velho Visual Basic em outras aplicações da Microsoft. A tradução é exatamente sua explicação, Visual Basic for Applications. A ferramenta onde o VBA é mais utilizado com certeza é o Excel, mas o que poucos sabem é que todas as aplicações do Office podem utilizá-la. É possível administrar e manipular praticamente tudo nas aplicações do Office usando VBA.
Uma das formas de interface de relatório com o usuário que o BW utiliza é o Excel. E com certeza uma das mais interessantes, pelo fato de poder formatar e salvar o relatório conforme seja de seu agrado, além de facilmente se manipular os dados e cruzar com outros relatórios via PROCV. E no caso do Excel, o próprio BW usa API's via VBA para escrever os dados e desenhar um formato padrão de relatório. Isso nos abre infinitas possibilidades de soluções, e é uma destas soluções que venho compartilhar nesta postagem.
Para falarmos da solução, temos que primeiro falar do problema. Nas versões mais antigas do BW, os campos de texto tem uma limitação de 60 caracteres. Sendo assim, se for necessário usar um campo de 100 caracteres você será obrigado a quebrar o campo em duas partes, sendo uma de 60 e outra de 40. Em nosso caso, o campo tinha 6000 caracteres, portanto foi necessário quebrar em 100 partes. Parece loucura, mas é a realidade.
E como exibir isso no relatório, um único campo dividido em 100 colunas? Claro que não fica nada legal. Foi então que nosso colega, profissional de BW, cogitou uma possível solução em VBA. Então abraçamos a ideia e, depois de descobrirmos alguns detalhes bens legais, fizemos a concatenação das 100 colunas em apenas uma, deixando o relatório melhor apresentável.
Depois de criar uma query para o Excel, ao abri-la pelo Analyzer do BW, você poderá acessar a área de desenvolvedor (destacado em amarelo na imagem abaixo) e em seguida clicar em Visual Basic (destacado em vermelho na imagem abaixo).
Feito o passo acima, irá se abrir uma tela muito parecida com o antigo Visual Basic 6.0.
Agora, olhando os detalhes na janela de navegação de objetos. Ela fica geralmente localizada à esquerda da tela e contém objetos como se fossem nós que podem ser expandidos. Na imagem acima ela se encontra exatamente à esquerda da tela. Na imagem abaixo está a janela de nevegação já com todos os nós expandidos.
Repare que existem dois projetos, que são os nós nos níveis mais abrangentes. Destacados em amarelo na imagem acima, os dois são criados pelo próprio BW.
O primeiro projeto, denominado "BExAnalyzer", sempre é recriado todas as vezes que o relatório é aberto novamente. Isso quer dizer que sempre que abrir uma query ou um workbook esse projeto será recriado, e toda e qualquer alteração feita em seus objetos será perdida.
Enquanto o segundo projeto, denominado "VBAProject", é criado apenas uma vez na criação da query ou do workbook. Se forem feitas alterações em seus objetos, elas serão preservadas e executadas nas próximas aberturas do relatório.
A porta de entrada para intervenções no relatório está nos objetos do segundo projeto. Um exemplo de objeto é um módulo chamado "DefaultWorkbook". Dentro dele existe uma Sub chamada "CallBack". Essa Sub é a última rotina chamada durante a abertura do relatório. Então, se for necessário implementar algo após todo relatório estar montado, basta incluir o código necessário antes do fechamento da Sub.
Na imagem acima é possível identificar o fechamento da Sub "CallBack" com a linha End Sub. Basta inserir a codificação necessária antes da linha End Sub. Minha sugestão é que seja criado uma novo módulo, com uma Sub personalizada, e que no fechamento do "CallBack" fique apenas uma chamada para esta nova Sub. Eu criei um módulo chamado ZVBA.
Acesso via Drive:
Módulo ZVA.
Chamada CallBack.
Quem estiver interessado em saber um pouco mais sobre a solução, pode deixar comentários.
Confesso que essa postagem não está ligada com a área ABAP, mas pelo fato de ser algo do nosso meio de trabalho achei interessante compartilhar. Espero que seja útil para mais alguém.
O trabalho em equipe sempre prevalece.
E é sempre um prazer poder ajudar os colegas de trabalho.
Um grande abraço e até a próxima.
Solução simples e fácil de se implementar. Se você conhecer um pouco de Visual Basic fica ainda mais fácil. Se você não conhecer, também não se preocupe, as macros do Excel podem ajudar.
O que é BW ?
Algumas pessoas podem não saber o que é BW, portanto acho legal fazer um breve resumo. Mais um dos muitos módulos no SAP, o BW conta com uma plataforma diferenciada e arquitetura dedicada. Tudo isso para suportar o armazenamento de uma grande quantidade de dados. BW é uma sigla simplificada de Business Information Warehouse, que traduzindo significa Depósito de Informações de Negócio. É um módulo especializado em tratamento e organização de dados na forma de cubo, onde se possibilita que informações possam ser montadas e formatadas de várias formas e níveis diferentes, resultando em várias possibilidades de relatórios.
O que é VBA ?
O VBA é a implementação da plataforma do bom e velho Visual Basic em outras aplicações da Microsoft. A tradução é exatamente sua explicação, Visual Basic for Applications. A ferramenta onde o VBA é mais utilizado com certeza é o Excel, mas o que poucos sabem é que todas as aplicações do Office podem utilizá-la. É possível administrar e manipular praticamente tudo nas aplicações do Office usando VBA.
O que o BW tem a ver com o VBA ?
Uma das formas de interface de relatório com o usuário que o BW utiliza é o Excel. E com certeza uma das mais interessantes, pelo fato de poder formatar e salvar o relatório conforme seja de seu agrado, além de facilmente se manipular os dados e cruzar com outros relatórios via PROCV. E no caso do Excel, o próprio BW usa API's via VBA para escrever os dados e desenhar um formato padrão de relatório. Isso nos abre infinitas possibilidades de soluções, e é uma destas soluções que venho compartilhar nesta postagem.
Solução
Para falarmos da solução, temos que primeiro falar do problema. Nas versões mais antigas do BW, os campos de texto tem uma limitação de 60 caracteres. Sendo assim, se for necessário usar um campo de 100 caracteres você será obrigado a quebrar o campo em duas partes, sendo uma de 60 e outra de 40. Em nosso caso, o campo tinha 6000 caracteres, portanto foi necessário quebrar em 100 partes. Parece loucura, mas é a realidade.
E como exibir isso no relatório, um único campo dividido em 100 colunas? Claro que não fica nada legal. Foi então que nosso colega, profissional de BW, cogitou uma possível solução em VBA. Então abraçamos a ideia e, depois de descobrirmos alguns detalhes bens legais, fizemos a concatenação das 100 colunas em apenas uma, deixando o relatório melhor apresentável.
Depois de criar uma query para o Excel, ao abri-la pelo Analyzer do BW, você poderá acessar a área de desenvolvedor (destacado em amarelo na imagem abaixo) e em seguida clicar em Visual Basic (destacado em vermelho na imagem abaixo).
Acesse a guia de desenvolvedor e clique em Visual Basic |
Feito o passo acima, irá se abrir uma tela muito parecida com o antigo Visual Basic 6.0.
Tela do VBA do Excel, muito parecida com o VB6. |
Agora, olhando os detalhes na janela de navegação de objetos. Ela fica geralmente localizada à esquerda da tela e contém objetos como se fossem nós que podem ser expandidos. Na imagem acima ela se encontra exatamente à esquerda da tela. Na imagem abaixo está a janela de nevegação já com todos os nós expandidos.
Tela de navegação do VBA |
Repare que existem dois projetos, que são os nós nos níveis mais abrangentes. Destacados em amarelo na imagem acima, os dois são criados pelo próprio BW.
O primeiro projeto, denominado "BExAnalyzer", sempre é recriado todas as vezes que o relatório é aberto novamente. Isso quer dizer que sempre que abrir uma query ou um workbook esse projeto será recriado, e toda e qualquer alteração feita em seus objetos será perdida.
Enquanto o segundo projeto, denominado "VBAProject", é criado apenas uma vez na criação da query ou do workbook. Se forem feitas alterações em seus objetos, elas serão preservadas e executadas nas próximas aberturas do relatório.
A porta de entrada para intervenções no relatório está nos objetos do segundo projeto. Um exemplo de objeto é um módulo chamado "DefaultWorkbook". Dentro dele existe uma Sub chamada "CallBack". Essa Sub é a última rotina chamada durante a abertura do relatório. Então, se for necessário implementar algo após todo relatório estar montado, basta incluir o código necessário antes do fechamento da Sub.
Trecho de fechamento da Sub CallBack |
Na imagem acima é possível identificar o fechamento da Sub "CallBack" com a linha End Sub. Basta inserir a codificação necessária antes da linha End Sub. Minha sugestão é que seja criado uma novo módulo, com uma Sub personalizada, e que no fechamento do "CallBack" fique apenas uma chamada para esta nova Sub. Eu criei um módulo chamado ZVBA.
Acesso via Drive:
Módulo ZVA.
Chamada CallBack.
Quem estiver interessado em saber um pouco mais sobre a solução, pode deixar comentários.
Confesso que essa postagem não está ligada com a área ABAP, mas pelo fato de ser algo do nosso meio de trabalho achei interessante compartilhar. Espero que seja útil para mais alguém.
O trabalho em equipe sempre prevalece.
E é sempre um prazer poder ajudar os colegas de trabalho.
Um grande abraço e até a próxima.
Postar um comentário