ERRO: esquema "pp_order" não existe


#1

De volta,

Ao gerar uma Ordem de Produção pelo MRP, ao imprimir e liberar a OP. Aparece o erro descrito acima: “ERRO: esquema “pp_order” não existe”.

Parece alguma view que não está correta no banco. Alguém já corrigiu este problema?

Valeu!


#2

estranho, aqui banco de dados que exportei para colocar o dmp no sourceforge, existe esta tabela…

qual versão do postgresql vc está utilizando aqui eu estou usando o Postgresql 9.0

para ele funcionar, vc precisa fazer duas correções, que existem no projeto pai sf.net/projects/adempiere

trocar o driver jdbc do postresql na pasta lib para a versão 9 e alterar a function firstOf

/*
*This file is part of Adempiere ERP Bazaar
*http://www.adempiere.org
*
*Copyright (C) 2006 Gavin Dunse
*Copyright (C) 1999-2006 ComPiere, inc
*
*This program is free software; you can redistribute it and/or
*modify it under the terms of the GNU General Public License
*as published by the Free Software Foundation; either version 2
*of the License, or (at your option) any later version.
*
*This program is distributed in the hope that it will be useful,
*but WITHOUT ANY WARRANTY; without even the implied warranty of
*MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*GNU General Public License for more details.
*
*You should have received a copy of the GNU General Public License
*along with this program; if not, write to the Free Software
*Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.of
*/

/** Get Character at Position */
SET search_path = adempiere, pg_catalog;

CREATE OR REPLACE FUNCTION firstOf (
IN TIMESTAMP WITH TIME ZONE, -- $1 date
IN VARCHAR -- $2 part of date
) RETURNS DATE AS
$$
DECLARE
datepart VARCHAR;
datetime TIMESTAMP WITH TIME ZONE;
offsetdays INTEGER;
BEGIN
	datepart = $2;
	offsetdays = 0;
	IF $2 IN ('') THEN
		datepart = 'millennium';
	ELSEIF $2 IN ('') THEN
		datepart = 'century';
	ELSEIF $2 IN ('') THEN
		datepart = 'decade';
	ELSEIF $2 IN ('IYYY','IY','I') THEN
		datepart = 'year';
	ELSEIF $2 IN ('SYYYY','YYYY','YEAR','SYEAR','YYY','YY','Y') THEN
		datepart = 'year';
	ELSEIF $2 IN ('Q') THEN
		datepart = 'quarter';
	ELSEIF $2 IN ('MONTH','MON','MM','RM') THEN
		datepart = 'month';
	ELSEIF $2 IN ('IW') THEN
		datepart = 'week';
	ELSEIF $2 IN ('W') THEN
		datepart = 'week';
	ELSEIF $2 IN ('DDD','DD','J') THEN
		datepart = 'day';
	ELSEIF $2 IN ('DAY','DY','D') THEN
		datepart = 'week';
		-- move to sunday to make it compatible with oracle and SQLJ
		offsetdays = -1;
	ELSEIF $2 IN ('HH','HH12','HH24') THEN
		datepart = 'hour';
	ELSEIF $2 IN ('MI') THEN
		datepart = 'minute';
	ELSEIF $2 IN ('') THEN
		datepart = 'second';
	ELSEIF $2 IN ('') THEN
		datepart = 'milliseconds';
	ELSEIF $2 IN ('') THEN
		datepart = 'microseconds';
	END IF;
	datetime = date_trunc(datepart, $1); 
RETURN cast(datetime as date) + offsetdays;
END;
$$ LANGUAGE plpgsql;

#3

Obrigado pela informação sobre a atualização para o PG9, mesmo sem ainda ter passado por problemas quanto esta lib, fiz a atualização.

Voltando ao problema do pp_order. Encontrei este post relacionado:

sourceforge.net/tracker/index.ph … tid=934929

Mesmo atualizando a view, não obtive sucesso na correção do problema. Peguei o sql, e me pus a debugar ele no pg:

SELECT (SELECT ad_workflow_trl.name
        FROM   ad_workflow
               INNER JOIN ad_workflow_trl
                 ON ( ad_workflow.ad_workflow_id =
                      ad_workflow_trl.ad_workflow_id
                      AND ad_workflow_trl.ad_language = 'pt_BR' )
        WHERE  pp_order_workflow_header_v.ad_workflow_id =
               ad_workflow.ad_workflow_id)
                                  AS aad_workflow_id,
       pp_order_workflow_header_v.ad_workflow_id                              AS
       ad_workflow_id,
       (SELECT Coalesce(pp_order.documentno, '')
                || ' - '
                || Coalesce((SELECT s_resource.name
                             FROM   s_resource s_resource
                             WHERE
pp_order.pp_order.s_resource_id = s_resource.s_resource_id), '')
FROM   pp_order
WHERE  pp_order_workflow_header_v.pp_order_id = pp_order.pp_order_id) AS
bpp_order_id,
pp_order_workflow_header_v.pp_order_id                                 AS
       pp_order_id,
