Subject RE: [firebird-support] Invalid BLR - BAD BLR - Help
Author Rick Debay
To easily shorten the queries, use aliases instead of the table name.

SELECT
TABLE_1.FOO
FROM
TABLE_1

Becomes

SELECT
t1.FOO
FROM
TABLE_1 t1

-----Original Message-----
From: firebird-support@yahoogroups.com [mailto:firebird-support@yahoogroups.com] On Behalf Of Kurt Schneider
Sent: Friday, March 03, 2006 6:56 AM
To: firebird-support@yahoogroups.com
Subject: Re: [firebird-support] Invalid BLR - BAD BLR - Help

Hello Helen and All.

Thanks for help-me.

I'm Sorry you does not believe, but the SQL that I need really possesss the
size that I indicated. :-)

Your Questions:

Q: What is "long"? There is a limit of 64 Kb in the length of one SQL
statement and a limit of 48 Kb in the length of a plan.

R: Whel, and "long" sql is igual a Attached File SQL_Problem.txt. See the
Sql and see the View. The Sql is execute from .EXE (my application), and
consult a VIEW on Database.

Q: Show exactly the problem statement *and* the plan that is produced
when you prepare a similar statement that does not fail.
Also state
a) whether you have triggers defined for the view.
Ra: No, not have triggers for a View or triggers on tables they compose a
View.

b) what is the dialect of the database
Rb: Sql Dialect 3

c) what you mean by "an unic view on database"
Rc: For testing, i have create 4 database, to know (Firebird, Mysql, Oracle
and Sql Server) with the same number of tables, Store Procedure and a unic
view (for testing). The View result the same data from 4 database when
proceed and SQL ( * ) All.
But, the attached SQL_Problem.txt contains the sql executed and the
databases, and in Firebird return Error.

But, see the SQL_OK.txt. One SELECT to view is deleted, and the sql returns
ok, not error (BAD BLR). The SQL_OK.txt contains 5 (five) acess to VIEW, and
the SQL_PROBLEM.txt 6 (six) acess and return Error.

For the same error, execute and select with 28 unions, that returns the same
error (i think). ;-)

I think the limit or the BLR (Binary Language Reference) have a limit size
for SQL.

Help.... :-)

Thanks

----------

