SET TERM ^ ; CREATE OR ALTER procedure SPU_PEDIDO_DESMEMBRAMENTO ( ESTABELECIMENTO_ID integer, PEDIDO integer) returns ( VPEDIDO integer, VCONTROLE integer, VPED_DATA_AGRUPAMENTO date, VPED_DATA_CLIENTE date, VDATA_PRODUCAO date, VDATA_CLIENTE date, VQUANTIDADE numeric(18,5), VSALDO numeric(18,5), VAGP_DT_PRD date, VAGP_DT_CLI date, VQTD_PRD numeric(18,5), VSITUACAO integer, VEST_MIN char(4)) as declare variable PRI_DT_PRD date; declare variable PRI_DT_CLI date; declare variable ULT_DT_PRD date; declare variable ULT_DT_CLI date; declare variable VPEDIDONOVO integer; declare variable VITEMPEDIDONOVO integer; declare variable VSEQ integer; declare variable VPED_DATA_AGR date; declare variable VPED_DATA_CLI date; declare variable HISTORICO varchar(500); declare variable REM_STATUS char(1); begin vSeq = 0; HISTORICO = ''; vPed_Data_Agr = '01.01.2000'; vPed_Data_Cli = '01.01.2000'; vPedidoNovo = 0; vItemPedidoNovo= 0; Rem_Status = Coalesce((Select First 1 T.Status From TbRemessa_Item_Tratamento T Where T.ESTABELECIMENTO_ID = :estabelecimento_id AND T.Tabela_Id = :Pedido and T.Status = '1'),'0'); if (:Rem_Status = '1') then Begin Exception "..." 'PEDIDO BLOQUEADO ENQUANTO ESTIVER SENDO USADO NA GERACAO DE REMESSA! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; End PRI_DT_CLI = (Select First 1 IIF(PI.Est_Min = '0',PI.AGP_DT_CLI,PI.DATA_CLIENTE) From TbPedido_Item PI Where PI.Estabelecimento_Codigo = :Estabelecimento_Id and PI.Pedido = :Pedido and ((PI.AGP_DT_CLI is not Null and PI.Est_Min = '0') or (PI.Est_Min = '1')) Order By PI.AGP_DT_CLI); PRI_DT_PRD = (Select First 1 IIF(PI.Est_Min = '0',PI.AGP_DT_PRD,PI.DATA_PRODUCAO) From TbPedido_Item PI Where PI.Estabelecimento_Codigo = :Estabelecimento_Id and PI.Pedido = :Pedido and ((PI.AGP_DT_PRD is not Null and PI.Est_Min = '0') or (PI.Est_Min = '1')) Order By PI.AGP_DT_PRD); ULT_DT_CLI = (Select First 1 IIF(PI.Est_Min = '0',PI.AGP_DT_CLI,PI.DATA_CLIENTE) From TbPedido_Item PI Where PI.Estabelecimento_Codigo = :Estabelecimento_Id and PI.Pedido = :Pedido and ((PI.AGP_DT_CLI is not Null and PI.Est_Min = '0') or (PI.Est_Min = '1')) Order By PI.AGP_DT_CLI DESC); ULT_DT_PRD = (Select First 1 IIF(PI.Est_Min = '0',PI.AGP_DT_PRD,PI.DATA_PRODUCAO) From TbPedido_Item PI Where PI.Estabelecimento_Codigo = :Estabelecimento_Id and PI.Pedido = :Pedido and ((PI.AGP_DT_PRD is not Null and PI.Est_Min = '0') or (PI.Est_Min = '1')) Order By PI.AGP_DT_PRD DESC); if (:PRI_DT_CLI = :ULT_DT_CLI and :PRI_DT_PRD = :ULT_DT_PRD) then Begin Exception "..." 'PEDIDO NAO PRECISA SER DESMEMBRADO, NAO HA ITENS COM DATAS DIFERENTES NESSE PEDIDO! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; End For Select X.PEDIDO,X.CONTROLE,X.Ped_Data_Agrupamento,X.Ped_Data_Cliente, X.DATA_PRODUCAO,X.DATA_CLIENTE,X.QUANTIDADE,X.SALDO, IIF(X.Est_Min = '1' or (X.AGP_DT_PRD Is Null and X.Est_Min = '0' and X.Qtd_Prd <= 0), :PRI_DT_PRD, X.AGP_DT_PRD) AGP_DT_PRD, IIF(X.Est_Min = '1' or (X.AGP_DT_CLI Is Null and X.Est_Min = '0' and X.Qtd_Prd <= 0), :PRI_DT_CLI, X.AGP_DT_CLI) AGP_DT_CLI, X.QTD_PRD,X.SITUACAO,X.EST_MIN From ( Select P.Pedido, PI.Controle, P.Data_Entrega Ped_Data_Agrupamento, P.Data_Cliente Ped_Data_Cliente, PI.Data_Producao, PI.Data_Cliente, PI.Quantidade, PIS.Quantidade Saldo, PI.Agp_Dt_Prd, PI.Agp_Dt_Cli, PIS.Quantidade - PI.Qtd_est - PI.Qtd_agp - PI.Qtd_rem Qtd_Prd, PI.Situacao, PI.Est_Min From TbPedido P, TbPedido_Item PI, TbPedido_Item_Saldo PIS Where P.Estabelecimento_Codigo = :Estabelecimento_Id and P.Pedido = :Pedido and P.Estabelecimento_codigo = PI.Estabelecimento_codigo and P.Pedido = PI.Pedido and PI.Pedido = PIS.Pedido and PI.Controle = PIS.Pedido_Item_Controle Order By PI.Est_Min, PI.Agp_Dt_Prd, PI.Agp_Dt_Cli ) X Into :vPedido, :vControle, :vPed_Data_Agrupamento, :vPed_Data_Cliente, :vData_Producao, :vData_Cliente, :vQuantidade, :vSaldo, :vAgp_Dt_Prd, :vAgp_Dt_Cli, :vQtd_Prd, :vSituacao, :vEst_Min Do Begin if (:vSituacao > 1) then Begin Exception "..." 'PEDIDO NAO PODE SER DESMEMBRADO, JA EXISTE ITEM FATURADO OU ENCERRADO! '||:vControle||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; End if (:vSaldo < :vQuantidade) then Begin Exception "..." 'PEDIDO NAO PODE SER DESMEMBRADO, JA EXISTE ITEM FATURADO! '||:vControle||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .'; End if (:vQtd_Prd > 0 and :vEst_Min = '0') then Begin Exception "..." 'PEDIDO NAO PODE SER DESMEMBRADO, EXISTE ITEM SEM SALDO DE ESTOQUE, TALOES DE REMESSA E AGRUPAMENTO INDISPONIVEL! '||:vControle||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; End if (:vPed_Data_Cliente <> :vAgp_Dt_Cli or :vPed_Data_Agrupamento <> :vAgp_Dt_Prd) then Begin if (:vPed_Data_Cli <> :vAgp_Dt_Cli or :vPed_Data_Agr <> :vAgp_Dt_Prd) then Begin vSeq = 1; vPed_Data_Cli = :vAgp_Dt_Cli; vPed_Data_Agr = :vAgp_Dt_Prd; vPedidoNovo = (Select gen_id(GTBPEDIDO,1) FROM RDB$DATABASE); vItemPedidoNovo = :Estabelecimento_Id||lPad(:vPedidoNovo,6,'0')||lPad(:vSeq,3,'0'); INSERT INTO TBPEDIDO_DESMEMBRAMENTO (PEDIDO_BASE,PEDIDO_GERADO) VALUES (:Pedido,:vPedidoNovo); INSERT INTO TbPedido ( CLASSIFICACAO,MOEDA,CLIENTE_TIPO_ID,CLIENTE_SUB_TIPO_ID, AUTORIZACAO_SUPERVISOR,AUTORIZACAO_FINANCEIRO, Pedido,Estabelecimento_Codigo,Familia_Codigo,Observacao, Status,Usuario_Data,Usuario_Codigo,Pedido_Cliente, Data_Entrega,Representante_Codigo,Cliente_Codigo, Transportadora_Codigo,Frete,Data_Cliente,Data_Sistema, Programado,Pagamento_Forma,Pagamento_Condicao, USUARIO_DATA_CONFIRMACAO, Data,Prioridade,Situacao) Select CLASSIFICACAO,MOEDA,CLIENTE_TIPO_ID,CLIENTE_SUB_TIPO_ID, AUTORIZACAO_SUPERVISOR,AUTORIZACAO_FINANCEIRO, :vPedidoNovo,Estabelecimento_Codigo,Familia_Codigo,Observacao, Status,Usuario_Data,Usuario_Codigo,Pedido_Cliente, :vPed_Data_Agr,Representante_Codigo,Cliente_Codigo, Transportadora_Codigo,Frete,:vPed_Data_Cli,Data_Sistema, Programado,Pagamento_Forma,Pagamento_Condicao, USUARIO_DATA_CONFIRMACAO,Data,Prioridade,Situacao From TbPedido Where Estabelecimento_Codigo = :Estabelecimento_Id AND Pedido = :Pedido; HISTORICO = 'PEDIDO DESMEMBRADO, NOVO PEDIDO: '||:vPedidoNovo; INSERT INTO TBHISTORICO ( TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES ( 'TBPEDIDO', :VPEDIDO, (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); HISTORICO = 'PEDIDO INCLUIDO VIA DESMEMBRAMENTO DE PEDIDOS. PEDIDO ORIGINAL: '||:vPedido; INSERT INTO TBHISTORICO ( TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES ( 'TBPEDIDO', :vPedidoNovo, (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 else if (:vPed_Data_Cli = :vAgp_Dt_Cli and :vPed_Data_Agr = :vAgp_Dt_Prd) then Begin vSeq = :vSeq + 1; vItemPedidoNovo = :Estabelecimento_Id||lPad(:vPedidoNovo,6,'0')||lPad(:vSeq,3,'0'); End Update TbPedido_Item Set Qtd_Rem = 0, Pedido = :vPedidoNovo, Controle = :vItemPedidoNovo Where Pedido = :vPedido and Controle = :vControle; Update TbPedido_Item_Saldo Set Pedido = :vPedidoNovo, Pedido_Item_Controle = :vItemPedidoNovo Where Pedido = :vPedido and Pedido_Item_Controle = :vControle; Update TbPedido_Consumo Set Pedido_Id = :vPedidoNovo, Pedido_Item_Id = :vItemPedidoNovo Where Pedido_Id = :vPedido and Pedido_Item_Id = :vControle; Update TbRemessa_Item_Tratamento Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Estabelecimento_id = :ESTABELECIMENTO_ID and Tabela_Id = :vPedido and Tab_Item_Id = :vControle; Update TbRemessa_Item_Alocacao Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Tabela_Id = :vPedido and Tab_Item_Id = :vControle; Update TbAgrupamento_Pedido Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Tabela_Id = :vPedido and Tab_Item_Id = :vControle; Update TbEstoque_Detalhe_Alocacao Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Tabela_Id = :vPedido and Tab_Item_Id = :vControle; End End End ^ SET TERM ; ^ SET TERM ^ ; CREATE OR ALTER procedure SPU_PEDIDO_DESMEMBRAMENTO_EST ( ESTABELECIMENTO_ID integer, PEDIDO integer) returns ( VPEDIDO integer, VCONTROLE integer, VPED_DATA_AGRUPAMENTO date, VPED_DATA_CLIENTE date, VQUANTIDADE numeric(18,5), VSALDO numeric(18,5), VESTOQUE numeric(18,5)) as declare variable VDESMEMBRA char(2); declare variable VPEDIDONOVO integer; declare variable VITEMPEDIDONOVO integer; declare variable VSEQ integer; declare variable VDATANOVOPEDIDO date; declare variable VHORA time; declare variable VPED_DATA_AGR date; declare variable VPED_DATA_CLI date; declare variable HISTORICO varchar(500); declare variable REM_STATUS char(1); begin vSeq = 0; HISTORICO = ''; vPed_Data_Agr = '01.01.2000'; vPed_Data_Cli = '01.01.2000'; vPedidoNovo = 0; vItemPedidoNovo= 0; Rem_Status = Coalesce((Select First 1 T.Status From TbRemessa_Item_Tratamento T Where T.ESTABELECIMENTO_ID = :estabelecimento_id AND T.Tabela_Id = :Pedido and T.Status = '1'),'0'); if (:Rem_Status = '1') then Begin Exception "..." 'PEDIDO BLOQUEADO ENQUANTO ESTIVER SENDO USADO NA GERACAO DE REMESSA! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; End /* HORA LIMITE P/ PEDIDOS PRONTA ENTREGA NO MESMO DIA */ vHora = Cast((Select First 1 Valor_Ext From TbControle_n Where id = 234) as Time); if (Current_Time <= :vHora) then Begin vDataNovoPedido = Current_Date; End else Begin vDataNovoPedido = Current_Date + 1; End if (extract(weekday from current_date) = 6) then --Sabado Begin vDataNovoPedido = Current_Date + 2; End else if (extract(weekday from current_date) = 0) then --Domingo Begin vDataNovoPedido = Current_Date + 1; End vDesmembra = (Select Min(Estoque)||Max(Estoque) From ( Select IIF(PI.Quantidade = PIS.Quantidade AND PI.Quantidade = PI.Qtd_Est, 1, 0) Estoque From TbPedido P, TbPedido_Item PI, TbPedido_Item_Saldo PIS Where P.Estabelecimento_Codigo = :Estabelecimento_Id and P.Pedido = :Pedido and P.Estabelecimento_codigo = PI.Estabelecimento_codigo and P.Pedido = PI.Pedido and PI.Pedido = PIS.Pedido and PI.Controle = PIS.Pedido_Item_Controle and P.Situacao = 1 and P.Status = '1' and PI.Situacao = 1 )); if (:vDesmembra = '00') then Begin Exception "..." 'PEDIDO NAO PODE SER DESMEMBRADO, NAO HA ITENS COM ESTOQUE ALOCADO ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; End else if (:vDesmembra = '11') then Begin Exception "..." 'PEDIDO NAO PRECISA SER DESMEMBRADO, TODOS OS ITENS JA ESTAO COM ESTOQUE ALOCADO ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; End else if (:vDesmembra <> '01') then Begin Exception "..." 'PEDIDO NAO PODE SER DESMEMBRADO, HOUVE UMA FALHA NA VERIFICACAO DO PEDIDO! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; End For Select X.PEDIDO, X.CONTROLE, X.Ped_Data_Agrupamento, X.Ped_Data_Cliente, X.QUANTIDADE, X.SALDO, X.Estoque From ( Select P.Pedido, PI.Controle, P.Data_Entrega Ped_Data_Agrupamento, P.Data_Cliente Ped_Data_Cliente, PI.Quantidade, PIS.Quantidade SALDO, PI.Qtd_Est Estoque From TbPedido P, TbPedido_Item PI, TbPedido_Item_Saldo PIS Where P.Estabelecimento_Codigo = :Estabelecimento_Id and P.Pedido = :Pedido and P.Estabelecimento_codigo = PI.Estabelecimento_codigo and P.Pedido = PI.Pedido and PI.Pedido = PIS.Pedido and PI.Controle = PIS.Pedido_Item_Controle and P.Situacao = 1 and P.Status = '1' and PI.Situacao = 1 and PI.Quantidade = PIS.Quantidade and PIS.Quantidade = PI.Qtd_Est ) X Into :vPedido, :vControle, :vPed_Data_Agrupamento, :vPed_Data_Cliente, :vQuantidade, :vSaldo, :vEstoque Do Begin if (:vPed_Data_Cliente <> :vDataNovoPedido or :vPed_Data_Agrupamento <> :vDataNovoPedido) then Begin if (:vPed_Data_Cli <> :vDataNovoPedido or :vPed_Data_Agr <> :vDataNovoPedido) then Begin vSeq = 1; vPed_Data_Cli = :vDataNovoPedido; vPed_Data_Agr = :vDataNovoPedido; vPedidoNovo = (Select gen_id(GTBPEDIDO,1) FROM RDB$DATABASE); vItemPedidoNovo = :Estabelecimento_Id||lPad(:vPedidoNovo,6,'0')||lPad(:vSeq,3,'0'); INSERT INTO TBPEDIDO_DESMEMBRAMENTO (PEDIDO_BASE,PEDIDO_GERADO) VALUES (:Pedido,:vPedidoNovo); INSERT INTO TbPedido ( CLASSIFICACAO,MOEDA,CLIENTE_TIPO_ID,CLIENTE_SUB_TIPO_ID, AUTORIZACAO_SUPERVISOR,AUTORIZACAO_FINANCEIRO, Pedido,Estabelecimento_Codigo,Familia_Codigo,Observacao, Status,Usuario_Data,Usuario_Codigo,Pedido_Cliente, Data_Entrega,Representante_Codigo,Cliente_Codigo, Transportadora_Codigo,Frete,Data_Cliente,Data_Sistema, Programado,Pagamento_Forma,Pagamento_Condicao, USUARIO_DATA_CONFIRMACAO, Data,Prioridade,Situacao) Select CLASSIFICACAO,MOEDA,CLIENTE_TIPO_ID,CLIENTE_SUB_TIPO_ID, AUTORIZACAO_SUPERVISOR,AUTORIZACAO_FINANCEIRO, :vPedidoNovo,Estabelecimento_Codigo,Familia_Codigo,Observacao, Status,Usuario_Data,Usuario_Codigo,Pedido_Cliente, :vPed_Data_Agr,Representante_Codigo,Cliente_Codigo, Transportadora_Codigo,Frete,:vPed_Data_Cli,Data_Sistema, Programado,Pagamento_Forma,Pagamento_Condicao, USUARIO_DATA_CONFIRMACAO,Data,Prioridade,Situacao From TbPedido Where Estabelecimento_Codigo = :Estabelecimento_Id AND Pedido = :Pedido; HISTORICO = 'PEDIDO DESMEMBRADO POR DISPONIBILIDADE DE ESTOQUE, NOVO PEDIDO: '||:vPedidoNovo; INSERT INTO TBHISTORICO ( TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES ( 'TBPEDIDO', :VPEDIDO, (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); HISTORICO = 'PEDIDO INCLUIDO VIA DESMEMBRAMENTO DE PEDIDOS POR DISPONIBILIDADE DE ESTOQUE. PEDIDO ORIGINAL: '||:vPedido; INSERT INTO TBHISTORICO ( TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES ( 'TBPEDIDO', :vPedidoNovo, (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 else if (:vPed_Data_Cli = :vDataNovoPedido and :vPed_Data_Agr = :vDataNovoPedido) then Begin vSeq = :vSeq + 1; vItemPedidoNovo = :Estabelecimento_Id||lPad(:vPedidoNovo,6,'0')||lPad(:vSeq,3,'0'); End Update TbPedido_Item Set qtd_rem = 0, Pedido = :vPedidoNovo, Controle = :vItemPedidoNovo Where Pedido = :vPedido and Controle = :vControle; Update TbPedido_Item_Saldo Set Pedido = :vPedidoNovo, Pedido_Item_Controle = :vItemPedidoNovo Where Pedido = :vPedido and Pedido_Item_Controle = :vControle; Update TbPedido_Consumo Set Pedido_Id = :vPedidoNovo, Pedido_Item_Id = :vItemPedidoNovo Where Pedido_Id = :vPedido and Pedido_Item_Id = :vControle; Update TbRemessa_Item_Tratamento Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Estabelecimento_id = :ESTABELECIMENTO_ID and Tabela_Id = :vPedido and Tab_Item_Id = :vControle; Update TbRemessa_Item_Alocacao Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Tabela_Id = :vPedido and Tab_Item_Id = :vControle; Update TbAgrupamento_Pedido Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Tabela_Id = :vPedido and Tab_Item_Id = :vControle; Update TbEstoque_Detalhe_Alocacao Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Tabela_Id = :vPedido and Tab_Item_Id = :vControle; End End --Update TbPedido Set SalesForce = '0' --Where Estabelecimento_Codigo = :Estabelecimento_Id AND Pedido = :Pedido; End ^ SET TERM ; ^ SET TERM ^ ; CREATE OR ALTER procedure SPU_PEDIDO_DESMEMBRAMENTO_PERF ( ESTABELECIMENTO_ID integer, PEDIDO integer) as declare variable VPEDIDO integer; declare variable VCONTROLE integer; declare variable VDP integer; declare variable VDP1 integer; declare variable VDP2 integer; declare variable VDPV integer; declare variable VDATA_PRODUCAO date; declare variable VDATA_CLIENTE date; declare variable VPEDIDONOVO integer; declare variable VITEMPEDIDONOVO integer; declare variable VSEQUENCIA integer; declare variable HISTORICO varchar(500); declare variable REM_STATUS char(1); begin HISTORICO = ''; vPedidoNovo = 0; vItemPedidoNovo= 0; vDP = -1; vDP1 = -1; vDP2 = -1; Rem_Status = Coalesce((Select First 1 T.Status From TbRemessa_Item_Tratamento T Where T.ESTABELECIMENTO_ID = :estabelecimento_id AND T.Tabela_Id = :Pedido and T.Status = '1'),'0'); if (:Rem_Status = '1') then Begin Exception "..." 'PEDIDO BLOQUEADO ENQUANTO ESTIVER SENDO USADO NA GERACAO DE REMESSA! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; End For SELECT P.PEDIDO, I.SEQUENCIA, I.CONTROLE, COALESCE(PF.DESMEMBRAR_PEDIDO,0) DP, MIN(COALESCE(PF.DESMEMBRAR_PEDIDO,0)) OVER () DP1, MAX(COALESCE(PF.DESMEMBRAR_PEDIDO,0)) OVER () DP2, COALESCE( COALESCE(MAX(I.AGP_DT_PRD) OVER (PARTITION BY PF.DESMEMBRAR_PEDIDO), MAX(I.DATA_PRODUCAO) OVER (PARTITION BY PF.DESMEMBRAR_PEDIDO)),P.DATA_ENTREGA) DATA_PRODUCAO, COALESCE( COALESCE(MAX(I.AGP_DT_CLI) OVER (PARTITION BY PF.DESMEMBRAR_PEDIDO), MAX(I.DATA_CLIENTE) OVER (PARTITION BY PF.DESMEMBRAR_PEDIDO)),P.DATA_CLIENTE) DATA_CLIENTE FROM TBPEDIDO P, TBPEDIDO_ITEM I, TBPEDIDO_ITEM_SALDO S, TBPERFIL PF WHERE P.PEDIDO = I.PEDIDO AND I.PERFIL = PF.ID AND I.CONTROLE = S.PEDIDO_ITEM_CONTROLE AND PF.TABELA = 'SKU' AND I.QUANTIDADE = S.QUANTIDADE AND P.PEDIDO = :PEDIDO AND P.SITUACAO = 1 AND P.STATUS = '1' AND I.SITUACAO = 1 ORDER BY COALESCE(PF.DESMEMBRAR_PEDIDO,0), I.CONTROLE Into :vPedido, vSequencia, :vControle, :vDP, :vDP1, :vDP2, :vDATA_PRODUCAO, :vDATA_CLIENTE Do Begin if (:vPedido > 0) then Begin if (:vDP1 = :vDP2) then Begin Exception "..." 'PEDIDO NAO PRECISA SER DESMEMBRADO, TODOS OS ITENS A FATURAR PERTENCEM AO MESMO TIPO DE PERFIL! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . '; End if (:vDP <> :vDP1) then Begin if (vDPV <> vDP) Then Begin vDPV = vDP; vPedidoNovo = (Select gen_id(GTBPEDIDO,1) FROM RDB$DATABASE); INSERT INTO TBPEDIDO_DESMEMBRAMENTO (PEDIDO_BASE,PEDIDO_GERADO) VALUES (:Pedido,:vPedidoNovo); INSERT INTO TbPedido ( CLASSIFICACAO,MOEDA,CLIENTE_TIPO_ID,CLIENTE_SUB_TIPO_ID, AUTORIZACAO_SUPERVISOR,AUTORIZACAO_FINANCEIRO, Pedido,Estabelecimento_Codigo,Familia_Codigo,Observacao, Status,Usuario_Data,Usuario_Codigo,Pedido_Cliente, Data_Entrega,Representante_Codigo,Cliente_Codigo, Transportadora_Codigo,Frete,Data_Cliente,Data_Sistema, Programado,Pagamento_Forma,Pagamento_Condicao, USUARIO_DATA_CONFIRMACAO, Data,Prioridade,Situacao) Select CLASSIFICACAO,MOEDA,CLIENTE_TIPO_ID,CLIENTE_SUB_TIPO_ID, AUTORIZACAO_SUPERVISOR,AUTORIZACAO_FINANCEIRO, :vPedidoNovo,Estabelecimento_Codigo,Familia_Codigo,Observacao, Status,Usuario_Data,Usuario_Codigo,Pedido_Cliente, :vDATA_PRODUCAO,Representante_Codigo,Cliente_Codigo, Transportadora_Codigo,Frete,:vDATA_CLIENTE,Data_Sistema, Programado,Pagamento_Forma,Pagamento_Condicao, USUARIO_DATA_CONFIRMACAO,Data,Prioridade,Situacao From TbPedido Where Estabelecimento_Codigo = :Estabelecimento_Id AND Pedido = :Pedido; HISTORICO = 'PEDIDO DESMEMBRADO POR SEPARAÇÃO DE PERFIS DE SKU, NOVO PEDIDO: '||:vPedidoNovo; INSERT INTO TBHISTORICO ( TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES ( 'TBPEDIDO', :VPEDIDO, (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); HISTORICO = 'PEDIDO INCLUIDO VIA DESMEMBRAMENTO DE PEDIDOS POR SEPARAÇÃO DE PERFIS DE SKU. PEDIDO ORIGINAL: '||:vPedido; INSERT INTO TBHISTORICO ( TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES ( 'TBPEDIDO', :vPedidoNovo, (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 if (:vDPV = vDP) Then Begin vItemPedidoNovo = :Estabelecimento_Id||lPad(:vPedidoNovo,6,'0')||lPad(:vSequencia,3,'0'); Update TbPedido_Item Set qtd_rem = 0, Pedido = :vPedidoNovo, Controle = :vItemPedidoNovo Where Pedido = :vPedido and Controle = :vControle; Update TbPedido_Item_Saldo Set Pedido = :vPedidoNovo, Pedido_Item_Controle = :vItemPedidoNovo Where Pedido = :vPedido and Pedido_Item_Controle = :vControle; Update TbPedido_Consumo Set Pedido_Id = :vPedidoNovo, Pedido_Item_Id = :vItemPedidoNovo Where Pedido_Id = :vPedido and Pedido_Item_Id = :vControle; Update TbRemessa_Item_Tratamento Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Estabelecimento_id = :ESTABELECIMENTO_ID and Tabela_Id = :vPedido and Tab_Item_Id = :vControle; Update TbRemessa_Item_Alocacao Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Tabela_Id = :vPedido and Tab_Item_Id = :vControle; Update TbAgrupamento_Pedido Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Tabela_Id = :vPedido and Tab_Item_Id = :vControle; Update TbEstoque_Detalhe_Alocacao Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Tabela_Id = :vPedido and Tab_Item_Id = :vControle; End End vDPV = vDP; End End End ^ SET TERM ; ^ SET TERM ^ ; CREATE OR ALTER procedure SPU_PEDIDO_DESMEMBRAMENTO_PROD ( VESTABELECIMENTO_ID integer, VPEDIDO integer, VDESMEMBRAR integer) returns ( ESTABELECIMENTO_ID integer, PEDIDO integer, NR_PEDIDO varchar(176), CLIENTE varchar(4224), DATAS varchar(244), SEQUENCIA integer, CONTROLE integer, NOVA_DATA varchar(172), PERFIL varchar(80), PRODUTO varchar(4476), QUANTIDADE numeric(18,5), VPEDIDONOVO integer) as declare variable VDATA_AGRUPAMENTO date; declare variable VDATA_CLIENTE date; declare variable PDATA_AGRUPAMENTO date; declare variable PDATA_CLIENTE date; declare variable VDATA1 date; declare variable VDATA2 date; declare variable VITEMPEDIDONOVO integer; declare variable HISTORICO varchar(500); declare variable REM_STATUS char(1); declare variable REGISTROS integer; begin HISTORICO = ''; vPedidoNovo = 0; vItemPedidoNovo= 0; vData1 = cast('01.01.2000' as Date); vData2 = cast('01.01.2000' as Date); REM_STATUS = Coalesce((Select First 1 T.Status From TbRemessa_Item_Tratamento T Where T.ESTABELECIMENTO_ID = :vEstabelecimento_id AND T.Tabela_Id = :vPedido and T.Status = '1'),'0'); if (:REM_STATUS = '1') then Begin Exception "..." 'PEDIDO BLOQUEADO ENQUANTO ESTIVER SENDO USADO NA GERACAO DE REMESSA!'; End For SELECT ESTABELECIMENTO_CODIGO, PEDIDO, CLIENTE, 'PED.'||PEDIDO||IIF(PEDIDO_CLIENTE<>'',' PED.CLI.'||PEDIDO_CLIENTE,'') AS NR_PEDIDO, DATAS, CONTROLE, SEQUENCIA, ' DT.AGRUP.'||FORMATDATE(DATA_AGRUPAMENTO)||' ═══► DT.CLI.'||FORMATDATE(DATA_CLIENTE) AS NOVA_DATA, PERFIL, FN_LPAD(PRODUTO_ID,6,'0')||' - '||PRODUTO_DESCRICAO||' TAM. '||TAMANHO PRODUTO, QUANTIDADE, DATA_AGRUPAMENTO, DATA_CLIENTE, pDATA_AGRUPAMENTO, pDATA_CLIENTE FROM ( SELECT ESTABELECIMENTO_CODIGO, CLIENTE, PEDIDO, PEDIDO_CLIENTE, DATAS, CONTROLE, SEQUENCIA, PERFIL, PRODUTO_ID, PRODUTO_DESCRICAO, TAMANHO, QUANTIDADE, MAX( IIF( DATA_AGRUPAMENTO_SUBSTITUTA IS NULL, DATA_AGRUPAMENTO,DATA_AGRUPAMENTO_SUBSTITUTA )) OVER (PARTITION BY PRODUTO_ID) DATA_AGRUPAMENTO, MAX( IIF( DATA_CLIENTE_SUBSTITUTA IS NULL, DATA_CLIENTE , DATA_CLIENTE_SUBSTITUTA )) OVER (PARTITION BY PRODUTO_ID) DATA_CLIENTE, pDATA_AGRUPAMENTO, pDATA_CLIENTE FROM ( SELECT P.PEDIDO_CLIENTE, FN_LPAD(P.CLIENTE_CODIGO,5,'0')||' - '||C.RAZAOSOCIAL||'/'||C.UF AS CLIENTE, 'DT.EMISS.'||FORMATDATE(P.DATA)||' | DT.AGRUP.'||FORMATDATE(P.DATA_ENTREGA)||' | DT.CLI.'||FORMATDATE(P.DATA_CLIENTE) AS DATAS, PR.DESCRICAO PRODUTO_DESCRICAO, (SELECT PF.DESCRICAO FROM TBPERFIL PF WHERE PF.TABELA = 'SKU' AND PF.ID = I.PERFIL) PERFIL, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE(PR.GRADE_CODIGO,I.TAMANHO)) TAMANHO, I.QUANTIDADE, P.ESTABELECIMENTO_CODIGO, P.PEDIDO, I.SEQUENCIA, I.CONTROLE, I.PRODUTO_CODIGO AS PRODUTO_ID, COALESCE(COALESCE(I.AGP_DT_PRD,I.DATA_PRODUCAO),P.DATA_ENTREGA) DATA_AGRUPAMENTO, COALESCE(COALESCE(I.AGP_DT_CLI,I.DATA_CLIENTE ),P.DATA_CLIENTE) DATA_CLIENTE, P.DATA_ENTREGA AS pDATA_AGRUPAMENTO, P.DATA_CLIENTE AS pDATA_CLIENTE, (SELECT FIRST 1 DATA_DESTINO FROM TBPEDIDO_DATA PD WHERE PD.DATA_ORIGEM = (COALESCE(COALESCE(I.AGP_DT_PRD,I.DATA_PRODUCAO),P.DATA_ENTREGA))) DATA_AGRUPAMENTO_SUBSTITUTA, (SELECT FIRST 1 DATA_DESTINO FROM TBPEDIDO_DATA PD WHERE PD.DATA_ORIGEM = (COALESCE(COALESCE(I.AGP_DT_CLI,I.DATA_CLIENTE ),P.DATA_CLIENTE))) DATA_CLIENTE_SUBSTITUTA FROM TBPEDIDO P, TBPEDIDO_ITEM I, TBPEDIDO_ITEM_SALDO S, TBPRODUTO PR, TBCLIENTE C WHERE P.PEDIDO = I.PEDIDO AND C.CODIGO = P.CLIENTE_CODIGO AND PR.CODIGO = I.PRODUTO_CODIGO AND I.CONTROLE = S.PEDIDO_ITEM_CONTROLE AND I.QUANTIDADE = S.QUANTIDADE AND P.PEDIDO = :vPEDIDO AND P.SITUACAO = 1 AND P.STATUS = '1' AND I.SITUACAO = 1 ) ) ORDER BY DATA_AGRUPAMENTO, DATA_CLIENTE, PRODUTO_DESCRICAO, TAMANHO Into :ESTABELECIMENTO_ID,:PEDIDO,:CLIENTE,:NR_PEDIDO,:DATAS,:CONTROLE,:SEQUENCIA,:NOVA_DATA,:PERFIL,:PRODUTO,:QUANTIDADE, :vDATA_AGRUPAMENTO,:vDATA_CLIENTE,:pDATA_AGRUPAMENTO,:pDATA_CLIENTE Do Begin if (:SEQUENCIA > 0 and :vDesmembrar = 1) then Begin if (:vDATA_AGRUPAMENTO <> :pDATA_AGRUPAMENTO or :vDATA_CLIENTE <> :pDATA_CLIENTE) then Begin if (vData1 <> vDATA_AGRUPAMENTO or vData2 <> vDATA_CLIENTE) Then Begin vPedidoNovo = (Select gen_id(GTBPEDIDO,1) FROM RDB$DATABASE); vData1 = vDATA_AGRUPAMENTO; vData2 = vDATA_CLIENTE; INSERT INTO TBPEDIDO_DESMEMBRAMENTO (PEDIDO_BASE,PEDIDO_GERADO) VALUES (:vPedido,:vPedidoNovo); INSERT INTO TbPedido ( CLASSIFICACAO,MOEDA,CLIENTE_TIPO_ID,CLIENTE_SUB_TIPO_ID, AUTORIZACAO_SUPERVISOR,AUTORIZACAO_FINANCEIRO, Pedido,Estabelecimento_Codigo,Familia_Codigo,Observacao, Status,Usuario_Data,Usuario_Codigo,Pedido_Cliente, Data_Entrega,Representante_Codigo,Cliente_Codigo, Transportadora_Codigo,Frete,Data_Cliente,Data_Sistema, Programado,Pagamento_Forma,Pagamento_Condicao, USUARIO_DATA_CONFIRMACAO, Data,Prioridade,Situacao) Select CLASSIFICACAO,MOEDA,CLIENTE_TIPO_ID,CLIENTE_SUB_TIPO_ID, AUTORIZACAO_SUPERVISOR,AUTORIZACAO_FINANCEIRO, :vPEDIDONOVO,Estabelecimento_Codigo,Familia_Codigo,Observacao, Status,Usuario_Data,Usuario_Codigo,Pedido_Cliente, :vDATA_AGRUPAMENTO,Representante_Codigo,Cliente_Codigo, Transportadora_Codigo,Frete,:vDATA_CLIENTE,Data_Sistema, Programado,Pagamento_Forma,Pagamento_Condicao, USUARIO_DATA_CONFIRMACAO,Data,Prioridade,Situacao From TbPedido Where Pedido = :vPedido; HISTORICO = 'PEDIDO DESMEMBRADO POR SEPARAÇÃO DE PRODUTOS/DATA, NOVO PEDIDO: '||:vPedidoNovo; INSERT INTO TBHISTORICO ( TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES ( 'TBPEDIDO', :vPEDIDO, (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); HISTORICO = 'PEDIDO INCLUIDO VIA DESMEMBRAMENTO DE PEDIDOS POR SEPARAÇÃO DE PRODUTOS/DATAS. PEDIDO ORIGINAL: '||:vPedido; INSERT INTO TBHISTORICO ( TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES ( 'TBPEDIDO', :vPedidoNovo, (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 if (vData1 = vDATA_AGRUPAMENTO and vData2 = vDATA_CLIENTE) then Begin vItemPedidoNovo = :vESTABELECIMENTO_ID||lPad(:vPedidoNovo,6,'0')||lPad(:Sequencia,3,'0'); Update TbPedido_Item Set qtd_rem = 0, Pedido = :vPedidoNovo, Controle = :vItemPedidoNovo Where Pedido = :PEDIDO and Controle = :Controle; Update TbPedido_Item_Saldo Set Pedido = :vPedidoNovo, Pedido_Item_Controle = :vItemPedidoNovo Where Pedido = :PEDIDO and Pedido_Item_Controle = :Controle; Update TbPedido_Consumo Set Pedido_Id = :vPedidoNovo, Pedido_Item_Id = :vItemPedidoNovo Where Pedido_Id = :PEDIDO and Pedido_Item_Id = :Controle; Update TbRemessa_Item_Tratamento Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Estabelecimento_id = :vESTABELECIMENTO_ID and Tabela_Id = :PEDIDO and Tab_Item_Id = :Controle; Update TbRemessa_Item_Alocacao Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Tabela_Id = :PEDIDO and Tab_Item_Id = :Controle; Update TbAgrupamento_Pedido Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Tabela_Id = :PEDIDO and Tab_Item_Id = :Controle; Update TbEstoque_Detalhe_Alocacao Set Tabela_Id = :vPedidoNovo, Tab_Item_Id = :vItemPedidoNovo Where Tabela_Id = :PEDIDO and Tab_Item_Id = :Controle; End End else Begin vPedidoNovo = vPedido; End End Suspend; End if (vPedidoNovo > 0) then Begin Registros = Coalesce((Select Count(*) From TbPedido_Item Where Pedido = :vPedido),0); if (Registros = 0) then Begin Delete from TbPedido Where Pedido = :vPedido; End End End ^ SET TERM ; ^ CREATE OR ALTER VIEW VWMFE( ESTABELECIMENTO_CODIGO, MFE_ID, NUMERO_NOTAFISCAL, SERIE, CHAVE_ACESSO, SITUACAO, NATUREZA, MODELO, MODELO_DESCRICAO, DATA_EMISSAO, HORA_EMISSAO, IND_FINAL, EMPRESA_CODIGO, EMPRESA_RAZAOSOCIAL, EMPRESA_CNPJ, EMPRESA_IE, EMPRESA_ENDERECO, EMPRESA_NUMERO, EMPRESA_BAIRRO, EMPRESA_CIDADE, EMPRESA_UF, EMPRESA_CEP, SPED, SPED_PISCOF, CONTABILIZACAO_ID, REPRESENTANTE_CODIGO, REPRESENTANTE_COMISSAO, VENDEDOR_CODIGO, VENDEDOR_COMISSAO, CLASSIFICACAO, SERIE_MFE, OPERADOR_ID, NUMERO_CFE_CANCELADO, CHAVE_ACESSO_CFE_CANCELADO) AS SELECT A.ESTABELECIMENTO_ID AS ESTABELECIMENTO_CODIGO, A.ID AS MFE_ID, A.NUMERO_CFE AS NUMERO_NOTAFISCAL, CAST(A.SERIE AS VARCHAR(3)) SERIE, A.CHAVE_ACESSO, A.SITUACAO, 1 AS NATUREZA, '59' AS MODELO, 'MFE' AS MODELO_DESCRICAO, A.DATA_EMISSAO, A.HORA_EMISSAO, '1' AS IND_FINAL, IIF(A.CLIENTE_ID > 0, A.CLIENTE_ID, IIF(CHAR_LENGTH(A.CLIENTE_CPF)>0 AND COALESCE(A.CLIENTE_ID,0) = 0, COALESCE((SELECT FIRST 1 C.CODIGO FROM TBEMPRESA C WHERE C.CNPJ = A.CLIENTE_CPF),0),0)) AS EMPRESA_CODIGO, UPPER(A.CLIENTE_NOME) AS EMPRESA_RAZAOSOCIAL, A.CLIENTE_CPF AS EMPRESA_CNPJ, '' AS EMPRESA_IE, UPPER(A.CLIENTE_ENDERECO) AS EMPRESA_ENDERECO, A.CLIENTE_NUMERO AS EMPRESA_NUMERO, UPPER(A.CLIENTE_BAIRRO) AS EMPRESA_BAIRRO, (SELECT FIRST 1 C.DESCRICAO FROM TBCIDADE C WHERE C.ID = A.CLIENTE_CIDADE) CLIENTE_CIDADE, UPPER(A.CLIENTE_UF) AS EMPRESA_UF, A.CLIENTE_CEP AS EMPRESA_CEP, '1' AS SPED, '1' AS SPED_PISCOF, COALESCE(A.CONTABILIZACAO_ID,0) AS CONTABILIZACAO_ID, A.REPRESENTANTE_ID REPRESENTANTE_CODIGO, A.REPRESENTANTE_COMISSAO, A.VENDEDOR_ID, A.VENDEDOR_COMISSAO, '' CLASSIFICACAO, A.SERIE_MFE, A.OPERADOR_ID, A.NUMERO_CFE_CANCELADO, A.CHAVE_ACESSO_CFE_CANCELADO FROM TBPDV_CFE A WHERE A.SITUACAO IN (2, 3) ;