(SELECT Coalesce(pp_product_bom.VALUE, '')
|| ' - '
|| pp_product_bom_trl.name
|| ' - '
|| Coalesce(pp_product_bom.documentno, '')
FROM   pp_product_bom
INNER JOIN pp_product_bom_trl
ON ( pp_product_bom.pp_product_bom_id =
   pp_product_bom_trl.pp_product_bom_id
   AND pp_product_bom_trl.ad_language = 'pt_BR' )
WHERE  pp_order_workflow_header_v.pp_product_bom_id =
pp_product_bom.pp_product_bom_id)                              AS
       cpp_product_bom_id,
pp_order_workflow_header_v.pp_product_bom_id                           AS
       pp_product_bom_id,
d.name                                                                 AS dname,
pp_order_workflow_header_v.planner_id                                  AS
       planner_id,
pp_order_workflow_header_v.dateordered,
pp_order_workflow_header_v.datepromised,
pp_order_workflow_header_v.datestart,
pp_order_workflow_header_v.datestartschedule,
pp_order_workflow_header_v.datefinish,
pp_order_workflow_header_v.datefinishschedule,
pp_order_workflow_header_v.datedelivered,
pp_order_workflow_header_v.dateconfirm,
pp_order_workflow_header_v.qtybatchsize,
pp_order_workflow_header_v.qtyentered,
pp_order_workflow_header_v.qtydelivered,
pp_order_workflow_header_v.overlapunits,
pp_order_workflow_header_v.setuptime,
pp_order_workflow_header_v.queuingtime,
pp_order_workflow_header_v.waitingtime,
pp_order_workflow_header_v.movingtime,
pp_order_workflow_header_v.duration,
e.name                                                                 AS ename,
pp_order_workflow_header_v.durationunit                                AS
       durationunit,
(SELECT Coalesce(pp_order.documentno, '')
|| ' - '
|| Coalesce((SELECT s_resource.name
          FROM   s_resource s_resource
          WHERE
pp_order.pp_order.s_resource_id = s_resource.s_resource_id), '')
FROM   pp_order
WHERE  pp_order_workflow_header_v.pp_order_id = pp_order.pp_order_id) AS
fpp_order_id,
pp_order_workflow_header_v.pp_order_id                                 AS
       pp_order_id,
(SELECT Coalesce(pp_order.documentno, '')
|| ' - '
|| Coalesce((SELECT s_resource.name
          FROM   s_resource s_resource
          WHERE
pp_order.pp_order.s_resource_id = s_resource.s_resource_id), '')
FROM   pp_order
WHERE  pp_order_workflow_header_v.pp_order_id = pp_order.pp_order_id) AS
gpp_order_id,
pp_order_workflow_header_v.pp_order_id                                 AS
       pp_order_id
FROM   pp_order_workflow_header_v
       LEFT OUTER JOIN ad_user d
         ON ( pp_order_workflow_header_v.planner_id = d.ad_user_id )
       LEFT OUTER JOIN ad_ref_list xe
         ON ( pp_order_workflow_header_v.durationunit = xe.VALUE
              AND xe.ad_reference_id = 299 )
       LEFT OUTER JOIN ad_ref_list_trl e
         ON ( xe.ad_ref_list_id = e.ad_ref_list_id
              AND e.ad_language = 'pt_BR' )
WHERE  ( pp_order_workflow_header_v.pp_order_id = 2000000 )
       AND pp_order_workflow_header_v.ad_client_id IN( 0, 11 )
       AND pp_order_workflow_header_v.ad_org_id IN( 50007, 0, 50004, 50005,
                                                    50006, 50000, 50001, 50002,
                                                    11, 12 )
       AND d.ad_user_id NOT IN (SELECT record_id
                                FROM   ad_private_access
                                WHERE  ad_table_id = 114
                                       AND ad_user_id <> 101
                                       AND isactive = 'Y')
       AND xe.ad_ref_list_id NOT IN (SELECT record_id
                                     FROM   ad_private_access
                                     WHERE  ad_table_id = 104
                                            AND ad_user_id <> 101
                                            AND isactive = 'Y');  

Encontrei o problema em três pontos repetidos: pp_order.pp_order.s_resource_id o que me parece um probleminha de copy+paste. E, tirando a duplicidade do pp_order o sql é executado com sucesso.

Agora eu pergunto, onde eu atualizo esse sql?


#4

Boa tarde,

se você souber qual é esta view, basta que você execute o DROP VIEW e depois execute o CREATE VIEW.

A View será esta adempiere.pp_order_workflow_header_v?