SELECT
TB_PRODUTOS_1.CODIGOPRODUTO,
TB_PRODUTOS_1.DESCRICAOPRODUTO,
TB_PRODUTOS_1.CODIGOORIGINALFABRICANTE,
TB_PRODUTOS_1.CODIGOCSTORIGEM,
TB_PRODUTOS_1.CONTROLALOTES,
TB_PRODUTOS_1.CODIGOTIPOPRODUTO,
TB_UNIDADEMEDIDA.ABREVIADOUNIDADEMEDIDA,
TB_MARCAS.DESCRICAOMARCAS,
TB_CLASSES.DESCRICAOCLASSES,
TB_PRODUTOSEMPRESA.ATIVOPRODUTO,
TB_PRODUTOS_1.ORDEMLIGCATEGORIACLASSES,
COALESCE(TB_APV.VLRCUSTOI,0) AS VLRCUSTOI,
COALESCE(TB_APV.TXICMSSAIDASAPV,0) AS TXICMSSAIDASAPV,
COALESCE(TB_APV.TXCUSTOOPERSAIDASAPV,0) AS TXCUSTOOPERSAIDASAPV,
TB_LIGCATEGORIACLASSES.CODIGOCATEGORIAPRODUTO,
TB_PRODUTOS_1.TAXAFUNRURALPRODUTO,
TB_PRODUTOS_1.TAXAPISPRODUTO,
TB_PRODUTOS_1.TAXACOFINSPRODUTO,
TB_PRODUTOS_1.TAXAFETHABPRODUTO,
TB_PRODUTOSSAFRA.ESTOQUEMINIMOPRODUTO,
TB_PRODUTOSSAFRA.COMISSAOSOBREVENDA,
TB_PRODUTOSSAFRA.COMISSAOSOBRECOMPRA,
TB_PRODUTOSSAFRA.ORIGEMTAXACOMISSAO,
(SELECT
CASE TB_PEDIDOS_2.CODIGOTIPOPEDIDO
WHEN 'N' THEN
SUBSTRING(CAST('Pedido: ' || TB_PEDIDOS_2.NUMSEQPEDIDO || ' - ' || TB_CLIENTES_2.RAZAOSOCIALCLIENTE as VARCHAR(150)) FROM 1 FOR 35) || '...'
ELSE
SUBSTRING(CAST('Remessa: ' || TB_PEDIDOS_2.NUMSEQPEDIDO || ' - ' || TB_CLIENTES_2.RAZAOSOCIALCLIENTE as VARCHAR(150)) FROM 1 FOR 35) || '...'
END
FROM TB_PRODUTOSMOV TB_PRODUTOSMOV_2
INNER JOIN TB_PEDIDOS TB_PEDIDOS_2 ON TB_PRODUTOSMOV_2.ORDEMPEDIDO = TB_PEDIDOS_2.ORDEMPEDIDO
INNER JOIN TB_CLIENTES TB_CLIENTES_2 ON TB_PEDIDOS_2.CODIGOCLIENTE = TB_CLIENTES_2.CODIGOCLIENTE
WHERE TB_PRODUTOSMOV_2.ORDEMPRODUTOMOV = TB_PRODUTOSMOV_1.ORDEMPRODUTOMOV)
AS vORIGEMPRODUTO,
CAST('N' as CHAR(1)) as vJaSelecionou,
TB_PRODUTOSMOV.*,
(SELECT FIRST 1
(
((SELECT COALESCE(SUM(VW_ESPRODUTO.vQuant),0)
FROM VW_ESPRODUTO
WHERE VW_ESPRODUTO.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO
AND VW_ESPRODUTO.CODIGOOPERCFOP = 1 AND VW_ESPRODUTO.CODIGOOPERCOMPCFOP = 4
AND VW_ESPRODUTO.VCODIGOMOV = 3
AND VW_ESPRODUTO.CODIGOCLIENTE = 221
AND VW_ESPRODUTO.CODIGOOPERESTOQUE = 'E'
AND VCODIGOMOVORIGEM IN (1,2,3) AND VCODIGOMOVDESTINO = 3)
-
((SELECT COALESCE(SUM(VW_ESPRODUTO.vQuant),0)
FROM VW_ESPRODUTO
WHERE VW_ESPRODUTO.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO
AND VW_ESPRODUTO.CODIGOOPERCFOP = 1 AND VW_ESPRODUTO.CODIGOOPERCOMPCFOP = 4
AND VW_ESPRODUTO.VCODIGOMOV = 3
AND VW_ESPRODUTO.CODIGOCLIENTE = 221
AND VW_ESPRODUTO.CODIGOOPERESTOQUE = 'S'
AND VCODIGOMOVORIGEM IN (1,2,3) AND VCODIGOMOVDESTINO = 3)
+
(SELECT COALESCE(SUM(VW_ESPRODUTO.vQuant),0)
FROM VW_ESPRODUTO
WHERE VW_ESPRODUTO.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO
AND VW_ESPRODUTO.CODIGOOPERCFOP = 1 AND VW_ESPRODUTO.CODIGOOPERCOMPCFOP = 5
AND VW_ESPRODUTO.VCODIGOMOV = 3
AND VW_ESPRODUTO.CODIGOCLIENTE = 221
AND VW_ESPRODUTO.CODIGOOPERESTOQUE = 'E'
AND VCODIGOMOVORIGEM IN (1,2,3) AND VCODIGOMOVDESTINO = 3))
))
FROM TB_SEXO) as vAFATURAR,
CASE
WHEN CODIGOCATEGORIAPRODUTO = 3 AND CONTROLALOTES = 'S' THEN
(SELECT COALESCE(Count(TB_LOTESSEMENTES.CODIGOPRODUTO),0)
FROM TB_LOTESSEMENTES
WHERE TB_LOTESSEMENTES.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO
AND TB_LOTESSEMENTES.CODIGOEMPRESA = 1
AND TB_LOTESSEMENTES.CODIGOCLIENTE = 221
AND TB_LOTESSEMENTES.CODIGOSTATUS = 'A')
ELSE 0
END as vTemLote,
CAST(0 AS INTEGER) AS VSaldo,
((SELECT COALESCE(SUM(VW_ESPRODUTO.vQuant),0)
FROM VW_ESPRODUTO
WHERE VW_ESPRODUTO.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO
AND VW_ESPRODUTO.CODIGOOPERCFOP = 1 AND VW_ESPRODUTO.CODIGOOPERCOMPCFOP = 4
AND VW_ESPRODUTO.VCODIGOMOV = 3
AND VW_ESPRODUTO.CODIGOOPERESTOQUE = 'E'
AND VCODIGOMOVORIGEM IN (1,2,3) AND VCODIGOMOVDESTINO = 3)
-
((SELECT COALESCE(SUM(VW_ESPRODUTO.vQuant),0)
FROM VW_ESPRODUTO
WHERE VW_ESPRODUTO.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO
AND VW_ESPRODUTO.CODIGOOPERCFOP = 1 AND VW_ESPRODUTO.CODIGOOPERCOMPCFOP = 4
AND VW_ESPRODUTO.VCODIGOMOV = 3
AND VW_ESPRODUTO.CODIGOOPERESTOQUE = 'S'
AND VCODIGOMOVORIGEM IN (1,2,3) AND VCODIGOMOVDESTINO = 3)
+
(SELECT COALESCE(SUM(VW_ESPRODUTO.vQuant),0)
FROM VW_ESPRODUTO
WHERE VW_ESPRODUTO.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO
AND VW_ESPRODUTO.CODIGOOPERCFOP = 1 AND VW_ESPRODUTO.CODIGOOPERCOMPCFOP = 5
AND VW_ESPRODUTO.VCODIGOMOV = 3
AND VW_ESPRODUTO.CODIGOOPERESTOQUE = 'E'
AND VCODIGOMOVORIGEM IN (1,2,3) AND VCODIGOMOVDESTINO = 3))
) AS VSaldoEntregaFutura


