Fórum Relatorio quickreport colunas #324112

23/06/2006

0

Bom Dia!!!

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

Uiliangurjon

Responder

Posts

24/06/2006

Jujan

Ue também já tive que resolver um problema deste tipo a solução que eu achei melhor foi criar um dataset local com os campo na ordem que eu prescisava e exibir o relatório por ele.

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.


Responder

Gostei + 0

25/06/2006

Micheus

Se vc utilizar o QuickReport e considerando sua necessidade
modelo estoque loja 1 estoque loja 2 estoque loja 3 estoque loja 4

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
6) Atribui a query de produtos a propriedade DataSet do TQuickRep;
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)


Responder

Gostei + 0

28/06/2006

Uiliangurjon

Obrigado pelas dicas, e quero deixar bem claro aki q meu problema foi solucionado graças a suas dicas, e mostar a forma como resolvi o meu problema

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


Responder

Gostei + 0

07/07/2006

Cpd_arim

estou fazendo um relatorio e preciso de um select para somar alguns campos, quero exibir no relatorio a nota, data, cfop, cst o total da nota e o valor do desconto, fiz como esta abaixo, funciona mas não é o que quero pois assim ele agrupa por nota, data, cfop e cst, quero agrupar apenas pela nota como faço?
select nota, data, cfop, cst, sum(vr1), sum(vr2) from tabela
group by nome1, nome2, nome3, nome4


Responder

Gostei + 0

07/07/2006

Uiliangurjon

Cara, ja perguntei isso no forum, para agrupar vc deve usar todos os campos


Responder

Gostei + 0

07/07/2006

Micheus

select nota, data, cfop, cst, sum(vr1), sum(vr2) from tabela group by nome1, nome2, nome3, nome4
Neste seu exemplo, o group dever conter todos os campos que não fazem parte das funções de agrupamento:
select nota, data, cfop, cst, sum(vr1), sum(vr2) 
from tabela
group by nota, data, cfop, cst
Deste modo, para agrupar apenas por nota vc deveria remover os demais campos - em termos de Query. Vc pode utilizar esta query como está, se no seu relatório adiconar uma QRGroup e definir em expression o campo nota. Daí vc adiciona uma GroupFooter onde coloca um QREpr para somar (sum) cada campo totalizado na sua query (sum(vr1) e sum(vr2)). Isto resultará em que quando a groupfooter for impressa, todos os itens constantes na sua consulta, para a mesma nota, sejam somados.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar