Fórum Relatorio quickreport colunas #324112
23/06/2006
0
quero montar um relatorio onde o tenho 4 empresa e diversos produtos para esses empresas, no relatorio quero que saia assim
modelo estoque loja 1 estoque loja 2 estoque loja 3 estoque loja 4
uso este procedimento no firebird
CREATE PROCEDURE REL_ADM_COMPARATIVO_ESTOQUE (
I_TIPO VARCHAR(15))
RETURNS (
R_EMPRESA VARCHAR(45),
R_DESC_GRUPO VARCHAR(45),
R_DESC_MODELO VARCHAR(45),
R_SEQUENCIA INTEGER,
R_CLASSIFICACAO VARCHAR(10),
R_CATEGORIA VARCHAR(10),
R_QUANT INTEGER)
AS
begin
IF (:I_TIPO = ´APARELHOS´) THEN
BEGIN
FOR
SELECT
EMP.emp_razao_social,
gru.gru_descricao,
MOD.mod_descricao,
MOD.mod_sequencia,
MOD.mod_classificacao,
MOD.mod_categoria,
SUM(PROD.pro_estoque)
FROM
PRODUTO PROD
LEFT JOIN
EMPRESA EMP ON (EMP.emp_codigo = PROD.pro_emp_ativa)
INNER JOIN
MODELO MOD ON (MOD.mod_codigo = PROD.pro_cod_modelo
AND MOD.mod_grupo = 1)
inner join
grupo gru on (gru.gru_codigo = mod.mod_grupo)
WHERE
PROD.pro_estoque > 0
GROUP BY EMP.emp_razao_social, gru.gru_descricao, MOD.mod_descricao, MOD.mod_sequencia,
MOD.mod_classificacao, MOD.mod_categoria
ORDER BY MOD.mod_sequencia, MOD.mod_classificacao, MOD.mod_categoria
INTO
:r_empresa,
:r_desc_grupo,
:r_desc_modelo,
:r_sequencia,
:r_classificacao,
:r_categoria,
:r_quant
do
SUSPEND;
END
end
Existe a possibilidade de montar o relatorio dessa forma???????
Obrigado!
Uiliangurjon
Curtir tópico
+ 0Posts
24/06/2006
Jujan
A tabela me dava os dados em linha exemplo:
Status
DE
FA
RT
e eu prescisava em colunas assim:
DE FA RT
o que fiz montei um data set local e mandei escrever nele.
OBS:Claro que eu fiz isso eu já sabia a quantidade de colunas que ia ter mas vc pode também criar os campo em run time.
Gostei + 0
25/06/2006
Micheus
Vou exemplificar com a utilização de compoentes TQuery e seria algo mais ou menos assim:
1) Vc teria que obter a lista de todos os produtos (código e descrição) que aparecerão neste relatório - uma única vez (isto vc consegue com um select parecido com o seu, apenas não considerando as lojas, e utilizando DISTINCT);
2) Utilizaria 4 TQuery´s, uma para a consulta de estoque de cada loja, incluindo na cláusula WHERE uma referência ao parâmetro código do produto (... where ... and Codigo = :Codigo ...);
3) Ligaria estas 4 query´s via datasource à query com a lista de produtos. Isto fará com que a cada registro posicionado na query de produtos, as outras quatro também sejam filtradas. Assim, se houver numa loja uma quantidade de estoque para a mesma, haverá um registro a ser impresso;
4) Seu relatório consistirá no mínimo de um componente TQuickRep e um TQRBand (com a propriedade BandType = rbDetail).
5) Na banda detalhe vc coloca componentes TQRDBEdit na na sequência correspondente ao que serão as colunas:
Produto | Estoque1 | Estoque2 | Estoque3 | Estoque4
7) Abre as querys antes de chamar o QuickRep.Preview e acho que é isto.
O resultado deve ser parecido com isto:
Produto | Estoque1 | Estoque2 | Estoque3 | Estoque4 Produto1 | 10 | | 20 | 05 Produto3 | 09 | 15 | | 17 Produto7 | 88 | 31 | 07 | 25 Produto8 | 32 | | 20 | 11
Talvez tenha faltado algum detalhe, mas acho que esta dica pode lhe ajudar (se entendi direito o que vc queria)
Gostei + 0
28/06/2006
Uiliangurjon
criando esta storedprocedure no firebird
CREATE PROCEDURE REL_ADM_COMPARATIVO_ESTOQUE (
I_TIPO VARCHAR(15))
RETURNS (
R_DESC_GRUPO VARCHAR(45),
R_DESC_MODELO VARCHAR(45),
R_SEQUENCIA INTEGER,
R_CLASSIFICACAO VARCHAR(10),
R_CATEGORIA VARCHAR(10),
R_QTD_MON INTEGER,
R_QTD_SEV INTEGER,
R_QTD_BEB INTEGER,
R_QTD_COL INTEGER)
AS
declare variable V_COD_MODELO VARCHAR(13);
begin
/* teste */
IF (:I_TIPO = ´APARELHOS´) THEN
BEGIN
FOR
SELECT
MOD.mod_codigo,
gru.gru_descricao,
MOD.mod_descricao,
MOD.mod_sequencia,
MOD.mod_classificacao,
MOD.mod_categoria
FROM
MODELO MOD
LEFT join
grupo gru on (gru.gru_codigo = mod.mod_grupo)
WHERE MOD.mod_grupo = 1
ORDER BY MOD.mod_sequencia, MOD.mod_classificacao, MOD.mod_categoria
INTO
:v_cod_modelo,
:r_desc_grupo,
:r_desc_modelo,
:r_sequencia,
:r_classificacao,
:r_categoria
do
BEGIN
/* SELECIONANDO loja1 */
SELECT
SUM(PROD.pro_estoque)
FROM PRODUTO PROD
WHERE PROD.pro_emp_ativa = 1 AND
PROD.pro_cod_modelo = :v_cod_modelo
INTO :r_qtd_mon;
IF (:r_qtd_mon IS NULL) THEN
r_qtd_mon = 0;
/* SELECIONANDO loja2*/
SELECT
SUM(PROD.pro_estoque)
FROM PRODUTO PROD
WHERE PROD.pro_emp_ativa = 2 AND
PROD.pro_cod_modelo = :v_cod_modelo
INTO :r_qtd_sev;
IF (:r_qtd_sev IS NULL) THEN
r_qtd_sev = 0;
/* SELECIONANDO loja3 */
SELECT
SUM(PROD.pro_estoque)
FROM PRODUTO PROD
WHERE PROD.pro_emp_ativa = 3 AND
PROD.pro_cod_modelo = :v_cod_modelo
INTO :r_qtd_beb;
IF (:r_qtd_beb IS NULL) THEN
r_qtd_beb = 0;
/* SELECIONANDO loja 4 */
SELECT
SUM(PROD.pro_estoque)
FROM PRODUTO PROD
WHERE PROD.pro_emp_ativa = 4 AND
PROD.pro_cod_modelo = :v_cod_modelo
INTO :r_qtd_col;
IF (:r_qtd_col IS NULL) THEN
r_qtd_col = 0;
suspend;
END
END
end
Gostei + 0
07/07/2006
Cpd_arim
select nota, data, cfop, cst, sum(vr1), sum(vr2) from tabela
group by nome1, nome2, nome3, nome4
Gostei + 0
07/07/2006
Uiliangurjon
Gostei + 0
07/07/2006
Micheus
select nota, data, cfop, cst, sum(vr1), sum(vr2) from tabela group by nota, data, cfop, cst
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)