FROM
TB_PRODUTOS TB_PRODUTOS_1
INNER JOIN TB_PRODUTOSMOV TB_PRODUTOSMOV_1
ON (TB_PRODUTOS_1.CODIGOPRODUTO = TB_PRODUTOSMOV_1.CODIGOPRODUTO)
INNER JOIN TB_PEDIDOS
ON TB_PRODUTOSMOV_1.ORDEMPEDIDO = TB_PEDIDOS.ORDEMPEDIDO
INNER JOIN TB_PRODUTOSEMPRESA
ON (TB_PRODUTOSEMPRESA.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO)
INNER JOIN TB_UNIDADEMEDIDA
ON (TB_UNIDADEMEDIDA.CODIGOUNIDADEMEDIDA = TB_PRODUTOS_1.CODIGOUNIDADEMEDIDA)
INNER JOIN TB_MARCAS
ON (TB_MARCAS.CODIGOMARCAS = TB_PRODUTOS_1.CODIGOMARCAS)
INNER JOIN TB_LIGCATEGORIACLASSES
ON (TB_LIGCATEGORIACLASSES.ORDEMLIGCATEGORIACLASSES = TB_PRODUTOS_1.ORDEMLIGCATEGORIACLASSES)
INNER JOIN TB_CLASSES
ON (TB_CLASSES.CODIGOCLASSES = TB_LIGCATEGORIACLASSES.CODIGOCLASSES)
INNER JOIN TB_CATEGORIAPRODUTOS
ON (TB_CATEGORIAPRODUTOS.CODIGOCATEGORIAPRODUTO = TB_LIGCATEGORIACLASSES.CODIGOCATEGORIAPRODUTO)
INNER JOIN TB_PRODUTOSSAFRA
ON TB_PRODUTOS_1.CODIGOPRODUTO = TB_PRODUTOSSAFRA.CODIGOPRODUTO
LEFT JOIN TB_APV
ON (TB_APV.CODIGOPRODUTO = TB_PRODUTOSSAFRA.CODIGOPRODUTO
AND TB_APV.CODIGOEMPRESA = TB_PRODUTOSSAFRA.CODIGOEMPRESA)
WHERE TB_PEDIDOS.ORDEMPEDIDO = 61
AND TB_PRODUTOSEMPRESA.CODIGOEMPRESA = 1
AND TB_PRODUTOSSAFRA.CODIGOSAFRA = 1
ORDER BY TB_PRODUTOS_1.DESCRICAOPRODUTO, TB_PRODUTOSMOV_1.ORDEMPRODUTOMOV;













----------

CREATE VIEW VW_ESPRODUTO (
CODIGOEMPRESA,
CODIGOCLIENTE,
CODIGOSAFRA,
CODIGOPRODUTO,
CODIGOCFOP,
CODIGOOPERCFOP,
CODIGOOPERCOMPCFOP,
VCODIGOMOV,
CODIGOOPERESTOQUE,
VCODIGOMOVORIGEM,
VCODIGOMOVDESTINO,
VQUANT)
AS
/* ESPRODUTO se refere a todas as movimentações de Entrada e Saída dos Produtos

ESTA VIEW JUNTA TODAS AS QUANTIDADES DE PRODUTOS MOVIMENTADOS EM
vCodigoMov Descrição
1 PEDIDO
2 REMESSA
3 NOTA FISCAL
4 TRANSFERENCIA DE PRODUTO EM DEPÓSITO
5 WARRANT
6 ROMANEIO



CODIGOOPERESTOQUE
E - Entrada / S - Saída
Comentário: Isso foi necessário pois é possivel que um Compra - Normal seja Interpretada como
E - Entrada em Algumas Situações (Remessa Entrega Futura)
S - Saída em Algumas Situações (Remessa Entrega Futura)

VCODIGOMOVORIGEM / VCODIGOMOVDESTINO, --Negocio Aqui e NÓ Forte por Causa da Entrega Futura (Em Teste Forte)
Bem, para poder controlar as Entrega Futura, na Formula, é Necessário acresentar por Exemplo se uma
Nota Fiscal foi Gerada Direta (NFP -> NFP) ou se foi gerada de um
Pedido (PED->NFP) ou Remessa (ORD->NFP)
1 - 1 Pedido Lancado Direto
1 - 2 Pedido Gerou Remessa (Armazena dentro da Remessa)
1 - 3 Pedido Gerou Nota (Armazena dentro da Nota)
2 - 2 Remessa Lancado Direto
2 - 3 Remessa Gerou Nota (Armazena dentro da Nota)
3 - 3 Nota Lancada Direto (Nota Lancada Direta)
4 - 3 Nota Gerada pela TRF (Armazena na NF)
5 - 3 Nota Gerada pela WRT (Armazena na NF)
6 - 3 Nota Gerada pelo Romaneio (Armazena na NF)

TOTALIZANDO POR
CODIGOEMPRESA, CODIGOSAFRA, CODIGOCLIENTE, CODIGOPRODUTO, CODIGOOPERCFOP, OPERCOMPCFOP E CFOP
*/

