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

BlackTDN :: PROTHEUS_REPOSIT

Em função de uma dúvida levantada por Marcelo Sanches(*) e a uma ajuda à minha amiga Priscila Castro na verificação de problemas de impressão do logo na Ficha de Registro, descobri, recente e acidentalmente, que é possível armazenar as imagens do SIGAADV.BMD no SGBD/DBMS.
(*)
Existe uma forma de conseguir acessar imagens armazenadas em SGBD em formato binário através do Protheus e exibi-las em tela como imagens, por exemplo, na tabela SB1?
Por motivos de segurança a empresa em que eu trabalho não quer mais armazenar os arquivos JPEG numa pasta no servidor, como é hoje, no repositório de imagens e sim no SGBD.
Você tem algum "case" estudado para isso?
Abraços,
Sanches
De fato a implementação dessa alteração é muito simples.
Basta incluir a chave RepositInDataBase=1 no .ini do Protheus Server essa chave trabalha em conjunto com o parâmetro MV_REPOSIT (Indica o tipo de armazenamento do repositório de  imagens. 1=Genérico, 2=Por modulo, 3=Especifico).
MV_REPOSIT (Conteúdo) MV_REPOSIT (Descrição)
Ao fazer isso o sistema irá criar a tabela PROTHEUS_REPOSIT no SGBD com as seguintes colunas: BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,MEMO,D_E_L_E_T_,R_E_C_N_O_.
A carga das informações contidas no arquivo SIGAADV.BMD é feita automaticamente a partir da primeira manutenção na tabela e, em função disso, recomendo que a modificação seja feita quando ninguém estiver utilizando o sistema.
O Protheus irá armazenar as informações da seguinte forma:
PROTHEUS_REPOSIT
Recuperando-as utilizando as seguintes instruções obtidas a partir do dbAccess.
tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ?

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 2 )

tDBServer::GoTo -- Goto 2 on Table PROTHEUS_REPOSIT [OK]

tMSSQLConnection::SetRowCount SET ROWCOUNT 40

tISAMFile::GoTop SELECT R_E_C_N_O_ FROM dbo.PROTHEUS_REPOSIT WHERE D_E_L_E_T_ = ' ' ORDER BY BMPNAME,ALIAS,SEQ,R_E_C_N_O_

tISAMFile::GoTop -- Load [19] record(s) to IsamCache

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 1 )

tDBServer::First -- First Recno 1 on Table PROTHEUS_REPOSIT [OK]

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 1

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 2 )

tDBServer::Skip -- End Skip to 2

tDBServer::BlobRead -- BLOB Read on PROTHEUS_REPOSIT Id 6 Recno 0 Length 0

tODBCStatement::GetBlob SELECT MEMO FROM PROTHEUS_REPOSIT WHERE R_E_C_N_O_ = 2

tDBServer::BlobRead -- BLOB Read on PROTHEUS_REPOSIT Id 6 Recno 2 Length 65001

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 2

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 3 )

tDBServer::Skip -- End Skip to 3

tDBServer::BlobRead -- BLOB Read on PROTHEUS_REPOSIT Id 6 Recno 0 Length 0

tODBCStatement::GetBlob SELECT MEMO FROM PROTHEUS_REPOSIT WHERE R_E_C_N_O_ = 3

tDBServer::BlobRead -- BLOB Read on PROTHEUS_REPOSIT Id 6 Recno 3 Length 5615

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 3

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 4 )

tDBServer::Skip -- End Skip to 4

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 4

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 5 )

tDBServer::Skip -- End Skip to 5

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 5

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 6 )

tDBServer::Skip -- End Skip to 6

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 6

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 7 )

tDBServer::Skip -- End Skip to 7

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 7

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 8 )

tDBServer::Skip -- End Skip to 8

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 8

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 9 )

tDBServer::Skip -- End Skip to 9

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 9

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 10 )

tDBServer::Skip -- End Skip to 10

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 10

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 11 )

tDBServer::Skip -- End Skip to 11

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 11

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 12 )

tDBServer::Skip -- End Skip to 12

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 12

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 13 )

tDBServer::Skip -- End Skip to 13

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 13

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 14 )

tDBServer::Skip -- End Skip to 14

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 14

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 15 )

tDBServer::Skip -- End Skip to 15

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 15

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 16 )

tDBServer::Skip -- End Skip to 16

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 16

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 17 )

tDBServer::Skip -- End Skip to 17

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 17

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 18 )

tDBServer::Skip -- End Skip to 18

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 18

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 19 )

tDBServer::Skip -- End Skip to 19

tDBServer::Skip -- Begin Skip File PROTHEUS_REPOSIT ID 15 Count 1 From Record 19

tDBServer::Skip -- End Skip - [NO_RECORD_FOUND] [EOF]

tISAMFile::OpenCurrentRecord SELECT BMPNAME,ALIAS,SEQ,BMPSIZE,MODULO,TBL.D_E_L_E_T_ FROM dbo.PROTHEUS_REPOSIT TBL WHERE TBL.R_E_C_N_O_ = ? -- ( R = 2 )

tDBServer::GoTo -- Goto 2 on Table PROTHEUS_REPOSIT [OK]

[]s
иαldσ dj

Comentários

  1. Naldo você é incrível! Não sei se você tem noção do tamanho da ajuda que você nos proporciona...
    Eu preciso exatamente disto, guardar imagens no BD (fotos) e, aproveitando da sua boa vontade, existe alguma função no Protheus para que eu visualize a imagem?

    ResponderExcluir
    Respostas
    1. Utilize a classe TBmpRep : Classe responsável pela manipulação (inserção, alteração, exclusão e visualização) do repositório de imagens.

      http://tdn.totvs.com.br/display/public/mp/TBmpRep

      Excluir
  2. Naldo é possível usar o repositório de imagens com uma tabela customizada, usando a classe TBmpRep para recuperar as imagens e gravá-las no SGBD diretamente ?

    ResponderExcluir
  3. Naldo!!
    Obrigada pela ajuda de sempre!!

    Abs,

    ResponderExcluir

Postar um comentário

Postagens mais visitadas