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!
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!
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;
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?
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.
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?
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.
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!"
Caminho completo
Em um produto com LDM. (Produzido)
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]
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
é 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
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)
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?
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
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.