/* ---------- 1 - Pedidos de Compra ----------------
1 - 1 Pedido Lancado Direto */
SELECT
TB_PEDIDOS.CODIGOEMPRESA,
TB_PEDIDOS.CODIGOCLIENTE,
TB_PEDIDOS.CODIGOSAFRA,
TB_PRODUTOSMOV.CODIGOPRODUTO,
TB_PEDIDOS.CODIGOCFOP,
TB_LIGCFOP.CODIGOOPERCFOP,
TB_LIGCFOP.CODIGOOPERCOMPCFOP,
CAST(1 AS INTEGER) as vCodigoMov,
TB_PEDIDOS.CODIGOOPERESTOQUE,

--Gerado Direto pelo Pedido--
CAST(1 AS INTEGER) as VCODIGOMOVORIGEM,
CAST(1 AS INTEGER) as VCODIGOMOVDESTINO,

(COALESCE(Sum(TB_PRODUTOSMOV.QUANTPRODUTOMOV),0) -
COALESCE(Sum(TB_LIGFATURAS.FATURADALIGFATURA), 0)) AS vQuant
FROM
(TB_LIGCFOP INNER JOIN
((TB_PEDIDOS INNER JOIN TB_PRODUTOSMOV ON TB_PEDIDOS.ORDEMPEDIDO = TB_PRODUTOSMOV.ORDEMPEDIDO)
INNER JOIN TB_CFOP ON TB_PEDIDOS.CODIGOCFOP = TB_CFOP.CODIGOCFOP) ON TB_LIGCFOP.ORDEMLIGCFOP = TB_CFOP.ORDEMLIGCFOP)
LEFT JOIN TB_LIGFATURAS ON TB_PRODUTOSMOV.ORDEMPRODUTOMOV = TB_LIGFATURAS.ORDEMPRODUTOMOV
WHERE TB_PEDIDOS.ORIGEMLANCA='PED'
AND TB_PEDIDOS.CODIGOTIPOPEDIDO='N'
AND TB_PEDIDOS.CODIGOOPERESTOQUE='E'
AND TB_PEDIDOS.CODIGOCFOP <> 11 --Desconsidera a CFOP: SEM MOVIMENTAÇÃO
GROUP BY 1,2,3,4,5,6,7,8,9,10,11

UNION


/* ---------- 2 - Pedidos de Venda ----------------
1 - 1 Pedido Lancado Direto */
SELECT
TB_PEDIDOS.CODIGOEMPRESA,
TB_PEDIDOS.CODIGOCLIENTE,
TB_PEDIDOS.CODIGOSAFRA,
TB_PRODUTOSMOV.CODIGOPRODUTO,
TB_PEDIDOS.CODIGOCFOP,
TB_LIGCFOP.CODIGOOPERCFOP,
TB_LIGCFOP.CODIGOOPERCOMPCFOP,
CAST(1 AS INTEGER) as vCodigoMov,
TB_PEDIDOS.CODIGOOPERESTOQUE,

--Gerado Direto pelo Pedido--
CAST(1 AS INTEGER) as VCODIGOMOVORIGEM,
CAST(1 AS INTEGER) as VCODIGOMOVDESTINO,

(COALESCE(Sum(TB_PRODUTOSMOV.QUANTPRODUTOMOV),0) -
COALESCE(Sum(TB_LIGFATURAS.FATURADALIGFATURA), 0)) AS vQuant
FROM
(TB_LIGCFOP INNER JOIN
((TB_PEDIDOS INNER JOIN TB_PRODUTOSMOV ON TB_PEDIDOS.ORDEMPEDIDO = TB_PRODUTOSMOV.ORDEMPEDIDO)
INNER JOIN TB_CFOP ON TB_PEDIDOS.CODIGOCFOP = TB_CFOP.CODIGOCFOP) ON TB_LIGCFOP.ORDEMLIGCFOP = TB_CFOP.ORDEMLIGCFOP)
LEFT JOIN TB_LIGFATURAS ON TB_PRODUTOSMOV.ORDEMPRODUTOMOV = TB_LIGFATURAS.ORDEMPRODUTOMOV
WHERE TB_PEDIDOS.ORIGEMLANCA='PED'
AND TB_PEDIDOS.CODIGOTIPOPEDIDO='N'
AND TB_PEDIDOS.CODIGOOPERESTOQUE='S'

GROUP BY 1,2,3,4,5,6,7,8,9,10,11

UNION

