Fórum Relatorio em FastReport com várias tabelas #376974
05/05/2010
0
//TABELA MASTER, ONDE FICA OS DADOS GERAL DO PEDIDO
CREATE TABLE MOVFECHAPEDIDO (
CODIGO_FECHAPEDIDO INTEGER NOT NULL CHECK (VALUE > 0) ,
CODIGO_PEDIDOFABRICACAO INTEGER NOT NULL,
DESCRICAO_PEDIDOFABRICACAO VARCHAR(70) COLLATE PT_BR,
DATA_FATURAMENTO DATE,
DATA_FECHAMENTO DATE,
CODIGO_CLIENTE INTEGER NOT NULL,
NOME_CLIENTE VARCHAR(60) COLLATE PT_BR
);
//TABELA ONDE GUARDO AS MATERIAS-PRIMAS UTILIZADAS NO PEDIDO
CREATE TABLE MOVFECHAPEDIDOMATERIAIS (
CODIGO_FECHAPEDIDOMATERIAL INTEGER NOT NULL CHECK (VALUE > 0) ,
CODIGO_PEDIDOFABRICACAO INTEGER NOT NULL,
CODIGO_SERVICO INTEGER NOT NULL,
CODIGO_MATERIAL INTEGER NOT NULL,
QUANTIDADE DM_QUANTIDADE /* DM_QUANTIDADE = NUMERIC(10,3) */,
VALOR DM_MOEDA /* DM_MOEDA = NUMERIC(10,2) */,
TOTAL DM_MOEDA /* DM_MOEDA = NUMERIC(10,2) */
);
//TABELA ONDE GUARDO OS SERVICOS EFETUADOS NO PEDIDO
CREATE TABLE MOVFECHAPEDIDOSERVICOS (
CODIGO_FECHAPEDIDOSERVICO INTEGER NOT NULL,
CODIGO_PEDIDOFABRICACAO INTEGER NOT NULL,
CODIGO_SERVICO INTEGER NOT NULL,
CODIGO_MAQUINA INTEGER,
CODIGO_FUNCIONARIO INTEGER,
DATA_INICIO DATE,
HORA_INICIO TIME,
DATA_FIM DATE,
HORA_FIM TIME,
TOTAL_HORAS TIME,
QUANTIDADE DM_QUANTIDADE /* DM_QUANTIDADE = NUMERIC(10,3) */,
VALOR DM_MOEDA /* DM_MOEDA = NUMERIC(10,2) */,
TOTAL DM_MOEDA /* DM_MOEDA = NUMERIC(10,2) */
);
O campo CODIGO_PEDIDOFABRICACAO é o campo em comum nas tabelas, ou seja, o que fazer o INNER JOIN.
O que eu preciso e basicamente criar um relatório com esse final de dados.
CABECALHO=PEDIDO - MATERIAS - EXTRUSAO - IMPRESSAO
DETALHE =TOTAL - TOTAL - TOTAL - TOTAL
EM SQL SERIA:
SELECT DISTINCT
PED.CODIGO_PEDIDOFABRICACAO,
PED.DATA_FECHAMENTO,
PED.PESO_ENTREGUE,
PED.DESCRICAO_PRODUTO,
PED.VALOR_TOTAL_VENDA,
(SELECT SUM(MAT.TOTAL) FROM MOVFECHAPEDIDOMATERIAIS MAT WHERE MAT.CODIGO_SERVICO=1 AND MAT.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS VALOR_MATERIAL,
(SELECT SUM(SER.TOTAL) FROM MOVFECHAPEDIDOSERVICOS SER WHERE SER.CODIGO_SERVICO=1 AND SER.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS VALOR_EXTRUSAO,
(SELECT SUM(SER.TOTAL) FROM MOVFECHAPEDIDOSERVICOS SER WHERE SER.CODIGO_SERVICO=2 AND SER.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS VALOR_IMPRESSAO,
(SELECT SUM(SER.TOTAL) FROM MOVFECHAPEDIDOSERVICOS SER WHERE SER.CODIGO_SERVICO=3 AND
FROM
MOVFECHAPEDIDO PED
WHERE
PED.DATA_FECHAMENTO>='01.04.2010'
AND PED.DATA_FECHAMENTO<='10.04.2010'
ORDER BY
PED.CODIGO_PEDIDOFABRICACAO
Exemplo:
VALOR_MATERIAL=(TOTAL DE TODOS OS SERVICOS COM CODIGO=1)
Só que não estou conseguindo fazer isso com variaveis dentro do FastReport.
Alguem que entenda bem de FastReport, por favor me ajude.
Pode ser de qualquer jeito...MSN ou até mesmo Remoto.
Aguardo
Rodrigo de Oliveira
Huelbert Oliveira
Curtir tópico
+ 0Posts
05/05/2010
Emerson Nascimento
"Exemplo:
VALOR_MATERIAL=(TOTAL DE TODOS OS SERVICOS COM CODIGO=1)"
o que quer dizer isso?
Gostei + 0
05/05/2010
Huelbert Oliveira
tabela de materias-primas eu tenho:
Material: Polietileno
Serviço onde é utilizado: 1 - Extrusão
Total: 100,00
Material: Polipropileno
Serviço onde é utilizado: 1 - Extrusão
Total: 150,00
Material: Tinta
Serviço onde é utilizado: 2 - Impressão
Total: 200,00
============================
Tenho que somar somente os Total(s) onde Serviço é igual a 1- Extrusão.
Queria saber como fazer isso dentro do FastReport, ou a melhor maneira de fazer o calculo, porque são vários campos assim.
Aguardo
Qualquer coisa me add no MSN
huelbert@hotmail.com
Gostei + 0
05/05/2010
Marlon Nardi
Comecei a utilizar o Fast Report em minhas aplicações ja faz uns 20 dias, uma exclente ferramenta para relatorios, a melhor que eu ja utilizei ate hoje...
estava lendo seu topico, se eu entendi bem se esse seu SQL esta ligando em uma Unica SQL Query por exemplo voce pode muito bem ligar a mesma no componente do Fast 'FrxDbDataset' e utilizar o componente de soma.
Ou voce possui dois SQL independentes e quer montar no mesmo relatorio?
Gostei + 0
06/05/2010
Wilson Junior
Espero ter colaborado.
Gostei + 0
06/05/2010
Huelbert Oliveira
if CODIGO_SERVICO = 1 then
VARIAVEL = VARIALVEL + TOTAL(Total da Materia-prima); ou VARIAVEL = SUM(TOTAL);
Eu não estou conseguindo e fazer isso.
Gostei + 0
06/05/2010
Fábio Cruz
Gostei + 0
06/05/2010
Huelbert Oliveira
CREATE VIEW VIEW_CALCULA_CUSTO_FABRICACAO(
CODIGO_PEDIDOFABRICACAO,
DATA_FECHAMENTO,
DESCRICAO_PRODUTO,
PESO_PROGRAMADO,
PESO_ENTREGUE,
PESO_PERDA,
PERCENTUAL_PERDA,
VALOR_TOTAL_VENDA,
TOTAL_MATERIA_PRIMA,
TOTAL_EXTRUSAO,
FIXO_IMPRESSAO,
SERVICO_IMPRESSAO,
TINTA_IMPRESSAO,
SOLVENTE_IMPRESSAO,
SERVICO_LAMINACAO,
MATERIAL_LAMINACAO,
TOTAL_CORTE,
TOTAL_REBOBINADEIRA,
TOTAL_POUCHEIRA,
VALOR_ADMINISTRACAO,
VALOR_COMISSAO,
VALOR_IMPOSTO,
TOTAL_LIQUIDO)
AS
SELECT
PED.CODIGO_PEDIDOFABRICACAO,
PED.DATA_FECHAMENTO,
PED.DESCRICAO_PRODUTO,
PED.PESO_PROGRAMADO,
PED.PESO_ENTREGUE,
PED.PESO_PERDA,
PED.PERCENTUAL_PERDA,
PED.VALOR_TOTAL_VENDA,
(SELECT SUM(MAT.TOTAL) FROM MOVFECHAPEDIDOMATERIAIS MAT WHERE MAT.CODIGO_SERVICO=1 AND MAT.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS VALOR_MATERIAL,
(SELECT SUM(SER.TOTAL) FROM MOVFECHAPEDIDOSERVICOS SER WHERE SER.CODIGO_SERVICO=1 AND SER.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS VALOR_EXTRUSAO,
(SELECT SUM(SER.VALOR_FIXO) FROM MOVFECHAPEDIDOSERVICOS SER WHERE SER.CODIGO_SERVICO=2 AND SER.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS FIXO_IMPRESSAO,
(SELECT SUM(SER.TOTAL) FROM MOVFECHAPEDIDOSERVICOS SER WHERE SER.CODIGO_SERVICO=2 AND SER.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS SERVICO_IMPRESSAO,
(SELECT SUM(MAT.TOTAL) FROM MOVFECHAPEDIDOMATERIAIS MAT WHERE MAT.CODIGO_MATERIAL=10 AND MAT.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS TINTA_IMPRESSAO,
(SELECT SUM(MAT.TOTAL) FROM MOVFECHAPEDIDOMATERIAIS MAT WHERE MAT.CODIGO_MATERIAL=11 AND MAT.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS SOLVENTE_IMPRESSAO,
(SELECT SUM(SER.TOTAL) FROM MOVFECHAPEDIDOSERVICOS SER WHERE SER.CODIGO_SERVICO=3 AND SER.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS SERVICO_LAMINACAO,
(SELECT SUM(MAT.TOTAL) FROM MOVFECHAPEDIDOMATERIAIS MAT WHERE MAT.CODIGO_SERVICO=3 AND MAT.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS MATERIAL_LAMINACAO,
(SELECT SUM(SER.TOTAL) FROM MOVFECHAPEDIDOSERVICOS SER WHERE SER.CODIGO_SERVICO=4 AND SER.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS VALOR_CORTE,
(SELECT SUM(SER.TOTAL) FROM MOVFECHAPEDIDOSERVICOS SER WHERE SER.CODIGO_SERVICO=5 AND SER.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS VALOR_REBOBINADEIRA,
(SELECT SUM(SER.TOTAL) FROM MOVFECHAPEDIDOSERVICOS SER WHERE SER.CODIGO_SERVICO=6 AND SER.CODIGO_PEDIDOFABRICACAO=PED.CODIGO_PEDIDOFABRICACAO) AS VALOR_POUCHEIRA,
PED.VALOR_ADMINISTRATIVO,
PED.VALOR_COMISSAO,
PED.VALOR_IMPOSTO,
PED.VALOR_TOTAL_LIQUIDO
FROM MOVFECHAPEDIDO PED
ORDER BY
PED.CODIGO_PEDIDOFABRICACAO
;
Só que a performace dela e horrível...demora demais.
Não tem como fazer um INNER JOIN nas 3 tabelas e depois fazer tipo um SUM(IF())
Dei uma olhada na net e vi uma função assim...mas para postgre e mysql, firebird nada e nem consegui fazer.
Se alguem souber, agradeço.
Aguardo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)