Fórum Relatorio em FastReport com várias tabelas #376974

05/05/2010

0

Tenho três tabelas:

//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

Huelbert Oliveira

Responder

Posts

05/05/2010

Emerson Nascimento

não entendi sua dúvida nem o que você postou como exemplo....

"Exemplo:
VALOR_MATERIAL=(TOTAL DE TODOS OS SERVICOS COM CODIGO=1)"

o que quer dizer isso?
Responder

Gostei + 0

05/05/2010

Huelbert Oliveira

exemplo
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
Responder

Gostei + 0

05/05/2010

Marlon Nardi

Boa Noite Huelbert,

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?
Responder

Gostei + 0

06/05/2010

Wilson Junior

Olha, eu utilizo o Report Builder, e para isto eu utilizo os grupos do relatório para acumular os valores. Não se isto vai lhe ajudar em algo, pois nunca utilizei o Fast Report, mas como a maioria das ferramentas tem um mesmo ESCOPO, resolvi postar.

Espero ter colaborado.
Responder

Gostei + 0

06/05/2010

Huelbert Oliveira

Possuo 3 tabelas, mas pelo meu entender e mais facil e agil juntar elas numa unica instrução de acesso ao bd, e no FastReport colocar um acumulador que some o valor quando a opção for verdadeira.Tipo:

if CODIGO_SERVICO = 1 then
   VARIAVEL = VARIALVEL + TOTAL(Total da Materia-prima); ou VARIAVEL = SUM(TOTAL);

Eu não estou conseguindo e fazer isso.

Responder

Gostei + 0

06/05/2010

Fábio Cruz

Amigo, crie uma view para trabalhar com várias tabelas e no FastReport chama apenas essa View.
Responder

Gostei + 0

06/05/2010

Huelbert Oliveira

Cara criei a view como me disse.

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
Responder

Gostei + 0

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

Aceitar