/* ---------- 3 - Remessa de Compra ----------------
1 - 2 Pedido Gerou Remessa (Armazena dentro da Remessa)
2 - 2 Remessa Lancado Direto */
SELECT
TB_PEDIDOS.CODIGOEMPRESA,
TB_PEDIDOS.CODIGOCLIENTE,
TB_PEDIDOS.CODIGOSAFRA,
TB_PRODUTOSMOV.CODIGOPRODUTO,
TB_PEDIDOS.CODIGOCFOP,
TB_LIGCFOP.CODIGOOPERCFOP,
TB_LIGCFOP.CODIGOOPERCOMPCFOP,
CAST(2 AS INTEGER) as vCodigoMov,
TB_PEDIDOS.CODIGOOPERESTOQUE,
CASE
/*REMESSA GERADO DIRETO*/
WHEN (TB_PEDIDOS.TBORDEMPEDIDO IS NULL) THEN
CAST(2 AS INTEGER)
/*REMESSA GERADO PELO PEDIDO*/
ELSE
CAST(1 AS INTEGER)
END as VCODIGOMOVORIGEM,
CAST(2 AS INTEGER) as VCODIGOMOVDESTINO,
(COALESCE(Sum(TB_PRODUTOSMOV.QUANTPRODUTOMOV),0) -
COALESCE(Sum(TB_LIGFATURAS.FATURADALIGFATURA), 0)) AS vQuant
FROM
(TB_LIGCFOP INNER JOIN
((TB_PEDIDOS INNER JOIN TB_PRODUTOSMOV ON TB_PEDIDOS.ORDEMPEDIDO = TB_PRODUTOSMOV.ORDEMPEDIDO)
INNER JOIN TB_CFOP ON TB_PEDIDOS.CODIGOCFOP = TB_CFOP.CODIGOCFOP) ON TB_LIGCFOP.ORDEMLIGCFOP = TB_CFOP.ORDEMLIGCFOP)
LEFT JOIN TB_LIGFATURAS ON TB_PRODUTOSMOV.ORDEMPRODUTOMOV = TB_LIGFATURAS.ORDEMPRODUTOMOV
WHERE TB_PEDIDOS.ORIGEMLANCA='PED'
AND TB_PEDIDOS.CODIGOTIPOPEDIDO='R'
AND TB_PEDIDOS.CODIGOOPERESTOQUE='E'

GROUP BY 1,2,3,4,5,6,7,8,9,10,11

UNION

/* ---------- 4 - Remessa de Venda ----------------
1 - 2 Pedido Gerou Remessa (Armazena dentro da Remessa)
2 - 2 Remessa Lancado Direto */
SELECT
TB_PEDIDOS.CODIGOEMPRESA,
TB_PEDIDOS.CODIGOCLIENTE,
TB_PEDIDOS.CODIGOSAFRA,
TB_PRODUTOSMOV.CODIGOPRODUTO,
TB_PEDIDOS.CODIGOCFOP,
TB_LIGCFOP.CODIGOOPERCFOP,
TB_LIGCFOP.CODIGOOPERCOMPCFOP,
CAST(2 AS INTEGER) as vCodigoMov,
TB_PEDIDOS.CODIGOOPERESTOQUE,
CASE
/*REMESSA GERADO DIRETO*/
WHEN (TB_PEDIDOS.TBORDEMPEDIDO IS NULL) THEN
CAST(2 AS INTEGER)
/*REMESSA GERADO PELO PEDIDO*/
ELSE
CAST(1 AS INTEGER)
END as VCODIGOMOVORIGEM,
CAST(2 AS INTEGER) as VCODIGOMOVDESTINO,

(COALESCE(Sum(TB_PRODUTOSMOV.QUANTPRODUTOMOV),0) -
COALESCE(Sum(TB_LIGFATURAS.FATURADALIGFATURA), 0)) AS vQuant
FROM
(TB_LIGCFOP INNER JOIN
((TB_PEDIDOS INNER JOIN TB_PRODUTOSMOV ON TB_PEDIDOS.ORDEMPEDIDO = TB_PRODUTOSMOV.ORDEMPEDIDO)
INNER JOIN TB_CFOP ON TB_PEDIDOS.CODIGOCFOP = TB_CFOP.CODIGOCFOP) ON TB_LIGCFOP.ORDEMLIGCFOP = TB_CFOP.ORDEMLIGCFOP)
LEFT JOIN TB_LIGFATURAS ON TB_PRODUTOSMOV.ORDEMPRODUTOMOV = TB_LIGFATURAS.ORDEMPRODUTOMOV
WHERE TB_PEDIDOS.ORIGEMLANCA='PED'
AND TB_PEDIDOS.CODIGOTIPOPEDIDO='R'
AND TB_PEDIDOS.CODIGOOPERESTOQUE='S'


GROUP BY 1,2,3,4,5,6,7,8,9,10,11

UNION

/* ---------- 5 - Nota Fiscal de Compra ----------------
1 - 3 Pedido Gerou Nota (Armazena dentro da Nota)
2 - 3 Remessa Gerou Nota (Armazena dentro da Nota)
3 - 3 Nota Lancada Direto (Nota Lancada Direta)
4 - 3 Nota Gerada pela TRF (Armazena na NF)
5 - 3 Nota Gerada pela WRT (Armazena na NF)
6 - 3 Nota Gerada pelo Romaneio (Armazena na NF)*/

SELECT
TB_NOTAFISCAL.CODIGOEMPRESA,
TB_NOTAFISCAL.CODIGOCLIENTE,
TB_NOTAFISCAL.CODIGOSAFRA,
TB_PRODUTOSMOV.CODIGOPRODUTO,
TB_NOTAFISCAL.CODIGOCFOP,
TB_LIGCFOP.CODIGOOPERCFOP,
TB_LIGCFOP.CODIGOOPERCOMPCFOP,
CAST(3 AS INTEGER) as vCodigoMov,
TB_NOTAFISCAL.CODIGOOPERESTOQUE,