Espero ter ajudado.


#5

acredito que não é na view não, este select usa a adempiere.pp_order_workflow_header_v. mas, o select é feito em outro local? e este local que não sei onde é. será que é no código? ou existe um dicionario de sql?


#6

Boa tarde

adempiere.pp_order_workflow_header_v, é para dizer que é o schema do adempiere, isso quando você cria uma view, automaticamente é gerado dessa forma.

Se você identificar em todas as views encontram-se dessa forma, adempiere.nome da view.

Espero ter ajudado.


#7

Aonde você tentou imprimir isso mesmo?

sapelli:

"Ao gerar uma Ordem de Produção pelo MRP, ao imprimir e liberar a OP. Aparece o erro descrito acima: “ERRO: esquema “pp_order” não existe”.

Parece alguma view que não está correta no banco. Alguém já corrigiu este problema?

Valeu!"


#8

Caminho completo

Em um produto com LDM. (Produzido)

  • Cotação à Fatura -> Pedidos de Vendas -> Pedido de Venda / Completar o pedido
  • Gerenciamento de Fabricação -> Ger. de Planejamento -> Calcular Plano de Material
  • Gerenciamento de Fabricação -> Ger. de Planejamento -> Aprovação de Ordem Planejada
  • Gerenciamento de Fabricação -> Ger. de Produção -> Fabricação Discreta -> Imprimir e Liberar Ordem (Chequei o “Is Print Workflow”)

Erro no console:

-----------> MIssue.set_ValueNoCheck: ReleaseNo - Value too long - truncated to length=4 [12] ===========> DataEngine.loadPrintData: null - ERRO: esquema "pp_order" nÒo exist e SQL=SELECT (SELECT AD_Workflow_Trl.Name FROM AD_Workflow INNER JOIN AD_Workflow_ TRL ON (AD_Workflow.AD_Workflow_ID=AD_Workflow_Trl.AD_Workflow_ID AND AD_Workflo w_Trl.AD_Language='pt_BR') WHERE PP_Order_Workflow_Header_v.AD_Workflow_ID=AD_Wo rkflow.AD_Workflow_ID) AS AAD_Workflow_ID,PP_Order_Workflow_Header_v.AD_Workflow _ID AS AD_Workflow_ID,(SELECT NVL(PP_Order.DocumentNo,'')||' - '||NVL((SELECT S_ Resource.Name FROM S_Resource S_Resource WHERE PP_Order.PP_Order.S_Resource_ID=S _Resource.S_Resource_ID),'') FROM PP_Order WHERE PP_Order_Workflow_Header_v.PP_O rder_ID=PP_Order.PP_Order_ID) AS BPP_Order_ID,PP_Order_Workflow_Header_v.PP_Orde r_ID AS PP_Order_ID,(SELECT NVL(PP_Product_BOM.Value,'')||' - '||PP_Product_BOM_ Trl.Name||' - '||NVL(PP_Product_BOM.DocumentNo,'') FROM PP_Product_BOM INNER JOI N PP_Product_BOM_TRL ON (PP_Product_BOM.PP_Product_BOM_ID=PP_Product_BOM_Trl.PP_ Product_BOM_ID AND PP_Product_BOM_Trl.AD_Language='pt_BR') WHERE PP_Order_Workfl ow_Header_v.PP_Product_BOM_ID=PP_Product_BOM.PP_Product_BOM_ID) AS CPP_Product_B OM_ID,PP_Order_Workflow_Header_v.PP_Product_BOM_ID AS PP_Product_BOM_ID,D.Name A S DName,PP_Order_Workflow_Header_v.Planner_ID AS Planner_ID,PP_Order_Workflow_He ader_v.DateOrdered,PP_Order_Workflow_Header_v.DatePromised,PP_Order_Workflow_Hea der_v.DateStart,PP_Order_Workflow_Header_v.DateStartSchedule,PP_Order_Workflow_H eader_v.DateFinish,PP_Order_Workflow_Header_v.DateFinishSchedule,PP_Order_Workfl ow_Header_v.DateDelivered,PP_Order_Workflow_Header_v.DateConfirm,PP_Order_Workfl ow_Header_v.QtyBatchSize,PP_Order_Workflow_Header_v.QtyEntered,PP_Order_Workflow _Header_v.QtyDelivered,PP_Order_Workflow_Header_v.OverlapUnits,PP_Order_Workflow _Header_v.SetupTime,PP_Order_Workflow_Header_v.QueuingTime,PP_Order_Workflow_Hea der_v.WaitingTime,PP_Order_Workflow_Header_v.MovingTime,PP_Order_Workflow_Header _v.Duration,E.Name AS EName,PP_Order_Workflow_Header_v.DurationUnit AS DurationU nit,(SELECT NVL(PP_Order.DocumentNo,'')||' - '||NVL((SELECT S_Resource.Name FROM S_Resource S_Resource WHERE PP_Order.PP_Order.S_Resource_ID=S_Resource.S_Resour ce_ID),'') FROM PP_Order WHERE PP_Order_Workflow_Header_v.PP_Order_ID=PP_Order.P P_Order_ID) AS FPP_Order_ID,PP_Order_Workflow_Header_v.PP_Order_ID AS PP_Order_I D,(SELECT NVL(PP_Order.DocumentNo,'')||' - '||NVL((SELECT S_Resource.Name FROM S _Resource S_Resource WHERE PP_Order.PP_Order.S_Resource_ID=S_Resource.S_Resource _ID),'') FROM PP_Order WHERE PP_Order_Workflow_Header_v.PP_Order_ID=PP_Order.PP_ Order_ID) AS GPP_Order_ID,PP_Order_Workflow_Header_v.PP_Order_ID AS PP_Order_ID FROM PP_Order_Workflow_Header_v LEFT OUTER JOIN AD_User D ON (PP_Order_Workflow_ Header_v.Planner_ID=D.AD_User_ID) LEFT OUTER JOIN AD_Ref_List XE ON (PP_Order_W orkflow_Header_v.DurationUnit=XE.Value AND XE.AD_Reference_ID=299) LEFT OUTER JO IN AD_Ref_List_Trl E ON (XE.AD_Ref_List_ID=E.AD_Ref_List_ID AND E.AD_Language=' pt_BR') WHERE (PP_Order_Workflow_Header_v.PP_Order_ID=2000000) AND PP_Order_Work flow_Header_v.AD_Client_ID IN(0,11) AND PP_Order_Workflow_Header_v.AD_Org_ID IN( 50007,0,50004,50005,50006,50000,50001,50002,11,12) AND D.AD_User_ID NOT IN ( SEL ECT Record_ID FROM AD_Private_Access WHERE AD_Table_ID = 114 AND AD_User_ID <> 1 01 AND IsActive = 'Y' ) AND XE.AD_Ref_List_ID NOT IN ( SELECT Record_ID FROM AD_ Private_Access WHERE AD_Table_ID = 104 AND AD_User_ID <> 101 AND IsActive = 'Y' ) [12] -----------> DataEngine.loadPrintData: NO Rows - ms=203 [12]


