/* Server version: WI-V6.3.1.32609 Firebird 3.0 SQLDialect: 3. ODS: 12.0. Forced writes: On. Sweep interval: 0. Page size: 16384. Cache pages: 2048 (32768 Kb). Read-only: False. */ SET CLIENTLIB 'C:\Users\Ti4\Desktop\Firebird-3.0.0.32503-0_Win32\fbclient.dll'; SET NAMES UTF8; SET SQL DIALECT 3; CONNECT '192.168.0.178/3050:D:\Temp\GC_12_09_2017.FDB' USER 'SYSDBA' PASSWORD 'masterkey' ROLE 'RDB$ADMIN'; SET AUTODDL ON; /******************************************************************************/ /**** Deactivating dependencies of objects ****/ /******************************************************************************/ SET TERM ^ ; ALTER PROCEDURE SP_REPLICA_TABELA( TABELA VARCHAR(50)) RETURNS ( ID INTEGER, ANO INTEGER, MES INTEGER, DATA_INICIAL VARCHAR(10), DATA_FINAL VARCHAR(10)) AS BEGIN SUSPEND; END ^ ALTER PROCEDURE SPC_REPOSICAO_ESTOQUE_KAMBAN( ESTABELECIMENTO_ID INTEGER, LOCALIZACAO_ID INTEGER, FAMILIA_ID INTEGER) RETURNS ( PRODUTO_ID INTEGER, PRODUTO_DESCRICAO VARCHAR(400), TAMANHO VARCHAR(10), ESTOQUE NUMERIC(18,4), EST_MIN NUMERIC(18,4), EST_MAX NUMERIC(18,4), PERC_PONTO_REP NUMERIC(18,4), QTD_PONTO_REP NUMERIC(18,4), TIPO_REP CHAR(12), QTD_REP NUMERIC(18,4), NECESSIDADE NUMERIC(18,4)) AS BEGIN SUSPEND; END ^ ALTER PROCEDURE SPI_ESTOQUE_TRANSACAO_REGRA( REGRA_TIPO INTEGER, GP_ID INTEGER, PERFIL_UP VARCHAR(10), FAMILIA_ID INTEGER, LOCALIZACAO_ID INTEGER, TABELA VARCHAR(32), TABELA_NIVEL INTEGER, TABELA_ID INTEGER, ESTABELECIMENTO_ID INTEGER, DATA DATE, PRODUTO_ID INTEGER, TAMANHO INTEGER, QUANTIDADE NUMERIC(10,5), TIPO CHAR, CONSUMO CHAR, CCUSTO VARCHAR(10), OBSERVACAO VARCHAR(100), TRANSACAO_ID INTEGER = NULL, DOCUMENTO INTEGER = NULL, TALAO INTEGER = 0, PECA_ID VARCHAR(100) = NULL) AS BEGIN EXIT; END ^ ALTER PROCEDURE SPU_CONFERENCIA_TRANSACAO( I_ESTOQUE_ID VARCHAR(3000), I_OPERADOR_ID INTEGER, I_CONFERIR INTEGER = 2) AS BEGIN EXIT; END ^ ALTER PROCEDURE SPU_LIBERAR_TALAO_COLETOR( COD_BARRAS VARCHAR(100), OPERADOR_ID INTEGER, COD_UP VARCHAR(100)) RETURNS ( ID_SAIDA INTEGER, ID_ENTRADA INTEGER) AS BEGIN SUSPEND; END ^ ALTER PROCEDURE SPU_PEDIDO_CLASSIFICACAO( DATA_1 DATE, DATA_2 DATE, PEDIDO_1 VARCHAR(10)) RETURNS ( PEDIDO INTEGER, SKU1200A9999 INTEGER, SKU0800A1200 INTEGER, SKU0400A0800 INTEGER, SKU0000A0400 INTEGER, MODCOR2000A9999 INTEGER, MODCOR1000A2000 INTEGER, MODCOR0000A1000 INTEGER) AS BEGIN SUSPEND; END ^ ALTER TRIGGER TTBESTOQUE_SALDO_MES_999 AS BEGIN EXIT; END ^ ALTER TRIGGER TTBKANBAN_LOTE_B2I AS BEGIN EXIT; END ^ ALTER TRIGGER TTBMODELO_LINHA_999 AS BEGIN EXIT; END ^ ALTER TRIGGER TTBPEDIDO_ITEM_PROC_B0U_03 AS BEGIN EXIT; END ^ ALTER TRIGGER TTBPEDIDO_ITEM_PROCESSADO_B8U AS BEGIN EXIT; END ^ ALTER TRIGGER TTBREMESSA_CONSUMO_B0U_03 AS BEGIN EXIT; END ^ ALTER TRIGGER TTBREMESSA_ITEM_PROCESSADO_B3U AS BEGIN EXIT; END ^ ALTER TRIGGER TTBREMESSA_TALAO_VINCULO_B3D AS BEGIN EXIT; END ^ ALTER TRIGGER TTBREMESSA_TALAO_VINCULO_B4D AS BEGIN EXIT; END ^ ALTER TRIGGER TTBREMESSA_TALAO_VINCULO_B5I AS BEGIN EXIT; END ^ SET TERM ; ^ DROP VIEW VWESTOQUE_MINIMO_TAMANHO; DROP VIEW VWREGISTRO_DEFEITO_DIA; DROP VIEW VWREGISTRO_PRODUCAO_DIA; /******************************************************************************/ /**** Dropping stored procedures ****/ /******************************************************************************/ DROP PROCEDURE SPI_ESTOQUE_TRANSACAO_REGRA; DROP PROCEDURE SPU_EXCLUIR_LIBERACAO; DROP PROCEDURE SPU_HISTORICO_TRANSACAO; /******************************************************************************/ /**** Dropping stored functions ****/ /******************************************************************************/ DROP FUNCTION FN_STRTOINT_DEF; DROP FUNCTION FN_TIPO_TOLERANCIA; /******************************************************************************/ /**** Dropping views ****/ /******************************************************************************/ DROP VIEW VWCONFERENCIA_PENDENTE; DROP VIEW VWESTOQUE_TRANSACAO_REGRA; /******************************************************************************/ /**** Dropping triggers ****/ /******************************************************************************/ DROP TRIGGER TTBREMESSA_TALAO_VINCULO_B6I; /******************************************************************************/ /**** Dropping indices ****/ /******************************************************************************/ DROP INDEX ITBESTOQUE_TRANSACAO_ITEM_19; DROP INDEX ITBREMESSA_TALAO_VINCULO_07; /******************************************************************************/ /**** Dropping tables ****/ /******************************************************************************/ DROP TABLE TMPGP_ESTOQUE; /******************************************************************************/ /**** Dropping generators (sequences) ****/ /******************************************************************************/ DROP SEQUENCE GTBCASO_CONTATO; /******************************************************************************/ /**** Creating generators (sequences) ****/ /******************************************************************************/ CREATE SEQUENCE GTBCASO_CONTATO START WITH 0 INCREMENT BY 1; /******************************************************************************/ /**** Altering tables ****/ /******************************************************************************/ ALTER TABLE TBCASO_USUARIOS ADD NOTIFICACAO INTEGER DEFAULT 0; ALTER TABLE TBESTOQUE_SALDO_MES DROP DATA; ALTER TABLE TBESTOQUE_SALDO_MES ADD DATA DATE; ALTER TABLE TBLOCALIZACAO ADD WIP CHAR DEFAULT '0'; ALTER TABLE TBMOVCONTABIL ADD DATAHORA TIMESTAMP DEFAULT 'NOW'; ALTER TABLE TBNOTIFICACAO ALTER COLUMN DATA_HORA SET DEFAULT 'now'; ALTER TABLE TBPEDIDO_ITEM ADD CLASSIFICACAO INTEGER; ALTER DOMAIN RDB$61288 TYPE INTEGER CHARACTER SET UTF8; ALTER TABLE TBREPLICA_TABELA ADD LINHA_ID INTEGER DEFAULT 0; /******************************************************************************/ /**** Creating indices ****/ /******************************************************************************/ CREATE INDEX ITBESTOQUE_SALDO_MES_04 ON TBESTOQUE_SALDO_MES (DATA); CREATE INDEX ITBESTOQUE_TRANSACAO_ITEM_19 ON TBESTOQUE_TRANSACAO_ITEM (ESTABELECIMENTO_CODIGO, LOCALIZACAO_CODIGO, PRODUTO_CODIGO, TABELA, TABELA_ID, TABELA_NIVEL); CREATE INDEX ITBREMESSA_TALAO_VINCULO_07 ON TBREMESSA_TALAO_VINCULO (ORIGEM_TABELA); /******************************************************************************/ /**** Creating views ****/ /******************************************************************************/ CREATE VIEW VWESTOQUE_MINIMO_TAMANHO ( ID, ESTABELECIMENTO_ID, PRODUTO_ID, LOCALIZACAO_ID, FAMILIA_ID, PRODUTO_DESCRICAO, SEGURANCA, PONTO_REPOSICAO, TIPO_REPOSICAO, TAMANHO, ESTOQUE_MIN, ESTOQUE_MAX, TAM_DESCRICAO, HABILITA_KANBAN) AS SELECT CAST(A.ID||LPAD(00,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 00 TAMANHO, A.QUANTIDADE, A.ESTOQUE_MAX, '' TAM_DESCRICAO, A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.QUANTIDADE > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO = 0 UNION SELECT CAST(A.ID||LPAD(01,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 01 TAMANHO, A.T01, A.M01, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,01)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T01 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(02,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 02 TAMANHO, A.T02, A.M02, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,02)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T02 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(03,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 03 TAMANHO, A.T03, A.M03, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,03)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T03 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(04,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 04 TAMANHO, A.T04, A.M04, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,04)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T04 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(05,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 05 TAMANHO, A.T05, A.M05, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,05)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T05 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(06,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 06 TAMANHO, A.T06, A.M06, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,06)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T06 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(07,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 07 TAMANHO, A.T07, A.M07, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,07)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T07 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(08,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 08 TAMANHO, A.T08, A.M08, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,08)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T08 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(09,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 09 TAMANHO, A.T09, A.M09, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,09)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T09 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(10,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 10 TAMANHO, A.T10, A.M10, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,10)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T10 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(11,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 11 TAMANHO, A.T11, A.M11, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,11)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T11 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(12,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 12 TAMANHO, A.T12, A.M12, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,12)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T12 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(13,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 13 TAMANHO, A.T13, A.M13, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,13)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T13 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(14,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 14 TAMANHO, A.T14, A.M14, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,14)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T14 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(15,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 15 TAMANHO, A.T15, A.M15, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,15)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T15 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(16,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 16 TAMANHO, A.T16, A.M16, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,16)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T16 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(17,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 17 TAMANHO, A.T17, A.M17, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,17)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T17 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(18,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 18 TAMANHO, A.T18, A.M18, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,18)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T18 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(19,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 19 TAMANHO, A.T19, A.M19, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,19)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T19 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION SELECT CAST(A.ID||LPAD(20,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 20 TAMANHO, A.T20, A.M20, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,20)), A.HABILITA_KANBAN FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T20 > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0; CREATE VIEW VWREGISTRO_DEFEITO_DIA ( DATA_REGISTRO, DEFEITO, MODELO, PRODUTO, COR, GP, LINHA, PERFIL, QUANTIDADE, QTD_TURNO1, QTD_TURNO2, TALOES, DEFEITO_SETOR, DEFEITO_ID, MODELO_ID, PRODUTO_ID, COR_ID, GP_ID, LINHA_ID, PERFIL_ID, FAMILIA_ID, ESTABELECIMENTO_ID, TAMANHO, DENSIDADE, ESPESSURA) AS select DATA_REGISTRO, DEFEITO, MODELO, PRODUTO, COR, GP, LINHA, PERFIL, sum(Quantidade) as Quantidade, sum(QTD_TURNO1) as QTD_TURNO1, sum(QTD_TURNO2) as QTD_TURNO2, sum(TALOES) as TALOES, defeito_setor, defeito_id, MODELO_ID, PRODUTO_ID, COR_ID, GP_ID, LINHA_ID, PERFIL_ID, familia_id, estabelecimento_id, tamanho, cast(substring(Densidade from 1 for 10) as numeric(5,2)) DENSIDADE, cast(substring(Densidade from 11 for 20) as numeric(5,2)) espessura from( Select B.Data DATA_REGISTRO, d.descricao as DEFEITO, d.setor as SETOR, m.descricao as MODELO, p.descricao as PRODUTO, c.descricao as COR, e.descricao as GP, r.descricao as LINHA, s.descricao as PERFIL, B.Quantidade, IIF(B.TURNO=1,B.Quantidade,0) QTD_TURNO1, IIF(B.TURNO=2,B.Quantidade,0) QTD_TURNO2, 1 as TALOES, d.setor as defeito_setor, d.codigo as defeito_id, m.codigo as modelo_id, p.codigo as produto_id, c.codigo cor_id, e.codigo gp_id, r.codigo linha_id, s.id perfil_id, p.familia_codigo as familia_id, b.estabelecimento_id, FN_TAMANHO_GRADE(p.grade_codigo, b.tamanho) tamanho, (Select First 1 Coalesce((Select First 1 lpad(M.Densidade,10,0)||lpad(m.espessura,10,0) From TbModelo M Where M.Codigo = P2.Modelo_Codigo),'0000000000') From TbModelo_Consumo_Cor MC, TbFamilia F, TbProduto P2 Where MC.Modelo_Id = p.modelo_codigo and MC.Cor_Id = c.codigo and MC.Produto_Id = P2.Codigo and P2.Familia_Codigo = F.Codigo and F.Densidade_Espessura = '1' and((b.tamanho = 1 and MC.T01 > 0) or (b.Tamanho = 2 and MC.T02 > 0) or (b.Tamanho = 3 and MC.T03 > 0) or (b.Tamanho = 4 and MC.T04 > 0) or (b.Tamanho = 5 and MC.T05 > 0) or (b.Tamanho = 6 and MC.T06 > 0) or (b.Tamanho = 7 and MC.T07 > 0) or (b.Tamanho = 8 and MC.T08 > 0) or (b.Tamanho = 9 and MC.T09 > 0) or (b.Tamanho =10 and MC.T10 > 0) or (b.Tamanho =11 and MC.T11 > 0) or (b.Tamanho =12 and MC.T12 > 0) or (b.Tamanho =13 and MC.T13 > 0) or (b.Tamanho =14 and MC.T14 > 0) or (b.Tamanho =15 and MC.T15 > 0) or (b.Tamanho =16 and MC.T16 > 0) or (b.Tamanho =17 and MC.T17 > 0) or (b.Tamanho =18 and MC.T18 > 0) or (b.Tamanho =19 and MC.T19 > 0) or (b.Tamanho =20 and MC.T20 > 0))) as Densidade From TbDefeito_Transacao_Item B,tbsac_defeito d, TbEsteira E, TbProduto P, tbmodelo M, tbcor c,tbmodelo_linha r,tbperfil s Where B.Esteira_id = E.Codigo and B.Produto_id = P.Codigo --and B.Estabelecimento_Id = :ESTABELECIMENTO --and B.Data between :DATA1 and :DATA2 AND (B.DEFEITO_ID > 0) --and P.Familia_Codigo = :FAMILIA and m.codigo = p.modelo_codigo and d.codigo = b.defeito_id and c.codigo = p.cor_codigo and r.codigo = m.linha_codigo and s.id = b.perfil and s.tabela = 'SKU' and s.familia_id = p.familia_codigo ) group by DATA_REGISTRO, DEFEITO, MODELO, PRODUTO, COR, GP, LINHA, PERFIL, defeito_setor, defeito_id, MODELO_ID, PRODUTO_ID, COR_ID, GP_ID, LINHA_ID, PERFIL_ID, familia_id, estabelecimento_id, tamanho, Densidade, espessura; CREATE VIEW VWREGISTRO_PRODUCAO_DIA ( DATA_REGISTRO, MODELO, PRODUTO, COR, GP, LINHA, PERFIL, QUANTIDADE, QTD_TURNO1, QTD_TURNO2, TALOES, MODELO_ID, PRODUTO_ID, COR_ID, GP_ID, LINHA_ID, PERFIL_ID, FAMILIA_ID, ESTABELECIMENTO_ID, TAMANHO, DENSIDADE, ESPESSURA) AS select DATA_REGISTRO, MODELO, PRODUTO, COR, GP, LINHA, PERFIL, sum(QUANTIDADE_PEDIDO) as QUANTIDADE, sum(QTD_TURNO1) as QTD_TURNO1, sum(QTD_TURNO2) as QTD_TURNO2, sum(TALOES) as TALOES, MODELO_ID, PRODUTO_ID, COR_ID, GP_ID, LINHA_ID, PERFIL_ID, familia_id, estabelecimento_id, tamanho, cast(substring(Densidade from 1 for 10) as numeric(5,2)) DENSIDADE, cast(substring(Densidade from 11 for 20) as numeric(5,2)) espessura from( select A.Data_Producao as DATA_REGISTRO, A.pedido_item_controle as ID, m.descricao as MODELO, p.descricao as PRODUTO, c.descricao as COR, e.descricao as GP, r.descricao as LINHA, s.descricao as PERFIL, A.QUANTIDADE_PEDIDO, IIF(A.TURNO=1,A.QUANTIDADE_PEDIDO,0) QTD_TURNO1, IIF(A.TURNO=2,A.QUANTIDADE_PEDIDO,0) QTD_TURNO2, 1 as TALOES, m.codigo as modelo_id, p.codigo as produto_id, c.codigo cor_id, e.codigo gp_id, r.codigo linha_id, s.id perfil_id, a.familia_codigo as familia_id, a.estabelecimento_codigo as estabelecimento_id, FN_TAMANHO_GRADE(p.grade_codigo, a.tamanho) tamanho, (Select First 1 Coalesce((Select First 1 lpad(M.Densidade,10,0)||lpad(m.espessura,10,0) From TbModelo M Where M.Codigo = P2.Modelo_Codigo),'0000000000') From TbModelo_Consumo_Cor MC, TbFamilia F, TbProduto P2 Where MC.Modelo_Id = p.modelo_codigo and MC.Cor_Id = c.codigo and MC.Produto_Id = P2.Codigo and P2.Familia_Codigo = F.Codigo and F.Densidade_Espessura = '1' and((a.tamanho = 1 and MC.T01 > 0) or (a.Tamanho = 2 and MC.T02 > 0) or (a.Tamanho = 3 and MC.T03 > 0) or (a.Tamanho = 4 and MC.T04 > 0) or (a.Tamanho = 5 and MC.T05 > 0) or (a.Tamanho = 6 and MC.T06 > 0) or (a.Tamanho = 7 and MC.T07 > 0) or (a.Tamanho = 8 and MC.T08 > 0) or (a.Tamanho = 9 and MC.T09 > 0) or (a.Tamanho =10 and MC.T10 > 0) or (a.Tamanho =11 and MC.T11 > 0) or (a.Tamanho =12 and MC.T12 > 0) or (a.Tamanho =13 and MC.T13 > 0) or (a.Tamanho =14 and MC.T14 > 0) or (a.Tamanho =15 and MC.T15 > 0) or (a.Tamanho =16 and MC.T16 > 0) or (a.Tamanho =17 and MC.T17 > 0) or (a.Tamanho =18 and MC.T18 > 0) or (a.Tamanho =19 and MC.T19 > 0) or (a.Tamanho =20 and MC.T20 > 0))) as Densidade From TbPedido_Item_Processado A, TbEsteira E, TbProduto P, tbmodelo M, tbcor c,tbmodelo_linha r,tbperfil s where --and A.Estabelecimento_Codigo = :ESTABELECIMENTO --and A.Data_Producao between :DATA1 and :DATA2 --and A.familia_codigo = :FAMILIA e.codigo = a.Esteira_Producao and p.codigo = a.produto_codigo and m.codigo = p.modelo_codigo and c.codigo = p.cor_codigo and r.codigo = m.linha_codigo and s.id = a.perfil and s.tabela = 'SKU' ) group by DATA_REGISTRO, MODELO, PRODUTO, COR, GP, LINHA, PERFIL, MODELO_ID, PRODUTO_ID, COR_ID, GP_ID, LINHA_ID, PERFIL_ID, familia_id, estabelecimento_id, tamanho, Densidade, espessura; /******************************************************************************/ /**** Creating triggers ****/ /******************************************************************************/ SET TERM ^ ; CREATE TRIGGER TTBESTOQUE_SALDO_MES_BI0 FOR TBESTOQUE_SALDO_MES ACTIVE BEFORE INSERT POSITION 0 AS begin NEW.DATA = CAST('01.'||NEW.MES||'.'||NEW.ANO AS DATE); end ^ CREATE TRIGGER TTBMODELO_CONSUMO_999 FOR TBMODELO_CONSUMO ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 999 AS declare variable vLinha_Id Integer; begin vLinha_Id = (Select First 1 Linha_Codigo from tbmodelo where codigo = New.Modelo_Codigo); if (vLinha_Id > 0) then Begin UpDate tbreplica_tabela set Status = '0' Where tabela = 'TBMODELO_FICHA_TECNICA' and linha_id = :vLinha_id and Status = '1'; End end ^ CREATE TRIGGER TTBMODELO_CONSUMO_COR_999 FOR TBMODELO_CONSUMO_COR ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 999 AS declare variable vLinha_Id Integer; begin vLinha_Id = (Select First 1 Linha_Codigo from tbmodelo where codigo = New.Modelo_Id); if (vLinha_Id > 0) then Begin UpDate tbreplica_tabela set Status = '0' Where tabela = 'TBMODELO_FICHA_TECNICA' and linha_id = :vLinha_id and Status = '1'; End end ^ /******************************************************************************/ /**** Altering stored procedures (with empty bodies) ****/ /******************************************************************************/ ALTER PROCEDURE SP_REPLICA_TABELA( TABELA VARCHAR(50)) RETURNS ( ID INTEGER, ANO INTEGER, MES INTEGER, DATA_INICIAL VARCHAR(10), DATA_FINAL VARCHAR(10), LINHA_ID INTEGER) AS BEGIN SUSPEND; END ^ ALTER PROCEDURE SPC_CONFERENCIA_TRANSACAO( COD_BARRAS VARCHAR(100), CONFERENCIA_TIPO INTEGER) RETURNS ( ESTOQUE_ID INTEGER, PRODUTO_ID INTEGER, PRODUTO_DESCRICAO VARCHAR(100), USUARIO_ID INTEGER, USUARIO_DESCRICAO VARCHAR(100), DATAHORA TIMESTAMP, LOCALIZACAO_CODIGO INTEGER, CONFERENCIA INTEGER, ESTOQUE_TRANSACAO_REGRA_ID INTEGER, QUANTIDADE NUMERIC(15,4), TAMANHO INTEGER) AS BEGIN SUSPEND; END ^ ALTER PROCEDURE SPI_ESTOQUE_TRANSACAO( TABELA VARCHAR(32), TABELA_NIVEL INTEGER, TABELA_ID INTEGER, ESTABELECIMENTO_ID INTEGER, LOCALIZACAO_ID INTEGER, DATA DATE, PRODUTO_ID INTEGER, TAMANHO INTEGER, QUANTIDADE NUMERIC(10,5), TIPO CHAR, OPERACAO VARCHAR(3), CONSUMO CHAR, CCUSTO VARCHAR(10), OBSERVACAO VARCHAR(100), TRANSACAO_ID INTEGER = NULL, DOCUMENTO INTEGER = NULL, TALAO INTEGER = 0) AS BEGIN EXIT; END ^ ALTER PROCEDURE SPU_LIBERACAO_TALAO_COLETOR( COD_BARRAS VARCHAR(100), OPERADOR_ID INTEGER) RETURNS ( PRODUTO_ID INTEGER, PRODUTO_DESCRICAO VARCHAR(100), OPERACAO1 VARCHAR(10), OPERACAO2 VARCHAR(10), LOCALIZACAO_ID_VELHA INTEGER, LOCALIZACAO_ID_NOVA INTEGER, LOCALIZACAO_DESC_VELHA VARCHAR(100), LOCALIZACAO_DESC_NOVA VARCHAR(100), REMESSA VARCHAR(20), TALAO VARCHAR(20), QUANTIDADE VARCHAR(15), FAMILIA INTEGER, ID VARCHAR(20), QUANTIDADE_ALT VARCHAR(15), SITUACAO INTEGER) AS BEGIN SUSPEND; END ^ ALTER PROCEDURE SPU_LIBERAR_TALAO_COLETOR( COD_BARRAS VARCHAR(100), OPERADOR_ID INTEGER) AS BEGIN EXIT; END ^ ALTER PROCEDURE SPU_PEDIDO_CLASSIFICACAO( DATA_1 DATE, DATA_2 DATE, PEDIDO_1 VARCHAR(10)) RETURNS ( PEDIDO INTEGER, MODCOR4000A9999 INTEGER, MODCOR2000A4000 INTEGER, MODCOR1000A2000 INTEGER, MODCOR0600A1000 INTEGER, MODCOR0200A0600 INTEGER, MODCOR0000A0200 INTEGER) AS BEGIN SUSPEND; END ^ /******************************************************************************/ /**** Altering triggers ****/ /******************************************************************************/ ALTER TRIGGER TBCASO_FEED_B03I AS declare variable old_status integer; declare variable new_status integer; declare variable tmp integer; begin old_status = (select r.status_id from tbcaso_registro r where r.id = new.caso_id and r.painel_id = new.painel_id); tmp = (select s.aberto from tbcaso_status s where s.id = :old_status); if(tmp = 1 and new.usuario_id > 0)then begin tmp = (select first 1 s.id from tbcaso_status s where s.atendido = 1); if(tmp > 0)then begin update tbcaso_registro r set r.status_id = :tmp where r.id = new.caso_id and r.painel_id = new.painel_id; end end end ^ ALTER TRIGGER TTBAGRUPAMENTO_B0I_01 AS DECLARE VARIABLE Agrup_Id Integer; DECLARE VARIABLE Agrup_Desc VARCHAR(50); begin if (New.Simulacao = '0') Then Begin Agrup_Id = Coalesce((Select First 1 Id From TbAgrupamento Where ((Data_Inicial <= New.Data_Inicial and Data_Final >= New.Data_Inicial) or (Data_Inicial <= New.Data_Final and Data_Final >= New.Data_Final)) and Simulacao = '0' and Perfil = New.Perfil and localizacao_Id = New.Localizacao_Id),0); if (:Agrup_Id > 0) Then Begin Agrup_Desc = (Select First 1 Id||'-'||Descricao From TbAgrupamento Where Id = :Agrup_Id); Exception "..." 'PERIODO INFORMADO SOBREPONDO PERIODO DE OUTRO AGRUPAMENTO: '||:AGRUP_DESC|| ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; End End end ^ ALTER TRIGGER TTBAGRUPAMENTO_B0U_01 AS DECLARE VARIABLE Agrup_Id Integer; DECLARE VARIABLE Agrup_Desc VARCHAR(50); DECLARE VARIABLE Pedidos Integer; begin if (New.Simulacao <> Old.Simulacao or New.Data_Inicial <> Old.Data_Inicial or New.Data_Final <> Old.Data_Final) Then Begin if (New.Simulacao = '1') then Begin Pedidos = Coalesce((Select First 1 Id From TbAgrupamento_Pedido Where Agrupamento_Id = Old.Id and Tipo = 'P'),0); if (:Pedidos > 0) Then Begin Exception "..." 'TIPO DE AGRUPAMENTO NAO PODE SER ALTERADO, JA EXISTEM PEDIDOS VINCULADOS!'|| ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; End End if (New.Simulacao = '0') then Begin Agrup_Id = Coalesce((Select First 1 Id From TbAgrupamento Where ((Data_Inicial <= New.Data_Inicial and Data_Final >= New.Data_Inicial) or (Data_Inicial <= New.Data_Final and Data_Final >= New.Data_Final)) and Simulacao = '0' and Id <> Old.Id and Perfil = New.Perfil and localizacao_Id = New.Localizacao_Id ),0); if (:Agrup_Id > 0) Then Begin Agrup_Desc = (Select First 1 Id||'-'||Descricao From TbAgrupamento Where Id = :Agrup_Id); Exception "..." 'PERIODO INFORMADO SOBREPONDO PERIODO DE OUTRO AGRUPAMENTO: '||:AGRUP_DESC|| ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; End End End end ^ ALTER TRIGGER TTBCASO_FEED_B02I AS declare variable corpo varchar(8000); declare variable html1 varchar(4000); declare variable html2 varchar(4000); begin if(new.origem = 0)then begin if(new.de <> '' and new.para <> '' and new.assunto <> '' and new.mensagem <> '' and (new.tipo = 1 /*or new.tipo = 4*/) and new.usuario_id > 0 and new.subfeed = 0)then begin html1 = (SELECT first 1 p.html FROM tbcaso_html p where p.id = 3); html2 = (SELECT first 1 p.html FROM tbcaso_html p where p.id = 2); corpo = '

[ABRIR CASO NA WEB]

'; corpo = corpo || html1; corpo = corpo || '

Data: '||formatdatetime(current_timestamp) || '

'; corpo = corpo || new.mensagem; corpo = corpo || html2; insert into tbemail (status, email, assunto, corpo, usuario_id, cc, cco, painel_id, datahora) values ( 0, new.para, new.assunto, :corpo, new.usuario_id, new.em_copia, new.em_copia_oculta, new.painel_id, current_timestamp ); end end end ^ ALTER TRIGGER TTBCASO_REGISTRO_B02I INACTIVE AS declare variable tipo integer; declare variable descricao varchar(50); declare variable monitor varchar(100); declare variable motivo varchar(100); declare variable valor varchar(1000); declare variable corpo varchar(8000); declare variable html1 varchar(4000); declare variable html2 varchar(4000); begin monitor = (SELECT first 1 p.email_monitor FROM tbcaso_painel p where p.id = new.painel_id); html1 = (SELECT first 1 p.html FROM tbcaso_html p where p.id = 1); html2 = (SELECT first 1 p.html FROM tbcaso_html p where p.id = 2); corpo = '

Abrir Caso '||new.id||' na web

'; corpo = corpo || html1; corpo = corpo || '

Data: '||formatdatetime(current_timestamp)||'

'; for select TIPO, DESCRICAO, coalesce(VALOR,' ') as VALOR from CASO_DETALHE(new.painel_id, new.id) into :tipo, :descricao, :valor do begin corpo = corpo||'

'||descricao||': '||:valor||'

'; if(descricao = 'Motivo')then begin motivo = valor; end end corpo = corpo || html2; insert into tbemail (status, email, assunto, corpo, usuario_id, cc, cco, painel_id) values ( 0, :monitor, 'NOVO - [CASO:'||lpad(new.id,8,0)||'] Aberto: '|| :motivo, :corpo, 0, (select u.email from tbusuario u where u.codigo = new.usuario_id), '', new.painel_id ); end ^ ALTER TRIGGER TTBCCUSTO_COTA_B0U_04 As /*************************************************** Registra histórico de alteração ***************************************************/ Declare Variable Historico VarChar(500); Begin Historico = ''; If (Old.CCusto <> New.CCusto) Then Begin Historico = Historico||' C.Custo: '||Old.CCusto||'->'||New.CCusto; End If (Old.ContaContabil <> New.ContaContabil) Then Begin Historico = Historico||' C.Contábil: '||Old.ContaContabil||'->'||New.ContaContabil; End If (Old.Mes <> New.Mes) Then Begin Historico = Historico||' Mês: '||Old.Mes||'->'||New.Mes; End If (Old.Ano <> New.Ano) Then Begin Historico = Historico||' Ano: '||Old.Ano||'->'||New.Ano; End If (Old.Valor <> New.Valor) Then Begin Historico = Historico||' Valor: '||Cast(Old.Valor As Numeric(15,2))||'->'||Cast(New.Valor As Numeric(15,2)); End If (Old.Bloqueio <> New.Bloqueio) Then Begin Historico = Historico||' Bloq.: '||iif(Old.Bloqueio = '1', 'Ativo','Inativo')||'->'||iif(New.Bloqueio = '1', 'Ativo','Inativo'); End If (Old.Notificacao <> New.Notificacao) Then Begin Historico = Historico||' Notif.: '||iif(Old.Notificacao = '1', 'Ativo','Inativo')||'->'||iif(New.Notificacao = '1', 'Ativo','Inativo'); End If (Old.Destaque <> New.Destaque) Then Begin Historico = Historico||' Destaq.: '||iif(Old.Destaque = '1', 'Ativo','Inativo')||'->'||iif(New.Destaque = '1', 'Ativo','Inativo'); End If (Old.OBSERVACAO_GERAL <> New.OBSERVACAO_GERAL) Then Begin Historico = Historico||' Obs. Anterior: '||CAST(SUBSTRING(Old.OBSERVACAO_GERAL FROM 1 FOR 450) AS VARCHAR(450)); End If (Historico <> '') Then Begin Insert Into TbHistorico ( Tabela, Tabela_Id, Usuario, Ip, Historico ) VALUES ( 'TBCCUSTO_COTA', New.Id, (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection), (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection), :Historico ); End End ^ ALTER TRIGGER TTBCCUSTO_COTA_EXTRA_B9U AS DECLARE VARIABLE HISTORICO VARCHAR(500); BEGIN HISTORICO = ''; IF ( NEW.STATUSEXCLUSAO = '1' AND OLD.STATUSEXCLUSAO = '0') THEN BEGIN HISTORICO = HISTORICO||' COTA EXTRA ID: '||OLD.ID||' - EXCLUIDA. VALOR: ' || OLD.VALOR || ' OBS.: ' || OLD.OBSERVACAO; END IF (HISTORICO <> '') THEN BEGIN EXECUTE PROCEDURE SPI_HISTORICO('TBCCUSTO_COTA',NEW.CCUSTO_COTA_ID,HISTORICO); END END ^ ALTER TRIGGER TTBESTEIRA_B10U INACTIVE ^ ALTER TRIGGER TTBESTOQUE_BAIXA_B2U_03 AS /* BAIXA DE ESTOQUE */ DECLARE VARIABLE ESTOQUE_ID INTEGER; DECLARE VARIABLE ESTABELECIMENTO_ID INTEGER; DECLARE VARIABLE PRODUTO_ID INTEGER; DECLARE VARIABLE TAMANHO INTEGER; DECLARE VARIABLE DOCUMENTO INTEGER; DECLARE VARIABLE TURNO_ID INTEGER; DECLARE VARIABLE CCUSTO VARCHAR(10); DECLARE VARIABLE RESPOSTA VARCHAR(100); DECLARE VARIABLE GRADE INTEGER; BEGIN IF (NEW.TIPO = 'R') THEN BEGIN IF (((OLD.QUANTIDADE IS NULL) OR (NEW.QUANTIDADE <> OLD.QUANTIDADE)) OR ((OLD.OPERACAO_CODIGO IS NULL) OR (NEW.OPERACAO_CODIGO <> OLD.OPERACAO_CODIGO)) OR ((OLD.LOCALIZACAO_ID IS NULL) OR (NEW.LOCALIZACAO_ID <> OLD.LOCALIZACAO_ID))) THEN BEGIN RESPOSTA = COALESCE((SELECT FIRST 1 LPAD(COALESCE(C.ESTABELECIMENTO_ID, 0), 4, '0')|| LPAD(COALESCE(C.PRODUTO_ID, 0), 6, '0')|| LPAD(COALESCE(C.TAMANHO, 0), 2, '0')|| LPAD(COALESCE(C.DOCUMENTO, 0), 6, '0')|| LPAD(COALESCE(C.TURNO_ID, 0), 2, '0')|| LPAD(COALESCE(C.CCUSTO, 0), 8, '0') FROM TBCONSUMO_REQUISICAO C WHERE C.ID = NEW.TABELA_ID), 0); ESTABELECIMENTO_ID = CAST(SUBSTRING(RESPOSTA FROM 1 FOR 4) AS INTEGER); PRODUTO_ID = CAST(SUBSTRING(RESPOSTA FROM 5 FOR 6) AS INTEGER); TAMANHO = CAST(SUBSTRING(RESPOSTA FROM 11 FOR 2) AS INTEGER); DOCUMENTO = lpad(EXTRACT(YEAR FROM current_date),4,'0') || lpad(EXTRACT(MONTH FROM current_date),2,'0') || lpad(EXTRACT(DAY from current_date),2,'0'); TURNO_ID = CAST(SUBSTRING(RESPOSTA FROM 19 FOR 2) AS INTEGER); CCUSTO = cast(SUBSTRING(RESPOSTA FROM 21 FOR 8) as integer); --se produto nao tem grade tamanho he 0 GRADE = COALESCE((select first 1 p.grade_codigo from tbproduto p where p.codigo = :PRODUTO_ID),0); if(GRADE = 0)then begin TAMANHO = 0; end IF (OLD.ESTOQUE_ID IS NULL) THEN BEGIN ESTOQUE_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0); END ELSE BEGIN ESTOQUE_ID = OLD.ESTOQUE_ID; END EXECUTE PROCEDURE SPU_ESTOQUE_SALDO4 ( :ESTABELECIMENTO_ID,NEW.LOCALIZACAO_ID, :PRODUTO_ID,'S',CURRENT_DATE, NEW.QUANTIDADE, IIF(:TAMANHO = 1,NEW.QUANTIDADE,0), IIF(:TAMANHO = 2,NEW.QUANTIDADE,0), IIF(:TAMANHO = 3,NEW.QUANTIDADE,0), IIF(:TAMANHO = 4,NEW.QUANTIDADE,0), IIF(:TAMANHO = 5,NEW.QUANTIDADE,0), IIF(:TAMANHO = 6,NEW.QUANTIDADE,0), IIF(:TAMANHO = 7,NEW.QUANTIDADE,0), IIF(:TAMANHO = 8,NEW.QUANTIDADE,0), IIF(:TAMANHO = 9,NEW.QUANTIDADE,0), IIF(:TAMANHO =10,NEW.QUANTIDADE,0), IIF(:TAMANHO =11,NEW.QUANTIDADE,0), IIF(:TAMANHO =12,NEW.QUANTIDADE,0), IIF(:TAMANHO =13,NEW.QUANTIDADE,0), IIF(:TAMANHO =14,NEW.QUANTIDADE,0), IIF(:TAMANHO =15,NEW.QUANTIDADE,0), IIF(:TAMANHO =16,NEW.QUANTIDADE,0), IIF(:TAMANHO =17,NEW.QUANTIDADE,0), IIF(:TAMANHO =18,NEW.QUANTIDADE,0), IIF(:TAMANHO =19,NEW.QUANTIDADE,0), IIF(:TAMANHO =20,NEW.QUANTIDADE,0), :ESTOQUE_ID,:DOCUMENTO, NULL,NULL,NEW.OPERACAO_CODIGO, NULL,1,'0',0,NEW.USUARIO_ID, CURRENT_DATE,:TURNO_ID,:CCUSTO, 'REQUISICAO DE CONSUMO', '0',0,0,0,0); NEW.ESTOQUE_ID = :ESTOQUE_ID; END END END ^ ALTER TRIGGER TTBESTOQUE_SALDO_DIARIO_B0U_03 AS DECLARE VARIABLE vData VarChar(10); DECLARE VARIABLE SALDO1 Numeric(15,5); DECLARE VARIABLE SALDO2 Numeric(15,5); DECLARE VARIABLE SALDO3 Numeric(15,5); Begin For Select extract(day from OLD.DATA)||'/'||extract(month from OLD.DATA)||'/'||extract(year from OLD.DATA), OLD.SALDO-NEW.SALDO, OLD.SALDO_DETERCEIRO-NEW.SALDO_DETERCEIRO, OLD.SALDO_EMTERCEIRO-NEW.SALDO_EMTERCEIRO FROM RDB$DATABASE Into :vData,:SALDO1,:SALDO2,:SALDO3 Do begin if (NEW.SALDO < 0) then Exception "..." 'SALDO NÃO PODE FICAR NEGATIVO EM '||:vDATA||' QUANTIDADE DISPONÍVEL: '||OLD.SALDO||' QUANTIDADE A BAIXAR: '||:SALDO1||' PRODUTO: '||OLD.PRODUTO_CODIGO||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; if (NEW.SALDO_DETERCEIRO < 0) then Exception "..." 'SALDO DE TERCEIROS NÃO PODE FICAR NEGATIVO EM '||:vDATA||' QUANTIDADE DISPONÍVEL: '||OLD.SALDO_DETERCEIRO||' QUANTIDADE A BAIXAR: '||SALDO2||' PRODUTO: '||OLD.PRODUTO_CODIGO||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; if (NEW.SALDO_EMTERCEIRO < 0) then Exception "..." 'SALDO EM TERCEIROS NÃO PODE FICAR NEGATIVO EM '||:vDATA||' QUANTIDADE DISPONÍVEL: '||OLD.SALDO_EMTERCEIRO||' QUANTIDADE A BAIXAR: '||SALDO3||' PRODUTO: '||OLD.PRODUTO_CODIGO||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; end End ^ ALTER TRIGGER TTBESTOQUE_TRANS_ITEM_B0D_00 AS begin IF ( OLD.ESTOQUE_TRANSACAO_REGRA_ID > 0 AND OLD.TIPO = 'E' AND OLD.CONFERENCIA = 1 ) THEN BEGIN DELETE FROM TBESTOQUE_DETALHE_ALOCACAO D WHERE TIPO = 'E' AND TAB_ITEM_ID = OLD.CONTROLE; END end ^ ALTER TRIGGER TTBESTOQUE_TRANSACAO_ITEM_A0I AS DECLARE VARIABLE REGRAS BIGINT; DECLARE VARIABLE ID INTEGER; DECLARE VARIABLE TIPO INTEGER; DECLARE VARIABLE GP_ID INTEGER; DECLARE VARIABLE PERFIL_UP VARCHAR(40); DECLARE VARIABLE FAMILIA_ID INTEGER; DECLARE VARIABLE LOCALIZACAO_ID_SAIDA INTEGER; DECLARE VARIABLE LOCALIZACAO_ID_ENTRADA INTEGER; DECLARE VARIABLE CONFERENCIA INTEGER; DECLARE VARIABLE OPERACAO_ESTOQUE_SAIDA VARCHAR(40); DECLARE VARIABLE OPERACAO_ESTOQUE_ENTRADA VARCHAR(40); DECLARE VARIABLE ALOCACAO_TIPO VARCHAR(10); DECLARE VARIABLE ALOCACAO_TABELA_ID INTEGER; DECLARE VARIABLE ALOCACAO_TAB_ITEM_ID INTEGER; begin IF ( NEW.ESTOQUE_TRANSACAO_REGRA_ID > 0 AND NEW.CONFERENCIA = 1 ) THEN BEGIN ID = 0; SELECT ID, TIPO, GP_ID, PERFIL_UP, FAMILIA_ID, LOCALIZACAO_ID_SAIDA, LOCALIZACAO_ID_ENTRADA, CONFERENCIA, OPERACAO_ESTOQUE_SAIDA, OPERACAO_ESTOQUE_ENTRADA FROM TBESTOQUE_TRANSACAO_REGRA R WHERE R.ID = NEW.ESTOQUE_TRANSACAO_REGRA_ID INTO ID, TIPO, GP_ID, PERFIL_UP, FAMILIA_ID, LOCALIZACAO_ID_SAIDA, LOCALIZACAO_ID_ENTRADA, CONFERENCIA, OPERACAO_ESTOQUE_SAIDA, OPERACAO_ESTOQUE_ENTRADA ; IF ( ID = 0 ) THEN BEGIN EXCEPTION "..." 'REGRA DE TRANSACAO DE ESTOQUE NAO ENCONTRADA. ENTRE EM CONTATO COM SUPORTE TECNICO. RAMAL 27'; END if ( CONFERENCIA = '1' AND NEW.TIPO = 'E' ) then begin ALOCACAO_TIPO = ''; ALOCACAO_TABELA_ID = 0; ALOCACAO_TAB_ITEM_ID = 0; IF ( TIPO = 1 ) THEN BEGIN ALOCACAO_TIPO = 'E'; -- E = REGRAS DE 'E'STOQUE; ALOCACAO_TABELA_ID = NEW.DOCUMENTO; ALOCACAO_TAB_ITEM_ID = NEW.CONTROLE; END IF ( ALOCACAO_TIPO = '' OR ALOCACAO_TABELA_ID = 0 OR ALOCACAO_TAB_ITEM_ID = 0 ) THEN BEGIN exception "..." 'INFORMACOES DE ALOCACAO PARA CONFERENCIA DA TRANSACAO DE ESTOQUE NAO ENCONTRADA. ENTRE EM CONTATO COM O SUPORTE TECNICO, RAMAL 27'; END INSERT INTO TBESTOQUE_DETALHE_ALOCACAO ( ESTABELECIMENTO_ID, TABELA_ID, TAB_ITEM_ID, TIPO, LOCALIZACAO_ID, PRODUTO_ID, TAMANHO, QUANTIDADE, SALDO ) VALUES ( NEW.ESTABELECIMENTO_CODIGO, :ALOCACAO_TABELA_ID, :ALOCACAO_TAB_ITEM_ID, :ALOCACAO_TIPO, NEW.LOCALIZACAO_CODIGO, NEW.PRODUTO_CODIGO, IIF(NEW.T01 > 0,01, IIF(NEW.T02 > 0,02, IIF(NEW.T03 > 0,03, IIF(NEW.T04 > 0,04, IIF(NEW.T05 > 0,05, IIF(NEW.T06 > 0,06, IIF(NEW.T07 > 0,07, IIF(NEW.T08 > 0,08, IIF(NEW.T09 > 0,09, IIF(NEW.T10 > 0,10, IIF(NEW.T11 > 0,11, IIF(NEW.T12 > 0,12, IIF(NEW.T13 > 0,13, IIF(NEW.T14 > 0,14, IIF(NEW.T15 > 0,15, IIF(NEW.T16 > 0,16, IIF(NEW.T17 > 0,17, IIF(NEW.T18 > 0,18, IIF(NEW.T19 > 0,19, IIF(NEW.T20 > 0,20,0)))))))))))))))))))), NEW.QUANTIDADE, NEW.QUANTIDADE ); end END end ^ ALTER TRIGGER TTBESTOQUE_TRANSACAO_ITEM_B3U AS DECLARE VARIABLE REGRAS BIGINT; DECLARE VARIABLE ID INTEGER; DECLARE VARIABLE TIPO INTEGER; DECLARE VARIABLE GP_ID INTEGER; DECLARE VARIABLE PERFIL_UP VARCHAR(40); DECLARE VARIABLE FAMILIA_ID INTEGER; DECLARE VARIABLE LOCALIZACAO_ID_SAIDA INTEGER; DECLARE VARIABLE LOCALIZACAO_ID_ENTRADA INTEGER; DECLARE VARIABLE CONFERENCIA INTEGER; DECLARE VARIABLE OPERACAO_ESTOQUE_SAIDA VARCHAR(40); DECLARE VARIABLE OPERACAO_ESTOQUE_ENTRADA VARCHAR(40); DECLARE VARIABLE ALOCACAO_TIPO VARCHAR(10); DECLARE VARIABLE ALOCACAO_TABELA_ID INTEGER; DECLARE VARIABLE ALOCACAO_TAB_ITEM_ID INTEGER; BEGIN IF ( NEW.ESTOQUE_TRANSACAO_REGRA_ID > 0 AND NEW.TIPO = 'E' ) THEN BEGIN IF ( OLD.CONFERENCIA = 1 AND NEW.CONFERENCIA = 2 ) THEN BEGIN DELETE FROM TBESTOQUE_DETALHE_ALOCACAO D WHERE TIPO = 'E' AND TAB_ITEM_ID = NEW.CONTROLE; END IF ( OLD.CONFERENCIA = 2 AND NEW.CONFERENCIA = 1 ) THEN BEGIN ID = 0; SELECT ID, TIPO, GP_ID, PERFIL_UP, FAMILIA_ID, LOCALIZACAO_ID_SAIDA, LOCALIZACAO_ID_ENTRADA, CONFERENCIA, OPERACAO_ESTOQUE_SAIDA, OPERACAO_ESTOQUE_ENTRADA FROM TBESTOQUE_TRANSACAO_REGRA R WHERE R.ID = NEW.ESTOQUE_TRANSACAO_REGRA_ID INTO ID, TIPO, GP_ID, PERFIL_UP, FAMILIA_ID, LOCALIZACAO_ID_SAIDA, LOCALIZACAO_ID_ENTRADA, CONFERENCIA, OPERACAO_ESTOQUE_SAIDA, OPERACAO_ESTOQUE_ENTRADA ; IF ( ID = 0 ) THEN BEGIN EXCEPTION "..." 'REGRA DE TRANSACAO DE ESTOQUE NAO ENCONTRADA. ENTRE EM CONTATO COM SUPORTE TECNICO. RAMAL 27'; END if ( CONFERENCIA = '1' ) then begin ALOCACAO_TIPO = ''; ALOCACAO_TABELA_ID = 0; ALOCACAO_TAB_ITEM_ID = 0; IF ( TIPO = 1 ) THEN BEGIN ALOCACAO_TIPO = 'E'; -- E = REGRAS DE 'E'STOQUE; ALOCACAO_TABELA_ID = NEW.DOCUMENTO; ALOCACAO_TAB_ITEM_ID = NEW.CONTROLE; END IF ( ALOCACAO_TIPO = '' OR ALOCACAO_TABELA_ID = 0 OR ALOCACAO_TAB_ITEM_ID = 0 ) THEN BEGIN exception "..." 'INFORMACOES DE ALOCACAO PARA CONFERENCIA DA TRANSACAO DE ESTOQUE NAO ENCONTRADA. ENTRE EM CONTATO COM O SUPORTE TECNICO, RAMAL 27'; END INSERT INTO TBESTOQUE_DETALHE_ALOCACAO ( ESTABELECIMENTO_ID, TABELA_ID, TAB_ITEM_ID, TIPO, LOCALIZACAO_ID, PRODUTO_ID, TAMANHO, QUANTIDADE, SALDO ) VALUES ( NEW.ESTABELECIMENTO_CODIGO, :ALOCACAO_TABELA_ID, :ALOCACAO_TAB_ITEM_ID, :ALOCACAO_TIPO, NEW.LOCALIZACAO_CODIGO, NEW.PRODUTO_CODIGO, IIF(NEW.T01 > 0,01, IIF(NEW.T02 > 0,02, IIF(NEW.T03 > 0,03, IIF(NEW.T04 > 0,04, IIF(NEW.T05 > 0,05, IIF(NEW.T06 > 0,06, IIF(NEW.T07 > 0,07, IIF(NEW.T08 > 0,08, IIF(NEW.T09 > 0,09, IIF(NEW.T10 > 0,10, IIF(NEW.T11 > 0,11, IIF(NEW.T12 > 0,12, IIF(NEW.T13 > 0,13, IIF(NEW.T14 > 0,14, IIF(NEW.T15 > 0,15, IIF(NEW.T16 > 0,16, IIF(NEW.T17 > 0,17, IIF(NEW.T18 > 0,18, IIF(NEW.T19 > 0,19, IIF(NEW.T20 > 0,20,0)))))))))))))))))))), NEW.QUANTIDADE, NEW.QUANTIDADE ); END END END END ^ ALTER TRIGGER TTBFERRAMENTARIA_B2U AS DECLARE VARIABLE GP_ID BIGINT; DECLARE VARIABLE UP_ID BIGINT; DECLARE VARIABLE ESTACAO BIGINT; DECLARE VARIABLE OPERADOR_ID BIGINT; DECLARE VARIABLE FERRAMENTAS_ALOCADAS VARCHAR(3000); begin IF ( COALESCE(NEW.GP_ID ,0) <> COALESCE(OLD.GP_ID ,0) OR COALESCE(NEW.UP_ID ,0) <> COALESCE(OLD.UP_ID ,0) OR COALESCE(NEW.ESTACAO ,0) <> COALESCE(OLD.ESTACAO ,0) OR COALESCE(NEW.OPERADOR_ID,0) <> COALESCE(OLD.OPERADOR_ID,0) OR COALESCE(NEW.TALAO_ID,0) <> COALESCE(OLD.TALAO_ID,0)) THEN BEGIN /* VERIFICA OPERADOR */ OPERADOR_ID = COALESCE((SELECT FIRST 1 O.CODIGO FROM TBOPERADOR O WHERE O.CODIGO = NEW.OPERADOR_ID AND O.STATUS = '1'),0); IF ( NOT (OPERADOR_ID > 0) ) THEN BEGIN EXCEPTION "..." 'OPERACAO NAO PERMITIDA. OPERADOR DE PROCESSOS INVALIDO'; END IF ( NEW.SITUACAO = 'E' ) THEN BEGIN NEW.TALAO_ID = 0; END IF ( NOT(NEW.SITUACAO = 'E') AND NOT(NEW.TALAO_ID > 0) ) THEN BEGIN EXCEPTION "..." 'ACAO NAO PERMITIDA PARA A FERRAMENTA. TALAO INVALIDO'; END /* REGISTRA ACOES NA FERRAMENTARIA */ IF (COALESCE(NEW.GP_ID ,0) = 0 AND COALESCE(NEW.UP_ID ,0) = 0 AND COALESCE(NEW.ESTACAO,0) = 0 AND (NEW.SITUACAO = 'E' OR NEW.SITUACAO = 'R') )THEN BEGIN NEW.GP_ID = 0; NEW.UP_ID = 0; NEW.ESTACAO = 0; /* REGISTRA HISTORICO DE ENTRADA DA FERRAMENTA */ INSERT INTO TBFERRAMENTARIA_HISTORICO ( FERRAMENTA_TIPO, FERRAMENTA_ID, STATUS, OPERADOR_ID, GP_ID, UP_ID, ESTACAO, TALAO_ID ) VALUES ( 'M', NEW.ID, NEW.SITUACAO, NEW.OPERADOR_ID, NEW.GP_ID, NEW.UP_ID, NEW.ESTACAO, NEW.TALAO_ID ); END ELSE /* REGISTRA OUTRAS ACOES */ IF ( (COALESCE(NEW.GP_ID ,0) <> COALESCE(OLD.GP_ID ,0) OR COALESCE(NEW.UP_ID ,0) <> COALESCE(OLD.UP_ID ,0) OR COALESCE(NEW.ESTACAO ,0) <> COALESCE(OLD.ESTACAO ,0)) AND (NEW.GP_ID > 0 OR NEW.UP_ID > 0 OR NEW.ESTACAO > 0) AND NOT (NEW.SITUACAO = '') )THEN BEGIN /* VERIFICA O GRUPO DE PRODUCAO */ GP_ID = COALESCE((SELECT FIRST 1 G.ID FROM TBGP G WHERE G.ID = NEW.GP_ID AND G.STATUS = '1'),0); IF ( NOT (GP_ID > 0) ) THEN BEGIN EXCEPTION "..." 'ACAO DA FERRAMENTA NAO PERMITIDA. GRUPO DE PRODUCAO INVALIDO'; END /* VERIFICA A UNIDADE PRODUTIVA */ UP_ID = COALESCE((SELECT FIRST 1 U.ID FROM TBUP U WHERE U.ID = NEW.UP_ID AND U.STATUS = '1'),0); IF ( NOT (UP_ID > 0) ) THEN BEGIN EXCEPTION "..." 'ACAO DA FERRAMENTA NAO PERMITIDA. UNIDADE PRODUTIVA INVALIDA'; END /* VERIFICA A ESTACAO DE TRABALHO */ ESTACAO = COALESCE((SELECT FIRST 1 SU.ID FROM TBSUB_UP SU WHERE SU.UP_ID = :UP_ID AND SU.ID = NEW.ESTACAO AND SU.STATUS = '1'),0); IF ( NOT (ESTACAO > 0) ) THEN BEGIN EXCEPTION "..." 'ACAO DA FERRAMENTA NAO PERMITIDA. ESTACAO DE TRABALHO INVALIDA'; END FERRAMENTAS_ALOCADAS = COALESCE( (SELECT LIST(LPAD(F.SERIE,4,'0') || ' - ' || F.DESCRICAO,', ') FROM TBFERRAMENTARIA F WHERE F.GP_ID = :GP_ID AND F.UP_ID = :UP_ID AND F.ESTACAO = :ESTACAO ),''); IF ( FERRAMENTAS_ALOCADAS <> '' ) THEN BEGIN -- EXCEPTION "..." 'ACAO DA FERRAMENTA NAO PERMITIDA. A ESTACAO ESTA BLOQUEADA COM A SEGUINTE FERRAMENTA: ' || FERRAMENTAS_ALOCADAS; END /* REGISTRA HISTORICO DE SAIDA DA FERRAMENTA */ INSERT INTO TBFERRAMENTARIA_HISTORICO ( FERRAMENTA_TIPO, FERRAMENTA_ID, STATUS, OPERADOR_ID, GP_ID, UP_ID, ESTACAO, TALAO_ID ) VALUES ( 'M', NEW.ID, NEW.SITUACAO, NEW.OPERADOR_ID, NEW.GP_ID, NEW.UP_ID, NEW.ESTACAO, NEW.TALAO_ID ); END ELSE BEGIN EXCEPTION "..." 'OPERACAO DE INVALIDA PARA ESTA FERRAMENTA.'; END END end ^ ALTER TRIGGER TTBKANBAN_LOTE_DETALHE_B0D AS declare variable LOTE_STATUS VARCHAR(10); begin LOTE_STATUS = ( SELECT FIRST 1 STATUS FROM TBKANBAN_LOTE L WHERE L.ID = OLD.KANBAN_LOTE_ID); IF ( LOTE_STATUS = '1' ) THEN BEGIN EXCEPTION "..." 'EXCLUSAO NAO PERMITIDA. LOTE: ' || OLD.KANBAN_LOTE_ID || ' JA FINALIZADO'; END end ^ ALTER TRIGGER TTBMODELO_CONSUMO_B1IU_01 AS DECLARE VARIABLE MODELO_ID INTEGER; DECLARE VARIABLE PRODUTO_ID INTEGER; DECLARE VARIABLE TAM SMALLINT; DECLARE VARIABLE SETOR_ID INTEGER; DECLARE VARIABLE QUANTIDADE NUMERIC(15,8); DECLARE VARIABLE OBSERVACAO VARCHAR(100); DECLARE VARIABLE FATOR_CONVERSAO NUMERIC(15,8); DECLARE VARIABLE PERCENTUAL_CONSUMO INTEGER; DECLARE VARIABLE NIVEL INTEGER; DECLARE VARIABLE MODELO_DESTINO INTEGER; DECLARE VARIABLE PRODUTO_DESTINO INTEGER; DECLARE VARIABLE TAM_DESTINO INTEGER; Begin For SELECT B.MODELO_CODIGO, B.CONSUMO_PRODUTO_CODIGO, B.TAM, B.SETOR_CODIGO, IIF(NEW.TAM= 1,B.CONSUMO_QUANTIDADE_T01, IIF(NEW.TAM= 2,B.CONSUMO_QUANTIDADE_T02, IIF(NEW.TAM= 3,B.CONSUMO_QUANTIDADE_T03, IIF(NEW.TAM= 4,B.CONSUMO_QUANTIDADE_T04, IIF(NEW.TAM= 5,B.CONSUMO_QUANTIDADE_T05, IIF(NEW.TAM= 6,B.CONSUMO_QUANTIDADE_T06, IIF(NEW.TAM= 7,B.CONSUMO_QUANTIDADE_T07, IIF(NEW.TAM= 8,B.CONSUMO_QUANTIDADE_T08, IIF(NEW.TAM= 9,B.CONSUMO_QUANTIDADE_T09, IIF(NEW.TAM=10,B.CONSUMO_QUANTIDADE_T10, IIF(NEW.TAM=11,B.CONSUMO_QUANTIDADE_T11, IIF(NEW.TAM=12,B.CONSUMO_QUANTIDADE_T12, IIF(NEW.TAM=13,B.CONSUMO_QUANTIDADE_T13, IIF(NEW.TAM=14,B.CONSUMO_QUANTIDADE_T14, IIF(NEW.TAM=15,B.CONSUMO_QUANTIDADE_T15, IIF(NEW.TAM=16,B.CONSUMO_QUANTIDADE_T16, IIF(NEW.TAM=17,B.CONSUMO_QUANTIDADE_T17, IIF(NEW.TAM=18,B.CONSUMO_QUANTIDADE_T18, IIF(NEW.TAM=19,B.CONSUMO_QUANTIDADE_T19, IIF(NEW.TAM=20,B.CONSUMO_QUANTIDADE_T20, B.CONSUMO_QUANTIDADE)))))))))))))))))))), B.OBSERVACAO,B.FATOR_CONVERSAO,B.PERCENTUAL_CONSUMO, B.NIVEL,B.MODELO_DESTINO, B.PRODUTO_DESTINO, B.TAM_DESTINO --DESCOBRIR AS MATERIAS-PRIMAS DA MANTA (CACHARREL E ESPUMA) FROM TBMODELO_CONSUMO B, --DESCOBRIR O MODELO E COR DA MATERIA-PRIMA MANTA (Select First 1 P.Modelo_Codigo From TbProduto P Where P.Codigo = NEW.CONSUMO_PRODUTO_CODIGO) P WHERE B.MODELO_CODIGO = P.MODELO_CODIGO Into :MODELO_ID,:PRODUTO_ID,:TAM,:SETOR_ID, :QUANTIDADE,:OBSERVACAO,:FATOR_CONVERSAO, :PERCENTUAL_CONSUMO, :NIVEL, :MODELO_DESTINO, :PRODUTO_DESTINO, :TAM_DESTINO Do Begin if (:PRODUTO_ID > 0 AND NEW.FLAG = '1') then BEGIN update or insert into TBMODELO_CONSUMO (MODELO_CODIGO, CONSUMO_PRODUTO_CODIGO, TAM, SETOR_CODIGO, CONSUMO_QUANTIDADE_T01, CONSUMO_QUANTIDADE_T02, CONSUMO_QUANTIDADE_T03, CONSUMO_QUANTIDADE_T04, CONSUMO_QUANTIDADE_T05, CONSUMO_QUANTIDADE_T06, CONSUMO_QUANTIDADE_T07, CONSUMO_QUANTIDADE_T08, CONSUMO_QUANTIDADE_T09, CONSUMO_QUANTIDADE_T10, CONSUMO_QUANTIDADE_T11, CONSUMO_QUANTIDADE_T12, CONSUMO_QUANTIDADE_T13, CONSUMO_QUANTIDADE_T14, CONSUMO_QUANTIDADE_T15, CONSUMO_QUANTIDADE_T16, CONSUMO_QUANTIDADE_T17, CONSUMO_QUANTIDADE_T18, CONSUMO_QUANTIDADE_T19, CONSUMO_QUANTIDADE_T20, CONSUMO_QUANTIDADE, OBSERVACAO, FATOR_CONVERSAO, VALOR_BASE, VB01,VB02,VB03,VB04,VB05,VB06,VB07,VB08,VB09,VB10, VB11,VB12,VB13,VB14,VB15,VB16,VB17,VB18,VB19,VB20, PERCENTUAL_CONSUMO, NIVEL, MODELO_ORIGEM, PRODUTO_ORIGEM,TAM_ORIGEM, MODELO_DESTINO,PRODUTO_DESTINO,TAM_DESTINO, FLAG) values (NEW.MODELO_CODIGO, :PRODUTO_ID, :TAM, :SETOR_ID, Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T01/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T02/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T03/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T04/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T05/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T06/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T07/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T08/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T09/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T10/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T11/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T12/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T13/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T14/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T15/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T16/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T17/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T18/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T19/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T20/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), :OBSERVACAO, :FATOR_CONVERSAO, Cast((NEW.CONSUMO_QUANTIDADE/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T01/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T02/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T03/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T04/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T05/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T06/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T07/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T08/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T09/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T10/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T11/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T12/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T13/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T14/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T15/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T16/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T17/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T18/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T19/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.CONSUMO_QUANTIDADE_T20/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , :PERCENTUAL_CONSUMO, :NIVEL+1, :MODELO_ID, NEW.CONSUMO_PRODUTO_CODIGO, NEW.TAM, IIF(:MODELO_DESTINO>0,:MODELO_DESTINO,:MODELO_ID), IIF(:PRODUTO_DESTINO>0,:PRODUTO_DESTINO,NEW.CONSUMO_PRODUTO_CODIGO), IIF(:PRODUTO_DESTINO>0,:TAM_DESTINO,NEW.TAM), '0' ) Matching (MODELO_CODIGO, CONSUMO_PRODUTO_CODIGO, TAM, SETOR_CODIGO, MODELO_ORIGEM, PRODUTO_ORIGEM, TAM_ORIGEM, MODELO_DESTINO, PRODUTO_DESTINO, TAM_DESTINO); END end End ^ ALTER TRIGGER TTBMODELO_CONSUMO_B2IU_01 AS DECLARE VARIABLE MODELO_ID INTEGER; DECLARE VARIABLE COR_ID INTEGER; DECLARE VARIABLE PRODUTO_ID INTEGER; DECLARE VARIABLE TAM SMALLINT; DECLARE VARIABLE SETOR_ID INTEGER; DECLARE VARIABLE QUANTIDADE NUMERIC(15,8); DECLARE VARIABLE OBSERVACAO VARCHAR(100); DECLARE VARIABLE FATOR_CONVERSAO NUMERIC(15,8); DECLARE VARIABLE PERCENTUAL_CONSUMO INTEGER; DECLARE VARIABLE NIVEL INTEGER; DECLARE VARIABLE MODELO_DESTINO INTEGER; DECLARE VARIABLE PRODUTO_DESTINO INTEGER; DECLARE VARIABLE TAM_DESTINO INTEGER; Begin For SELECT B.MODELO_ID, B.COR_ID, B.PRODUTO_ID, B.TAM, B.SETOR_ID, IIF(NEW.TAM= 1,B.T01, IIF(NEW.TAM= 2,B.T02, IIF(NEW.TAM= 3,B.T03, IIF(NEW.TAM= 4,B.T04, IIF(NEW.TAM= 5,B.T05, IIF(NEW.TAM= 6,B.T06, IIF(NEW.TAM= 7,B.T07, IIF(NEW.TAM= 8,B.T08, IIF(NEW.TAM= 9,B.T09, IIF(NEW.TAM=10,B.T10, IIF(NEW.TAM=11,B.T11, IIF(NEW.TAM=12,B.T12, IIF(NEW.TAM=13,B.T13, IIF(NEW.TAM=14,B.T14, IIF(NEW.TAM=15,B.T15, IIF(NEW.TAM=16,B.T16, IIF(NEW.TAM=17,B.T17, IIF(NEW.TAM=18,B.T18, IIF(NEW.TAM=19,B.T19, IIF(NEW.TAM=20,B.T20, B.QUANTIDADE)))))))))))))))))))), B.OBSERVACAO, B.FATOR_CONVERSAO, B.PERCENTUAL_CONSUMO, B.NIVEL, B.MODELO_DESTINO, B.PRODUTO_DESTINO, B.TAM_DESTINO --DESCOBRIR AS MATERIEAS-PRIMAS DA MANTA (CACHARREL E ESPUMA) FROM TBMODELO_CONSUMO_COR B, --DESCOBRIR O MODELO E COR DA MATERIA-PRIMA MANTA (Select First 1 P.Modelo_Codigo, P.Cor_Codigo From TbProduto P Where P.Codigo = NEW.CONSUMO_PRODUTO_CODIGO) P WHERE B.MODELO_ID = P.MODELO_CODIGO AND B.COR_ID = P.COR_CODIGO Into :MODELO_ID,:COR_ID,:PRODUTO_ID,:TAM,:SETOR_ID, :QUANTIDADE,:OBSERVACAO,:FATOR_CONVERSAO, :PERCENTUAL_CONSUMO, :NIVEL, :MODELO_DESTINO, :PRODUTO_DESTINO, :TAM_DESTINO Do begin If(:PRODUTO_ID > 0 AND NEW.FLAG = '1') then BEGIN Update or Insert into TBMODELO_CONSUMO (MODELO_CODIGO, CONSUMO_PRODUTO_CODIGO, TAM, SETOR_CODIGO, CONSUMO_QUANTIDADE_T01, CONSUMO_QUANTIDADE_T02, CONSUMO_QUANTIDADE_T03, CONSUMO_QUANTIDADE_T04, CONSUMO_QUANTIDADE_T05, CONSUMO_QUANTIDADE_T06, CONSUMO_QUANTIDADE_T07, CONSUMO_QUANTIDADE_T08, CONSUMO_QUANTIDADE_T09, CONSUMO_QUANTIDADE_T10, CONSUMO_QUANTIDADE_T11, CONSUMO_QUANTIDADE_T12, CONSUMO_QUANTIDADE_T13, CONSUMO_QUANTIDADE_T14, CONSUMO_QUANTIDADE_T15, CONSUMO_QUANTIDADE_T16, CONSUMO_QUANTIDADE_T17, CONSUMO_QUANTIDADE_T18, CONSUMO_QUANTIDADE_T19, CONSUMO_QUANTIDADE_T20, CONSUMO_QUANTIDADE, OBSERVACAO, FATOR_CONVERSAO, VALOR_BASE, VB01,VB02,VB03,VB04,VB05,VB06,VB07,VB08,VB09,VB10, VB11,VB12,VB13,VB14,VB15,VB16,VB17,VB18,VB19,VB20, PERCENTUAL_CONSUMO, NIVEL, MODELO_ORIGEM, PRODUTO_ORIGEM, TAM_ORIGEM, MODELO_DESTINO, PRODUTO_DESTINO, TAM_DESTINO, FLAG) Values (NEW.MODELO_CODIGO, :PRODUTO_ID, :TAM, :SETOR_ID, Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T01/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T02/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T03/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T04/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T05/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T06/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T07/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T08/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T09/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T10/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T11/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T12/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T13/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T14/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T15/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T16/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T17/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T18/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T19/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE_T20/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.CONSUMO_QUANTIDADE/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), :OBSERVACAO, :FATOR_CONVERSAO, Cast((NEW.CONSUMO_QUANTIDADE/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T01/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T02/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T03/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T04/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T05/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T06/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T07/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T08/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T09/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T10/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T11/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T12/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T13/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T14/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T15/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T16/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T17/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T18/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T19/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.CONSUMO_QUANTIDADE_T20/NEW.FATOR_CONVERSAO) as Numeric(15,8)), :PERCENTUAL_CONSUMO, :NIVEL+1, :MODELO_ID, NEW.CONSUMO_PRODUTO_CODIGO, NEW.TAM, IIF(:MODELO_DESTINO>0,:MODELO_DESTINO,:MODELO_ID), IIF(:PRODUTO_DESTINO>0,:PRODUTO_DESTINO,NEW.CONSUMO_PRODUTO_CODIGO), IIF(:PRODUTO_DESTINO>0,:TAM_DESTINO,NEW.TAM), '0' ) Matching (MODELO_CODIGO, CONSUMO_PRODUTO_CODIGO, TAM, SETOR_CODIGO, MODELO_ORIGEM, PRODUTO_ORIGEM, TAM_ORIGEM, MODELO_DESTINO, PRODUTO_DESTINO, TAM_DESTINO); END end End ^ ALTER TRIGGER TTBMODELO_CONSUMO_COR_B1IU_01 AS DECLARE VARIABLE MODELO_ID INTEGER; DECLARE VARIABLE COR_ID INTEGER; DECLARE VARIABLE PRODUTO_ID INTEGER; DECLARE VARIABLE TAM SMALLINT; DECLARE VARIABLE SETOR_ID INTEGER; DECLARE VARIABLE QUANTIDADE NUMERIC(15,8); DECLARE VARIABLE OBSERVACAO VARCHAR(100); DECLARE VARIABLE FATOR_CONVERSAO NUMERIC(15,8); DECLARE VARIABLE PERCENTUAL_CONSUMO INTEGER; DECLARE VARIABLE NIVEL INTEGER; DECLARE VARIABLE MODELO_DESTINO INTEGER; DECLARE VARIABLE PRODUTO_DESTINO INTEGER; DECLARE VARIABLE TAM_DESTINO INTEGER; Begin For SELECT B.MODELO_ID, B.COR_ID, B.PRODUTO_ID, B.TAM, B.SETOR_ID, IIF(NEW.TAM= 1,B.T01, IIF(NEW.TAM= 2,B.T02, IIF(NEW.TAM= 3,B.T03, IIF(NEW.TAM= 4,B.T04, IIF(NEW.TAM= 5,B.T05, IIF(NEW.TAM= 6,B.T06, IIF(NEW.TAM= 7,B.T07, IIF(NEW.TAM= 8,B.T08, IIF(NEW.TAM= 9,B.T09, IIF(NEW.TAM=10,B.T10, IIF(NEW.TAM=11,B.T11, IIF(NEW.TAM=12,B.T12, IIF(NEW.TAM=13,B.T13, IIF(NEW.TAM=14,B.T14, IIF(NEW.TAM=15,B.T15, IIF(NEW.TAM=16,B.T16, IIF(NEW.TAM=17,B.T17, IIF(NEW.TAM=18,B.T18, IIF(NEW.TAM=19,B.T19, IIF(NEW.TAM=20,B.T20, B.QUANTIDADE)))))))))))))))))))), B.OBSERVACAO, B.FATOR_CONVERSAO, B.PERCENTUAL_CONSUMO, B.NIVEL, B.MODELO_DESTINO, B.PRODUTO_DESTINO, B.TAM_DESTINO --DESCOBRIR AS MATERIEAS-PRIMAS DA MANTA (CACHARREL E ESPUMA) FROM TBMODELO_CONSUMO_COR B, --DESCOBRIR O MODELO E COR DA MATERIA-PRIMA MANTA (Select First 1 P.Modelo_Codigo, P.Cor_Codigo From TbProduto P Where P.Codigo = NEW.PRODUTO_ID) P WHERE B.MODELO_ID = P.MODELO_CODIGO AND B.COR_ID = P.COR_CODIGO Into :MODELO_ID,:COR_ID,:PRODUTO_ID,:TAM,:SETOR_ID, :QUANTIDADE,:OBSERVACAO,:FATOR_CONVERSAO, :PERCENTUAL_CONSUMO, :NIVEL, :MODELO_DESTINO, :PRODUTO_DESTINO, :TAM_DESTINO Do begin if (:PRODUTO_ID > 0 AND NEW.FLAG = '1') then BEGIN update or insert into TBMODELO_CONSUMO_COR (MODELO_ID, COR_ID, PRODUTO_ID, TAM, SETOR_ID, T01, T02, T03, T04, T05, T06, T07, T08, T09, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, QUANTIDADE, OBSERVACAO, FATOR_CONVERSAO, VALOR_BASE, VB01,VB02,VB03,VB04,VB05,VB06,VB07,VB08,VB09,VB10, VB11,VB12,VB13,VB14,VB15,VB16,VB17,VB18,VB19,VB20, PERCENTUAL_CONSUMO, NIVEL, MODELO_ORIGEM, PRODUTO_ORIGEM, TAM_ORIGEM, MODELO_DESTINO, PRODUTO_DESTINO, TAM_DESTINO, FLAG) Values (NEW.MODELO_ID, NEW.COR_ID, :PRODUTO_ID, :TAM, :SETOR_ID, Cast(:QUANTIDADE*Cast((NEW.T01/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T02/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T03/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T04/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T05/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T06/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T07/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T08/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T09/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T10/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T11/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T12/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T13/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T14/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T15/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T16/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T17/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T18/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T19/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T20/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.QUANTIDADE/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), :OBSERVACAO, :FATOR_CONVERSAO, Cast((NEW.QUANTIDADE/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T01/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T02/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T03/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T04/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T05/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T06/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T07/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T08/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T09/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T10/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T11/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T12/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T13/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T14/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T15/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T16/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T17/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T18/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T19/NEW.FATOR_CONVERSAO) as Numeric(15,8)), Cast((NEW.T20/NEW.FATOR_CONVERSAO) as Numeric(15,8)), :PERCENTUAL_CONSUMO, :NIVEL+1, :MODELO_ID, NEW.PRODUTO_ID, NEW.TAM, IIF(:MODELO_DESTINO>0,:MODELO_DESTINO,:MODELO_ID), IIF(:PRODUTO_DESTINO>0,:PRODUTO_DESTINO,NEW.PRODUTO_ID), IIF(:PRODUTO_DESTINO>0,:TAM_DESTINO,NEW.TAM), '0') Matching (MODELO_ID, COR_ID, PRODUTO_ID, TAM, SETOR_ID, MODELO_ORIGEM, PRODUTO_ORIGEM, TAM_ORIGEM, MODELO_DESTINO, PRODUTO_DESTINO, TAM_DESTINO); END end End ^ ALTER TRIGGER TTBMODELO_CONSUMO_COR_B2IU_01 AS DECLARE VARIABLE MODELO_ID INTEGER; DECLARE VARIABLE PRODUTO_ID INTEGER; DECLARE VARIABLE TAM SMALLINT; DECLARE VARIABLE SETOR_ID INTEGER; DECLARE VARIABLE QUANTIDADE NUMERIC(15,8); DECLARE VARIABLE OBSERVACAO VARCHAR(100); DECLARE VARIABLE FATOR_CONVERSAO NUMERIC(15,8); DECLARE VARIABLE PERCENTUAL_CONSUMO INTEGER; DECLARE VARIABLE NIVEL INTEGER; DECLARE VARIABLE MODELO_DESTINO INTEGER; DECLARE VARIABLE PRODUTO_DESTINO INTEGER; DECLARE VARIABLE TAM_DESTINO INTEGER; Begin For SELECT B.MODELO_CODIGO, B.CONSUMO_PRODUTO_CODIGO, B.TAM, B.SETOR_CODIGO, IIF(NEW.TAM= 1,B.CONSUMO_QUANTIDADE_T01, IIF(NEW.TAM= 2,B.CONSUMO_QUANTIDADE_T02, IIF(NEW.TAM= 3,B.CONSUMO_QUANTIDADE_T03, IIF(NEW.TAM= 4,B.CONSUMO_QUANTIDADE_T04, IIF(NEW.TAM= 5,B.CONSUMO_QUANTIDADE_T05, IIF(NEW.TAM= 6,B.CONSUMO_QUANTIDADE_T06, IIF(NEW.TAM= 7,B.CONSUMO_QUANTIDADE_T07, IIF(NEW.TAM= 8,B.CONSUMO_QUANTIDADE_T08, IIF(NEW.TAM= 9,B.CONSUMO_QUANTIDADE_T09, IIF(NEW.TAM=10,B.CONSUMO_QUANTIDADE_T10, IIF(NEW.TAM=11,B.CONSUMO_QUANTIDADE_T11, IIF(NEW.TAM=12,B.CONSUMO_QUANTIDADE_T12, IIF(NEW.TAM=13,B.CONSUMO_QUANTIDADE_T13, IIF(NEW.TAM=14,B.CONSUMO_QUANTIDADE_T14, IIF(NEW.TAM=15,B.CONSUMO_QUANTIDADE_T15, IIF(NEW.TAM=16,B.CONSUMO_QUANTIDADE_T16, IIF(NEW.TAM=17,B.CONSUMO_QUANTIDADE_T17, IIF(NEW.TAM=18,B.CONSUMO_QUANTIDADE_T18, IIF(NEW.TAM=19,B.CONSUMO_QUANTIDADE_T19, IIF(NEW.TAM=20,B.CONSUMO_QUANTIDADE_T20, B.CONSUMO_QUANTIDADE)))))))))))))))))))), B.OBSERVACAO,B.FATOR_CONVERSAO,B.PERCENTUAL_CONSUMO, B.NIVEL,B.MODELO_DESTINO, B.PRODUTO_DESTINO, B.TAM_DESTINO --DESCOBRIR AS MATERIEAS-PRIMAS DA MANTA (CACHARREL E ESPUMA) FROM TBMODELO_CONSUMO B, --DESCOBRIR O MODELO E COR DA MATERIA-PRIMA MANTA (Select First 1 P.Modelo_Codigo From TbProduto P Where P.Codigo = NEW.PRODUTO_ID) P WHERE B.MODELO_CODIGO = P.MODELO_CODIGO Into :MODELO_ID,:PRODUTO_ID,:TAM,:SETOR_ID, :QUANTIDADE,:OBSERVACAO,:FATOR_CONVERSAO, :PERCENTUAL_CONSUMO,:NIVEL, :MODELO_DESTINO, :PRODUTO_DESTINO, :TAM_DESTINO Do begin if (:PRODUTO_ID > 0 AND NEW.FLAG = '1') then BEGIN update or insert into TBMODELO_CONSUMO_COR (MODELO_ID, COR_ID, PRODUTO_ID, TAM, SETOR_ID, T01, T02, T03, T04, T05, T06, T07, T08, T09, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, QUANTIDADE, OBSERVACAO, FATOR_CONVERSAO, VALOR_BASE, VB01,VB02,VB03,VB04,VB05,VB06,VB07,VB08,VB09,VB10, VB11,VB12,VB13,VB14,VB15,VB16,VB17,VB18,VB19,VB20, PERCENTUAL_CONSUMO, NIVEL, MODELO_ORIGEM, PRODUTO_ORIGEM, TAM_ORIGEM, MODELO_DESTINO, PRODUTO_DESTINO, TAM_DESTINO, FLAG) values (NEW.MODELO_ID, NEW.COR_ID, :PRODUTO_ID, :TAM, :SETOR_ID, Cast(:QUANTIDADE*Cast((NEW.T01/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T02/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T03/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T04/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T05/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T06/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T07/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T08/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T09/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T10/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T11/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T12/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T13/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T14/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T15/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T16/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T17/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T18/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T19/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.T20/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), Cast(:QUANTIDADE*Cast((NEW.QUANTIDADE/NEW.FATOR_CONVERSAO) as Numeric(15,8)) as Numeric(15,8)), :OBSERVACAO, :FATOR_CONVERSAO, Cast((NEW.QUANTIDADE/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T01/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T02/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T03/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T04/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T05/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T06/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T07/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T08/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T09/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T10/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T11/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T12/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T13/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T14/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T15/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T16/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T17/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T18/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T19/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , Cast((NEW.T20/NEW.FATOR_CONVERSAO) as Numeric(15,8)) , :PERCENTUAL_CONSUMO, :NIVEL+1, :MODELO_ID, NEW.PRODUTO_ID, NEW.TAM, IIF(:MODELO_DESTINO>0,:MODELO_DESTINO,:MODELO_ID), IIF(:PRODUTO_DESTINO>0,:PRODUTO_DESTINO,NEW.PRODUTO_ID), IIF(:PRODUTO_DESTINO>0,:TAM_DESTINO,NEW.TAM), '0') Matching (MODELO_ID, COR_ID, PRODUTO_ID, TAM, SETOR_ID, MODELO_ORIGEM, PRODUTO_ORIGEM, TAM_ORIGEM, MODELO_DESTINO, PRODUTO_DESTINO, TAM_DESTINO); END end End ^ ALTER TRIGGER TTBMODELO_LINHA_999 BEFORE INSERT AS begin INSERT INTO TBREPLICA_TABELA (TABELA, LINHA_ID) VALUES ('TBMODELO_FICHA_TECNICA', NEW.CODIGO); end ^ ALTER TRIGGER TTBPEDIDO_ITEM_PROC_B0U_02 AS DECLARE VARIABLE UM_ALTERNATIVA CHAR(1); DECLARE VARIABLE DADOS_APROVEITAMENTO VARCHAR(40); DECLARE VARIABLE QUANTIDADE_APROVEIT NUMERIC(15,4); DECLARE VARIABLE QUANTIDADE_APROVEIT_ALTERN NUMERIC(15,4); DECLARE VARIABLE QUANTIDADE_PRODUCAO NUMERIC(15,4); DECLARE VARIABLE QUANTIDADE_PRODUCAO_ALTERN NUMERIC(15,4); DECLARE VARIABLE TALAO_PRODUTO_DESCRICAO VARCHAR(100); Declare variable WEB Char(1); Begin WEB = Coalesce((Select First 1 R.WEB From TbRemessa R Where R.Numero = New.Remessa),'0'); IF (COALESCE(WEB,'0') = '1' ) THEN Begin /* ESTA TRIGGER SO SERA PROCESSADA NAS NOVAS REMESSAS (GCWEB) */ IF ( COALESCE(OLD.FAMILIA_CODIGO,0) = 0 ) THEN BEGIN /* 2 - EM PRODUCAO ; 3 - PRODUZIDO */ IF ( OLD.SITUACAO = 2 AND NEW.SITUACAO = 3 AND NEW.situacao <> 6) THEN BEGIN TALAO_PRODUTO_DESCRICAO = ''; SELECT P.DESCRICAO FROM TBPRODUTO P WHERE P.CODIGO = NEW.PRODUTO_CODIGO INTO TALAO_PRODUTO_DESCRICAO ; UM_ALTERNATIVA = (SELECT FIRST 1 IIF((TRIM(F.UNIDADEMEDIDA_ALTERNATIVO)='') OR F.UNIDADEMEDIDA_ALTERNATIVO IS NULL,'0','1') FROM TBFAMILIA F WHERE F.CODIGO = (SELECT FIRST 1 FAMILIA_CODIGO FROM TBPRODUTO P WHERE P.CODIGO = OLD.PRODUTO_CODIGO)); /* Guarda os valores do aproveitamento */ DADOS_APROVEITAMENTO = (SELECT FIRST 1 LPAD(COALESCE(V.QUANTIDADE,0),20) || LPAD(COALESCE(V.QUANTIDADE_ALTERNATIVA,0),20) FROM RDB$DATABASE LEFT JOIN TBREMESSA_TALAO_VINCULO V ON V.REMESSA_TALAO_DETALHE_ID = NEW.CONTROLE AND V.STATUS = '0'); QUANTIDADE_APROVEIT = CAST(SUBSTRING(DADOS_APROVEITAMENTO FROM 1 FOR 20) AS NUMERIC(15,4)); QUANTIDADE_APROVEIT_ALTERN = CAST(SUBSTRING(DADOS_APROVEITAMENTO FROM 21 FOR 20) AS NUMERIC(15,4)); /* Guarda os valores produzidos */ QUANTIDADE_PRODUCAO = OLD.QUANTIDADE_PRODUCAO_TMP + QUANTIDADE_APROVEIT; QUANTIDADE_PRODUCAO_ALTERN = OLD.QUANTIDADE_ALTERN_PRODUCAO_TMP + QUANTIDADE_APROVEIT_ALTERN; /* Zera as quantidades temporarias */ -- NEW.QUANTIDADE_PRODUCAO_TMP = 0; -- NEW.QUANTIDADE_ALTERN_PRODUCAO_TMP = 0; /* VERIFICA SE A FAMILIA DO PRODUTO TEM UNIDADE DE MEDIDA ALTERNATIVA CONFIGURADA */ IF (UM_ALTERNATIVA = '1') THEN BEGIN /* VERIFICA SE QUANTIDADE ALTERNATIVA TEMPORARIA PRODUZIDA ESTA MAIOR QUE ZERO */ IF ( NOT ( QUANTIDADE_PRODUCAO_ALTERN > 0 ) ) THEN BEGIN EXCEPTION "..." 'FAMILIA DO PRODUTO ' || TALAO_PRODUTO_DESCRICAO || ' CONFIGURADA COM UNIDADE DE MEDIDA ALTERNATIVA. QUANTIDADE ALTERNATIVA DEVERA SER MAIOR QUE ZERO. OPERACAO CANCELADA! '; END END /* VERIFICA SE QUANTIDADE PRODUZIDA TEMPORARIA ETA MAIOR QUE ZERO */ IF ( NOT (QUANTIDADE_PRODUCAO > 0) ) THEN BEGIN EXCEPTION "..." 'QUANTIDADE PRODUZIDA DEVERA SER MAIOR QUE ZERO NO PRODUTO ' || TALAO_PRODUTO_DESCRICAO || '. OPERACAO CANCELADA!'; END /* Grava os valores produzidos*/ NEW.QUANTIDADE_PRODUCAO = QUANTIDADE_PRODUCAO; NEW.QUANTIDADE_SALDO = QUANTIDADE_PRODUCAO; NEW.QUANTIDADE_ALTERN_PRODUCAO = QUANTIDADE_PRODUCAO_ALTERN; NEW.QUANTIDADE_ALTERN_SALDO = QUANTIDADE_PRODUCAO_ALTERN; /* Grava data e hora de producao */ NEW.DATA_PRODUCAO = CURRENT_DATE; NEW.HORA_PRODUCAO = CURRENT_TIME; /* GERA SOBRA DE PRODUÇÃO*/ IF ( OLD.quantidade_sobra_tmp > 0) THEN BEGIN UPDATE OR INSERT INTO TBREVISAO ( ESTABELECIMENTO_ID, PRODUTO_ID, TAMANHO, DATA_REVISAO, OPERADOR_ID, DATAHORA_COLETA, PESO_LIQUIDO, SALDO, METRAGEM, TALAO_ID, NFE_ID, OB ) VALUES( OLD.ESTABELECIMENTO_CODIGO, OLD.PRODUTO_CODIGO, OLD.TAMANHO, CURRENT_DATE, OLD.OPERADOR, CURRENT_TIMESTAMP, OLD.QUANTIDADE_SOBRA_TMP, OLD.QUANTIDADE_SOBRA_TMP, OLD.QUANTIDADE_SOBRA_TMP, OLD.CONTROLE , 0, 0 ) MATCHING (TALAO_ID); END NEW.quantidade_sobra = OLD.QUANTIDADE_SOBRA_TMP; /* ATUALIZA O STATUS PARA UTILIZADO DO APROVEITAMENTO */ UPDATE TBREMESSA_TALAO_VINCULO V SET V.STATUS = '1' WHERE V.REMESSA_TALAO_DETALHE_ID = NEW.CONTROLE; END END END END ^ ALTER TRIGGER TTBPEDIDO_ITEM_PROC_B0U_03 AS DECLARE VARIABLE REMESSA_COMPONENTE CHAR(1) ; DECLARE VARIABLE LOCALIZACAO_ID INTEGER ; DECLARE VARIABLE ESTOQUE_ID INTEGER ; DECLARE VARIABLE alternativa INTEGER ; DECLARE VARIABLE OPERACAO_ENTRADA VARCHAR(10) ; DECLARE VARIABLE CCUSTO VARCHAR(10); DECLARE VARIABLE RETORNO_SP VARCHAR(500); Declare variable WEB Char(1); Begin WEB = Coalesce((Select First 1 R.WEB From TbRemessa R Where R.Numero = New.Remessa),'0'); IF (COALESCE(WEB,'0') = '1' ) THEN Begin /* ESTA TRIGGER SO SERA PROCESSADA NAS NOVAS REMESSAS (GCWEB) */ IF ( COALESCE(OLD.FAMILIA_CODIGO,0) = 0 ) THEN BEGIN /* 3 - PRODUZIDO */ IF ( OLD.SITUACAO = 2 AND NEW.SITUACAO = 3 ) THEN BEGIN NEW.DATA_PRODUCAO = (SELECT FIRST 1 T.DATA_PRODUCAO FROM TBTURNO T WHERE T.TURNO_CORRENTE = '1'); IF ( NOT (NEW.QUANTIDADE_PRODUCAO > 0) ) THEN BEGIN EXCEPTION "..." 'HA ITENS COM QUANTIDADE PRODUZIDA IGUAL A ZERO . OPERACAO CANCELADA! '|| ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; END /* Guarda o tipo da remessa ( '1' = Componente ) */ REMESSA_COMPONENTE = (SELECT FIRST 1 COMPONENTE FROM VWREMESSA WHERE REMESSA_ID = NEW.REMESSA); /* VERIFICA SE A REMESSA EH DE COMPONENTE */ IF ( :REMESSA_COMPONENTE = '1' ) THEN BEGIN /* GUARDA A LOCALIZACAO DE PROCESSO (WIP) */ LOCALIZACAO_ID = COALESCE((SELECT FIRST 1 F.LOCALIZACAO_PROCESSO FROM TBPRODUTO P, TBFAMILIA_FICHA F WHERE F.FAMILIA_CODIGO = P.FAMILIA_CODIGO AND F.ESTABELECIMENTO_CODIGO = NEW.ESTABELECIMENTO_CODIGO AND P.CODIGO = NEW.PRODUTO_CODIGO),0); /* VERIFICA SE A LOCALIZACAO DE PROCESSO ESTA CONFIGURADA */ IF ( LOCALIZACAO_ID = 0 ) THEN BEGIN EXCEPTION "..." 'FAMILIA DO PRODUTO SEM LOCALIZACAO DE PROCESSO (WIP) DEFINIDA. ID PRODUTO: ' || NEW.PRODUTO_CODIGO || '. OPERACAO CANCELADA! '|| ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; END /* SIGLA DA OPERACAO DE ENTRADA NO ESTOQUE WORK IN PROCESS ENTRADA */ OPERACAO_ENTRADA = 'WPE'; END ELSE BEGIN /* GUARDA A LOCALIZACAO PADRAO */ LOCALIZACAO_ID = COALESCE((SELECT FIRST 1 P.LOCALIZACAO_CODIGO FROM TBPRODUTO P WHERE P.CODIGO = NEW.PRODUTO_CODIGO),0); /* VERIFICA SE A LOCALIZACAO PADRAO ESTA CONFIGURADA */ IF ( LOCALIZACAO_ID = 0 ) THEN BEGIN EXCEPTION "..." 'PRODUTO SEM LOCALIZACAO PADRAO DEFINIDA. CÓD. PRODUTO: ' || NEW.PRODUTO_CODIGO || '. OPERACAO CANCELADA! '|| ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; END /* SIGLA DA OPERACAO DE ENTRADA NO ESTOQUE PADRAO */ OPERACAO_ENTRADA = (SELECT FIRST 1 VALOR_EXT FROM TBCONTROLE_N WHERE ID = 30); END --Entrada no Estoque ESTOQUE_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0); NEW.ESTOQUE_ID = :ESTOQUE_ID; CCUSTO = (SELECT FIRST 1 U.CCUSTO FROM TBUP U WHERE U.ID = (SELECT FIRST 1 T.UP_ID FROM VWREMESSA_TALAO T WHERE T.REMESSA_ID = NEW.REMESSA AND T.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE)); NEW.QUANTIDADE_PRODUCAO = CAST(NEW.QUANTIDADE_PRODUCAO AS NUMERIC(15,4)); NEW.LOCALIZACAO_CODIGO = :LOCALIZACAO_ID; EXECUTE PROCEDURE SPU_ESTOQUE_SALDO4 ( NEW.ESTABELECIMENTO_CODIGO, :LOCALIZACAO_ID, NEW.PRODUTO_CODIGO, 'E', /* E = ENTRADA NO ESTOQUE */ NEW.DATA_PRODUCAO, NEW.QUANTIDADE_PRODUCAO, IIF(NEW.TAMANHO = 1,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO = 2,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO = 3,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO = 4,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO = 5,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO = 6,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO = 7,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO = 8,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO = 9,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO =10,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO =11,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO =12,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO =13,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO =14,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO =15,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO =16,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO =17,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO =18,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO =19,NEW.QUANTIDADE_PRODUCAO,0), IIF(NEW.TAMANHO =20,NEW.QUANTIDADE_PRODUCAO,0), :ESTOQUE_ID, NEW.REMESSA, 0, 0, :OPERACAO_ENTRADA, NEW.CONTROLE, 0, 0, 0, 0, Current_Date, 0, :CCUSTO, 'ENTRADA POR REMESSA DE PRODUCAO', '0', 0, 0, 0, 0 ); END else begin IF ( OLD.SITUACAO = 3 AND NEW.SITUACAO = 2 ) THEN BEGIN DELETE FROM TbEstoque_Transacao_Item WHERE CONTROLE = OLD.estoque_id AND ESTABELECIMENTO_CODIGO = OLD.estabelecimento_codigo AND PRODUTO_CODIGO = OLD.produto_codigo; END END END END END ^ ALTER TRIGGER TTBPEDIDO_ITEM_PROC_B3U_01 AS Begin if ( OLD.SITUACAO < 3 AND NEW.SITUACAO = 3 AND NEW.DATA_PRODUCAO IS NULL ) then BEGIN NEW.DATA_PRODUCAO = (SELECT FIRST 1 T.DATA_PRODUCAO FROM TBTURNO T WHERE T.TURNO_CORRENTE = '1'); END if ((old.DATA_PRODUCAO IS NULL) and (new.data_producao is not null)) Then begin NEW.turno_producao = (SELECT FIRST 1 T.CODIGO FROM TBTURNO T WHERE T.TURNO_CORRENTE = '1'); NEW.turno = (SELECT FIRST 1 T.CODIGO FROM TBTURNO T WHERE T.TURNO_CORRENTE = '1'); end if (NEW.DATA_PRODUCAO IS NULL and NEW.STATUS_PRODUCAO = '1') Then Begin NEW.STATUS_PRODUCAO = '0'; End else Begin NEW.STATUS_PRODUCAO = '1'; End if (NEW.DATA_EXPEDICAO IS NULL and NEW.COLETA_ID <> 0) Then Begin NEW.COLETA_ID = 0; End if (OLD.COLETA_ID > 0 AND NEW.COLETA_ID > 0 AND NEW.COLETA_ID <> OLD.COLETA_ID and OLD.DATA_EXPEDICAO IS NOT NULL) Then Begin Exception "..." 'Talão já coletado, operação abortada! ID da coleta: '||OLD.COLETA_ID||'......................................................................................................................................................................................................................................................'; End End ^ ALTER TRIGGER TTBPEDIDO_ITEM_PROCESSADO_B7U AS declare variable OLD_TALAO_ID INTEGER; declare variable OLD_TALAO_STATUS INTEGER; declare variable TALAO_ID INTEGER; declare variable NEW_TALAO_ID INTEGER; declare variable NEW_ESTABELECIMENTO_ID INTEGER; declare variable NEW_REMESSA_ID INTEGER; declare variable NEW_LOCALIZACAO_ID INTEGER; declare variable NEW_PRODUTO_ID INTEGER; declare variable NEW_MODELO_ID INTEGER; declare variable NEW_TAMANHO INTEGER; declare variable NEW_QUANTIDADE NUMERIC(15,4); declare variable NEW_QUANTIDADE_ALTERNATIVA NUMERIC(15,4); declare variable NEW_GP_ID INTEGER; declare variable NEW_UP_ID INTEGER; declare variable NEW_ESTACAO INTEGER; declare variable NEW_DENSIDADE NUMERIC(15,4); declare variable NEW_ESPESSURA NUMERIC(15,4); declare variable NEW_STATUS INTEGER; declare variable NEW_C_ESTABELECIMENTO_ID INTEGER; declare variable NEW_C_FAMILIA_ID INTEGER; declare variable NEW_C_REMESSA INTEGER; declare variable NEW_C_TALAO INTEGER; declare variable NEW_C_PRODUTO_ID INTEGER; declare variable NEW_C_TAMANHO INTEGER; declare variable NEW_C_LOCALIZACAO_ID INTEGER; declare variable NEW_C_DENSIDADE NUMERIC(15,4); declare variable NEW_C_ESPESSURA NUMERIC(15,4); declare variable NEW_C_COR_ID INTEGER; declare variable NEW_C_ESTEIRA_ID INTEGER; declare variable NEW_C_SETOR_ID INTEGER; declare variable NEW_C_FATOR_CONVERSAO NUMERIC(15,4); declare variable NEW_C_QUANTIDADE NUMERIC(15,4); declare variable NEW_C_CONSUMO_ML NUMERIC(15,4); declare variable NEW_C_CONSUMO_KG NUMERIC(15,4); declare variable NEW_C_QUANTIDADE_CONFERENCIA NUMERIC(15,4); declare variable NEW_C_DATAHORA_CONFERENCIA NUMERIC(15,4); declare variable NEW_C_REQUISICAO_ID INTEGER; declare variable NEW_C_DATA DATE; declare variable NEW_C_CCUSTO VARCHAR(12); declare variable NEW_C_QUEBRA CHAR(1); declare variable NEW_C_SEGURANCA NUMERIC(15,4); declare variable NEW_C_TALAO_DETALHE_ID INTEGER; declare variable NEW_C_SALDO NUMERIC(15,4); declare variable NEW_C_CONTROLE INTEGER; declare variable NEW_C_QUANTIDADE_CONFERENCIA_ML NUMERIC(15,4); declare variable NEW_C_SALDO_ML NUMERIC(15,4); declare variable NEW_C_COMPONENTE CHAR(1); declare variable NEW_C_QUANTIDADE_SOBRA NUMERIC(15,4); declare variable NEW_C_SALDO_BAIXAR NUMERIC(15,4); declare variable NEW_C_QUANTIDADE_NECES NUMERIC(15,4); declare variable NEW_C_QUANTIDADE_NECES_ALTERN NUMERIC(15,4); BEGIN IF ( OLD.REMESSA_ACUMULADO_CONTROLE <> NEW.REMESSA_ACUMULADO_CONTROLE ) THEN BEGIN SELECT FIRST 1 ID, STATUS FROM VWREMESSA_TALAO T WHERE T.REMESSA_ID = OLD.REMESSA AND T.REMESSA_TALAO_ID = OLD.REMESSA_ACUMULADO_CONTROLE INTO :OLD_TALAO_ID, :OLD_TALAO_STATUS; IF ( OLD_TALAO_STATUS < 3 ) THEN BEGIN DELETE FROM TBREMESSA_TALAO_VINCULO V WHERE V.TALAO_ID = :OLD_TALAO_ID; UPDATE VWREMESSA_TALAO_DETALHE D SET D.QUANTIDADE_PRODUCAO_TMP = 0, D.QUANTIDADE_ALTERN_PRODUCAO_TMP = 0, D.QUANTIDADE_SOBRA_TMP = 0 WHERE D.REMESSA_ID = OLD.REMESSA AND D.REMESSA_TALAO_ID = OLD.REMESSA_ACUMULADO_CONTROLE; END TALAO_ID = COALESCE((SELECT FIRST 1 ID FROM VWREMESSA_TALAO T WHERE T.REMESSA_ID = NEW.REMESSA AND T.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE),0); IF ( TALAO_ID = 0 ) THEN BEGIN SELECT FIRST 1 ESTABELECIMENTO_ID, REMESSA_ID, LOCALIZACAO_ID, PRODUTO_ID, MODELO_ID, TAMANHO, QUANTIDADE, QUANTIDADE_ALTERNATIVA, GP_ID, UP_ID, ESTACAO, DENSIDADE, ESPESSURA, STATUS FROM VWREMESSA_TALAO T WHERE T.REMESSA_ID = NEW.REMESSA AND T.REMESSA_TALAO_ID = OLD.REMESSA_ACUMULADO_CONTROLE INTO :NEW_ESTABELECIMENTO_ID , :NEW_REMESSA_ID , :NEW_LOCALIZACAO_ID , :NEW_PRODUTO_ID , :NEW_MODELO_ID , :NEW_TAMANHO , :NEW_QUANTIDADE , :NEW_QUANTIDADE_ALTERNATIVA, :NEW_GP_ID , :NEW_UP_ID , :NEW_ESTACAO , :NEW_DENSIDADE , :NEW_ESPESSURA , :NEW_STATUS ; NEW_MODELO_ID = COALESCE((SELECT FIRST 1 P.MODELO_CODIGO FROM TBPRODUTO P WHERE P.CODIGO = NEW.PRODUTO_CODIGO),NEW_MODELO_ID); INSERT INTO VWREMESSA_TALAO ( ESTABELECIMENTO_ID, REMESSA_ID, REMESSA_TALAO_ID, LOCALIZACAO_ID, PRODUTO_ID, MODELO_ID, TAMANHO, QUANTIDADE, QUANTIDADE_ALTERNATIVA, GP_ID, UP_ID, ESTACAO, DENSIDADE, ESPESSURA, STATUS )VALUES ( :NEW_ESTABELECIMENTO_ID , :NEW_REMESSA_ID , NEW.REMESSA_ACUMULADO_CONTROLE, :NEW_LOCALIZACAO_ID , :NEW_PRODUTO_ID , :NEW_MODELO_ID , :NEW_TAMANHO , NEW.QUANTIDADE_PEDIDO , NEW.QUANTIDADE_ALTERN , :NEW_GP_ID , :NEW_UP_ID , :NEW_ESTACAO , :NEW_DENSIDADE , :NEW_ESPESSURA , :NEW_STATUS ) returning ID into :NEW_TALAO_ID; EXECUTE PROCEDURE SPI_PROGRAMACAO2( :NEW_ESTABELECIMENTO_ID, 'A', :NEW_GP_ID, :NEW_UP_ID, :NEW_ESTACAO, :NEW_TALAO_ID, :NEW_PRODUTO_ID, :NEW_TAMANHO, NEW.QUANTIDADE_PEDIDO, 1, :NEW_REMESSA_ID, CURRENT_DATE ); FOR SELECT ESTABELECIMENTO_ID , FAMILIA_ID , REMESSA , TALAO , PRODUTO_ID , TAMANHO , LOCALIZACAO_ID , DENSIDADE , ESPESSURA , COR_ID , ESTEIRA_ID , SETOR_ID , FATOR_CONVERSAO , QUANTIDADE , CONSUMO_ML , CONSUMO_KG , QUANTIDADE_CONFERENCIA , DATAHORA_CONFERENCIA , REQUISICAO_ID , DATA , CCUSTO , QUEBRA , SEGURANCA , TALAO_DETALHE_ID , CONTROLE , QUANTIDADE_CONFERENCIA_ML, COMPONENTE , QUANTIDADE_SOBRA , SALDO_BAIXAR , QUANTIDADE_NECES , QUANTIDADE_NECES_ALTERN FROM TBREMESSA_CONSUMO C WHERE C.REMESSA = NEW.REMESSA AND C.TALAO = OLD.REMESSA_ACUMULADO_CONTROLE AND C.TALAO_DETALHE_ID = 0 INTO :NEW_C_ESTABELECIMENTO_ID , :NEW_C_FAMILIA_ID , :NEW_C_REMESSA , :NEW_C_TALAO , :NEW_C_PRODUTO_ID , :NEW_C_TAMANHO , :NEW_C_LOCALIZACAO_ID , :NEW_C_DENSIDADE , :NEW_C_ESPESSURA , :NEW_C_COR_ID , :NEW_C_ESTEIRA_ID , :NEW_C_SETOR_ID , :NEW_C_FATOR_CONVERSAO , :NEW_C_QUANTIDADE , :NEW_C_CONSUMO_ML , :NEW_C_CONSUMO_KG , :NEW_C_QUANTIDADE_CONFERENCIA , :NEW_C_DATAHORA_CONFERENCIA , :NEW_C_REQUISICAO_ID , :NEW_C_DATA , :NEW_C_CCUSTO , :NEW_C_QUEBRA , :NEW_C_SEGURANCA , :NEW_C_TALAO_DETALHE_ID , :NEW_C_CONTROLE , :NEW_C_QUANTIDADE_CONFERENCIA_ML, :NEW_C_COMPONENTE , :NEW_C_QUANTIDADE_SOBRA , :NEW_C_SALDO_BAIXAR , :NEW_C_QUANTIDADE_NECES , :NEW_C_QUANTIDADE_NECES_ALTERN DO BEGIN INSERT INTO TBREMESSA_CONSUMO ( ESTABELECIMENTO_ID, FAMILIA_ID, REMESSA, TALAO, PRODUTO_ID, TAMANHO, LOCALIZACAO_ID, DENSIDADE, ESPESSURA, COR_ID, ESTEIRA_ID, SETOR_ID, FATOR_CONVERSAO, QUANTIDADE, CONSUMO_ML, CONSUMO_KG, QUANTIDADE_CONFERENCIA, DATAHORA_CONFERENCIA, REQUISICAO_ID, DATA, CCUSTO, QUEBRA, SEGURANCA, TALAO_DETALHE_ID, CONTROLE, QUANTIDADE_CONFERENCIA_ML, COMPONENTE, QUANTIDADE_SOBRA, SALDO_BAIXAR, QUANTIDADE_NECES, QUANTIDADE_NECES_ALTERN ) VALUES ( :NEW_C_ESTABELECIMENTO_ID , :NEW_C_FAMILIA_ID , :NEW_C_REMESSA , NEW.REMESSA_ACUMULADO_CONTROLE , :NEW_C_PRODUTO_ID , :NEW_C_TAMANHO , :NEW_C_LOCALIZACAO_ID , :NEW_C_DENSIDADE , :NEW_C_ESPESSURA , :NEW_C_COR_ID , :NEW_C_ESTEIRA_ID , :NEW_C_SETOR_ID , :NEW_C_FATOR_CONVERSAO , :NEW_C_QUANTIDADE , :NEW_C_CONSUMO_ML , :NEW_C_CONSUMO_KG , :NEW_C_QUANTIDADE_CONFERENCIA , :NEW_C_DATAHORA_CONFERENCIA , :NEW_C_REQUISICAO_ID , :NEW_C_DATA , :NEW_C_CCUSTO , :NEW_C_QUEBRA , :NEW_C_SEGURANCA , :NEW_C_TALAO_DETALHE_ID , :NEW_C_CONTROLE , :NEW_C_QUANTIDADE_CONFERENCIA_ML, :NEW_C_COMPONENTE , :NEW_C_QUANTIDADE_SOBRA , :NEW_C_SALDO_BAIXAR , :NEW_C_QUANTIDADE_NECES , :NEW_C_QUANTIDADE_NECES_ALTERN ); END END ELSE BEGIN UPDATE VWREMESSA_TALAO T SET T.QUANTIDADE = T.QUANTIDADE + NEW.QUANTIDADE_PEDIDO, T.QUANTIDADE_ALTERNATIVA = T.QUANTIDADE_ALTERNATIVA + NEW.QUANTIDADE_ALTERN WHERE T.ID = :TALAO_ID; END UPDATE VWREMESSA_CONSUMO C SET C.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE WHERE C.REMESSA_TALAO_DETALHE_ID = OLD.CONTROLE; UPDATE TBREMESSA_CONSUMO_VINCULO V SET V.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE WHERE V.REMESSA_TALAO_DETALHE_ID = OLD.CONTROLE; NEW.TALAO_DESMEMBRAMENTO = OLD.REMESSA_ACUMULADO_CONTROLE; EXECUTE PROCEDURE SPI_HISTORICO ( 'TBREMESSA', NEW.REMESSA, 'DETALHAMENTO: ' || NEW.CONTROLE || ' DESMEMBRADO DO TALAO: ' || OLD.REMESSA_ACUMULADO_CONTROLE || ' PARA: ' || NEW.REMESSA_ACUMULADO_CONTROLE ); -- EXECUTE PROCEDURE SPI_EMAIL('emersoncoelho@delfa.com.br','Desmembramento Realizado REMESSA: ' || COALESCE((SELECT FIRST 1 REMESSA FROM VWREMESSA R WHERE R.REMESSA_ID = NEW.REMESSA),'') || ' PARA: ' || NEW.REMESSA_ACUMULADO_CONTROLE,' -- REMESSA: ' || COALESCE((SELECT FIRST 1 REMESSA FROM VWREMESSA R WHERE R.REMESSA_ID = NEW.REMESSA),'') || ' -- REMESSA_ID: ' || NEW.REMESSA || '
-- DETALHAMENTO: ' || NEW.CONTROLE || ' DESMEMBRADO DO TALAO: ' || OLD.REMESSA_ACUMULADO_CONTROLE || ' PARA: ' || NEW.REMESSA_ACUMULADO_CONTROLE -- ); END END ^ ALTER TRIGGER TTBPEDIDO_ITEM_PROCESSADO_B8U AS declare variable WEB VARCHAR(10); declare variable TALAO_ID INTEGER; declare variable TALAO_UP_ID INTEGER; declare variable TALAO_ESTACAO INTEGER; declare variable TALAO_LOCALIZACAO_ID INTEGER; declare variable TALAO_ESTOQUE_ID INTEGER; declare variable PROGRAMACAO_STATUS VARCHAR(10); declare variable OPERACAO_ENTRADA VARCHAR(255); declare variable CCUSTO VARCHAR(10); declare variable CONSUMO_ID INTEGER; declare variable CONSUMO_PRODUTO_ID INTEGER; declare variable CONSUMO_TAMANHO INTEGER; declare variable CONSUMO_FATOR_UNIDADE NUMERIC(15,5); declare variable CONSUMO_LOCALIZACAO_ID INTEGER; declare variable CONSUMO_ESTOQUE_ID INTEGER; declare variable CONSUMO_QUANTIDADE NUMERIC(15,5); declare variable CONSUMO_QUANTIDADE_SALDO NUMERIC(15,5); declare variable CONSUMO_UM VARCHAR(10); declare variable CONSUMO_FAMILIA_ID INTEGER; declare variable CONSUMO_PERMITE_FRACAO VARCHAR(5); declare variable ULTIMO_TALAO BOOLEAN; begin SELECT FIRST 1 COALESCE(WEB,'0') FROM VWREMESSA R WHERE R.REMESSA_ID = NEW.REMESSA INTO WEB; IF ( OLD.SITUACAO < 3 AND NEW.SITUACAO = 3 AND WEB = '2' ) THEN BEGIN SELECT FIRST 1 T.ID, T.UP_ID, T.ESTACAO FROM VWREMESSA_TALAO T WHERE T.REMESSA_ID = NEW.REMESSA AND T.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE INTO TALAO_ID, TALAO_UP_ID, TALAO_ESTACAO; /* VERIFICA SE EH O ULTIMO TALAO DA SEQUENCIA */ ULTIMO_TALAO = IIF(COALESCE(( SELECT COUNT(D.ID) FROM VWREMESSA_TALAO_DETALHE D WHERE D.REMESSA_ID = NEW.REMESSA AND D.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE AND D.STATUS < 3 ),0) = 1,TRUE, FALSE); SELECT STATUS FROM TBPROGRAMACAO P WHERE P.TABELA_ID = :TALAO_ID AND P.TIPO = 'A' INTO PROGRAMACAO_STATUS; IF ( PROGRAMACAO_STATUS <> '2' ) THEN BEGIN EXCEPTION "..." 'O talão não está em produção. Operação cancelada.'; END /* SE FOR O ULTIMO TALAO, ATUALIZA O TALAO ACUMULADO PARA PRODUZIDO E A PROGRAMACAO PARA FINALIZADO */ IF ( ULTIMO_TALAO ) THEN BEGIN UPDATE VWREMESSA_TALAO T SET T.STATUS = 2 WHERE T.ID = :TALAO_ID; UPDATE TBPROGRAMACAO P SET P.STATUS = '3' WHERE P.TABELA_ID = :TALAO_ID AND P.TIPO = 'A'; UPDATE TBUP_ESTACAO SET TALAO_ID = :TALAO_ID, INCREMENTO = 1 WHERE (UP_ID = :TALAO_UP_ID) AND (ID = :TALAO_ESTACAO); EXECUTE PROCEDURE SPU_PROGRAMACAO_PRODUZIDO1( NEW.ESTABELECIMENTO_CODIGO, 'A', :TALAO_ID ); END /* CAPTURA A LOCALIZACAO DE ENTRADA NO ESTOQUE */ TALAO_LOCALIZACAO_ID = COALESCE(( SELECT FIRST 1 P.LOCALIZACAO_CODIGO FROM TBPRODUTO P WHERE P.CODIGO = NEW.PRODUTO_CODIGO ),0); /* CAPTURA A OPERACAO DE ESTOQUE */ OPERACAO_ENTRADA = (SELECT FIRST 1 VALOR_EXT FROM TBCONTROLE_N WHERE ID = 30); /* CAPTURA O CCUSTO DA TRANSACAO */ CCUSTO = (SELECT FIRST 1 U.CCUSTO FROM TBUP U WHERE U.ID = (SELECT FIRST 1 T.UP_ID FROM VWREMESSA_TALAO T WHERE T.REMESSA_ID = NEW.REMESSA AND T.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE)); /* GERA O ID DA TRANSACAO DE ENTRADA NO ESTOQUE */ TALAO_ESTOQUE_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0); /* GUARDA DATA E HORA DE PRODUCAO */ NEW.HORA_PRODUCAO = CURRENT_TIMESTAMP; /* GUARDA O ID DA TRANSACAO DE ESTOQUE NO TALAO DETALHADO */ NEW.ESTOQUE_ID = :TALAO_ESTOQUE_ID; /* ATUALIZA A QUANTIDADE PRODUZIDA NO TALAO DETALHADO */ NEW.QUANTIDADE_PRODUCAO = NEW.QUANTIDADE_PEDIDO; /* REGISTRA A ENTRADA NO ESTOQUE DO TALAO DETALHADO */ EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO( 'TBPEDIDO_ITEM_PROCESSADO', 0, NEW.CONTROLE, NEW.ESTABELECIMENTO_CODIGO, :TALAO_LOCALIZACAO_ID, NEW.DATA_PRODUCAO, NEW.PRODUTO_CODIGO, NEW.TAMANHO, NEW.QUANTIDADE_PRODUCAO, 'E', OPERACAO_ENTRADA, '0', :CCUSTO, 'WEB22180 - ENTRADA POR REMESSA DE PRODUCAO', NEW.ESTOQUE_ID ); /* REALIZA AS BAIXAS DE CONSUMO */ FOR SELECT C.ID, C.PRODUTO_ID, C.TAMANHO, C.FATOR_UNIDADE, C.QUANTIDADE_SALDO, P.UNIDADEMEDIDA_SIGLA, P.FAMILIA_CODIGO FROM VWREMESSA_CONSUMO C, TBPRODUTO P WHERE P.CODIGO = C.PRODUTO_ID AND C.REMESSA_ID = NEW.REMESSA AND C.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE AND C.STATUS = '0' AND C.COMPONENTE = '0' INTO CONSUMO_ID, CONSUMO_PRODUTO_ID, CONSUMO_TAMANHO, CONSUMO_FATOR_UNIDADE, CONSUMO_QUANTIDADE_SALDO, CONSUMO_UM, CONSUMO_FAMILIA_ID DO BEGIN /* VERIFICA SE O PRODUTO PERMITE BAIXA FRACIONADA */ CONSUMO_PERMITE_FRACAO = COALESCE(( SELECT U.PODE_FRACIONAR FROM TbUnidadeMedida U WHERE U.SIGLA = :CONSUMO_UM),'N'); /* GERA O ID DA TRANSACAO DE SAIDA DO CONSUMO */ CONSUMO_ESTOQUE_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0); /* REALIZA O CALCULO DE CONSUMO */ /* OBS1: SE FOR O ULTIMO TALAO DETALHADO A SER PRODUZIDO A BAIXA DEVE SER IGUAL AO RESTANTE A SER CONSUMIDO, SENAO, DEVERA SER CALCULDO BASEADO NA QUANTIDADE DO TALAO DETALHADO. OBS2: SE O PRODUTO NAO PERMITIR QUANTIDADE FRANCIONADA, O VALOR SERA ARREDONDADO PARA CIMA. */ CONSUMO_QUANTIDADE = IIF(ULTIMO_TALAO,COALESCE(CONSUMO_QUANTIDADE_SALDO,0), COALESCE(NEW.QUANTIDADE_PRODUCAO * CONSUMO_FATOR_UNIDADE,0)); CONSUMO_QUANTIDADE = IIF(CONSUMO_PERMITE_FRACAO = 'S',CONSUMO_QUANTIDADE,FN_ARRENDONDAR_PARA_CIMA(CONSUMO_QUANTIDADE)); IF ( CONSUMO_QUANTIDADE <= 0 ) THEN BEGIN EXCEPTION "..." 'Quantidade consumida deverá ser maior que zero. Produto: ' || CONSUMO_PRODUTO_ID || ' Operação cancelada.'; END /* VERIFICA SE O CONSUMO ESTÁ MAIOR QUE O PROJETADO. */ /* OBS: ESSE ERRO SO DEVE DISPARAR SE HOUVER PROBLEMA COM O FATOR UNIDADE OU SE O PRODUTO NAO PERMITIR FRACAO PARA CONSUMO */ IF ( CONSUMO_QUANTIDADE > CONSUMO_QUANTIDADE_SALDO ) THEN BEGIN EXCEPTION "..." 'Quantidade consumida não deve ser maior que o saldo da projeção. Produto: ' || CONSUMO_PRODUTO_ID || ' Operação cancelada.'; END /* ATUALIZA A QUANTIDADE CONSUMIDA */ UPDATE VWREMESSA_CONSUMO C SET C.QUANTIDADE_CONSUMO = COALESCE(C.QUANTIDADE_CONSUMO,0) + :CONSUMO_QUANTIDADE, C.ESTOQUE_ID = :CONSUMO_ESTOQUE_ID WHERE C.ID = :CONSUMO_ID; /* GUARDA A LOCALIZACAO DE PROCESSO (WIP) */ CONSUMO_LOCALIZACAO_ID = COALESCE(( SELECT FIRST 1 F.LOCALIZACAO_PROCESSO FROM TBFAMILIA_FICHA F WHERE F.FAMILIA_CODIGO = :CONSUMO_FAMILIA_ID AND F.ESTABELECIMENTO_CODIGO = NEW.ESTABELECIMENTO_CODIGO),0); /* VERIFICA SE A LOCALIZACAO DE PROCESSO ESTA CONFIGURADA */ IF ( CONSUMO_LOCALIZACAO_ID = 0 ) THEN BEGIN EXCEPTION "..." 'FAMILIA DO PRODUTO SEM LOCALIZACAO DE PROCESSO (WIP) DEFINIDA. ID PROD.' || CONSUMO_PRODUTO_ID || '. OPERACAO CANCELADA! '; END /* REALIZA A TRANSACAO DE SAIDA DO CONSUMO */ EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO( 'TBREMESSA_CONSUMO', 2, :CONSUMO_ID, NEW.ESTABELECIMENTO_CODIGO, :CONSUMO_LOCALIZACAO_ID, NEW.DATA_PRODUCAO, :CONSUMO_PRODUTO_ID, :CONSUMO_TAMANHO, :CONSUMO_QUANTIDADE, 'S', 'WPS', '1', :CCUSTO, 'WEB22180 - SAIDA POR PROJECAO DE CONSUMO DE REMESSA DE PRODUCAO', :CONSUMO_ESTOQUE_ID ); END END end ^ ALTER TRIGGER TTBPROGRAMACAO_B8U AS declare variable STATUS_DESCRICAO VARCHAR(20); declare variable REMESSA VARCHAR(20); declare variable REMESSA_TALAO_ID INTEGER; begin if(old.gp_id <> new.gp_id and new.status >= 2 AND NEW.TIPO = 'A')then begin STATUS_DESCRICAO = (CASE NEW.STATUS WHEN '2' THEN 'EM PRODUCAO' WHEN '3' THEN 'PRODUZIDO' ELSE '' END); REMESSA = COALESCE((SELECT FIRST 1 R.REMESSA FROM VWREMESSA R WHERE R.REMESSA_ID = NEW.REMESSA_ID),''); REMESSA_TALAO_ID = COALESCE((SELECT FIRST 1 T.REMESSA_TALAO_ID FROM VWREMESSA_TALAO T WHERE T.ID = NEW.TABELA_ID ),''); EXCEPTION "..." 'ALTERACAO DE GRUPO DE PRODUCAO NAO PERMITIDA. O TALAO: [' || REMESSA || '/' || FN_LPAD(REMESSA_TALAO_ID,4,0) || '] ENCONTRA-SE "' || STATUS_DESCRICAO || '".'; end end ^ ALTER TRIGGER TTBREMESSA_CONSUMO_B0U_03 AS DECLARE VARIABLE REMESSA_COMPONENTE CHAR(1) ; DECLARE VARIABLE LOCALIZACAO_ID INTEGER ; DECLARE VARIABLE TABELA_ID INTEGER ; DECLARE VARIABLE ESTOQUE_ID INTEGER ; DECLARE VARIABLE OPERACAO_SAIDA VARCHAR(10) ; DECLARE VARIABLE CCUSTO VARCHAR(10); DECLARE VARIABLE USUARIO_ID INTEGER; DECLARE VARIABLE VINCULO INTEGER; declare variable VINCULO_QUANTIDADE INTEGER; declare variable TALOES_PENDENTES VARCHAR(500); Declare variable WEB Char(1); DECLARE VARIABLE REQUISICAO CHAR(1); Begin WEB = Coalesce((Select First 1 R.WEB From TbRemessa R Where R.Numero = New.Remessa),'0'); IF (COALESCE(WEB,'0') = '1' ) THEN Begin /* ESTA TRIGGER SO SERA PROCESSADA NAS NOVAS REMESSAS (GCWEB) */ IF ( NEW.COMPONENTE = '1' OR NEW.COMPONENTE = '0' ) THEN BEGIN /* 1 - CONFERIDO */ IF ( OLD.CONFERENCIA = '0' AND NEW.CONFERENCIA = '1' AND NEW.QUANTIDADE_CONFERENCIA > 0) THEN BEGIN /* GUARDA O VALOR DE UM VINCULO D0 CONSUMO (SE HOUVER) */ VINCULO = COALESCE(( SELECT FIRST 1 V.ID FROM TBREMESSA_CONSUMO_VINCULO V WHERE V.CONSUMO_ID = NEW.ID ),0); /* VERIFICA SE O CONSUMO TEM VINCULO */ IF( VINCULO > 0 ) THEN BEGIN /* GUARDA OS TALOES PENDETES DE PRODUCAO VINCULADOS A ESTE CONSUMO (SE HOUVER) */ TALOES_PENDENTES = (SELECT CAST(LIST('[ ' || R.REMESSA || '/' || LPAD(D.REMESSA_TALAO_ID,4,'0') || ' (' || (CASE D.STATUS WHEN 1 THEN 'EM ABERTO' WHEN 2 THEN 'EM PRODUCAO' WHEN 3 THEN 'PRODUZIDO' WHEN 6 THEN 'ENCERRADO' ELSE 'INDEFINIDO' END) || ') ]',', ') AS VARCHAR(500)) FROM TBREMESSA_CONSUMO_VINCULO V, VWREMESSA_TALAO_DETALHE D, VWREMESSA R WHERE V.CONSUMO_ID = NEW.ID AND V.REMESSA_TALAO_DETALHE_ID = D.ID AND V.REMESSA_ID = R.REMESSA_ID AND D.STATUS IN ('1','2') /* EM ABERTO, EM PRODUCAO */); /* VERIFICA SE HA TALOES VINCULADOS A ESTE CONSUMO QUE AINDA NAO FORAM PRODUZIDO */ IF ( TALOES_PENDENTES IS NOT NULL ) THEN BEGIN EXCEPTION "..." 'HA COMPONENTES DESTE TALAO QUE AINDA NAO FORAM PRODUZIDOS: ' || TALOES_PENDENTES || '. OPERACAO CANCELADA! '|| ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .'; END END /* VERIFICA SE EH PROJECAO DE COMPONENTE */ IF ( NEW.COMPONENTE = '1' ) THEN BEGIN /* GUARDA A LOCALIZACAO DE PROCESSO (WIP) */ LOCALIZACAO_ID = COALESCE((SELECT FIRST 1 F.LOCALIZACAO_PROCESSO FROM TBPRODUTO P, TBFAMILIA_FICHA F WHERE F.FAMILIA_CODIGO = P.FAMILIA_CODIGO AND F.ESTABELECIMENTO_CODIGO = NEW.ESTABELECIMENTO_ID AND P.CODIGO = NEW.PRODUTO_ID),0); /* VERIFICA SE A LOCALIZACAO DE PROCESSO ESTA CONFIGURADA */ IF ( LOCALIZACAO_ID = 0 ) THEN BEGIN EXCEPTION "..." 'FAMILIA DO PRODUTO SEM LOCALIZACAO DE PROCESSO (WIP) DEFINIDA. ID PROD.' || NEW.PRODUTO_ID || '. OPERACAO CANCELADA! '|| ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; END END ELSE BEGIN VINCULO_QUANTIDADE = (SELECT COUNT(DISTINCT CASE V.TIPO WHEN 'R' THEN (SELECT FIRST 1 R.LOCALIZACAO_ENTRADA FROM TBREVISAO R WHERE R.ID = V.TABELA_ID) WHEN 'D' THEN (SELECT FIRST 1 D.LOCALIZACAO_ID FROM VWREMESSA_TALAO_DETALHE D WHERE D.ID = V.TABELA_ID) ELSE 'N#D' END) FROM TBREMESSA_TALAO_VINCULO V WHERE V.CONSUMO_ID = NEW.ID); IF ( VINCULO_QUANTIDADE > 1 ) THEN BEGIN EXCEPTION "..." 'AS PECAS ALOCADAS, POSSUEM LOCALIZACOES DIFERENTES. OPERACAO CANCELADA!'; END ELSE IF ( VINCULO_QUANTIDADE = 1) THEN BEGIN /* GUARDA A LOCALIZACAO DA PECAS */ LOCALIZACAO_ID = coalesce((SELECT DISTINCT CASE V.TIPO WHEN 'R' THEN (SELECT FIRST 1 R.LOCALIZACAO_ENTRADA FROM TBREVISAO R WHERE R.ID = V.TABELA_ID) WHEN 'D' THEN (SELECT FIRST 1 D.LOCALIZACAO_ID FROM VWREMESSA_TALAO_DETALHE D WHERE D.ID = V.TABELA_ID) ELSE 'N#D' END FROM TBREMESSA_TALAO_VINCULO V WHERE V.CONSUMO_ID = NEW.ID),0); END TABELA_ID = (SELECT coalesce(sum(v.tabela_id),0) as tabela_id FROM TBREMESSA_TALAO_VINCULO V WHERE V.CONSUMO_ID = NEW.ID); IF ( coalesce(TABELA_ID,0) = 0 ) THEN BEGIN EXCEPTION "..." 'VINCULO COM ERRO. ID PROD.' || NEW.PRODUTO_ID || '. EXCLUA O VINCULO DESTE PRODUTO E TENTE NOVAMENTE! '|| ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; END /* GUARDA A LOCALIZACAO PADRAO */ /*LOCALIZACAO_ID = COALESCE((SELECT FIRST 1 P.LOCALIZACAO_CODIGO FROM TBPRODUTO P WHERE P.CODIGO = NEW.PRODUTO_ID),0); */ /* VERIFICA SE A LOCALIZACAO PADRAO ESTA CONFIGURADA */ IF ( coalesce(LOCALIZACAO_ID,0) = 0 ) THEN BEGIN EXCEPTION "..." 'PRODUTO SEM LOCALIZACAO PADRAO DEFINIDA. ID PROD.' || NEW.PRODUTO_ID || '. OPERACAO CANCELADA! '|| ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; END END --Entrada no Estoque ESTOQUE_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0); NEW.CONTROLE_ESTOQUE = :ESTOQUE_ID; REQUISICAO = COALESCE((SELECT FIRST 1 REQUISICAO FROM VWREMESSA R WHERE R.REMESSA_ID = NEW.REMESSA),'0'); /* SE FOR CONSUMO DE UMA REMESSA DE REQUISICAO E SE FOR UM CONSUMO DE MATERIA-PRIMA */ if ( REQUISICAO = '1' AND NEW.COMPONENTE = '0' ) then BEGIN /* SIGLA DA OPERACAO DE SAIDA DO ESTOQUE PARA REMESSAS DE REQUISICAO */ OPERACAO_SAIDA = (SELECT FIRST 1 VALOR_EXT FROM TBCONTROLE_N WHERE ID = 95); END ELSE BEGIN IF ( NEW.COMPONENTE = '1') THEN BEGIN /* SIGLA DA OPERACAO DE WORK IN PROCESS SAIDA */ OPERACAO_SAIDA = 'WPS'; END ELSE BEGIN /* SIGLA DA OPERACAO DE SAIDA DO ESTOQUE */ OPERACAO_SAIDA = (SELECT FIRST 1 VALOR_EXT FROM TBCONTROLE_N WHERE ID = 97); END END USUARIO_ID = (SELECT US.CODIGO FROM TBUSUARIO US WHERE US.USUARIO = (SELECT FIRST 1 MON$USER FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION)); CCUSTO = (SELECT FIRST 1 U.CCUSTO FROM TBUP U WHERE U.ID = (SELECT FIRST 1 T.UP_ID FROM VWREMESSA_TALAO T WHERE T.REMESSA_ID = NEW.REMESSA AND T.REMESSA_TALAO_ID = NEW.TALAO)); --so da saida se projeção maior do que 0 if(NEW.consumo_kg > 0)then begin EXECUTE PROCEDURE SPU_ESTOQUE_SALDO4 ( NEW.ESTABELECIMENTO_ID, :LOCALIZACAO_ID, NEW.PRODUTO_ID, 'S', /* S = SAIDA DO ESTOQUE */ --CAST(NEW.datahora_conferencia AS DATE), (SELECT FIRST 1 T.DATA_PRODUCAO FROM TBTURNO T WHERE T.TURNO_CORRENTE = '1'), NEW.QUANTIDADE_CONFERENCIA, IIF(NEW.TAMANHO = 1,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO = 2,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO = 3,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO = 4,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO = 5,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO = 6,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO = 7,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO = 8,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO = 9,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO =10,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO =11,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO =12,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO =13,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO =14,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO =15,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO =16,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO =17,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO =18,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO =19,NEW.QUANTIDADE_CONFERENCIA,0), IIF(NEW.TAMANHO =20,NEW.QUANTIDADE_CONFERENCIA,0), :ESTOQUE_ID, NEW.REMESSA, 0, 0, :OPERACAO_SAIDA, NEW.ID, 0, '1', 0, :USUARIO_ID, Current_Date, 0, :CCUSTO, 'SAIDA POR PROJECAO DE CONSUMO DE REMESSA DE PRODUCAO', '0', 0, 0, 0, 0 ); end END ELSE BEGIN /* 0 - EXCLUSAO DE CONFERENCIA */ IF ( OLD.CONFERENCIA = '1' AND NEW.CONFERENCIA = '0' ) THEN BEGIN NEW.CONTROLE_ESTOQUE = 0; DELETE FROM TbEstoque_Transacao_Item WHERE CONTROLE = OLD.CONTROLE_ESTOQUE AND ESTABELECIMENTO_CODIGO = OLD.ESTABELECIMENTO_ID AND PRODUTO_CODIGO = OLD.PRODUTO_ID; END END END END END ^ ALTER TRIGGER TTBREMESSA_ITEM_PROC_B0U_06 AS DECLARE VARIABLE VINCULO_COMPONENTE CHAR(1) ; declare variable VINCULO_COMPONENTES VARCHAR(500) ; DECLARE VARIABLE VINCULO_TALAO_ID INTEGER ; DECLARE VARIABLE VINCULO_CONSUMO_ID INTEGER ; DECLARE VARIABLE VINCULO_PRODUTO_ID INTEGER ; DECLARE VARIABLE VINCULO_PRODUTO_DESCRICAO VARCHAR(100) ; DECLARE VARIABLE VINCULO_TIPO CHAR(1) ; DECLARE VARIABLE VINCULO_TABELA_ID INTEGER ; DECLARE VARIABLE VINCULO_QUANTIDADE NUMERIC(15,4) ; DECLARE VARIABLE VINCULO_QUANTIDADE_SOBRA NUMERIC(15,4) ; DECLARE VARIABLE VINCULO_QUANTIDADE_ALTERNATIVA NUMERIC(15,4) ; DECLARE VARIABLE QUANTIDADE_CONSUMO NUMERIC(15,4) ; DECLARE VARIABLE QUANTIDADE_CONSUMO_ALTERNATIVO NUMERIC(15,4) ; DECLARE VARIABLE CONSUMO_QUANTIDADE NUMERIC(18,4); DECLARE VARIABLE QUANTIDADE_FINAL NUMERIC(18,4); DECLARE VARIABLE calcTemp NUMERIC(15,4); Declare variable WEB Char(1); Begin WEB = Coalesce((Select First 1 R.WEB From TbRemessa R Where R.Numero = New.Remessa),'0'); IF (COALESCE(WEB,'0') = '1' ) THEN Begin /* ESTA TRIGGER SO SERA PROCESSADA NAS NOVAS REMESSAS (GCWEB) */ IF ( COALESCE(OLD.FAMILIA_CODIGO,0) = 0 ) THEN BEGIN /* 1 - EM ABERTO ; 2 - PRODUZIDO */ IF ( OLD.SITUACAO = 1 AND NEW.SITUACAO = 2 ) THEN BEGIN NEW.HORA_PRODUCAO = 'NOW'; NEW.TURNO = (SELECT FIRST 1 T.CODIGO FROM TBTURNO T WHERE T.TURNO_CORRENTE = '1'); NEW.DATA_PRODUCAO = (SELECT FIRST 1 T.DATA_PRODUCAO FROM TBTURNO T WHERE T.TURNO_CORRENTE = '1'); FOR SELECT COMPONENTE, COMPONENTES, TALAO_ID, CONSUMO_ID, PRODUTO_ID, PRODUTO_DESCRICAO, QUANTIDADE, QUANTIDADE_ALTERNATIVA, QUANTIDADE_SOBRA, QUANTIDADE_PROJECAO FROM ( SELECT C.COMPONENTE, COALESCE(IIF(C.COMPONENTE = '1', ( SELECT LIST(DISTINCT '[' || REMESSA || ' / ' || LPAD(REMESSA_TALAO_ID,4,'0') || ']', ', ') FROM ( SELECT CV.CONSUMO_ID, R.REMESSA, CV.REMESSA_ID, CV.REMESSA_TALAO_ID, CV.REMESSA_TALAO_DETALHE_ID, (SELECT V.ID FROM TBREMESSA_TALAO_VINCULO V WHERE V.CONSUMO_ID = CV.CONSUMO_ID AND V.TABELA_ID = CV.REMESSA_TALAO_DETALHE_ID) VINCULO FROM VWREMESSA_CONSUMO C, VWREMESSA_TALAO T, TBREMESSA_CONSUMO_VINCULO CV, VWREMESSA R WHERE C.REMESSA_ID = NEW.REMESSA AND C.REMESSA_TALAO_ID = NEW.CONTROLE AND T.REMESSA_ID = C.REMESSA_ID AND T.REMESSA_TALAO_ID = C.REMESSA_TALAO_ID AND C.ID = CV.CONSUMO_ID AND CV.REMESSA_ID = R.REMESSA_ID ) WHERE VINCULO IS NULL ),''),'')COMPONENTES, V.TALAO_ID, V.CONSUMO_ID, LPAD(P.CODIGO,5,'0') PRODUTO_ID, P.DESCRICAO PRODUTO_DESCRICAO, SUM(COALESCE(V.QUANTIDADE,0))QUANTIDADE, SUM(COALESCE(V.QUANTIDADE_ALTERNATIVA,0))QUANTIDADE_ALTERNATIVA, AVG(COALESCE(C.QUANTIDADE_SOBRA,0))QUANTIDADE_SOBRA, AVG(COALESCE(C.QUANTIDADE,0)) QUANTIDADE_PROJECAO FROM VWREMESSA_CONSUMO C LEFT JOIN TBREMESSA_TALAO_VINCULO V ON V.CONSUMO_ID = C.ID, TBPRODUTO P WHERE C.REMESSA_ID = NEW.REMESSA AND C.REMESSA_TALAO_ID = NEW.CONTROLE AND P.CODIGO = C.PRODUTO_ID GROUP BY COMPONENTE, TALAO_ID, CONSUMO_ID,PRODUTO_ID,PRODUTO_DESCRICAO ) X INTO :VINCULO_COMPONENTE, :VINCULO_COMPONENTES, :VINCULO_TALAO_ID, :VINCULO_CONSUMO_ID, :VINCULO_PRODUTO_ID, :VINCULO_PRODUTO_DESCRICAO, :VINCULO_QUANTIDADE, :VINCULO_QUANTIDADE_ALTERNATIVA, :VINCULO_QUANTIDADE_SOBRA, :CONSUMO_QUANTIDADE DO BEGIN /* CALCULA AS QUANTIDADES CONSUMIDAS */ QUANTIDADE_CONSUMO = VINCULO_QUANTIDADE - VINCULO_QUANTIDADE_SOBRA; QUANTIDADE_CONSUMO_ALTERNATIVO = VINCULO_QUANTIDADE_ALTERNATIVA; /* ATUALIZA O STATUS DO VINCULO PARA 1 (UTILIZADO) */ UPDATE TBREMESSA_TALAO_VINCULO V SET V.STATUS = '1' WHERE TALAO_ID = NEW.ID AND CONSUMO_ID = :VINCULO_CONSUMO_ID; /* ATUALIZA A QUANTIDADE UTILIZADA NO CONSUMO */ UPDATE VWREMESSA_CONSUMO C SET C.QUANTIDADE_CONSUMO = :QUANTIDADE_CONSUMO, --:VINCULO_QUANTIDADE, C.QUANTIDADE_ALTERNATIVA_CONSUMO = :VINCULO_QUANTIDADE_ALTERNATIVA, C.DATAHORA_CONFERENCIA = CURRENT_TIMESTAMP, C.STATUS = '1' WHERE ID = :VINCULO_CONSUMO_ID; IF ( :VINCULO_COMPONENTE = '1' AND :VINCULO_COMPONENTES <> '' ) THEN BEGIN EXCEPTION "..." 'HA COMPONENTES PENDENTES DE ALOCACAO. REMESSA/TALAO ESPERADO: ' || :VINCULO_COMPONENTES; END ELSE /* VERIFICA SE HA ITENS SEM MATERIA-PRIMA/COMPONENTE ALOCADO */ IF ( :VINCULO_TALAO_ID IS NULL AND :CONSUMO_QUANTIDADE > 0 ) THEN BEGIN EXCEPTION "..." 'HA ITENS DA PROJECAO DE CONSUMO SEM MATERIA-PRIMA ALOCADA. PRODUTO: ' || coalesce(:VINCULO_PRODUTO_ID,0) || ' - ' || coalesce(:VINCULO_PRODUTO_DESCRICAO,0) || ' OPERACAO CANCELADA! '; END END END END END END ^ ALTER TRIGGER TTBREMESSA_ITEM_PROCESSADO_B3U POSITION 3 AS Declare variable LOCALIZACAO_PROCESSO integer; Declare variable ESTOQUE_ID integer; Declare variable WEB Char(1); Begin WEB = Coalesce((Select First 1 R.WEB From TbRemessa R Where R.Numero = New.Remessa),'0'); --Registra no estoque WIP o bojo cortado - para remessas do GC-WEB --Baixa do WIP os componentes (EDC) IF (COALESCE(WEB,'0') = '1' ) THEN Begin If (NEW.FAMILIA_CODIGO > 0) then BEGIN if ((Old.Situacao = 1 and New.Situacao = 2) or (Old.Situacao = 2 and New.Situacao = 1)) Then Begin LOCALIZACAO_PROCESSO = Coalesce((Select First 1 Localizacao_Processo From TbFamilia_Ficha Where Familia_Codigo = Old.Familia_Codigo and Estabelecimento_Codigo = Old.Estabelecimento_Codigo),0); if (LOCALIZACAO_PROCESSO > 0) then Begin --Entra no Estoque em Processo If (Old.Situacao = 1 and New.Situacao = 2 and Coalesce(OLD.ESTOQUE_ID,0) = 0) Then Begin if (OLD.CONTROLE < 8000 and NEW.QUANTIDADE > 0) then --SOMENTE TALOES DE REMESSAS NORMAIS BEGIN ESTOQUE_ID = Coalesce((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0); EXECUTE PROCEDURE SPU_ESTOQUE_SALDO4 ( NEW.ESTABELECIMENTO_CODIGO,:LOCALIZACAO_PROCESSO, NEW.PRODUTO_CODIGO, 'E',NEW.DATA_PRODUCAO,NEW.QUANTIDADE, IIF(NEW.TAMANHO = 1,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 2,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 3,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 4,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 5,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 6,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 7,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 8,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 9,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =10,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =11,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =12,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =13,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =14,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =15,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =16,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =17,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =18,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =19,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =20,NEW.QUANTIDADE,0), :ESTOQUE_ID,NEW.REMESSA,0,0,'WPE',OLD.ID,0,0,0,0, Current_Date,0,null,'','0',0,0,0,0); NEW.ESTOQUE_ID = :ESTOQUE_ID; End UPDATE VWREMESSA_CONSUMO RC SET RC.Quantidade_consumo = RC.quantidade, RC.quantidade_alternativa_consumo = RC.quantidade_alternativa, RC.datahora_conferencia = NEW.DATA_PRODUCAO, RC.status = '1' Where RC.estabelecimento_id = NEW.ESTABELECIMENTO_CODIGO AND RC.REMESSA_ID = NEW.REMESSA AND RC.remessa_talao_id = NEW.CONTROLE; End Else --Exclui do Estoque em Processo If (Old.Situacao = 2 and New.Situacao = 1 and Old.Estoque_Id > 0) Then Begin NEW.ESTOQUE_ID = 0; DELETE FROM TbEstoque_Transacao_Item WHERE TRANSACAO_CONTROLE = 0 AND CONTROLE = OLD.ESTOQUE_ID AND ESTABELECIMENTO_CODIGO = OLD.ESTABELECIMENTO_CODIGO AND LOCALIZACAO_CODIGO = :LOCALIZACAO_PROCESSO AND PRODUTO_CODIGO = OLD.PRODUTO_CODIGO; UPDATE VWREMESSA_CONSUMO RC SET RC.Quantidade_consumo = 0, RC.quantidade_alternativa_consumo = 0, RC.datahora_conferencia = null, RC.status = '0' Where RC.estabelecimento_id = NEW.ESTABELECIMENTO_CODIGO AND RC.REMESSA_ID = NEW.REMESSA AND RC.remessa_talao_id = NEW.CONTROLE; End End End if (Old.Situacao = New.Situacao and Old.Estoque_Id > 0 and NEW.QUANTIDADE <> OLD.QUANTIDADE) Then Begin LOCALIZACAO_PROCESSO = Coalesce((Select First 1 Localizacao_Processo From TbFamilia_Ficha Where Familia_Codigo = Old.Familia_Codigo and Estabelecimento_Codigo = Old.Estabelecimento_Codigo),0); if (LOCALIZACAO_PROCESSO > 0) then Begin if (OLD.CONTROLE < 8000 and NEW.QUANTIDADE > 0) then --SOMENTE TALOES DE REMESSAS NORMAIS BEGIN ESTOQUE_ID = Coalesce((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0); --Entra no Estoque em Processo EXECUTE PROCEDURE SPU_ESTOQUE_SALDO4 ( NEW.ESTABELECIMENTO_CODIGO,:LOCALIZACAO_PROCESSO, NEW.PRODUTO_CODIGO, 'E',NEW.DATA_PRODUCAO,NEW.QUANTIDADE, IIF(NEW.TAMANHO = 1,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 2,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 3,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 4,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 5,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 6,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 7,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 8,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO = 9,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =10,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =11,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =12,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =13,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =14,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =15,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =16,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =17,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =18,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =19,NEW.QUANTIDADE,0), IIF(NEW.TAMANHO =20,NEW.QUANTIDADE,0), :ESTOQUE_ID,NEW.REMESSA,0,0,'WPE',OLD.CONTROLE,0,0,0,0, Current_Date,0,null,'','0',0,0,0,0); NEW.ESTOQUE_ID = :ESTOQUE_ID; END else if (OLD.CONTROLE < 8000 and NEW.QUANTIDADE <= 0) then --SOMENTE TALOES DE REMESSAS NORMAIS begin NEW.ESTOQUE_ID = 0; end if (OLD.CONTROLE < 8000) then --SOMENTE TALOES DE REMESSAS NORMAIS BEGIN --Exclui do Estoque em Processo DELETE FROM TbEstoque_Transacao_Item WHERE TRANSACAO_CONTROLE = 0 AND CONTROLE = OLD.ESTOQUE_ID AND ESTABELECIMENTO_CODIGO = OLD.ESTABELECIMENTO_CODIGO AND LOCALIZACAO_CODIGO = :LOCALIZACAO_PROCESSO AND PRODUTO_CODIGO = OLD.PRODUTO_CODIGO; End End End End End End ^ ALTER TRIGGER TTBREMESSA_ITEM_PROCESSADO_B99U AS DECLARE VARIABLE HISTORICO VARCHAR(500); BEGIN HISTORICO = ''; IF ( NEW.UP_ID <> OLD.UP_ID) THEN BEGIN HISTORICO = HISTORICO||' TALAO ' || LPAD(NEW.CONTROLE,4,'0') || ' REPROGRAMADO UP:'||OLD.UP_ID||'->'||NEW.UP_ID; END IF ( NEW.PROGRAMACAO_ESTEIRA <> OLD.PROGRAMACAO_ESTEIRA) THEN BEGIN HISTORICO = HISTORICO||' TALAO ' || LPAD(NEW.CONTROLE,4,'0') || ' REPROGRAMADO GP:'||OLD.PROGRAMACAO_ESTEIRA||'->'||NEW.PROGRAMACAO_ESTEIRA; UPDATE TBPROGRAMACAO P SET P.GP_ID = NEW.PROGRAMACAO_ESTEIRA, P.UP_ID = COALESCE((SELECT FIRST 1 G.UP_ID FROM TBGP_UP G WHERE G.GP_ID = NEW.PROGRAMACAO_ESTEIRA),0) WHERE P.TABELA_ID = NEW.ID AND P.TIPO = 'A'; END IF (HISTORICO <> '') THEN BEGIN EXECUTE PROCEDURE SPI_HISTORICO('TBREMESSA',NEW.REMESSA,HISTORICO); END END ^ ALTER TRIGGER TTBREMESSA_TALAO_VINCULO_B4D AS declare variable REMESSA_TALAO_ID INTEGER; declare variable CONSUMO_STATUS CHAR(1); begin /* VERIFICACAO DA EXCLUSAO DE KANBAN (WEB15080) */ IF ( OLD.ORIGEM_TABELA = 'VWESTOQUE_MINIMO_TAMANHO' AND OLD.ORIGEM_NIVEL = 0 ) THEN BEGIN DELETE FROM TBESTOQUE_TRANSACAO_ITEM X WHERE X.CONTROLE = OLD.ESTOQUE_ID_ENTRADA; DELETE FROM TBESTOQUE_TRANSACAO_ITEM X WHERE X.CONTROLE = OLD.ESTOQUE_ID_SAIDA; END end ^ ALTER TRIGGER TTBWORKFLOW_ITEM_TAREFA_B4U AS BEGIN -- Se a tarefa estiver sendo concluida IF (NEW.STATUS_CONCLUSAO = '3') THEN BEGIN UPDATE TBNOTIFICACAO N SET N.EXECUTADO = '1' WHERE N.TABELA = 'TBWORKFLOW_ITEM_TAREFA' AND N.TABELA_ID = OLD.ID; END END ^ /******************************************************************************/ /**** Altering stored procedures ****/ /******************************************************************************/ ALTER PROCEDURE SP_REPLICA_TABELA( TABELA VARCHAR(50)) RETURNS ( ID INTEGER, ANO INTEGER, MES INTEGER, DATA_INICIAL VARCHAR(10), DATA_FINAL VARCHAR(10), LINHA_ID INTEGER) AS BEGIN For Select id, ano, mes, data_inicial, data_final, linha_id From TbReplica_Tabela Where Tabela = :Tabela and Status = '0' Order by Ano, Mes Into :id, :ano, :mes, :data_inicial, :data_final, :linha_id Do Begin if (id > 0) then Begin Update TbReplica_Tabela Set Status = '1' Where Id = :Id and linha_id = :linha_id; SUSPEND; End End END ^ ALTER PROCEDURE SPC_CONFERENCIA_TRANSACAO( COD_BARRAS VARCHAR(100), CONFERENCIA_TIPO INTEGER) RETURNS ( ESTOQUE_ID INTEGER, PRODUTO_ID INTEGER, PRODUTO_DESCRICAO VARCHAR(100), USUARIO_ID INTEGER, USUARIO_DESCRICAO VARCHAR(100), DATAHORA TIMESTAMP, LOCALIZACAO_CODIGO INTEGER, CONFERENCIA INTEGER, ESTOQUE_TRANSACAO_REGRA_ID INTEGER, QUANTIDADE NUMERIC(15,4), TAMANHO INTEGER) AS DECLARE VARIABLE TIPO_COD_BARRAS INTEGER; DECLARE VARIABLE ID_CODBARRAS VARCHAR(20); DECLARE VARIABLE POSICAO INTEGER; DECLARE VARIABLE TAMANHO_COD INTEGER; DECLARE VARIABLE TIPO INTEGER; DECLARE VARIABLE LOTE_STATUS INTEGER; BEGIN :TIPO_COD_BARRAS = 0; IF(POSITION('P' IN :COD_BARRAS) > 0)THEN BEGIN :TIPO_COD_BARRAS = 1; POSICAO = 2; TIPO = 1; END IF(POSITION('RD' IN :COD_BARRAS) > 0)THEN BEGIN :TIPO_COD_BARRAS = 2; POSICAO = 3; TIPO = 1; END IF(POSITION('RA' IN :COD_BARRAS) > 0)THEN BEGIN :TIPO_COD_BARRAS = 3; POSICAO = 3; TIPO = 1; END IF(POSITION('KB' IN :COD_BARRAS) > 0)THEN BEGIN :TIPO_COD_BARRAS = 4; POSICAO = 3; TIPO = 2; END IF(POSITION('TR' IN :COD_BARRAS) > 0)THEN BEGIN :TIPO_COD_BARRAS = 5; POSICAO = 3; TIPO = 3; END :TAMANHO_COD = CHAR_LENGTH(:COD_BARRAS); :ID_CODBARRAS = SUBSTRING(:COD_BARRAS FROM POSICAO FOR TAMANHO_COD); :ID_CODBARRAS = CAST(CAST(:ID_CODBARRAS AS INTEGER) AS VARCHAR(20)); PRODUTO_ID = 0; USUARIO_ID = 0; DATAHORA = CURRENT_TIMESTAMP; LOCALIZACAO_CODIGO = 0; CONFERENCIA = 0; ESTOQUE_TRANSACAO_REGRA_ID = 0; QUANTIDADE = 0; TAMANHO = 0; PRODUTO_DESCRICAO = ''; USUARIO_DESCRICAO = ''; /* KANBAN */ IF(:CONFERENCIA_TIPO = 1)THEN BEGIN LOTE_STATUS = coalesce((select first 1 D.status FROM tbkanban_lote D WHERE D.id = :ID_CODBARRAS),0); for SELECT i.controle, I.PRODUTO_CODIGO, P.DESCRICAO, I.OPERADOR, O.NOME, I.DATAHORA, I.LOCALIZACAO_CODIGO, I.CONFERENCIA, I.ESTOQUE_TRANSACAO_REGRA_ID, I.QUANTIDADE, IIF(I.T01 > 0,01, IIF(I.T02 > 0,02, IIF(I.T03 > 0,03, IIF(I.T04 > 0,04, IIF(I.T05 > 0,05, IIF(I.T06 > 0,06, IIF(I.T07 > 0,07, IIF(I.T08 > 0,08, IIF(I.T09 > 0,09, IIF(I.T10 > 0,10, IIF(I.T11 > 0,11, IIF(I.T12 > 0,12, IIF(I.T13 > 0,13, IIF(I.T14 > 0,14, IIF(I.T15 > 0,15, IIF(I.T16 > 0,16, IIF(I.T17 > 0,17, IIF(I.T18 > 0,18, IIF(I.T19 > 0,19, IIF(I.T20 > 0,20, 0)))))))))))))))))))) AS TAMANHO FROM TBESTOQUE_TRANSACAO_ITEM I, TBPRODUTO P, TBUSUARIO O WHERE I.TIPO = 'E' and i.tabela = 'VWESTOQUE_MINIMO_TAMANHO' and i.tabela_nivel = 0 and i.documento = :ID_CODBARRAS and i.estoque_transacao_regra_id > 0 AND P.CODIGO = I.PRODUTO_CODIGO AND O.CODIGO = I.USUARIO_CODIGO INTO :ESTOQUE_ID, :PRODUTO_ID, :PRODUTO_DESCRICAO, :USUARIO_ID, :USUARIO_DESCRICAO, :DATAHORA, :LOCALIZACAO_CODIGO, :CONFERENCIA, :ESTOQUE_TRANSACAO_REGRA_ID, :QUANTIDADE, :TAMANHO do begin IF(LOTE_STATUS = 1)THEN BEGIN SUSPEND; END end END ELSE /* CONFERENCIA DE PRODUÇÃO */ IF(:CONFERENCIA_TIPO = 2)THEN BEGIN for SELECT i.controle, I.PRODUTO_CODIGO, P.DESCRICAO, I.OPERADOR, O.NOME, I.DATAHORA, I.LOCALIZACAO_CODIGO, I.CONFERENCIA, I.ESTOQUE_TRANSACAO_REGRA_ID, I.QUANTIDADE, IIF(I.T01 > 0,01, IIF(I.T02 > 0,02, IIF(I.T03 > 0,03, IIF(I.T04 > 0,04, IIF(I.T05 > 0,05, IIF(I.T06 > 0,06, IIF(I.T07 > 0,07, IIF(I.T08 > 0,08, IIF(I.T09 > 0,09, IIF(I.T10 > 0,10, IIF(I.T11 > 0,11, IIF(I.T12 > 0,12, IIF(I.T13 > 0,13, IIF(I.T14 > 0,14, IIF(I.T15 > 0,15, IIF(I.T16 > 0,16, IIF(I.T17 > 0,17, IIF(I.T18 > 0,18, IIF(I.T19 > 0,19, IIF(I.T20 > 0,20, 0)))))))))))))))))))) AS TAMANHO FROM TBESTOQUE_TRANSACAO_ITEM I, TBPRODUTO P, TBUSUARIO O WHERE I.TABELA = 'TBPEDIDO_ITEM_PROCESSADO' AND I.TABELA_NIVEL = 1 AND I.REMESSA_ITEM_CONTROLE = :ID_CODBARRAS AND I.ESTOQUE_TRANSACAO_REGRA_ID > 0 AND I.TIPO = 'E' AND P.CODIGO = I.PRODUTO_CODIGO AND O.CODIGO = I.USUARIO_CODIGO INTO :ESTOQUE_ID, :PRODUTO_ID, :PRODUTO_DESCRICAO, :USUARIO_ID, :USUARIO_DESCRICAO, :DATAHORA, :LOCALIZACAO_CODIGO, :CONFERENCIA, :ESTOQUE_TRANSACAO_REGRA_ID, :QUANTIDADE, :TAMANHO do begin SUSPEND; end END ELSE /* CONFERENCIA DE ABASTECIMENTO WIP */ IF(:CONFERENCIA_TIPO = 3)THEN BEGIN for SELECT i.controle, I.PRODUTO_CODIGO, P.DESCRICAO, I.OPERADOR, O.NOME, I.DATAHORA, I.LOCALIZACAO_CODIGO, I.CONFERENCIA, I.ESTOQUE_TRANSACAO_REGRA_ID, I.QUANTIDADE, IIF(I.T01 > 0,01, IIF(I.T02 > 0,02, IIF(I.T03 > 0,03, IIF(I.T04 > 0,04, IIF(I.T05 > 0,05, IIF(I.T06 > 0,06, IIF(I.T07 > 0,07, IIF(I.T08 > 0,08, IIF(I.T09 > 0,09, IIF(I.T10 > 0,10, IIF(I.T11 > 0,11, IIF(I.T12 > 0,12, IIF(I.T13 > 0,13, IIF(I.T14 > 0,14, IIF(I.T15 > 0,15, IIF(I.T16 > 0,16, IIF(I.T17 > 0,17, IIF(I.T18 > 0,18, IIF(I.T19 > 0,19, IIF(I.T20 > 0,20, 0)))))))))))))))))))) AS TAMANHO FROM TBESTOQUE_TRANSACAO_ITEM I LEFT JOIN VWREMESSA_CONSUMO C ON C.ID = I.TABELA_ID, TBPRODUTO P, TBUSUARIO O WHERE I.TABELA = 'TBREMESSA_CONSUMO' AND I.TABELA_NIVEL = 0 AND I.TIPO = 'E' AND I.ESTOQUE_TRANSACAO_REGRA_ID > 0 AND O.CODIGO = I.USUARIO_CODIGO AND P.CODIGO = I.PRODUTO_CODIGO AND C.REMESSA_ID = :ID_CODBARRAS INTO :ESTOQUE_ID, :PRODUTO_ID, :PRODUTO_DESCRICAO, :USUARIO_ID, :USUARIO_DESCRICAO, :DATAHORA, :LOCALIZACAO_CODIGO, :CONFERENCIA, :ESTOQUE_TRANSACAO_REGRA_ID, :QUANTIDADE, :TAMANHO do begin SUSPEND; end END ELSE /* CONFERENCIA DE TRANSACAO DE REMESSAS */ IF(:CONFERENCIA_TIPO = 4)THEN BEGIN for SELECT i.controle, I.PRODUTO_CODIGO, P.DESCRICAO, I.OPERADOR, O.NOME, I.DATAHORA, I.LOCALIZACAO_CODIGO, I.CONFERENCIA, I.ESTOQUE_TRANSACAO_REGRA_ID, I.QUANTIDADE, IIF(I.T01 > 0,01, IIF(I.T02 > 0,02, IIF(I.T03 > 0,03, IIF(I.T04 > 0,04, IIF(I.T05 > 0,05, IIF(I.T06 > 0,06, IIF(I.T07 > 0,07, IIF(I.T08 > 0,08, IIF(I.T09 > 0,09, IIF(I.T10 > 0,10, IIF(I.T11 > 0,11, IIF(I.T12 > 0,12, IIF(I.T13 > 0,13, IIF(I.T14 > 0,14, IIF(I.T15 > 0,15, IIF(I.T16 > 0,16, IIF(I.T17 > 0,17, IIF(I.T18 > 0,18, IIF(I.T19 > 0,19, IIF(I.T20 > 0,20, 0)))))))))))))))))))) AS TAMANHO FROM TBESTOQUE_TRANSACAO_ITEM I LEFT JOIN VWREMESSA_CONSUMO C ON C.ID = I.TABELA_ID, TBPRODUTO P, TBUSUARIO O WHERE I.TABELA = 'TBREMESSA_CONSUMO' AND I.TABELA_NIVEL = 0 AND I.TIPO = 'E' AND O.CODIGO = I.USUARIO_CODIGO AND P.CODIGO = I.PRODUTO_CODIGO AND C.REMESSA_ID = :COD_BARRAS INTO :ESTOQUE_ID, :PRODUTO_ID, :PRODUTO_DESCRICAO, :USUARIO_ID, :USUARIO_DESCRICAO, :DATAHORA, :LOCALIZACAO_CODIGO, :CONFERENCIA, :ESTOQUE_TRANSACAO_REGRA_ID, :QUANTIDADE, :TAMANHO do begin SUSPEND; end END END ^ ALTER PROCEDURE SPC_COTA_ORCAMENTARIA( DATA_1 DATE = NULL, DATA_2 DATE = NULL, COTA_GGF VARCHAR(10) = NULL, COTA_VALIDA VARCHAR(10) = NULL, COTA_ZERADA VARCHAR(10) = NULL, USUARIO_ID INTEGER = NULL) RETURNS ( TIPO VARCHAR(10), ID BIGINT, CCUSTO VARCHAR(50), CCUSTO_MASK VARCHAR(50), CCUSTO_DESCRICAO VARCHAR(150), MES INTEGER, ANO INTEGER, PERIODO_DESCRICAO VARCHAR(150), CCONTABIL VARCHAR(50), CCONTABIL_MASK VARCHAR(50), CCONTABIL_DESCRICAO VARCHAR(150), DESTAQUE VARCHAR(10), TOTALIZA VARCHAR(10), NOTIFICA VARCHAR(10), BLOQUEIA VARCHAR(10), VALOR NUMERIC(15,4), EXTRA NUMERIC(15,4), TOTAL NUMERIC(15,4), OUTROS NUMERIC(15,4), UTIL NUMERIC(15,4), PERC_UTIL NUMERIC(15,4), SALDO NUMERIC(15,4), OBSERVACAO_GERAL VARCHAR(2000)) AS DECLARE VARIABLE COTA_TIPO INTEGER; begin IF ( DATA_1 IS NULL OR DATA_2 IS NULL ) THEN BEGIN DATA_1 = EXTRACT(YEAR FROM DATEADD(-1 MONTH TO CURRENT_DATE)) || '.' || EXTRACT(MONTH FROM DATEADD(-1 MONTH TO CURRENT_DATE)) || '.01'; DATA_2 = (DATEADD(1 MONTH TO CAST(EXTRACT(YEAR FROM CURRENT_DATE)||'.'||EXTRACT(MONTH FROM CURRENT_DATE)||'.01' AS DATE))-1); END IF ( COALESCE(USUARIO_ID,0) IS NULL ) THEN BEGIN USUARIO_ID = COALESCE(( SELECT FIRST 1 CODIGO FROM TBUSUARIO U WHERE U.USUARIO = CURRENT_USER),5); END FOR SELECT X.ID, X.CCUSTO, X.CCUSTO_MASK, X.CCUSTO_DESCRICAO, X.MES, X.ANO, X.PERIODO_DESCRICAO, X.CCONTABIL, X.CCONTABIL_MASK, X.CCONTABIL_DESCRICAO, X.DESTAQUE, X.TOTALIZA, X.NOTIFICA, X.BLOQUEIA, X.VALOR, X.EXTRA, X.TOTAL, X.OUTROS, X.UTIL, X.PERC_UTIL, X.SALDO, TRIM('COTA') TIPO, X.OBSERVACAO_GERAL FROM (SELECT A.ID, COALESCE(A.DESTAQUE,'0')DESTAQUE, COALESCE(A.TOTALIZA,'0')TOTALIZA, COALESCE(A.BLOQUEIO,'0')BLOQUEIA, COALESCE(A.NOTIFICACAO,'0')NOTIFICA, A.CCUSTO, FN_CCUSTO_MASK(A.CCUSTO) CCUSTO_MASK, FN_CCUSTO_DESCRICAO(A.CCUSTO) CCUSTO_DESCRICAO, A.MES, A.ANO, TRIM(FN_MES_DESCRICAO(A.MES) || '/' || A.ANO) PERIODO_DESCRICAO, B.CONTA CCONTABIL, UPPER(B.DESCRICAO) CCONTABIL_DESCRICAO, FN_CCONTABIL_MASK(B.CONTA) CCONTABIL_MASK, A.VALOR, A.EXTRA, (A.VALOR+A.EXTRA) TOTAL, A.OUTROS, (A.VALOR+A.EXTRA-A.OUTROS-A.SALDO)UTIL, IIF(A.VALOR+A.EXTRA > 0, ((1-(A.SALDO/NULLIF((A.VALOR+A.EXTRA),0)))*100), IIF(A.VALOR+A.EXTRA = 0 AND A.SALDO < 0, 100, 0)) PERC_UTIL, A.SALDO, A.OBSERVACAO_GERAL FROM TBCCUSTO_COTA A, TBCONTACONTABIL B, TBUSUARIO_CCUSTO D WHERE A.STATUSEXCLUSAO = '0' AND B.CONTA = A.CONTACONTABIL AND A.CCUSTO = D.CCUSTO AND D.USUARIO_ID = COALESCE(:USUARIO_ID,5) /* HAROLDO */ AND CAST((A.ANO || '.' || A.MES || '.01') AS DATE) BETWEEN :DATA_1 AND :DATA_2 AND IIF(:COTA_VALIDA = '1' AND :COTA_ZERADA = '1',(A.VALOR > 0 OR A.VALOR = 0 ), IIF(:COTA_ZERADA = '1',(A.VALOR = 0), IIF(:COTA_VALIDA = '1',(A.VALOR > 0),FALSE))) )X INTO ID , CCUSTO , CCUSTO_MASK , CCUSTO_DESCRICAO , MES , ANO , PERIODO_DESCRICAO , CCONTABIL , CCONTABIL_MASK , CCONTABIL_DESCRICAO, DESTAQUE , TOTALIZA , NOTIFICA , BLOQUEIA , VALOR , EXTRA , TOTAL , OUTROS , UTIL , PERC_UTIL , SALDO , TIPO , OBSERVACAO_GERAL DO BEGIN /* PROCEDURE TEXT */ SUSPEND; END IF ( COALESCE(COTA_GGF,'0') = '1' ) THEN BEGIN FOR SELECT 99999 || MES || ANO || CCUSTO ID, CCUSTO, CCUSTO_MASK, CCUSTO_DESCRICAO, MES, ANO, PERIODO_DESCRICAO, CCONTABIL, CCONTABIL_MASK, CCONTABIL_DESCRICAO, DESTAQUE, TOTALIZA, 0 NOTIFICA, 0 BLOQUEIA, VALOR, EXTRA, VALOR TOTAL, 0 OUTROS, UTIL, PERC_UTIL, SALDO, TRIM('GGF') TIPO, '' OBSERVACAO_GERAL FROM ( SELECT GGF, CCUSTO, CCUSTO_MASK, CCUSTO_DESCRICAO, MES, ANO, PERIODO_DESCRICAO, CCONTABIL, CCONTABIL_MASK, CCONTABIL_DESCRICAO, DESTAQUE, TOTALIZA, COALESCE(CAST(SUBSTRING(GGF FROM 1 FOR 30) AS NUMERIC(15,4)),0) VALOR, COALESCE(CAST(SUBSTRING(GGF FROM 31 FOR 30) AS NUMERIC(15,4)),0) UTIL, COALESCE(CAST(SUBSTRING(GGF FROM 61 FOR 30) AS NUMERIC(15,4)),0) PERC_UTIL, COALESCE(CAST(SUBSTRING(GGF FROM 91 FOR 30) AS NUMERIC(15,4)),0) SALDO, COALESCE(CAST(SUBSTRING(GGF FROM 121 FOR 30) AS NUMERIC(15,4)),0) EXTRA FROM ( SELECT (SELECT LPAD(SUM(VALOR_COTA),30)|| LPAD(SUM(VALOR_UTILIZADO),30)|| LPAD(SUM(PERCENTUAL_UTILIZADO),30)|| LPAD(SUM(SALDO),30)|| LPAD(SUM(VALOR_CREDITO),30) FROM SPC_COTA_GGF(CCUSTO,CAST(ANO||'.'||MES||'.01' AS DATE),(DATEADD(1 MONTH TO CAST(ANO||'.'||MES||'.01' AS DATE))-1))) GGF, CCUSTO, CCUSTO_MASK, CCUSTO_DESCRICAO, MES, ANO, PERIODO_DESCRICAO, CCONTABIL, CCONTABIL_MASK, CCONTABIL_DESCRICAO, DESTAQUE, TOTALIZA FROM ( SELECT DISTINCT Y.CCUSTO, Y.CCUSTO_MASK, Y.CCUSTO_DESCRICAO, Y.MES, Y.ANO, Y.PERIODO_DESCRICAO, Y.CCONTABIL, Y.CCONTABIL_MASK, Y.CCONTABIL_DESCRICAO, Y.DESTAQUE, Y.TOTALIZA FROM (SELECT X.ID, X.CCUSTO, X.CCUSTO_MASK, X.CCUSTO_DESCRICAO, X.MES, X.ANO, X.PERIODO_DESCRICAO, X.CCONTABIL, X.CCONTABIL_MASK, X.CCONTABIL_DESCRICAO, X.DESTAQUE, X.TOTALIZA FROM (SELECT A.ID, 0 DESTAQUE, 0 TOTALIZA, A.CCUSTO, FN_CCUSTO_MASK(A.CCUSTO) CCUSTO_MASK, FN_CCUSTO_DESCRICAO(A.CCUSTO) CCUSTO_DESCRICAO, A.MES, A.ANO, TRIM(FN_MES_DESCRICAO(A.MES) || '/' || A.ANO) PERIODO_DESCRICAO, 99999999999999 CCONTABIL, 'G.G.F./G.G.A.' CCONTABIL_DESCRICAO, '' CCONTABIL_MASK FROM TBCCUSTO_COTA A, TBCONTACONTABIL B, TBCENTRO_DE_CUSTO C, TBUSUARIO_CCUSTO D WHERE A.STATUSEXCLUSAO = '0' AND B.CONTA = A.CONTACONTABIL AND A.CCUSTO = C.CODIGO AND C.CODIGO = D.CCUSTO AND D.USUARIO_ID = COALESCE(:USUARIO_ID,5) /* HAROLDO */ AND CAST((A.ANO || '.' || A.MES || '.01') AS DATE) BETWEEN :DATA_1 AND :DATA_2 AND IIF(:COTA_VALIDA = '1' AND :COTA_ZERADA = '1',(A.VALOR > 0 OR A.VALOR = 0 ), IIF(:COTA_ZERADA = '1',(A.VALOR = 0), IIF(:COTA_VALIDA = '1',(A.VALOR > 0),TRUE))) )X)Y ORDER BY CCUSTO, ANO, MES, CCONTABIL )Z )W )K INTO ID , CCUSTO , CCUSTO_MASK , CCUSTO_DESCRICAO , MES , ANO , PERIODO_DESCRICAO , CCONTABIL , CCONTABIL_MASK , CCONTABIL_DESCRICAO, DESTAQUE , TOTALIZA , NOTIFICA , BLOQUEIA , VALOR , EXTRA , TOTAL , OUTROS , UTIL , PERC_UTIL , SALDO , TIPO , OBSERVACAO_GERAL DO BEGIN SUSPEND; END END end ^ ALTER PROCEDURE SPC_FEEF( MES INTEGER, ANO INTEGER) RETURNS ( REFERENCIA VARCHAR(10), ORDEM CHAR(3), NATUREZA CHAR, TIPO VARCHAR(50), VALOR NUMERIC(15,2)) AS declare variable data_1 date; declare variable data_2 date; declare variable subtotal_debito numeric(15,2); declare variable subtotal_credito numeric(15,2); declare variable subtotal_apuracao numeric(15,2); declare variable total_outras_deducoes numeric(15,2); declare variable base_promissoria numeric(15,2); declare variable perc_promissoria numeric(15,2); declare variable promissoria numeric(15,2); declare variable imposto_a_pagar numeric(15,2); declare variable total_devido numeric(15,2); declare variable v_ano integer; declare variable v_data_1 date; declare variable v_data_2 date; declare variable v_subtotal_debito numeric(15,2); declare variable v_subtotal_credito numeric(15,2); declare variable v_subtotal_apuracao numeric(15,2); declare variable v_total_outras_deducoes numeric(15,2); declare variable v_base_promissoria numeric(15,2); declare variable v_perc_promissoria numeric(15,2); declare variable v_promissoria numeric(15,2); declare variable v_imposto_a_pagar numeric(15,2); declare variable v_total_devido numeric(15,2); declare variable perc_crescimento numeric(15,2); declare variable perc_multa numeric(15,2); declare variable total_multa numeric(15,2); declare variable meta1 numeric(15,2); declare variable meta2 numeric(15,2); declare variable meta3 numeric(15,2); declare variable meta4 numeric(15,2); declare variable meta5 numeric(15,2); declare variable media_imposto_faturado numeric(15,2); declare variable media_valor_unitario numeric(15,2); declare variable dif_aliq_icms numeric(15,2); declare variable v_dif_aliq_icms numeric(15,2); Begin -------------------------------------------------------------------------------- v_ano = ano - 1; v_data_1 = Cast('1.'||:Mes||'.'||:v_ano as Date); v_data_2 = (SELECT DATEADD(-EXTRACT(DAY FROM DATEADD(1 MONTH TO Cast('1.'||:Mes||'.'||:v_ano as Date) )) DAY TO DATEADD(1 MONTH TO Cast('1.'||:Mes||'.'||:v_ano as Date))) FROM RDB$DATABASE); v_SubTotal_Debito = 0; v_SubTotal_Credito = 0; v_SubTotal_Apuracao = 0; v_Total_Outras_Deducoes = 0; v_Base_Promissoria = 0; v_Perc_Promissoria = 0; v_Promissoria = 0; v_Imposto_a_Pagar = 0; v_Total_Devido = 0; v_Dif_Aliq_Icms = 0; FOR SELECT 'A' Ordem, 'D' Natureza, 'Icms NF.de Saída' TIPO, SUM(A.fiscal_valor_icms) VALOR_IMPOSTO FROM tbnfs_item A, TBNFS B WHERE A.nfs_controle = B.CONTROLE AND B.sped = '1' AND B.NATUREZA = 1 AND B.situacao = 2 AND B.estabelecimento_codigo = 1 and B.Data_Emissao between :v_Data_1 and :v_Data_2 AND A.valor_contabil > 0 Group BY 1,2,3 UNION Select 'B' Ordem, 'D' Natureza, 'Outros Débitos de Icms' TIPO, Coalesce(Sum(A.VALOR),0) Valor_Imposto From TbDief_Apuracao A, TBFISCAL_OCORRENCIA B, TbEstabelecimento E Where A.OCORRENCIA_CODIGO = B.CODIGO and A.Estabelecimento_Codigo = E.Codigo and E.Uf = Substring(B.Tab_51 from 1 for 2) and A.Estabelecimento_Codigo = 1 and A.Ano = :v_Ano and A.Mes = :Mes and A.Ocorrencia_Codigo Like 'OD%' Group BY 1,2,3 INTO :ORDEM, :NATUREZA, :TIPO, :VALOR Do Begin v_SubTotal_Debito = v_SubTotal_Debito + :VALOR; referencia = lPad(:MES,2,'0')||'/'||:V_ANO; SUSPEND; End referencia = lPad(:MES,2,'0')||'/'||:V_ANO; ORDEM = 'C'; NATUREZA = '='; TIPO = 'SUB-TOTAL DÉBITOS (A+B)'; VALOR = Coalesce(v_SubTotal_Debito,0); SUSPEND; v_Dif_Aliq_Icms = Coalesce(( Select Coalesce(Sum(A.VALOR),0) Dif_Aliq_Icms From TbDief_Apuracao A, TBFISCAL_OCORRENCIA B, TbEstabelecimento E Where A.OCORRENCIA_CODIGO = B.CODIGO and A.Estabelecimento_Codigo = E.Codigo and E.Uf = Substring(B.Tab_51 from 1 for 2) and A.Estabelecimento_Codigo = 1 and A.Ano = :v_Ano and A.Mes = :Mes and (A.Ano > 2017 or (A.Ano = 2017 and A.Mes >= 9)) and A.Ocorrencia_Codigo in ('OD0002','OD9999')),0); FOR SELECT 'D' Ordem, 'C' Natureza, 'Icms NF.de Entrada' TIPO, SUM(A.fiscal_valor_icms) VALOR_IMPOSTO FROM tbnfe_item A, TBNFe B WHERE A.nfe_controle = B.CONTROLE AND B.sped = '1' AND ((B.NATUREZA = 1 AND B.situacao = 2) or (B.NATUREZA = 2 AND B.situacao = 1)) AND B.estabelecimento_codigo = 1 and B.Data_Fiscal between :v_Data_1 and :v_Data_2 AND A.valor_contabil > 0 Group BY 1,2,3 UNION Select 'E' Ordem, 'C' Natureza, 'Outros Créditos de Icms' TIPO, Coalesce(Sum(A.VALOR),0) Valor_Imposto From TbDief_Apuracao A, TBFISCAL_OCORRENCIA B, TbEstabelecimento E Where A.OCORRENCIA_CODIGO = B.CODIGO and A.Estabelecimento_Codigo = E.Codigo and E.Uf = Substring(B.Tab_51 from 1 for 2) and A.Estabelecimento_Codigo = 1 and A.Ano = :v_Ano and A.Mes = :Mes and A.Ocorrencia_Codigo Like 'OC%' INTO :ORDEM, :NATUREZA, :TIPO, :VALOR Do Begin v_SubTotal_Credito = v_SubTotal_Credito + :VALOR; referencia = lPad(:MES,2,'0')||'/'||:V_ANO; SUSPEND; End referencia = lPad(:MES,2,'0')||'/'||:V_ANO; ORDEM = 'F'; NATUREZA = '='; TIPO = 'SUB-TOTAL CRÉDITOS (D+E)'; VALOR = Coalesce(v_SubTotal_Credito,0); SUSPEND; v_SubTotal_Apuracao = v_SubTotal_Debito - v_SubTotal_Credito; referencia = lPad(:MES,2,'0')||'/'||:V_ANO; ORDEM = 'G'; NATUREZA = '='; TIPO = 'SALDO DEVEDOR (C-F)'; VALOR = Coalesce(v_SubTotal_Apuracao,0); SUSPEND; /* referencia = lPad(:MES,2,'0')||'/'||:V_ANO; ORDEM = '*'; NATUREZA = ''; TIPO = '(Diferencial de Icms)'; VALOR = Coalesce(v_Dif_Aliq_Icms,0); SUSPEND; */ FOR SELECT 'H' Ordem, 'D' Natureza, 'Outras Deduções' TIPO, SUM(A.fiscal_valor_icms*(P.Feef_Perc_Deducao/100.00)) VALOR_IMPOSTO FROM tbnfs_item A, TBNFS B, TBPRODUTO P, TbFamilia F WHERE A.nfs_controle = B.CONTROLE AND A.produto_codigo = P.CODIGO AND P.FAMILIA_CODIGO = F.CODIGO AND B.sped = '1' AND B.NATUREZA = 1 AND B.situacao = 2 AND B.estabelecimento_codigo = 1 and B.Data_Emissao between :v_Data_1 and :v_Data_2 AND A.valor_contabil > 0 AND(P.FEEF = '1' or F.FEEF = '1') Group BY 1,2,3 INTO :ORDEM, :NATUREZA, :TIPO, :VALOR Do Begin VALOR = VALOR + :v_Dif_Aliq_Icms; v_Total_Outras_Deducoes = v_Total_Outras_Deducoes + :VALOR; referencia = lPad(:MES,2,'0')||'/'||:V_ANO; SUSPEND; End FOR SELECT First 1 'I' Ordem, 'D' Natureza, 'UC ('||Trunc(FF.UC_Quantidade)||'x'||FF.UC_Fator||')' TIPO, FF.UC_Quantidade * FF.UC_Fator VALOR FROM TbFEEF FF WHERE FF.Ano = :v_Ano and FF.Mes = :Mes and FF.Estabelecimento_Id = 1 INTO :ORDEM, :NATUREZA, :TIPO, :VALOR Do Begin v_Total_Outras_Deducoes = v_Total_Outras_Deducoes + :VALOR; referencia = lPad(:MES,2,'0')||'/'||:V_ANO; SUSPEND; End v_Base_Promissoria = v_SubTotal_Apuracao - v_Total_Outras_Deducoes; referencia = lPad(:MES,2,'0')||'/'||:V_ANO; ORDEM = 'J'; NATUREZA = '='; TIPO = 'BASE DE CÁLCULO PROMISSÓRIA (G-H-I)'; VALOR = Coalesce(v_Base_Promissoria,0); SUSPEND; v_Perc_Promissoria = Coalesce((SELECT First 1 FF.Perc_Promissoria FROM TbFEEF FF WHERE FF.Ano = :v_Ano and FF.Mes = :Mes and FF.Estabelecimento_Id = 1),100.00); v_Promissoria = v_Perc_Promissoria/100.00 * v_Base_Promissoria; referencia = lPad(:MES,2,'0')||'/'||:V_ANO; ORDEM = 'K'; NATUREZA = '='; TIPO = 'PERC.PROMISSÓRIA (%)'; VALOR = Coalesce(v_Perc_Promissoria,0); SUSPEND; referencia = lPad(:MES,2,'0')||'/'||:V_ANO; ORDEM = 'L'; NATUREZA = '='; TIPO = 'VALOR PROMISSÓRIA (JxK)'; VALOR = Coalesce(v_Promissoria,0); SUSPEND; v_Imposto_a_Pagar = v_Base_Promissoria - v_Promissoria; referencia = lPad(:MES,2,'0')||'/'||:V_ANO; ORDEM = 'M'; NATUREZA = '='; TIPO = 'IMPOSTO A PAGAR (J-L)'; VALOR = Coalesce(v_Imposto_a_Pagar,0); SUSPEND; v_Total_Devido = v_Imposto_a_Pagar + v_Total_Outras_Deducoes; referencia = lPad(:MES,2,'0')||'/'||:V_ANO; ORDEM = 'N'; NATUREZA = '='; TIPO = 'TOTAL DEVIDO (M+H+I)'; VALOR = Coalesce(v_Total_Devido,0); SUSPEND; -------------------------------------------------------------------------------- data_1 = Cast('1.'||:Mes||'.'||:Ano as Date); data_2 = (SELECT DATEADD(-EXTRACT(DAY FROM DATEADD(1 MONTH TO Cast('1.'||:Mes||'.'||:Ano as Date) )) DAY TO DATEADD(1 MONTH TO Cast('1.'||:Mes||'.'||:Ano as Date))) FROM RDB$DATABASE); SubTotal_Debito = 0; SubTotal_Credito = 0; SubTotal_Apuracao = 0; Total_Outras_Deducoes = 0; Base_Promissoria = 0; Perc_Promissoria = 0; Promissoria = 0; Imposto_a_Pagar = 0; Total_Devido = 0; Dif_Aliq_Icms = 0; FOR SELECT 'A' Ordem, 'D' Natureza, 'Icms NF.de Saída' TIPO, SUM(A.fiscal_valor_icms) FROM tbnfs_item A, TBNFS B WHERE A.nfs_controle = B.CONTROLE AND B.sped = '1' AND B.NATUREZA = 1 AND B.situacao = 2 AND B.estabelecimento_codigo = 1 and B.Data_Emissao between :Data_1 and :Data_2 AND A.valor_contabil > 0 Group BY 1,2,3 UNION Select 'B' Ordem, 'D' Natureza, 'Outros Débitos de Icms' TIPO, Coalesce(Sum(A.VALOR),0) Valor_Imposto From TbDief_Apuracao A, TBFISCAL_OCORRENCIA B, TbEstabelecimento E Where A.OCORRENCIA_CODIGO = B.CODIGO and A.Estabelecimento_Codigo = E.Codigo and E.Uf = Substring(B.Tab_51 from 1 for 2) and A.Estabelecimento_Codigo = 1 and A.Ano = :Ano and A.Mes = :Mes and A.Ocorrencia_Codigo Like 'OD%' Group BY 1,2,3 INTO :ORDEM, :NATUREZA, :TIPO, :VALOR Do Begin SubTotal_Debito = SubTotal_Debito + :VALOR; referencia = lPad(:MES,2,'0')||'/'||:ANO; SUSPEND; End referencia = lPad(:MES,2,'0')||'/'||:ANO; ORDEM = 'C'; NATUREZA = '='; TIPO = 'SUB-TOTAL DÉBITOS (A+B)'; VALOR = Coalesce(SubTotal_Debito,0); SUSPEND; Dif_Aliq_Icms = Coalesce(( Select Coalesce(Sum(A.VALOR),0) Dif_Aliq_Icms From TbDief_Apuracao A, TBFISCAL_OCORRENCIA B, TbEstabelecimento E Where A.OCORRENCIA_CODIGO = B.CODIGO and A.Estabelecimento_Codigo = E.Codigo and E.Uf = Substring(B.Tab_51 from 1 for 2) and A.Estabelecimento_Codigo = 1 and A.Ano = :Ano and A.Mes = :Mes and (A.Ano > 2017 or (A.Ano = 2017 and A.Mes >= 9)) and A.Ocorrencia_Codigo in ('OD0002','OD9999')),0); FOR SELECT 'D' Ordem, 'C' Natureza, 'Icms NF.de Entrada' TIPO, SUM(A.fiscal_valor_icms) VALOR_IMPOSTO FROM tbnfe_item A, TBNFe B WHERE A.nfe_controle = B.CONTROLE AND B.sped = '1' AND ((B.NATUREZA = 1 AND B.situacao = 2) or (B.NATUREZA = 2 AND B.situacao = 1)) AND B.estabelecimento_codigo = 1 and B.Data_Fiscal between :Data_1 and :Data_2 AND A.valor_contabil > 0 Group BY 1,2,3 UNION Select 'E' Ordem, 'C' Natureza, 'Outros Créditos de Icms' TIPO, Coalesce(Sum(A.VALOR),0) Valor_Imposto From TbDief_Apuracao A, TBFISCAL_OCORRENCIA B, TbEstabelecimento E Where A.OCORRENCIA_CODIGO = B.CODIGO and A.Estabelecimento_Codigo = E.Codigo and E.Uf = Substring(B.Tab_51 from 1 for 2) and A.Estabelecimento_Codigo = 1 and A.Ano = :Ano and A.Mes = :Mes and A.Ocorrencia_Codigo Like 'OC%' INTO :ORDEM, :NATUREZA, :TIPO, :VALOR Do Begin SubTotal_Credito = SubTotal_Credito + :VALOR; referencia = lPad(:MES,2,'0')||'/'||:ANO; SUSPEND; End referencia = lPad(:MES,2,'0')||'/'||:ANO; ORDEM = 'F'; NATUREZA = '='; TIPO = 'SUB-TOTAL CRÉDITOS (D+E)'; VALOR = Coalesce(SubTotal_Credito,0); SUSPEND; SubTotal_Apuracao = SubTotal_Debito - SubTotal_Credito; referencia = lPad(:MES,2,'0')||'/'||:ANO; ORDEM = 'G'; NATUREZA = '='; TIPO = 'SALDO DEVEDOR (C-F)'; VALOR = Coalesce(SubTotal_Apuracao,0); SUSPEND; /* referencia = lPad(:MES,2,'0')||'/'||:ANO; ORDEM = '*'; NATUREZA = ''; TIPO = '(Diferencial de Icms)'; VALOR = Coalesce(Dif_Aliq_Icms,0); SUSPEND; */ FOR SELECT 'H' Ordem, 'D' Natureza, 'Outras Deduções' TIPO, SUM(A.fiscal_valor_icms*(P.Feef_Perc_Deducao/100.00)) VALOR_IMPOSTO FROM tbnfs_item A, TBNFS B, TBPRODUTO P, TbFamilia F WHERE A.nfs_controle = B.CONTROLE AND A.produto_codigo = P.CODIGO AND P.FAMILIA_CODIGO = F.CODIGO AND B.sped = '1' AND B.NATUREZA = 1 AND B.situacao = 2 AND B.estabelecimento_codigo = 1 and B.Data_Emissao between :Data_1 and :Data_2 AND A.valor_contabil > 0 AND(P.FEEF = '1' or F.FEEF = '1') Group BY 1,2,3 INTO :ORDEM, :NATUREZA, :TIPO, :VALOR Do Begin VALOR = VALOR + :Dif_Aliq_Icms; Total_Outras_Deducoes = Total_Outras_Deducoes + :VALOR; referencia = lPad(:MES,2,'0')||'/'||:ANO; SUSPEND; End FOR SELECT First 1 'I' Ordem, 'D' Natureza, 'UC ('||Trunc(FF.UC_Quantidade)||'x'||FF.UC_Fator||')' TIPO, FF.UC_Quantidade * FF.UC_Fator VALOR FROM TbFEEF FF WHERE FF.Ano = :Ano and FF.Mes = :Mes and FF.Estabelecimento_Id = 1 INTO :ORDEM, :NATUREZA, :TIPO, :VALOR Do Begin Total_Outras_Deducoes = Total_Outras_Deducoes + :VALOR; referencia = lPad(:MES,2,'0')||'/'||:ANO; SUSPEND; End Base_Promissoria = SubTotal_Apuracao - Total_Outras_Deducoes; referencia = lPad(:MES,2,'0')||'/'||:ANO; ORDEM = 'J'; NATUREZA = '='; TIPO = 'BASE DE CÁLCULO PROMISSÓRIA (G-H-I)'; VALOR = Coalesce(Base_Promissoria,0); SUSPEND; Perc_Promissoria = Coalesce((SELECT First 1 FF.Perc_Promissoria FROM TbFEEF FF WHERE FF.Ano = :Ano and FF.Mes = :Mes and FF.Estabelecimento_Id = 1),100.00); Promissoria = Perc_Promissoria/100.00 * Base_Promissoria; referencia = lPad(:MES,2,'0')||'/'||:ANO; ORDEM = 'K'; NATUREZA = '='; TIPO = 'PERC.PROMISSÓRIA (%)'; VALOR = Coalesce(Perc_Promissoria,0); SUSPEND; referencia = lPad(:MES,2,'0')||'/'||:ANO; ORDEM = 'L'; NATUREZA = '='; TIPO = 'VALOR PROMISSÓRIA (JxK)'; VALOR = Coalesce(Promissoria,0); SUSPEND; Imposto_a_Pagar = Base_Promissoria - Promissoria; referencia = lPad(:MES,2,'0')||'/'||:ANO; ORDEM = 'M'; NATUREZA = '='; TIPO = 'IMPOSTO A PAGAR (J-L)'; VALOR = Coalesce(Imposto_a_Pagar,0); SUSPEND; Total_Devido = Imposto_a_Pagar + Total_Outras_Deducoes; referencia = lPad(:MES,2,'0')||'/'||:ANO; ORDEM = 'N'; NATUREZA = '='; TIPO = 'TOTAL DEVIDO (M+H+I)'; VALOR = Coalesce(Total_Devido,0); SUSPEND; -------------------------------------------------------------------------------- Perc_Crescimento = 0; Perc_Multa = 0; Total_Multa = 0; Perc_Crescimento = (Total_Devido / v_Total_Devido * 100.00) - 100.00; referencia = 'RESULTADO'; ORDEM = ''; NATUREZA = '='; TIPO = 'PERC.CRESCIMENTO (%)'; VALOR = Coalesce(Perc_Crescimento,0); SUSPEND; if (:Perc_Crescimento < 10.00) then Begin Perc_Multa = 10.00; if (:Perc_Crescimento > 0.00) then begin Perc_Multa = 10.00 - Perc_Crescimento; end referencia = 'RESULTADO'; ORDEM = ''; NATUREZA = '='; TIPO = 'PERC.MULTA (%)'; VALOR = Coalesce(Perc_Multa,0); SUSPEND; Total_Multa = Promissoria * (Perc_Multa/100.00); referencia = 'RESULTADO'; ORDEM = ''; NATUREZA = '='; TIPO = 'VALOR DA MULTA'; VALOR = Coalesce(Total_Multa,0); SUSPEND; Meta1 = v_Total_Devido * (1.10); referencia = 'RESULTADO'; ORDEM = ''; NATUREZA = '='; TIPO = 'META DE IMPOSTO A PAGAR'; VALOR = Coalesce(Meta1,0); SUSPEND; Meta2 = Meta1 - Total_Devido; referencia = 'RESULTADO'; ORDEM = ''; NATUREZA = '='; TIPO = 'VALOR PARA ATINGIMENTO DE META'; VALOR = Coalesce(Meta2,0); SUSPEND; Meta3 = Meta2 / (1 - (Perc_Promissoria/100.00)); referencia = 'RESULTADO'; ORDEM = ''; NATUREZA = '='; TIPO = 'ESTIMATIVA DE ICMS A DEBITAR EM NF.'; VALOR = Coalesce(Meta3,0); SUSPEND; FOR SELECT AVG(A.fiscal_valor_icms/A.valor_basecalculo_icms), AVG(A.Valor_Total / A.Quantidade) FROM tbnfs_item A, TBNFS B WHERE A.nfs_controle = B.CONTROLE AND B.sped = '1' AND B.NATUREZA = 1 AND B.situacao = 2 AND B.estabelecimento_codigo = 1 and B.Data_Emissao between :Data_1 and :Data_2 AND A.valor_contabil > 0 AND A.valor_basecalculo_icms > 0 INTO :Media_Imposto_Faturado, :Media_Valor_Unitario DO BEGIN Meta4 = Meta3 / Media_Imposto_Faturado; referencia = 'RESULTADO'; ORDEM = ''; NATUREZA = '='; TIPO = 'ESTIMATIVA DE FATURAMENTO EM REAIS'; VALOR = Coalesce(Meta4,0); SUSPEND; Meta5 = Meta4 / Media_Valor_Unitario; referencia = 'RESULTADO'; ORDEM = ''; NATUREZA = '='; TIPO = 'ESTIMATIVA DE FATURAMENTO EM QUANTIDADE'; VALOR = Coalesce(Meta5,0); SUSPEND; END End END ^ ALTER PROCEDURE SPC_FERRAMENTA_DISPONIVEL( I_FERRAMENTA_ID INTEGER, I_DATAHORA_INICIO TIMESTAMP) RETURNS ( GRUPO_ID INTEGER, ID INTEGER, DESCRICAO VARCHAR(200), SERIE VARCHAR(80), MATRIZ_ID INTEGER, MATRIZ_DESCRICAO VARCHAR(80), LINHA_ID INTEGER, TAMANHO INTEGER, LARGURA NUMERIC(18,4), COMPRIMENTO NUMERIC(18,4), ALTURA NUMERIC(18,4), DATA DATE, OBSERVACAO VARCHAR(400), TEMPO_SETUP NUMERIC(18,4), TEMPO_SETUP_AQUECIMENTO NUMERIC(18,4), STATUS_CONFLITO INTEGER) AS declare variable gp_id integer; declare variable up_id integer; declare variable estacao integer; declare variable first_datahora_inicio timestamp; declare variable last_datahora_fim timestamp; BEGIN SELECT GP_ID, UP_ID, ESTACAO, FIRST_DATAHORA_INICIO, LAST_DATAHORA_FIM FROM ( SELECT FIRST 1 P.GP_ID, P.UP_ID, P.ESTACAO, X.ID FIRST_ID, FIRST_VALUE(X.ID) OVER(ORDER BY X.DATAHORA_INICIO DESC) LAST_ID, X.DATAHORA_INICIO FIRST_DATAHORA_INICIO, FIRST_VALUE(X.DATAHORA_FIM) OVER(ORDER BY X.DATAHORA_INICIO DESC) LAST_DATAHORA_FIM FROM SPC_FERRAMENTA_SEQUENCIA_SETUP(:I_FERRAMENTA_ID,:I_DATAHORA_INICIO) X, TBPROGRAMACAO P WHERE P.ID = X.ID ORDER BY X.DATAHORA_INICIO) INTO :GP_ID, :UP_ID, :ESTACAO, :FIRST_DATAHORA_INICIO, :LAST_DATAHORA_FIM; FOR SELECT GRUPO_ID, ID, DESCRICAO, SERIE, MATRIZ_ID, MATRIZ_DESCRICAO, LINHA_ID, TAMANHO, LARGURA, COMPRIMENTO, ALTURA, DATA, OBSERVACAO, TEMPO_SETUP, TEMPO_SETUP_AQUECIMENTO, STATUS_CONFLITO FROM ( SELECT F.GRUPO_ID, F.ID, F.DESCRICAO, F.SERIE, F.MATRIZ_ID, (SELECT FIRST 1 M.DESCRICAO FROM TBMATRIZ M WHERE M.CODIGO = F.MATRIZ_ID) MATRIZ_DESCRICAO, LPAD(I.LINHA_ID,4,'0') LINHA_ID, I.TAMANHO, F.LARG LARGURA, F.COMP COMPRIMENTO, F.ALT ALTURA, F.DATA, F.OBSERVACAO, F.TEMPO_SETUP, F.TEMPO_SETUP_AQUECIMENTO, COALESCE((SELECT FIRST 1 DATAHORA_INICIO FROM TBPROGRAMACAO P WHERE P.FERRAMENTA_ID = F.ID AND P.DATAHORA_INICIO > '01.01.2010' AND P.STATUS IN ('0','1') ORDER BY DATAHORA_INICIO),CAST('01.01.2000 00:00' AS TIMESTAMP)) DATAHORA_INICIO, COALESCE((SELECT FIRST 1 1 FROM TBPROGRAMACAO W WHERE W.FERRAMENTA_ID = F.ID AND W.STATUS IN (0,2) AND ( FO.DATAHORA_INICIO BETWEEN W.DATAHORA_INICIO AND W.DATAHORA_FIM OR FO.DATAHORA_FIM BETWEEN W.DATAHORA_INICIO AND W.DATAHORA_FIM OR W.DATAHORA_INICIO BETWEEN FO.DATAHORA_INICIO AND FO.DATAHORA_FIM OR W.DATAHORA_FIM BETWEEN FO.DATAHORA_INICIO AND FO.DATAHORA_FIM) ),0) AS STATUS_CONFLITO FROM TBFERRAMENTARIA F, TBFERRAMENTARIA_ITEM I, (SELECT X.LINHA_ID, I.TAMANHO, X.MATRIZ_ID, X.UP_ID, X.ESTACAO, X.FERRAMENTA_ID, X.LARGURA, X.COMPRIMENTO, X.ALTURA, X.DATAHORA_INICIO, X.DATAHORA_FIM FROM ( SELECT SU.UP_ID, SU.ID ESTACAO, F.MATRIZ_ID, DH.DATAHORA_INICIO, DH.DATAHORA_FIM, F.ID FERRAMENTA_ID, SU.LARG LARGURA, SU.COMP COMPRIMENTO, SU.ALT ALTURA, (SELECT FIRST 1 M.LINHA_CODIGO LINHA_ID FROM TBPROGRAMACAO P, VWREMESSA_TALAO T, TBMODELO M WHERE M.CODIGO = T.MODELO_ID AND P.TIPO = 'A' AND P.TABELA_ID = T.ID AND P.DATAHORA_INICIO >= DH.DATAHORA_INICIO AND P.DATAHORA_FIM <= DH.DATAHORA_FIM AND P.UP_ID = :UP_ID AND P.ESTACAO = :ESTACAO and p.ferramenta_id = f.id )LINHA_ID FROM TBFERRAMENTARIA F, TBSUB_UP SU, (SELECT FIRST 1 CAST(:FIRST_DATAHORA_INICIO AS TIMESTAMP)DATAHORA_INICIO, CAST(:LAST_DATAHORA_FIM AS TIMESTAMP)DATAHORA_FIM FROM RDB$DATABASE) DH WHERE F.ID = :I_FERRAMENTA_ID AND SU.UP_ID = :UP_ID AND SU.ID = :ESTACAO) X, TBFERRAMENTARIA_ITEM I WHERE I.FERRAMENTARIA_ID = X.FERRAMENTA_ID AND I.LINHA_ID = X.LINHA_ID) FO WHERE F.STATUS = '1' --AND COALESCE(F.SITUACAO,'E') = 'E' AND F.ID = I.FERRAMENTARIA_ID AND F.ID <> FO.FERRAMENTA_ID AND I.LINHA_ID = FO.LINHA_ID AND I.TAMANHO = FO.TAMANHO --AND F.MATRIZ_ID = FO.MATRIZ_ID AND F.LARG <= FO.LARGURA AND F.COMP <= FO.COMPRIMENTO AND F.ALT <= FO.ALTURA AND F.LARG > 0 AND F.COMP > 0 AND F.ALT > 0 ORDER BY LARG DESC, COMP DESC, ALT DESC, SERIE ) Z INTO :GRUPO_ID, :ID, :DESCRICAO, :SERIE, :MATRIZ_ID, :MATRIZ_DESCRICAO, :LINHA_ID, :TAMANHO, :LARGURA, :COMPRIMENTO, :ALTURA, :DATA, :OBSERVACAO, :TEMPO_SETUP, :TEMPO_SETUP_AQUECIMENTO, :STATUS_CONFLITO DO BEGIN SUSPEND; END END ^ ALTER PROCEDURE SPC_PECA( CODIGO_BARRAS VARCHAR(50)) RETURNS ( TIPO VARCHAR(4), TABELA VARCHAR(92), ID INTEGER, FAMILIA_ID INTEGER, FAMILIA_DESCRICAO VARCHAR(80), PRODUTO_ID INTEGER, PRODUTO_DESCRICAO VARCHAR(400), TAMANHO INTEGER, TAMANHO_DESCRICAO VARCHAR(200), QUANTIDADE NUMERIC(18,5), SALDO_FISICO NUMERIC(18,5), SALDO_ALOCADO NUMERIC(18,4), SALDO NUMERIC(18,5), UM VARCHAR(12), QUANTIDADE_ALTERNATIVO NUMERIC(18,5), SALDO_FISICO_ALTERNATIVO NUMERIC(18,8), SALDO_ALOCADO_ALTERNATIVO NUMERIC(18,4), SALDO_ALTERNATIVO NUMERIC(18,8), UM_ALTERNATIVO VARCHAR(12), STATUS INTEGER, STATUS_DESCRICAO VARCHAR(84)) AS DECLARE PROCEDURE SUB_SPC_LOCATE_PECA(CODIGO_BARRAS VARCHAR(50)) RETURNS(TIPO VARCHAR(4), TABELA VARCHAR(36), ID INTEGER, PRODUTO_ID INTEGER, TAMANHO INTEGER, QUANTIDADE NUMERIC(18,4), SALDO_FISICO NUMERIC(18,4), QUANTIDADE_ALTERNATIVO NUMERIC(18,4), SALDO_FISICO_ALTERNATIVO NUMERIC(18,8), ALOCADO_DADOS VARCHAR(40), STATUS INTEGER) AS BEGIN /* PECA DE TALAO DETALHADO */ IF (POSITION('RD' IN CODIGO_BARRAS) = 1) THEN -- BEGIN -- ID = CAST(REPLACE(CODIGO_BARRAS, 'RD', '') AS INTEGER); FOR SELECT TRIM('D') TIPO, TRIM('VWREMESSA_TALAO_DETALHE') TABELA, D.ID, D.PRODUTO_ID, D.TAMANHO, D.QUANTIDADE_PRODUCAO QUANTIDADE, D.QUANTIDADE_SALDO SALDO_FISICO, D.QUANTIDADE_ALTERN_PRODUCAO QUANTIDADE_ALTERNATIVO, D.QUANTIDADE_ALTERN_SALDO SALDO_FISICO_ALTERNATIVO, (SELECT LPAD(COALESCE(SUM(V.QUANTIDADE), 0), 20) || LPAD(COALESCE(SUM(V.QUANTIDADE_ALTERNATIVA), 0), 20) FROM TBREMESSA_TALAO_VINCULO V WHERE V.STATUS <> '1' AND V.TIPO = 'D' AND V.TABELA_ID = D.ID) ALOCADO_DADOS, IIF(D.STATUS = 3, 1, 0) STATUS FROM VWREMESSA_TALAO_DETALHE D WHERE D.ID = :ID INTO TIPO, TABELA, ID, PRODUTO_ID, TAMANHO, QUANTIDADE, SALDO_FISICO, QUANTIDADE_ALTERNATIVO, SALDO_FISICO_ALTERNATIVO, ALOCADO_DADOS, STATUS DO SUSPEND; END -- ELSE -- /* PECA DE TALAO DETALHADO */ IF (POSITION('P' IN CODIGO_BARRAS) = 1) THEN -- BEGIN -- ID = CAST(REPLACE(CODIGO_BARRAS, 'P', '') AS INTEGER); FOR SELECT TRIM('R') TIPO, TRIM('TBREVISAO') TABELA, R.ID, R.PRODUTO_ID, R.TAMANHO, R.PESO_LIQUIDO QUANTIDADE, R.SALDO SALDO_FISICO, R.METRAGEM QUANTIDADE_ALTERNATIVO, R.METRAGEM_SALDO SALDO_FISICO_ALTERNATIVO, (SELECT LPAD(COALESCE(SUM(V.QUANTIDADE), 0), 20) || LPAD(COALESCE(SUM(V.QUANTIDADE_ALTERNATIVA), 0), 20) FROM TBREMESSA_TALAO_VINCULO V WHERE V.STATUS <> '1' AND V.TIPO = 'R' AND V.TABELA_ID = R.ID) ALOCADO_DADOS, IIF(((R.RESULTADO = 'I' OR R.RESULTADO = 'R' OR AVULSO = '1') OR (R.RESULTADO = 'P' AND R.STATUS_OB = '2')), 1, 0) STATUS FROM TBREVISAO R WHERE R.ID = :ID INTO TIPO, TABELA, ID, PRODUTO_ID, TAMANHO, QUANTIDADE, SALDO_FISICO, QUANTIDADE_ALTERNATIVO, SALDO_FISICO_ALTERNATIVO, ALOCADO_DADOS, STATUS DO SUSPEND; END -- END begin FOR SELECT Y.TIPO, Y.TABELA, Y.ID, F.CODIGO FAMILIA_ID, F.DESCRICAO FAMILIA_DESCRICAO, Y.PRODUTO_ID, P.DESCRICAO PRODUTO_DESCRICAO, Y.TAMANHO, FN_TAMANHO_GRADE(P.GRADE_CODIGO,Y.TAMANHO) TAMANHO_DESCRICAO, Y.QUANTIDADE, Y.SALDO_FISICO, Y.SALDO_ALOCADO, Y.SALDO_FISICO - Y.SALDO_ALOCADO SALDO, P.UNIDADEMEDIDA_SIGLA UM, IIF(TRIM(F.UNIDADEMEDIDA_ALTERNATIVO) = '', NULL,Y.QUANTIDADE_ALTERNATIVO) QUANTIDADE_ALTERNATIVO, IIF(TRIM(F.UNIDADEMEDIDA_ALTERNATIVO) = '', NULL,Y.SALDO_FISICO_ALTERNATIVO) SALDO_FISICO_ALTERNATIVO, IIF(TRIM(F.UNIDADEMEDIDA_ALTERNATIVO) = '', NULL,Y.SALDO_ALOCADO_ALTERNATIVO) SALDO_ALOCADO_ALTERNATIVO, IIF(TRIM(F.UNIDADEMEDIDA_ALTERNATIVO) = '', NULL,Y.SALDO_FISICO_ALTERNATIVO - Y.SALDO_ALOCADO_ALTERNATIVO) SALDO_ALTERNATIVO, IIF(TRIM(F.UNIDADEMEDIDA_ALTERNATIVO) = '', NULL, TRIM(F.UNIDADEMEDIDA_ALTERNATIVO)) UM_ALTERNATIVO, Y.STATUS, Y.STATUS_DESCRICAO FROM ( SELECT TIPO, TABELA, ID, PRODUTO_ID, TAMANHO, QUANTIDADE, SALDO_FISICO, CAST(SUBSTRING(ALOCADO_DADOS FROM 01 FOR 20) AS NUMERIC(15,4)) SALDO_ALOCADO, QUANTIDADE_ALTERNATIVO, SALDO_FISICO_ALTERNATIVO, CAST(SUBSTRING(ALOCADO_DADOS FROM 21 FOR 40) AS NUMERIC(15,4)) SALDO_ALOCADO_ALTERNATIVO, STATUS, TRIM(CASE STATUS WHEN 0 THEN 'INDISPONIVEL PARA USO' WHEN 1 THEN 'DISPONIVEL PARA USO' ELSE 'INDEFINIDO' END) STATUS_DESCRICAO FROM ( SELECT TIPO, TABELA, ID, PRODUTO_ID, TAMANHO, QUANTIDADE, SALDO_FISICO, QUANTIDADE_ALTERNATIVO, SALDO_FISICO_ALTERNATIVO, ALOCADO_DADOS, STATUS FROM SUB_SPC_LOCATE_PECA(:CODIGO_BARRAS)) X ) Y, TBPRODUTO P, TBFAMILIA F WHERE P.CODIGO = Y.PRODUTO_ID AND F.CODIGO = P.FAMILIA_CODIGO INTO TIPO, TABELA, ID, FAMILIA_ID, FAMILIA_DESCRICAO, PRODUTO_ID, PRODUTO_DESCRICAO, TAMANHO, TAMANHO_DESCRICAO, QUANTIDADE, SALDO_FISICO, SALDO_ALOCADO, SALDO, UM, QUANTIDADE_ALTERNATIVO, SALDO_FISICO_ALTERNATIVO, SALDO_ALOCADO_ALTERNATIVO, SALDO_ALTERNATIVO, UM_ALTERNATIVO, STATUS, STATUS_DESCRICAO DO SUSPEND; end ^ ALTER PROCEDURE SPI_ESTOQUE_TRANSACAO( TABELA VARCHAR(32), TABELA_NIVEL INTEGER, TABELA_ID INTEGER, ESTABELECIMENTO_ID INTEGER, LOCALIZACAO_ID INTEGER, DATA DATE, PRODUTO_ID INTEGER, TAMANHO INTEGER, QUANTIDADE NUMERIC(10,5), TIPO CHAR, OPERACAO VARCHAR(3), CONSUMO CHAR, CCUSTO VARCHAR(10), OBSERVACAO VARCHAR(100), TRANSACAO_ID INTEGER = NULL, DOCUMENTO INTEGER = NULL, TALAO INTEGER = 0) AS DECLARE VARIABLE USUARIO_ID INTEGER; DECLARE VARIABLE T01 NUMERIC(10,5); DECLARE VARIABLE T02 NUMERIC(10,5); DECLARE VARIABLE T03 NUMERIC(10,5); DECLARE VARIABLE T04 NUMERIC(10,5); DECLARE VARIABLE T05 NUMERIC(10,5); DECLARE VARIABLE T06 NUMERIC(10,5); DECLARE VARIABLE T07 NUMERIC(10,5); DECLARE VARIABLE T08 NUMERIC(10,5); DECLARE VARIABLE T09 NUMERIC(10,5); DECLARE VARIABLE T10 NUMERIC(10,5); DECLARE VARIABLE T11 NUMERIC(10,5); DECLARE VARIABLE T12 NUMERIC(10,5); DECLARE VARIABLE T13 NUMERIC(10,5); DECLARE VARIABLE T14 NUMERIC(10,5); DECLARE VARIABLE T15 NUMERIC(10,5); DECLARE VARIABLE T16 NUMERIC(10,5); DECLARE VARIABLE T17 NUMERIC(10,5); DECLARE VARIABLE T18 NUMERIC(10,5); DECLARE VARIABLE T19 NUMERIC(10,5); DECLARE VARIABLE T20 NUMERIC(10,5); BEGIN USUARIO_ID = COALESCE((SELECT FIRST 1 CODIGO FROM TBUSUARIO U WHERE U.USUARIO = CURRENT_USER),0); IF ( COALESCE(TRANSACAO_ID,0) = 0 ) THEN BEGIN TRANSACAO_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0); END IF ( COALESCE(DOCUMENTO,0) = 0 ) THEN BEGIN DOCUMENTO = TABELA_ID; END IF ( NOT COALESCE(QUANTIDADE,0) > 0 ) THEN BEGIN EXCEPTION "..." 'NAO É PERMITIDO QUANTIDADE ZERADA NA TRANSACAO DE ESTOQUE.'; END TALAO = COALESCE(TALAO,0); T01 = IIF(TAMANHO = 01, QUANTIDADE, 0); T02 = IIF(TAMANHO = 02, QUANTIDADE, 0); T03 = IIF(TAMANHO = 03, QUANTIDADE, 0); T04 = IIF(TAMANHO = 04, QUANTIDADE, 0); T05 = IIF(TAMANHO = 05, QUANTIDADE, 0); T06 = IIF(TAMANHO = 06, QUANTIDADE, 0); T07 = IIF(TAMANHO = 07, QUANTIDADE, 0); T08 = IIF(TAMANHO = 08, QUANTIDADE, 0); T09 = IIF(TAMANHO = 09, QUANTIDADE, 0); T10 = IIF(TAMANHO = 10, QUANTIDADE, 0); T11 = IIF(TAMANHO = 11, QUANTIDADE, 0); T12 = IIF(TAMANHO = 12, QUANTIDADE, 0); T13 = IIF(TAMANHO = 13, QUANTIDADE, 0); T14 = IIF(TAMANHO = 14, QUANTIDADE, 0); T15 = IIF(TAMANHO = 15, QUANTIDADE, 0); T16 = IIF(TAMANHO = 16, QUANTIDADE, 0); T17 = IIF(TAMANHO = 17, QUANTIDADE, 0); T18 = IIF(TAMANHO = 18, QUANTIDADE, 0); T19 = IIF(TAMANHO = 19, QUANTIDADE, 0); T20 = IIF(TAMANHO = 20, QUANTIDADE, 0); INSERT INTO TBESTOQUE_TRANSACAO_ITEM ( TABELA, TABELA_ID, TABELA_NIVEL, ESTABELECIMENTO_CODIGO, LOCALIZACAO_CODIGO, PRODUTO_CODIGO, CONTROLE, DATA, DOCUMENTO, NFS_ITEM_CONTROLE, NFE_ITEM_CONTROLE, OPERACAO_CODIGO, TIPO, QUANTIDADE, REMESSA_ITEM_CONTROLE, T01, T02, T03, T04, T05, T06, T07, T08, T09, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, CUSTO_UNITARIO, TRANSACAO_CONTROLE, CONSUMO, USUARIO_CODIGO, USUARIO_DATA, TURNO_CODIGO, CENTRO_DE_CUSTO, OBSERVACAO, ESPUMACAO, CLASSIFICACAO, REVISAO_CONTROLE, EMPRESA_CODIGO, CUSTO_MEDIO ) VALUES( :TABELA, :TABELA_ID, :TABELA_NIVEL, :ESTABELECIMENTO_ID, :LOCALIZACAO_ID, :PRODUTO_ID, :TRANSACAO_ID, :DATA, :DOCUMENTO, 0, 0, :OPERACAO, :TIPO, :QUANTIDADE, :TALAO, :T01, :T02, :T03, :T04, :T05, :T06, :T07, :T08, :T09, :T10, :T11, :T12, :T13, :T14, :T15, :T16, :T17, :T18, :T19, :T20, 0, 0, :CONSUMO, :USUARIO_ID, CURRENT_DATE, 0, :CCUSTO, :OBSERVACAO, '0', 0, 0, 0, 0 ); END ^ ALTER PROCEDURE SPI_FOLPAG_PROVENTO_CONTABIL( ESTABELECIMENTO_ID INTEGER, ANO INTEGER, MES INTEGER, FOLHA_TIPO VARCHAR(12)) RETURNS ( COLABORADOR_ID INTEGER, ENCARGO_CODIGO INTEGER, ENCARGO_DESCRICAO VARCHAR(200), VALOR NUMERIC(18,2), VALOR_INICIAL NUMERIC(18,2), PERCENTUAL NUMERIC(18,2), CCUSTO VARCHAR(40), CCUSTO_CONTABILIZACAO VARCHAR(40), TETO CHAR(4), ENC_SAL_BS_FERIAS INTEGER, ENC_SAL_BS_DECIMO INTEGER, ENC_INSS_FERIAS INTEGER, ENC_INSS_DECIMO INTEGER, VALOR_SAL_BS_FERIAS NUMERIC(18,2), VALOR_SAL_BS_DECIMO NUMERIC(18,2)) AS declare variable vvalor numeric(15,2); Begin For Select C.Colaborador_Id, C.Encargo_Codigo, A.Descricao Encargo_Descricao, C.Valor, B.Percentual, C.CCusto, C.CCusto_Contabilizacao, B.Teto, B.Valor_Inicial, B.Enc_Sal_Bs_Ferias, B.Enc_Sal_Bs_Decimo, B.Enc_Inss_Ferias, B.Enc_Inss_Decimo, Coalesce((Select First 1 E.Valor From TbFolPag_Encargo_Detalhe E Where E.Colaborador_Id = C.COlaborador_Id and E.Estabelecimento_Id = C.Estabelecimento_Id and E.Ano = C.Ano and E.Mes = C.Mes and E.FOLHA_TIPO = C.FOLHA_TIPO and E.Encargo_Codigo = Enc_Sal_Bs_Ferias),0.00) Valor_Sal_Bs_Ferias, Coalesce((Select First 1 E.Valor From TbFolPag_Encargo_Detalhe E Where E.Colaborador_Id = C.Colaborador_Id and E.Estabelecimento_Id = C.Estabelecimento_Id and E.Ano = C.Ano and E.Mes = C.Mes and E.FOLHA_TIPO = C.FOLHA_TIPO and E.Encargo_Codigo = Enc_Sal_Bs_Decimo),0.00) Valor_Sal_Bs_Decimo From TbFolPag_Encargo A, TbFolPag_Inss B, TbFolPag_Encargo_Detalhe C Where A.Codigo = B.Encargo_Salario and A.Codigo = C.Encargo_Codigo and C.Valor Between B.Valor_Inicial and B.Valor_Final and C.Estabelecimento_Id = :Estabelecimento_Id and C.Ano = :Ano and C.Mes = :Mes and C.FOLHA_TIPO = :FOLHA_TIPO Into :COLABORADOR_ID,:ENCARGO_CODIGO,:ENCARGO_DESCRICAO,:VALOR,:PERCENTUAL, :CCUSTO,:CCUSTO_CONTABILIZACAO,:TETO,:VALOR_INICIAL,:ENC_SAL_BS_FERIAS, :ENC_SAL_BS_DECIMO,:ENC_INSS_FERIAS,:ENC_INSS_DECIMO,:VALOR_SAL_BS_FERIAS, :VALOR_SAL_BS_DECIMO Do Begin if (:VALOR_SAL_BS_FERIAS > 0 and :PERCENTUAL > 0) then begin vValor = :VALOR_SAL_BS_FERIAS * (:PERCENTUAL/100.0000); if (:Teto = '1') then Begin vValor = :VALOR_INICIAL * (:PERCENTUAL/100.0000); End insert into TBFOLPAG_ENCARGO_DETALHE (estabelecimento_id, ano, mes, FOLHA_TIPO, colaborador_id, encargo_codigo, quantidade, valor, CCUSTO, ccusto_contabilizacao) values (:estabelecimento_id, :ano, :mes, :FOLHA_TIPO, :colaborador_id, :ENC_INSS_FERIAS, 0, :vValor, :CCUSTO, :ccusto_contabilizacao); End if (:VALOR_SAL_BS_DECIMO > 0 and :PERCENTUAL > 0) then begin vValor = VALOR_SAL_BS_DECIMO * (PERCENTUAL/100.0000); if (:Teto = '1') then Begin vValor = :VALOR_INICIAL * (:PERCENTUAL/100.0000); End insert into TBFOLPAG_ENCARGO_DETALHE (estabelecimento_id, ano, mes, FOLHA_TIPO, colaborador_id, encargo_codigo, quantidade, valor, CCUSTO, ccusto_contabilizacao) values (:estabelecimento_id, :ano, :mes, :FOLHA_TIPO, :colaborador_id, :ENC_INSS_DECIMO, 0, :vValor, :CCUSTO, :ccusto_contabilizacao); End End End ^ ALTER PROCEDURE SPI_REM_CONSUMO_INSUMO3( ESTABELECIMENTO_ID INTEGER, REMESSA_ID INTEGER) AS DECLARE VARIABLE O_ESTABELECIMENTO_ID INTEGER; DECLARE VARIABLE O_REMESSA_ID INTEGER; DECLARE VARIABLE O_REMESSA_TALAO_ID INTEGER; DECLARE VARIABLE O_CONTROLE INTEGER; DECLARE VARIABLE O_LOCALIZACAO_ID INTEGER; DECLARE VARIABLE O_PRODUTO_ID INTEGER; DECLARE VARIABLE O_TAMANHO INTEGER; DECLARE VARIABLE O_DENSIDADE NUMERIC(15,2); DECLARE VARIABLE O_ESPESSURA NUMERIC(15,2); DECLARE VARIABLE O_QUANTIDADE NUMERIC(15,4); DECLARE VARIABLE O_QUANTIDADE_ALTERNATIVA NUMERIC(15,4); DECLARE VARIABLE REMESSA_TALAO_ID INTEGER; DECLARE VARIABLE REMESSA_TALAO_DETALHE_ID INTEGER; DECLARE VARIABLE MODELO_ID INTEGER; DECLARE VARIABLE COR_ID INTEGER; DECLARE VARIABLE TAMANHO INTEGER; DECLARE VARIABLE DENSIDADE SMALLINT; DECLARE VARIABLE ESPESSURA NUMERIC(15,4); DECLARE VARIABLE TALAO_QUANTIDADE NUMERIC(15,4); DECLARE VARIABLE QUANTIDADE NUMERIC(15,4); DECLARE VARIABLE QUANTIDADE_ALTERNATIVA NUMERIC(15,4); DECLARE VARIABLE PROJECAO_PRODUTO_ID INTEGER; DECLARE VARIABLE PROJECAO_TAMANHO INTEGER; DECLARE VARIABLE PROJECAO_LOCALIZACAO_ID INTEGER; DECLARE VARIABLE PROJECAO_QUANTIDADE NUMERIC(15,4); DECLARE VARIABLE FATOR_MULT NUMERIC(10,1); DECLARE VARIABLE FATOR_DIV NUMERIC(15,4); DECLARE VARIABLE DESTINO_FAMILIA_ID INTEGER; DECLARE VARIABLE UM_ALTERNATIVA VARCHAR(3); DECLARE VARIABLE INCREMENTO INTEGER; DECLARE VARIABLE CONTROLE2 INTEGER; DECLARE VARIABLE OLD_TALAO_DETALHE_ID INTEGER; DECLARE VARIABLE OLD_DESTINO_FAMILIA_ID INTEGER; DECLARE VARIABLE CONSUMO_QUANTIDADE2 NUMERIC(15,4); DECLARE VARIABLE CONSUMO_ALTERNATIVO2 NUMERIC(15,4); DECLARE VARIABLE ACUMULA_PROJECAO CHAR(1); DECLARE VARIABLE OLD_VALORES VARCHAR(500); DECLARE VARIABLE OLD_QUANTIDADE_ORIGINAL NUMERIC(15,4); DECLARE VARIABLE OLD_QUANTIDADE NUMERIC(15,4); DECLARE VARIABLE OLD_QUANTIDADE_ALTERNATIVA NUMERIC(15,4); DECLARE VARIABLE PROJECAO_DIRETA INTEGER; DECLARE VARIABLE FAMILIA_ID INTEGER; DECLARE VARIABLE PRODUTO_ID INTEGER; DECLARE VARIABLE CONSUMO_QUANTIDADE1 NUMERIC(15,4); DECLARE VARIABLE CONSUMO_ALTERNATIVO1 NUMERIC(15,4); DECLARE VARIABLE CONTROLE1 INTEGER; DECLARE VARIABLE LOCALIZACAO_ID INTEGER; DECLARE VARIABLE GP_ID INTEGER; DECLARE VARIABLE UM VARCHAR(10); DECLARE VARIABLE CONSUMO_PERMITE_FRACAO VARCHAR(10); BEGIN /** * Limpa os registros atuais para poder recalcular */ DELETE FROM VWREMESSA_CONSUMO A WHERE A.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID AND A.REMESSA_ID = :REMESSA_ID; CONTROLE1 = 0; CONTROLE2 = 1; /** * Inicio do loop que carrega todos os taloes detalhados da remessa que foi parametrizada */ FOR SELECT D.REMESSA_TALAO_ID, D.ID REMESSA_TALAO_DETALHE_ID, D.MODELO_ID, D.COR_ID, D.TAMANHO, T.DENSIDADE, T.ESPESSURA, T.QUANTIDADE TALAO_QUANTIDADE, D.QUANTIDADE, D.QUANTIDADE_ALTERN, P.FAMILIA_CODIGO, D.PRODUTO_ID, D.LOCALIZACAO_ID, T.GP_ID FROM VWREMESSA_TALAO_DETALHE D, VWREMESSA_TALAO T, TBPRODUTO P WHERE D.REMESSA_ID = T.REMESSA_ID AND D.REMESSA_TALAO_ID = T.REMESSA_TALAO_ID AND P.CODIGO = D.PRODUTO_ID AND D.ESTABELECIMENTO_ID = :Estabelecimento_Id AND D.REMESSA_ID = :REMESSA_ID AND T.REMESSA_TALAO_ID < 9000 /* Remove os taloes de sobra da remessa */ INTO :REMESSA_TALAO_ID, :REMESSA_TALAO_DETALHE_ID, :MODELO_ID, :COR_ID, :TAMANHO, :DENSIDADE, :ESPESSURA, :TALAO_QUANTIDADE, :QUANTIDADE, :QUANTIDADE_ALTERNATIVA, :FAMILIA_ID, :PRODUTO_ID, :LOCALIZACAO_ID, :GP_ID DO BEGIN /** * Variavel que vai verificar se sera gerada projecao de consumo direto do proprio talao (FAMILIA PROJECAO = FAMILIA TALAO) */ PROJECAO_DIRETA = (SELECT FIRST 1 ACUMULA_PROJECAO FROM TBFAMILIA_MODELO_ALOCACAO A WHERE A.FAMILIA_ID = :FAMILIA_ID AND A.FAMILIA_MODELO_ID = :FAMILIA_ID AND A.GP_ORIGEM = :GP_ID ); /* Verifica se o item tem projecao de si mesmo (CACHARREL / EDC DIV. ESPUMAS) */ IF (PROJECAO_DIRETA IS NOT NULL) THEN BEGIN /** * Codigo que ira referenciar pares de insumo */ CONTROLE1 = COALESCE(CONTROLE1,0)+1; CONSUMO_QUANTIDADE1 = :QUANTIDADE; CONSUMO_ALTERNATIVO1 = :QUANTIDADE_ALTERNATIVA; /** * Verifica se ACUMULA PROJECAO */ IF (PROJECAO_DIRETA = '1') THEN BEGIN OLD_VALORES = (SELECT FIRST 1 (LPAD(COALESCE(QUANTIDADE_ORIGINAL ,0),20)|| LPAD(COALESCE(QUANTIDADE ,0),20)|| LPAD(COALESCE(QUANTIDADE_ALTERNATIVA,0),20)) FROM VWREMESSA_CONSUMO WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID AND REMESSA_ID = :REMESSA_ID AND REMESSA_TALAO_ID = :REMESSA_TALAO_ID AND PRODUTO_ID = :PROJECAO_PRODUTO_ID AND TAMANHO = :PROJECAO_TAMANHO ); OLD_QUANTIDADE_ORIGINAL = CAST(COALESCE(SUBSTRING(OLD_VALORES FROM 1 FOR 20),0) AS NUMERIC(15,4)); OLD_QUANTIDADE = CAST(COALESCE(SUBSTRING(OLD_VALORES FROM 21 FOR 20),0) AS NUMERIC(15,4)); OLD_QUANTIDADE_ALTERNATIVA = CAST(COALESCE(SUBSTRING(OLD_VALORES FROM 41 FOR 20),0) AS NUMERIC(15,4)); QUANTIDADE = QUANTIDADE + OLD_QUANTIDADE_ORIGINAL; CONSUMO_QUANTIDADE1 = CONSUMO_QUANTIDADE1 + OLD_QUANTIDADE; CONSUMO_ALTERNATIVO1 = CONSUMO_ALTERNATIVO1 + OLD_QUANTIDADE_ALTERNATIVA; /* Atualiza ou insere o consumo na tabela (PROJECAO ACUMULADA) */ UPDATE OR INSERT INTO VWREMESSA_CONSUMO ( ESTABELECIMENTO_ID, REMESSA_ID, REMESSA_TALAO_ID, CONTROLE, LOCALIZACAO_ID, PRODUTO_ID, TAMANHO, DENSIDADE, ESPESSURA, QUANTIDADE_ORIGINAL, QUANTIDADE_NECES, QUANTIDADE_NECES_ALTERN, QUANTIDADE, QUANTIDADE_ALTERNATIVA, SALDO_BAIXAR, COMPONENTE ) VALUES ( :ESTABELECIMENTO_ID, :REMESSA_ID, :REMESSA_TALAO_ID, :CONTROLE1, :LOCALIZACAO_ID, :PRODUTO_ID, :TAMANHO, :DENSIDADE, :ESPESSURA, :QUANTIDADE, :CONSUMO_QUANTIDADE1, :CONSUMO_ALTERNATIVO1, :CONSUMO_QUANTIDADE1, :CONSUMO_ALTERNATIVO1, :CONSUMO_QUANTIDADE1, '0' ) MATCHING ( ESTABELECIMENTO_ID, REMESSA_ID, REMESSA_TALAO_ID, PRODUTO_ID, TAMANHO ); END ELSE BEGIN /* Insere o consumo na tabela (PROJECAO NAO ACUMULADA) */ INSERT INTO VWREMESSA_CONSUMO ( ESTABELECIMENTO_ID, REMESSA_ID, REMESSA_TALAO_ID, REMESSA_TALAO_DETALHE_ID, CONTROLE, LOCALIZACAO_ID, PRODUTO_ID, TAMANHO, DENSIDADE, ESPESSURA, QUANTIDADE_ORIGINAL, QUANTIDADE_NECES, QUANTIDADE_NECES_ALTERN, QUANTIDADE, QUANTIDADE_ALTERNATIVA, SALDO_BAIXAR, COMPONENTE ) VALUES ( :ESTABELECIMENTO_ID, :REMESSA_ID, :REMESSA_TALAO_ID, :REMESSA_TALAO_DETALHE_ID, :CONTROLE1, :LOCALIZACAO_ID, :PRODUTO_ID, :TAMANHO, :DENSIDADE, :ESPESSURA, :QUANTIDADE, :CONSUMO_QUANTIDADE1, :CONSUMO_ALTERNATIVO1, :CONSUMO_QUANTIDADE1, :CONSUMO_ALTERNATIVO1, :CONSUMO_QUANTIDADE1, '0' ); END END ELSE BEGIN /** * Inicializa o loop que carrega e calcula a projecao de consumo do talao detalhado */ FOR /* Consulta de Insumos Independente de Cor */ SELECT B.CONSUMO_PRODUTO_CODIGO PRODUTO_ID, B.Tam TAMANHO, P.Localizacao_Codigo LOCALIZACAO_ID, Cast(( (Case When (Cast(:Tamanho as integer)= 0) and (B.CONSUMO_QUANTIDADE > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 1) and (B.CONSUMO_QUANTIDADE_T01 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T01 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 2) and (B.CONSUMO_QUANTIDADE_T02 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T02 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 3) and (B.CONSUMO_QUANTIDADE_T03 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T03 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 4) and (B.CONSUMO_QUANTIDADE_T04 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T04 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 5) and (B.CONSUMO_QUANTIDADE_T05 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T05 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 6) and (B.CONSUMO_QUANTIDADE_T06 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T06 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 7) and (B.CONSUMO_QUANTIDADE_T07 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T07 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 8) and (B.CONSUMO_QUANTIDADE_T08 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T08 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 9) and (B.CONSUMO_QUANTIDADE_T09 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T09 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=10) and (B.CONSUMO_QUANTIDADE_T10 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T10 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=11) and (B.CONSUMO_QUANTIDADE_T11 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T11 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=12) and (B.CONSUMO_QUANTIDADE_T12 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T12 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=13) and (B.CONSUMO_QUANTIDADE_T13 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T13 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=14) and (B.CONSUMO_QUANTIDADE_T14 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T14 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=15) and (B.CONSUMO_QUANTIDADE_T15 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T15 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=16) and (B.CONSUMO_QUANTIDADE_T16 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T16 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=17) and (B.CONSUMO_QUANTIDADE_T17 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T17 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=18) and (B.CONSUMO_QUANTIDADE_T18 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T18 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=19) and (B.CONSUMO_QUANTIDADE_T19 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T19 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=20) and (B.CONSUMO_QUANTIDADE_T20 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.CONSUMO_QUANTIDADE_T20 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end)) as Numeric(15,4)) Projecao, 1 FATOR_MATRIZ, B.FATOR_CONVERSAO, FMA.FAMILIA_MODELO_ID, (SELECT FIRST 1 UNIDADEMEDIDA_ALTERNATIVO FROM TBFAMILIA WHERE CODIGO = P.FAMILIA_CODIGO)UM_ALTERNATIVA, FMA.ACUMULA_PROJECAO FROM TBMODELO_CONSUMO B, TBMODELO M, TBPRODUTO P, TBFAMILIA_MODELO_ALOCACAO FMA WHERE B.MODELO_CODIGO = :MODELO_ID AND B.CONSUMO_PRODUTO_CODIGO = P.CODIGO AND B.MODELO_CODIGO = M.CODIGO AND M.FAMILIA_CODIGO = FMA.FAMILIA_ID AND P.FAMILIA_CODIGO = FMA.FAMILIA_MODELO_ID AND FMA.CONSUMO = '1' /* Carrega somente familias que geram consumo */ UNION /* Consulta de Insumos por Cor */ SELECT B.PRODUTO_ID, B.Tam TAMANHO, P.Localizacao_Codigo LOCALIZACAO_ID, Cast(( (Case When (Cast(:Tamanho as integer)= 0) and (B.QUANTIDADE > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.QUANTIDADE AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 1) and (B.T01 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T01 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 2) and (B.T02 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T02 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 3) and (B.T03 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T03 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 4) and (B.T04 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T04 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 5) and (B.T05 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T05 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 6) and (B.T06 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T06 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 7) and (B.T07 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T07 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 8) and (B.T08 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T08 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)= 9) and (B.T09 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T09 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=10) and (B.T10 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T10 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=11) and (B.T11 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T11 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=12) and (B.T12 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T12 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=13) and (B.T13 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T13 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=14) and (B.T14 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T14 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=15) and (B.T15 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T15 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=16) and (B.T16 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T16 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=17) and (B.T17 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T17 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=18) and (B.T18 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T18 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=19) and (B.T19 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T19 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end) + (Case When (Cast(:Tamanho as integer)=20) and (B.T20 > 0) Then Cast( (Cast(:Quantidade as Numeric(15,4)) * CAST(B.T20 AS NUMERIC(15,8))) as Numeric(15,4)) else 0 end)) as Numeric(15,4)) Projecao, B.FATOR_MATRIZ, B.FATOR_CONVERSAO, FMA.FAMILIA_MODELO_ID, (SELECT FIRST 1 UNIDADEMEDIDA_ALTERNATIVO FROM TBFAMILIA WHERE CODIGO = P.FAMILIA_CODIGO)UM_ALTERNATIVA, FMA.ACUMULA_PROJECAO FROM TBMODELO_CONSUMO_COR B, TBMODELO M, TBPRODUTO P, TBFAMILIA_MODELO_ALOCACAO FMA WHERE B.MODELO_ID = :MODELO_ID AND B.COR_ID = :COR_ID AND B.PRODUTO_ID = P.CODIGO AND B.MODELO_ID = M.CODIGO AND M.FAMILIA_CODIGO = FMA.FAMILIA_ID AND P.FAMILIA_CODIGO = FMA.FAMILIA_MODELO_ID AND FMA.CONSUMO = '1' /* Carrega somente familias que geram consumo */ INTO :PROJECAO_PRODUTO_ID, :PROJECAO_TAMANHO, :PROJECAO_LOCALIZACAO_ID, :PROJECAO_QUANTIDADE, :FATOR_MULT, :FATOR_DIV, :DESTINO_FAMILIA_ID, :UM_ALTERNATIVA, :ACUMULA_PROJECAO DO BEGIN /** * Codigo que ira referenciar pares de insumo */ IF ((OLD_TALAO_DETALHE_ID <> :REMESSA_TALAO_DETALHE_ID) OR (OLD_DESTINO_FAMILIA_ID <> :DESTINO_FAMILIA_ID)) THEN BEGIN CONTROLE2 = COALESCE(CONTROLE2,0)+1; END /** * Inicio do loop que forma os pares de insumo caso FATOR_MULT for maior que 1 */ INCREMENTO = 1; WHILE (INCREMENTO <= :FATOR_MULT) DO BEGIN /** * Verifica se houve alguma projecao gerada */ IF (:PROJECAO_QUANTIDADE > 0) THEN BEGIN /* Calcula as projecaes de consumo */ CONSUMO_QUANTIDADE2 = :PROJECAO_QUANTIDADE / :FATOR_DIV / :FATOR_MULT; CONSUMO_ALTERNATIVO2 = IIF((TRIM(UM_ALTERNATIVA)='') OR UM_ALTERNATIVA IS NULL,0,:PROJECAO_QUANTIDADE / :FATOR_MULT); IF (ACUMULA_PROJECAO = '1') THEN BEGIN OLD_VALORES = (SELECT FIRST 1 (LPAD(COALESCE(QUANTIDADE_ORIGINAL ,0),20)|| LPAD(COALESCE(QUANTIDADE ,0),20)|| LPAD(COALESCE(QUANTIDADE_ALTERNATIVA,0),20)) FROM VWREMESSA_CONSUMO WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID AND REMESSA_ID = :REMESSA_ID AND REMESSA_TALAO_ID = :REMESSA_TALAO_ID AND PRODUTO_ID = :PROJECAO_PRODUTO_ID AND TAMANHO = :PROJECAO_TAMANHO ); OLD_QUANTIDADE_ORIGINAL = CAST(COALESCE(SUBSTRING(OLD_VALORES FROM 1 FOR 20),0) AS NUMERIC(15,4)); OLD_QUANTIDADE = CAST(COALESCE(SUBSTRING(OLD_VALORES FROM 21 FOR 20),0) AS NUMERIC(15,4)); OLD_QUANTIDADE_ALTERNATIVA = CAST(COALESCE(SUBSTRING(OLD_VALORES FROM 41 FOR 20),0) AS NUMERIC(15,4)); QUANTIDADE = TALAO_QUANTIDADE; --QUANTIDADE = QUANTIDADE + OLD_QUANTIDADE_ORIGINAL; CONSUMO_QUANTIDADE2 = CONSUMO_QUANTIDADE2 + OLD_QUANTIDADE; CONSUMO_ALTERNATIVO2 = CONSUMO_ALTERNATIVO2 + OLD_QUANTIDADE_ALTERNATIVA; /* Atualiza ou insere o consumo na tabela (PROJECAO ACUMULADA) */ UPDATE OR INSERT INTO VWREMESSA_CONSUMO ( ESTABELECIMENTO_ID, REMESSA_ID, REMESSA_TALAO_ID, CONTROLE, LOCALIZACAO_ID, PRODUTO_ID, TAMANHO, DENSIDADE, ESPESSURA, QUANTIDADE_ORIGINAL, QUANTIDADE_NECES, QUANTIDADE_NECES_ALTERN, QUANTIDADE, QUANTIDADE_ALTERNATIVA, SALDO_BAIXAR, COMPONENTE ) VALUES ( :ESTABELECIMENTO_ID, :REMESSA_ID, :REMESSA_TALAO_ID, :CONTROLE2, :PROJECAO_LOCALIZACAO_ID, :PROJECAO_PRODUTO_ID, :PROJECAO_TAMANHO, :DENSIDADE, :ESPESSURA, :QUANTIDADE, :CONSUMO_QUANTIDADE2, :CONSUMO_ALTERNATIVO2, :CONSUMO_QUANTIDADE2, :CONSUMO_ALTERNATIVO2, :CONSUMO_QUANTIDADE2, '0' ) MATCHING ( ESTABELECIMENTO_ID, REMESSA_ID, REMESSA_TALAO_ID, PRODUTO_ID, TAMANHO ); END ELSE BEGIN /* Insere o consumo na tabela (PROJECAO NAO ACUMULADA) */ INSERT INTO VWREMESSA_CONSUMO ( ESTABELECIMENTO_ID, REMESSA_ID, REMESSA_TALAO_ID, REMESSA_TALAO_DETALHE_ID, CONTROLE, LOCALIZACAO_ID, PRODUTO_ID, TAMANHO, DENSIDADE, ESPESSURA, QUANTIDADE_ORIGINAL, QUANTIDADE_NECES, QUANTIDADE_NECES_ALTERN, QUANTIDADE, QUANTIDADE_ALTERNATIVA, SALDO_BAIXAR, COMPONENTE ) VALUES ( :ESTABELECIMENTO_ID, :REMESSA_ID, :REMESSA_TALAO_ID, :REMESSA_TALAO_DETALHE_ID, :CONTROLE2, :PROJECAO_LOCALIZACAO_ID, :PROJECAO_PRODUTO_ID, :PROJECAO_TAMANHO, :DENSIDADE, :ESPESSURA, :QUANTIDADE, :CONSUMO_QUANTIDADE2, :CONSUMO_ALTERNATIVO2, :CONSUMO_QUANTIDADE2, :CONSUMO_ALTERNATIVO2, :CONSUMO_QUANTIDADE2, '0' ); END END INCREMENTO = INCREMENTO+1; END OLD_TALAO_DETALHE_ID = :REMESSA_TALAO_DETALHE_ID; OLD_DESTINO_FAMILIA_ID = :DESTINO_FAMILIA_ID; O_ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID ; O_REMESSA_ID = :REMESSA_ID ; O_REMESSA_TALAO_ID = :REMESSA_TALAO_ID ; O_CONTROLE = :CONTROLE2 ; O_LOCALIZACAO_ID = :PROJECAO_LOCALIZACAO_ID ; O_PRODUTO_ID = :PROJECAO_PRODUTO_ID ; O_TAMANHO = :PROJECAO_TAMANHO ; O_DENSIDADE = :DENSIDADE ; O_ESPESSURA = :ESPESSURA ; O_QUANTIDADE = :CONSUMO_QUANTIDADE2 ; O_QUANTIDADE_ALTERNATIVA = :CONSUMO_ALTERNATIVO2 ; -- SUSPEND; END END END FOR SELECT C.REMESSA_TALAO_ID, C.PRODUTO_ID, C.TAMANHO, C.QUANTIDADE, P.UNIDADEMEDIDA_SIGLA UM FROM VWREMESSA_CONSUMO C, TBPRODUTO P WHERE P.CODIGO = C.PRODUTO_ID AND C.REMESSA_ID = :REMESSA_ID INTO REMESSA_TALAO_ID, PRODUTO_ID, TAMANHO, QUANTIDADE, UM DO BEGIN CONSUMO_PERMITE_FRACAO = COALESCE(( SELECT U.PODE_FRACIONAR FROM TbUnidadeMedida U WHERE U.SIGLA = :UM),'N'); IF (CONSUMO_PERMITE_FRACAO = 'N') THEN BEGIN IF (QUANTIDADE > TRUNC(QUANTIDADE)) THEN BEGIN EXCEPTION "..." 'O PRODUTO ' || PRODUTO_ID || ' DE CONSUMO DO TALAO ' || REMESSA_TALAO_ID || ' NAO PERMITE QUANTIDADE FRACIONADA. QUANT.'||QUANTIDADE||' '||UM; END END END END ^ ALTER PROCEDURE SPI_REMESSA_SOBRA( I_REMESSA_ID INTEGER) AS declare variable estabelecimento_id integer; declare variable remessa_talao_id integer; declare variable produto_id integer; declare variable tamanho integer; declare variable quantidade_talao numeric(15,5); declare variable quantidade_sobra numeric(15,5); declare variable sobra_quantidade_alocar numeric(15,5); declare variable sobra_id integer; declare variable sobra_saldo numeric(15,5); begin FOR SELECT T.ESTABELECIMENTO_ID, T.REMESSA_TALAO_ID, T.PRODUTO_ID, T.TAMANHO, T.QUANTIDADE FROM VWREMESSA_TALAO T WHERE T.REMESSA_ID = :I_REMESSA_ID AND T.REMESSA_TALAO_ID < 8000 INTO ESTABELECIMENTO_ID, REMESSA_TALAO_ID, PRODUTO_ID, TAMANHO, QUANTIDADE_TALAO DO BEGIN FOR SELECT ID, SALDO FROM ( SELECT S.ID, S.SALDO - COALESCE(( SELECT SUM(R.SALDO) FROM TBREQUISICAO_SOBRA R WHERE R.SOBRA_ID = S.ID AND R.STATUS = '0' ),0.0000) SALDO FROM TBSOBRA S WHERE S.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID AND S.TAMANHO = :TAMANHO AND S.STATUS = '1' AND S.PRODUTO_ID IN ( SELECT P.CODIGO FROM (SELECT P.MODELO_CODIGO MODELO_ID, P.COR_CODIGO COR_ID, (SELECT MODELO_PAI FROM TBMODELO WHERE CODIGO = P.MODELO_CODIGO and MODELO_PAI > 0) MODELO_PAI FROM TBPRODUTO P WHERE P.CODIGO = :PRODUTO_ID) A, TBMODELO M, TBPRODUTO P WHERE A.COR_ID = P.COR_CODIGO AND M.CODIGO = P.MODELO_CODIGO AND (A.MODELO_ID = M.CODIGO OR A.MODELO_ID = M.MODELO_PAI OR A.MODELO_PAI = M.CODIGO OR A.MODELO_PAI = M.MODELO_PAI) )) X WHERE SALDO > 0 INTO SOBRA_ID, SOBRA_SALDO DO BEGIN QUANTIDADE_SOBRA = COALESCE(( SELECT SUM(S.QUANTIDADE) FROM TBREQUISICAO_SOBRA S WHERE S.REMESSA = :I_REMESSA_ID AND S.TALAO = :REMESSA_TALAO_ID AND S.REQUISICAO_ID = 0), 0.0000); IF ( SOBRA_SALDO >= (QUANTIDADE_TALAO - QUANTIDADE_SOBRA) ) THEN BEGIN SOBRA_QUANTIDADE_ALOCAR = (QUANTIDADE_TALAO - QUANTIDADE_SOBRA); END ELSE IF ( SOBRA_SALDO < (QUANTIDADE_TALAO - QUANTIDADE_SOBRA) ) THEN BEGIN SOBRA_QUANTIDADE_ALOCAR = SOBRA_SALDO; END IF ( SOBRA_QUANTIDADE_ALOCAR > 0 ) THEN BEGIN INSERT INTO TBREQUISICAO_SOBRA ( REQUISICAO_ID, SOBRA_ID, REMESSA, TALAO, QUANTIDADE, SALDO, STATUS, PRODUTO_ID_ORIGINAL) VALUES ( 0, :SOBRA_ID, :I_REMESSA_ID, :REMESSA_TALAO_ID, :SOBRA_QUANTIDADE_ALOCAR, :SOBRA_QUANTIDADE_ALOCAR, 0, :PRODUTO_ID); END END END EXECUTE PROCEDURE SPI_HISTORICO('TBREMESSA',:I_REMESSA_ID,'VERIFICACAO DE SOBRAS PROCESSADA'); end ^ ALTER PROCEDURE SPU_CONFERENCIA_TRANSACAO( I_ESTOQUE_ID VARCHAR(3000), I_OPERADOR_ID INTEGER, I_CONFERIR INTEGER = 2) AS DECLARE VARIABLE ESTOQUE_ID INTEGER; DECLARE VARIABLE OPERADOR_DESCRICAO VARCHAR(200); DECLARE VARIABLE CONFERENCIA_DESCRICAO VARCHAR(50); BEGIN FOR SELECT OSPLIT FROM SPLIT(:I_ESTOQUE_ID,',') INTO ESTOQUE_ID DO BEGIN OPERADOR_DESCRICAO = COALESCE(( SELECT FIRST 1 NOME FROM TBOPERADOR O WHERE O.CODIGO = :I_OPERADOR_ID),''); UPDATE TBESTOQUE_TRANSACAO_ITEM I SET I.CONFERENCIA = :I_CONFERIR WHERE I.CONTROLE IN (:ESTOQUE_ID); IF ( I_CONFERIR = 1 ) THEN BEGIN CONFERENCIA_DESCRICAO = 'DESCONFERIDO'; END ELSE IF ( I_CONFERIR = 2 ) THEN BEGIN CONFERENCIA_DESCRICAO = 'CONFERIDO'; END ELSE BEGIN EXCEPTION "..." 'OPERACAO DE CONFERENCIA INVALIDA'; END EXECUTE PROCEDURE SPI_HISTORICO( 'TBESTOQUE_TRANSACAO_ITEM', :ESTOQUE_ID, 'ESTOQUE ' || CONFERENCIA_DESCRICAO || ' PELO OPERADOR: ' || :I_OPERADOR_ID || ' - ' || :OPERADOR_DESCRICAO ); END END ^ ALTER PROCEDURE SPU_CUSTO_MEDIO( DATA_1 DATE) RETURNS ( ESTABELECIMENTO_ID INTEGER, PRODUTO_ID INTEGER, DATA DATE, CUSTO_MEDIO NUMERIC(15,4), CUSTO1 NUMERIC(15,4), CUSTO2 NUMERIC(15,4), SALDO1 NUMERIC(15,4)) AS declare variable atualiza_custo char(1); declare variable tipo char(1); declare variable quantidade numeric(15,4); declare variable custo_unitario numeric(15,4); declare variable valor_custo numeric(15,4); declare variable transacao_data date; declare variable controle integer; declare variable localizacao_id integer; declare variable id integer; declare variable custo_padrao numeric(15,4); BEGIN -- Verifica os registros que precisam ter o custo medio atualizado For Select E.Estabelecimento_Codigo, E.Produto_Codigo, Min(E.Data) Data From TbEstoque_Saldo_Diario E, TbProduto P, TbTipoProduto T, TBFAMILIA F, TbConfiguracao_Periodo CP Where E.Produto_Codigo = P.Codigo AND F.Codigo = P.Familia_Codigo and P.TipoProduto_Codigo = T.Codigo and T.Custo = '1' and E.Data >= Coalesce( Cast(:Data_1 as Date) ,'01.01.2015') and Coalesce(E.Atualizacao,'0') = '0' and E.Data Between CP.DataInicial and CP.DataFinal and CP.Modulo_Codigo = 12 --Inventario and F.Inventario = '1' and CP.Estabelecimento_Codigo = E.Estabelecimento_Codigo Group By 1,2 INTO :Estabelecimento_ID,:Produto_Id,:Data DO Begin Custo_Medio = 0.0000; Saldo1 = 0.0000; Custo1 = 0.0000; ID = 0; Custo_Padrao = Coalesce((Select First 1 PC.CustoUnitario_Padrao From TbProduto_Contabil PC Where :Produto_Id = PC.Produto_Codigo),0.0000); -- Pega o ultimo valor financeiro do estoque -- (Custo Medio * (Estoque Fisico + Em Terc.)) -- antes da data que será atualizado o custo For Select Z.Saldo, Cast(Z.Custo as Numeric(15,4)) Custo, IIF(Z.Saldo>0,Cast(Z.Custo / Z.Saldo as Numeric(15,4)),0.0000) Custo_Medio From ( Select Sum(V.Saldo) S1, Sum(V.Saldo_EmTerceiro) S2, Sum(V.Saldo + V.Saldo_EmTerceiro) Saldo, Sum((V.Saldo+ V.Saldo_EmTerceiro) * V.Custo_Medio) Custo From ( Select X.Localizacao_Id, Cast(SubString(X.Saldos From 1 For 20) as Numeric(15,4)) Saldo, Cast(SubString(X.Saldos From 21 For 20) as Numeric(15,4)) Saldo_EmTerceiro, Cast(SubString(X.Saldos From 41 For 20) as Numeric(15,4)) Custo_Medio, SubString(X.Saldos From 61 For 10) Data From ( Select L.Localizacao_Codigo Localizacao_Id, Coalesce((Select First 1 lPad(A.Saldo,20,'0')|| lPad(A.Saldo_EmTerceiro,20,'0')|| lPad(A.Custo_Medio,20,'0')|| A.Data From TbEstoque_Saldo_Diario A Where A.Estabelecimento_Codigo = L.Estabelecimento_Codigo and A.Produto_Codigo = L.Produto_Codigo and A.Localizacao_Codigo = L.Localizacao_Codigo and A.Data < :Data Order By A.Data Desc),'00000000000000.0000000000000000000.0000000000000000000.000002000-01-01') Saldos From TbEstoque_Saldo L Where L.Estabelecimento_Codigo = :Estabelecimento_ID and L.Produto_Codigo = :Produto_Id ) X) V) Z Into :Saldo1, :Custo1, :Custo_Medio Do Begin id = 1; End -- Carrega todas as transacoes de estoque -- a partir da data de ajuste dos custos medios For Select O.Atualiza_Custo, O.Tipo, E.Controle, E.Quantidade, --O.Estoque, O.NotaFiscal, E.Operacao_Codigo, E.Custo_Unitario, E.Data, E.Localizacao_Codigo, IIF(E.Nfe_item_controle>0,(Select First 1 IIF(Valor_Custo>0,Valor_Custo,Valor_Unitario) From TbNfe_Item Where Controle = E.Nfe_Item_Controle), IIF(E.Nfs_item_controle>0,(Select First 1 IIF(Valor_Contabil>0,Valor_Contabil/Quantidade,Valor_Unitario) From TbNfs_Item Where Controle = E.Nfs_Item_Controle), E.CUSTO_MEDIO)) Valor_Custo From TbEstoque_Transacao_Item E, TbOperacao O Where E.Operacao_Codigo = O.Codigo and E.Estabelecimento_Codigo = :Estabelecimento_ID and E.Produto_Codigo = :Produto_Id and E.Data >= :Data --and O.Atualiza_Custo = '1' Order By E.Data, O.Atualiza_Custo Desc, E.Controle Into :Atualiza_Custo, :Tipo, :Controle, :Quantidade, --:Estoque, :NotaFiscal, :Operacao, :Custo_Unitario, :Transacao_Data, :Localizacao_Id, :Valor_Custo DO Begin Custo2 = 0.0000; if (:Tipo = 'E') then Begin Saldo1 = :Saldo1 + :Quantidade; End else if (:Tipo = 'S') then Begin Saldo1 = :Saldo1 - :Quantidade; End if (:Atualiza_Custo = '1' and :Valor_Custo > 0) then Begin if (:Valor_Custo <> :Custo_Unitario) then Begin Update TbEstoque_Transacao_Item Set Custo_Unitario = :Valor_Custo Where Controle = :Controle and Produto_Codigo = :Produto_Id and Data = :Transacao_Data and Estabelecimento_Codigo = :Estabelecimento_Id and Localizacao_Codigo = :Localizacao_Id; End if (:id = 1) then Begin if (:Custo_Medio > 0) then Begin Custo2 = Cast(:Quantidade * :Valor_Custo as Numeric(15,4)); --Custo Total do Registro if (:Saldo1 > 0) then begin Custo_Medio = Cast((:Custo1 + :Custo2) / (:Saldo1) as Numeric(15,4)); --Custo Medio (Custo Total Anterior + Custo Total do Registro / Estoque Até aquele registro End else Begin Custo_Medio = 0; End Custo1 = Cast((:Saldo1 * :Custo_Medio) as Numeric(15,4)); --Custo Total do Produto até aquele registro Update TbEstoque_Saldo_Diario Set Atualizacao = '1', Custo_Medio = :Custo_Medio Where Produto_Codigo = :Produto_Id And Data = :Transacao_Data and Estabelecimento_Codigo = :Estabelecimento_Id; End Else -- if (:Custo_Medio <= 0) then Begin if (:Custo_Padrao > 0) Then Begin Custo_Medio = :CUSTO_PADRAO; --Custo Medio Custo1 = Cast((:Saldo1 * :Custo_Medio) as Numeric(15,4)); --Custo Total do Produto até aquele registro Update TbEstoque_Saldo_Diario Set Atualizacao = '1', Custo_Medio = :Custo_Padrao Where Produto_Codigo = :Produto_Id And Data = :Transacao_Data and Estabelecimento_Codigo = :Estabelecimento_Id; End else if (:VALOR_CUSTO > 0) Then Begin Custo_Medio = :Valor_Custo; --Custo Medio Custo1 = Cast((:Saldo1 * :Custo_Medio) as Numeric(15,4)); --Custo Total do Produto até aquele registro Update TbEstoque_Saldo_Diario Set Atualizacao = '1', Custo_Medio = :VALOR_CUSTO Where Produto_Codigo = :Produto_Id And Data = :Transacao_Data and Estabelecimento_Codigo = :Estabelecimento_Id; End End End else -- if (:id = 0) then Begin Id = 1; Custo_Medio = :Valor_Custo; Custo1 = Cast((:Saldo1 * :Custo_Medio) as Numeric(15,4)); --Custo Total do Produto até aquele registro Update TbEstoque_Saldo_Diario Set Atualizacao = '1', Custo_Medio = :Custo_Medio Where Produto_Codigo = :Produto_Id And Data = :Transacao_Data and Estabelecimento_Codigo = :Estabelecimento_Id; End End else -- if (:Atualiza_Custo = '1' and :Valor_Custo > 0) then Begin If (:Custo_Medio > 0 or :Valor_Custo > 0 or :Custo_Padrao > 0) Then Begin if (:Custo_Medio = 0) then Begin If (:Custo1 > 0 and :Saldo1 > 0) Then Begin Custo_Medio = Cast(:Custo1 / :Saldo1 as Numeric(15,4)); End else If (:Valor_Custo > 0) Then Begin Custo_Medio = :Valor_Custo; End else If (:Custo_Padrao > 0) Then Begin Custo_Medio = :Custo_Padrao; End End Custo1 = :Saldo1 * :Custo_Medio; --Custo Total do Produto até aquele registro Update TbEstoque_Saldo_Diario Set Atualizacao = '1', Custo_Medio = :Custo_Medio Where Produto_Codigo = :Produto_Id And Data = :Transacao_Data and Estabelecimento_Codigo = :Estabelecimento_Id; End End End End End ^ ALTER PROCEDURE SPU_LIBERACAO_TALAO_COLETOR( COD_BARRAS VARCHAR(100), OPERADOR_ID INTEGER) RETURNS ( PRODUTO_ID INTEGER, PRODUTO_DESCRICAO VARCHAR(100), OPERACAO1 VARCHAR(10), OPERACAO2 VARCHAR(10), LOCALIZACAO_ID_VELHA INTEGER, LOCALIZACAO_ID_NOVA INTEGER, LOCALIZACAO_DESC_VELHA VARCHAR(100), LOCALIZACAO_DESC_NOVA VARCHAR(100), REMESSA VARCHAR(20), TALAO VARCHAR(20), QUANTIDADE VARCHAR(15), FAMILIA INTEGER, ID VARCHAR(20), QUANTIDADE_ALT VARCHAR(15), SITUACAO INTEGER) AS declare variable tipo_cod_barras integer; declare variable id_codbarras varchar(20); declare variable posicao integer; declare variable tamanho integer; declare variable estab integer; begin :TIPO_COD_BARRAS = 0; if(position('P' in :COD_BARRAS) > 0)then begin :TIPO_COD_BARRAS = 1; POSICAO = 2; end if(position('RD' in :COD_BARRAS) > 0)then begin :TIPO_COD_BARRAS = 2; POSICAO = 3; end if(position('RA' in :COD_BARRAS) > 0)then begin :TIPO_COD_BARRAS = 3; POSICAO = 3; end :TAMANHO = char_length(:COD_BARRAS); :ID_CODBARRAS = substring(:COD_BARRAS from POSICAO for TAMANHO); ID_CODBARRAS = cast(cast(ID_CODBARRAS as integer) as varchar(20)); if(:TIPO_COD_BARRAS = 1)then begin for select r.produto_id as produto_cod, p.descricao as produto_desc, r.saldo as QUANTIDADE, r.localizacao_entrada, '' as remessa, '' as talao, P.familia_codigo, r.estabelecimento_id, r.situacao from tbrevisao r, tbproduto p where r.id = :ID_CODBARRAS and p.codigo = r.produto_id into :produto_id, :produto_descricao, :QUANTIDADE, :localizacao_id_velha, :remessa, :talao, :FAMILIA, :ESTAB, :SITUACAO do begin :QUANTIDADE_ALT = 0; end end else begin if(:TIPO_COD_BARRAS = 2)then begin for select first 1 d.produto_id, p.descricao as produto_descricao, d.quantidade_saldo, d.quantidade_altern_producao, d.localizacao_id as localizacao_id_velha, d.remessa_id, d.remessa_talao_id, p.familia_codigo as FAMILIA, v.estabelecimento_id, t.status from vwremessa_talao_detalhe d, vwremessa_talao t, vwremessa v, tbproduto p where d.id = :ID_CODBARRAS and p.codigo = d.produto_id and v.remessa_id = d.remessa_id and t.remessa_id = d.remessa_id and t.remessa_talao_id = d.remessa_talao_id into :produto_id, :produto_descricao, :QUANTIDADE, :QUANTIDADE_ALT, :localizacao_id_velha, :remessa, :talao, :FAMILIA, :ESTAB, :SITUACAO do begin end end else begin if(:TIPO_COD_BARRAS = 3)then begin for select m.codigo as produto_id, m.descricao as produto_descricao, sum(d.quantidade_saldo) as QUANTIDADE, sum(d.quantidade_altern_saldo) QUANTIDADE_ALT, d.localizacao_id as localizacao_id_velha, d.remessa_id, d.remessa_talao_id, v.familia_id as FAMILIA, v.estabelecimento_id, t.status from vwremessa_talao t, vwremessa_talao_detalhe d, vwremessa v, tbmodelo m where t.id = :ID_CODBARRAS and v.remessa_id = d.remessa_id and d.remessa_id = t.remessa_id and d.remessa_talao_id = t.remessa_talao_id and m.codigo = d.modelo_id group by 1,2,5,6,7,8,9,10 into :produto_id, :produto_descricao, :QUANTIDADE, :QUANTIDADE_ALT, :localizacao_id_velha, :remessa, :talao, :FAMILIA, :ESTAB, :SITUACAO do begin end end else begin exception "..." 'Item não foi encontrado'; end end end :operacao1 = coalesce((select first 1 n.valor_ext from tbcontrole_n n where n.id = 122),''); :operacao2 = coalesce((select first 1 n.valor_ext from tbcontrole_n n where n.id = 121),''); :localizacao_id_nova = coalesce((select first 1 n.localizacao_processo from tbfamilia_ficha n where n.familia_codigo = :FAMILIA and n.estabelecimento_codigo = :ESTAB),0); :localizacao_desc_nova = coalesce((select first 1 n.descricao from tblocalizacao n where n.codigo = :localizacao_id_nova and n.estabelecimento_codigo = :ESTAB),''); :localizacao_desc_velha = coalesce((select first 1 n.descricao from tblocalizacao n where n.codigo = :localizacao_id_velha and n.estabelecimento_codigo = :ESTAB),''); if(TIPO_COD_BARRAS = 1)then begin :ID = 'P/' ||:ID_CODBARRAS; end if(TIPO_COD_BARRAS = 2)then begin :ID = 'RD/'||:ID_CODBARRAS; end if(TIPO_COD_BARRAS = 3)then begin :ID = 'RA/'||:ID_CODBARRAS; end if(:quantidade = 0)then begin exception "..." 'O saldo deste item é 0'; end if(:TIPO_COD_BARRAS > 1)then begin if(:SITUACAO <> 2)then begin exception "..." 'Este talão não esta produzido'; end end if(:SITUACAO = 3)then begin exception "..." 'Este talão já foi liberado'; end if(:localizacao_id_nova = 0)then begin exception "..." 'Familia sem estoque de processo definida. Familia:'||coalesce(:FAMILIA,0); end if(:localizacao_id_velha = 0)then begin exception "..." 'Item sem localizacao definida. Localizacao:'||coalesce(:localizacao_id_velha,0); end suspend; end ^ ALTER PROCEDURE SPU_LIBERAR_TALAO_COLETOR( COD_BARRAS VARCHAR(100), OPERADOR_ID INTEGER) AS DECLARE VARIABLE PRODUTO_ID INTEGER; DECLARE VARIABLE PRODUTO_DESCRICAO VARCHAR(100); DECLARE VARIABLE OPERACAO1 VARCHAR(10); DECLARE VARIABLE OPERACAO2 VARCHAR(10); DECLARE VARIABLE LOCALIZACAO_ID_VELHA INTEGER; DECLARE VARIABLE LOCALIZACAO_ID_NOVA INTEGER; DECLARE VARIABLE LOCALIZACAO_DESC_VELHA VARCHAR(100); DECLARE VARIABLE LOCALIZACAO_DESC_NOVA VARCHAR(100); DECLARE VARIABLE REMESSA VARCHAR(20); DECLARE VARIABLE TALAO VARCHAR(20); DECLARE VARIABLE QUANTIDADE NUMERIC(15,2); DECLARE VARIABLE FAMILIA INTEGER; DECLARE VARIABLE ID VARCHAR(20); DECLARE VARIABLE QUANTIDADE_ALT NUMERIC(15,2); DECLARE VARIABLE TIPO_COD_BARRAS INTEGER; DECLARE VARIABLE ID_CODBARRAS VARCHAR(20); DECLARE VARIABLE POSICAO INTEGER; DECLARE VARIABLE TAMANHO INTEGER; DECLARE VARIABLE ESTAB INTEGER; DECLARE VARIABLE TRATAR_ESTOQUE INTEGER; DECLARE VARIABLE ESTOQUE_ID_SAIDA INTEGER; DECLARE VARIABLE ESTOQUE_ID_ENTRADA INTEGER; DECLARE VARIABLE CONTROLE INTEGER; DECLARE VARIABLE CCUSTO VARCHAR(10); DECLARE VARIABLE ACUMULADO INTEGER; begin :TIPO_COD_BARRAS = 0; :TRATAR_ESTOQUE = 0; if(position('P' in :COD_BARRAS) > 0)then begin :TIPO_COD_BARRAS = 1; POSICAO = 2; end if(position('RD' in :COD_BARRAS) > 0)then begin :TIPO_COD_BARRAS = 2; POSICAO = 3; end if(position('RA' in :COD_BARRAS) > 0)then begin :TIPO_COD_BARRAS = 3; POSICAO = 3; end :TAMANHO = char_length(:COD_BARRAS); :ID_CODBARRAS = substring(:COD_BARRAS from POSICAO for TAMANHO); ID_CODBARRAS = cast(cast(ID_CODBARRAS as integer) as varchar(20)); if(:TIPO_COD_BARRAS = 1)then begin for select r.produto_id as produto_cod, p.descricao as produto_desc, r.saldo as QUANTIDADE, r.localizacao_entrada, '' as remessa, '' as talao, P.familia_codigo, r.estabelecimento_id, r.tamanho from tbrevisao r, tbproduto p where r.id = :ID_CODBARRAS and p.codigo = r.produto_id into :produto_id, :produto_descricao, :QUANTIDADE, :localizacao_id_velha, :remessa, :talao, :FAMILIA, :ESTAB, :TAMANHO do begin :TRATAR_ESTOQUE = 1; end end else begin if(:TIPO_COD_BARRAS = 2)then begin for select first 1 d.produto_id, p.descricao as produto_descricao, d.quantidade_saldo, d.quantidade_altern_producao, d.localizacao_id as localizacao_id_velha, d.remessa_id, d.remessa_talao_id, p.familia_codigo as FAMILIA, v.estabelecimento_id, d.tamanho from vwremessa_talao_detalhe d, vwremessa v, tbproduto p where d.id = :ID_CODBARRAS and p.codigo = d.produto_id and v.remessa_id = d.remessa_id into :produto_id, :produto_descricao, :QUANTIDADE, :QUANTIDADE_ALT, :localizacao_id_velha, :remessa, :talao, :FAMILIA, :ESTAB, :TAMANHO do begin :TRATAR_ESTOQUE = 1; end end else begin if(:TIPO_COD_BARRAS = 3)then begin for select m.codigo as produto_id, m.descricao as produto_descricao, d.quantidade_saldo as QUANTIDADE, d.quantidade_altern_saldo QUANTIDADE_ALT, d.localizacao_id as localizacao_id_velha, d.remessa_id, d.remessa_talao_id, v.familia_id as FAMILIA, v.estabelecimento_id, t.tamanho from vwremessa_talao t, vwremessa_talao_detalhe d, vwremessa v, tbmodelo m where t.id = :ID_CODBARRAS and v.remessa_id = d.remessa_id and d.remessa_id = t.remessa_id and d.remessa_talao_id = t.remessa_talao_id and m.codigo = d.modelo_id into :produto_id, :produto_descricao, :QUANTIDADE, :QUANTIDADE_ALT, :localizacao_id_velha, :remessa, :talao, :FAMILIA, :ESTAB, :TAMANHO do begin :TRATAR_ESTOQUE = 0; end end else begin exception "..." 'Item não foi encontrado'; end end end --FIM TRATAMENTO :operacao1 = coalesce((select first 1 n.valor_ext from tbcontrole_n n where n.id = 122),''); :operacao2 = coalesce((select first 1 n.valor_ext from tbcontrole_n n where n.id = 121),''); :localizacao_id_nova = coalesce((select first 1 n.localizacao_processo from tbfamilia_ficha n where n.familia_codigo = :FAMILIA and n.estabelecimento_codigo = :ESTAB),0); :localizacao_desc_nova = coalesce((select first 1 n.descricao from tblocalizacao n where n.codigo = :localizacao_id_nova and n.estabelecimento_codigo = :ESTAB),''); if(:quantidade = 0)then begin exception "..." 'O saldo deste item é 0'; end if(:localizacao_id_nova = 0)then begin exception "..." 'Familia sem estoque de processo definida. Familia:'||coalesce(:FAMILIA,0); end if((:localizacao_id_velha = 0) or (:localizacao_id_velha is null) )then begin exception "..." 'Item sem localizacao de estoque. pode nao esta produzido'; end if(coalesce(:produto_id,0) = 0)then begin exception "..." 'Produto nao definido. Produto:'||coalesce(:produto_id,0); end if((:operacao1 = '') or (:operacao1 = ''))then begin exception "..." 'Operacao de Entrada/Saida nao definida:'||coalesce(:produto_id,0); end if(:TRATAR_ESTOQUE = 1)then begin ESTOQUE_ID_SAIDA = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0); ESTOQUE_ID_ENTRADA = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0); --saida do saldo EXECUTE PROCEDURE SPU_ESTOQUE_SALDO4 ( :ESTAB, :localizacao_id_velha, :produto_id, 'S', /* S = SAIDA NO ESTOQUE */ current_date, :QUANTIDADE, IIF(:TAMANHO = 1,:QUANTIDADE,0), IIF(:TAMANHO = 2,:QUANTIDADE,0), IIF(:TAMANHO = 3,:QUANTIDADE,0), IIF(:TAMANHO = 4,:QUANTIDADE,0), IIF(:TAMANHO = 5,:QUANTIDADE,0), IIF(:TAMANHO = 6,:QUANTIDADE,0), IIF(:TAMANHO = 7,:QUANTIDADE,0), IIF(:TAMANHO = 8,:QUANTIDADE,0), IIF(:TAMANHO = 9,:QUANTIDADE,0), IIF(:TAMANHO =10,:QUANTIDADE,0), IIF(:TAMANHO =11,:QUANTIDADE,0), IIF(:TAMANHO =12,:QUANTIDADE,0), IIF(:TAMANHO =13,:QUANTIDADE,0), IIF(:TAMANHO =14,:QUANTIDADE,0), IIF(:TAMANHO =15,:QUANTIDADE,0), IIF(:TAMANHO =16,:QUANTIDADE,0), IIF(:TAMANHO =17,:QUANTIDADE,0), IIF(:TAMANHO =18,:QUANTIDADE,0), IIF(:TAMANHO =19,:QUANTIDADE,0), IIF(:TAMANHO =20,:QUANTIDADE,0), :ESTOQUE_ID_SAIDA, ID_CODBARRAS, 0, 0, :operacao1, 0, 0, 0, 0, 0, Current_Date, 0, :CCUSTO, 'SAIDA INTERNA DA PRODUCAO', '0', 0, 0, 0, 0 ); --saida do saldo EXECUTE PROCEDURE SPU_ESTOQUE_SALDO4 ( :ESTAB, :localizacao_id_nova, :produto_id, 'E', /* E = ENTRADA NO ESTOQUE */ current_date, :QUANTIDADE, IIF(:TAMANHO = 1,:QUANTIDADE,0), IIF(:TAMANHO = 2,:QUANTIDADE,0), IIF(:TAMANHO = 3,:QUANTIDADE,0), IIF(:TAMANHO = 4,:QUANTIDADE,0), IIF(:TAMANHO = 5,:QUANTIDADE,0), IIF(:TAMANHO = 6,:QUANTIDADE,0), IIF(:TAMANHO = 7,:QUANTIDADE,0), IIF(:TAMANHO = 8,:QUANTIDADE,0), IIF(:TAMANHO = 9,:QUANTIDADE,0), IIF(:TAMANHO =10,:QUANTIDADE,0), IIF(:TAMANHO =11,:QUANTIDADE,0), IIF(:TAMANHO =12,:QUANTIDADE,0), IIF(:TAMANHO =13,:QUANTIDADE,0), IIF(:TAMANHO =14,:QUANTIDADE,0), IIF(:TAMANHO =15,:QUANTIDADE,0), IIF(:TAMANHO =16,:QUANTIDADE,0), IIF(:TAMANHO =17,:QUANTIDADE,0), IIF(:TAMANHO =18,:QUANTIDADE,0), IIF(:TAMANHO =19,:QUANTIDADE,0), IIF(:TAMANHO =20,:QUANTIDADE,0), :estoque_id_entrada, ID_CODBARRAS, 0, 0, :operacao2, 0, 0, 0, 0, 0, Current_Date, 0, :CCUSTO, 'RETORNO INTERNO P/PRODUCAO', '0', 0, 0, 0, 0 ); end if(:TIPO_COD_BARRAS = 1)then begin update tbrevisao r set r.situacao = 3, r.estoque_id_s_transf = :estoque_id_saida, r.estoque_id_e_transf = :estoque_id_entrada, r.localizacao_entrada = :localizacao_id_nova where r.id = :ID_CODBARRAS; end if(:TIPO_COD_BARRAS = 2)then begin ACUMULADO = coalesce((select t.id from vwremessa_talao_detalhe d, vwremessa_talao t where d.id = :ID_CODBARRAS and t.remessa_id = d.remessa_id and t.remessa_talao_id = d.remessa_talao_id),0); if(:ACUMULADO <= 0)then begin exception "..." 'Erro ao consultar talão detalhado:'||coalesce(:produto_id,0); end update vwremessa_talao_detalhe t set t.estoque_id_s_transf = :estoque_id_saida, t.estoque_id_e_transf = :estoque_id_entrada, t.localizacao_id = :localizacao_id_nova where t.id = :ID_CODBARRAS; update vwremessa_talao t set t.status = 3 where t.id = :ACUMULADO; end if(:TIPO_COD_BARRAS = 3)then begin update vwremessa_talao t set t.status = 3 where t.id = :ID_CODBARRAS; end end ^ ALTER PROCEDURE SPU_PEDIDO_CLASSIFICACAO( DATA_1 DATE, DATA_2 DATE, PEDIDO_1 VARCHAR(10)) RETURNS ( PEDIDO INTEGER, MODCOR4000A9999 INTEGER, MODCOR2000A4000 INTEGER, MODCOR1000A2000 INTEGER, MODCOR0600A1000 INTEGER, MODCOR0200A0600 INTEGER, MODCOR0000A0200 INTEGER) AS declare variable vmod integer; declare variable vcor integer; declare variable vqtd integer; Begin FOR Select Pedido From TbPedido Where Data BETWEEN :Data_1 and :Data_2 and Pedido Like :Pedido_1 Into :Pedido Do begin -- sku1200a9999 = 0; -- sku0800a1200 = 0; -- sku0400a0800 = 0; -- sku0200a0400 = 0; -- sku0000a0200 = 0; modcor4000a9999 = 0; modcor2000a4000 = 0; modcor1000a2000 = 0; modcor0600a1000 = 0; modcor0200a0600 = 0; modcor0000a0200 = 0; -- vClasse = 0; /* For Select PI.Modelo_codigo, PI.Cor_id, PI.Tamanho, Sum(PI.Quantidade) From TbPedido_item PI Where Pedido = :Pedido Group by 1,2,3 Into :vMod,:vCor,:vTam,:vQtd do begin if (vQtd >= 1200) then sku1200a9999 = sku1200a9999 + 1; else if (vQtd >= 0800) then sku0800a1200 = sku0800a1200 + 1; else if (vQtd >= 0400) then sku0400a0800 = sku0400a0800 + 1; else if (vQtd >= 0200) then sku0200a0400 = sku0200a0400 + 1; else if (vQtd < 0200) then sku0000a0200 = sku0000a0200 + 1; end */ For Select PI.Modelo_codigo, PI.Cor_Id, Sum(PI.Quantidade) From TbPedido_item PI Where Pedido = :Pedido Group by 1,2 Into :vMod,:vCor,:vQtd do begin if (vQtd > 4000) then Begin UPDATE TBPEDIDO_ITEM SET CLASSIFICACAO = 0 WHERE PEDIDO = :PEDIDO AND MODELO_CODIGO = :vMod and Cor_Id = :vCor; modcor4000a9999 = modcor4000a9999 + 1; End else if (vQtd > 2000) then Begin UPDATE TBPEDIDO_ITEM SET CLASSIFICACAO = 1 WHERE PEDIDO = :PEDIDO AND MODELO_CODIGO = :vMod and Cor_Id = :vCor; modcor2000a4000 = modcor2000a4000 + 1; End else if (vQtd > 1000) then Begin UPDATE TBPEDIDO_ITEM SET CLASSIFICACAO = 2 WHERE PEDIDO = :PEDIDO AND MODELO_CODIGO = :vMod and Cor_Id = :vCor; modcor1000a2000 = modcor1000a2000 + 1; End else if (vQtd > 0600) then Begin UPDATE TBPEDIDO_ITEM SET CLASSIFICACAO = 3 WHERE PEDIDO = :PEDIDO AND MODELO_CODIGO = :vMod and Cor_Id = :vCor; modcor0600a1000 = modcor0600a1000 + 1; End else if (vQtd > 0200) then Begin UPDATE TBPEDIDO_ITEM SET CLASSIFICACAO = 4 WHERE PEDIDO = :PEDIDO AND MODELO_CODIGO = :vMod and Cor_Id = :vCor; modcor0200a0600 = modcor0200a0600 + 1; End else if (vQtd<= 0200) then Begin UPDATE TBPEDIDO_ITEM SET CLASSIFICACAO = 5 WHERE PEDIDO = :PEDIDO AND MODELO_CODIGO = :vMod and Cor_Id = :vCor; modcor0000a0200 = modcor0000a0200 + 1; End /* if (vQtd >= 4000) then modcor4000a9999 = modcor4000a9999 + 1; else if (vQtd >= 2000) then modcor2000a9999 = modcor2000a9999 + 1; else if (vQtd >= 1000) then modcor1000a2000 = modcor1000a2000 + 1; else if (vQtd < 1000) then modcor0000a1000 = modcor0000a1000 + 1; */ end /* if (modcor4000a9999 >=1 and modcor2000a4000 = 0 and modcor1000a2000 = 0 and modcor0600a1000 = 0 and modcor0200a0600 = 0 and modcor0000a0200 = 0) Then vClasse = 0; else if (modcor4000a9999 + modcor2000a4000 >=1 and modcor1000a2000 = 0 and modcor0600a1000 = 0 and modcor0200a0600 = 0 and modcor0000a0200 = 0) Then vClasse = 1; else if (modcor4000a9999 + modcor2000a4000 + modcor1000a2000 >=1 and modcor0600a1000 = 0 and modcor0200a0600 = 0 and modcor0000a0200 = 0) Then vClasse = 2; else if (modcor4000a9999 + modcor2000a4000 + modcor1000a2000 + modcor0600a1000 >=1 and modcor0200a0600 = 0 and modcor0000a0200 = 0) Then vClasse = 3; else if (modcor4000a9999 + modcor2000a4000 + modcor1000a2000 + modcor0600a1000 + modcor0200a0600 >=1 and modcor0000a0200 = 0) Then vClasse = 4; else if (modcor4000a9999 + modcor2000a4000 + modcor1000a2000 + modcor0600a1000 + modcor0200a0600 + modcor0000a0200 >=1) Then vClasse = 5; */ /* if (sku1200a9999 >=1 and sku0800a1200 = 0 and sku0400a0800 = 0 and sku0200a0400 = 0 and sku0000a0200 = 0) Then vClasse = 0; else if (modcor4000a9999 >=1 and modcor2000a9999 = 0 and modcor1000a2000 = 0 and modcor0000a1000 = 0) Then vClasse = 1; else if (sku1200a9999 + sku0800a1200 + sku0400a0800 >=1 and sku0200a0400 = 0 and sku0000a0200 = 0) Then vClasse = 2; else if (modcor4000a9999 + modcor2000a9999 >=1 and modcor1000a2000 = 0 and modcor0000a1000 = 0) Then vClasse = 3; else if (modcor4000a9999 + modcor2000a9999 + modcor1000a2000 >=1 and modcor0000a1000 = 0) Then vClasse = 4; else if (sku1200a9999 >=1 and sku0200a0400 + sku0000a0200 >=1) Then vClasse = 5; else if (sku1200a9999+ sku0800a1200+ sku0400a0800 >=1 and sku0200a0400 + sku0000a0200 >=1) Then vClasse = 6; else if (sku1200a9999 = 0 and sku0800a1200 = 0 and sku0400a0800 = 0 and sku0200a0400 >=1 and sku0000a0200 = 0) Then vClasse = 7; else if (sku1200a9999 = 0 and sku0800a1200 = 0 and sku0400a0800 = 0 and sku0200a0400 = 0 and sku0000a0200 >=1) Then vClasse = 8; else vClasse = 9; */ if (modcor4000a9999 >=1) Then UPDATE or INSERT INTO TBPEDIDO_CLASSIFICACAO (PEDIDO, CLASSIFICACAO) VALUES (:PEDIDO,0) MATCHING (PEDIDO,CLASSIFICACAO); if (modcor2000a4000 >=1) Then UPDATE or INSERT INTO TBPEDIDO_CLASSIFICACAO (PEDIDO, CLASSIFICACAO) VALUES (:PEDIDO,1) MATCHING (PEDIDO,CLASSIFICACAO); if (modcor1000a2000 >=1) Then UPDATE or INSERT INTO TBPEDIDO_CLASSIFICACAO (PEDIDO, CLASSIFICACAO) VALUES (:PEDIDO,2) MATCHING (PEDIDO,CLASSIFICACAO); if (modcor0600a1000 >=1) Then UPDATE or INSERT INTO TBPEDIDO_CLASSIFICACAO (PEDIDO, CLASSIFICACAO) VALUES (:PEDIDO,3) MATCHING (PEDIDO,CLASSIFICACAO); if (modcor0200a0600 >=1) Then UPDATE or INSERT INTO TBPEDIDO_CLASSIFICACAO (PEDIDO, CLASSIFICACAO) VALUES (:PEDIDO,4) MATCHING (PEDIDO,CLASSIFICACAO); if (modcor0000a0200 >=1) Then UPDATE or INSERT INTO TBPEDIDO_CLASSIFICACAO (PEDIDO, CLASSIFICACAO) VALUES (:PEDIDO,5) MATCHING (PEDIDO,CLASSIFICACAO); -- UPDATE or INSERT INTO TBPEDIDO_CLASSIFICACAO (PEDIDO, CLASSIFICACAO) VALUES (:PEDIDO,:VCLASSE) MATCHING (PEDIDO); end End ^ /******************************************************************************/ /**** Altering stored functions ****/ /******************************************************************************/ ALTER FUNCTION FN_LOCALIZACAO_CODIGO( CODIGO INTEGER, PRODUTO_ID INTEGER = 0, FAMILIA_ID INTEGER = 0, LOCALIZACAO_ID INTEGER = 0, REMESSA_TALAO_DETALHE_ID INTEGER = 0, GP_ID INTEGER = 0, PERFIL_UP VARCHAR(10) = '', COD_BARRAS VARCHAR(100) = NULL) RETURNS INTEGER AS declare variable ret integer; declare variable localizacao_tipo integer; begin /* retorna o proprio valor informado como localizacao */ if ( codigo < 1001 ) then begin ret = codigo; end else /* codigo tratados */ if ( codigo < 2001 ) then begin /* retorna a localizacao padrao da familia do produto */ if ( codigo = 1001 ) then begin ret = (select first 1 f.localizacao_codigo from tbfamilia f where f.codigo = :familia_id); end else /* retorna a localizacao padrao do produto */ if ( codigo = 1002 ) then begin ret = (select first 1 p.localizacao_codigo from tbproduto p where p.codigo = :produto_id); end else /* retorna a localizacao informada */ if ( codigo = 1003 ) then begin ret = localizacao_id; end else /* retorna a localizacao do talao */ if ( codigo = 1004 ) then begin ret = (select first 1 d.localizacao_id from vwremessa_talao_detalhe d where d.id = :remessa_talao_detalhe_id); end else /* retorna a localizacao do talao */ if ( codigo = 1005 ) then begin ret = FN_LOCALIZACAO_PECA(:COD_BARRAS); end end else /* localizacao pela familia/gp/perfil_up */ if ( codigo < 3001 ) then begin localizacao_tipo = codigo - 2000; ret = (select first 1 l.localizacao_id from tbfamilia_localizacao l where l.familia_id = :familia_id and l.gp_id = :gp_id and l.perfil_up = :perfil_up and l.localizacao_tipo_id = :localizacao_tipo); end return ret; end ^ ALTER FUNCTION FN_LOCALIZACAO_CODIGO2( TIPO INTEGER, PRODUTO_ID INTEGER = 0, FAMILIA_ID INTEGER = 0, LOCALIZACAO_ID INTEGER = 0, REMESSA_TALAO_DETALHE_ID INTEGER = 0, GP_ID INTEGER = 0, UP_ID INTEGER = 0, COD_BARRAS VARCHAR(100) = NULL, FLAG VARCHAR(10) = 'S') RETURNS INTEGER AS declare variable ret integer; declare variable localizacao_tipo integer; declare variable localizacao_id_saida integer; declare variable localizacao_id_entrada integer; declare variable codigo integer; declare variable perfil_up varchar(10); begin select first 1 j.localizacao_id_saida, j.localizacao_id_entrada, j.perfil_up from TBESTOQUE_TRANSACAO_REGRA j, tbup u where j.tipo = :tipo and j.gp_id = :gp_id and j.perfil_up = u.perfil and u.id = :up_id and j.familia_id = :familia_id into :localizacao_id_saida, :localizacao_id_entrada, :perfil_up; if(FLAG = 'E')then begin codigo = localizacao_id_entrada; end else begin codigo = localizacao_id_saida; end /* retorna o proprio valor informado como localizacao */ if ( codigo < 1001 ) then begin ret = codigo; end else /* codigo tratados */ if ( codigo < 2001 ) then begin /* retorna a localizacao padrao da familia do produto */ if ( codigo = 1001 ) then begin ret = (select first 1 f.localizacao_codigo from tbfamilia f where f.codigo = :familia_id); end else /* retorna a localizacao padrao do produto */ if ( codigo = 1002 ) then begin ret = (select first 1 p.localizacao_codigo from tbproduto p where p.codigo = :produto_id); end else /* retorna a localizacao informada */ if ( codigo = 1003 ) then begin ret = localizacao_id; end else /* retorna a localizacao do talao */ if ( codigo = 1004 ) then begin ret = (select first 1 d.localizacao_id from vwremessa_talao_detalhe d where d.id = :remessa_talao_detalhe_id); end else /* retorna a localizacao do talao */ if ( codigo = 1005 ) then begin ret = FN_LOCALIZACAO_PECA(:COD_BARRAS); end end else /* localizacao pela familia/gp/perfil_up */ if ( codigo < 3001 ) then begin localizacao_tipo = codigo - 2000; ret = (select first 1 l.localizacao_id from tbfamilia_localizacao l where l.familia_id = :familia_id and l.gp_id = :gp_id and l.perfil_up = :perfil_up and l.localizacao_tipo_id = :localizacao_tipo); end return ret; end ^ /******************************************************************************/ /**** Restoring deactivated triggers ****/ /******************************************************************************/ ALTER TRIGGER TTBESTOQUE_SALDO_MES_999 AS begin if (inserting) then Begin if (extract(month from New.Data)||extract(year from New.Data) <> extract(month from Current_Date)||extract(year from Current_Date)) then Begin update or insert into tbreplica_tabela (tabela, ano, mes, status) values ('TBESTOQUE_SALDO_MES', Cast( Extract (Year from New.Data) as Integer), Cast( Extract (Month from New.Data) as Integer), '0') matching (tabela, ano, mes); End End if (deleting) then Begin if (extract(month from Old.Data)||extract(year from Old.Data) <> extract(month from Current_Date)||extract(year from Current_Date)) then Begin update tbreplica_tabela set Status = '0' Where tabela = 'TBESTOQUE_SALDO_MES' and ano = Cast( Extract (Year from Old.Data) as Integer) and mes = Cast( Extract (Month from Old.Data) as Integer) and Status = '1'; End End if (updating) then Begin if (extract(month from Old.Data)||extract(year from Old.Data) <> extract(month from Current_Date)||extract(year from Current_Date)) then begin Update tbreplica_tabela set Status = '0' Where tabela = 'TBESTOQUE_SALDO_MES' and ano = Cast( Extract (Year from Old.Data) as Integer) and mes = Cast( Extract (Month from Old.Data) as Integer) and Status = '1'; end if (extract(month from New.Data)||extract(year from New.Data) <> extract(month from Current_Date)||extract(year from Current_Date)) then Begin if (Extract (Year from Old.Data) <> Extract (Year from New.Data) or Extract (Month from Old.Data) <> Extract (Month from New.Data)) then begin update or insert into tbreplica_tabela (tabela, ano, mes, status) values ('TBESTOQUE_SALDO_MES', Cast( Extract (Year from New.Data) as Integer), Cast( Extract (Month from New.Data) as Integer), '0') matching (tabela, ano, mes); End End End end ^ ALTER TRIGGER TTBKANBAN_LOTE_B2I AS declare variable ID INTEGER; declare variable LOCALIZACAO_DESCRICAO VARCHAR(100); declare variable QUANTIDADE_NECESSIDADE NUMERIC(15,5); begin IF ( NEW.LOCALIZACAO_ID IS NULL ) THEN BEGIN EXCEPTION "..." 'INFORME UMA LOCALIZACAO DE ESTOQUE PARA INICIAR UM LOTE'; END QUANTIDADE_NECESSIDADE = COALESCE(( SELECT ESTOQUE_NECESSIDADE FROM ( SELECT SUM(IIF( ESTOQUE_FISICO < ESTOQUE_MIN, ESTOQUE_MAX - ESTOQUE_FISICO, 0 )) ESTOQUE_NECESSIDADE FROM ( SELECT E.ESTOQUE_MIN, E.ESTOQUE_MAX, COALESCE( (SELECT FIRST 1 SUM(SP.SALDO) FROM VWESTOQUE_SALDO_PRODUTO SP WHERE SP.ESTABELECIMENTO_ID = E.ESTABELECIMENTO_ID AND SP.LOCALIZACAO_ID = E.LOCALIZACAO_ID AND SP.PRODUTO_ID = E.PRODUTO_ID AND SP.TAMANHO = E.TAMANHO),0) ESTOQUE_FISICO, COALESCE( (SELECT FIRST 1 SUM(SP.SALDO) FROM VWESTOQUE_SALDO_PRODUTO SP WHERE SP.ESTABELECIMENTO_ID = E.ESTABELECIMENTO_ID AND SP.LOCALIZACAO_ID = P.LOCALIZACAO_CODIGO AND SP.PRODUTO_ID = E.PRODUTO_ID AND SP.TAMANHO = E.TAMANHO),0) PRODUTO_ESTOQUE_FISICO, P.UNIDADEMEDIDA_SIGLA UM FROM VWESTOQUE_MINIMO_TAMANHO E, TBPRODUTO P WHERE TRUE AND P.CODIGO = E.PRODUTO_ID AND P.CODIGO = E.PRODUTO_ID AND E.HABILITA_KANBAN = '1' AND E.LOCALIZACAO_ID = 21 ) X ) Y WHERE ESTOQUE_NECESSIDADE > 0),0); IF ( QUANTIDADE_NECESSIDADE = 0 ) THEN BEGIN EXCEPTION "..." 'NAO HA NECESSIDADE DE INICIAR UM NOVO LOTE PARA ESTA LOCALIZACAO'; END ID = COALESCE(( SELECT FIRST 1 L.ID FROM TBKANBAN_LOTE L WHERE L.LOCALIZACAO_ID = NEW.LOCALIZACAO_ID AND L.STATUS = '0'),0); IF ( ID > 0 ) THEN BEGIN LOCALIZACAO_DESCRICAO = COALESCE(( SELECT FIRST 1 DESCRICAO FROM TBLOCALIZACAO L WHERE L.CODIGO = NEW.LOCALIZACAO_ID),''); EXCEPTION "..." 'O LOTE ' || FN_LPAD(ID,5,'0') || ' JA ESTA INICIADO PARA A LOCALIZACAO: ' || NEW.LOCALIZACAO_ID || ' - ' || LOCALIZACAO_DESCRICAO || '. FINALIZE-O PARA PODER INICIAR UM NOVO LOTE.'; END end ^ ALTER TRIGGER TTBREMESSA_TALAO_VINCULO_B3D AS declare variable HISTORICO VARCHAR(500); declare variable REMESSA_ID INTEGER; declare variable REMESSA_TALAO_ID INTEGER; declare variable CONSUMO_STATUS CHAR(1); begin /* VERIFICACAO DA EXCLUSAO DE TRASACAO DE REMESSAS (WEB15070) */ IF ( OLD.ORIGEM_TABELA = 'TBREMESSA_CONSUMO' AND OLD.ORIGEM_NIVEL = 0 ) THEN BEGIN SELECT FIRST 1 C.REMESSA_ID, C.REMESSA_TALAO_ID, C.STATUS FROM VWREMESSA_CONSUMO C WHERE C.ID = OLD.ORIGEM_TABELA_ID INTO :REMESSA_ID, :REMESSA_TALAO_ID, :CONSUMO_STATUS; IF ( CONSUMO_STATUS = '1' ) THEN BEGIN EXCEPTION "..." 'EXCLUSAO NAO PERMITIDA. CONSUMO: ' || OLD.ORIGEM_TABELA_ID || ' JA BAIXADO DO ESTOQUE.'; END DELETE FROM TBESTOQUE_TRANSACAO_ITEM X WHERE X.CONTROLE = OLD.ESTOQUE_ID_ENTRADA; DELETE FROM TBESTOQUE_TRANSACAO_ITEM X WHERE X.CONTROLE = OLD.ESTOQUE_ID_SAIDA; HISTORICO = 'TALAO : ' || LPAD(REMESSA_TALAO_ID,4,'0') || ' ALTERADO. VINCULO VIA TRANSACAO DE REMESSAS DO CONSUMO:' || OLD.CONSUMO_ID || ' [' || OLD.TIPO || '/' || OLD.TABELA_ID || '] QTD. ' || OLD.QUANTIDADE || IIF(OLD.QUANTIDADE_ALTERNATIVA > 0, ' / ' || OLD.QUANTIDADE_ALTERNATIVA, '') || ' EXCLUIDO'; EXECUTE PROCEDURE SPI_HISTORICO('TBREMESSA',:REMESSA_ID,:HISTORICO); END end ^ ALTER TRIGGER TTBREMESSA_TALAO_VINCULO_B5I AS DECLARE VARIABLE PRODUTO_ID INTEGER; DECLARE VARIABLE TAMANHO INTEGER; declare variable QUERY VARCHAR(500); begin /* VERIFICACAO DO VINCULO DE TRASACAO DE REMESSAS (WEB15070) */ IF ( TRIM(COALESCE(NEW.ORIGEM_TABELA,'')) <> '' ) THEN BEGIN QUERY = COALESCE(( SELECT FIRST 1 QUERY || ' FROM ' || CAST(NEW.ORIGEM_TABELA AS VARCHAR(50)) || ' WHERE ' || TRIM(A.RDB$FIELD_NAME) || ' = ' || NEW.ORIGEM_TABELA_ID FROM (SELECT 'SELECT FIRST 1 ' || LIST(TRIM(RDB$FIELD_NAME),', ') QUERY FROM RDB$RELATION_FIELDS A WHERE A.RDB$RELATION_NAME = NEW.ORIGEM_TABELA AND (A.RDB$FIELD_NAME IN ('PRODUTO_CODIGO','PRODUTO_ID') OR A.RDB$FIELD_NAME IN ('TAMANHO','TAM','TAMANHO_ID')) ORDER BY 1 ) X, RDB$RELATION_FIELDS A WHERE A.RDB$RELATION_NAME = NEW.ORIGEM_TABELA AND A.RDB$FIELD_NAME IN ('CODIGO','ID','CONTROLE') ),''); PRODUTO_ID = 0; FOR EXECUTE STATEMENT QUERY INTO :PRODUTO_ID, :TAMANHO DO BEGIN IF (:PRODUTO_ID <> NEW.PRODUTO_ID OR :TAMANHO <> NEW.TAMANHO) THEN BEGIN EXCEPTION "..." 'VINCULO INVALIDO. PRODUTO/TAMANHO DA ORIGEM DIFERENTE DO ITEM A SER ALOCADO.'; END END IF ( PRODUTO_ID = 0 ) THEN BEGIN EXCEPTION "..." 'VINCULO DE PECA INVALIDO. ORIGEM NAO LOCALIZACADA.'; END END end ^ /******************************************************************************/ /**** Restoring deactivated procedures ****/ /******************************************************************************/ ALTER PROCEDURE SPC_REPOSICAO_ESTOQUE_KAMBAN( ESTABELECIMENTO_ID INTEGER, LOCALIZACAO_ID INTEGER, FAMILIA_ID INTEGER) RETURNS ( PRODUTO_ID INTEGER, PRODUTO_DESCRICAO VARCHAR(400), TAMANHO VARCHAR(10), ESTOQUE NUMERIC(18,4), EST_MIN NUMERIC(18,4), EST_MAX NUMERIC(18,4), PERC_PONTO_REP NUMERIC(18,4), QTD_PONTO_REP NUMERIC(18,4), TIPO_REP CHAR(12), QTD_REP NUMERIC(18,4), NECESSIDADE NUMERIC(18,4)) AS declare variable xproduto_id integer; declare variable xproduto_descricao varchar(400); declare variable xtamanho varchar(10); declare variable xestoque numeric(18,4); declare variable xest_min numeric(18,4); declare variable xest_max numeric(18,4); declare variable xperc_ponto_rep numeric(18,4); declare variable xqtd_ponto_rep numeric(18,4); declare variable xtipo_rep char(12); declare variable xqtd_rep numeric(18,4); declare variable xNECESSIDADE numeric(18,4); BEGIN For Select V.PRODUTO_ID,V.PRODUTO_DESCRICAO,V.Tamanho,V.ESTOQUE, V.EST_MIN,V.EST_MAX, V.PERC_PONTO_REP, V.QTD_PONTO_REP, V.TIPO_REP,V.QTD_REP,V.NECESSIDADE From ( Select X.Produto_Id, X.Produto_Descricao, X.Tamanho, X.ESTOQUE, X.ESTOQUE_MINIMO EST_MIN, X.ESTOQUE_MAXIMO EST_MAX, X.PONTO_REPOSICAO PERC_PONTO_REP, X.QUANTIDADE_PONTO_REPOSICAO QTD_PONTO_REP, IIF(X.TIPO_REPOSICAO = '0', 'MIN', 'MAX') TIPO_REP, IIF(X.TIPO_REPOSICAO = '0' AND X.QUANTIDADE_PONTO_REPOSICAO <= X.ESTOQUE_MINIMO, X.ESTOQUE_MINIMO, X.ESTOQUE_MAXIMO) QTD_REP, IIF( X.ESTOQUE < X.QUANTIDADE_PONTO_REPOSICAO , IIF(X.TIPO_REPOSICAO='0' AND X.QUANTIDADE_PONTO_REPOSICAO <= X.ESTOQUE_MINIMO, X.ESTOQUE_MINIMO, X.ESTOQUE_MAXIMO) - X.ESTOQUE, 0) NECESSIDADE From ( Select B.Produto_Id, B.Produto_Descricao, B.Tam_Descricao Tamanho, Coalesce(Cast((SELECT First 1 IIF(B.Tamanho = 0, S.SALDO, IIF(B.Tamanho = 1, S.T01_Saldo, IIF(B.Tamanho = 2, S.T02_Saldo,IIF(B.Tamanho = 3, S.T03_Saldo, IIF(B.Tamanho = 4, S.T04_Saldo,IIF(B.Tamanho = 5, S.T05_Saldo, IIF(B.Tamanho = 6, S.T06_Saldo,IIF(B.Tamanho = 7, S.T07_Saldo, IIF(B.Tamanho = 8, S.T08_Saldo,IIF(B.Tamanho = 9, S.T09_Saldo, IIF(B.Tamanho =10, S.T10_Saldo,IIF(B.Tamanho =11, S.T11_Saldo, IIF(B.Tamanho =12, S.T12_Saldo,IIF(B.Tamanho =13, S.T13_Saldo, IIF(B.Tamanho =14, S.T14_Saldo,IIF(B.Tamanho =15, S.T15_Saldo, IIF(B.Tamanho =16, S.T16_Saldo,IIF(B.Tamanho =17, S.T17_Saldo, IIF(B.Tamanho =18, S.T18_Saldo,IIF(B.Tamanho =19, S.T19_Saldo, IIF(B.Tamanho =20, S.T20_Saldo,0))))))))))))))))))))) From TbEstoque_Saldo S Where S.Produto_Codigo = B.Produto_Id And S.Localizacao_Codigo = :Localizacao_id And S.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_ID) as Numeric(15,4)),0.0000) Estoque, Coalesce(Cast(B.ESTOQUE_MIN * (Coalesce(B.Ponto_Reposicao,100.0000) / 100.0000) as Numeric(15,4)),0.0000) QUANTIDADE_PONTO_REPOSICAO, Coalesce(B.ESTOQUE_MIN,0.0000) Estoque_Minimo, Coalesce(B.PONTO_REPOSICAO,0.0000) PONTO_REPOSICAO, Coalesce(B.Estoque_Max,0.0000) Estoque_Maximo, Coalesce(B.TIPO_REPOSICAO,'1') Tipo_Reposicao From VWESTOQUE_MINIMO_TAMANHO B Where B.Estabelecimento_ID = :Estabelecimento_Id and B.Familia_ID = :Familia_Id and B.Localizacao_ID = :Localizacao_Id --and P.Status = '1' and B.ESTOQUE_MIN > 0 ) X ) V Where V.NECESSIDADE > 0 Into :xPRODUTO_ID, :xPRODUTO_DESCRICAO, :xTamanho, :xESTOQUE, :xEST_MIN, :xEST_MAX, :xPERC_PONTO_REP, :xQTD_PONTO_REP, :xTIPO_REP, :xQTD_REP, :xNECESSIDADE Do Begin if (:xPRODUTO_ID > 0) then Begin produto_id = :Xproduto_id ; produto_descricao = :Xproduto_descricao ; tamanho = :Xtamanho ; estoque = :Xestoque ; est_min = :Xest_min ; est_max = :Xest_max ; tipo_rep= :Xtipo_rep ; qtd_rep = :Xqtd_rep ; perc_ponto_rep = :Xperc_ponto_rep ; qtd_ponto_rep = :Xqtd_ponto_rep ; necessidade = :Xnecessidade ; Suspend; End End End ^ /******************************************************************************/ /**** Updating object comments ****/ /******************************************************************************/ SET TERM ; ^ DESCRIBE FIELD NOTIFICACAO TABLE TBCASO_USUARIOS '1-recebe notificacoes 0-nao recebe'; DESCRIBE FIELD TIPO TABLE TBESTOQUE_DETALHE_ALOCACAO 'TIPO C = CONSUMO DE PEDIDO P = PEDIDO R = REMESSA S = ESTOQUE DE SEGURANCA DO CONSUMO DA REMESSA E = E = REGRAS DE ''E''STOQUE'; DESCRIBE FIELD CONFERENCIA TABLE TBESTOQUE_TRANSACAO_ITEM 'VERIRICA SE A TRANSACAO ESTA CONFERIDA 0 OU NULL = CONFERENCIA NAO NECESSARIA 1 = CONFERENCIA PENDENTE 2 = CONFERIDO OBS.1: ESTANDO COM VALOR IGUAL A "1", O ESTOQUE DESTA TRANSACAO ESTARA ALOCADO. OBS.2: ESTANDO COM VALOR IGUAL A "2", O ESTOQUE DESTA TRANSACAO ESTARA DISPONIVEL, POIS A ALOCACAO SERA EXCLUIDA.'; DESCRIBE FIELD TIPO TABLE TBNOTIFICACAO '1-mensagem 2-erro 3-evento 4-funcao 5-agendamento'; DESCRIBE FIELD DATA_HORA TABLE TBNOTIFICACAO 'data hora do registro'; DESCRIBE FIELD EMITENTE TABLE TBNOTIFICACAO 'id do usuario que enviou a mensagem'; DESCRIBE FIELD AGENDAMENTO TABLE TBNOTIFICACAO 'data e hora do agendamento'; DESCRIBE FIELD EXECUTADO TABLE TBNOTIFICACAO '1-agendamento foi executado 0-agendamento nao foi executado'; DESCRIBE FIELD TABELA TABLE TBNOTIFICACAO 'nome da tabela a quem a notificacao esta ligada'; DESCRIBE FIELD TABELA_ID TABLE TBNOTIFICACAO 'id da tabela a quem a notificacao esta ligada'; DESCRIBE FIELD HORARIO_PERMITIDO TABLE TBWORKFLOW_ITEM_TAREFA 'Faixa de horario permitida para a tarefa ser executada'; DESCRIBE TRIGGER TTBESTOQUE_TRANSACAO_ITEM_B3U 'Regras de Alocacao para conferencia'; DESCRIBE TRIGGER TTBKANBAN_LOTE_B0D 'Remove itens do lote'; DESCRIBE TRIGGER TTBKANBAN_LOTE_B2I 'Validacoes para inicializacao de um novo lote'; DESCRIBE TRIGGER TTBKANBAN_LOTE_B5D ''; DESCRIBE TRIGGER TTBPEDIDO_ITEM_PROC_B0U_03 'Obs:ABS trigger so sera processada em remessas geradas pelo gcweb. Registra a entrada no estoque'; DESCRIBE TRIGGER TTBREMESSA_CONSUMO_B0U_03 'OBS: TRIGGER PARA PROCESSAMENTO NO GCWEB. REGISTRA A SAIDA DO ESTOQUE'; DESCRIBE TRIGGER TTBREMESSA_ITEM_PROCESSADO_B3U 'ATUALIZA ESTOQUES EM PROCESSO DAS REMESSAS GERADAS PELA WEB'; DESCRIBE TRIGGER TTBREMESSA_TALAO_VINCULO_B3D 'VERIFICACAO DA EXCLUSAO DE TRASACAO DE REMESSAS (WEB15070)'; DESCRIBE TRIGGER TTBREMESSA_TALAO_VINCULO_B5I 'VERIFICACAO DO VINCULO DE TRASACAO DE REMESSAS'; DESCRIBE VIEW VWREGISTRO_DEFEITO_DIA 'tabela de defeitos por, modelo,produto,cor,perfil,linha,gp,data,familia,estabelecimento'; DESCRIBE VIEW VWREGISTRO_PRODUCAO_DIA 'tabela de producao por, modelo,produto,cor,perfil,linha,gp,data,familia,estabelecimento'; /******************************************************************************/ /**** Revoking excess privileges ****/ /******************************************************************************/ REVOKE USAGE ON SEQUENCE GTBCASO_CONTATO FROM SYSDBA; REVOKE EXECUTE ON PROCEDURE SPC_NFS_FATURAMENTO9 FROM SYSDBA; REVOKE EXECUTE ON PROCEDURE SPU_REPROCESSA_OC_ITEM FROM SYSDBA; /******************************************************************************/ /**** Granting missing privileges ****/ /******************************************************************************/ GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON VWESTOQUE_MINIMO_TAMANHO TO ALEXANDREL; GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON VWREGISTRO_DEFEITO_DIA TO GC; GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON VWREGISTRO_PRODUCAO_DIA TO GC; GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON VWESTOQUE_MINIMO_TAMANHO TO GC; GRANT EXECUTE ON PROCEDURE SPU_REPROCESSA_OC_ITEM TO GC WITH GRANT OPTION; GRANT EXECUTE ON PROCEDURE SPC_NFS_FATURAMENTO9 TO GC WITH GRANT OPTION; GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON VWREGISTRO_DEFEITO_DIA TO SYSDBA WITH GRANT OPTION; GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON VWREGISTRO_PRODUCAO_DIA TO SYSDBA WITH GRANT OPTION; GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON VWESTOQUE_MINIMO_TAMANHO TO SYSDBA WITH GRANT OPTION;