CASE
/*PEDIDO GEROU NOTA*/
WHEN (TB_NOTAFISCAL.ORIGEMLANCA = 'PED') THEN
CAST(1 AS INTEGER)
/*REMESSA GEROU NOTA*/
WHEN (TB_NOTAFISCAL.ORIGEMLANCA = 'REM') THEN
CAST(2 AS INTEGER)
/*TRF GEROU NOTA*/
WHEN (TB_NOTAFISCAL.ORIGEMLANCA = 'TRF') THEN
CAST(4 AS INTEGER)
/*WARRANT GEROU NOTA*/
WHEN (TB_NOTAFISCAL.ORIGEMLANCA = 'WRT') THEN
CAST(5 AS INTEGER)
/*ROMANEIO GEROU NOTA*/
WHEN (TB_NOTAFISCAL.ORIGEMLANCA = 'ROM') THEN
CAST(6 AS INTEGER)
/*NOTA GERADA PELA NOTA*/
ELSE
CAST(3 AS INTEGER)
END as VCODIGOMOVORIGEM,
CAST(3 AS INTEGER) as VCODIGOMOVDESTINO,

(COALESCE(Sum(TB_PRODUTOSMOV.QUANTPRODUTOMOV),0) -
COALESCE(Sum(TB_LIGFATURAS.FATURADALIGFATURA), 0)) AS vQuant
FROM
(TB_LIGCFOP INNER JOIN
((TB_NOTAFISCAL INNER JOIN TB_PRODUTOSMOV ON TB_NOTAFISCAL.ORDEMNF = TB_PRODUTOSMOV.ORDEMNF)
INNER JOIN TB_CFOP ON TB_NOTAFISCAL.CODIGOCFOP = TB_CFOP.CODIGOCFOP) ON TB_LIGCFOP.ORDEMLIGCFOP = TB_CFOP.ORDEMLIGCFOP)
LEFT JOIN TB_LIGFATURAS ON TB_PRODUTOSMOV.ORDEMPRODUTOMOV = TB_LIGFATURAS.TBORDEMPRODUTOMOV
WHERE TB_NOTAFISCAL.ORDEMLIGTIPONF = 01 /*Nota Fiscal de Produto*/
AND TB_NOTAFISCAL.CODIGOOPERESTOQUE = 'E'
AND TB_LIGCFOP.CODIGOOPERCFOP <> 11 --Desconsidera a CFOP: SEM MOVIMENTAÇÃO

GROUP BY 1,2,3,4,5,6,7,8,9,10,11

UNION

/* ---------- 6 - Nota Fiscal de Venda ----------------*/
SELECT
TB_NOTAFISCAL.CODIGOEMPRESA,
TB_NOTAFISCAL.CODIGOCLIENTE,
TB_NOTAFISCAL.CODIGOSAFRA,
TB_PRODUTOSMOV.CODIGOPRODUTO,
TB_NOTAFISCAL.CODIGOCFOP,
TB_LIGCFOP.CODIGOOPERCFOP,
TB_LIGCFOP.CODIGOOPERCOMPCFOP,
CAST(3 AS INTEGER) as vCodigoMov,
TB_NOTAFISCAL.CODIGOOPERESTOQUE,

CASE
/*PEDIDO GEROU NOTA*/
WHEN (TB_NOTAFISCAL.ORIGEMLANCA = 'PED') THEN
CAST(1 AS INTEGER)
/*REMESSA GEROU NOTA*/
WHEN (TB_NOTAFISCAL.ORIGEMLANCA = 'REM') THEN
CAST(2 AS INTEGER)
/*TRF GEROU NOTA*/
WHEN (TB_NOTAFISCAL.ORIGEMLANCA = 'TRF') THEN
CAST(4 AS INTEGER)
/*WARRANT GEROU NOTA*/
WHEN (TB_NOTAFISCAL.ORIGEMLANCA = 'WRT') THEN
CAST(5 AS INTEGER)
/*ROMANEIO GEROU NOTA*/
WHEN (TB_NOTAFISCAL.ORIGEMLANCA = 'ROM') THEN
CAST(6 AS INTEGER)
/*NOTA GERADA PELA NOTA*/
ELSE
CAST(3 AS INTEGER)
END as VCODIGOMOVORIGEM,
CAST(3 AS INTEGER) as VCODIGOMOVDESTINO,

(COALESCE(Sum(TB_PRODUTOSMOV.QUANTPRODUTOMOV),0) -
COALESCE(Sum(TB_LIGFATURAS.FATURADALIGFATURA), 0)) AS vQuant
FROM
(TB_LIGCFOP INNER JOIN
((TB_NOTAFISCAL INNER JOIN TB_PRODUTOSMOV ON TB_NOTAFISCAL.ORDEMNF = TB_PRODUTOSMOV.ORDEMNF)
INNER JOIN TB_CFOP ON TB_NOTAFISCAL.CODIGOCFOP = TB_CFOP.CODIGOCFOP) ON TB_LIGCFOP.ORDEMLIGCFOP = TB_CFOP.ORDEMLIGCFOP)
LEFT JOIN TB_LIGFATURAS ON TB_PRODUTOSMOV.ORDEMPRODUTOMOV = TB_LIGFATURAS.TBORDEMPRODUTOMOV
WHERE TB_NOTAFISCAL.ORDEMLIGTIPONF = 01 /*Nota Fiscal de Produto*/
AND TB_NOTAFISCAL.CODIGOOPERESTOQUE= 'S'
AND TB_LIGCFOP.CODIGOOPERCFOP <> 11 --Desconsidera a CFOP: SEM MOVIMENTAÇÃO