#9

Bom, to caminhando no problema.

Descobri que o select não é fixo no código. Que é gerado a partir de informações da base de dados. O caso do meu problema é que o campo bpp_order_id e os outros dois possuem sql cadastrado errado. Mas, em que tabela que estão esses valores? Fucei até não poder mais e ainda não encontrei.

Campo em questão:

(SELECT Coalesce(pp_order.documentno, '') || ' - ' || Coalesce((SELECT s_resource.name FROM s_resource s_resource WHERE pp_order.pp_order.s_resource_id = s_resource.s_resource_id), '') FROM pp_order WHERE pp_order_workflow_header_v.pp_order_id = pp_order.pp_order_id) AS bpp_order_id


#10

é o libero… infelizmente, ainda tem muitos bugs… provavelmente na próxima versão estes bugs sejam corrigidos… Aqui eu uso a produção antiga ainda, da 3.4.2s

Acho que o problema esta na referencia tabela direta do campo…

Entre no adempiere no system e vá na taleba “PP_Order_Workflow_Header_v”, e na coluna PP_Order_ID coloque a referencia como tabela e faça o teste.

sds, Mario


#11

a 3.4.2s já tem o controle de produção, ou tem que “acoplar” o libero?


#12

eu uso a 3.6.0, mas uso as telas antigas e a LDM do produto antiga (na 3.6.0 só está desabilitado o modo antigo por padrão), agora se vc quer ter todos os novos controles de produção, dai tem que ir ajustando os erros, e acompanhar as correções que acontecem no projeto pai (sf.net/projects/adempiere)


#13

com a LDM antiga é possivel calcular o custo do produto?
a meu gerenciamento de producao nao precisa ser tao complexo quanto o libero.

tem algum tutorial de como habilitar a ldm antiga?


#14

Nem acredito!

depois de alguns dias procurando na web e algumas horas debugando e entendendo o código de geração de sql do adempiere.
eis o código que resolveu meu problema:

UPDATE AD_Column SET ColumnSQL = 'S_Resource_ID' WHERE columnname = 'S_Resource_ID' and AD_Table_ID=53027

#15

Corrigindo, este update que resolveu um problema gerou outro. Na hora de inserir a Ordem de Produção, através do MRP, dava problema neste campo. A solução que encontrei foi voltar atrás neste update e fazer outro, retirando a chave. Aparentemente funcionou, novamente o uso vai me dizer se tava certo ou não.