GROUP BY 1,2,3,4,5,6,7,8,9,10,11
;














----------

SELECT
TB_PRODUTOS_1.CODIGOPRODUTO,
TB_PRODUTOS_1.DESCRICAOPRODUTO,
TB_PRODUTOS_1.CODIGOORIGINALFABRICANTE,
TB_PRODUTOS_1.CODIGOCSTORIGEM,
TB_PRODUTOS_1.CONTROLALOTES,
TB_PRODUTOS_1.CODIGOTIPOPRODUTO,
TB_UNIDADEMEDIDA.ABREVIADOUNIDADEMEDIDA,
TB_MARCAS.DESCRICAOMARCAS,
TB_CLASSES.DESCRICAOCLASSES,
TB_PRODUTOSEMPRESA.ATIVOPRODUTO,
TB_PRODUTOS_1.ORDEMLIGCATEGORIACLASSES,
COALESCE(TB_APV.VLRCUSTOI,0) AS VLRCUSTOI,
COALESCE(TB_APV.TXICMSSAIDASAPV,0) AS TXICMSSAIDASAPV,
COALESCE(TB_APV.TXCUSTOOPERSAIDASAPV,0) AS TXCUSTOOPERSAIDASAPV,
TB_LIGCATEGORIACLASSES.CODIGOCATEGORIAPRODUTO,
TB_PRODUTOS_1.TAXAFUNRURALPRODUTO,
TB_PRODUTOS_1.TAXAPISPRODUTO,
TB_PRODUTOS_1.TAXACOFINSPRODUTO,
TB_PRODUTOS_1.TAXAFETHABPRODUTO,
TB_PRODUTOSSAFRA.ESTOQUEMINIMOPRODUTO,
TB_PRODUTOSSAFRA.COMISSAOSOBREVENDA,
TB_PRODUTOSSAFRA.COMISSAOSOBRECOMPRA,
TB_PRODUTOSSAFRA.ORIGEMTAXACOMISSAO,
(SELECT
CASE TB_PEDIDOS_2.CODIGOTIPOPEDIDO
WHEN 'N' THEN
SUBSTRING(CAST('Pedido: ' || TB_PEDIDOS_2.NUMSEQPEDIDO || ' - ' || TB_CLIENTES_2.RAZAOSOCIALCLIENTE as VARCHAR(150)) FROM 1 FOR 35) || '...'
ELSE
SUBSTRING(CAST('Remessa: ' || TB_PEDIDOS_2.NUMSEQPEDIDO || ' - ' || TB_CLIENTES_2.RAZAOSOCIALCLIENTE as VARCHAR(150)) FROM 1 FOR 35) || '...'
END
FROM TB_PRODUTOSMOV TB_PRODUTOSMOV_2
INNER JOIN TB_PEDIDOS TB_PEDIDOS_2 ON TB_PRODUTOSMOV_2.ORDEMPEDIDO = TB_PEDIDOS_2.ORDEMPEDIDO
INNER JOIN TB_CLIENTES TB_CLIENTES_2 ON TB_PEDIDOS_2.CODIGOCLIENTE = TB_CLIENTES_2.CODIGOCLIENTE
WHERE TB_PRODUTOSMOV_2.ORDEMPRODUTOMOV = TB_PRODUTOSMOV_1.ORDEMPRODUTOMOV)
AS vORIGEMPRODUTO,
CAST('N' as CHAR(1)) as vJaSelecionou,
TB_PRODUTOSMOV.*,
(SELECT FIRST 1
(
((SELECT COALESCE(SUM(VW_ESPRODUTO.vQuant),0)
FROM VW_ESPRODUTO
WHERE VW_ESPRODUTO.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO
AND VW_ESPRODUTO.CODIGOOPERCFOP = 1 AND VW_ESPRODUTO.CODIGOOPERCOMPCFOP = 4
AND VW_ESPRODUTO.VCODIGOMOV = 3
AND VW_ESPRODUTO.CODIGOCLIENTE = 221
AND VW_ESPRODUTO.CODIGOOPERESTOQUE = 'E'
AND VCODIGOMOVORIGEM IN (1,2,3) AND VCODIGOMOVDESTINO = 3)
-
((SELECT COALESCE(SUM(VW_ESPRODUTO.vQuant),0)
FROM VW_ESPRODUTO
WHERE VW_ESPRODUTO.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO
AND VW_ESPRODUTO.CODIGOOPERCFOP = 1 AND VW_ESPRODUTO.CODIGOOPERCOMPCFOP = 4
AND VW_ESPRODUTO.VCODIGOMOV = 3
AND VW_ESPRODUTO.CODIGOCLIENTE = 221
AND VW_ESPRODUTO.CODIGOOPERESTOQUE = 'S'
AND VCODIGOMOVORIGEM IN (1,2,3) AND VCODIGOMOVDESTINO = 3)
)
))
FROM TB_SEXO) as vAFATURAR,
CASE
WHEN CODIGOCATEGORIAPRODUTO = 3 AND CONTROLALOTES = 'S' THEN
(SELECT COALESCE(Count(TB_LOTESSEMENTES.CODIGOPRODUTO),0)
FROM TB_LOTESSEMENTES
WHERE TB_LOTESSEMENTES.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO
AND TB_LOTESSEMENTES.CODIGOEMPRESA = 1
AND TB_LOTESSEMENTES.CODIGOCLIENTE = 221
AND TB_LOTESSEMENTES.CODIGOSTATUS = 'A')
ELSE 0
END as vTemLote,
CAST(0 AS INTEGER) AS VSaldo,
((SELECT COALESCE(SUM(VW_ESPRODUTO.vQuant),0)
FROM VW_ESPRODUTO
WHERE VW_ESPRODUTO.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO
AND VW_ESPRODUTO.CODIGOOPERCFOP = 1 AND VW_ESPRODUTO.CODIGOOPERCOMPCFOP = 4
AND VW_ESPRODUTO.VCODIGOMOV = 3
AND VW_ESPRODUTO.CODIGOOPERESTOQUE = 'E'
AND VCODIGOMOVORIGEM IN (1,2,3) AND VCODIGOMOVDESTINO = 3)
-
((SELECT COALESCE(SUM(VW_ESPRODUTO.vQuant),0)
FROM VW_ESPRODUTO
WHERE VW_ESPRODUTO.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO
AND VW_ESPRODUTO.CODIGOOPERCFOP = 1 AND VW_ESPRODUTO.CODIGOOPERCOMPCFOP = 4
AND VW_ESPRODUTO.VCODIGOMOV = 3
AND VW_ESPRODUTO.CODIGOOPERESTOQUE = 'S'
AND VCODIGOMOVORIGEM IN (1,2,3) AND VCODIGOMOVDESTINO = 3)
+
(SELECT COALESCE(SUM(VW_ESPRODUTO.vQuant),0)
FROM VW_ESPRODUTO
WHERE VW_ESPRODUTO.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO
AND VW_ESPRODUTO.CODIGOOPERCFOP = 1 AND VW_ESPRODUTO.CODIGOOPERCOMPCFOP = 5
AND VW_ESPRODUTO.VCODIGOMOV = 3
AND VW_ESPRODUTO.CODIGOOPERESTOQUE = 'E'
AND VCODIGOMOVORIGEM IN (1,2,3) AND VCODIGOMOVDESTINO = 3))
) AS VSaldoEntregaFutura


FROM
TB_PRODUTOS TB_PRODUTOS_1
INNER JOIN TB_PRODUTOSMOV TB_PRODUTOSMOV_1
ON (TB_PRODUTOS_1.CODIGOPRODUTO = TB_PRODUTOSMOV_1.CODIGOPRODUTO)
INNER JOIN TB_PEDIDOS
ON TB_PRODUTOSMOV_1.ORDEMPEDIDO = TB_PEDIDOS.ORDEMPEDIDO
INNER JOIN TB_PRODUTOSEMPRESA
ON (TB_PRODUTOSEMPRESA.CODIGOPRODUTO = TB_PRODUTOS_1.CODIGOPRODUTO)
INNER JOIN TB_UNIDADEMEDIDA
ON (TB_UNIDADEMEDIDA.CODIGOUNIDADEMEDIDA = TB_PRODUTOS_1.CODIGOUNIDADEMEDIDA)
INNER JOIN TB_MARCAS
ON (TB_MARCAS.CODIGOMARCAS = TB_PRODUTOS_1.CODIGOMARCAS)
INNER JOIN TB_LIGCATEGORIACLASSES
ON (TB_LIGCATEGORIACLASSES.ORDEMLIGCATEGORIACLASSES = TB_PRODUTOS_1.ORDEMLIGCATEGORIACLASSES)
INNER JOIN TB_CLASSES
ON (TB_CLASSES.CODIGOCLASSES = TB_LIGCATEGORIACLASSES.CODIGOCLASSES)
INNER JOIN TB_CATEGORIAPRODUTOS
ON (TB_CATEGORIAPRODUTOS.CODIGOCATEGORIAPRODUTO = TB_LIGCATEGORIACLASSES.CODIGOCATEGORIAPRODUTO)
INNER JOIN TB_PRODUTOSSAFRA
ON TB_PRODUTOS_1.CODIGOPRODUTO = TB_PRODUTOSSAFRA.CODIGOPRODUTO
LEFT JOIN TB_APV
ON (TB_APV.CODIGOPRODUTO = TB_PRODUTOSSAFRA.CODIGOPRODUTO
AND TB_APV.CODIGOEMPRESA = TB_PRODUTOSSAFRA.CODIGOEMPRESA)
WHERE TB_PEDIDOS.ORDEMPEDIDO = 61
AND TB_PRODUTOSEMPRESA.CODIGOEMPRESA = 1
AND TB_PRODUTOSSAFRA.CODIGOSAFRA = 1
ORDER BY TB_PRODUTOS_1.DESCRICAOPRODUTO, TB_PRODUTOSMOV_1.ORDEMPRODUTOMOV