<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.idempiere.org/w-en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ngordon7000</id>
	<title>iDempiere en - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.idempiere.org/w-en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ngordon7000"/>
	<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/en/Special:Contributions/Ngordon7000"/>
	<updated>2026-09-30T20:05:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:Report_Detail_Movement&amp;diff=19187</id>
		<title>Queries:Report Detail Movement</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:Report_Detail_Movement&amp;diff=19187"/>
		<updated>2021-07-28T05:58:35Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Queries:Report Detail Movement to Queries: Report Detail Movement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Queries: Report Detail Movement]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_Report_Detail_Movement&amp;diff=19186</id>
		<title>Queries: Report Detail Movement</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_Report_Detail_Movement&amp;diff=19186"/>
		<updated>2021-07-28T05:58:35Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Queries:Report Detail Movement to Queries: Report Detail Movement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' [[User:Hieplq|Hieplq]] ([[User talk:Hieplq|talk]])&lt;br /&gt;
* '''Request from:''' [[User:Nakarat|Nakarat]]&lt;br /&gt;
&lt;br /&gt;
this query for report all movement of product in range time.&lt;br /&gt;
&lt;br /&gt;
what thing you get after run it?&lt;br /&gt;
&lt;br /&gt;
1. you must enter start_date, end_date, client_id&lt;br /&gt;
&lt;br /&gt;
2. query all m_transaction record for product HAS TRANSACTION in start_date and end_date.&lt;br /&gt;
&lt;br /&gt;
3. each product has below info:&lt;br /&gt;
&lt;br /&gt;
   + first line for start balance info. it sum form first record to record at start_date.&lt;br /&gt;
&lt;br /&gt;
   + each transaction between start_date and end_date, has info join from document table.&lt;br /&gt;
&lt;br /&gt;
   + for end balance can archive by jasper report.&lt;br /&gt;
&lt;br /&gt;
for test record please refer wiki:[[Jasper_Test_Sql]]&lt;br /&gt;
&lt;br /&gt;
* you can extend it with add filter by product category, org, locator,...&lt;br /&gt;
&lt;br /&gt;
also query plus price, code info&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select &lt;br /&gt;
    pro.name as pro_name, pro.m_product_id,&lt;br /&gt;
&lt;br /&gt;
	trans.movementdate as move_date,&lt;br /&gt;
&lt;br /&gt;
	case when trans.movementdate is null then null&lt;br /&gt;
		 when trans.m_inventoryline_id is not null then doc_inv.documentno&lt;br /&gt;
		 when trans.m_movementline_id is not null then doc_move.documentno&lt;br /&gt;
		 when trans.m_inoutline_id is not null then doc_inout.documentno&lt;br /&gt;
		 when trans.m_productionline_id is not null then doc_pro.documentno&lt;br /&gt;
	else null end as doc_no,&lt;br /&gt;
&lt;br /&gt;
	p_cate.name as cate_name, p_cate.m_product_category_id as cate_id, pro.value as pro_value, &lt;br /&gt;
&lt;br /&gt;
    case when trans.movementdate is null then null&lt;br /&gt;
		 when trans.m_inventoryline_id is not null then doc_inv.doc_name&lt;br /&gt;
		 when trans.m_movementline_id is not null then doc_move.doc_name&lt;br /&gt;
		 when trans.m_inoutline_id is not null then doc_inout.doc_name&lt;br /&gt;
		 when trans.m_productionline_id is not null then doc_pro.doc_name&lt;br /&gt;
		 else null end  as doc_name,&lt;br /&gt;
&lt;br /&gt;
	sum(trans.movementqty ) as movementqty ,&lt;br /&gt;
&lt;br /&gt;
	sum(case when trans.movementtype in ('I+','P+','V+','C+','W+','M+')  then trans.movementqty else 0 end) as amout_in,&lt;br /&gt;
&lt;br /&gt;
	sum(case when trans.movementtype in ('I-','P-','V-','C-','W-','M-') then -1 * trans.movementqty else 0 end) as amout_out,&lt;br /&gt;
&lt;br /&gt;
    case when trans.movementdate is null then null&lt;br /&gt;
        when trans.m_inventoryline_id is not null  then trans.m_inventoryline_id&lt;br /&gt;
        when trans.m_movementline_id is not null then trans.m_movementline_id&lt;br /&gt;
        when trans.m_inoutline_id is not null then trans.m_inoutline_id&lt;br /&gt;
        when trans.m_productionline_id is not null then trans.m_productionline_id&lt;br /&gt;
    else null end as line_id&lt;br /&gt;
from &lt;br /&gt;
    (select &lt;br /&gt;
        AD_Org_ID, m_product_id, m_locator_id, &lt;br /&gt;
        case when movementdate&amp;lt; $P{StartDate} then null else movementdate END as movementdate, &lt;br /&gt;
        movementtype, movementqty, m_inventoryline_id, m_movementline_id, m_inoutline_id, m_productionline_id&lt;br /&gt;
    from &lt;br /&gt;
        m_transaction&lt;br /&gt;
    where &lt;br /&gt;
        movementdate&amp;lt;=$P{EndDate} and ad_client_id=$P{AD_CLIENT_ID}  &lt;br /&gt;
		and m_product_id in (select DISTINCT m_product_id&lt;br /&gt;
							from &lt;br /&gt;
								m_transaction&lt;br /&gt;
							where &lt;br /&gt;
								movementdate&amp;gt;=$P{StartDate} and movementdate&amp;lt;=$P{EndDate} and ad_client_id=$P{AD_CLIENT_ID})&lt;br /&gt;
    ) as trans &lt;br /&gt;
   INNER JOIN (SELECT m_product_category_id, m_product_id, value, name &lt;br /&gt;
				FROM m_product &lt;br /&gt;
				where m_product_id in (select DISTINCT m_product_id&lt;br /&gt;
										from &lt;br /&gt;
											m_transaction&lt;br /&gt;
										where &lt;br /&gt;
											movementdate&amp;gt;=$P{StartDate} and movementdate&amp;lt;=$P{EndDate} and ad_client_id=$P{AD_CLIENT_ID})&lt;br /&gt;
    ) AS pro on trans.m_product_id=pro.m_product_id&lt;br /&gt;
    inner join m_product_category p_cate on pro.m_product_category_id=p_cate.m_product_category_id  &lt;br /&gt;
    inner join m_locator kho on trans.m_locator_id=kho.m_locator_id &lt;br /&gt;
                &lt;br /&gt;
    inner join AD_Org bp on trans.AD_Org_ID=bp.AD_Org_ID &lt;br /&gt;
								&lt;br /&gt;
    left outer join (select m_inventoryline.m_inventoryline_id, m_inventory.movementdate, m_inventory.documentno, c_doctype.name as doc_name from m_inventoryline &lt;br /&gt;
                        inner join m_inventory on m_inventory.m_inventory_id = m_inventoryline.m_inventory_id&lt;br /&gt;
                        inner join c_doctype on c_doctype.c_doctype_id = m_inventory.c_doctype_id&lt;br /&gt;
                    ) as doc_inv on trans.m_inventoryline_id = doc_inv.m_inventoryline_id&lt;br /&gt;
    left outer join (select m_movementline.m_movementline_id, m_movement.movementdate, m_movement.documentno, c_doctype.name as doc_name from m_movementline &lt;br /&gt;
                        inner join m_movement on m_movement.m_movement_id = m_movementline.m_movement_id&lt;br /&gt;
                        inner join c_doctype on c_doctype.c_doctype_id = m_movement.c_doctype_id&lt;br /&gt;
                    ) as doc_move on trans.m_movementline_id = doc_move.m_movementline_id&lt;br /&gt;
    left outer join (select m_inoutline.m_inoutline_id, m_inout.movementdate, m_inout.documentno, c_doctype.name as doc_name from m_inoutline &lt;br /&gt;
                        inner join m_inout on m_inout.m_inout_id = m_inoutline.m_inout_id&lt;br /&gt;
                        inner join c_doctype on c_doctype.c_doctype_id = m_inout.c_doctype_id&lt;br /&gt;
                    ) as doc_inout on trans.m_inoutline_id = doc_inout.m_inoutline_id&lt;br /&gt;
    left outer join (select m_productionline.m_productionline_id, m_production.movementdate, m_production.documentno, 'production'::varchar as doc_name from m_productionline &lt;br /&gt;
                        inner join m_production on m_production.m_production_id = m_productionline.m_production_id&lt;br /&gt;
                    ) as doc_pro on trans.m_productionline_id = doc_pro.m_productionline_id&lt;br /&gt;
&lt;br /&gt;
Group By &lt;br /&gt;
    &lt;br /&gt;
	trans.movementdate, p_cate.name, p_cate.m_product_category_id, pro.name, pro.m_product_id, pro.value,&lt;br /&gt;
&lt;br /&gt;
    case when trans.movementdate is null then null&lt;br /&gt;
        when trans.m_inventoryline_id is not null  then trans.m_inventoryline_id&lt;br /&gt;
        when trans.m_movementline_id is not null then trans.m_movementline_id&lt;br /&gt;
        when trans.m_inoutline_id is not null then trans.m_inoutline_id&lt;br /&gt;
        when trans.m_productionline_id is not null then trans.m_productionline_id&lt;br /&gt;
    else null END,&lt;br /&gt;
&lt;br /&gt;
	case when trans.movementdate is null then null&lt;br /&gt;
		 when trans.m_inventoryline_id is not null then doc_inv.documentno&lt;br /&gt;
		 when trans.m_movementline_id is not null then doc_move.documentno&lt;br /&gt;
		 when trans.m_inoutline_id is not null then doc_inout.documentno&lt;br /&gt;
		 when trans.m_productionline_id is not null then doc_pro.documentno&lt;br /&gt;
	else null end ,&lt;br /&gt;
&lt;br /&gt;
    case when trans.movementdate is null then null&lt;br /&gt;
		when trans.m_inventoryline_id is not null then doc_inv.doc_name&lt;br /&gt;
		when trans.m_movementline_id is not null then doc_move.doc_name&lt;br /&gt;
		when trans.m_inoutline_id is not null then doc_inout.doc_name&lt;br /&gt;
		when trans.m_productionline_id is not null then doc_pro.doc_name&lt;br /&gt;
	else null end&lt;br /&gt;
	&lt;br /&gt;
ORDER BY &lt;br /&gt;
	 pro.name, move_date NULLS first, doc_no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_Stock&amp;diff=19185</id>
		<title>Code Scratchpad: Queries: Stock</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_Stock&amp;diff=19185"/>
		<updated>2021-07-28T05:57:52Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: Stock to Queries: Stock&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Queries: Stock]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_Stock&amp;diff=19184</id>
		<title>Queries: Stock</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_Stock&amp;diff=19184"/>
		<updated>2021-07-28T05:57:52Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: Stock to Queries: Stock&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Product =&lt;br /&gt;
&lt;br /&gt;
== Product grouped by product type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
	a.ad_client_id, a.producttype,count(*) &lt;br /&gt;
from &lt;br /&gt;
	m_product a &lt;br /&gt;
group by &lt;br /&gt;
	a.ad_client_id, a.producttype &lt;br /&gt;
order by a.ad_client_id, a.producttype;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Cost =&lt;br /&gt;
&lt;br /&gt;
== Products with zero cost ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
drop view if exists zz_product_qtys_v;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_product_qtys_v as &lt;br /&gt;
SELECT&lt;br /&gt;
	l.ad_client_id,&lt;br /&gt;
	p.m_product_id,&lt;br /&gt;
	p.name AS product_name,&lt;br /&gt;
	p.value AS product_code,&lt;br /&gt;
	sum(s.qtyonhand) AS qtyonhand,&lt;br /&gt;
	sum(s.qtyreserved) AS qtyreserved,&lt;br /&gt;
	sum(s.qtyordered) AS qtyordered,&lt;br /&gt;
	(sum(s.qtyonhand) - sum(s.qtyreserved)) AS qtyavailable&lt;br /&gt;
FROM &lt;br /&gt;
	m_product p, m_storage s, m_locator l, m_warehouse w, ad_org o&lt;br /&gt;
WHERE&lt;br /&gt;
	p.m_product_id = s.m_product_id AND &lt;br /&gt;
	s.m_locator_id = l.m_locator_id AND &lt;br /&gt;
	l.m_warehouse_id = w.m_warehouse_id AND&lt;br /&gt;
     l.ad_org_id = o.ad_org_id&lt;br /&gt;
GROUP BY &lt;br /&gt;
	l.ad_client_id, p.m_product_id, p.name, p.value&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
select * from zz_product_qtys_v;&lt;br /&gt;
&lt;br /&gt;
select * from zz_product_qtys_withcosts_v;&lt;br /&gt;
&lt;br /&gt;
drop view if exists zz_product_qtys_withcosts_v;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_product_qtys_withcosts_v as&lt;br /&gt;
SELECT&lt;br /&gt;
	p.ad_client_id,&lt;br /&gt;
	cl.name as client_name,&lt;br /&gt;
	p.m_product_id,&lt;br /&gt;
	p.value as product_code,&lt;br /&gt;
	p.name as product_name,&lt;br /&gt;
	c.m_costelement_id,&lt;br /&gt;
	c.m_costelement_name,&lt;br /&gt;
	c.currentcostprice,&lt;br /&gt;
	c.currentqty,&lt;br /&gt;
	c.cumulatedamt,&lt;br /&gt;
	c.cumulatedqty,&lt;br /&gt;
	q.qtyonhand,&lt;br /&gt;
	q.qtyreserved,&lt;br /&gt;
	q.qtyordered,&lt;br /&gt;
	q.qtyavailable,&lt;br /&gt;
	pl.name as pricelist_name,&lt;br /&gt;
	plv.name as pricelistversion_name,&lt;br /&gt;
	prc.pricelist&lt;br /&gt;
from &lt;br /&gt;
	m_product p&lt;br /&gt;
left join&lt;br /&gt;
	rv_cost c on c.m_product_id = p.m_product_id &lt;br /&gt;
LEFT JOIN &lt;br /&gt;
	zz_product_qtys_v q ON c.m_product_id = q.m_product_id&lt;br /&gt;
-- Just to get the price&lt;br /&gt;
left join m_productprice prc on &lt;br /&gt;
		prc.ad_client_id = p.ad_client_id and 		/* double check we're in the right client */&lt;br /&gt;
		--prc.m_pricelist_version_id = 1000003 and 	/* */ &lt;br /&gt;
		prc.m_product_id = p.m_product_id&lt;br /&gt;
left join&lt;br /&gt;
		m_pricelist_version plv on plv.m_pricelist_version_id = prc.m_pricelist_version_id&lt;br /&gt;
left join&lt;br /&gt;
		m_pricelist pl on plv.m_pricelist_id = pl.m_pricelist_id&lt;br /&gt;
join &lt;br /&gt;
	ad_client cl on p.ad_client_id = cl.ad_client_id &lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
select * from zz_product_qtys_withcosts_v where product_code = '';&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------&lt;br /&gt;
-- Main query to get the zero costs&lt;br /&gt;
------------------------------------------------------------------&lt;br /&gt;
select &lt;br /&gt;
	client_name as clientname, product_code, product_name, max(qtyonhand) as qtyonhand, max(pricelist) as pricelist&lt;br /&gt;
from &lt;br /&gt;
	zz_product_qtys_withcosts_v s &lt;br /&gt;
where &lt;br /&gt;
 	client_name like '%client name%'  and&lt;br /&gt;
 	-- Make sure we get at least one record&lt;br /&gt;
	--coalesce(pricelistversion_name, '11/08/2013') = '11/08/2013' and&lt;br /&gt;
	--m_costelement_name = 'Last Invoice' and&lt;br /&gt;
	m_product_id not in (&lt;br /&gt;
	-- 1. Products with costs&lt;br /&gt;
	select distinct m_product_id from zz_product_qtys_withcosts_v s &lt;br /&gt;
	where &lt;br /&gt;
		s.client_name like '%client name%' and&lt;br /&gt;
		-- Make sure we get at least one record&lt;br /&gt;
		coalesce(s.pricelistversion_name, '11/08/2013') = '11/08/2013' and&lt;br /&gt;
		s.m_costelement_name = 'Last Invoice' and&lt;br /&gt;
		coalesce(s.currentcostprice, 0) &amp;lt;&amp;gt; 0&lt;br /&gt;
)&lt;br /&gt;
group by client_name, product_code, product_name&lt;br /&gt;
order by product_code;&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------&lt;br /&gt;
-- Some working queries&lt;br /&gt;
------------------------------------------------------------------&lt;br /&gt;
-- 1. Products with no cost records at all&lt;br /&gt;
select * from zz_product_qtys_withcosts_v s &lt;br /&gt;
where &lt;br /&gt;
	s.client_name like '%client name%' and&lt;br /&gt;
	-- Make sure we get at least one record&lt;br /&gt;
	coalesce(s.pricelistversion_name, '11/08/2013') = '11/08/2013' and&lt;br /&gt;
	s.currentcostprice is null;&lt;br /&gt;
&lt;br /&gt;
-- 2. Products with zero cost, but there is something interesting about the product&lt;br /&gt;
select * from zz_product_qtys_withcosts_v s &lt;br /&gt;
where &lt;br /&gt;
	s.client_name like '%client name%' and&lt;br /&gt;
	-- Make sure we get at least one record&lt;br /&gt;
	coalesce(s.pricelistversion_name, '11/08/2013') = '11/08/2013' and&lt;br /&gt;
	s.m_costelement_name = 'Last Invoice' and&lt;br /&gt;
	s.currentcostprice = 0 and (&lt;br /&gt;
		s.qtyonhand &amp;lt;&amp;gt; 0 OR &lt;br /&gt;
		s.qtyreserved &amp;lt;&amp;gt; 0 or &lt;br /&gt;
		s.qtyordered &amp;lt;&amp;gt; 0&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Various cost related ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select&lt;br /&gt;
	a.*&lt;br /&gt;
from&lt;br /&gt;
	m_cost a&lt;br /&gt;
where&lt;br /&gt;
	--a.m_product_id = 1035015;&lt;br /&gt;
	a.m_product_id = &lt;br /&gt;
		( select m_product_id from m_product where value = 'Test-03' );&lt;br /&gt;
&lt;br /&gt;
update m_cost&lt;br /&gt;
set currentcostprice = 50.00&lt;br /&gt;
where&lt;br /&gt;
	m_product_id = &lt;br /&gt;
		( select m_product_id from m_product where value = 'Test-02' );&lt;br /&gt;
&lt;br /&gt;
select&lt;br /&gt;
	a.*&lt;br /&gt;
from&lt;br /&gt;
	m_costdetail a&lt;br /&gt;
where&lt;br /&gt;
	--a.m_product_id = 1035015;&lt;br /&gt;
	a.m_product_id = 1046609;	&lt;br /&gt;
&lt;br /&gt;
delete from m_cost where m_product_id in ( select m_product_id from m_product where value = 'Test-03' );&lt;br /&gt;
delete from m_costdetail where m_product_id in ( select m_product_id from m_product where value = 'Test-03' ) ;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cost element ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select&lt;br /&gt;
	count(*)&lt;br /&gt;
	--cl.name as clientname,&lt;br /&gt;
	--ele.name as costelementname,&lt;br /&gt;
	--prod.value as productvalue,&lt;br /&gt;
	--prod.name as productname,&lt;br /&gt;
	--a.*,&lt;br /&gt;
	--a.currentqty, a.currentcostprice&lt;br /&gt;
from&lt;br /&gt;
	m_cost a&lt;br /&gt;
join m_costelement ele on a.m_costelement_id = ele.m_costelement_id&lt;br /&gt;
join m_product prod on a.m_product_id = prod.m_product_id&lt;br /&gt;
join ad_client cl on a.ad_client_id = cl.ad_client_id&lt;br /&gt;
where&lt;br /&gt;
	a.ad_client_id = 1000000 and&lt;br /&gt;
	ele.name like '%Average%'&lt;br /&gt;
--order by&lt;br /&gt;
--	prod.value, ele.name ;&lt;br /&gt;
	--a.m_product_id = 1035015;&lt;br /&gt;
	;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Change costing method ==&lt;br /&gt;
&lt;br /&gt;
Still in testing.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * into bk_m_cost_RQ100022 from m_cost;&lt;br /&gt;
&lt;br /&gt;
-- Identify records for &amp;quot;Exclude all items where there is an average cost entry already (81 items)&amp;quot;&lt;br /&gt;
--select&lt;br /&gt;
--	distinct a.m_product_id&lt;br /&gt;
--	--cl.name as clientname,&lt;br /&gt;
--	--ele.name as costelementname,&lt;br /&gt;
--	--prod.value as productvalue,&lt;br /&gt;
--	--prod.name as productname,&lt;br /&gt;
--	--a.currentqty, a.currentcostprice&lt;br /&gt;
--from&lt;br /&gt;
--	m_cost a&lt;br /&gt;
--join m_costelement ele on a.m_costelement_id = ele.m_costelement_id&lt;br /&gt;
--join m_product prod on a.m_product_id = prod.m_product_id&lt;br /&gt;
--join ad_client cl on a.ad_client_id = cl.ad_client_id&lt;br /&gt;
--where&lt;br /&gt;
--	a.ad_client_id = 1000000 and&lt;br /&gt;
--	ele.name like '%Average%';&lt;br /&gt;
&lt;br /&gt;
-- Update&lt;br /&gt;
update&lt;br /&gt;
	m_cost&lt;br /&gt;
set&lt;br /&gt;
	m_costelement_id = ( select m_costelement_id from m_costelement where name = 'Average Invoice' and ad_client_id = 1000000 )&lt;br /&gt;
where&lt;br /&gt;
	ad_client_id = 1000000 and&lt;br /&gt;
	-- Exclude all items where there is an average cost entry already (81 items)&lt;br /&gt;
	m_product_id not in ( &lt;br /&gt;
		1036146,1037058,1036065,1036427,1045882,1036542,1036747,1038486,1036979,1036615,1037721,1036974,1035066,1037092,1037012,1036742,1046172,1036540,&lt;br /&gt;
		1036793,1036756,1036487,1036431,1036632,1046632,1035286,1036940,1035031,1037884,1036962,1036826,1046011,1036456,1046076,1036459,1045894,1036054,&lt;br /&gt;
		1036095,1036163,1035074,1036714,1035032,1045866,1038110,1036750,1038118,1037015,1046361,1046135,1035518,1035271,1037014,1045916,1035025,1036429,&lt;br /&gt;
		1045933,1037305,1036748,1035302,1036665,1036637,1036517,1036541,1036498,1036343,1035061,1038411,1036843,1036464,1036936,1036818,1038447,1036630,&lt;br /&gt;
		1036068,1036098,1036100,1037071,1038501,1036461,1037873,1037013,1036533&lt;br /&gt;
	);	&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:Report_Detail_Movement&amp;diff=19183</id>
		<title>Code Scratchpad: Queries:Report Detail Movement</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:Report_Detail_Movement&amp;diff=19183"/>
		<updated>2021-07-28T05:57:22Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries:Report Detail Movement to Queries:Report Detail Movement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Queries:Report Detail Movement]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_Report_Detail_Movement&amp;diff=19182</id>
		<title>Queries: Report Detail Movement</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_Report_Detail_Movement&amp;diff=19182"/>
		<updated>2021-07-28T05:57:22Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries:Report Detail Movement to Queries:Report Detail Movement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' [[User:Hieplq|Hieplq]] ([[User talk:Hieplq|talk]])&lt;br /&gt;
* '''Request from:''' [[User:Nakarat|Nakarat]]&lt;br /&gt;
&lt;br /&gt;
this query for report all movement of product in range time.&lt;br /&gt;
&lt;br /&gt;
what thing you get after run it?&lt;br /&gt;
&lt;br /&gt;
1. you must enter start_date, end_date, client_id&lt;br /&gt;
&lt;br /&gt;
2. query all m_transaction record for product HAS TRANSACTION in start_date and end_date.&lt;br /&gt;
&lt;br /&gt;
3. each product has below info:&lt;br /&gt;
&lt;br /&gt;
   + first line for start balance info. it sum form first record to record at start_date.&lt;br /&gt;
&lt;br /&gt;
   + each transaction between start_date and end_date, has info join from document table.&lt;br /&gt;
&lt;br /&gt;
   + for end balance can archive by jasper report.&lt;br /&gt;
&lt;br /&gt;
for test record please refer wiki:[[Jasper_Test_Sql]]&lt;br /&gt;
&lt;br /&gt;
* you can extend it with add filter by product category, org, locator,...&lt;br /&gt;
&lt;br /&gt;
also query plus price, code info&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select &lt;br /&gt;
    pro.name as pro_name, pro.m_product_id,&lt;br /&gt;
&lt;br /&gt;
	trans.movementdate as move_date,&lt;br /&gt;
&lt;br /&gt;
	case when trans.movementdate is null then null&lt;br /&gt;
		 when trans.m_inventoryline_id is not null then doc_inv.documentno&lt;br /&gt;
		 when trans.m_movementline_id is not null then doc_move.documentno&lt;br /&gt;
		 when trans.m_inoutline_id is not null then doc_inout.documentno&lt;br /&gt;
		 when trans.m_productionline_id is not null then doc_pro.documentno&lt;br /&gt;
	else null end as doc_no,&lt;br /&gt;
&lt;br /&gt;
	p_cate.name as cate_name, p_cate.m_product_category_id as cate_id, pro.value as pro_value, &lt;br /&gt;
&lt;br /&gt;
    case when trans.movementdate is null then null&lt;br /&gt;
		 when trans.m_inventoryline_id is not null then doc_inv.doc_name&lt;br /&gt;
		 when trans.m_movementline_id is not null then doc_move.doc_name&lt;br /&gt;
		 when trans.m_inoutline_id is not null then doc_inout.doc_name&lt;br /&gt;
		 when trans.m_productionline_id is not null then doc_pro.doc_name&lt;br /&gt;
		 else null end  as doc_name,&lt;br /&gt;
&lt;br /&gt;
	sum(trans.movementqty ) as movementqty ,&lt;br /&gt;
&lt;br /&gt;
	sum(case when trans.movementtype in ('I+','P+','V+','C+','W+','M+')  then trans.movementqty else 0 end) as amout_in,&lt;br /&gt;
&lt;br /&gt;
	sum(case when trans.movementtype in ('I-','P-','V-','C-','W-','M-') then -1 * trans.movementqty else 0 end) as amout_out,&lt;br /&gt;
&lt;br /&gt;
    case when trans.movementdate is null then null&lt;br /&gt;
        when trans.m_inventoryline_id is not null  then trans.m_inventoryline_id&lt;br /&gt;
        when trans.m_movementline_id is not null then trans.m_movementline_id&lt;br /&gt;
        when trans.m_inoutline_id is not null then trans.m_inoutline_id&lt;br /&gt;
        when trans.m_productionline_id is not null then trans.m_productionline_id&lt;br /&gt;
    else null end as line_id&lt;br /&gt;
from &lt;br /&gt;
    (select &lt;br /&gt;
        AD_Org_ID, m_product_id, m_locator_id, &lt;br /&gt;
        case when movementdate&amp;lt; $P{StartDate} then null else movementdate END as movementdate, &lt;br /&gt;
        movementtype, movementqty, m_inventoryline_id, m_movementline_id, m_inoutline_id, m_productionline_id&lt;br /&gt;
    from &lt;br /&gt;
        m_transaction&lt;br /&gt;
    where &lt;br /&gt;
        movementdate&amp;lt;=$P{EndDate} and ad_client_id=$P{AD_CLIENT_ID}  &lt;br /&gt;
		and m_product_id in (select DISTINCT m_product_id&lt;br /&gt;
							from &lt;br /&gt;
								m_transaction&lt;br /&gt;
							where &lt;br /&gt;
								movementdate&amp;gt;=$P{StartDate} and movementdate&amp;lt;=$P{EndDate} and ad_client_id=$P{AD_CLIENT_ID})&lt;br /&gt;
    ) as trans &lt;br /&gt;
   INNER JOIN (SELECT m_product_category_id, m_product_id, value, name &lt;br /&gt;
				FROM m_product &lt;br /&gt;
				where m_product_id in (select DISTINCT m_product_id&lt;br /&gt;
										from &lt;br /&gt;
											m_transaction&lt;br /&gt;
										where &lt;br /&gt;
											movementdate&amp;gt;=$P{StartDate} and movementdate&amp;lt;=$P{EndDate} and ad_client_id=$P{AD_CLIENT_ID})&lt;br /&gt;
    ) AS pro on trans.m_product_id=pro.m_product_id&lt;br /&gt;
    inner join m_product_category p_cate on pro.m_product_category_id=p_cate.m_product_category_id  &lt;br /&gt;
    inner join m_locator kho on trans.m_locator_id=kho.m_locator_id &lt;br /&gt;
                &lt;br /&gt;
    inner join AD_Org bp on trans.AD_Org_ID=bp.AD_Org_ID &lt;br /&gt;
								&lt;br /&gt;
    left outer join (select m_inventoryline.m_inventoryline_id, m_inventory.movementdate, m_inventory.documentno, c_doctype.name as doc_name from m_inventoryline &lt;br /&gt;
                        inner join m_inventory on m_inventory.m_inventory_id = m_inventoryline.m_inventory_id&lt;br /&gt;
                        inner join c_doctype on c_doctype.c_doctype_id = m_inventory.c_doctype_id&lt;br /&gt;
                    ) as doc_inv on trans.m_inventoryline_id = doc_inv.m_inventoryline_id&lt;br /&gt;
    left outer join (select m_movementline.m_movementline_id, m_movement.movementdate, m_movement.documentno, c_doctype.name as doc_name from m_movementline &lt;br /&gt;
                        inner join m_movement on m_movement.m_movement_id = m_movementline.m_movement_id&lt;br /&gt;
                        inner join c_doctype on c_doctype.c_doctype_id = m_movement.c_doctype_id&lt;br /&gt;
                    ) as doc_move on trans.m_movementline_id = doc_move.m_movementline_id&lt;br /&gt;
    left outer join (select m_inoutline.m_inoutline_id, m_inout.movementdate, m_inout.documentno, c_doctype.name as doc_name from m_inoutline &lt;br /&gt;
                        inner join m_inout on m_inout.m_inout_id = m_inoutline.m_inout_id&lt;br /&gt;
                        inner join c_doctype on c_doctype.c_doctype_id = m_inout.c_doctype_id&lt;br /&gt;
                    ) as doc_inout on trans.m_inoutline_id = doc_inout.m_inoutline_id&lt;br /&gt;
    left outer join (select m_productionline.m_productionline_id, m_production.movementdate, m_production.documentno, 'production'::varchar as doc_name from m_productionline &lt;br /&gt;
                        inner join m_production on m_production.m_production_id = m_productionline.m_production_id&lt;br /&gt;
                    ) as doc_pro on trans.m_productionline_id = doc_pro.m_productionline_id&lt;br /&gt;
&lt;br /&gt;
Group By &lt;br /&gt;
    &lt;br /&gt;
	trans.movementdate, p_cate.name, p_cate.m_product_category_id, pro.name, pro.m_product_id, pro.value,&lt;br /&gt;
&lt;br /&gt;
    case when trans.movementdate is null then null&lt;br /&gt;
        when trans.m_inventoryline_id is not null  then trans.m_inventoryline_id&lt;br /&gt;
        when trans.m_movementline_id is not null then trans.m_movementline_id&lt;br /&gt;
        when trans.m_inoutline_id is not null then trans.m_inoutline_id&lt;br /&gt;
        when trans.m_productionline_id is not null then trans.m_productionline_id&lt;br /&gt;
    else null END,&lt;br /&gt;
&lt;br /&gt;
	case when trans.movementdate is null then null&lt;br /&gt;
		 when trans.m_inventoryline_id is not null then doc_inv.documentno&lt;br /&gt;
		 when trans.m_movementline_id is not null then doc_move.documentno&lt;br /&gt;
		 when trans.m_inoutline_id is not null then doc_inout.documentno&lt;br /&gt;
		 when trans.m_productionline_id is not null then doc_pro.documentno&lt;br /&gt;
	else null end ,&lt;br /&gt;
&lt;br /&gt;
    case when trans.movementdate is null then null&lt;br /&gt;
		when trans.m_inventoryline_id is not null then doc_inv.doc_name&lt;br /&gt;
		when trans.m_movementline_id is not null then doc_move.doc_name&lt;br /&gt;
		when trans.m_inoutline_id is not null then doc_inout.doc_name&lt;br /&gt;
		when trans.m_productionline_id is not null then doc_pro.doc_name&lt;br /&gt;
	else null end&lt;br /&gt;
	&lt;br /&gt;
ORDER BY &lt;br /&gt;
	 pro.name, move_date NULLS first, doc_no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_Invoices,_Orders_and_Quotes&amp;diff=19181</id>
		<title>Code Scratchpad: Queries: Invoices, Orders and Quotes</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_Invoices,_Orders_and_Quotes&amp;diff=19181"/>
		<updated>2021-07-28T05:57:01Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: Invoices, Orders and Quotes to Queries: Invoices, Orders and Quotes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Queries: Invoices, Orders and Quotes]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_Invoices,_Orders_and_Quotes&amp;diff=19180</id>
		<title>Queries: Invoices, Orders and Quotes</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_Invoices,_Orders_and_Quotes&amp;diff=19180"/>
		<updated>2021-07-28T05:57:01Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: Invoices, Orders and Quotes to Queries: Invoices, Orders and Quotes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Orders =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from &lt;br /&gt;
	c_order a&lt;br /&gt;
join c_orderline b on a.c_order_id = b.c_order_id&lt;br /&gt;
where&lt;br /&gt;
	a.documentno='21686';&lt;br /&gt;
&lt;br /&gt;
select a.documentno, b.line, b.qtyentered, b.pricelimit, b.priceentered, b.pricelist, b.priceactual, &lt;br /&gt;
	b.discount, b.pricelist - b.priceactual as discountAmt, b.linenetamt from &lt;br /&gt;
	c_order a&lt;br /&gt;
join c_orderline b on a.c_order_id = b.c_order_id&lt;br /&gt;
where&lt;br /&gt;
	a.documentno='24307'&lt;br /&gt;
order by b.line;&lt;br /&gt;
&lt;br /&gt;
select a.c_order_id from c_order a where a.documentno='24307';&lt;br /&gt;
&lt;br /&gt;
select a.ad_client_id, dt.name, count(*)&lt;br /&gt;
from &lt;br /&gt;
	c_order a&lt;br /&gt;
join c_orderline b on a.c_order_id = b.c_order_id&lt;br /&gt;
join c_doctype dt on a.c_doctypetarget_id = dt.c_doctype_id&lt;br /&gt;
group by a.ad_client_id, dt.name&lt;br /&gt;
order by dt.name&lt;br /&gt;
;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== With more detail ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
  a.ad_client_id, client.name as client_name, org.value as org_value, org.name as org_name, usr.name as user_createdby,&lt;br /&gt;
  bp.value as bp_value, bp.name as bp_name, &lt;br /&gt;
  dt.name as doctype_name, a.documentno, a.dateordered, a.docstatus, a.totallines, a.grandtotal,&lt;br /&gt;
  b.line, b.m_product_id, prod.name as productName, b.qtyentered, b.pricelimit, b.priceentered, b.pricelist, b.priceactual, &lt;br /&gt;
	b.discount, b.pricelist - b.priceactual as discountAmt, b.linenetamt,&lt;br /&gt;
from &lt;br /&gt;
	c_order a&lt;br /&gt;
left join c_orderline b on a.c_order_id = b.c_order_id&lt;br /&gt;
left join ad_client client on client.ad_client_id = a.ad_client_id&lt;br /&gt;
left join ad_org org on org.ad_org_id = a.ad_org_id&lt;br /&gt;
left join c_doctype dt on a.c_doctype_id = dt.c_doctype_id&lt;br /&gt;
left join m_product prod on prod.m_product_id = b.m_product_id&lt;br /&gt;
left join c_bpartner bp on bp.c_bpartner_id = a.c_bpartner_id&lt;br /&gt;
left join ad_user usr on usr.ad_user_id = a.createdby&lt;br /&gt;
where&lt;br /&gt;
  a.ad_client_id &amp;gt; 111 and&lt;br /&gt;
  a.grandtotal = 0 and&lt;br /&gt;
  a.docstatus in  ('CO', 'VO') and&lt;br /&gt;
order by a.dateordered desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Invoice and tax =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
  b.c_invoice_id, b.c_invoiceline_id, a.documentno, a.totallines, a.grandtotal, a.istaxincluded, a.dateinvoiced, a.dateacct,&lt;br /&gt;
  a.docstatus, coalesce(a.c_doctype_id, a.c_doctypetarget_id) as c_doctype_id, &lt;br /&gt;
	b.qtyinvoiced,b.qtyentered, b.pricelist, b.priceactual, b.pricelimit, b.priceentered, b.linenetamt, b.linetotalamt, b.taxamt&lt;br /&gt;
from &lt;br /&gt;
  c_invoice a&lt;br /&gt;
join c_invoiceline b on a.c_invoice_id = b.c_invoice_id;&lt;br /&gt;
where&lt;br /&gt;
	a.documentno='INW82785';&lt;br /&gt;
&lt;br /&gt;
select&lt;br /&gt;
	* &lt;br /&gt;
from&lt;br /&gt;
	c_invoicetax tax&lt;br /&gt;
join c_invoice a on a.c_invoice_id = tax.c_invoice_id&lt;br /&gt;
where&lt;br /&gt;
	a.documentno='INW82785';&lt;br /&gt;
	&lt;br /&gt;
select * from &lt;br /&gt;
	c_invoice a&lt;br /&gt;
join c_invoiceline b on a.c_invoice_id = b.c_invoice_id&lt;br /&gt;
where&lt;br /&gt;
	a.documentno='21686';&lt;br /&gt;
	&lt;br /&gt;
select a.ad_client_id, client.name, a.c_bpartner_id, b.value, b.name, a.issotrx, max(a.dateinvoiced), min(a.dateinvoiced), count(*) from &lt;br /&gt;
	c_invoice a&lt;br /&gt;
join c_bpartner b on a.c_bpartner_id = b.c_bpartner_id&lt;br /&gt;
join ad_client client on a.ad_client_id = client.ad_client_id&lt;br /&gt;
group by&lt;br /&gt;
	a.ad_client_id, client.name, a.c_bpartner_id, b.value, b.name, a.issotrx&lt;br /&gt;
order by a.ad_client_id, a.issotrx, count(*) desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Set invoice as paid (system error) =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ispaid, * from c_invoice where c_invoice_id = 1047724;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20150630_c_invoice from c_invoice where c_invoice_id = 1047724;&lt;br /&gt;
&lt;br /&gt;
update c_invoice set ispaid = 'Y' where c_invoice_id = 1047724;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Payments =&lt;br /&gt;
&lt;br /&gt;
== Last payment related to an invoice ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;SELECT p.DateTrx,p.PayAmt,alp.Amount&lt;br /&gt;
FROM C_AllocationLine ali&lt;br /&gt;
INNER JOIN C_AllocationHdr ah ON (ah.C_AllocationHdr_ID = ali.C_AllocationHdr_ID AND ah.DocStatus IN ('CO', 'CL'))&lt;br /&gt;
INNER JOIN C_AllocationLine alp ON (alp.C_AllocationHdr_ID = ah.C_AllocationHdr_ID)&lt;br /&gt;
INNER JOIN C_Payment p ON (p.C_Payment_ID= alp.C_Payment_ID AND p.DocStatus IN ('CO', 'CL'))&lt;br /&gt;
WHERE ali.C_Invoice_ID = ?&lt;br /&gt;
ORDER BY p.DateTrx DESC&lt;br /&gt;
LIMIT 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Discussion [https://groups.google.com/forum/#!topic/idempiere/J17EgtVzVKk here]&lt;br /&gt;
&lt;br /&gt;
Credit:Anozi Mada&lt;br /&gt;
&lt;br /&gt;
== Link from POS Order to the invoice to the payment ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select&lt;br /&gt;
	posorder.documentno, pmt.documentno&lt;br /&gt;
from&lt;br /&gt;
	c_order posorder&lt;br /&gt;
join &lt;br /&gt;
	c_invoice inv on inv.c_order_id = posorder.c_order_id&lt;br /&gt;
join&lt;br /&gt;
	c_payment pmt on pmt.c_payment_id = inv.c_payment_id&lt;br /&gt;
where posorder.documentno = '80014';&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_General&amp;diff=19179</id>
		<title>Code Scratchpad: Queries: General</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_General&amp;diff=19179"/>
		<updated>2021-07-28T05:56:29Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: General to Queries: General&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Queries: General]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_General&amp;diff=19178</id>
		<title>Queries: General</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_General&amp;diff=19178"/>
		<updated>2021-07-28T05:56:29Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: General to Queries: General&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Statistics =&lt;br /&gt;
&lt;br /&gt;
== Various counts ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select cast('Business partners: Count' as text) as heading, cast('1900/01/01' as text) as since, count(*) from c_bpartner a where a.ad_client_id = 1000000 and created&amp;gt;='1900/01/01'&lt;br /&gt;
union all&lt;br /&gt;
select cast('Business partners: Inactive' as text) as heading, cast('1900/01/01' as text) as since, count(*) from c_bpartner a where a.ad_client_id = 1000000 and created&amp;gt;='1900/01/01' and isactive = 'N'&lt;br /&gt;
union all&lt;br /&gt;
select cast('Business partners: Suppliers' as text) as heading, cast('1900/01/01' as text) as since, count(*) from c_bpartner a where a.ad_client_id = 1000000 and a.isvendor = 'Y' and created&amp;gt;='1900/01/01'&lt;br /&gt;
union all&lt;br /&gt;
select cast('Business partners: Customers' as text) as heading, cast('1900/01/01' as text) as since, count(*) from c_bpartner a where a.ad_client_id = 1000000 and a.iscustomer = 'Y' and created&amp;gt;='1900/01/01'&lt;br /&gt;
union all&lt;br /&gt;
select cast('Business partners: Count' as text) as heading, cast('1900/01/01' as text) as since, count(*) from c_bpartner a where a.ad_client_id = 1000000 and created&amp;gt;='1900/01/01'&lt;br /&gt;
union all&lt;br /&gt;
select cast('Invoices: Count' as text) as heading, cast('1900/01/01' as text) as since, count(*) from c_invoice a where a.ad_client_id = 1000000 and created&amp;gt;='1900/01/01'&lt;br /&gt;
union all&lt;br /&gt;
select cast('Invoices: Reversed or voided' as text) as heading, cast('1900/01/01' as text) as since, count(*) from c_invoice a where a.ad_client_id = 1000000 and created&amp;gt;='1900/01/01' and docstatus in ('RE','VO')&lt;br /&gt;
union all&lt;br /&gt;
select cast('Invoices: Suppliers' as text) as heading, cast('1900/01/01' as text) as since, count(*) from c_invoice a where a.ad_client_id = 1000000 and a.issotrx = 'N' and created&amp;gt;='1900/01/01'&lt;br /&gt;
union all&lt;br /&gt;
select cast('Invoices: Customers' as text) as heading, cast('1900/01/01' as text) as since, count(*) from c_invoice a where a.ad_client_id = 1000000 and a.issotrx = 'Y' and created&amp;gt;='1900/01/01'&lt;br /&gt;
union all&lt;br /&gt;
select cast('Payments: Count' as text) as heading, cast('1900/01/01' as text) as since, count(*) from c_payment a where a.ad_client_id = 1000000 and created&amp;gt;='1900/01/01'&lt;br /&gt;
union all&lt;br /&gt;
select cast('Payments: Reversed or voided' as text) as heading, cast('1900/01/01' as text) as since, count(*) from c_payment a where a.ad_client_id = 1000000 and created&amp;gt;='1900/01/01' and docstatus in ('RE','VO')&lt;br /&gt;
union all&lt;br /&gt;
select cast('Payments: Suppliers' as text) as heading, cast('1900/01/01' as text) as since, count(*) from c_payment a where a.ad_client_id = 1000000 and a.isreceipt = 'N' and created&amp;gt;='1900/01/01'&lt;br /&gt;
union all&lt;br /&gt;
select cast('Payments: Customers' as text) as heading, cast('1900/01/01' as text) as since, count(*) from c_payment a where a.ad_client_id = 1000000 and a.isreceipt = 'Y' and created&amp;gt;='1900/01/01'&lt;br /&gt;
union all&lt;br /&gt;
select cast('Assets: Count' as text) as heading, cast('1900/01/01' as text) as since, count(*) from a_asset a where a.ad_client_id = 1000000 and created&amp;gt;='1900/01/01'&lt;br /&gt;
union all&lt;br /&gt;
select cast('Assets: Inactive' as text) as heading, cast('1900/01/01' as text) as since, count(*) from a_asset a where a.ad_client_id = 1000000 and created&amp;gt;='1900/01/01' and isactive = 'N'&lt;br /&gt;
;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Invoices grouped by document type name ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select dt.name as DocumentType, cast('1900/01/01' as text) as since, count(*) from c_invoice a join c_doctype dt on a.c_doctype_id = dt.c_doctype_id where a.ad_client_id = 1000000 and a.created&amp;gt;='1900/01/01' group by dt.name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Credits = &lt;br /&gt;
&lt;br /&gt;
Initial contribution by: nTier Software Services http://www.ntier.co.za ngordon7000&lt;br /&gt;
&lt;br /&gt;
Add your credit here.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_Financial&amp;diff=19177</id>
		<title>Code Scratchpad: Queries: Financial</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_Financial&amp;diff=19177"/>
		<updated>2021-07-28T05:56:00Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: Financial to Queries: Financial&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Queries: Financial]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_Financial&amp;diff=19176</id>
		<title>Queries: Financial</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_Financial&amp;diff=19176"/>
		<updated>2021-07-28T05:56:00Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: Financial to Queries: Financial&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Fact details =&lt;br /&gt;
&lt;br /&gt;
This view can assist in the reconciliation of facts, or as the basis of a Jasper financial report.&lt;br /&gt;
&lt;br /&gt;
== Base view ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drop view if exists zz_scratch_factacct; -- cascade;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_scratch_factacct as&lt;br /&gt;
SELECT&lt;br /&gt;
fa.ad_client_id,&lt;br /&gt;
fa.ad_org_id,&lt;br /&gt;
eval.accounttype,&lt;br /&gt;
eval.value,&lt;br /&gt;
eval.name,&lt;br /&gt;
fa.dateacct,&lt;br /&gt;
(COALESCE(fa.amtacctdr, (0)::numeric) - COALESCE(fa.amtacctcr, (0)::numeric)) AS amount,&lt;br /&gt;
eval.c_elementvalue_id AS account_id,&lt;br /&gt;
parent.value AS parentvalue,&lt;br /&gt;
parent.name AS parentname,&lt;br /&gt;
prod.value as product_value,&lt;br /&gt;
prod.name as product_name,&lt;br /&gt;
fa.ad_table_id, &lt;br /&gt;
fa.record_id,&lt;br /&gt;
fa.line_id,&lt;br /&gt;
fa.description&lt;br /&gt;
--fa.*&lt;br /&gt;
FROM&lt;br /&gt;
(&lt;br /&gt;
   (&lt;br /&gt;
      (&lt;br /&gt;
         fact_acct fa&lt;br /&gt;
         JOIN c_elementvalue eval ON ((fa.account_id = eval.c_elementvalue_id))&lt;br /&gt;
         left join m_product prod on fa.m_product_id = prod.m_product_id&lt;br /&gt;
      )&lt;br /&gt;
      LEFT JOIN ad_treenode b ON&lt;br /&gt;
      (&lt;br /&gt;
         (&lt;br /&gt;
            (b.node_id = eval.c_elementvalue_id)&lt;br /&gt;
            AND (b.ad_client_id = fa.ad_client_id)&lt;br /&gt;
         )&lt;br /&gt;
      )&lt;br /&gt;
   )&lt;br /&gt;
   LEFT JOIN c_elementvalue parent ON ((parent.c_elementvalue_id = b.parent_id))&lt;br /&gt;
)&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select * from zz_scratch_factacct;&lt;br /&gt;
&lt;br /&gt;
--where &lt;br /&gt;
	--fa.AD_CLIENT_ID= 1000000 and&lt;br /&gt;
	--fa.dateacct &amp;gt;='2015-05-09 00:00:00' and &lt;br /&gt;
	--fa.dateacct &amp;lt;= '2015-05-09 00:00:00' and&lt;br /&gt;
	--eval.name = 'Cost of Sales' --and&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary: Name ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select name, sum(amount) *-1.00  as INCOME&lt;br /&gt;
	from zz_scratch_factacct&lt;br /&gt;
	where&lt;br /&gt;
	dateacct &amp;gt;='2015-05-01 00:00:00' and dateacct &amp;lt;= '2015-05-31 00:00:00' and&lt;br /&gt;
	accounttype ='R' and&lt;br /&gt;
	--($3=0 OR AD_ORG_ID=0 OR $5 IS NULL) and&lt;br /&gt;
	AD_CLIENT_ID= 1000000&lt;br /&gt;
	group by name&lt;br /&gt;
	HAVING (SUM(amount)) !=0&lt;br /&gt;
	Order by name;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select name, sum(amount) as EXPENSE&lt;br /&gt;
	from zz_scratch_factacct&lt;br /&gt;
	where&lt;br /&gt;
	dateacct &amp;gt;='2015-05-01 00:00:00' and dateacct &amp;lt;= '2015-05-31 00:00:00' and&lt;br /&gt;
	accounttype ='E' and&lt;br /&gt;
	--($3=0 OR AD_ORG_ID=$4 OR $5 IS NULL) and&lt;br /&gt;
	AD_CLIENT_ID= 1000000 and&lt;br /&gt;
	parentvalue = '200'&lt;br /&gt;
	group by name&lt;br /&gt;
	HAVING (SUM(amount)) !=0&lt;br /&gt;
	Order by name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary: DateAcct ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
	'Cost of Sales: I&amp;amp;E: ' || cast(a.dateacct as varchar(10)) as description, sum(a.amount)&lt;br /&gt;
from &lt;br /&gt;
	zz_scratch_factacct a&lt;br /&gt;
where &lt;br /&gt;
	a.AD_CLIENT_ID= 1000000 and&lt;br /&gt;
	a.dateacct &amp;gt;='2015-05-01 00:00:00' and &lt;br /&gt;
	a.dateacct &amp;lt;= '2015-05-31 00:00:00' and&lt;br /&gt;
	a.name = 'Cost of Sales' --and&lt;br /&gt;
	--a.created &amp;gt;= '2015-06-08 15:00:00'&lt;br /&gt;
group by&lt;br /&gt;
	a.dateacct&lt;br /&gt;
union all&lt;br /&gt;
select &lt;br /&gt;
	cast('Cost of Sales: I&amp;amp;E: *** Total ***' as varchar(80)) as description, sum(a.amount)&lt;br /&gt;
from &lt;br /&gt;
	zz_scratch_factacct a&lt;br /&gt;
where &lt;br /&gt;
	a.AD_CLIENT_ID= 1000000 and&lt;br /&gt;
	a.dateacct &amp;gt;='2015-05-01 00:00:00' and &lt;br /&gt;
	a.dateacct &amp;lt;= '2015-05-31 00:00:00' and&lt;br /&gt;
	a.name = 'Cost of Sales' ---and&lt;br /&gt;
	--a.created &amp;gt;= '2015-06-08 15:00:00'&lt;br /&gt;
order by&lt;br /&gt;
	description&lt;br /&gt;
;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Detail ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select&lt;br /&gt;
	a.created, a.dateacct, a.product_value, a.description, a.amount,&lt;br /&gt;
	a.ad_table_id, a.record_id&lt;br /&gt;
	--a.dateacct, a.amount&lt;br /&gt;
	--a.*&lt;br /&gt;
from &lt;br /&gt;
	zz_scratch_factacct a&lt;br /&gt;
where &lt;br /&gt;
	a.AD_CLIENT_ID= 1000000 and&lt;br /&gt;
	a.dateacct &amp;gt;='2015-05-01 00:00:00' and &lt;br /&gt;
	a.dateacct &amp;lt;= '2015-05-31 00:00:00' and&lt;br /&gt;
	a.name = 'Cost of Sales' and&lt;br /&gt;
	a.created &amp;gt;= '2015-06-08 15:00:00'&lt;br /&gt;
order by&lt;br /&gt;
	a.dateacct, a.amount&lt;br /&gt;
;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Credits =&lt;br /&gt;
&lt;br /&gt;
Initial contribution by: nTier Software Services http://www.ntier.co.za&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_Bank_Statement&amp;diff=19175</id>
		<title>Code Scratchpad: Queries: Bank Statement</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_Bank_Statement&amp;diff=19175"/>
		<updated>2021-07-28T05:55:36Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: Bank Statement to Queries: Bank Statement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Queries: Bank Statement]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_Bank_Statement&amp;diff=19174</id>
		<title>Queries: Bank Statement</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_Bank_Statement&amp;diff=19174"/>
		<updated>2021-07-28T05:55:36Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: Bank Statement to Queries: Bank Statement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_bankstatement_id,name from c_bankstatement where ad_client_id = 1000009 order by name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Rough working queries to reinstate voided bank statement =&lt;br /&gt;
&lt;br /&gt;
* Possibly could be converted into a plugin&lt;br /&gt;
* Refer to MBankStatement.voidIt&lt;br /&gt;
* It should also be possible to simply delete the bank statement and reinsert the copy before void was done instead of using the staging table, but I didn't try it.&lt;br /&gt;
* Take a backup before running any queries&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select docstatus, beginningbalance, statementdifference, endingbalance, * from c_bankstatement where C_BankStatement_ID=1000555;&lt;br /&gt;
&lt;br /&gt;
-- Backup&lt;br /&gt;
select * into bk_20170408_bankstatement from c_bankstatement where c_bankstatement_id = 1000555;&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20170408_bankstatement;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20170408_bankstatementline from c_bankstatementline where c_bankstatement_id = 1000555;&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20170408_bankstatementline;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20170408_payment from c_payment;&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20170408_payment;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20170408_c_bankaccount from c_bankaccount where c_bankaccount_id  =&lt;br /&gt;
(select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000555);&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20170408_c_bankaccount;&lt;br /&gt;
&lt;br /&gt;
-- Staging tables (must contain the original data before void was done)&lt;br /&gt;
select * into zz_stage_bankstatement from c_bankstatement where c_bankstatement_id = 1000555;&lt;br /&gt;
-- delete from zz_stage_bankstatement;&lt;br /&gt;
select * into zz_stage_bankstatementline from c_bankstatementline where c_bankstatement_id = 1000555;&lt;br /&gt;
-- delete from zz_stage_bankstatementline;&lt;br /&gt;
&lt;br /&gt;
select count(*) from zz_stage_bankstatement;&lt;br /&gt;
select count(*) from zz_stage_bankstatementline;&lt;br /&gt;
select count(*) from c_bankstatement where c_bankstatement_id = 1000555;&lt;br /&gt;
select count(*) from c_bankstatementline where c_bankstatement_id = 1000555;&lt;br /&gt;
select count(*) from c_bankstatementline where c_bankstatement_id = 1000555 and c_payment_id is not null; --0; 90 on restore&lt;br /&gt;
&lt;br /&gt;
select count(*) from c_payment where isreconciled = 'Y' and c_payment_id in (select c_payment_id from c_bankstatementline where c_bankstatement_id = 1000555); -- 90&lt;br /&gt;
&lt;br /&gt;
update c_bankstatement&lt;br /&gt;
	set&lt;br /&gt;
		docstatus = b.docstatus ,&lt;br /&gt;
		docaction = b.docaction ,&lt;br /&gt;
		processed = b.processed ,&lt;br /&gt;
		description = b.description ,&lt;br /&gt;
		statementdifference = b.statementdifference&lt;br /&gt;
from&lt;br /&gt;
	zz_stage_bankstatement b &lt;br /&gt;
where &lt;br /&gt;
	c_bankstatement.c_bankstatement_id = 1000555 and &lt;br /&gt;
	c_bankstatement.c_bankstatement_id = b.c_bankstatement_id ;&lt;br /&gt;
&lt;br /&gt;
update c_bankstatementline&lt;br /&gt;
	set&lt;br /&gt;
		description = b.description ,&lt;br /&gt;
		stmtamt = b.stmtamt ,&lt;br /&gt;
		trxamt = b.trxamt ,&lt;br /&gt;
		chargeamt = b.chargeamt ,&lt;br /&gt;
		interestamt = b.interestamt,&lt;br /&gt;
		c_payment_id = b.c_payment_id&lt;br /&gt;
from&lt;br /&gt;
	zz_stage_bankstatementline b &lt;br /&gt;
where &lt;br /&gt;
	c_bankstatementline.c_bankstatement_id = 1000555 and&lt;br /&gt;
	c_bankstatementline.c_bankstatementline_id = b.c_bankstatementline_id ;&lt;br /&gt;
&lt;br /&gt;
-- ba.setCurrentBalance(ba.getCurrentBalance().subtract(getStatementDifference()));&lt;br /&gt;
&lt;br /&gt;
select currentbalance from c_bankaccount where c_bankaccount_id = ( &lt;br /&gt;
	select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000555 &lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
-- See MBankStatement.voidIt: &lt;br /&gt;
--  ba.setCurrentBalance(ba.getCurrentBalance().subtract(getStatementDifference()));&lt;br /&gt;
update c_bankaccount&lt;br /&gt;
set currentBalance = currentBalance + &lt;br /&gt;
(select statementdifference from c_bankstatement where c_bankstatement_id = 1000555)&lt;br /&gt;
where c_bankaccount_id = ( &lt;br /&gt;
	select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000555 &lt;br /&gt;
	)&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
select currentbalance from c_bankaccount where c_bankaccount_id = ( &lt;br /&gt;
	select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000555 &lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
update c_payment set&lt;br /&gt;
isreconciled = 'Y' &lt;br /&gt;
where c_payment_id in (select c_payment_id from c_bankstatementline where c_bankstatement_id = 1000555);&lt;br /&gt;
&lt;br /&gt;
-- Expect 90&lt;br /&gt;
select count(*) from c_payment where isreconciled = 'Y' and c_payment_id in (select c_payment_id from c_bankstatementline where c_bankstatement_id = 1000555);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_Attachment&amp;diff=19173</id>
		<title>Code Scratchpad: Queries: Attachment</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_Attachment&amp;diff=19173"/>
		<updated>2021-07-28T05:55:03Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: Attachment to Queries: Attachment&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Queries: Attachment]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_Attachment&amp;diff=19172</id>
		<title>Queries: Attachment</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_Attachment&amp;diff=19172"/>
		<updated>2021-07-28T05:55:03Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: Attachment to Queries: Attachment&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
[[NF1.0_Storage_Providers]] store attachment file to folder and store paths into xml push to BINARYDATA of table AD_Attachment.&lt;br /&gt;
below query run on oracle, parse data of BINARYDATA to row. so you can get list of paths of attachments&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT  attachInfo.filePath, attachInfo.fileName&lt;br /&gt;
FROM AD_Attachment x, &lt;br /&gt;
  XMLTABLE('attachments/entry' &lt;br /&gt;
      PASSING &lt;br /&gt;
          CASE WHEN BINARYDATA IS NULL THEN &lt;br /&gt;
              XMLTYPE.createXML('&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&amp;lt;attachments&amp;gt;&amp;lt;/attachments&amp;gt;') &lt;br /&gt;
            ELSE &lt;br /&gt;
              XMLTYPE.createXML(BINARYDATA , 871, null) &lt;br /&gt;
          END &lt;br /&gt;
      COLUMNS filePath varchar2(4000) PATH '@file',&lt;br /&gt;
              fileName varchar2(4000) PATH '@name') attachInfo&lt;br /&gt;
WHERE title = 'xml'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_AD&amp;diff=19171</id>
		<title>Code Scratchpad: Queries: AD</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Queries:_AD&amp;diff=19171"/>
		<updated>2021-07-28T05:54:34Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: AD to Queries: AD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Queries: AD]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=19170</id>
		<title>Queries: AD</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=19170"/>
		<updated>2021-07-28T05:54:34Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Queries: AD to Queries: AD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select ad_client_id,value,name from ad_client order by ad_client_id;&lt;br /&gt;
&lt;br /&gt;
select ad_client_id from ad_client where name like 'A%'; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Windows =&lt;br /&gt;
== Windows referencing a specific process ==&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select name from ad_window where ad_window_id in (&lt;br /&gt;
select ad_window_id from ad_tab where ad_process_id in (&lt;br /&gt;
select ad_process_id from ad_process where value = 'processname')&lt;br /&gt;
);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Window ==&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select * from ad_window a&lt;br /&gt;
where a.ad_window_id=id&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tab ==&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select * from ad_tab a&lt;br /&gt;
where a.ad_window_id=id&lt;br /&gt;
&lt;br /&gt;
select distinct a.whereclause from ad_tab a &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select b.name as WindowName from ad_tab a&lt;br /&gt;
join ad_window b on a.ad_window_id = b.ad_window_id&lt;br /&gt;
where &lt;br /&gt;
	a.ad_table_id = &lt;br /&gt;
	(select ad_table_id from ad_table where name='tablename');&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Field information =&lt;br /&gt;
&lt;br /&gt;
== Field ==&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select a.* from ad_field a&lt;br /&gt;
join ad_tab b on a.ad_tab_id=b.ad_tab_id&lt;br /&gt;
where b.ad_window_id=id&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Combining Window, tab, field ==&lt;br /&gt;
	&lt;br /&gt;
=== As a view ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;drop view if exists zz_fieldinfo_v;&lt;br /&gt;
&lt;br /&gt;
create view zz_fieldinfo_v as&lt;br /&gt;
select &lt;br /&gt;
	tabtable.tablename as table_name, &lt;br /&gt;
	tabtable.entitytype as table_entitytype,&lt;br /&gt;
  	fld.isdisplayed as field_isdisplayed,&lt;br /&gt;
  	fld.seqno as field_seqno,&lt;br /&gt;
  	fld.name as field_name, &lt;br /&gt;
	col.columnname as column_name,&lt;br /&gt;
  	fld.displaylogic as field_display_logic,&lt;br /&gt;
	fld.readonlylogic as field_readonly_logic,&lt;br /&gt;
	tab.name as tab_name,&lt;br /&gt;
	win.name as WindowName, &lt;br /&gt;
	win.ad_window_id,&lt;br /&gt;
	tab.ad_tab_id,&lt;br /&gt;
  	tab.isactive as tab_isactive,&lt;br /&gt;
  	fld.ad_field_uu,&lt;br /&gt;
	fld.ad_field_id,&lt;br /&gt;
	fld.iscentrallymaintained as field_centrallymaintained,&lt;br /&gt;
	fld.ismandatory as field_ismandatory,&lt;br /&gt;
	fld.mandatorylogic as field_mandatorylogic,&lt;br /&gt;
	col.ad_element_id,&lt;br /&gt;
	ele.name as element_name,&lt;br /&gt;
	ref.name as ref_name, refvalue.name as ref_value,&lt;br /&gt;
	refvalue.ad_reference_id,&lt;br /&gt;
	reftabletbl.tablename as ref_table,&lt;br /&gt;
	col.created as column_created, col.updated as column_updated,&lt;br /&gt;
	fld.created as field_created, fld.updated as field_updated,&lt;br /&gt;
	fld.ad_val_rule_id as field_val_rule_id&lt;br /&gt;
from &lt;br /&gt;
	ad_field fld&lt;br /&gt;
join ad_tab tab on fld.ad_tab_id = tab.ad_tab_id&lt;br /&gt;
join ad_table tabtable on tabtable.ad_table_id = tab.ad_table_id&lt;br /&gt;
join ad_window win on tab.ad_window_id = win.ad_window_id&lt;br /&gt;
join ad_column col on fld.ad_column_id = col.ad_column_id&lt;br /&gt;
join ad_element ele on ele.ad_element_id = col.ad_element_id&lt;br /&gt;
left join ad_reference ref on col.ad_reference_id = ref.ad_reference_id&lt;br /&gt;
left join ad_reference refvalue on col.ad_reference_value_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_ref_table reftable on reftable.ad_reference_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_table reftabletbl on reftabletbl.ad_table_id = reftable.ad_table_id&lt;br /&gt;
order by win.name, tab.seqno, field_seqno;&lt;br /&gt;
&lt;br /&gt;
select field_display_name, field_ismandatory, field_mandatorylogic from zz_fieldinfo_v where windowname like  'C%' and field_mandatorylogic is not null;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show fields by update date (useful to run after loading 2pack) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select column_updated, column_name, * from zz_fieldinfo_v order by column_updated desc;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Form =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select a.entitytype, a.name, a.classname from ad_form a where a.entitytype='U' order by classname;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table =&lt;br /&gt;
== Table ==&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select a.* from ad_table a&lt;br /&gt;
order by a.created desc;&lt;br /&gt;
&lt;br /&gt;
select a.* from ad_table a&lt;br /&gt;
where a.ad_table_id in (id, id)&lt;br /&gt;
&lt;br /&gt;
(select ad_table_id from ad_table where tablename='tablename')&lt;br /&gt;
&lt;br /&gt;
delete from ad_table where ad_table_id in (select ad_table_id from ad_table where tablename='tablename');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table Columns =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select a.name, a.columnname, a.created from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in ((select ad_table_id from ad_table where tablename='tablename'))&lt;br /&gt;
order by a.name;&lt;br /&gt;
--order by a.created desc;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Menu =&lt;br /&gt;
&lt;br /&gt;
== All the main (root) menu items in a tree ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;SELECT m.name, mm.* FROM AD_TreeNodeMM mm&lt;br /&gt;
left join ad_menu m on mm.node_id = m.ad_menu_id&lt;br /&gt;
WHERE mm.AD_Tree_ID=1000171 and mm.parent_id=0;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update entity type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update ad_column set entitytype='U' where ad_column_id=3510;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Callout =&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select a.ad_column_id,tbl.tablename, a.columnname,a.name, a.callout from ad_column a&lt;br /&gt;
join ad_table tbl on a.ad_table_id = tbl.ad_table_id&lt;br /&gt;
where a.callout is not null and a.callout like '%bPartner%'&lt;br /&gt;
--and tbl.tablename = 'C_BankStatementLine'&lt;br /&gt;
order by tbl.tablename, a.callout, a.name;&lt;br /&gt;
--order by a.updated desc;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update callout ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update ad_column set callout = 'org.compiere.model.CalloutInvoiceNew.bPartner' where ad_column_id = 3499;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select * from ad_ref_list where ad_reference_id in ( select ad_reference_id from ad_reference where name = 'Ref Name' );&lt;br /&gt;
-&lt;br /&gt;
Incomplete:&lt;br /&gt;
left join&lt;br /&gt;
	ad_reference ref on ref.name = 'ZZ_Status'&lt;br /&gt;
left join&lt;br /&gt;
	ad_ref_list reflist on reflist.ad_reference_id = ref.ad_reference_id and reflist.value = perm.zz_status&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For use in Jasper Report to lookup reference name ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;( SELECT rl.name FROM ad_ref_list rl WHERE ((rl.ad_reference_id = (select ad_reference_id from ad_reference where name = 'my ref name')::numeric) AND ((rl.value)::text = (v.ice_fuel_type)::text))) AS field_name&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Validation Rules ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select ad_val_rule_id, name, code from ad_val_rule where upper(code) like upper('%quota%');&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Elements =&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select b.* from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in (1000153, 1000152, 1000154, 1000156)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Report and process =&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select * from ad_process order by created desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select ad_process_id, value, name,description, classname, jasperreport from ad_process where upper(value) like upper('%') order by value;&lt;br /&gt;
&lt;br /&gt;
select * from ad_process_para where ad_process_para_id = 1000000;&lt;br /&gt;
&lt;br /&gt;
select columnname, name, defaultvalue from ad_process_para where ad_process_id = 1000000 order by seqno;&lt;br /&gt;
&lt;br /&gt;
update ad_process_para set defaultvalue='1' where ad_process_id = 1000000 and columnname = 'columname';	--Sequence&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Deletion =&lt;br /&gt;
== Delete all fields on window ==&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name like 'Name of window' &lt;br /&gt;
) );&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields on tab ==&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;1. &lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where name = 'tabname' and ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name = 'Name of window' &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE' ) &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_tab_uu in ( 'REPLACEWITHWINDOWUUHERE' ) );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all occurences of column from windows ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;delete from ad_field where ad_column_id in &lt;br /&gt;
( select ad_column_id from ad_column where upper(columnname) like upper('zz_nbsm_matchsetup_id') )&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete index definitions on table ==&lt;br /&gt;
&lt;br /&gt;
* NB: Indexes not dropped automatically&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;delete from ad_indexcolumn where AD_TableIndex_ID in (select ad_tableindex_id from ad_tableindex where ad_table_id = 318);&lt;br /&gt;
&lt;br /&gt;
delete from AD_TableIndex where ad_table_id = 318;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sequences =&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update ad_sequence a set CURRENTNEXTSYS =13000  where a.name = 'name';&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Doctype =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select c_doctype_id from c_doctype where name = 'DocumentName'&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== All pack-in attachments ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select * from ad_attachment where ad_table_id = 50008 and record_id in (&lt;br /&gt;
  select AD_Package_Imp_Proc_id from AD_Package_Imp_Proc where name like '%%' &lt;br /&gt;
  );&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Synchronize Translations =&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;update ad_process_trl a set name = b.name, description = b.name from ad_process b where a.ad_process_id = b.ad_process_id and b.name = 'Process Name';&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Various helpers (work in progress) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select ad_message_id, value, msgtext, msgtip from ad_message where upper(msgtext) like upper('%login%') order by msgtext;&lt;br /&gt;
&lt;br /&gt;
drop view if exists zz_trl_helper_field_v;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_trl_helper_field_v  as &lt;br /&gt;
select &lt;br /&gt;
	main.ad_field_id, &lt;br /&gt;
	trl.ad_language, trl.ad_field_trl_uu, &lt;br /&gt;
	main.ad_field_uu, main.name as field_name, main.description as main_description, &lt;br /&gt;
	trl.name as trl_name, trl.description as trl_description, &lt;br /&gt;
	win.name as window_name, &lt;br /&gt;
	col.columnname&lt;br /&gt;
from&lt;br /&gt;
ad_field main&lt;br /&gt;
join ad_field_trl trl on trl.ad_field_id = main.ad_field_id&lt;br /&gt;
join ad_column col on col.ad_column_id = main.ad_column_id&lt;br /&gt;
join ad_tab tab on tab.ad_tab_id = main.ad_tab_id&lt;br /&gt;
join ad_window win on win.ad_window_id = tab.ad_window_id;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select * from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = '';&lt;br /&gt;
&lt;br /&gt;
update ad_field_trl set name = 'name', description = 'name' where ad_field_trl_uu in (&lt;br /&gt;
	select ad_field_trl_uu from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = ''&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
select main.ad_process_id, trl.ad_language, trl.ad_process_para_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_process_para main&lt;br /&gt;
join ad_process_para_trl trl on trl.ad_process_para_id = main.ad_process_para_id&lt;br /&gt;
where &lt;br /&gt;
	ad_process_id in ( select ad_process_id from ad_process where name like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_column_id, trl.ad_language, trl.ad_column_trl_uu, main.columnname, main.name, main.description, trl.name from&lt;br /&gt;
ad_column main&lt;br /&gt;
join ad_column_trl trl on trl.ad_column_id = main.ad_column_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_column_id in ( select ad_column_id from ad_column where columnname like '' );&lt;br /&gt;
	&lt;br /&gt;
select main.ad_element_id, trl.ad_language, trl.ad_element_trl_uu, main.columnname, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_element main&lt;br /&gt;
join ad_element_trl trl on trl.ad_element_id = main.ad_element_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_element_id in ( select ad_element_id from ad_element where columnname like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_menu_id, main.ad_menu_uu, trl.ad_language, trl.ad_menu_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_menu main&lt;br /&gt;
join ad_menu_trl trl on trl.ad_menu_id = main.ad_menu_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_menu_id in ( select ad_menu_id from ad_menu where name like '' );&lt;br /&gt;
&lt;br /&gt;
-- For 2pack (sync UUID's)&lt;br /&gt;
update ad_menu_trl &lt;br /&gt;
set ad_menu_trl_uu = '521bf63c-c0ab-40ac-a188-fe7cfd0a9612'&lt;br /&gt;
from ad_menu b&lt;br /&gt;
where &lt;br /&gt;
ad_menu_trl.ad_menu_id = b.ad_menu_id&lt;br /&gt;
and b.ad_menu_uu = 'ccf0fc37-76cc-4a3c-8e1c-80d4c28e695a';&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack out =&lt;br /&gt;
&lt;br /&gt;
== Backup AD information before running 2pack ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select * into bk_rq16_process from ad_process;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_table from ad_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_column from ad_column;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_window from ad_window;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_tab from ad_tab;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_field from ad_field;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_reference from ad_reference;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_table from ad_ref_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_list from ad_ref_list;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields + tabs on windows (for Pack In) ==&lt;br /&gt;
&lt;br /&gt;
* Helps to ensure is packed in correctly&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
) );&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* See also under the heading: 'Deletion'&lt;br /&gt;
&lt;br /&gt;
== Packout/Packin package details ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Imp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
-- For searching for tables linked to packouts&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Duplicate key error when importing AD_Message ==&lt;br /&gt;
&lt;br /&gt;
* unique constraint (...AD_MESSAGE_TRL_KEY) violated&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;delete from ad_message_trl&lt;br /&gt;
WHERE AD_Message_ID=&lt;br /&gt;
( SELECT ad_message_id FROM ad_message WHERE value='KEYOFMESSAGE' );&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pack in/out helpers ==&lt;br /&gt;
&lt;br /&gt;
=== Delete all fields on a window/tab ===&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE' ) &lt;br /&gt;
) );&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete all ad_userquery of window/tab process ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;delete from ad_userquery where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE') &lt;br /&gt;
));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete all ad_customization of window/tab ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE') &lt;br /&gt;
));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete all attachments of process ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;delete from ad_attachment where record_id in (&lt;br /&gt;
	select ad_process_id from ad_process where value like '%MYPROCESSKEY%' ) and &lt;br /&gt;
ad_table_id = (select ad_table_id from ad_table where tablename='AD_Process');&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Migration scripts =&lt;br /&gt;
&lt;br /&gt;
== Which migration scripts have been run ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;select releaseno,created,name,status,isapply,filename, script  from ad_migrationscript order by releaseno, name;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Session =&lt;br /&gt;
&lt;br /&gt;
== Sessions run during the actual year ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT&lt;br /&gt;
	c.name AS clientname,&lt;br /&gt;
	s.created,&lt;br /&gt;
	u.name AS username,&lt;br /&gt;
	s.remote_addr,&lt;br /&gt;
	s.processed,&lt;br /&gt;
	CASE&lt;br /&gt;
		WHEN s.processed = 'Y' THEN s.updated-s.created&lt;br /&gt;
		ELSE NULL&lt;br /&gt;
	END AS duration,&lt;br /&gt;
	r.name AS rolename&lt;br /&gt;
FROM ad_session s&lt;br /&gt;
     JOIN ad_client c ON (s.ad_client_id = c.ad_client_id)&lt;br /&gt;
     JOIN ad_user u ON (u.ad_user_id = s.createdby)&lt;br /&gt;
     JOIN ad_role r ON (r.ad_role_id = s.ad_role_id)&lt;br /&gt;
WHERE 	s.created&amp;gt;date_trunc('year', now())&lt;br /&gt;
ORDER BY s.ad_session_id DESC&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Mercurial&amp;diff=19159</id>
		<title>Code Scratchpad: Mercurial</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Mercurial&amp;diff=19159"/>
		<updated>2021-07-27T14:16:12Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Mercurial to Mercurial&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Mercurial]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Mercurial&amp;diff=19158</id>
		<title>Mercurial</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Mercurial&amp;diff=19158"/>
		<updated>2021-07-27T14:16:12Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Mercurial to Mercurial&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= .hgignore =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# Ignore all files under bin&lt;br /&gt;
bin&lt;br /&gt;
&lt;br /&gt;
# use glob syntax.&lt;br /&gt;
syntax: glob&lt;br /&gt;
&lt;br /&gt;
*.class&lt;br /&gt;
&lt;br /&gt;
# switch to regexp syntax.&lt;br /&gt;
syntax: regexp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Replace file in same location as original =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;hg cat -r 71 src/org/compiere/model/I_AD_Client.java -o %p&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Save to alternate location =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;hg cat -r 71 src/org/compiere/model/I_AD_Client.java -o /tmp/%s&lt;br /&gt;
hg cat -r tip src/org/compiere/ReportCustom/ZZ_Quotation.jrxml -o /tmp/%s&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Get files as at specific revision =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;mkdir /tmp/test; hg cat -r 10469 org.adempiere.server-feature/buckminster_linux_gtk_x86_64.properties org.adempiere.server-feature/server.product.eventtest.launch -o /tmp/test/%s&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Purge (remove untracked files) =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;﻿Is there a way to delete all untracked files in a mercurial working area?  Yes, with the purge extension.&lt;br /&gt;
&lt;br /&gt;
Installing Purge&lt;br /&gt;
&lt;br /&gt;
This extension is shipped by default with mercurial but turned off.   To enable it, modify your config file (.hgrc on Unix, Mercurial.ini on  Windows) to add&lt;br /&gt;
[extensions] &lt;br /&gt;
purge = This activates the plugin.  You can now use&lt;br /&gt;
$ hg purge to delete all untracked files.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Patches =&lt;br /&gt;
&lt;br /&gt;
Mercurial can generate patch files in the unified diff format with the hg diff command.&lt;br /&gt;
&lt;br /&gt;
= Follow renames =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;hg log -f .classpath&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Use extdiff to diff 2 revisions =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;hg extdiff -r tip -r 1000 src/org/compiere/model/MShippingInstr.java&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Enable extdiff extension and set Meld as the default diff tool=&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;.hgrc:&lt;br /&gt;
&lt;br /&gt;
[extensions]&lt;br /&gt;
hgext.extdiff =&lt;br /&gt;
&lt;br /&gt;
[extdiff]&lt;br /&gt;
cmd.extdiff = meld&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Resolving Conflicts =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;hg resolve -m file.txt&lt;br /&gt;
&lt;br /&gt;
hg resolve -t {editor} file&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Default paths =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Edit hgrc file (under .hgrc):&lt;br /&gt;
&lt;br /&gt;
[paths]&lt;br /&gt;
default=ssh://user@server://path/to&lt;br /&gt;
&lt;br /&gt;
[paths]&lt;br /&gt;
default-push = ssh://hg@example.com/path&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Basics =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;hg add / hg addremove (add specific, or add/remove all)&lt;br /&gt;
&lt;br /&gt;
hg init&lt;br /&gt;
&lt;br /&gt;
hg log (-v &amp;amp; --debug) -r : specific revision&lt;br /&gt;
&lt;br /&gt;
hg clone&lt;br /&gt;
&lt;br /&gt;
hg commit -m &amp;quot;A small change - for testing the tagging system&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hg push&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Branches ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Create new branch:&lt;br /&gt;
&lt;br /&gt;
hg branch development&lt;br /&gt;
&lt;br /&gt;
.. commit files ..&lt;br /&gt;
&lt;br /&gt;
hg commit&lt;br /&gt;
&lt;br /&gt;
Switch between branches:&lt;br /&gt;
&lt;br /&gt;
hg update development&lt;br /&gt;
&lt;br /&gt;
hg update default&lt;br /&gt;
&lt;br /&gt;
Merging branches:&lt;br /&gt;
&lt;br /&gt;
hg update development&lt;br /&gt;
&lt;br /&gt;
hg merge default&lt;br /&gt;
&lt;br /&gt;
... merges default into development&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tagging ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;hg tags&lt;br /&gt;
&lt;br /&gt;
hg tag -m &amp;quot;Second tag&amp;quot; &amp;quot;V1.01&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Clone the specified tag (exact copy) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;hg clone -r &amp;quot;V1.00&amp;quot; TestProject TestProject1&lt;br /&gt;
&lt;br /&gt;
hg clone -r &amp;quot;V1.0.4a_20140217&amp;quot; ssh://user@server://path/to destination&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== To pull (don't forget to update!) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;hg pull&lt;br /&gt;
&lt;br /&gt;
hg update&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NB: Always use filesystem snapshots using tar (before doing any critical work) so that you can backout gracefully from bad pulls and bad commits.&lt;br /&gt;
&lt;br /&gt;
== Viewing revisions for a file ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;hg log src/org/compiere/model/MShippingInstr.java -v | more&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Clone using non-default port =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;hg clone ssh://user@server:22227//path/to&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Credits = &lt;br /&gt;
&lt;br /&gt;
Initial contribution by: nTier Software Services http://www.ntier.co.za ngordon7000&lt;br /&gt;
&lt;br /&gt;
Add your credit here.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Java:_ZK&amp;diff=19140</id>
		<title>Code Scratchpad: Java: ZK</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Java:_ZK&amp;diff=19140"/>
		<updated>2021-07-27T08:50:20Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Java: ZK to ZK: Tidy up main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[ZK]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=ZK&amp;diff=19139</id>
		<title>ZK</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=ZK&amp;diff=19139"/>
		<updated>2021-07-27T08:50:20Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Java: ZK to ZK: Tidy up main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Show window from process =&lt;br /&gt;
&lt;br /&gt;
== Method 1: Runnable ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Runnable runnable = new Runnable() {&lt;br /&gt;
			&lt;br /&gt;
			@Override&lt;br /&gt;
			public void run() {&lt;br /&gt;
				MPrintFormat pf = getPrintFormat();&lt;br /&gt;
				Window viewer = new SMJReportViewer(getAD_PInstance_ID(), get_TrxName(), PA_ReportLineSet_ID, p_C_Period_ID, pf.getAD_PrintFont_ID(), m_columns);&lt;br /&gt;
				viewer.setAttribute(Window.MODE_KEY, Window.MODE_EMBEDDED);&lt;br /&gt;
				viewer.setAttribute(Window.INSERT_POSITION_KEY, Window.INSERT_NEXT);&lt;br /&gt;
				AEnv.showWindow(viewer);&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
		AEnv.executeAsyncDesktopTask(runnable);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Method 2: Anonymous Runnable ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AEnv.executeAsyncDesktopTask(new Runnable() {&lt;br /&gt;
        	@Override&lt;br /&gt;
			public void run() {&lt;br /&gt;
        		 //Window viewer = new SfrReportViewer(ren,&amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                 ReportEngine re = createReportEngine(getProcessInfo(),Env.WINDOW_MAIN,pf);&lt;br /&gt;
                 if (p_Org_ID==0)&lt;br /&gt;
                	 p_Org_ID = Env.getAD_Org_ID(getCtx());&lt;br /&gt;
        		 Window viewer = (Window)new SfrReportViewer(getAD_PInstance_ID(), get_TrxName(), PA_ReportLineSet_ID, p_C_Period_ID, pf.getAD_PrintFont_ID(), m_columns,re,p_Org_ID);&lt;br /&gt;
        		 &lt;br /&gt;
        		 viewer.setAttribute(Window.MODE_KEY, Window.MODE_EMBEDDED);&lt;br /&gt;
        	     viewer.setAttribute(Window.INSERT_POSITION_KEY, Window.INSERT_NEXT);&lt;br /&gt;
        	     viewer.setAttribute(WindowContainer.DEFER_SET_SELECTED_TAB, Boolean.TRUE);&lt;br /&gt;
        	     SessionManager.getAppDesktop().showWindow(viewer);&lt;br /&gt;
        	}&lt;br /&gt;
        });&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Credit: Freddy Heredia&lt;br /&gt;
&lt;br /&gt;
= Credits = &lt;br /&gt;
&lt;br /&gt;
Initial contribution by: nTier Software Services http://www.ntier.co.za ngordon7000&lt;br /&gt;
&lt;br /&gt;
Add your credit here.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Java:_General&amp;diff=19138</id>
		<title>Java: General</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Java:_General&amp;diff=19138"/>
		<updated>2021-07-27T08:27:56Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Java: General to General Code: Tidy up main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[General Code]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=General_Code&amp;diff=19137</id>
		<title>General Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=General_Code&amp;diff=19137"/>
		<updated>2021-07-27T08:27:56Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Java: General to General Code: Tidy up main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
= Chat =&lt;br /&gt;
&lt;br /&gt;
Quickly add a chat to any PO (table) record.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;package za.co.ntier.common;&lt;br /&gt;
&lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
import java.util.logging.Level;&lt;br /&gt;
&lt;br /&gt;
import org.compiere.model.MChat;&lt;br /&gt;
import org.compiere.model.MChatEntry;&lt;br /&gt;
import org.compiere.model.PO;&lt;br /&gt;
import org.compiere.model.Query;&lt;br /&gt;
import org.compiere.util.CLogger;&lt;br /&gt;
import org.compiere.util.Env;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Description:	Chat support&lt;br /&gt;
 */&lt;br /&gt;
public class NTierChatUtils {&lt;br /&gt;
	&lt;br /&gt;
	/** Logger */&lt;br /&gt;
	private static CLogger log = CLogger.getCLogger(NTierChatUtils.class);&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 */&lt;br /&gt;
	public static MChat getChat(Properties ctx, String trxName, &lt;br /&gt;
			PO po) {&lt;br /&gt;
		final String whereClause = &amp;quot;AD_Client_ID=? and AD_Table_ID=? AND Record_ID=? &amp;quot;;&lt;br /&gt;
		MChat retValue = new Query(ctx, MChat.Table_Name, whereClause,&lt;br /&gt;
				trxName).setParameters(Env.getAD_Client_ID(ctx), po.get_Table_ID(), po.get_ID())&lt;br /&gt;
				.firstOnly();&lt;br /&gt;
		return retValue;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Add chat&lt;br /&gt;
	 */&lt;br /&gt;
	public static void addChat(Properties ctx, String trxName, &lt;br /&gt;
			PO po, String comments) {&lt;br /&gt;
		try {&lt;br /&gt;
			String descr = &amp;quot;&amp;quot;;&lt;br /&gt;
			descr = comments;&lt;br /&gt;
			descr = NTierStringUtils.left(descr, 255);&lt;br /&gt;
			MChat chat = getChat(ctx, trxName, po);&lt;br /&gt;
			if (chat == null) {&lt;br /&gt;
				chat = new MChat (ctx, po.get_Table_ID(), po.get_ID(), descr, trxName);&lt;br /&gt;
				chat.saveEx(trxName);&lt;br /&gt;
			}&lt;br /&gt;
			log.info(String.format(&amp;quot;Chat - %s - '%s'&amp;quot;, po.get_TableName(), descr));&lt;br /&gt;
			MChatEntry chatEntry = new MChatEntry(chat, descr);&lt;br /&gt;
			chatEntry.saveEx(trxName);&lt;br /&gt;
		} catch (Exception e) {&lt;br /&gt;
			log.log(Level.SEVERE, &amp;quot;^^^&amp;quot;, e);&lt;br /&gt;
			log.info(String.format(&amp;quot;^^^ Failed to save chat record&amp;quot;));&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Start a process (or report) =&lt;br /&gt;
&lt;br /&gt;
* See FinReportJasper in the base code, for an example of how this is done.&lt;br /&gt;
&lt;br /&gt;
= Database =&lt;br /&gt;
&lt;br /&gt;
== Call a database procedure ==&lt;br /&gt;
&lt;br /&gt;
* From FinReportJasper in the base&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;// CarlosRuiz - globalqss - allow procedure preprocess&lt;br /&gt;
	    if (proc.getProcedureName() != null &amp;amp;&amp;amp; proc.getProcedureName().length() &amp;gt; 0) {&lt;br /&gt;
			//  execute on this thread/connection&lt;br /&gt;
			String sql = &amp;quot;{call &amp;quot; + proc.getProcedureName() + &amp;quot;(?)}&amp;quot;;&lt;br /&gt;
			CallableStatement cstmt = null;&lt;br /&gt;
			try&lt;br /&gt;
			{&lt;br /&gt;
				cstmt = DB.prepareCall(sql);	//	ro??&lt;br /&gt;
				cstmt.setInt(1, getAD_PInstance_ID());&lt;br /&gt;
				cstmt.executeUpdate();&lt;br /&gt;
			}&lt;br /&gt;
			catch (Exception e)&lt;br /&gt;
			{&lt;br /&gt;
				log.log(Level.SEVERE, sql, e);&lt;br /&gt;
				poInfo.setSummary (Msg.getMsg(Env.getCtx(), &amp;quot;ProcessRunError&amp;quot;) + &amp;quot; &amp;quot; + e.getLocalizedMessage());&lt;br /&gt;
			}&lt;br /&gt;
			finally&lt;br /&gt;
			{&lt;br /&gt;
				DB.close(cstmt);&lt;br /&gt;
				cstmt = null;&lt;br /&gt;
			}&lt;br /&gt;
	    }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= nTierConfigurator =&lt;br /&gt;
&lt;br /&gt;
== Example use ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public static int getSequenceNumberNext(Properties ctx, String trxName) {&lt;br /&gt;
		MSysConfig config = NTierConfigurator.newOrGet(ctx, trxName, false, &lt;br /&gt;
				&amp;quot;NTIER_SEQUENCE_NEXT&amp;quot;, &amp;quot;5000&amp;quot;, &amp;quot;Next sequence number&amp;quot;);&lt;br /&gt;
		int r = config.get_ValueAsInt(&amp;quot;Value&amp;quot;);&lt;br /&gt;
		config.setValue( (new Integer(r+1)).toString() );&lt;br /&gt;
		config.saveEx();&lt;br /&gt;
		return r;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static boolean isRequireUniqueSequence(Properties ctx, String trxName) {&lt;br /&gt;
		return NTierConfigurator.newOrGetBoolean(ctx, trxName, false, &lt;br /&gt;
				&amp;quot;NTIER_REQUIRE_UNIQUE_SEQUENCE&amp;quot;, &amp;quot;Y&amp;quot;, &amp;quot;Require a unique sequence number?&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static String getDevelopmentMode(Properties ctx, String trxName) {&lt;br /&gt;
		return NTierConfigurator.newOrGetString(ctx, trxName, false, &lt;br /&gt;
				&amp;quot;NTIER_DEVELOPMENT_MODE&amp;quot;, &amp;quot;Test&amp;quot;, &amp;quot;Development mode - Test or Live&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static Timestamp getFirstDayDateOfCurrentFinancialYear(Properties ctx, String trxName) {&lt;br /&gt;
		MSysConfig config = NTierConfigurator.newOrGet(ctx, trxName, false, &lt;br /&gt;
				&amp;quot;NTIER_FIRST_DAY_CURRENT_YEAR&amp;quot;, &amp;quot;2014-03-01&amp;quot;, &amp;quot;First day of current financial year: for take-on&amp;quot;);&lt;br /&gt;
		String v = config.get_ValueAsString(&amp;quot;Value&amp;quot;);&lt;br /&gt;
		Timestamp r = NTierDateUtils.parse(v, &amp;quot;yyyy-MM-dd&amp;quot;) ;&lt;br /&gt;
		return r;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	public static boolean isHasAssetAdditions(Properties ctx, String trxName, int assetID, String docStatus) {&lt;br /&gt;
		int i = getAssetAdditions(ctx, trxName, assetID, docStatus).length;&lt;br /&gt;
		return i&amp;gt;0;&lt;br /&gt;
	} &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;/******************************************************************************                                                                                                                                                                                                &lt;br /&gt;
 * Copyright (C) 2015 nTier Software Services http://www.ntier.co.za          *                                                                                                                                                                                                &lt;br /&gt;
 * This program is free software; you can redistribute it and/or modify it    *                                                                                                                                                                                                &lt;br /&gt;
 * under the terms version 2 of the GNU General Public License as published   *                                                                                                                                                                                                &lt;br /&gt;
 * by the Free Software Foundation. This program is distributed in the hope   *                                                                                                                                                                                                &lt;br /&gt;
 * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *                                                                                                                                                                                                &lt;br /&gt;
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.           *                                                                                                                                                                                                &lt;br /&gt;
 * See the GNU General Public License for more details.                       *                                                                                                                                                                                                &lt;br /&gt;
 * You should have received a copy of the GNU General Public License along    *                                                                                                                                                                                                &lt;br /&gt;
 * with this program; if not, write to the Free Software Foundation, Inc.,    *                                                                                                                                                                                                &lt;br /&gt;
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.                     *                                                                                                                                                                                                &lt;br /&gt;
 *****************************************************************************/  &lt;br /&gt;
package za.co.ntier.common;&lt;br /&gt;
&lt;br /&gt;
import java.sql.PreparedStatement;&lt;br /&gt;
import java.sql.ResultSet;&lt;br /&gt;
import java.sql.SQLException;&lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
import java.util.logging.Level;&lt;br /&gt;
&lt;br /&gt;
import org.adempiere.exceptions.AdempiereException;&lt;br /&gt;
import org.compiere.model.MSysConfig;&lt;br /&gt;
import org.compiere.model.Query;&lt;br /&gt;
import org.compiere.util.CLogger;&lt;br /&gt;
import org.compiere.util.DB;&lt;br /&gt;
import org.compiere.util.Env;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * (c) 2015 nTier Software Services&lt;br /&gt;
 * @author Neil Gordon&lt;br /&gt;
 * Date: 24 Feb 2015&lt;br /&gt;
 * Description:	Manage configurator settings&lt;br /&gt;
 */&lt;br /&gt;
public class NTierConfigurator {&lt;br /&gt;
&lt;br /&gt;
	/** Logger */&lt;br /&gt;
	private static CLogger log = CLogger.getCLogger(NTierConfigurator.class);&lt;br /&gt;
	/**&lt;br /&gt;
	 * 	Get specified MSysConfig record&lt;br /&gt;
	 *	@param ctx context &lt;br /&gt;
	 *	@param ID&lt;br /&gt;
	 *	@return record&lt;br /&gt;
	 */&lt;br /&gt;
	public static MSysConfig getConfigurator(Properties ctx, String trxName, String name) {&lt;br /&gt;
		int AD_Client_ID = Env.getContextAsInt(ctx, &amp;quot;#AD_Client_ID&amp;quot;);&lt;br /&gt;
		MSysConfig po = new Query(ctx, MSysConfig.Table_Name, &amp;quot;ad_client_id=? and name=?&amp;quot;, trxName)&lt;br /&gt;
				.setParameters(AD_Client_ID, name).setOnlyActiveRecords(true).first();&lt;br /&gt;
		return po;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the configurator setting&lt;br /&gt;
	 */&lt;br /&gt;
	public static String getConfiguratorSettingValue(String name, String defaultValue) {&lt;br /&gt;
		String result = MSysConfig.getValue(name, defaultValue );&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the configurator setting - specified Client, or System Client. &lt;br /&gt;
	 * 	Note, Client will override setting in System if both exist.&lt;br /&gt;
	 */&lt;br /&gt;
	public static String getConfiguratorSettingValue(String name, String defaultValue, int AD_Client_ID) {&lt;br /&gt;
		String result = MSysConfig.getValue(name, defaultValue, AD_Client_ID );&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Does the specified setting exist?&lt;br /&gt;
	 */&lt;br /&gt;
	public static boolean isSettingExists(Properties ctx, String trxName, String name)  {&lt;br /&gt;
		return isSettingExists(ctx, trxName, name, 0, 0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Does the specified setting exist?&lt;br /&gt;
	 */&lt;br /&gt;
	public static boolean isSettingExists(Properties ctx, String trxName, String name, int AD_Client_ID, int AD_Org_ID)&lt;br /&gt;
	{&lt;br /&gt;
		//&lt;br /&gt;
		String sql = &amp;quot;SELECT Value FROM AD_SysConfig&amp;quot;&lt;br /&gt;
						+ &amp;quot; WHERE Name=? AND AD_Client_ID IN (0, ?) AND AD_Org_ID IN (0, ?) &amp;quot; //AND IsActive='Y'&lt;br /&gt;
						+ &amp;quot; ORDER BY AD_Client_ID DESC, AD_Org_ID DESC&amp;quot;;&lt;br /&gt;
		PreparedStatement pstmt = null;&lt;br /&gt;
		ResultSet rs = null;&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			pstmt = DB.prepareStatement(sql, null);&lt;br /&gt;
			pstmt.setString(1, name);&lt;br /&gt;
			pstmt.setInt(2, AD_Client_ID);&lt;br /&gt;
			pstmt.setInt(3, AD_Org_ID);&lt;br /&gt;
			rs = pstmt.executeQuery();&lt;br /&gt;
			if (rs.next())&lt;br /&gt;
				return true;&lt;br /&gt;
		}&lt;br /&gt;
		catch (SQLException e)&lt;br /&gt;
		{&lt;br /&gt;
			log.log(Level.SEVERE, &amp;quot;isSettingExists&amp;quot;, e);&lt;br /&gt;
		}&lt;br /&gt;
		finally&lt;br /&gt;
		{&lt;br /&gt;
			DB.close(rs, pstmt);&lt;br /&gt;
			rs = null; pstmt = null;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Create the given configurator setting&lt;br /&gt;
	 */&lt;br /&gt;
	public static void createConfiguratorSetting(Properties ctx, String trxName, boolean isSystem, String name, String value, String description) {&lt;br /&gt;
		&lt;br /&gt;
		String confLevel;&lt;br /&gt;
		Properties ctx1;&lt;br /&gt;
		ctx1 = (Properties)ctx.clone();&lt;br /&gt;
		if ( isSystem ) {&lt;br /&gt;
			if (isSettingExists(ctx, trxName, name)) &lt;br /&gt;
				return;&lt;br /&gt;
			ctx1.setProperty(Env.AD_CLIENT_ID, &amp;quot;0&amp;quot;);&lt;br /&gt;
			confLevel = MSysConfig.CONFIGURATIONLEVEL_System;&lt;br /&gt;
		} else {&lt;br /&gt;
			if (isSettingExists(ctx, trxName, name, Env.getAD_Client_ID(ctx), 0)) &lt;br /&gt;
				return;&lt;br /&gt;
			confLevel = MSysConfig.CONFIGURATIONLEVEL_Client;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		ctx1.setProperty(Env.AD_ORG_ID, &amp;quot;0&amp;quot;);&lt;br /&gt;
		MSysConfig conf = new MSysConfig(ctx1, 0, null);&lt;br /&gt;
		conf.setConfigurationLevel(confLevel);&lt;br /&gt;
		conf.setName(name);&lt;br /&gt;
		conf.setDescription(description);&lt;br /&gt;
		conf.setValue(value);&lt;br /&gt;
		conf.saveEx();&lt;br /&gt;
		//CacheMgt.get().reset(MSysConfig.Table_Name);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static MSysConfig newOrGet(Properties ctx, String trxName, boolean isSystem, String name, String defaultValue, String description) {&lt;br /&gt;
		NTierUtils.resetCacheForTable( MSysConfig.Table_Name );&lt;br /&gt;
		MSysConfig config;&lt;br /&gt;
		Properties ctx1;&lt;br /&gt;
		createConfiguratorSetting(ctx, trxName, isSystem, name, defaultValue, description);&lt;br /&gt;
		ctx1 = (Properties)ctx.clone();&lt;br /&gt;
		if (isSystem) {&lt;br /&gt;
			ctx1.setProperty(Env.AD_CLIENT_ID, &amp;quot;0&amp;quot;);&lt;br /&gt;
		} else {&lt;br /&gt;
		}&lt;br /&gt;
		config = getConfigurator(ctx1, trxName, name);&lt;br /&gt;
		if ( config==null ) {&lt;br /&gt;
			throw new AdempiereException( String.format(&amp;quot;Returned configurator setting is null (should've been created) - '%s'&amp;quot;, name) );&lt;br /&gt;
		}&lt;br /&gt;
		return config;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static String newOrGetString(Properties ctx, String trxName, boolean isSystem, String name, String defaultValue, String description) {&lt;br /&gt;
		MSysConfig config;&lt;br /&gt;
		config = newOrGet(ctx, trxName, isSystem, name, defaultValue, description);&lt;br /&gt;
		String r = config.get_ValueAsString(&amp;quot;Value&amp;quot;);&lt;br /&gt;
		return r;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static boolean newOrGetBoolean(Properties ctx, String trxName, boolean isSystem, String name, String defaultValue, String description) {&lt;br /&gt;
		MSysConfig config;&lt;br /&gt;
		config = newOrGet(ctx, trxName, isSystem, name, defaultValue, description);&lt;br /&gt;
		boolean r = config.get_ValueAsBoolean(&amp;quot;Value&amp;quot;);&lt;br /&gt;
		return r;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static int newOrGetInt(Properties ctx, String trxName, boolean isSystem, String name, String defaultValue, String description) {&lt;br /&gt;
		MSysConfig config;&lt;br /&gt;
		config = newOrGet(ctx, trxName, isSystem, name, defaultValue, description);&lt;br /&gt;
		int r = config.get_ValueAsInt(&amp;quot;Value&amp;quot;);&lt;br /&gt;
		return r;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Credits = &lt;br /&gt;
&lt;br /&gt;
Initial contribution by: nTier Software Services http://www.ntier.co.za&lt;br /&gt;
&lt;br /&gt;
Add your credit here.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Java:_iDempiere_Documents&amp;diff=19136</id>
		<title>Code Scratchpad: Java: iDempiere Documents</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Java:_iDempiere_Documents&amp;diff=19136"/>
		<updated>2021-07-27T08:27:16Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Java: iDempiere Documents to IDempiere Documents: Tidy up main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[IDempiere Documents]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_Documents&amp;diff=19135</id>
		<title>IDempiere Documents</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_Documents&amp;diff=19135"/>
		<updated>2021-07-27T08:27:16Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Java: iDempiere Documents to IDempiere Documents: Tidy up main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
= SmartPOS: Various documents =&lt;br /&gt;
&lt;br /&gt;
== Documents supported ==&lt;br /&gt;
&lt;br /&gt;
Among others:&lt;br /&gt;
&lt;br /&gt;
* createSalesOrder&lt;br /&gt;
* createPurchaseOrder&lt;br /&gt;
* createOrderLine&lt;br /&gt;
* createMInOut&lt;br /&gt;
* createIOLine&lt;br /&gt;
* createInvoice&lt;br /&gt;
* createInvoiceLine&lt;br /&gt;
* createPayment&lt;br /&gt;
* createMovement&lt;br /&gt;
* createMovementLine&lt;br /&gt;
&lt;br /&gt;
== Link to source code ==&lt;br /&gt;
&lt;br /&gt;
* '''Source code:''' https://bitbucket.org/PedroRozo_SmartJSP/smartpos3-erp/src/6aa37da834fd9301db4e50ff2530be1087ff8b56/SmartPOSWeb/src/com/smj/util/Documents.java?at=default&lt;br /&gt;
* '''Plugin:''' http://wiki.idempiere.org/en/Plugin:_SmartPOS&lt;br /&gt;
* '''Credit:''' [[User:Smartjsp|User:Smartjsp]] ([[User talk:Smartjsp|talk]]) - [http://www.smartjsp.com SmartJSP]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* Recommended, that in the code given above, remove the exception handlers, and change .save to .saveEx&lt;br /&gt;
&lt;br /&gt;
= Create payment =&lt;br /&gt;
&lt;br /&gt;
Example of payment creation, with various features.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;private void createPayment() {&lt;br /&gt;
		&lt;br /&gt;
		m_payment = new MPayment(m_ctx, 0,  m_trxName);&lt;br /&gt;
		&lt;br /&gt;
		m_payment.setAD_Org_ID( m_AD_Org_ID );&lt;br /&gt;
		/****************************************************************************&lt;br /&gt;
		 * Set fields&lt;br /&gt;
		 ****************************************************************************/&lt;br /&gt;
		m_payment.setC_BPartner_ID( m_matchSetup.getC_BPartner_ID() );&lt;br /&gt;
		if ( ! m_payment.getC_BPartner().isActive() ) {&lt;br /&gt;
			throw new AdempiereException( String.format(&amp;quot;Business Partner is inactive&amp;quot; ) );&lt;br /&gt;
		}&lt;br /&gt;
		m_payment.setDateAcct					( m_dateAcct );&lt;br /&gt;
		m_payment.setDateTrx						( m_dateAcct );&lt;br /&gt;
		m_payment.setPayAmt						( m_stmtAmt.abs() );&lt;br /&gt;
		m_payment.setC_BankAccount_ID			( m_C_BankAccount_ID );&lt;br /&gt;
//			if ( ! m_po.getC_BankAccount().isActive() ) {&lt;br /&gt;
//				throw new AdempiereException( String.format(&amp;quot;Bank Account is inactive&amp;quot; ) );&lt;br /&gt;
//			}&lt;br /&gt;
		&lt;br /&gt;
//			m_po.setDocumentNo( thedocumentno );&lt;br /&gt;
		&lt;br /&gt;
		m_payment.setIsReceipt( m_isReceipt );&lt;br /&gt;
//		Still need to share NTierUtils on the Wiki&lt;br /&gt;
		m_payment.setC_Currency_ID( MClient.get(Env.getCtx()).getC_Currency_ID() );&lt;br /&gt;
//			&lt;br /&gt;
		m_payment.saveEx();&lt;br /&gt;
		&lt;br /&gt;
		// Chat - see http://wiki.idempiere.org/en/Code_Scratchpad:_Java:_General&lt;br /&gt;
		NTierChatUtils.addChat (m_payment.getCtx(), m_payment.get_TrxName(), &lt;br /&gt;
				m_payment, &lt;br /&gt;
				String.format(NBSM_Common.getChatPrefix() + &amp;quot;Payment created. &amp;quot;) + &lt;br /&gt;
				String.format(&amp;quot;Bank statement: '%s'/Line No: %s &amp;quot;, m_bankStatementName, m_bankStatementLineNo) +&lt;br /&gt;
				m_matchSetup.toString() );&lt;br /&gt;
		&lt;br /&gt;
		// Sanity check&lt;br /&gt;
		if ( m_payment.getAD_Org_ID() != m_AD_Org_ID ) {&lt;br /&gt;
			throw new AdempiereException( String.format(&lt;br /&gt;
					&amp;quot;The org has changed after saving the record. This is caused by the bank account &amp;quot; +&lt;br /&gt;
					&amp;quot; having a different org to the requested org. Please select a different bank account, &amp;quot; +&lt;br /&gt;
					&amp;quot; or correct the org on the selected bank account.&amp;quot;) );&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		info.setC_Payment_ID( m_payment.get_ID() );&lt;br /&gt;
		&lt;br /&gt;
		/****************************************************************************&lt;br /&gt;
		 * Complete Document&lt;br /&gt;
		 ****************************************************************************/&lt;br /&gt;
		String docAction = DocAction.ACTION_Complete;&lt;br /&gt;
		m_payment.setDocAction( docAction );&lt;br /&gt;
		m_payment.processIt( docAction );&lt;br /&gt;
		m_payment.saveEx();&lt;br /&gt;
		&lt;br /&gt;
		if ( ! docAction.equals( m_payment.getDocStatus() )) {&lt;br /&gt;
			String msg = String.format(&amp;quot;Error completing document: Invalid resulting status:- '%s' (expected '%s') Process Message:- '%s'&amp;quot;, &lt;br /&gt;
					m_payment.getDocStatus(), docAction, m_payment.getProcessMsg() );&lt;br /&gt;
			throw new AdempiereException( msg );&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
//				addInfo(&amp;quot;Payment has been created and successfully completed.&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		return;&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Credit: nTier Software Services http://www.ntier.co.za&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Java:_iDempiere_API&amp;diff=19134</id>
		<title>Code Scratchpad: Java: iDempiere API</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Java:_iDempiere_API&amp;diff=19134"/>
		<updated>2021-07-27T08:26:29Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Java: iDempiere API to IDempiere API: Tidy up main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[IDempiere API]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_API&amp;diff=19133</id>
		<title>IDempiere API</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_API&amp;diff=19133"/>
		<updated>2021-07-27T08:26:29Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Java: iDempiere API to IDempiere API: Tidy up main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Developer documentation]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
The purpose of this page is to share commonly used iDempiere API calls.&lt;br /&gt;
&lt;br /&gt;
Feel free to contribute here to improve the coverage of documentation.&lt;br /&gt;
&lt;br /&gt;
= Get the client ID =&lt;br /&gt;
&lt;br /&gt;
Env.getContextAsInt(ctx, &amp;quot;#AD_Client_ID&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
= Get the base currency = &lt;br /&gt;
&lt;br /&gt;
MClient.get(Env.getCtx()).getC_Currency_ID()&lt;br /&gt;
&lt;br /&gt;
= Get the process ID for process with key =&lt;br /&gt;
&lt;br /&gt;
int AD_Process_ID = MProcess.getProcess_ID(&amp;quot;KeyValueOfProcess&amp;quot;, null);&lt;br /&gt;
&lt;br /&gt;
= Start a report &amp;amp; process =&lt;br /&gt;
&lt;br /&gt;
ProcessUtil.startJavaProcess(ctx, poInfo, trx);&lt;br /&gt;
&lt;br /&gt;
* See FinReportJasper in the base code for example&lt;br /&gt;
&lt;br /&gt;
= Commit transaction =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Trx trx = Trx.get(get_TrxName(), false);&lt;br /&gt;
trx.commit(true);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Complete document =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;String docAction = DocAction.ACTION_Complete;&lt;br /&gt;
		posOrder.setDocAction( docAction );&lt;br /&gt;
		posOrder.processIt( docAction );&lt;br /&gt;
		posOrder.saveEx();&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NB: Check the document status after saving is equal to the expected status, otherwise an exception should be thrown.&lt;br /&gt;
&lt;br /&gt;
= Get the persistent object =&lt;br /&gt;
&lt;br /&gt;
== Standard ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MBPartner partner = new MBPartner(getCtx(), {0 for new record, or record id}, get_TrxName());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Model factory ==&lt;br /&gt;
&lt;br /&gt;
The following is work in progress&lt;br /&gt;
&lt;br /&gt;
* Using model factory, so that the correct model is returned, based on the available plugins.&lt;br /&gt;
** MTable.getPO (write a utility method to wrap)&lt;br /&gt;
** Use a Query (see the Query class)&lt;br /&gt;
** Write a utility method based on MTable.getPO, which doesn't require instantiating MTable&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public PO getPO (int Record_ID, String trxName)&lt;br /&gt;
	{&lt;br /&gt;
		String tableName = getTableName();&lt;br /&gt;
		if (Record_ID != 0 &amp;amp;&amp;amp; !isSingleKey())&lt;br /&gt;
		{&lt;br /&gt;
			log.log(Level.WARNING, &amp;quot;(id) - Multi-Key &amp;quot; + tableName);&lt;br /&gt;
			return null;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		PO po = null;&lt;br /&gt;
		List&amp;lt;IModelFactory&amp;gt; factoryList = Service.locator().list(IModelFactory.class).getServices();&lt;br /&gt;
		if (factoryList != null)&lt;br /&gt;
		{&lt;br /&gt;
			for(IModelFactory factory : factoryList)&lt;br /&gt;
			{&lt;br /&gt;
				po = factory.getPO(tableName, Record_ID, trxName);&lt;br /&gt;
				if (po != null)&lt;br /&gt;
				{&lt;br /&gt;
					if (po.get_ID() != Record_ID &amp;amp;&amp;amp; Record_ID &amp;gt; 0)&lt;br /&gt;
						po = null;&lt;br /&gt;
					else&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (po == null)&lt;br /&gt;
		{&lt;br /&gt;
			po = new GenericPO(tableName, getCtx(), Record_ID, trxName);&lt;br /&gt;
			if (po.get_ID() != Record_ID &amp;amp;&amp;amp; Record_ID &amp;gt; 0)&lt;br /&gt;
				po = null;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return po;&lt;br /&gt;
	}	//	getPO&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Reset the cache for a table =&lt;br /&gt;
&lt;br /&gt;
CacheMgt.get().reset(Table_Name);&lt;br /&gt;
&lt;br /&gt;
= Lock PO for update =&lt;br /&gt;
&lt;br /&gt;
see AdempiereDatabase.forUpdate:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public boolean forUpdate(PO po, int timeout);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== Attach one or more files to a record ==&lt;br /&gt;
&lt;br /&gt;
* Example copied from the PIPO code:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MAttachment attachment = new MAttachment (adPackageImp.getCtx(), X_AD_Package_Imp_Proc.Table_ID, adPackageImp.getAD_Package_Imp_Proc_ID(), null);&lt;br /&gt;
attachment.addEntry(packageFile);&lt;br /&gt;
attachment.saveEx(); &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System configurator =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MSysConfig.getBooleanValue(&amp;quot;CONFIG_NAME&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
String retValue = MSysConfig.getValue(&amp;quot;CONFIG_NAME&amp;quot;, &amp;quot;&amp;quot;);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating an order line =&lt;br /&gt;
&lt;br /&gt;
* Similiar logic applies to an invoice line.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MOrderLine line = new MOrderLine(order);&lt;br /&gt;
line.setC_BPartner_ID(C_BPartner_ID);&lt;br /&gt;
line.setM_Product_ID(M_Product_ID);&lt;br /&gt;
line.setQty(BigDecimal.ONE);&lt;br /&gt;
// Sets the price based on the price list&lt;br /&gt;
line.setPrice();&lt;br /&gt;
// Extends the qty&lt;br /&gt;
line.setLineNetAmt();&lt;br /&gt;
line.saveEx();&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methods for querying and updating data =&lt;br /&gt;
&lt;br /&gt;
== Query API ==&lt;br /&gt;
&lt;br /&gt;
* Example taken from ModelValidationEngine&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MTable table = MTable.get(Env.getCtx(), X_AD_ModelValidator.Table_ID);&lt;br /&gt;
Query query = table.createQuery(&amp;quot;IsActive='Y'&amp;quot;, null);&lt;br /&gt;
query.setOrderBy(&amp;quot;SeqNo&amp;quot;);&lt;br /&gt;
..&lt;br /&gt;
List&amp;lt;X_AD_ModelValidator&amp;gt; entityTypes = query.list();&lt;br /&gt;
..&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;List&amp;lt;MInfoWindow&amp;gt; list = new Query(Env.getCtx(),&lt;br /&gt;
MInfoWindow.Table_Name, &amp;quot;IsValid='Y' AND&lt;br /&gt;
IsShowInDashboard='Y'&amp;quot;, null)&lt;br /&gt;
        .setOnlyActiveRecords(true)&lt;br /&gt;
        .setOrderBy(MInfoWindow.COLUMNNAME_SeqNo)&lt;br /&gt;
        .list();&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepared Statement ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;final String sql = &amp;quot;SELECT * FROM C_BPartner_Location WHERE C_BPartner_ID=? AND IsActive='Y'&amp;quot;&lt;br /&gt;
				+ &amp;quot; ORDER BY C_BPartner_Location_ID&amp;quot;;&lt;br /&gt;
PreparedStatement pstmt = null;&lt;br /&gt;
ResultSet rs = null;&lt;br /&gt;
try&lt;br /&gt;
{&lt;br /&gt;
	pstmt = DB.prepareStatement(sql, get_TrxName());&lt;br /&gt;
	pstmt.setInt(1, getC_BPartner_ID());&lt;br /&gt;
	rs = pstmt.executeQuery();&lt;br /&gt;
	while (rs.next())&lt;br /&gt;
		list.add(new MBPartnerLocation (getCtx(), rs, get_TrxName()));&lt;br /&gt;
}&lt;br /&gt;
catch (Exception e)&lt;br /&gt;
{&lt;br /&gt;
	log.log(Level.SEVERE, sql, e);&lt;br /&gt;
}&lt;br /&gt;
finally&lt;br /&gt;
{&lt;br /&gt;
	DB.close(rs, pstmt);&lt;br /&gt;
	rs = null; pstmt = null;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Get all IDs ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;int[] m_ids = PO.getAllIDs(MAttachment.Table_Name, &amp;quot; AD_Client_ID= &amp;quot; + MClient.get(getCtx()).getAD_Client_ID() + &amp;quot; Order By AD_Client_ID &amp;quot;, null);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DB.getSQLValue ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;StringBuilder sql = new StringBuilder();&lt;br /&gt;
sql.append(&amp;quot;select count(*) from TableName where TableName_ID=&amp;quot;).append(TableName_ID));&lt;br /&gt;
&lt;br /&gt;
return DB.getSQLValueEx(trxName sql, params);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;DB.executeUpdateEx(sql.toString(), new Object[] { ... }, trxName);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Access control related =&lt;br /&gt;
&lt;br /&gt;
== Window access ==&lt;br /&gt;
&lt;br /&gt;
* Check whether currently logged in role has access to window&lt;br /&gt;
* @return null if no access, TRUE if r/w and FALSE if r/o&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;if (MRole.getDefault().getWindowAccess(m_AD_Window_ID) == null) { ... }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= UI related =&lt;br /&gt;
&lt;br /&gt;
== Busy Dialog ==&lt;br /&gt;
&lt;br /&gt;
 * BusyDialogTemplate: A busy dialog with an encapsulated Runnable&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Simple get message text ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Msg.getMsg(Env.getCtx(), &amp;quot;messagekey&amp;quot;)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Translation of column (element) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;String columnNameTrl = Msg.getElement(Env.getCtx(), columnName);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack Out =&lt;br /&gt;
&lt;br /&gt;
== Add support to export new or existing display type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;PoExporter.export&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= User preferences =&lt;br /&gt;
&lt;br /&gt;
* Untested, use at your own risk&lt;br /&gt;
* You can use the context for settings that don't need to be persisted.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;protected void savePreferences() {&lt;br /&gt;
		String note = txtNote.getText();&lt;br /&gt;
		UserPreference pref = SessionManager.getSessionApplication().getUserPreference();&lt;br /&gt;
		pref.setProperty(getPrefKeyForNote(), note);&lt;br /&gt;
		pref.savePreference();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	protected void loadPreferences() {&lt;br /&gt;
		UserPreference pref = SessionManager.getSessionApplication().getUserPreference();&lt;br /&gt;
		String note = pref.getProperty(getPrefKeyForNote());&lt;br /&gt;
		if (note==null) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		txtNote.setText(note);&lt;br /&gt;
	}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Context =&lt;br /&gt;
&lt;br /&gt;
== Adding a new context variable just after login ==&lt;br /&gt;
&lt;br /&gt;
* See: Login.loadPreferences&lt;br /&gt;
&lt;br /&gt;
= Logging =&lt;br /&gt;
&lt;br /&gt;
* For everything you need to know about logging in iDempiere, see the CLogMgt class&lt;br /&gt;
&lt;br /&gt;
= MD5, hashes, checksums, archives =&lt;br /&gt;
&lt;br /&gt;
== Compare MD5's and more ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;DigestOfFile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create zip archives ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Zipper&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Code paths =&lt;br /&gt;
&lt;br /&gt;
== User clicks on New record ==&lt;br /&gt;
&lt;br /&gt;
1) When user click on New Record button in any window, onNew() function in AbstractADWindowContent class is executed. Please check AbstractADWindowContent class for other functions (onSave,onProcess,onReport etc) as well.&lt;br /&gt;
&lt;br /&gt;
2) getCurrentNext() and setCurrentNext() in MSequence class. Thank you very much Anozi Mada&lt;br /&gt;
&lt;br /&gt;
Regards,&lt;br /&gt;
Shanil Fernando&lt;br /&gt;
&lt;br /&gt;
Reference: https://groups.google.com/forum/#!topic/idempiere/aSsv1MkciwM&lt;br /&gt;
&lt;br /&gt;
== Toolbar delete button == &lt;br /&gt;
&lt;br /&gt;
* Where do I find the code which handles deletion of a record from the toolbar?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onDeleteCallback&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toolbar refresh button ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onRefresh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toolbar export button ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onExport&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
* See: ExportAction&lt;br /&gt;
&lt;br /&gt;
== Toolbar import button ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onFileImport --&amp;gt; FileImportAction.fileImport --&amp;gt; importFile --&amp;gt; GridTabCSVImporter.fileImport&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Process Dialog ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog to start process or report ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ProcessDialog&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Process Info Dialog ===&lt;br /&gt;
&lt;br /&gt;
* The dialog shown after a user starts a process from a window&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ProcessInfoDialog&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Shown from:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.updateUI&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== User starts process by clicking on a button on a window ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.actionButton&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Clicking on a menu item ==&lt;br /&gt;
&lt;br /&gt;
Where do I find the code which responds to an item being clicked on the menu?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractDesktop.onMenuSelected&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Opening of a window ==&lt;br /&gt;
&lt;br /&gt;
* Where is the opening of a window handled?&lt;br /&gt;
** Same class for form, process, workflow, info&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;TabbedDesktop.openWindow&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Display and layout of fields ==&lt;br /&gt;
&lt;br /&gt;
* Where do I find the logic which handles the display and layout of fields in a standard iDempiere window?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ADTabpanel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where is formatting is applied to fields (example, required fields highlighted in red)?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;WEditor.applyLabelStyles&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where do I find the container for a field which is displayed in a window?&lt;br /&gt;
** Also handles setting the default value for a field&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;GridField&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where are callouts processed?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;GridTab.processCallout&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where is the field change event for when a value changes on a window? &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;GridTab.processFieldChange&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Printing ==&lt;br /&gt;
&lt;br /&gt;
* Handle printing for various documents&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ServerReportCtl&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Application startups ==&lt;br /&gt;
&lt;br /&gt;
=== Model Generator ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ModelGeneratorApplication -&amp;gt;  ModelClassGeneratorDialog -&amp;gt; ModelClassGenerator&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Java:_General&amp;diff=19132</id>
		<title>Code Scratchpad: Java: General</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Java:_General&amp;diff=19132"/>
		<updated>2021-07-27T08:24:44Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Java: General to Java: General: Tidy up main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Java: General]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=General_Code&amp;diff=19131</id>
		<title>General Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=General_Code&amp;diff=19131"/>
		<updated>2021-07-27T08:24:44Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Java: General to Java: General: Tidy up main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
= Chat =&lt;br /&gt;
&lt;br /&gt;
Quickly add a chat to any PO (table) record.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;package za.co.ntier.common;&lt;br /&gt;
&lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
import java.util.logging.Level;&lt;br /&gt;
&lt;br /&gt;
import org.compiere.model.MChat;&lt;br /&gt;
import org.compiere.model.MChatEntry;&lt;br /&gt;
import org.compiere.model.PO;&lt;br /&gt;
import org.compiere.model.Query;&lt;br /&gt;
import org.compiere.util.CLogger;&lt;br /&gt;
import org.compiere.util.Env;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Description:	Chat support&lt;br /&gt;
 */&lt;br /&gt;
public class NTierChatUtils {&lt;br /&gt;
	&lt;br /&gt;
	/** Logger */&lt;br /&gt;
	private static CLogger log = CLogger.getCLogger(NTierChatUtils.class);&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 */&lt;br /&gt;
	public static MChat getChat(Properties ctx, String trxName, &lt;br /&gt;
			PO po) {&lt;br /&gt;
		final String whereClause = &amp;quot;AD_Client_ID=? and AD_Table_ID=? AND Record_ID=? &amp;quot;;&lt;br /&gt;
		MChat retValue = new Query(ctx, MChat.Table_Name, whereClause,&lt;br /&gt;
				trxName).setParameters(Env.getAD_Client_ID(ctx), po.get_Table_ID(), po.get_ID())&lt;br /&gt;
				.firstOnly();&lt;br /&gt;
		return retValue;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Add chat&lt;br /&gt;
	 */&lt;br /&gt;
	public static void addChat(Properties ctx, String trxName, &lt;br /&gt;
			PO po, String comments) {&lt;br /&gt;
		try {&lt;br /&gt;
			String descr = &amp;quot;&amp;quot;;&lt;br /&gt;
			descr = comments;&lt;br /&gt;
			descr = NTierStringUtils.left(descr, 255);&lt;br /&gt;
			MChat chat = getChat(ctx, trxName, po);&lt;br /&gt;
			if (chat == null) {&lt;br /&gt;
				chat = new MChat (ctx, po.get_Table_ID(), po.get_ID(), descr, trxName);&lt;br /&gt;
				chat.saveEx(trxName);&lt;br /&gt;
			}&lt;br /&gt;
			log.info(String.format(&amp;quot;Chat - %s - '%s'&amp;quot;, po.get_TableName(), descr));&lt;br /&gt;
			MChatEntry chatEntry = new MChatEntry(chat, descr);&lt;br /&gt;
			chatEntry.saveEx(trxName);&lt;br /&gt;
		} catch (Exception e) {&lt;br /&gt;
			log.log(Level.SEVERE, &amp;quot;^^^&amp;quot;, e);&lt;br /&gt;
			log.info(String.format(&amp;quot;^^^ Failed to save chat record&amp;quot;));&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Start a process (or report) =&lt;br /&gt;
&lt;br /&gt;
* See FinReportJasper in the base code, for an example of how this is done.&lt;br /&gt;
&lt;br /&gt;
= Database =&lt;br /&gt;
&lt;br /&gt;
== Call a database procedure ==&lt;br /&gt;
&lt;br /&gt;
* From FinReportJasper in the base&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;// CarlosRuiz - globalqss - allow procedure preprocess&lt;br /&gt;
	    if (proc.getProcedureName() != null &amp;amp;&amp;amp; proc.getProcedureName().length() &amp;gt; 0) {&lt;br /&gt;
			//  execute on this thread/connection&lt;br /&gt;
			String sql = &amp;quot;{call &amp;quot; + proc.getProcedureName() + &amp;quot;(?)}&amp;quot;;&lt;br /&gt;
			CallableStatement cstmt = null;&lt;br /&gt;
			try&lt;br /&gt;
			{&lt;br /&gt;
				cstmt = DB.prepareCall(sql);	//	ro??&lt;br /&gt;
				cstmt.setInt(1, getAD_PInstance_ID());&lt;br /&gt;
				cstmt.executeUpdate();&lt;br /&gt;
			}&lt;br /&gt;
			catch (Exception e)&lt;br /&gt;
			{&lt;br /&gt;
				log.log(Level.SEVERE, sql, e);&lt;br /&gt;
				poInfo.setSummary (Msg.getMsg(Env.getCtx(), &amp;quot;ProcessRunError&amp;quot;) + &amp;quot; &amp;quot; + e.getLocalizedMessage());&lt;br /&gt;
			}&lt;br /&gt;
			finally&lt;br /&gt;
			{&lt;br /&gt;
				DB.close(cstmt);&lt;br /&gt;
				cstmt = null;&lt;br /&gt;
			}&lt;br /&gt;
	    }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= nTierConfigurator =&lt;br /&gt;
&lt;br /&gt;
== Example use ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public static int getSequenceNumberNext(Properties ctx, String trxName) {&lt;br /&gt;
		MSysConfig config = NTierConfigurator.newOrGet(ctx, trxName, false, &lt;br /&gt;
				&amp;quot;NTIER_SEQUENCE_NEXT&amp;quot;, &amp;quot;5000&amp;quot;, &amp;quot;Next sequence number&amp;quot;);&lt;br /&gt;
		int r = config.get_ValueAsInt(&amp;quot;Value&amp;quot;);&lt;br /&gt;
		config.setValue( (new Integer(r+1)).toString() );&lt;br /&gt;
		config.saveEx();&lt;br /&gt;
		return r;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static boolean isRequireUniqueSequence(Properties ctx, String trxName) {&lt;br /&gt;
		return NTierConfigurator.newOrGetBoolean(ctx, trxName, false, &lt;br /&gt;
				&amp;quot;NTIER_REQUIRE_UNIQUE_SEQUENCE&amp;quot;, &amp;quot;Y&amp;quot;, &amp;quot;Require a unique sequence number?&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static String getDevelopmentMode(Properties ctx, String trxName) {&lt;br /&gt;
		return NTierConfigurator.newOrGetString(ctx, trxName, false, &lt;br /&gt;
				&amp;quot;NTIER_DEVELOPMENT_MODE&amp;quot;, &amp;quot;Test&amp;quot;, &amp;quot;Development mode - Test or Live&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static Timestamp getFirstDayDateOfCurrentFinancialYear(Properties ctx, String trxName) {&lt;br /&gt;
		MSysConfig config = NTierConfigurator.newOrGet(ctx, trxName, false, &lt;br /&gt;
				&amp;quot;NTIER_FIRST_DAY_CURRENT_YEAR&amp;quot;, &amp;quot;2014-03-01&amp;quot;, &amp;quot;First day of current financial year: for take-on&amp;quot;);&lt;br /&gt;
		String v = config.get_ValueAsString(&amp;quot;Value&amp;quot;);&lt;br /&gt;
		Timestamp r = NTierDateUtils.parse(v, &amp;quot;yyyy-MM-dd&amp;quot;) ;&lt;br /&gt;
		return r;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	public static boolean isHasAssetAdditions(Properties ctx, String trxName, int assetID, String docStatus) {&lt;br /&gt;
		int i = getAssetAdditions(ctx, trxName, assetID, docStatus).length;&lt;br /&gt;
		return i&amp;gt;0;&lt;br /&gt;
	} &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;/******************************************************************************                                                                                                                                                                                                &lt;br /&gt;
 * Copyright (C) 2015 nTier Software Services http://www.ntier.co.za          *                                                                                                                                                                                                &lt;br /&gt;
 * This program is free software; you can redistribute it and/or modify it    *                                                                                                                                                                                                &lt;br /&gt;
 * under the terms version 2 of the GNU General Public License as published   *                                                                                                                                                                                                &lt;br /&gt;
 * by the Free Software Foundation. This program is distributed in the hope   *                                                                                                                                                                                                &lt;br /&gt;
 * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *                                                                                                                                                                                                &lt;br /&gt;
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.           *                                                                                                                                                                                                &lt;br /&gt;
 * See the GNU General Public License for more details.                       *                                                                                                                                                                                                &lt;br /&gt;
 * You should have received a copy of the GNU General Public License along    *                                                                                                                                                                                                &lt;br /&gt;
 * with this program; if not, write to the Free Software Foundation, Inc.,    *                                                                                                                                                                                                &lt;br /&gt;
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.                     *                                                                                                                                                                                                &lt;br /&gt;
 *****************************************************************************/  &lt;br /&gt;
package za.co.ntier.common;&lt;br /&gt;
&lt;br /&gt;
import java.sql.PreparedStatement;&lt;br /&gt;
import java.sql.ResultSet;&lt;br /&gt;
import java.sql.SQLException;&lt;br /&gt;
import java.util.Properties;&lt;br /&gt;
import java.util.logging.Level;&lt;br /&gt;
&lt;br /&gt;
import org.adempiere.exceptions.AdempiereException;&lt;br /&gt;
import org.compiere.model.MSysConfig;&lt;br /&gt;
import org.compiere.model.Query;&lt;br /&gt;
import org.compiere.util.CLogger;&lt;br /&gt;
import org.compiere.util.DB;&lt;br /&gt;
import org.compiere.util.Env;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * (c) 2015 nTier Software Services&lt;br /&gt;
 * @author Neil Gordon&lt;br /&gt;
 * Date: 24 Feb 2015&lt;br /&gt;
 * Description:	Manage configurator settings&lt;br /&gt;
 */&lt;br /&gt;
public class NTierConfigurator {&lt;br /&gt;
&lt;br /&gt;
	/** Logger */&lt;br /&gt;
	private static CLogger log = CLogger.getCLogger(NTierConfigurator.class);&lt;br /&gt;
	/**&lt;br /&gt;
	 * 	Get specified MSysConfig record&lt;br /&gt;
	 *	@param ctx context &lt;br /&gt;
	 *	@param ID&lt;br /&gt;
	 *	@return record&lt;br /&gt;
	 */&lt;br /&gt;
	public static MSysConfig getConfigurator(Properties ctx, String trxName, String name) {&lt;br /&gt;
		int AD_Client_ID = Env.getContextAsInt(ctx, &amp;quot;#AD_Client_ID&amp;quot;);&lt;br /&gt;
		MSysConfig po = new Query(ctx, MSysConfig.Table_Name, &amp;quot;ad_client_id=? and name=?&amp;quot;, trxName)&lt;br /&gt;
				.setParameters(AD_Client_ID, name).setOnlyActiveRecords(true).first();&lt;br /&gt;
		return po;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the configurator setting&lt;br /&gt;
	 */&lt;br /&gt;
	public static String getConfiguratorSettingValue(String name, String defaultValue) {&lt;br /&gt;
		String result = MSysConfig.getValue(name, defaultValue );&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the configurator setting - specified Client, or System Client. &lt;br /&gt;
	 * 	Note, Client will override setting in System if both exist.&lt;br /&gt;
	 */&lt;br /&gt;
	public static String getConfiguratorSettingValue(String name, String defaultValue, int AD_Client_ID) {&lt;br /&gt;
		String result = MSysConfig.getValue(name, defaultValue, AD_Client_ID );&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Does the specified setting exist?&lt;br /&gt;
	 */&lt;br /&gt;
	public static boolean isSettingExists(Properties ctx, String trxName, String name)  {&lt;br /&gt;
		return isSettingExists(ctx, trxName, name, 0, 0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Does the specified setting exist?&lt;br /&gt;
	 */&lt;br /&gt;
	public static boolean isSettingExists(Properties ctx, String trxName, String name, int AD_Client_ID, int AD_Org_ID)&lt;br /&gt;
	{&lt;br /&gt;
		//&lt;br /&gt;
		String sql = &amp;quot;SELECT Value FROM AD_SysConfig&amp;quot;&lt;br /&gt;
						+ &amp;quot; WHERE Name=? AND AD_Client_ID IN (0, ?) AND AD_Org_ID IN (0, ?) &amp;quot; //AND IsActive='Y'&lt;br /&gt;
						+ &amp;quot; ORDER BY AD_Client_ID DESC, AD_Org_ID DESC&amp;quot;;&lt;br /&gt;
		PreparedStatement pstmt = null;&lt;br /&gt;
		ResultSet rs = null;&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			pstmt = DB.prepareStatement(sql, null);&lt;br /&gt;
			pstmt.setString(1, name);&lt;br /&gt;
			pstmt.setInt(2, AD_Client_ID);&lt;br /&gt;
			pstmt.setInt(3, AD_Org_ID);&lt;br /&gt;
			rs = pstmt.executeQuery();&lt;br /&gt;
			if (rs.next())&lt;br /&gt;
				return true;&lt;br /&gt;
		}&lt;br /&gt;
		catch (SQLException e)&lt;br /&gt;
		{&lt;br /&gt;
			log.log(Level.SEVERE, &amp;quot;isSettingExists&amp;quot;, e);&lt;br /&gt;
		}&lt;br /&gt;
		finally&lt;br /&gt;
		{&lt;br /&gt;
			DB.close(rs, pstmt);&lt;br /&gt;
			rs = null; pstmt = null;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Create the given configurator setting&lt;br /&gt;
	 */&lt;br /&gt;
	public static void createConfiguratorSetting(Properties ctx, String trxName, boolean isSystem, String name, String value, String description) {&lt;br /&gt;
		&lt;br /&gt;
		String confLevel;&lt;br /&gt;
		Properties ctx1;&lt;br /&gt;
		ctx1 = (Properties)ctx.clone();&lt;br /&gt;
		if ( isSystem ) {&lt;br /&gt;
			if (isSettingExists(ctx, trxName, name)) &lt;br /&gt;
				return;&lt;br /&gt;
			ctx1.setProperty(Env.AD_CLIENT_ID, &amp;quot;0&amp;quot;);&lt;br /&gt;
			confLevel = MSysConfig.CONFIGURATIONLEVEL_System;&lt;br /&gt;
		} else {&lt;br /&gt;
			if (isSettingExists(ctx, trxName, name, Env.getAD_Client_ID(ctx), 0)) &lt;br /&gt;
				return;&lt;br /&gt;
			confLevel = MSysConfig.CONFIGURATIONLEVEL_Client;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		ctx1.setProperty(Env.AD_ORG_ID, &amp;quot;0&amp;quot;);&lt;br /&gt;
		MSysConfig conf = new MSysConfig(ctx1, 0, null);&lt;br /&gt;
		conf.setConfigurationLevel(confLevel);&lt;br /&gt;
		conf.setName(name);&lt;br /&gt;
		conf.setDescription(description);&lt;br /&gt;
		conf.setValue(value);&lt;br /&gt;
		conf.saveEx();&lt;br /&gt;
		//CacheMgt.get().reset(MSysConfig.Table_Name);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static MSysConfig newOrGet(Properties ctx, String trxName, boolean isSystem, String name, String defaultValue, String description) {&lt;br /&gt;
		NTierUtils.resetCacheForTable( MSysConfig.Table_Name );&lt;br /&gt;
		MSysConfig config;&lt;br /&gt;
		Properties ctx1;&lt;br /&gt;
		createConfiguratorSetting(ctx, trxName, isSystem, name, defaultValue, description);&lt;br /&gt;
		ctx1 = (Properties)ctx.clone();&lt;br /&gt;
		if (isSystem) {&lt;br /&gt;
			ctx1.setProperty(Env.AD_CLIENT_ID, &amp;quot;0&amp;quot;);&lt;br /&gt;
		} else {&lt;br /&gt;
		}&lt;br /&gt;
		config = getConfigurator(ctx1, trxName, name);&lt;br /&gt;
		if ( config==null ) {&lt;br /&gt;
			throw new AdempiereException( String.format(&amp;quot;Returned configurator setting is null (should've been created) - '%s'&amp;quot;, name) );&lt;br /&gt;
		}&lt;br /&gt;
		return config;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static String newOrGetString(Properties ctx, String trxName, boolean isSystem, String name, String defaultValue, String description) {&lt;br /&gt;
		MSysConfig config;&lt;br /&gt;
		config = newOrGet(ctx, trxName, isSystem, name, defaultValue, description);&lt;br /&gt;
		String r = config.get_ValueAsString(&amp;quot;Value&amp;quot;);&lt;br /&gt;
		return r;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static boolean newOrGetBoolean(Properties ctx, String trxName, boolean isSystem, String name, String defaultValue, String description) {&lt;br /&gt;
		MSysConfig config;&lt;br /&gt;
		config = newOrGet(ctx, trxName, isSystem, name, defaultValue, description);&lt;br /&gt;
		boolean r = config.get_ValueAsBoolean(&amp;quot;Value&amp;quot;);&lt;br /&gt;
		return r;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static int newOrGetInt(Properties ctx, String trxName, boolean isSystem, String name, String defaultValue, String description) {&lt;br /&gt;
		MSysConfig config;&lt;br /&gt;
		config = newOrGet(ctx, trxName, isSystem, name, defaultValue, description);&lt;br /&gt;
		int r = config.get_ValueAsInt(&amp;quot;Value&amp;quot;);&lt;br /&gt;
		return r;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Credits = &lt;br /&gt;
&lt;br /&gt;
Initial contribution by: nTier Software Services http://www.ntier.co.za&lt;br /&gt;
&lt;br /&gt;
Add your credit here.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Eclipse_Templates&amp;diff=19130</id>
		<title>Code Scratchpad: Eclipse Templates</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Code_Scratchpad:_Eclipse_Templates&amp;diff=19130"/>
		<updated>2021-07-27T08:23:43Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: Ngordon7000 moved page Code Scratchpad: Eclipse Templates to Eclipse Templates: Tidy up main page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Eclipse Templates]]&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Category:Code_Scratchpad&amp;diff=19128</id>
		<title>Category:Code Scratchpad</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Category:Code_Scratchpad&amp;diff=19128"/>
		<updated>2021-07-27T08:21:23Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer documentation]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
This is a scratchpad of code. It is a rough working area containing code.&lt;br /&gt;
&lt;br /&gt;
These samples may or may not be correct, as they are a work in progress. Please take care when running any update queries.&lt;br /&gt;
&lt;br /&gt;
If you have any additions or corrections, please edit the page in question.&lt;br /&gt;
&lt;br /&gt;
[[ja:カテゴリ:Code Scratchpad]]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.idempiere.org/ru/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Code_Scratchpad Link to Russian Scratchpad Ссылка на российском блокнота]&lt;br /&gt;
* [[:Category:Code snippets]]&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
Initial contribution by: nTier Software Services http://www.ntier.co.za&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_Invoices,_Orders_and_Quotes&amp;diff=11986</id>
		<title>Queries: Invoices, Orders and Quotes</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_Invoices,_Orders_and_Quotes&amp;diff=11986"/>
		<updated>2017-09-30T01:24:41Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: /* Invoice and tax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Orders =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from &lt;br /&gt;
	c_order a&lt;br /&gt;
join c_orderline b on a.c_order_id = b.c_order_id&lt;br /&gt;
where&lt;br /&gt;
	a.documentno='21686';&lt;br /&gt;
&lt;br /&gt;
select a.documentno, b.line, b.qtyentered, b.pricelimit, b.priceentered, b.pricelist, b.priceactual, &lt;br /&gt;
	b.discount, b.pricelist - b.priceactual as discountAmt, b.linenetamt from &lt;br /&gt;
	c_order a&lt;br /&gt;
join c_orderline b on a.c_order_id = b.c_order_id&lt;br /&gt;
where&lt;br /&gt;
	a.documentno='24307'&lt;br /&gt;
order by b.line;&lt;br /&gt;
&lt;br /&gt;
select a.c_order_id from c_order a where a.documentno='24307';&lt;br /&gt;
&lt;br /&gt;
select a.ad_client_id, dt.name, count(*)&lt;br /&gt;
from &lt;br /&gt;
	c_order a&lt;br /&gt;
join c_orderline b on a.c_order_id = b.c_order_id&lt;br /&gt;
join c_doctype dt on a.c_doctypetarget_id = dt.c_doctype_id&lt;br /&gt;
group by a.ad_client_id, dt.name&lt;br /&gt;
order by dt.name&lt;br /&gt;
;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== With more detail ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
  a.ad_client_id, client.name as client_name, org.value as org_value, org.name as org_name, usr.name as user_createdby,&lt;br /&gt;
  bp.value as bp_value, bp.name as bp_name, &lt;br /&gt;
  dt.name as doctype_name, a.documentno, a.dateordered, a.docstatus, a.totallines, a.grandtotal,&lt;br /&gt;
  b.line, b.m_product_id, prod.name as productName, b.qtyentered, b.pricelimit, b.priceentered, b.pricelist, b.priceactual, &lt;br /&gt;
	b.discount, b.pricelist - b.priceactual as discountAmt, b.linenetamt,&lt;br /&gt;
from &lt;br /&gt;
	c_order a&lt;br /&gt;
left join c_orderline b on a.c_order_id = b.c_order_id&lt;br /&gt;
left join ad_client client on client.ad_client_id = a.ad_client_id&lt;br /&gt;
left join ad_org org on org.ad_org_id = a.ad_org_id&lt;br /&gt;
left join c_doctype dt on a.c_doctype_id = dt.c_doctype_id&lt;br /&gt;
left join m_product prod on prod.m_product_id = b.m_product_id&lt;br /&gt;
left join c_bpartner bp on bp.c_bpartner_id = a.c_bpartner_id&lt;br /&gt;
left join ad_user usr on usr.ad_user_id = a.createdby&lt;br /&gt;
where&lt;br /&gt;
  a.ad_client_id &amp;gt; 111 and&lt;br /&gt;
  a.grandtotal = 0 and&lt;br /&gt;
  a.docstatus in  ('CO', 'VO') and&lt;br /&gt;
order by a.dateordered desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Invoice and tax =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
  b.c_invoice_id, b.c_invoiceline_id, a.documentno, a.totallines, a.grandtotal, a.istaxincluded, a.dateinvoiced, a.dateacct,&lt;br /&gt;
  a.docstatus, coalesce(a.c_doctype_id, a.c_doctypetarget_id) as c_doctype_id, &lt;br /&gt;
	b.qtyinvoiced,b.qtyentered, b.pricelist, b.priceactual, b.pricelimit, b.priceentered, b.linenetamt, b.linetotalamt, b.taxamt&lt;br /&gt;
from &lt;br /&gt;
  c_invoice a&lt;br /&gt;
join c_invoiceline b on a.c_invoice_id = b.c_invoice_id;&lt;br /&gt;
where&lt;br /&gt;
	a.documentno='INW82785';&lt;br /&gt;
&lt;br /&gt;
select&lt;br /&gt;
	* &lt;br /&gt;
from&lt;br /&gt;
	c_invoicetax tax&lt;br /&gt;
join c_invoice a on a.c_invoice_id = tax.c_invoice_id&lt;br /&gt;
where&lt;br /&gt;
	a.documentno='INW82785';&lt;br /&gt;
	&lt;br /&gt;
select * from &lt;br /&gt;
	c_invoice a&lt;br /&gt;
join c_invoiceline b on a.c_invoice_id = b.c_invoice_id&lt;br /&gt;
where&lt;br /&gt;
	a.documentno='21686';&lt;br /&gt;
	&lt;br /&gt;
select a.ad_client_id, client.name, a.c_bpartner_id, b.value, b.name, a.issotrx, max(a.dateinvoiced), min(a.dateinvoiced), count(*) from &lt;br /&gt;
	c_invoice a&lt;br /&gt;
join c_bpartner b on a.c_bpartner_id = b.c_bpartner_id&lt;br /&gt;
join ad_client client on a.ad_client_id = client.ad_client_id&lt;br /&gt;
group by&lt;br /&gt;
	a.ad_client_id, client.name, a.c_bpartner_id, b.value, b.name, a.issotrx&lt;br /&gt;
order by a.ad_client_id, a.issotrx, count(*) desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Set invoice as paid (system error) =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ispaid, * from c_invoice where c_invoice_id = 1047724;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20150630_c_invoice from c_invoice where c_invoice_id = 1047724;&lt;br /&gt;
&lt;br /&gt;
update c_invoice set ispaid = 'Y' where c_invoice_id = 1047724;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Payments =&lt;br /&gt;
&lt;br /&gt;
== Last payment related to an invoice ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;SELECT p.DateTrx,p.PayAmt,alp.Amount&lt;br /&gt;
FROM C_AllocationLine ali&lt;br /&gt;
INNER JOIN C_AllocationHdr ah ON (ah.C_AllocationHdr_ID = ali.C_AllocationHdr_ID AND ah.DocStatus IN ('CO', 'CL'))&lt;br /&gt;
INNER JOIN C_AllocationLine alp ON (alp.C_AllocationHdr_ID = ah.C_AllocationHdr_ID)&lt;br /&gt;
INNER JOIN C_Payment p ON (p.C_Payment_ID= alp.C_Payment_ID AND p.DocStatus IN ('CO', 'CL'))&lt;br /&gt;
WHERE ali.C_Invoice_ID = ?&lt;br /&gt;
ORDER BY p.DateTrx DESC&lt;br /&gt;
LIMIT 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Discussion [https://groups.google.com/forum/#!topic/idempiere/J17EgtVzVKk here]&lt;br /&gt;
&lt;br /&gt;
Credit:Anozi Mada&lt;br /&gt;
&lt;br /&gt;
== Link from POS Order to the invoice to the payment ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select&lt;br /&gt;
	posorder.documentno, pmt.documentno&lt;br /&gt;
from&lt;br /&gt;
	c_order posorder&lt;br /&gt;
join &lt;br /&gt;
	c_invoice inv on inv.c_order_id = posorder.c_order_id&lt;br /&gt;
join&lt;br /&gt;
	c_payment pmt on pmt.c_payment_id = inv.c_payment_id&lt;br /&gt;
where posorder.documentno = '80014';&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11734</id>
		<title>Queries: AD</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11734"/>
		<updated>2017-07-28T09:30:40Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_client_id,value,name from ad_client order by ad_client_id;&lt;br /&gt;
&lt;br /&gt;
select ad_client_id from ad_client where name like 'A%'; &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Windows =&lt;br /&gt;
== Windows referencing a specific process ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select name from ad_window where ad_window_id in (&lt;br /&gt;
select ad_window_id from ad_tab where ad_process_id in (&lt;br /&gt;
select ad_process_id from ad_process where value = 'processname')&lt;br /&gt;
);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_window a&lt;br /&gt;
where a.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tab ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_tab a&lt;br /&gt;
where a.ad_window_id=id&lt;br /&gt;
&lt;br /&gt;
select distinct a.whereclause from ad_tab a &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.name as WindowName from ad_tab a&lt;br /&gt;
join ad_window b on a.ad_window_id = b.ad_window_id&lt;br /&gt;
where &lt;br /&gt;
	a.ad_table_id = &lt;br /&gt;
	(select ad_table_id from ad_table where name='tablename');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Field information =&lt;br /&gt;
&lt;br /&gt;
== Field ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_field a&lt;br /&gt;
join ad_tab b on a.ad_tab_id=b.ad_tab_id&lt;br /&gt;
where b.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Combining Window, tab, field ==&lt;br /&gt;
	&lt;br /&gt;
=== As a view ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drop view if exists zz_fieldinfo_v;&lt;br /&gt;
&lt;br /&gt;
create view zz_fieldinfo_v as&lt;br /&gt;
select &lt;br /&gt;
	tabtable.tablename as table_name, &lt;br /&gt;
	tabtable.entitytype as table_entitytype,&lt;br /&gt;
  	fld.isdisplayed as field_isdisplayed,&lt;br /&gt;
  	fld.seqno as field_seqno,&lt;br /&gt;
  	fld.name as field_name, &lt;br /&gt;
	col.columnname as column_name,&lt;br /&gt;
  	fld.displaylogic as field_display_logic,&lt;br /&gt;
	fld.readonlylogic as field_readonly_logic,&lt;br /&gt;
	tab.name as tab_name,&lt;br /&gt;
	win.name as WindowName, &lt;br /&gt;
	win.ad_window_id,&lt;br /&gt;
	tab.ad_tab_id,&lt;br /&gt;
  	tab.isactive as tab_isactive,&lt;br /&gt;
  	fld.ad_field_uu,&lt;br /&gt;
	fld.ad_field_id,&lt;br /&gt;
	fld.iscentrallymaintained as field_centrallymaintained,&lt;br /&gt;
	fld.ismandatory as field_ismandatory,&lt;br /&gt;
	fld.mandatorylogic as field_mandatorylogic,&lt;br /&gt;
	col.ad_element_id,&lt;br /&gt;
	ele.name as element_name,&lt;br /&gt;
	ref.name as ref_name, refvalue.name as ref_value,&lt;br /&gt;
	refvalue.ad_reference_id,&lt;br /&gt;
	reftabletbl.tablename as ref_table,&lt;br /&gt;
	col.created as column_created, col.updated as column_updated,&lt;br /&gt;
	fld.created as field_created, fld.updated as field_updated,&lt;br /&gt;
	fld.ad_val_rule_id as field_val_rule_id&lt;br /&gt;
from &lt;br /&gt;
	ad_field fld&lt;br /&gt;
join ad_tab tab on fld.ad_tab_id = tab.ad_tab_id&lt;br /&gt;
join ad_table tabtable on tabtable.ad_table_id = tab.ad_table_id&lt;br /&gt;
join ad_window win on tab.ad_window_id = win.ad_window_id&lt;br /&gt;
join ad_column col on fld.ad_column_id = col.ad_column_id&lt;br /&gt;
join ad_element ele on ele.ad_element_id = col.ad_element_id&lt;br /&gt;
left join ad_reference ref on col.ad_reference_id = ref.ad_reference_id&lt;br /&gt;
left join ad_reference refvalue on col.ad_reference_value_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_ref_table reftable on reftable.ad_reference_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_table reftabletbl on reftabletbl.ad_table_id = reftable.ad_table_id&lt;br /&gt;
order by win.name, tab.seqno, field_seqno;&lt;br /&gt;
&lt;br /&gt;
select field_display_name, field_ismandatory, field_mandatorylogic from zz_fieldinfo_v where windowname like  'C%' and field_mandatorylogic is not null;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show fields by update date (useful to run after loading 2pack) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select column_updated, column_name, * from zz_fieldinfo_v order by column_updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Form =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.entitytype, a.name, a.classname from ad_form a where a.entitytype='U' order by classname;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table =&lt;br /&gt;
== Table ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_table a&lt;br /&gt;
order by a.created desc;&lt;br /&gt;
&lt;br /&gt;
select a.* from ad_table a&lt;br /&gt;
where a.ad_table_id in (id, id)&lt;br /&gt;
&lt;br /&gt;
(select ad_table_id from ad_table where tablename='tablename')&lt;br /&gt;
&lt;br /&gt;
delete from ad_table where ad_table_id in (select ad_table_id from ad_table where tablename='tablename');&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table Columns =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.name, a.columnname, a.created from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in ((select ad_table_id from ad_table where tablename='tablename'))&lt;br /&gt;
order by a.name;&lt;br /&gt;
--order by a.created desc;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Menu =&lt;br /&gt;
&lt;br /&gt;
== All the main (root) menu items in a tree ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;SELECT m.name, mm.* FROM AD_TreeNodeMM mm&lt;br /&gt;
left join ad_menu m on mm.node_id = m.ad_menu_id&lt;br /&gt;
WHERE mm.AD_Tree_ID=1000171 and mm.parent_id=0;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update entity type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set entitytype='U' where ad_column_id=3510;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Callout =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.ad_column_id,tbl.tablename, a.columnname,a.name, a.callout from ad_column a&lt;br /&gt;
join ad_table tbl on a.ad_table_id = tbl.ad_table_id&lt;br /&gt;
where a.callout is not null and a.callout like '%bPartner%'&lt;br /&gt;
--and tbl.tablename = 'C_BankStatementLine'&lt;br /&gt;
order by tbl.tablename, a.callout, a.name;&lt;br /&gt;
--order by a.updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update callout ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set callout = 'org.compiere.model.CalloutInvoiceNew.bPartner' where ad_column_id = 3499;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_ref_list where ad_reference_id in ( select ad_reference_id from ad_reference where name = 'Ref Name' );&lt;br /&gt;
-&lt;br /&gt;
Incomplete:&lt;br /&gt;
left join&lt;br /&gt;
	ad_reference ref on ref.name = 'ZZ_Status'&lt;br /&gt;
left join&lt;br /&gt;
	ad_ref_list reflist on reflist.ad_reference_id = ref.ad_reference_id and reflist.value = perm.zz_status&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For use in Jasper Report to lookup reference name ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( SELECT rl.name FROM ad_ref_list rl WHERE ((rl.ad_reference_id = (select ad_reference_id from ad_reference where name = 'my ref name')::numeric) AND ((rl.value)::text = (v.ice_fuel_type)::text))) AS field_name&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Validation Rules ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_val_rule_id, name, code from ad_val_rule where upper(code) like upper('%quota%');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Elements =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.* from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in (1000153, 1000152, 1000154, 1000156)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Report and process =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_process order by created desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select ad_process_id, value, name,description, classname, jasperreport from ad_process where upper(value) like upper('%') order by value;&lt;br /&gt;
&lt;br /&gt;
select * from ad_process_para where ad_process_para_id = 1000000;&lt;br /&gt;
&lt;br /&gt;
select columnname, name, defaultvalue from ad_process_para where ad_process_id = 1000000 order by seqno;&lt;br /&gt;
&lt;br /&gt;
update ad_process_para set defaultvalue='1' where ad_process_id = 1000000 and columnname = 'columname';	--Sequence&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Deletion =&lt;br /&gt;
== Delete all fields on window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name like 'Name of window' &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields on tab ==&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1. &lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where name = 'tabname' and ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name = 'Name of window' &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE' ) &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_tab_uu in ( 'REPLACEWITHWINDOWUUHERE' ) );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all occurences of column from windows ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_column_id in &lt;br /&gt;
( select ad_column_id from ad_column where upper(columnname) like upper('zz_nbsm_matchsetup_id') )&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete index definitions on table ==&lt;br /&gt;
&lt;br /&gt;
* NB: Indexes not dropped automatically&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_indexcolumn where AD_TableIndex_ID in (select ad_tableindex_id from ad_tableindex where ad_table_id = 318);&lt;br /&gt;
&lt;br /&gt;
delete from AD_TableIndex where ad_table_id = 318;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sequences =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_sequence a set CURRENTNEXTSYS =13000  where a.name = 'name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Doctype =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_doctype_id from c_doctype where name = 'DocumentName'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== All pack-in attachments ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_attachment where ad_table_id = 50008 and record_id in (&lt;br /&gt;
  select AD_Package_Imp_Proc_id from AD_Package_Imp_Proc where name like '%%' &lt;br /&gt;
  );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Synchronize Translations =&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_process_trl a set name = b.name, description = b.name from ad_process b where a.ad_process_id = b.ad_process_id and b.name = 'Process Name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Various helpers (work in progress) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_message_id, value, msgtext, msgtip from ad_message where upper(msgtext) like upper('%login%') order by msgtext;&lt;br /&gt;
&lt;br /&gt;
drop view if exists zz_trl_helper_field_v;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_trl_helper_field_v  as &lt;br /&gt;
select &lt;br /&gt;
	main.ad_field_id, &lt;br /&gt;
	trl.ad_language, trl.ad_field_trl_uu, &lt;br /&gt;
	main.ad_field_uu, main.name as field_name, main.description as main_description, &lt;br /&gt;
	trl.name as trl_name, trl.description as trl_description, &lt;br /&gt;
	win.name as window_name, &lt;br /&gt;
	col.columnname&lt;br /&gt;
from&lt;br /&gt;
ad_field main&lt;br /&gt;
join ad_field_trl trl on trl.ad_field_id = main.ad_field_id&lt;br /&gt;
join ad_column col on col.ad_column_id = main.ad_column_id&lt;br /&gt;
join ad_tab tab on tab.ad_tab_id = main.ad_tab_id&lt;br /&gt;
join ad_window win on win.ad_window_id = tab.ad_window_id;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select * from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = '';&lt;br /&gt;
&lt;br /&gt;
update ad_field_trl set name = 'name', description = 'name' where ad_field_trl_uu in (&lt;br /&gt;
	select ad_field_trl_uu from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = ''&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
select main.ad_process_id, trl.ad_language, trl.ad_process_para_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_process_para main&lt;br /&gt;
join ad_process_para_trl trl on trl.ad_process_para_id = main.ad_process_para_id&lt;br /&gt;
where &lt;br /&gt;
	ad_process_id in ( select ad_process_id from ad_process where name like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_column_id, trl.ad_language, trl.ad_column_trl_uu, main.columnname, main.name, main.description, trl.name from&lt;br /&gt;
ad_column main&lt;br /&gt;
join ad_column_trl trl on trl.ad_column_id = main.ad_column_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_column_id in ( select ad_column_id from ad_column where columnname like '' );&lt;br /&gt;
	&lt;br /&gt;
select main.ad_element_id, trl.ad_language, trl.ad_element_trl_uu, main.columnname, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_element main&lt;br /&gt;
join ad_element_trl trl on trl.ad_element_id = main.ad_element_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_element_id in ( select ad_element_id from ad_element where columnname like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_menu_id, main.ad_menu_uu, trl.ad_language, trl.ad_menu_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_menu main&lt;br /&gt;
join ad_menu_trl trl on trl.ad_menu_id = main.ad_menu_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_menu_id in ( select ad_menu_id from ad_menu where name like '' );&lt;br /&gt;
&lt;br /&gt;
-- For 2pack (sync UUID's)&lt;br /&gt;
update ad_menu_trl &lt;br /&gt;
set ad_menu_trl_uu = '521bf63c-c0ab-40ac-a188-fe7cfd0a9612'&lt;br /&gt;
from ad_menu b&lt;br /&gt;
where &lt;br /&gt;
ad_menu_trl.ad_menu_id = b.ad_menu_id&lt;br /&gt;
and b.ad_menu_uu = 'ccf0fc37-76cc-4a3c-8e1c-80d4c28e695a';&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack out =&lt;br /&gt;
&lt;br /&gt;
== Backup AD information before running 2pack ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * into bk_rq16_process from ad_process;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_table from ad_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_column from ad_column;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_window from ad_window;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_tab from ad_tab;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_field from ad_field;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_reference from ad_reference;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_table from ad_ref_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_list from ad_ref_list;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields + tabs on windows (for Pack In) ==&lt;br /&gt;
&lt;br /&gt;
* Helps to ensure is packed in correctly&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* See also under the heading: 'Deletion'&lt;br /&gt;
&lt;br /&gt;
== Packout/Packin package details ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Imp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
-- For searching for tables linked to packouts&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Duplicate key error when importing AD_Message ==&lt;br /&gt;
&lt;br /&gt;
* unique constraint (...AD_MESSAGE_TRL_KEY) violated&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_message_trl&lt;br /&gt;
WHERE AD_Message_ID=&lt;br /&gt;
( SELECT ad_message_id FROM ad_message WHERE value='KEYOFMESSAGE' );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pack in/out helpers ==&lt;br /&gt;
&lt;br /&gt;
=== Delete all fields on a window/tab ===&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE' ) &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete all ad_userquery of window/tab process ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_userquery where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE') &lt;br /&gt;
));&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete all ad_customization of window/tab ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE') &lt;br /&gt;
));&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete all attachments of process ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_attachment where record_id in (&lt;br /&gt;
	select ad_process_id from ad_process where value like '%MYPROCESSKEY%' ) and &lt;br /&gt;
ad_table_id = (select ad_table_id from ad_table where tablename='AD_Process');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Migration scripts =&lt;br /&gt;
&lt;br /&gt;
== Which migration scripts have been run ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select releaseno,created,name,status,isapply,filename, script  from ad_migrationscript order by releaseno, name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11733</id>
		<title>Queries: AD</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11733"/>
		<updated>2017-07-28T09:29:13Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: /* Delete all attachments of process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_client_id,value,name from ad_client order by ad_client_id;&lt;br /&gt;
&lt;br /&gt;
select ad_client_id from ad_client where name like 'A%'; &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Windows =&lt;br /&gt;
== Windows referencing a specific process ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select name from ad_window where ad_window_id in (&lt;br /&gt;
select ad_window_id from ad_tab where ad_process_id in (&lt;br /&gt;
select ad_process_id from ad_process where value = 'processname')&lt;br /&gt;
);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_window a&lt;br /&gt;
where a.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tab ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_tab a&lt;br /&gt;
where a.ad_window_id=id&lt;br /&gt;
&lt;br /&gt;
select distinct a.whereclause from ad_tab a &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.name as WindowName from ad_tab a&lt;br /&gt;
join ad_window b on a.ad_window_id = b.ad_window_id&lt;br /&gt;
where &lt;br /&gt;
	a.ad_table_id = &lt;br /&gt;
	(select ad_table_id from ad_table where name='tablename');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Field information =&lt;br /&gt;
&lt;br /&gt;
== Field ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_field a&lt;br /&gt;
join ad_tab b on a.ad_tab_id=b.ad_tab_id&lt;br /&gt;
where b.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Combining Window, tab, field ==&lt;br /&gt;
	&lt;br /&gt;
=== As a view ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drop view if exists zz_fieldinfo_v;&lt;br /&gt;
&lt;br /&gt;
create view zz_fieldinfo_v as&lt;br /&gt;
select &lt;br /&gt;
	tabtable.tablename as table_name, &lt;br /&gt;
	tabtable.entitytype as table_entitytype,&lt;br /&gt;
  	fld.isdisplayed as field_isdisplayed,&lt;br /&gt;
  	fld.seqno as field_seqno,&lt;br /&gt;
  	fld.name as field_name, &lt;br /&gt;
	col.columnname as column_name,&lt;br /&gt;
  	fld.displaylogic as field_display_logic,&lt;br /&gt;
	fld.readonlylogic as field_readonly_logic,&lt;br /&gt;
	tab.name as tab_name,&lt;br /&gt;
	win.name as WindowName, &lt;br /&gt;
	win.ad_window_id,&lt;br /&gt;
	tab.ad_tab_id,&lt;br /&gt;
  	tab.isactive as tab_isactive,&lt;br /&gt;
  	fld.ad_field_uu,&lt;br /&gt;
	fld.ad_field_id,&lt;br /&gt;
	fld.iscentrallymaintained as field_centrallymaintained,&lt;br /&gt;
	fld.ismandatory as field_ismandatory,&lt;br /&gt;
	fld.mandatorylogic as field_mandatorylogic,&lt;br /&gt;
	col.ad_element_id,&lt;br /&gt;
	ele.name as element_name,&lt;br /&gt;
	ref.name as ref_name, refvalue.name as ref_value,&lt;br /&gt;
	refvalue.ad_reference_id,&lt;br /&gt;
	reftabletbl.tablename as ref_table,&lt;br /&gt;
	col.created as column_created, col.updated as column_updated,&lt;br /&gt;
	fld.created as field_created, fld.updated as field_updated,&lt;br /&gt;
	fld.ad_val_rule_id as field_val_rule_id&lt;br /&gt;
from &lt;br /&gt;
	ad_field fld&lt;br /&gt;
join ad_tab tab on fld.ad_tab_id = tab.ad_tab_id&lt;br /&gt;
join ad_table tabtable on tabtable.ad_table_id = tab.ad_table_id&lt;br /&gt;
join ad_window win on tab.ad_window_id = win.ad_window_id&lt;br /&gt;
join ad_column col on fld.ad_column_id = col.ad_column_id&lt;br /&gt;
join ad_element ele on ele.ad_element_id = col.ad_element_id&lt;br /&gt;
left join ad_reference ref on col.ad_reference_id = ref.ad_reference_id&lt;br /&gt;
left join ad_reference refvalue on col.ad_reference_value_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_ref_table reftable on reftable.ad_reference_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_table reftabletbl on reftabletbl.ad_table_id = reftable.ad_table_id&lt;br /&gt;
order by win.name, tab.seqno, field_seqno;&lt;br /&gt;
&lt;br /&gt;
select field_display_name, field_ismandatory, field_mandatorylogic from zz_fieldinfo_v where windowname like  'C%' and field_mandatorylogic is not null;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show fields by update date (useful to run after loading 2pack) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select column_updated, column_name, * from zz_fieldinfo_v order by column_updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Form =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.entitytype, a.name, a.classname from ad_form a where a.entitytype='U' order by classname;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table =&lt;br /&gt;
== Table ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_table a&lt;br /&gt;
order by a.created desc;&lt;br /&gt;
&lt;br /&gt;
select a.* from ad_table a&lt;br /&gt;
where a.ad_table_id in (id, id)&lt;br /&gt;
&lt;br /&gt;
(select ad_table_id from ad_table where tablename='tablename')&lt;br /&gt;
&lt;br /&gt;
delete from ad_table where ad_table_id in (select ad_table_id from ad_table where tablename='tablename');&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table Columns =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.name, a.columnname, a.created from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in ((select ad_table_id from ad_table where tablename='tablename'))&lt;br /&gt;
order by a.name;&lt;br /&gt;
--order by a.created desc;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Menu =&lt;br /&gt;
&lt;br /&gt;
== All the main (root) menu items in a tree ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;SELECT m.name, mm.* FROM AD_TreeNodeMM mm&lt;br /&gt;
left join ad_menu m on mm.node_id = m.ad_menu_id&lt;br /&gt;
WHERE mm.AD_Tree_ID=1000171 and mm.parent_id=0;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update entity type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set entitytype='U' where ad_column_id=3510;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Callout =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.ad_column_id,tbl.tablename, a.columnname,a.name, a.callout from ad_column a&lt;br /&gt;
join ad_table tbl on a.ad_table_id = tbl.ad_table_id&lt;br /&gt;
where a.callout is not null and a.callout like '%bPartner%'&lt;br /&gt;
--and tbl.tablename = 'C_BankStatementLine'&lt;br /&gt;
order by tbl.tablename, a.callout, a.name;&lt;br /&gt;
--order by a.updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update callout ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set callout = 'org.compiere.model.CalloutInvoiceNew.bPartner' where ad_column_id = 3499;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_ref_list where ad_reference_id in ( select ad_reference_id from ad_reference where name = 'Ref Name' );&lt;br /&gt;
-&lt;br /&gt;
Incomplete:&lt;br /&gt;
left join&lt;br /&gt;
	ad_reference ref on ref.name = 'ZZ_Status'&lt;br /&gt;
left join&lt;br /&gt;
	ad_ref_list reflist on reflist.ad_reference_id = ref.ad_reference_id and reflist.value = perm.zz_status&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For use in Jasper Report to lookup reference name ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( SELECT rl.name FROM ad_ref_list rl WHERE ((rl.ad_reference_id = (select ad_reference_id from ad_reference where name = 'my ref name')::numeric) AND ((rl.value)::text = (v.ice_fuel_type)::text))) AS field_name&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Validation Rules ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_val_rule_id, name, code from ad_val_rule where upper(code) like upper('%quota%');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Elements =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.* from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in (1000153, 1000152, 1000154, 1000156)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Report and process =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_process order by created desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select ad_process_id, value, name,description, classname, jasperreport from ad_process where upper(value) like upper('%') order by value;&lt;br /&gt;
&lt;br /&gt;
select * from ad_process_para where ad_process_para_id = 1000000;&lt;br /&gt;
&lt;br /&gt;
select columnname, name, defaultvalue from ad_process_para where ad_process_id = 1000000 order by seqno;&lt;br /&gt;
&lt;br /&gt;
update ad_process_para set defaultvalue='1' where ad_process_id = 1000000 and columnname = 'columname';	--Sequence&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Deletion =&lt;br /&gt;
== Delete all fields on window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name like 'Name of window' &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields on tab ==&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1. &lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where name = 'tabname' and ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name = 'Name of window' &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE' ) &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_tab_uu in ( 'REPLACEWITHWINDOWUUHERE' ) );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all occurences of column from windows ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_column_id in &lt;br /&gt;
( select ad_column_id from ad_column where upper(columnname) like upper('zz_nbsm_matchsetup_id') )&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete index definitions on table ==&lt;br /&gt;
&lt;br /&gt;
* NB: Indexes not dropped automatically&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_indexcolumn where AD_TableIndex_ID in (select ad_tableindex_id from ad_tableindex where ad_table_id = 318);&lt;br /&gt;
&lt;br /&gt;
delete from AD_TableIndex where ad_table_id = 318;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sequences =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_sequence a set CURRENTNEXTSYS =13000  where a.name = 'name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Doctype =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_doctype_id from c_doctype where name = 'DocumentName'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== All pack-in attachments ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_attachment where ad_table_id = 50008 and record_id in (&lt;br /&gt;
  select AD_Package_Imp_Proc_id from AD_Package_Imp_Proc where name like '%%' &lt;br /&gt;
  );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Synchronize Translations =&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_process_trl a set name = b.name, description = b.name from ad_process b where a.ad_process_id = b.ad_process_id and b.name = 'Process Name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Various helpers (work in progress) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_message_id, value, msgtext, msgtip from ad_message where upper(msgtext) like upper('%login%') order by msgtext;&lt;br /&gt;
&lt;br /&gt;
drop view if exists zz_trl_helper_field_v;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_trl_helper_field_v  as &lt;br /&gt;
select &lt;br /&gt;
	main.ad_field_id, &lt;br /&gt;
	trl.ad_language, trl.ad_field_trl_uu, &lt;br /&gt;
	main.ad_field_uu, main.name as field_name, main.description as main_description, &lt;br /&gt;
	trl.name as trl_name, trl.description as trl_description, &lt;br /&gt;
	win.name as window_name, &lt;br /&gt;
	col.columnname&lt;br /&gt;
from&lt;br /&gt;
ad_field main&lt;br /&gt;
join ad_field_trl trl on trl.ad_field_id = main.ad_field_id&lt;br /&gt;
join ad_column col on col.ad_column_id = main.ad_column_id&lt;br /&gt;
join ad_tab tab on tab.ad_tab_id = main.ad_tab_id&lt;br /&gt;
join ad_window win on win.ad_window_id = tab.ad_window_id;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select * from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = '';&lt;br /&gt;
&lt;br /&gt;
update ad_field_trl set name = 'name', description = 'name' where ad_field_trl_uu in (&lt;br /&gt;
	select ad_field_trl_uu from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = ''&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
select main.ad_process_id, trl.ad_language, trl.ad_process_para_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_process_para main&lt;br /&gt;
join ad_process_para_trl trl on trl.ad_process_para_id = main.ad_process_para_id&lt;br /&gt;
where &lt;br /&gt;
	ad_process_id in ( select ad_process_id from ad_process where name like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_column_id, trl.ad_language, trl.ad_column_trl_uu, main.columnname, main.name, main.description, trl.name from&lt;br /&gt;
ad_column main&lt;br /&gt;
join ad_column_trl trl on trl.ad_column_id = main.ad_column_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_column_id in ( select ad_column_id from ad_column where columnname like '' );&lt;br /&gt;
	&lt;br /&gt;
select main.ad_element_id, trl.ad_language, trl.ad_element_trl_uu, main.columnname, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_element main&lt;br /&gt;
join ad_element_trl trl on trl.ad_element_id = main.ad_element_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_element_id in ( select ad_element_id from ad_element where columnname like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_menu_id, main.ad_menu_uu, trl.ad_language, trl.ad_menu_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_menu main&lt;br /&gt;
join ad_menu_trl trl on trl.ad_menu_id = main.ad_menu_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_menu_id in ( select ad_menu_id from ad_menu where name like '' );&lt;br /&gt;
&lt;br /&gt;
-- For 2pack (sync UUID's)&lt;br /&gt;
update ad_menu_trl &lt;br /&gt;
set ad_menu_trl_uu = '521bf63c-c0ab-40ac-a188-fe7cfd0a9612'&lt;br /&gt;
from ad_menu b&lt;br /&gt;
where &lt;br /&gt;
ad_menu_trl.ad_menu_id = b.ad_menu_id&lt;br /&gt;
and b.ad_menu_uu = 'ccf0fc37-76cc-4a3c-8e1c-80d4c28e695a';&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack out =&lt;br /&gt;
&lt;br /&gt;
== Backup AD information before running 2pack ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * into bk_rq16_process from ad_process;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_table from ad_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_column from ad_column;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_window from ad_window;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_tab from ad_tab;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_field from ad_field;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_reference from ad_reference;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_table from ad_ref_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_list from ad_ref_list;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields + tabs on windows (for Pack In) ==&lt;br /&gt;
&lt;br /&gt;
* Helps to ensure is packed in correctly&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* See also under the heading: 'Deletion'&lt;br /&gt;
&lt;br /&gt;
== Packout/Packin package details ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Imp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
-- For searching for tables linked to packouts&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Duplicate key error when importing AD_Message ==&lt;br /&gt;
&lt;br /&gt;
* unique constraint (...AD_MESSAGE_TRL_KEY) violated&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_message_trl&lt;br /&gt;
WHERE AD_Message_ID=&lt;br /&gt;
( SELECT ad_message_id FROM ad_message WHERE value='KEYOFMESSAGE' );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pack in/out helpers ==&lt;br /&gt;
&lt;br /&gt;
=== Delete all fields on a window/tab ===&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE' ) &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete all ad_userquery of window/tab process ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_userquery where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE') &lt;br /&gt;
));&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete all ad_customization of window/tab ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE') &lt;br /&gt;
));&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete all attachments of process ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_attachment where record_id in (&lt;br /&gt;
	select ad_process_id from ad_process where value like '%MYPROCESSKEY%' ) and &lt;br /&gt;
ad_table_id = (select ad_table_id from ad_table where tablename='AD_Process');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Migration scripts =&lt;br /&gt;
&lt;br /&gt;
== Which migration scripts have been run ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select releaseno,created,name,status,isapply,filename, script  from ad_migrationscript order by releaseno, name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_API&amp;diff=11373</id>
		<title>IDempiere API</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_API&amp;diff=11373"/>
		<updated>2017-04-21T12:46:57Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: /* Toolbar import button */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Developer documentation]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
The purpose of this page is to share commonly used iDempiere API calls.&lt;br /&gt;
&lt;br /&gt;
Feel free to contribute here to improve the coverage of documentation.&lt;br /&gt;
&lt;br /&gt;
= Get the client ID =&lt;br /&gt;
&lt;br /&gt;
Env.getContextAsInt(ctx, &amp;quot;#AD_Client_ID&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
= Get the base currency = &lt;br /&gt;
&lt;br /&gt;
MClient.get(Env.getCtx()).getC_Currency_ID()&lt;br /&gt;
&lt;br /&gt;
= Get the process ID for process with key =&lt;br /&gt;
&lt;br /&gt;
int AD_Process_ID = MProcess.getProcess_ID(&amp;quot;KeyValueOfProcess&amp;quot;, null);&lt;br /&gt;
&lt;br /&gt;
= Start a report &amp;amp; process =&lt;br /&gt;
&lt;br /&gt;
ProcessUtil.startJavaProcess(ctx, poInfo, trx);&lt;br /&gt;
&lt;br /&gt;
* See FinReportJasper in the base code for example&lt;br /&gt;
&lt;br /&gt;
= Commit transaction =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Trx trx = Trx.get(get_TrxName(), false);&lt;br /&gt;
trx.commit(true);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Complete document =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;String docAction = DocAction.ACTION_Complete;&lt;br /&gt;
		posOrder.setDocAction( docAction );&lt;br /&gt;
		posOrder.processIt( docAction );&lt;br /&gt;
		posOrder.saveEx();&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NB: Check the document status after saving is equal to the expected status, otherwise an exception should be thrown.&lt;br /&gt;
&lt;br /&gt;
= Get the persistent object =&lt;br /&gt;
&lt;br /&gt;
== Standard ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MBPartner partner = new MBPartner(getCtx(), {0 for new record, or record id}, get_TrxName());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Model factory ==&lt;br /&gt;
&lt;br /&gt;
The following is work in progress&lt;br /&gt;
&lt;br /&gt;
* Using model factory, so that the correct model is returned, based on the available plugins.&lt;br /&gt;
** MTable.getPO (write a utility method to wrap)&lt;br /&gt;
** Use a Query (see the Query class)&lt;br /&gt;
** Write a utility method based on MTable.getPO, which doesn't require instantiating MTable&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public PO getPO (int Record_ID, String trxName)&lt;br /&gt;
	{&lt;br /&gt;
		String tableName = getTableName();&lt;br /&gt;
		if (Record_ID != 0 &amp;amp;&amp;amp; !isSingleKey())&lt;br /&gt;
		{&lt;br /&gt;
			log.log(Level.WARNING, &amp;quot;(id) - Multi-Key &amp;quot; + tableName);&lt;br /&gt;
			return null;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		PO po = null;&lt;br /&gt;
		List&amp;lt;IModelFactory&amp;gt; factoryList = Service.locator().list(IModelFactory.class).getServices();&lt;br /&gt;
		if (factoryList != null)&lt;br /&gt;
		{&lt;br /&gt;
			for(IModelFactory factory : factoryList)&lt;br /&gt;
			{&lt;br /&gt;
				po = factory.getPO(tableName, Record_ID, trxName);&lt;br /&gt;
				if (po != null)&lt;br /&gt;
				{&lt;br /&gt;
					if (po.get_ID() != Record_ID &amp;amp;&amp;amp; Record_ID &amp;gt; 0)&lt;br /&gt;
						po = null;&lt;br /&gt;
					else&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (po == null)&lt;br /&gt;
		{&lt;br /&gt;
			po = new GenericPO(tableName, getCtx(), Record_ID, trxName);&lt;br /&gt;
			if (po.get_ID() != Record_ID &amp;amp;&amp;amp; Record_ID &amp;gt; 0)&lt;br /&gt;
				po = null;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return po;&lt;br /&gt;
	}	//	getPO&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Reset the cache for a table =&lt;br /&gt;
&lt;br /&gt;
CacheMgt.get().reset(Table_Name);&lt;br /&gt;
&lt;br /&gt;
= Lock PO for update =&lt;br /&gt;
&lt;br /&gt;
see AdempiereDatabase.forUpdate:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public boolean forUpdate(PO po, int timeout);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== Attach one or more files to a record ==&lt;br /&gt;
&lt;br /&gt;
* Example copied from the PIPO code:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MAttachment attachment = new MAttachment (adPackageImp.getCtx(), X_AD_Package_Imp_Proc.Table_ID, adPackageImp.getAD_Package_Imp_Proc_ID(), null);&lt;br /&gt;
attachment.addEntry(packageFile);&lt;br /&gt;
attachment.saveEx(); &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System configurator =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MSysConfig.getBooleanValue(&amp;quot;CONFIG_NAME&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
String retValue = MSysConfig.getValue(&amp;quot;CONFIG_NAME&amp;quot;, &amp;quot;&amp;quot;);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating an order line =&lt;br /&gt;
&lt;br /&gt;
* Similiar logic applies to an invoice line.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MOrderLine line = new MOrderLine(order);&lt;br /&gt;
line.setC_BPartner_ID(C_BPartner_ID);&lt;br /&gt;
line.setM_Product_ID(M_Product_ID);&lt;br /&gt;
line.setQty(BigDecimal.ONE);&lt;br /&gt;
// Sets the price based on the price list&lt;br /&gt;
line.setPrice();&lt;br /&gt;
// Extends the qty&lt;br /&gt;
line.setLineNetAmt();&lt;br /&gt;
line.saveEx();&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methods for querying and updating data =&lt;br /&gt;
&lt;br /&gt;
== Query API ==&lt;br /&gt;
&lt;br /&gt;
* Example taken from ModelValidationEngine&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MTable table = MTable.get(Env.getCtx(), X_AD_ModelValidator.Table_ID);&lt;br /&gt;
Query query = table.createQuery(&amp;quot;IsActive='Y'&amp;quot;, null);&lt;br /&gt;
query.setOrderBy(&amp;quot;SeqNo&amp;quot;);&lt;br /&gt;
..&lt;br /&gt;
List&amp;lt;X_AD_ModelValidator&amp;gt; entityTypes = query.list();&lt;br /&gt;
..&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;List&amp;lt;MInfoWindow&amp;gt; list = new Query(Env.getCtx(),&lt;br /&gt;
MInfoWindow.Table_Name, &amp;quot;IsValid='Y' AND&lt;br /&gt;
IsShowInDashboard='Y'&amp;quot;, null)&lt;br /&gt;
        .setOnlyActiveRecords(true)&lt;br /&gt;
        .setOrderBy(MInfoWindow.COLUMNNAME_SeqNo)&lt;br /&gt;
        .list();&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepared Statement ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;final String sql = &amp;quot;SELECT * FROM C_BPartner_Location WHERE C_BPartner_ID=? AND IsActive='Y'&amp;quot;&lt;br /&gt;
				+ &amp;quot; ORDER BY C_BPartner_Location_ID&amp;quot;;&lt;br /&gt;
PreparedStatement pstmt = null;&lt;br /&gt;
ResultSet rs = null;&lt;br /&gt;
try&lt;br /&gt;
{&lt;br /&gt;
	pstmt = DB.prepareStatement(sql, get_TrxName());&lt;br /&gt;
	pstmt.setInt(1, getC_BPartner_ID());&lt;br /&gt;
	rs = pstmt.executeQuery();&lt;br /&gt;
	while (rs.next())&lt;br /&gt;
		list.add(new MBPartnerLocation (getCtx(), rs, get_TrxName()));&lt;br /&gt;
}&lt;br /&gt;
catch (Exception e)&lt;br /&gt;
{&lt;br /&gt;
	log.log(Level.SEVERE, sql, e);&lt;br /&gt;
}&lt;br /&gt;
finally&lt;br /&gt;
{&lt;br /&gt;
	DB.close(rs, pstmt);&lt;br /&gt;
	rs = null; pstmt = null;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Get all IDs ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;int[] m_ids = PO.getAllIDs(MAttachment.Table_Name, &amp;quot; AD_Client_ID= &amp;quot; + MClient.get(getCtx()).getAD_Client_ID() + &amp;quot; Order By AD_Client_ID &amp;quot;, null);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DB.getSQLValue ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;StringBuilder sql = new StringBuilder();&lt;br /&gt;
sql.append(&amp;quot;select count(*) from TableName where TableName_ID=&amp;quot;).append(TableName_ID));&lt;br /&gt;
&lt;br /&gt;
return DB.getSQLValueEx(trxName sql, params);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;DB.executeUpdateEx(sql.toString(), new Object[] { ... }, trxName);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Access control related =&lt;br /&gt;
&lt;br /&gt;
== Window access ==&lt;br /&gt;
&lt;br /&gt;
* Check whether currently logged in role has access to window&lt;br /&gt;
* @return null if no access, TRUE if r/w and FALSE if r/o&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;if (MRole.getDefault().getWindowAccess(m_AD_Window_ID) == null) { ... }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= UI related =&lt;br /&gt;
&lt;br /&gt;
== Busy Dialog ==&lt;br /&gt;
&lt;br /&gt;
 * BusyDialogTemplate: A busy dialog with an encapsulated Runnable&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Simple get message text ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Msg.getMsg(Env.getCtx(), &amp;quot;messagekey&amp;quot;)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Translation of column (element) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;String columnNameTrl = Msg.getElement(Env.getCtx(), columnName);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack Out =&lt;br /&gt;
&lt;br /&gt;
== Add support to export new or existing display type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;PoExporter.export&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= User preferences =&lt;br /&gt;
&lt;br /&gt;
* Untested, use at your own risk&lt;br /&gt;
* You can use the context for settings that don't need to be persisted.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;protected void savePreferences() {&lt;br /&gt;
		String note = txtNote.getText();&lt;br /&gt;
		UserPreference pref = SessionManager.getSessionApplication().getUserPreference();&lt;br /&gt;
		pref.setProperty(getPrefKeyForNote(), note);&lt;br /&gt;
		pref.savePreference();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	protected void loadPreferences() {&lt;br /&gt;
		UserPreference pref = SessionManager.getSessionApplication().getUserPreference();&lt;br /&gt;
		String note = pref.getProperty(getPrefKeyForNote());&lt;br /&gt;
		if (note==null) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		txtNote.setText(note);&lt;br /&gt;
	}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Context =&lt;br /&gt;
&lt;br /&gt;
== Adding a new context variable just after login ==&lt;br /&gt;
&lt;br /&gt;
* See: Login.loadPreferences&lt;br /&gt;
&lt;br /&gt;
= Logging =&lt;br /&gt;
&lt;br /&gt;
* For everything you need to know about logging in iDempiere, see the CLogMgt class&lt;br /&gt;
&lt;br /&gt;
= MD5, hashes, checksums, archives =&lt;br /&gt;
&lt;br /&gt;
== Compare MD5's and more ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;DigestOfFile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create zip archives ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Zipper&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Code paths =&lt;br /&gt;
&lt;br /&gt;
== User clicks on New record ==&lt;br /&gt;
&lt;br /&gt;
1) When user click on New Record button in any window, onNew() function in AbstractADWindowContent class is executed. Please check AbstractADWindowContent class for other functions (onSave,onProcess,onReport etc) as well.&lt;br /&gt;
&lt;br /&gt;
2) getCurrentNext() and setCurrentNext() in MSequence class. Thank you very much Anozi Mada&lt;br /&gt;
&lt;br /&gt;
Regards,&lt;br /&gt;
Shanil Fernando&lt;br /&gt;
&lt;br /&gt;
Reference: https://groups.google.com/forum/#!topic/idempiere/aSsv1MkciwM&lt;br /&gt;
&lt;br /&gt;
== Toolbar delete button == &lt;br /&gt;
&lt;br /&gt;
* Where do I find the code which handles deletion of a record from the toolbar?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onDeleteCallback&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toolbar refresh button ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onRefresh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toolbar export button ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onExport&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
* See: ExportAction&lt;br /&gt;
&lt;br /&gt;
== Toolbar import button ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onFileImport --&amp;gt; FileImportAction.fileImport --&amp;gt; importFile --&amp;gt; GridTabCSVImporter.fileImport&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Process Dialog ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog to start process or report ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ProcessDialog&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Process Info Dialog ===&lt;br /&gt;
&lt;br /&gt;
* The dialog shown after a user starts a process from a window&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ProcessInfoDialog&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Shown from:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.updateUI&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== User starts process by clicking on a button on a window ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.actionButton&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Clicking on a menu item ==&lt;br /&gt;
&lt;br /&gt;
Where do I find the code which responds to an item being clicked on the menu?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractDesktop.onMenuSelected&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Opening of a window ==&lt;br /&gt;
&lt;br /&gt;
* Where is the opening of a window handled?&lt;br /&gt;
** Same class for form, process, workflow, info&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;TabbedDesktop.openWindow&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Display and layout of fields ==&lt;br /&gt;
&lt;br /&gt;
* Where do I find the logic which handles the display and layout of fields in a standard iDempiere window?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ADTabpanel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where is formatting is applied to fields (example, required fields highlighted in red)?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;WEditor.applyLabelStyles&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where do I find the container for a field which is displayed in a window?&lt;br /&gt;
** Also handles setting the default value for a field&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;GridField&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where are callouts processed?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;GridTab.processCallout&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where is the field change event for when a value changes on a window? &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;GridTab.processFieldChange&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Printing ==&lt;br /&gt;
&lt;br /&gt;
* Handle printing for various documents&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ServerReportCtl&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Application startups ==&lt;br /&gt;
&lt;br /&gt;
=== Model Generator ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ModelGeneratorApplication -&amp;gt;  ModelClassGeneratorDialog -&amp;gt; ModelClassGenerator&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_API&amp;diff=11372</id>
		<title>IDempiere API</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_API&amp;diff=11372"/>
		<updated>2017-04-21T12:43:53Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: /* Toolbar import button */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Developer documentation]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
The purpose of this page is to share commonly used iDempiere API calls.&lt;br /&gt;
&lt;br /&gt;
Feel free to contribute here to improve the coverage of documentation.&lt;br /&gt;
&lt;br /&gt;
= Get the client ID =&lt;br /&gt;
&lt;br /&gt;
Env.getContextAsInt(ctx, &amp;quot;#AD_Client_ID&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
= Get the base currency = &lt;br /&gt;
&lt;br /&gt;
MClient.get(Env.getCtx()).getC_Currency_ID()&lt;br /&gt;
&lt;br /&gt;
= Get the process ID for process with key =&lt;br /&gt;
&lt;br /&gt;
int AD_Process_ID = MProcess.getProcess_ID(&amp;quot;KeyValueOfProcess&amp;quot;, null);&lt;br /&gt;
&lt;br /&gt;
= Start a report &amp;amp; process =&lt;br /&gt;
&lt;br /&gt;
ProcessUtil.startJavaProcess(ctx, poInfo, trx);&lt;br /&gt;
&lt;br /&gt;
* See FinReportJasper in the base code for example&lt;br /&gt;
&lt;br /&gt;
= Commit transaction =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Trx trx = Trx.get(get_TrxName(), false);&lt;br /&gt;
trx.commit(true);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Complete document =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;String docAction = DocAction.ACTION_Complete;&lt;br /&gt;
		posOrder.setDocAction( docAction );&lt;br /&gt;
		posOrder.processIt( docAction );&lt;br /&gt;
		posOrder.saveEx();&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NB: Check the document status after saving is equal to the expected status, otherwise an exception should be thrown.&lt;br /&gt;
&lt;br /&gt;
= Get the persistent object =&lt;br /&gt;
&lt;br /&gt;
== Standard ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MBPartner partner = new MBPartner(getCtx(), {0 for new record, or record id}, get_TrxName());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Model factory ==&lt;br /&gt;
&lt;br /&gt;
The following is work in progress&lt;br /&gt;
&lt;br /&gt;
* Using model factory, so that the correct model is returned, based on the available plugins.&lt;br /&gt;
** MTable.getPO (write a utility method to wrap)&lt;br /&gt;
** Use a Query (see the Query class)&lt;br /&gt;
** Write a utility method based on MTable.getPO, which doesn't require instantiating MTable&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public PO getPO (int Record_ID, String trxName)&lt;br /&gt;
	{&lt;br /&gt;
		String tableName = getTableName();&lt;br /&gt;
		if (Record_ID != 0 &amp;amp;&amp;amp; !isSingleKey())&lt;br /&gt;
		{&lt;br /&gt;
			log.log(Level.WARNING, &amp;quot;(id) - Multi-Key &amp;quot; + tableName);&lt;br /&gt;
			return null;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		PO po = null;&lt;br /&gt;
		List&amp;lt;IModelFactory&amp;gt; factoryList = Service.locator().list(IModelFactory.class).getServices();&lt;br /&gt;
		if (factoryList != null)&lt;br /&gt;
		{&lt;br /&gt;
			for(IModelFactory factory : factoryList)&lt;br /&gt;
			{&lt;br /&gt;
				po = factory.getPO(tableName, Record_ID, trxName);&lt;br /&gt;
				if (po != null)&lt;br /&gt;
				{&lt;br /&gt;
					if (po.get_ID() != Record_ID &amp;amp;&amp;amp; Record_ID &amp;gt; 0)&lt;br /&gt;
						po = null;&lt;br /&gt;
					else&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (po == null)&lt;br /&gt;
		{&lt;br /&gt;
			po = new GenericPO(tableName, getCtx(), Record_ID, trxName);&lt;br /&gt;
			if (po.get_ID() != Record_ID &amp;amp;&amp;amp; Record_ID &amp;gt; 0)&lt;br /&gt;
				po = null;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return po;&lt;br /&gt;
	}	//	getPO&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Reset the cache for a table =&lt;br /&gt;
&lt;br /&gt;
CacheMgt.get().reset(Table_Name);&lt;br /&gt;
&lt;br /&gt;
= Lock PO for update =&lt;br /&gt;
&lt;br /&gt;
see AdempiereDatabase.forUpdate:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public boolean forUpdate(PO po, int timeout);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== Attach one or more files to a record ==&lt;br /&gt;
&lt;br /&gt;
* Example copied from the PIPO code:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MAttachment attachment = new MAttachment (adPackageImp.getCtx(), X_AD_Package_Imp_Proc.Table_ID, adPackageImp.getAD_Package_Imp_Proc_ID(), null);&lt;br /&gt;
attachment.addEntry(packageFile);&lt;br /&gt;
attachment.saveEx(); &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System configurator =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MSysConfig.getBooleanValue(&amp;quot;CONFIG_NAME&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
String retValue = MSysConfig.getValue(&amp;quot;CONFIG_NAME&amp;quot;, &amp;quot;&amp;quot;);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating an order line =&lt;br /&gt;
&lt;br /&gt;
* Similiar logic applies to an invoice line.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MOrderLine line = new MOrderLine(order);&lt;br /&gt;
line.setC_BPartner_ID(C_BPartner_ID);&lt;br /&gt;
line.setM_Product_ID(M_Product_ID);&lt;br /&gt;
line.setQty(BigDecimal.ONE);&lt;br /&gt;
// Sets the price based on the price list&lt;br /&gt;
line.setPrice();&lt;br /&gt;
// Extends the qty&lt;br /&gt;
line.setLineNetAmt();&lt;br /&gt;
line.saveEx();&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methods for querying and updating data =&lt;br /&gt;
&lt;br /&gt;
== Query API ==&lt;br /&gt;
&lt;br /&gt;
* Example taken from ModelValidationEngine&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MTable table = MTable.get(Env.getCtx(), X_AD_ModelValidator.Table_ID);&lt;br /&gt;
Query query = table.createQuery(&amp;quot;IsActive='Y'&amp;quot;, null);&lt;br /&gt;
query.setOrderBy(&amp;quot;SeqNo&amp;quot;);&lt;br /&gt;
..&lt;br /&gt;
List&amp;lt;X_AD_ModelValidator&amp;gt; entityTypes = query.list();&lt;br /&gt;
..&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;List&amp;lt;MInfoWindow&amp;gt; list = new Query(Env.getCtx(),&lt;br /&gt;
MInfoWindow.Table_Name, &amp;quot;IsValid='Y' AND&lt;br /&gt;
IsShowInDashboard='Y'&amp;quot;, null)&lt;br /&gt;
        .setOnlyActiveRecords(true)&lt;br /&gt;
        .setOrderBy(MInfoWindow.COLUMNNAME_SeqNo)&lt;br /&gt;
        .list();&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepared Statement ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;final String sql = &amp;quot;SELECT * FROM C_BPartner_Location WHERE C_BPartner_ID=? AND IsActive='Y'&amp;quot;&lt;br /&gt;
				+ &amp;quot; ORDER BY C_BPartner_Location_ID&amp;quot;;&lt;br /&gt;
PreparedStatement pstmt = null;&lt;br /&gt;
ResultSet rs = null;&lt;br /&gt;
try&lt;br /&gt;
{&lt;br /&gt;
	pstmt = DB.prepareStatement(sql, get_TrxName());&lt;br /&gt;
	pstmt.setInt(1, getC_BPartner_ID());&lt;br /&gt;
	rs = pstmt.executeQuery();&lt;br /&gt;
	while (rs.next())&lt;br /&gt;
		list.add(new MBPartnerLocation (getCtx(), rs, get_TrxName()));&lt;br /&gt;
}&lt;br /&gt;
catch (Exception e)&lt;br /&gt;
{&lt;br /&gt;
	log.log(Level.SEVERE, sql, e);&lt;br /&gt;
}&lt;br /&gt;
finally&lt;br /&gt;
{&lt;br /&gt;
	DB.close(rs, pstmt);&lt;br /&gt;
	rs = null; pstmt = null;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Get all IDs ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;int[] m_ids = PO.getAllIDs(MAttachment.Table_Name, &amp;quot; AD_Client_ID= &amp;quot; + MClient.get(getCtx()).getAD_Client_ID() + &amp;quot; Order By AD_Client_ID &amp;quot;, null);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DB.getSQLValue ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;StringBuilder sql = new StringBuilder();&lt;br /&gt;
sql.append(&amp;quot;select count(*) from TableName where TableName_ID=&amp;quot;).append(TableName_ID));&lt;br /&gt;
&lt;br /&gt;
return DB.getSQLValueEx(trxName sql, params);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;DB.executeUpdateEx(sql.toString(), new Object[] { ... }, trxName);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Access control related =&lt;br /&gt;
&lt;br /&gt;
== Window access ==&lt;br /&gt;
&lt;br /&gt;
* Check whether currently logged in role has access to window&lt;br /&gt;
* @return null if no access, TRUE if r/w and FALSE if r/o&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;if (MRole.getDefault().getWindowAccess(m_AD_Window_ID) == null) { ... }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= UI related =&lt;br /&gt;
&lt;br /&gt;
== Busy Dialog ==&lt;br /&gt;
&lt;br /&gt;
 * BusyDialogTemplate: A busy dialog with an encapsulated Runnable&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Simple get message text ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Msg.getMsg(Env.getCtx(), &amp;quot;messagekey&amp;quot;)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Translation of column (element) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;String columnNameTrl = Msg.getElement(Env.getCtx(), columnName);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack Out =&lt;br /&gt;
&lt;br /&gt;
== Add support to export new or existing display type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;PoExporter.export&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= User preferences =&lt;br /&gt;
&lt;br /&gt;
* Untested, use at your own risk&lt;br /&gt;
* You can use the context for settings that don't need to be persisted.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;protected void savePreferences() {&lt;br /&gt;
		String note = txtNote.getText();&lt;br /&gt;
		UserPreference pref = SessionManager.getSessionApplication().getUserPreference();&lt;br /&gt;
		pref.setProperty(getPrefKeyForNote(), note);&lt;br /&gt;
		pref.savePreference();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	protected void loadPreferences() {&lt;br /&gt;
		UserPreference pref = SessionManager.getSessionApplication().getUserPreference();&lt;br /&gt;
		String note = pref.getProperty(getPrefKeyForNote());&lt;br /&gt;
		if (note==null) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		txtNote.setText(note);&lt;br /&gt;
	}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Context =&lt;br /&gt;
&lt;br /&gt;
== Adding a new context variable just after login ==&lt;br /&gt;
&lt;br /&gt;
* See: Login.loadPreferences&lt;br /&gt;
&lt;br /&gt;
= Logging =&lt;br /&gt;
&lt;br /&gt;
* For everything you need to know about logging in iDempiere, see the CLogMgt class&lt;br /&gt;
&lt;br /&gt;
= MD5, hashes, checksums, archives =&lt;br /&gt;
&lt;br /&gt;
== Compare MD5's and more ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;DigestOfFile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create zip archives ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Zipper&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Code paths =&lt;br /&gt;
&lt;br /&gt;
== User clicks on New record ==&lt;br /&gt;
&lt;br /&gt;
1) When user click on New Record button in any window, onNew() function in AbstractADWindowContent class is executed. Please check AbstractADWindowContent class for other functions (onSave,onProcess,onReport etc) as well.&lt;br /&gt;
&lt;br /&gt;
2) getCurrentNext() and setCurrentNext() in MSequence class. Thank you very much Anozi Mada&lt;br /&gt;
&lt;br /&gt;
Regards,&lt;br /&gt;
Shanil Fernando&lt;br /&gt;
&lt;br /&gt;
Reference: https://groups.google.com/forum/#!topic/idempiere/aSsv1MkciwM&lt;br /&gt;
&lt;br /&gt;
== Toolbar delete button == &lt;br /&gt;
&lt;br /&gt;
* Where do I find the code which handles deletion of a record from the toolbar?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onDeleteCallback&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toolbar refresh button ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onRefresh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toolbar export button ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onExport&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
* See: ExportAction&lt;br /&gt;
&lt;br /&gt;
== Toolbar import button ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onFileImport --&amp;gt; FileImportAction .fileImport --&amp;gt; importFile --&amp;gt; GridTabCSVImporter.fileImport &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Process Dialog ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog to start process or report ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ProcessDialog&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Process Info Dialog ===&lt;br /&gt;
&lt;br /&gt;
* The dialog shown after a user starts a process from a window&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ProcessInfoDialog&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Shown from:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.updateUI&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== User starts process by clicking on a button on a window ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.actionButton&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Clicking on a menu item ==&lt;br /&gt;
&lt;br /&gt;
Where do I find the code which responds to an item being clicked on the menu?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractDesktop.onMenuSelected&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Opening of a window ==&lt;br /&gt;
&lt;br /&gt;
* Where is the opening of a window handled?&lt;br /&gt;
** Same class for form, process, workflow, info&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;TabbedDesktop.openWindow&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Display and layout of fields ==&lt;br /&gt;
&lt;br /&gt;
* Where do I find the logic which handles the display and layout of fields in a standard iDempiere window?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ADTabpanel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where is formatting is applied to fields (example, required fields highlighted in red)?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;WEditor.applyLabelStyles&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where do I find the container for a field which is displayed in a window?&lt;br /&gt;
** Also handles setting the default value for a field&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;GridField&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where are callouts processed?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;GridTab.processCallout&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where is the field change event for when a value changes on a window? &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;GridTab.processFieldChange&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Printing ==&lt;br /&gt;
&lt;br /&gt;
* Handle printing for various documents&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ServerReportCtl&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Application startups ==&lt;br /&gt;
&lt;br /&gt;
=== Model Generator ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ModelGeneratorApplication -&amp;gt;  ModelClassGeneratorDialog -&amp;gt; ModelClassGenerator&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_API&amp;diff=11371</id>
		<title>IDempiere API</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_API&amp;diff=11371"/>
		<updated>2017-04-21T12:43:05Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: /* Toolbar export button */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Developer documentation]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
The purpose of this page is to share commonly used iDempiere API calls.&lt;br /&gt;
&lt;br /&gt;
Feel free to contribute here to improve the coverage of documentation.&lt;br /&gt;
&lt;br /&gt;
= Get the client ID =&lt;br /&gt;
&lt;br /&gt;
Env.getContextAsInt(ctx, &amp;quot;#AD_Client_ID&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
= Get the base currency = &lt;br /&gt;
&lt;br /&gt;
MClient.get(Env.getCtx()).getC_Currency_ID()&lt;br /&gt;
&lt;br /&gt;
= Get the process ID for process with key =&lt;br /&gt;
&lt;br /&gt;
int AD_Process_ID = MProcess.getProcess_ID(&amp;quot;KeyValueOfProcess&amp;quot;, null);&lt;br /&gt;
&lt;br /&gt;
= Start a report &amp;amp; process =&lt;br /&gt;
&lt;br /&gt;
ProcessUtil.startJavaProcess(ctx, poInfo, trx);&lt;br /&gt;
&lt;br /&gt;
* See FinReportJasper in the base code for example&lt;br /&gt;
&lt;br /&gt;
= Commit transaction =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Trx trx = Trx.get(get_TrxName(), false);&lt;br /&gt;
trx.commit(true);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Complete document =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;String docAction = DocAction.ACTION_Complete;&lt;br /&gt;
		posOrder.setDocAction( docAction );&lt;br /&gt;
		posOrder.processIt( docAction );&lt;br /&gt;
		posOrder.saveEx();&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NB: Check the document status after saving is equal to the expected status, otherwise an exception should be thrown.&lt;br /&gt;
&lt;br /&gt;
= Get the persistent object =&lt;br /&gt;
&lt;br /&gt;
== Standard ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MBPartner partner = new MBPartner(getCtx(), {0 for new record, or record id}, get_TrxName());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Model factory ==&lt;br /&gt;
&lt;br /&gt;
The following is work in progress&lt;br /&gt;
&lt;br /&gt;
* Using model factory, so that the correct model is returned, based on the available plugins.&lt;br /&gt;
** MTable.getPO (write a utility method to wrap)&lt;br /&gt;
** Use a Query (see the Query class)&lt;br /&gt;
** Write a utility method based on MTable.getPO, which doesn't require instantiating MTable&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public PO getPO (int Record_ID, String trxName)&lt;br /&gt;
	{&lt;br /&gt;
		String tableName = getTableName();&lt;br /&gt;
		if (Record_ID != 0 &amp;amp;&amp;amp; !isSingleKey())&lt;br /&gt;
		{&lt;br /&gt;
			log.log(Level.WARNING, &amp;quot;(id) - Multi-Key &amp;quot; + tableName);&lt;br /&gt;
			return null;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		PO po = null;&lt;br /&gt;
		List&amp;lt;IModelFactory&amp;gt; factoryList = Service.locator().list(IModelFactory.class).getServices();&lt;br /&gt;
		if (factoryList != null)&lt;br /&gt;
		{&lt;br /&gt;
			for(IModelFactory factory : factoryList)&lt;br /&gt;
			{&lt;br /&gt;
				po = factory.getPO(tableName, Record_ID, trxName);&lt;br /&gt;
				if (po != null)&lt;br /&gt;
				{&lt;br /&gt;
					if (po.get_ID() != Record_ID &amp;amp;&amp;amp; Record_ID &amp;gt; 0)&lt;br /&gt;
						po = null;&lt;br /&gt;
					else&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (po == null)&lt;br /&gt;
		{&lt;br /&gt;
			po = new GenericPO(tableName, getCtx(), Record_ID, trxName);&lt;br /&gt;
			if (po.get_ID() != Record_ID &amp;amp;&amp;amp; Record_ID &amp;gt; 0)&lt;br /&gt;
				po = null;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return po;&lt;br /&gt;
	}	//	getPO&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Reset the cache for a table =&lt;br /&gt;
&lt;br /&gt;
CacheMgt.get().reset(Table_Name);&lt;br /&gt;
&lt;br /&gt;
= Lock PO for update =&lt;br /&gt;
&lt;br /&gt;
see AdempiereDatabase.forUpdate:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;public boolean forUpdate(PO po, int timeout);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== Attach one or more files to a record ==&lt;br /&gt;
&lt;br /&gt;
* Example copied from the PIPO code:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MAttachment attachment = new MAttachment (adPackageImp.getCtx(), X_AD_Package_Imp_Proc.Table_ID, adPackageImp.getAD_Package_Imp_Proc_ID(), null);&lt;br /&gt;
attachment.addEntry(packageFile);&lt;br /&gt;
attachment.saveEx(); &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System configurator =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MSysConfig.getBooleanValue(&amp;quot;CONFIG_NAME&amp;quot;, true)&lt;br /&gt;
&lt;br /&gt;
String retValue = MSysConfig.getValue(&amp;quot;CONFIG_NAME&amp;quot;, &amp;quot;&amp;quot;);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Creating an order line =&lt;br /&gt;
&lt;br /&gt;
* Similiar logic applies to an invoice line.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MOrderLine line = new MOrderLine(order);&lt;br /&gt;
line.setC_BPartner_ID(C_BPartner_ID);&lt;br /&gt;
line.setM_Product_ID(M_Product_ID);&lt;br /&gt;
line.setQty(BigDecimal.ONE);&lt;br /&gt;
// Sets the price based on the price list&lt;br /&gt;
line.setPrice();&lt;br /&gt;
// Extends the qty&lt;br /&gt;
line.setLineNetAmt();&lt;br /&gt;
line.saveEx();&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methods for querying and updating data =&lt;br /&gt;
&lt;br /&gt;
== Query API ==&lt;br /&gt;
&lt;br /&gt;
* Example taken from ModelValidationEngine&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;MTable table = MTable.get(Env.getCtx(), X_AD_ModelValidator.Table_ID);&lt;br /&gt;
Query query = table.createQuery(&amp;quot;IsActive='Y'&amp;quot;, null);&lt;br /&gt;
query.setOrderBy(&amp;quot;SeqNo&amp;quot;);&lt;br /&gt;
..&lt;br /&gt;
List&amp;lt;X_AD_ModelValidator&amp;gt; entityTypes = query.list();&lt;br /&gt;
..&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;List&amp;lt;MInfoWindow&amp;gt; list = new Query(Env.getCtx(),&lt;br /&gt;
MInfoWindow.Table_Name, &amp;quot;IsValid='Y' AND&lt;br /&gt;
IsShowInDashboard='Y'&amp;quot;, null)&lt;br /&gt;
        .setOnlyActiveRecords(true)&lt;br /&gt;
        .setOrderBy(MInfoWindow.COLUMNNAME_SeqNo)&lt;br /&gt;
        .list();&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepared Statement ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;final String sql = &amp;quot;SELECT * FROM C_BPartner_Location WHERE C_BPartner_ID=? AND IsActive='Y'&amp;quot;&lt;br /&gt;
				+ &amp;quot; ORDER BY C_BPartner_Location_ID&amp;quot;;&lt;br /&gt;
PreparedStatement pstmt = null;&lt;br /&gt;
ResultSet rs = null;&lt;br /&gt;
try&lt;br /&gt;
{&lt;br /&gt;
	pstmt = DB.prepareStatement(sql, get_TrxName());&lt;br /&gt;
	pstmt.setInt(1, getC_BPartner_ID());&lt;br /&gt;
	rs = pstmt.executeQuery();&lt;br /&gt;
	while (rs.next())&lt;br /&gt;
		list.add(new MBPartnerLocation (getCtx(), rs, get_TrxName()));&lt;br /&gt;
}&lt;br /&gt;
catch (Exception e)&lt;br /&gt;
{&lt;br /&gt;
	log.log(Level.SEVERE, sql, e);&lt;br /&gt;
}&lt;br /&gt;
finally&lt;br /&gt;
{&lt;br /&gt;
	DB.close(rs, pstmt);&lt;br /&gt;
	rs = null; pstmt = null;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Get all IDs ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;int[] m_ids = PO.getAllIDs(MAttachment.Table_Name, &amp;quot; AD_Client_ID= &amp;quot; + MClient.get(getCtx()).getAD_Client_ID() + &amp;quot; Order By AD_Client_ID &amp;quot;, null);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DB.getSQLValue ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;StringBuilder sql = new StringBuilder();&lt;br /&gt;
sql.append(&amp;quot;select count(*) from TableName where TableName_ID=&amp;quot;).append(TableName_ID));&lt;br /&gt;
&lt;br /&gt;
return DB.getSQLValueEx(trxName sql, params);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;DB.executeUpdateEx(sql.toString(), new Object[] { ... }, trxName);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Access control related =&lt;br /&gt;
&lt;br /&gt;
== Window access ==&lt;br /&gt;
&lt;br /&gt;
* Check whether currently logged in role has access to window&lt;br /&gt;
* @return null if no access, TRUE if r/w and FALSE if r/o&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;if (MRole.getDefault().getWindowAccess(m_AD_Window_ID) == null) { ... }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= UI related =&lt;br /&gt;
&lt;br /&gt;
== Busy Dialog ==&lt;br /&gt;
&lt;br /&gt;
 * BusyDialogTemplate: A busy dialog with an encapsulated Runnable&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Simple get message text ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Msg.getMsg(Env.getCtx(), &amp;quot;messagekey&amp;quot;)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Translation of column (element) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;String columnNameTrl = Msg.getElement(Env.getCtx(), columnName);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack Out =&lt;br /&gt;
&lt;br /&gt;
== Add support to export new or existing display type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;PoExporter.export&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= User preferences =&lt;br /&gt;
&lt;br /&gt;
* Untested, use at your own risk&lt;br /&gt;
* You can use the context for settings that don't need to be persisted.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;protected void savePreferences() {&lt;br /&gt;
		String note = txtNote.getText();&lt;br /&gt;
		UserPreference pref = SessionManager.getSessionApplication().getUserPreference();&lt;br /&gt;
		pref.setProperty(getPrefKeyForNote(), note);&lt;br /&gt;
		pref.savePreference();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	protected void loadPreferences() {&lt;br /&gt;
		UserPreference pref = SessionManager.getSessionApplication().getUserPreference();&lt;br /&gt;
		String note = pref.getProperty(getPrefKeyForNote());&lt;br /&gt;
		if (note==null) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		txtNote.setText(note);&lt;br /&gt;
	}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Context =&lt;br /&gt;
&lt;br /&gt;
== Adding a new context variable just after login ==&lt;br /&gt;
&lt;br /&gt;
* See: Login.loadPreferences&lt;br /&gt;
&lt;br /&gt;
= Logging =&lt;br /&gt;
&lt;br /&gt;
* For everything you need to know about logging in iDempiere, see the CLogMgt class&lt;br /&gt;
&lt;br /&gt;
= MD5, hashes, checksums, archives =&lt;br /&gt;
&lt;br /&gt;
== Compare MD5's and more ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;DigestOfFile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create zip archives ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Zipper&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Code paths =&lt;br /&gt;
&lt;br /&gt;
== User clicks on New record ==&lt;br /&gt;
&lt;br /&gt;
1) When user click on New Record button in any window, onNew() function in AbstractADWindowContent class is executed. Please check AbstractADWindowContent class for other functions (onSave,onProcess,onReport etc) as well.&lt;br /&gt;
&lt;br /&gt;
2) getCurrentNext() and setCurrentNext() in MSequence class. Thank you very much Anozi Mada&lt;br /&gt;
&lt;br /&gt;
Regards,&lt;br /&gt;
Shanil Fernando&lt;br /&gt;
&lt;br /&gt;
Reference: https://groups.google.com/forum/#!topic/idempiere/aSsv1MkciwM&lt;br /&gt;
&lt;br /&gt;
== Toolbar delete button == &lt;br /&gt;
&lt;br /&gt;
* Where do I find the code which handles deletion of a record from the toolbar?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onDeleteCallback&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toolbar refresh button ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onRefresh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toolbar export button ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onExport&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
* See: ExportAction&lt;br /&gt;
&lt;br /&gt;
== Toolbar import button ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.onFileImport --&amp;gt; FileImportAction .fileImport --&amp;gt; importFile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Process Dialog ==&lt;br /&gt;
&lt;br /&gt;
=== Dialog to start process or report ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ProcessDialog&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Process Info Dialog ===&lt;br /&gt;
&lt;br /&gt;
* The dialog shown after a user starts a process from a window&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ProcessInfoDialog&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Shown from:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.updateUI&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== User starts process by clicking on a button on a window ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractADWindowContent.actionButton&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Clicking on a menu item ==&lt;br /&gt;
&lt;br /&gt;
Where do I find the code which responds to an item being clicked on the menu?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;AbstractDesktop.onMenuSelected&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Opening of a window ==&lt;br /&gt;
&lt;br /&gt;
* Where is the opening of a window handled?&lt;br /&gt;
** Same class for form, process, workflow, info&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;TabbedDesktop.openWindow&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Display and layout of fields ==&lt;br /&gt;
&lt;br /&gt;
* Where do I find the logic which handles the display and layout of fields in a standard iDempiere window?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ADTabpanel&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where is formatting is applied to fields (example, required fields highlighted in red)?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;WEditor.applyLabelStyles&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where do I find the container for a field which is displayed in a window?&lt;br /&gt;
** Also handles setting the default value for a field&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;GridField&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where are callouts processed?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;GridTab.processCallout&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Where is the field change event for when a value changes on a window? &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;GridTab.processFieldChange&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Printing ==&lt;br /&gt;
&lt;br /&gt;
* Handle printing for various documents&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ServerReportCtl&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Application startups ==&lt;br /&gt;
&lt;br /&gt;
=== Model Generator ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;ModelGeneratorApplication -&amp;gt;  ModelClassGeneratorDialog -&amp;gt; ModelClassGenerator&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11363</id>
		<title>Queries: AD</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11363"/>
		<updated>2017-04-15T01:31:20Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: /* Deletion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_client_id,value,name from ad_client order by ad_client_id;&lt;br /&gt;
&lt;br /&gt;
select ad_client_id from ad_client where name like 'A%'; &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Windows =&lt;br /&gt;
== Windows referencing a specific process ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select name from ad_window where ad_window_id in (&lt;br /&gt;
select ad_window_id from ad_tab where ad_process_id in (&lt;br /&gt;
select ad_process_id from ad_process where value = 'processname')&lt;br /&gt;
);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_window a&lt;br /&gt;
where a.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tab ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_tab a&lt;br /&gt;
where a.ad_window_id=id&lt;br /&gt;
&lt;br /&gt;
select distinct a.whereclause from ad_tab a &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.name as WindowName from ad_tab a&lt;br /&gt;
join ad_window b on a.ad_window_id = b.ad_window_id&lt;br /&gt;
where &lt;br /&gt;
	a.ad_table_id = &lt;br /&gt;
	(select ad_table_id from ad_table where name='tablename');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Field information =&lt;br /&gt;
&lt;br /&gt;
== Field ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_field a&lt;br /&gt;
join ad_tab b on a.ad_tab_id=b.ad_tab_id&lt;br /&gt;
where b.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Combining Window, tab, field ==&lt;br /&gt;
	&lt;br /&gt;
=== As a view ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drop view if exists zz_fieldinfo_v;&lt;br /&gt;
&lt;br /&gt;
create view zz_fieldinfo_v as&lt;br /&gt;
select &lt;br /&gt;
	tabtable.tablename as table_name, &lt;br /&gt;
	tabtable.entitytype as table_entitytype,&lt;br /&gt;
  	fld.isdisplayed as field_isdisplayed,&lt;br /&gt;
  	fld.seqno as field_seqno,&lt;br /&gt;
  	fld.name as field_name, &lt;br /&gt;
	col.columnname as column_name,&lt;br /&gt;
  	fld.displaylogic as field_display_logic,&lt;br /&gt;
	fld.readonlylogic as field_readonly_logic,&lt;br /&gt;
	tab.name as tab_name,&lt;br /&gt;
	win.name as WindowName, &lt;br /&gt;
	win.ad_window_id,&lt;br /&gt;
	tab.ad_tab_id,&lt;br /&gt;
  	tab.isactive as tab_isactive,&lt;br /&gt;
  	fld.ad_field_uu,&lt;br /&gt;
	fld.ad_field_id,&lt;br /&gt;
	fld.iscentrallymaintained as field_centrallymaintained,&lt;br /&gt;
	fld.ismandatory as field_ismandatory,&lt;br /&gt;
	fld.mandatorylogic as field_mandatorylogic,&lt;br /&gt;
	col.ad_element_id,&lt;br /&gt;
	ele.name as element_name,&lt;br /&gt;
	ref.name as ref_name, refvalue.name as ref_value,&lt;br /&gt;
	refvalue.ad_reference_id,&lt;br /&gt;
	reftabletbl.tablename as ref_table,&lt;br /&gt;
	col.created as column_created, col.updated as column_updated,&lt;br /&gt;
	fld.created as field_created, fld.updated as field_updated,&lt;br /&gt;
	fld.ad_val_rule_id as field_val_rule_id&lt;br /&gt;
from &lt;br /&gt;
	ad_field fld&lt;br /&gt;
join ad_tab tab on fld.ad_tab_id = tab.ad_tab_id&lt;br /&gt;
join ad_table tabtable on tabtable.ad_table_id = tab.ad_table_id&lt;br /&gt;
join ad_window win on tab.ad_window_id = win.ad_window_id&lt;br /&gt;
join ad_column col on fld.ad_column_id = col.ad_column_id&lt;br /&gt;
join ad_element ele on ele.ad_element_id = col.ad_element_id&lt;br /&gt;
left join ad_reference ref on col.ad_reference_id = ref.ad_reference_id&lt;br /&gt;
left join ad_reference refvalue on col.ad_reference_value_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_ref_table reftable on reftable.ad_reference_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_table reftabletbl on reftabletbl.ad_table_id = reftable.ad_table_id&lt;br /&gt;
order by win.name, tab.seqno, field_seqno;&lt;br /&gt;
&lt;br /&gt;
select field_display_name, field_ismandatory, field_mandatorylogic from zz_fieldinfo_v where windowname like  'C%' and field_mandatorylogic is not null;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show fields by update date (useful to run after loading 2pack) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select column_updated, column_name, * from zz_fieldinfo_v order by column_updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Form =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.entitytype, a.name, a.classname from ad_form a where a.entitytype='U' order by classname;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table =&lt;br /&gt;
== Table ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_table a&lt;br /&gt;
order by a.created desc;&lt;br /&gt;
&lt;br /&gt;
select a.* from ad_table a&lt;br /&gt;
where a.ad_table_id in (id, id)&lt;br /&gt;
&lt;br /&gt;
(select ad_table_id from ad_table where tablename='tablename')&lt;br /&gt;
&lt;br /&gt;
delete from ad_table where ad_table_id in (select ad_table_id from ad_table where tablename='tablename');&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table Columns =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.name, a.columnname, a.created from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in ((select ad_table_id from ad_table where tablename='tablename'))&lt;br /&gt;
order by a.name;&lt;br /&gt;
--order by a.created desc;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Menu =&lt;br /&gt;
&lt;br /&gt;
== All the main (root) menu items in a tree ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;SELECT m.name, mm.* FROM AD_TreeNodeMM mm&lt;br /&gt;
left join ad_menu m on mm.node_id = m.ad_menu_id&lt;br /&gt;
WHERE mm.AD_Tree_ID=1000171 and mm.parent_id=0;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update entity type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set entitytype='U' where ad_column_id=3510;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Callout =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.ad_column_id,tbl.tablename, a.columnname,a.name, a.callout from ad_column a&lt;br /&gt;
join ad_table tbl on a.ad_table_id = tbl.ad_table_id&lt;br /&gt;
where a.callout is not null and a.callout like '%bPartner%'&lt;br /&gt;
--and tbl.tablename = 'C_BankStatementLine'&lt;br /&gt;
order by tbl.tablename, a.callout, a.name;&lt;br /&gt;
--order by a.updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update callout ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set callout = 'org.compiere.model.CalloutInvoiceNew.bPartner' where ad_column_id = 3499;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_ref_list where ad_reference_id in ( select ad_reference_id from ad_reference where name = 'Ref Name' );&lt;br /&gt;
-&lt;br /&gt;
Incomplete:&lt;br /&gt;
left join&lt;br /&gt;
	ad_reference ref on ref.name = 'ZZ_Status'&lt;br /&gt;
left join&lt;br /&gt;
	ad_ref_list reflist on reflist.ad_reference_id = ref.ad_reference_id and reflist.value = perm.zz_status&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For use in Jasper Report to lookup reference name ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( SELECT rl.name FROM ad_ref_list rl WHERE ((rl.ad_reference_id = (select ad_reference_id from ad_reference where name = 'my ref name')::numeric) AND ((rl.value)::text = (v.ice_fuel_type)::text))) AS field_name&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Validation Rules ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_val_rule_id, name, code from ad_val_rule where upper(code) like upper('%quota%');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Elements =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.* from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in (1000153, 1000152, 1000154, 1000156)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Report and process =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_process order by created desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select ad_process_id, value, name,description, classname, jasperreport from ad_process where upper(value) like upper('%') order by value;&lt;br /&gt;
&lt;br /&gt;
select * from ad_process_para where ad_process_para_id = 1000000;&lt;br /&gt;
&lt;br /&gt;
select columnname, name, defaultvalue from ad_process_para where ad_process_id = 1000000 order by seqno;&lt;br /&gt;
&lt;br /&gt;
update ad_process_para set defaultvalue='1' where ad_process_id = 1000000 and columnname = 'columname';	--Sequence&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Deletion =&lt;br /&gt;
== Delete all fields on window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name like 'Name of window' &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields on tab ==&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1. &lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where name = 'tabname' and ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name = 'Name of window' &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE' ) &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_tab_uu in ( 'REPLACEWITHWINDOWUUHERE' ) );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all occurences of column from windows ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_column_id in &lt;br /&gt;
( select ad_column_id from ad_column where upper(columnname) like upper('zz_nbsm_matchsetup_id') )&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete index definitions on table ==&lt;br /&gt;
&lt;br /&gt;
* NB: Indexes not dropped automatically&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_indexcolumn where AD_TableIndex_ID in (select ad_tableindex_id from ad_tableindex where ad_table_id = 318);&lt;br /&gt;
&lt;br /&gt;
delete from AD_TableIndex where ad_table_id = 318;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sequences =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_sequence a set CURRENTNEXTSYS =13000  where a.name = 'name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Doctype =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_doctype_id from c_doctype where name = 'DocumentName'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== All pack-in attachments ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_attachment where ad_table_id = 50008 and record_id in (&lt;br /&gt;
  select AD_Package_Imp_Proc_id from AD_Package_Imp_Proc where name like '%%' &lt;br /&gt;
  );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Synchronize Translations =&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_process_trl a set name = b.name, description = b.name from ad_process b where a.ad_process_id = b.ad_process_id and b.name = 'Process Name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Various helpers (work in progress) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_message_id, value, msgtext, msgtip from ad_message where upper(msgtext) like upper('%login%') order by msgtext;&lt;br /&gt;
&lt;br /&gt;
drop view if exists zz_trl_helper_field_v;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_trl_helper_field_v  as &lt;br /&gt;
select &lt;br /&gt;
	main.ad_field_id, &lt;br /&gt;
	trl.ad_language, trl.ad_field_trl_uu, &lt;br /&gt;
	main.ad_field_uu, main.name as field_name, main.description as main_description, &lt;br /&gt;
	trl.name as trl_name, trl.description as trl_description, &lt;br /&gt;
	win.name as window_name, &lt;br /&gt;
	col.columnname&lt;br /&gt;
from&lt;br /&gt;
ad_field main&lt;br /&gt;
join ad_field_trl trl on trl.ad_field_id = main.ad_field_id&lt;br /&gt;
join ad_column col on col.ad_column_id = main.ad_column_id&lt;br /&gt;
join ad_tab tab on tab.ad_tab_id = main.ad_tab_id&lt;br /&gt;
join ad_window win on win.ad_window_id = tab.ad_window_id;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select * from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = '';&lt;br /&gt;
&lt;br /&gt;
update ad_field_trl set name = 'name', description = 'name' where ad_field_trl_uu in (&lt;br /&gt;
	select ad_field_trl_uu from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = ''&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
select main.ad_process_id, trl.ad_language, trl.ad_process_para_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_process_para main&lt;br /&gt;
join ad_process_para_trl trl on trl.ad_process_para_id = main.ad_process_para_id&lt;br /&gt;
where &lt;br /&gt;
	ad_process_id in ( select ad_process_id from ad_process where name like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_column_id, trl.ad_language, trl.ad_column_trl_uu, main.columnname, main.name, main.description, trl.name from&lt;br /&gt;
ad_column main&lt;br /&gt;
join ad_column_trl trl on trl.ad_column_id = main.ad_column_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_column_id in ( select ad_column_id from ad_column where columnname like '' );&lt;br /&gt;
	&lt;br /&gt;
select main.ad_element_id, trl.ad_language, trl.ad_element_trl_uu, main.columnname, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_element main&lt;br /&gt;
join ad_element_trl trl on trl.ad_element_id = main.ad_element_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_element_id in ( select ad_element_id from ad_element where columnname like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_menu_id, main.ad_menu_uu, trl.ad_language, trl.ad_menu_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_menu main&lt;br /&gt;
join ad_menu_trl trl on trl.ad_menu_id = main.ad_menu_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_menu_id in ( select ad_menu_id from ad_menu where name like '' );&lt;br /&gt;
&lt;br /&gt;
-- For 2pack (sync UUID's)&lt;br /&gt;
update ad_menu_trl &lt;br /&gt;
set ad_menu_trl_uu = '521bf63c-c0ab-40ac-a188-fe7cfd0a9612'&lt;br /&gt;
from ad_menu b&lt;br /&gt;
where &lt;br /&gt;
ad_menu_trl.ad_menu_id = b.ad_menu_id&lt;br /&gt;
and b.ad_menu_uu = 'ccf0fc37-76cc-4a3c-8e1c-80d4c28e695a';&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack out =&lt;br /&gt;
&lt;br /&gt;
== Backup AD information before running 2pack ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * into bk_rq16_process from ad_process;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_table from ad_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_column from ad_column;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_window from ad_window;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_tab from ad_tab;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_field from ad_field;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_reference from ad_reference;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_table from ad_ref_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_list from ad_ref_list;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields + tabs on windows (for Pack In) ==&lt;br /&gt;
&lt;br /&gt;
* Helps to ensure is packed in correctly&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* See also under the heading: 'Deletion'&lt;br /&gt;
&lt;br /&gt;
== Packout/Packin package details ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Imp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
-- For searching for tables linked to packouts&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Duplicate key error when importing AD_Message ==&lt;br /&gt;
&lt;br /&gt;
* unique constraint (...AD_MESSAGE_TRL_KEY) violated&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_message_trl&lt;br /&gt;
WHERE AD_Message_ID=&lt;br /&gt;
( SELECT ad_message_id FROM ad_message WHERE value='KEYOFMESSAGE' );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all attachments of process ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_attachment where record_id in (&lt;br /&gt;
	select ad_process_id from ad_process where value like '%MYPROCESSKEY%' ) and &lt;br /&gt;
ad_table_id = (select ad_table_id from ad_table where tablename='AD_Process');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Migration scripts =&lt;br /&gt;
&lt;br /&gt;
== Which migration scripts have been run ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select releaseno,created,name,status,isapply,filename, script  from ad_migrationscript order by releaseno, name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11359</id>
		<title>Queries: AD</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11359"/>
		<updated>2017-04-11T00:40:00Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: /* Packout/Packin package details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_client_id,value,name from ad_client order by ad_client_id;&lt;br /&gt;
&lt;br /&gt;
select ad_client_id from ad_client where name like 'A%'; &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Windows =&lt;br /&gt;
== Windows referencing a specific process ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select name from ad_window where ad_window_id in (&lt;br /&gt;
select ad_window_id from ad_tab where ad_process_id in (&lt;br /&gt;
select ad_process_id from ad_process where value = 'processname')&lt;br /&gt;
);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_window a&lt;br /&gt;
where a.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tab ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_tab a&lt;br /&gt;
where a.ad_window_id=id&lt;br /&gt;
&lt;br /&gt;
select distinct a.whereclause from ad_tab a &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.name as WindowName from ad_tab a&lt;br /&gt;
join ad_window b on a.ad_window_id = b.ad_window_id&lt;br /&gt;
where &lt;br /&gt;
	a.ad_table_id = &lt;br /&gt;
	(select ad_table_id from ad_table where name='tablename');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Field information =&lt;br /&gt;
&lt;br /&gt;
== Field ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_field a&lt;br /&gt;
join ad_tab b on a.ad_tab_id=b.ad_tab_id&lt;br /&gt;
where b.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Combining Window, tab, field ==&lt;br /&gt;
	&lt;br /&gt;
=== As a view ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drop view if exists zz_fieldinfo_v;&lt;br /&gt;
&lt;br /&gt;
create view zz_fieldinfo_v as&lt;br /&gt;
select &lt;br /&gt;
	tabtable.tablename as table_name, &lt;br /&gt;
	tabtable.entitytype as table_entitytype,&lt;br /&gt;
  	fld.isdisplayed as field_isdisplayed,&lt;br /&gt;
  	fld.seqno as field_seqno,&lt;br /&gt;
  	fld.name as field_name, &lt;br /&gt;
	col.columnname as column_name,&lt;br /&gt;
  	fld.displaylogic as field_display_logic,&lt;br /&gt;
	fld.readonlylogic as field_readonly_logic,&lt;br /&gt;
	tab.name as tab_name,&lt;br /&gt;
	win.name as WindowName, &lt;br /&gt;
	win.ad_window_id,&lt;br /&gt;
	tab.ad_tab_id,&lt;br /&gt;
  	tab.isactive as tab_isactive,&lt;br /&gt;
  	fld.ad_field_uu,&lt;br /&gt;
	fld.ad_field_id,&lt;br /&gt;
	fld.iscentrallymaintained as field_centrallymaintained,&lt;br /&gt;
	fld.ismandatory as field_ismandatory,&lt;br /&gt;
	fld.mandatorylogic as field_mandatorylogic,&lt;br /&gt;
	col.ad_element_id,&lt;br /&gt;
	ele.name as element_name,&lt;br /&gt;
	ref.name as ref_name, refvalue.name as ref_value,&lt;br /&gt;
	refvalue.ad_reference_id,&lt;br /&gt;
	reftabletbl.tablename as ref_table,&lt;br /&gt;
	col.created as column_created, col.updated as column_updated,&lt;br /&gt;
	fld.created as field_created, fld.updated as field_updated,&lt;br /&gt;
	fld.ad_val_rule_id as field_val_rule_id&lt;br /&gt;
from &lt;br /&gt;
	ad_field fld&lt;br /&gt;
join ad_tab tab on fld.ad_tab_id = tab.ad_tab_id&lt;br /&gt;
join ad_table tabtable on tabtable.ad_table_id = tab.ad_table_id&lt;br /&gt;
join ad_window win on tab.ad_window_id = win.ad_window_id&lt;br /&gt;
join ad_column col on fld.ad_column_id = col.ad_column_id&lt;br /&gt;
join ad_element ele on ele.ad_element_id = col.ad_element_id&lt;br /&gt;
left join ad_reference ref on col.ad_reference_id = ref.ad_reference_id&lt;br /&gt;
left join ad_reference refvalue on col.ad_reference_value_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_ref_table reftable on reftable.ad_reference_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_table reftabletbl on reftabletbl.ad_table_id = reftable.ad_table_id&lt;br /&gt;
order by win.name, tab.seqno, field_seqno;&lt;br /&gt;
&lt;br /&gt;
select field_display_name, field_ismandatory, field_mandatorylogic from zz_fieldinfo_v where windowname like  'C%' and field_mandatorylogic is not null;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show fields by update date (useful to run after loading 2pack) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select column_updated, column_name, * from zz_fieldinfo_v order by column_updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Form =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.entitytype, a.name, a.classname from ad_form a where a.entitytype='U' order by classname;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table =&lt;br /&gt;
== Table ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_table a&lt;br /&gt;
order by a.created desc;&lt;br /&gt;
&lt;br /&gt;
select a.* from ad_table a&lt;br /&gt;
where a.ad_table_id in (id, id)&lt;br /&gt;
&lt;br /&gt;
(select ad_table_id from ad_table where tablename='tablename')&lt;br /&gt;
&lt;br /&gt;
delete from ad_table where ad_table_id in (select ad_table_id from ad_table where tablename='tablename');&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table Columns =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.name, a.columnname, a.created from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in ((select ad_table_id from ad_table where tablename='tablename'))&lt;br /&gt;
order by a.name;&lt;br /&gt;
--order by a.created desc;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Menu =&lt;br /&gt;
&lt;br /&gt;
== All the main (root) menu items in a tree ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;SELECT m.name, mm.* FROM AD_TreeNodeMM mm&lt;br /&gt;
left join ad_menu m on mm.node_id = m.ad_menu_id&lt;br /&gt;
WHERE mm.AD_Tree_ID=1000171 and mm.parent_id=0;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update entity type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set entitytype='U' where ad_column_id=3510;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Callout =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.ad_column_id,tbl.tablename, a.columnname,a.name, a.callout from ad_column a&lt;br /&gt;
join ad_table tbl on a.ad_table_id = tbl.ad_table_id&lt;br /&gt;
where a.callout is not null and a.callout like '%bPartner%'&lt;br /&gt;
--and tbl.tablename = 'C_BankStatementLine'&lt;br /&gt;
order by tbl.tablename, a.callout, a.name;&lt;br /&gt;
--order by a.updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update callout ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set callout = 'org.compiere.model.CalloutInvoiceNew.bPartner' where ad_column_id = 3499;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_ref_list where ad_reference_id in ( select ad_reference_id from ad_reference where name = 'Ref Name' );&lt;br /&gt;
-&lt;br /&gt;
Incomplete:&lt;br /&gt;
left join&lt;br /&gt;
	ad_reference ref on ref.name = 'ZZ_Status'&lt;br /&gt;
left join&lt;br /&gt;
	ad_ref_list reflist on reflist.ad_reference_id = ref.ad_reference_id and reflist.value = perm.zz_status&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For use in Jasper Report to lookup reference name ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( SELECT rl.name FROM ad_ref_list rl WHERE ((rl.ad_reference_id = (select ad_reference_id from ad_reference where name = 'my ref name')::numeric) AND ((rl.value)::text = (v.ice_fuel_type)::text))) AS field_name&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Validation Rules ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_val_rule_id, name, code from ad_val_rule where upper(code) like upper('%quota%');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Elements =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.* from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in (1000153, 1000152, 1000154, 1000156)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Report and process =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_process order by created desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select ad_process_id, value, name,description, classname, jasperreport from ad_process where upper(value) like upper('%') order by value;&lt;br /&gt;
&lt;br /&gt;
select * from ad_process_para where ad_process_para_id = 1000000;&lt;br /&gt;
&lt;br /&gt;
select columnname, name, defaultvalue from ad_process_para where ad_process_id = 1000000 order by seqno;&lt;br /&gt;
&lt;br /&gt;
update ad_process_para set defaultvalue='1' where ad_process_id = 1000000 and columnname = 'columname';	--Sequence&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Deletion =&lt;br /&gt;
== Delete all fields on window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name like 'Name of window' &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields on tab ==&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1. &lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where name = 'tabname' and ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name = 'Name of window' &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE' ) &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_tab_uu in ( 'REPLACEWITHWINDOWUUHERE' ) );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all occurences of column from windows ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_column_id in &lt;br /&gt;
( select ad_column_id from ad_column where upper(columnname) like upper('zz_nbsm_matchsetup_id') )&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sequences =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_sequence a set CURRENTNEXTSYS =13000  where a.name = 'name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Doctype =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_doctype_id from c_doctype where name = 'DocumentName'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== All pack-in attachments ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_attachment where ad_table_id = 50008 and record_id in (&lt;br /&gt;
  select AD_Package_Imp_Proc_id from AD_Package_Imp_Proc where name like '%%' &lt;br /&gt;
  );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Synchronize Translations =&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_process_trl a set name = b.name, description = b.name from ad_process b where a.ad_process_id = b.ad_process_id and b.name = 'Process Name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Various helpers (work in progress) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_message_id, value, msgtext, msgtip from ad_message where upper(msgtext) like upper('%login%') order by msgtext;&lt;br /&gt;
&lt;br /&gt;
drop view if exists zz_trl_helper_field_v;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_trl_helper_field_v  as &lt;br /&gt;
select &lt;br /&gt;
	main.ad_field_id, &lt;br /&gt;
	trl.ad_language, trl.ad_field_trl_uu, &lt;br /&gt;
	main.ad_field_uu, main.name as field_name, main.description as main_description, &lt;br /&gt;
	trl.name as trl_name, trl.description as trl_description, &lt;br /&gt;
	win.name as window_name, &lt;br /&gt;
	col.columnname&lt;br /&gt;
from&lt;br /&gt;
ad_field main&lt;br /&gt;
join ad_field_trl trl on trl.ad_field_id = main.ad_field_id&lt;br /&gt;
join ad_column col on col.ad_column_id = main.ad_column_id&lt;br /&gt;
join ad_tab tab on tab.ad_tab_id = main.ad_tab_id&lt;br /&gt;
join ad_window win on win.ad_window_id = tab.ad_window_id;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select * from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = '';&lt;br /&gt;
&lt;br /&gt;
update ad_field_trl set name = 'name', description = 'name' where ad_field_trl_uu in (&lt;br /&gt;
	select ad_field_trl_uu from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = ''&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
select main.ad_process_id, trl.ad_language, trl.ad_process_para_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_process_para main&lt;br /&gt;
join ad_process_para_trl trl on trl.ad_process_para_id = main.ad_process_para_id&lt;br /&gt;
where &lt;br /&gt;
	ad_process_id in ( select ad_process_id from ad_process where name like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_column_id, trl.ad_language, trl.ad_column_trl_uu, main.columnname, main.name, main.description, trl.name from&lt;br /&gt;
ad_column main&lt;br /&gt;
join ad_column_trl trl on trl.ad_column_id = main.ad_column_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_column_id in ( select ad_column_id from ad_column where columnname like '' );&lt;br /&gt;
	&lt;br /&gt;
select main.ad_element_id, trl.ad_language, trl.ad_element_trl_uu, main.columnname, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_element main&lt;br /&gt;
join ad_element_trl trl on trl.ad_element_id = main.ad_element_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_element_id in ( select ad_element_id from ad_element where columnname like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_menu_id, main.ad_menu_uu, trl.ad_language, trl.ad_menu_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_menu main&lt;br /&gt;
join ad_menu_trl trl on trl.ad_menu_id = main.ad_menu_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_menu_id in ( select ad_menu_id from ad_menu where name like '' );&lt;br /&gt;
&lt;br /&gt;
-- For 2pack (sync UUID's)&lt;br /&gt;
update ad_menu_trl &lt;br /&gt;
set ad_menu_trl_uu = '521bf63c-c0ab-40ac-a188-fe7cfd0a9612'&lt;br /&gt;
from ad_menu b&lt;br /&gt;
where &lt;br /&gt;
ad_menu_trl.ad_menu_id = b.ad_menu_id&lt;br /&gt;
and b.ad_menu_uu = 'ccf0fc37-76cc-4a3c-8e1c-80d4c28e695a';&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack out =&lt;br /&gt;
&lt;br /&gt;
== Backup AD information before running 2pack ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * into bk_rq16_process from ad_process;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_table from ad_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_column from ad_column;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_window from ad_window;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_tab from ad_tab;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_field from ad_field;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_reference from ad_reference;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_table from ad_ref_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_list from ad_ref_list;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields + tabs on windows (for Pack In) ==&lt;br /&gt;
&lt;br /&gt;
* Helps to ensure is packed in correctly&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* See also under the heading: 'Deletion'&lt;br /&gt;
&lt;br /&gt;
== Packout/Packin package details ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Imp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
-- For searching for tables linked to packouts&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Duplicate key error when importing AD_Message ==&lt;br /&gt;
&lt;br /&gt;
* unique constraint (...AD_MESSAGE_TRL_KEY) violated&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_message_trl&lt;br /&gt;
WHERE AD_Message_ID=&lt;br /&gt;
( SELECT ad_message_id FROM ad_message WHERE value='KEYOFMESSAGE' );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all attachments of process ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_attachment where record_id in (&lt;br /&gt;
	select ad_process_id from ad_process where value like '%MYPROCESSKEY%' ) and &lt;br /&gt;
ad_table_id = (select ad_table_id from ad_table where tablename='AD_Process');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Migration scripts =&lt;br /&gt;
&lt;br /&gt;
== Which migration scripts have been run ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select releaseno,created,name,status,isapply,filename, script  from ad_migrationscript order by releaseno, name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_Bank_Statement&amp;diff=11358</id>
		<title>Queries: Bank Statement</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_Bank_Statement&amp;diff=11358"/>
		<updated>2017-04-08T14:30:57Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: /* Rough working queries to reinstate voided bank statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_bankstatement_id,name from c_bankstatement where ad_client_id = 1000009 order by name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Rough working queries to reinstate voided bank statement =&lt;br /&gt;
&lt;br /&gt;
* Possibly could be converted into a plugin&lt;br /&gt;
* Refer to MBankStatement.voidIt&lt;br /&gt;
* It should also be possible to simply delete the bank statement and reinsert the copy before void was done instead of using the staging table, but I didn't try it.&lt;br /&gt;
* Take a backup before running any queries&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select docstatus, beginningbalance, statementdifference, endingbalance, * from c_bankstatement where C_BankStatement_ID=1000555;&lt;br /&gt;
&lt;br /&gt;
-- Backup&lt;br /&gt;
select * into bk_20170408_bankstatement from c_bankstatement where c_bankstatement_id = 1000555;&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20170408_bankstatement;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20170408_bankstatementline from c_bankstatementline where c_bankstatement_id = 1000555;&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20170408_bankstatementline;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20170408_payment from c_payment;&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20170408_payment;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20170408_c_bankaccount from c_bankaccount where c_bankaccount_id  =&lt;br /&gt;
(select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000555);&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20170408_c_bankaccount;&lt;br /&gt;
&lt;br /&gt;
-- Staging tables (must contain the original data before void was done)&lt;br /&gt;
select * into zz_stage_bankstatement from c_bankstatement where c_bankstatement_id = 1000555;&lt;br /&gt;
-- delete from zz_stage_bankstatement;&lt;br /&gt;
select * into zz_stage_bankstatementline from c_bankstatementline where c_bankstatement_id = 1000555;&lt;br /&gt;
-- delete from zz_stage_bankstatementline;&lt;br /&gt;
&lt;br /&gt;
select count(*) from zz_stage_bankstatement;&lt;br /&gt;
select count(*) from zz_stage_bankstatementline;&lt;br /&gt;
select count(*) from c_bankstatement where c_bankstatement_id = 1000555;&lt;br /&gt;
select count(*) from c_bankstatementline where c_bankstatement_id = 1000555;&lt;br /&gt;
select count(*) from c_bankstatementline where c_bankstatement_id = 1000555 and c_payment_id is not null; --0; 90 on restore&lt;br /&gt;
&lt;br /&gt;
select count(*) from c_payment where isreconciled = 'Y' and c_payment_id in (select c_payment_id from c_bankstatementline where c_bankstatement_id = 1000555); -- 90&lt;br /&gt;
&lt;br /&gt;
update c_bankstatement&lt;br /&gt;
	set&lt;br /&gt;
		docstatus = b.docstatus ,&lt;br /&gt;
		docaction = b.docaction ,&lt;br /&gt;
		processed = b.processed ,&lt;br /&gt;
		description = b.description ,&lt;br /&gt;
		statementdifference = b.statementdifference&lt;br /&gt;
from&lt;br /&gt;
	zz_stage_bankstatement b &lt;br /&gt;
where &lt;br /&gt;
	c_bankstatement.c_bankstatement_id = 1000555 and &lt;br /&gt;
	c_bankstatement.c_bankstatement_id = b.c_bankstatement_id ;&lt;br /&gt;
&lt;br /&gt;
update c_bankstatementline&lt;br /&gt;
	set&lt;br /&gt;
		description = b.description ,&lt;br /&gt;
		stmtamt = b.stmtamt ,&lt;br /&gt;
		trxamt = b.trxamt ,&lt;br /&gt;
		chargeamt = b.chargeamt ,&lt;br /&gt;
		interestamt = b.interestamt,&lt;br /&gt;
		c_payment_id = b.c_payment_id&lt;br /&gt;
from&lt;br /&gt;
	zz_stage_bankstatementline b &lt;br /&gt;
where &lt;br /&gt;
	c_bankstatementline.c_bankstatement_id = 1000555 and&lt;br /&gt;
	c_bankstatementline.c_bankstatementline_id = b.c_bankstatementline_id ;&lt;br /&gt;
&lt;br /&gt;
-- ba.setCurrentBalance(ba.getCurrentBalance().subtract(getStatementDifference()));&lt;br /&gt;
&lt;br /&gt;
select currentbalance from c_bankaccount where c_bankaccount_id = ( &lt;br /&gt;
	select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000555 &lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
-- See MBankStatement.voidIt: &lt;br /&gt;
--  ba.setCurrentBalance(ba.getCurrentBalance().subtract(getStatementDifference()));&lt;br /&gt;
update c_bankaccount&lt;br /&gt;
set currentBalance = currentBalance + &lt;br /&gt;
(select statementdifference from c_bankstatement where c_bankstatement_id = 1000555)&lt;br /&gt;
where c_bankaccount_id = ( &lt;br /&gt;
	select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000555 &lt;br /&gt;
	)&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
select currentbalance from c_bankaccount where c_bankaccount_id = ( &lt;br /&gt;
	select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000555 &lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
update c_payment set&lt;br /&gt;
isreconciled = 'Y' &lt;br /&gt;
where c_payment_id in (select c_payment_id from c_bankstatementline where c_bankstatement_id = 1000555);&lt;br /&gt;
&lt;br /&gt;
-- Expect 90&lt;br /&gt;
select count(*) from c_payment where isreconciled = 'Y' and c_payment_id in (select c_payment_id from c_bankstatementline where c_bankstatement_id = 1000555);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_Bank_Statement&amp;diff=11357</id>
		<title>Queries: Bank Statement</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_Bank_Statement&amp;diff=11357"/>
		<updated>2017-04-08T13:51:48Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_bankstatement_id,name from c_bankstatement where ad_client_id = 1000009 order by name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Rough working queries to reinstate voided bank statement =&lt;br /&gt;
&lt;br /&gt;
* Possibly could be converted into a plugin&lt;br /&gt;
* Refer to MBankStatement.voidIt&lt;br /&gt;
* It should also be possible to simply delete the bank statement and reinsert the copy before void was done instead of using the staging table, but I didn't try it.&lt;br /&gt;
* Take a backup before running any queries&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;-- select docstatus, * from c_bankstatement where C_BankStatement_ID=1000555;&lt;br /&gt;
&lt;br /&gt;
-- Backup&lt;br /&gt;
select * into bk_20170408_bankstatement from c_bankstatement where c_bankstatement_id = 1000555;&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20170408_bankstatement;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20170408_bankstatementline from c_bankstatementline where c_bankstatement_id = 1000555;&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20170408_bankstatementline;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20170408_payment from c_payment;&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20170408_payment;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20170408_c_bankaccount from c_bankaccount where c_bankaccount_id  =&lt;br /&gt;
(select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000555);&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20170408_c_bankaccount;&lt;br /&gt;
&lt;br /&gt;
-- Staging tables (must contain the original data before void was done)&lt;br /&gt;
select * into zz_stage_bankstatement from c_bankstatement where c_bankstatement_id = 1000555;&lt;br /&gt;
-- delete from zz_stage_bankstatement;&lt;br /&gt;
select * into zz_stage_bankstatementline from c_bankstatementline where c_bankstatement_id = 1000555;&lt;br /&gt;
-- delete from zz_stage_bankstatementline;&lt;br /&gt;
&lt;br /&gt;
select count(*) from zz_stage_bankstatement;&lt;br /&gt;
select count(*) from zz_stage_bankstatementline;&lt;br /&gt;
select count(*) from c_bankstatement where c_bankstatement_id = 1000555;&lt;br /&gt;
select count(*) from c_bankstatementline where c_bankstatement_id = 1000555;&lt;br /&gt;
select count(*) from c_bankstatementline where c_bankstatement_id = 1000555 and c_payment_id is not null; --0; 90 on restore&lt;br /&gt;
&lt;br /&gt;
select count(*) from c_payment where isreconciled = 'Y' and c_payment_id in (select c_payment_id from c_bankstatementline where c_bankstatement_id = 1000555); -- 90&lt;br /&gt;
&lt;br /&gt;
update c_bankstatement&lt;br /&gt;
	set&lt;br /&gt;
		docstatus = b.docstatus ,&lt;br /&gt;
		docaction = b.docaction ,&lt;br /&gt;
		processed = b.processed ,&lt;br /&gt;
		description = b.description ,&lt;br /&gt;
		statementdifference = b.statementdifference&lt;br /&gt;
from&lt;br /&gt;
	zz_stage_bankstatement b &lt;br /&gt;
where &lt;br /&gt;
	c_bankstatement.c_bankstatement_id = 1000555 and &lt;br /&gt;
	c_bankstatement.c_bankstatement_id = b.c_bankstatement_id ;&lt;br /&gt;
&lt;br /&gt;
update c_bankstatementline&lt;br /&gt;
	set&lt;br /&gt;
		description = b.description ,&lt;br /&gt;
		stmtamt = b.stmtamt ,&lt;br /&gt;
		trxamt = b.trxamt ,&lt;br /&gt;
		chargeamt = b.chargeamt ,&lt;br /&gt;
		interestamt = b.interestamt,&lt;br /&gt;
		c_payment_id = b.c_payment_id&lt;br /&gt;
from&lt;br /&gt;
	zz_stage_bankstatementline b &lt;br /&gt;
where &lt;br /&gt;
	c_bankstatementline.c_bankstatement_id = 1000555 and&lt;br /&gt;
	c_bankstatementline.c_bankstatementline_id = b.c_bankstatementline_id ;&lt;br /&gt;
&lt;br /&gt;
-- ba.setCurrentBalance(ba.getCurrentBalance().subtract(getStatementDifference()));&lt;br /&gt;
&lt;br /&gt;
select currentbalance from c_bankaccount where c_bankaccount_id = ( &lt;br /&gt;
	select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000555 &lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
-- See MBankStatement.voidIt: &lt;br /&gt;
--  ba.setCurrentBalance(ba.getCurrentBalance().subtract(getStatementDifference()));&lt;br /&gt;
update c_bankaccount&lt;br /&gt;
set currentBalance = currentBalance + &lt;br /&gt;
(select statementdifference from c_bankstatement where c_bankstatement_id = 1000555)&lt;br /&gt;
where c_bankaccount_id = ( &lt;br /&gt;
	select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000555 &lt;br /&gt;
	)&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
select currentbalance from c_bankaccount where c_bankaccount_id = ( &lt;br /&gt;
	select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000555 &lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
update c_payment set&lt;br /&gt;
isreconciled = 'Y' &lt;br /&gt;
where c_payment_id in (select c_payment_id from c_bankstatementline where c_bankstatement_id = 1000555);&lt;br /&gt;
&lt;br /&gt;
-- Expect 90&lt;br /&gt;
select count(*) from c_payment where isreconciled = 'Y' and c_payment_id in (select c_payment_id from c_bankstatementline where c_bankstatement_id = 1000555);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11354</id>
		<title>Queries: AD</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11354"/>
		<updated>2017-04-05T01:14:36Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: /* Delete all fields on tab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_client_id,value,name from ad_client order by ad_client_id;&lt;br /&gt;
&lt;br /&gt;
select ad_client_id from ad_client where name like 'A%'; &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Windows =&lt;br /&gt;
== Windows referencing a specific process ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select name from ad_window where ad_window_id in (&lt;br /&gt;
select ad_window_id from ad_tab where ad_process_id in (&lt;br /&gt;
select ad_process_id from ad_process where value = 'processname')&lt;br /&gt;
);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_window a&lt;br /&gt;
where a.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tab ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_tab a&lt;br /&gt;
where a.ad_window_id=id&lt;br /&gt;
&lt;br /&gt;
select distinct a.whereclause from ad_tab a &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.name as WindowName from ad_tab a&lt;br /&gt;
join ad_window b on a.ad_window_id = b.ad_window_id&lt;br /&gt;
where &lt;br /&gt;
	a.ad_table_id = &lt;br /&gt;
	(select ad_table_id from ad_table where name='tablename');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Field information =&lt;br /&gt;
&lt;br /&gt;
== Field ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_field a&lt;br /&gt;
join ad_tab b on a.ad_tab_id=b.ad_tab_id&lt;br /&gt;
where b.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Combining Window, tab, field ==&lt;br /&gt;
	&lt;br /&gt;
=== As a view ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drop view if exists zz_fieldinfo_v;&lt;br /&gt;
&lt;br /&gt;
create view zz_fieldinfo_v as&lt;br /&gt;
select &lt;br /&gt;
	tabtable.tablename as table_name, &lt;br /&gt;
	tabtable.entitytype as table_entitytype,&lt;br /&gt;
  	fld.isdisplayed as field_isdisplayed,&lt;br /&gt;
  	fld.seqno as field_seqno,&lt;br /&gt;
  	fld.name as field_name, &lt;br /&gt;
	col.columnname as column_name,&lt;br /&gt;
  	fld.displaylogic as field_display_logic,&lt;br /&gt;
	fld.readonlylogic as field_readonly_logic,&lt;br /&gt;
	tab.name as tab_name,&lt;br /&gt;
	win.name as WindowName, &lt;br /&gt;
	win.ad_window_id,&lt;br /&gt;
	tab.ad_tab_id,&lt;br /&gt;
  	tab.isactive as tab_isactive,&lt;br /&gt;
  	fld.ad_field_uu,&lt;br /&gt;
	fld.ad_field_id,&lt;br /&gt;
	fld.iscentrallymaintained as field_centrallymaintained,&lt;br /&gt;
	fld.ismandatory as field_ismandatory,&lt;br /&gt;
	fld.mandatorylogic as field_mandatorylogic,&lt;br /&gt;
	col.ad_element_id,&lt;br /&gt;
	ele.name as element_name,&lt;br /&gt;
	ref.name as ref_name, refvalue.name as ref_value,&lt;br /&gt;
	refvalue.ad_reference_id,&lt;br /&gt;
	reftabletbl.tablename as ref_table,&lt;br /&gt;
	col.created as column_created, col.updated as column_updated,&lt;br /&gt;
	fld.created as field_created, fld.updated as field_updated,&lt;br /&gt;
	fld.ad_val_rule_id as field_val_rule_id&lt;br /&gt;
from &lt;br /&gt;
	ad_field fld&lt;br /&gt;
join ad_tab tab on fld.ad_tab_id = tab.ad_tab_id&lt;br /&gt;
join ad_table tabtable on tabtable.ad_table_id = tab.ad_table_id&lt;br /&gt;
join ad_window win on tab.ad_window_id = win.ad_window_id&lt;br /&gt;
join ad_column col on fld.ad_column_id = col.ad_column_id&lt;br /&gt;
join ad_element ele on ele.ad_element_id = col.ad_element_id&lt;br /&gt;
left join ad_reference ref on col.ad_reference_id = ref.ad_reference_id&lt;br /&gt;
left join ad_reference refvalue on col.ad_reference_value_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_ref_table reftable on reftable.ad_reference_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_table reftabletbl on reftabletbl.ad_table_id = reftable.ad_table_id&lt;br /&gt;
order by win.name, tab.seqno, field_seqno;&lt;br /&gt;
&lt;br /&gt;
select field_display_name, field_ismandatory, field_mandatorylogic from zz_fieldinfo_v where windowname like  'C%' and field_mandatorylogic is not null;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show fields by update date (useful to run after loading 2pack) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select column_updated, column_name, * from zz_fieldinfo_v order by column_updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Form =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.entitytype, a.name, a.classname from ad_form a where a.entitytype='U' order by classname;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table =&lt;br /&gt;
== Table ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_table a&lt;br /&gt;
order by a.created desc;&lt;br /&gt;
&lt;br /&gt;
select a.* from ad_table a&lt;br /&gt;
where a.ad_table_id in (id, id)&lt;br /&gt;
&lt;br /&gt;
(select ad_table_id from ad_table where tablename='tablename')&lt;br /&gt;
&lt;br /&gt;
delete from ad_table where ad_table_id in (select ad_table_id from ad_table where tablename='tablename');&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table Columns =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.name, a.columnname, a.created from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in ((select ad_table_id from ad_table where tablename='tablename'))&lt;br /&gt;
order by a.name;&lt;br /&gt;
--order by a.created desc;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Menu =&lt;br /&gt;
&lt;br /&gt;
== All the main (root) menu items in a tree ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;SELECT m.name, mm.* FROM AD_TreeNodeMM mm&lt;br /&gt;
left join ad_menu m on mm.node_id = m.ad_menu_id&lt;br /&gt;
WHERE mm.AD_Tree_ID=1000171 and mm.parent_id=0;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update entity type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set entitytype='U' where ad_column_id=3510;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Callout =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.ad_column_id,tbl.tablename, a.columnname,a.name, a.callout from ad_column a&lt;br /&gt;
join ad_table tbl on a.ad_table_id = tbl.ad_table_id&lt;br /&gt;
where a.callout is not null and a.callout like '%bPartner%'&lt;br /&gt;
--and tbl.tablename = 'C_BankStatementLine'&lt;br /&gt;
order by tbl.tablename, a.callout, a.name;&lt;br /&gt;
--order by a.updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update callout ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set callout = 'org.compiere.model.CalloutInvoiceNew.bPartner' where ad_column_id = 3499;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_ref_list where ad_reference_id in ( select ad_reference_id from ad_reference where name = 'Ref Name' );&lt;br /&gt;
-&lt;br /&gt;
Incomplete:&lt;br /&gt;
left join&lt;br /&gt;
	ad_reference ref on ref.name = 'ZZ_Status'&lt;br /&gt;
left join&lt;br /&gt;
	ad_ref_list reflist on reflist.ad_reference_id = ref.ad_reference_id and reflist.value = perm.zz_status&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For use in Jasper Report to lookup reference name ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( SELECT rl.name FROM ad_ref_list rl WHERE ((rl.ad_reference_id = (select ad_reference_id from ad_reference where name = 'my ref name')::numeric) AND ((rl.value)::text = (v.ice_fuel_type)::text))) AS field_name&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Validation Rules ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_val_rule_id, name, code from ad_val_rule where upper(code) like upper('%quota%');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Elements =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.* from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in (1000153, 1000152, 1000154, 1000156)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Report and process =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_process order by created desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select ad_process_id, value, name,description, classname, jasperreport from ad_process where upper(value) like upper('%') order by value;&lt;br /&gt;
&lt;br /&gt;
select * from ad_process_para where ad_process_para_id = 1000000;&lt;br /&gt;
&lt;br /&gt;
select columnname, name, defaultvalue from ad_process_para where ad_process_id = 1000000 order by seqno;&lt;br /&gt;
&lt;br /&gt;
update ad_process_para set defaultvalue='1' where ad_process_id = 1000000 and columnname = 'columname';	--Sequence&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Deletion =&lt;br /&gt;
== Delete all fields on window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name like 'Name of window' &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields on tab ==&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1. &lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where name = 'tabname' and ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name = 'Name of window' &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE' ) &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_tab_uu in ( 'REPLACEWITHWINDOWUUHERE' ) );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all occurences of column from windows ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_column_id in &lt;br /&gt;
( select ad_column_id from ad_column where upper(columnname) like upper('zz_nbsm_matchsetup_id') )&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sequences =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_sequence a set CURRENTNEXTSYS =13000  where a.name = 'name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Doctype =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_doctype_id from c_doctype where name = 'DocumentName'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== All pack-in attachments ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_attachment where ad_table_id = 50008 and record_id in (&lt;br /&gt;
  select AD_Package_Imp_Proc_id from AD_Package_Imp_Proc where name like '%%' &lt;br /&gt;
  );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Synchronize Translations =&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_process_trl a set name = b.name, description = b.name from ad_process b where a.ad_process_id = b.ad_process_id and b.name = 'Process Name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Various helpers (work in progress) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_message_id, value, msgtext, msgtip from ad_message where upper(msgtext) like upper('%login%') order by msgtext;&lt;br /&gt;
&lt;br /&gt;
drop view if exists zz_trl_helper_field_v;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_trl_helper_field_v  as &lt;br /&gt;
select &lt;br /&gt;
	main.ad_field_id, &lt;br /&gt;
	trl.ad_language, trl.ad_field_trl_uu, &lt;br /&gt;
	main.ad_field_uu, main.name as field_name, main.description as main_description, &lt;br /&gt;
	trl.name as trl_name, trl.description as trl_description, &lt;br /&gt;
	win.name as window_name, &lt;br /&gt;
	col.columnname&lt;br /&gt;
from&lt;br /&gt;
ad_field main&lt;br /&gt;
join ad_field_trl trl on trl.ad_field_id = main.ad_field_id&lt;br /&gt;
join ad_column col on col.ad_column_id = main.ad_column_id&lt;br /&gt;
join ad_tab tab on tab.ad_tab_id = main.ad_tab_id&lt;br /&gt;
join ad_window win on win.ad_window_id = tab.ad_window_id;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select * from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = '';&lt;br /&gt;
&lt;br /&gt;
update ad_field_trl set name = 'name', description = 'name' where ad_field_trl_uu in (&lt;br /&gt;
	select ad_field_trl_uu from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = ''&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
select main.ad_process_id, trl.ad_language, trl.ad_process_para_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_process_para main&lt;br /&gt;
join ad_process_para_trl trl on trl.ad_process_para_id = main.ad_process_para_id&lt;br /&gt;
where &lt;br /&gt;
	ad_process_id in ( select ad_process_id from ad_process where name like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_column_id, trl.ad_language, trl.ad_column_trl_uu, main.columnname, main.name, main.description, trl.name from&lt;br /&gt;
ad_column main&lt;br /&gt;
join ad_column_trl trl on trl.ad_column_id = main.ad_column_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_column_id in ( select ad_column_id from ad_column where columnname like '' );&lt;br /&gt;
	&lt;br /&gt;
select main.ad_element_id, trl.ad_language, trl.ad_element_trl_uu, main.columnname, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_element main&lt;br /&gt;
join ad_element_trl trl on trl.ad_element_id = main.ad_element_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_element_id in ( select ad_element_id from ad_element where columnname like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_menu_id, main.ad_menu_uu, trl.ad_language, trl.ad_menu_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_menu main&lt;br /&gt;
join ad_menu_trl trl on trl.ad_menu_id = main.ad_menu_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_menu_id in ( select ad_menu_id from ad_menu where name like '' );&lt;br /&gt;
&lt;br /&gt;
-- For 2pack (sync UUID's)&lt;br /&gt;
update ad_menu_trl &lt;br /&gt;
set ad_menu_trl_uu = '521bf63c-c0ab-40ac-a188-fe7cfd0a9612'&lt;br /&gt;
from ad_menu b&lt;br /&gt;
where &lt;br /&gt;
ad_menu_trl.ad_menu_id = b.ad_menu_id&lt;br /&gt;
and b.ad_menu_uu = 'ccf0fc37-76cc-4a3c-8e1c-80d4c28e695a';&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack out =&lt;br /&gt;
&lt;br /&gt;
== Backup AD information before running 2pack ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * into bk_rq16_process from ad_process;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_table from ad_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_column from ad_column;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_window from ad_window;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_tab from ad_tab;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_field from ad_field;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_reference from ad_reference;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_table from ad_ref_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_list from ad_ref_list;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields + tabs on windows (for Pack In) ==&lt;br /&gt;
&lt;br /&gt;
* Helps to ensure is packed in correctly&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* See also under the heading: 'Deletion'&lt;br /&gt;
&lt;br /&gt;
== Packout/Packin package details ==&lt;br /&gt;
&lt;br /&gt;
* Work in progress&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Imp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Duplicate key error when importing AD_Message ==&lt;br /&gt;
&lt;br /&gt;
* unique constraint (...AD_MESSAGE_TRL_KEY) violated&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_message_trl&lt;br /&gt;
WHERE AD_Message_ID=&lt;br /&gt;
( SELECT ad_message_id FROM ad_message WHERE value='KEYOFMESSAGE' );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all attachments of process ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_attachment where record_id in (&lt;br /&gt;
	select ad_process_id from ad_process where value like '%MYPROCESSKEY%' ) and &lt;br /&gt;
ad_table_id = (select ad_table_id from ad_table where tablename='AD_Process');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Migration scripts =&lt;br /&gt;
&lt;br /&gt;
== Which migration scripts have been run ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select releaseno,created,name,status,isapply,filename, script  from ad_migrationscript order by releaseno, name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11353</id>
		<title>Queries: AD</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11353"/>
		<updated>2017-04-05T01:13:46Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: /* Delete all fields + tabs on windows (for Pack In) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_client_id,value,name from ad_client order by ad_client_id;&lt;br /&gt;
&lt;br /&gt;
select ad_client_id from ad_client where name like 'A%'; &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Windows =&lt;br /&gt;
== Windows referencing a specific process ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select name from ad_window where ad_window_id in (&lt;br /&gt;
select ad_window_id from ad_tab where ad_process_id in (&lt;br /&gt;
select ad_process_id from ad_process where value = 'processname')&lt;br /&gt;
);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_window a&lt;br /&gt;
where a.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tab ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_tab a&lt;br /&gt;
where a.ad_window_id=id&lt;br /&gt;
&lt;br /&gt;
select distinct a.whereclause from ad_tab a &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.name as WindowName from ad_tab a&lt;br /&gt;
join ad_window b on a.ad_window_id = b.ad_window_id&lt;br /&gt;
where &lt;br /&gt;
	a.ad_table_id = &lt;br /&gt;
	(select ad_table_id from ad_table where name='tablename');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Field information =&lt;br /&gt;
&lt;br /&gt;
== Field ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_field a&lt;br /&gt;
join ad_tab b on a.ad_tab_id=b.ad_tab_id&lt;br /&gt;
where b.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Combining Window, tab, field ==&lt;br /&gt;
	&lt;br /&gt;
=== As a view ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drop view if exists zz_fieldinfo_v;&lt;br /&gt;
&lt;br /&gt;
create view zz_fieldinfo_v as&lt;br /&gt;
select &lt;br /&gt;
	tabtable.tablename as table_name, &lt;br /&gt;
	tabtable.entitytype as table_entitytype,&lt;br /&gt;
  	fld.isdisplayed as field_isdisplayed,&lt;br /&gt;
  	fld.seqno as field_seqno,&lt;br /&gt;
  	fld.name as field_name, &lt;br /&gt;
	col.columnname as column_name,&lt;br /&gt;
  	fld.displaylogic as field_display_logic,&lt;br /&gt;
	fld.readonlylogic as field_readonly_logic,&lt;br /&gt;
	tab.name as tab_name,&lt;br /&gt;
	win.name as WindowName, &lt;br /&gt;
	win.ad_window_id,&lt;br /&gt;
	tab.ad_tab_id,&lt;br /&gt;
  	tab.isactive as tab_isactive,&lt;br /&gt;
  	fld.ad_field_uu,&lt;br /&gt;
	fld.ad_field_id,&lt;br /&gt;
	fld.iscentrallymaintained as field_centrallymaintained,&lt;br /&gt;
	fld.ismandatory as field_ismandatory,&lt;br /&gt;
	fld.mandatorylogic as field_mandatorylogic,&lt;br /&gt;
	col.ad_element_id,&lt;br /&gt;
	ele.name as element_name,&lt;br /&gt;
	ref.name as ref_name, refvalue.name as ref_value,&lt;br /&gt;
	refvalue.ad_reference_id,&lt;br /&gt;
	reftabletbl.tablename as ref_table,&lt;br /&gt;
	col.created as column_created, col.updated as column_updated,&lt;br /&gt;
	fld.created as field_created, fld.updated as field_updated,&lt;br /&gt;
	fld.ad_val_rule_id as field_val_rule_id&lt;br /&gt;
from &lt;br /&gt;
	ad_field fld&lt;br /&gt;
join ad_tab tab on fld.ad_tab_id = tab.ad_tab_id&lt;br /&gt;
join ad_table tabtable on tabtable.ad_table_id = tab.ad_table_id&lt;br /&gt;
join ad_window win on tab.ad_window_id = win.ad_window_id&lt;br /&gt;
join ad_column col on fld.ad_column_id = col.ad_column_id&lt;br /&gt;
join ad_element ele on ele.ad_element_id = col.ad_element_id&lt;br /&gt;
left join ad_reference ref on col.ad_reference_id = ref.ad_reference_id&lt;br /&gt;
left join ad_reference refvalue on col.ad_reference_value_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_ref_table reftable on reftable.ad_reference_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_table reftabletbl on reftabletbl.ad_table_id = reftable.ad_table_id&lt;br /&gt;
order by win.name, tab.seqno, field_seqno;&lt;br /&gt;
&lt;br /&gt;
select field_display_name, field_ismandatory, field_mandatorylogic from zz_fieldinfo_v where windowname like  'C%' and field_mandatorylogic is not null;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show fields by update date (useful to run after loading 2pack) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select column_updated, column_name, * from zz_fieldinfo_v order by column_updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Form =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.entitytype, a.name, a.classname from ad_form a where a.entitytype='U' order by classname;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table =&lt;br /&gt;
== Table ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_table a&lt;br /&gt;
order by a.created desc;&lt;br /&gt;
&lt;br /&gt;
select a.* from ad_table a&lt;br /&gt;
where a.ad_table_id in (id, id)&lt;br /&gt;
&lt;br /&gt;
(select ad_table_id from ad_table where tablename='tablename')&lt;br /&gt;
&lt;br /&gt;
delete from ad_table where ad_table_id in (select ad_table_id from ad_table where tablename='tablename');&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table Columns =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.name, a.columnname, a.created from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in ((select ad_table_id from ad_table where tablename='tablename'))&lt;br /&gt;
order by a.name;&lt;br /&gt;
--order by a.created desc;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Menu =&lt;br /&gt;
&lt;br /&gt;
== All the main (root) menu items in a tree ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;SELECT m.name, mm.* FROM AD_TreeNodeMM mm&lt;br /&gt;
left join ad_menu m on mm.node_id = m.ad_menu_id&lt;br /&gt;
WHERE mm.AD_Tree_ID=1000171 and mm.parent_id=0;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update entity type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set entitytype='U' where ad_column_id=3510;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Callout =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.ad_column_id,tbl.tablename, a.columnname,a.name, a.callout from ad_column a&lt;br /&gt;
join ad_table tbl on a.ad_table_id = tbl.ad_table_id&lt;br /&gt;
where a.callout is not null and a.callout like '%bPartner%'&lt;br /&gt;
--and tbl.tablename = 'C_BankStatementLine'&lt;br /&gt;
order by tbl.tablename, a.callout, a.name;&lt;br /&gt;
--order by a.updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update callout ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set callout = 'org.compiere.model.CalloutInvoiceNew.bPartner' where ad_column_id = 3499;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_ref_list where ad_reference_id in ( select ad_reference_id from ad_reference where name = 'Ref Name' );&lt;br /&gt;
-&lt;br /&gt;
Incomplete:&lt;br /&gt;
left join&lt;br /&gt;
	ad_reference ref on ref.name = 'ZZ_Status'&lt;br /&gt;
left join&lt;br /&gt;
	ad_ref_list reflist on reflist.ad_reference_id = ref.ad_reference_id and reflist.value = perm.zz_status&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For use in Jasper Report to lookup reference name ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( SELECT rl.name FROM ad_ref_list rl WHERE ((rl.ad_reference_id = (select ad_reference_id from ad_reference where name = 'my ref name')::numeric) AND ((rl.value)::text = (v.ice_fuel_type)::text))) AS field_name&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Validation Rules ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_val_rule_id, name, code from ad_val_rule where upper(code) like upper('%quota%');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Elements =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.* from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in (1000153, 1000152, 1000154, 1000156)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Report and process =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_process order by created desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select ad_process_id, value, name,description, classname, jasperreport from ad_process where upper(value) like upper('%') order by value;&lt;br /&gt;
&lt;br /&gt;
select * from ad_process_para where ad_process_para_id = 1000000;&lt;br /&gt;
&lt;br /&gt;
select columnname, name, defaultvalue from ad_process_para where ad_process_id = 1000000 order by seqno;&lt;br /&gt;
&lt;br /&gt;
update ad_process_para set defaultvalue='1' where ad_process_id = 1000000 and columnname = 'columname';	--Sequence&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Deletion =&lt;br /&gt;
== Delete all fields on window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name like 'Name of window' &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields on tab ==&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1. &lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where name = 'tabname' and ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name = 'Name of window' &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE' ) &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_tab_uu in ( 'df93f2c3-f95b-4195-822d-d2f3c590b077' ) );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all occurences of column from windows ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_column_id in &lt;br /&gt;
( select ad_column_id from ad_column where upper(columnname) like upper('zz_nbsm_matchsetup_id') )&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sequences =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_sequence a set CURRENTNEXTSYS =13000  where a.name = 'name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Doctype =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_doctype_id from c_doctype where name = 'DocumentName'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== All pack-in attachments ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_attachment where ad_table_id = 50008 and record_id in (&lt;br /&gt;
  select AD_Package_Imp_Proc_id from AD_Package_Imp_Proc where name like '%%' &lt;br /&gt;
  );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Synchronize Translations =&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_process_trl a set name = b.name, description = b.name from ad_process b where a.ad_process_id = b.ad_process_id and b.name = 'Process Name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Various helpers (work in progress) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_message_id, value, msgtext, msgtip from ad_message where upper(msgtext) like upper('%login%') order by msgtext;&lt;br /&gt;
&lt;br /&gt;
drop view if exists zz_trl_helper_field_v;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_trl_helper_field_v  as &lt;br /&gt;
select &lt;br /&gt;
	main.ad_field_id, &lt;br /&gt;
	trl.ad_language, trl.ad_field_trl_uu, &lt;br /&gt;
	main.ad_field_uu, main.name as field_name, main.description as main_description, &lt;br /&gt;
	trl.name as trl_name, trl.description as trl_description, &lt;br /&gt;
	win.name as window_name, &lt;br /&gt;
	col.columnname&lt;br /&gt;
from&lt;br /&gt;
ad_field main&lt;br /&gt;
join ad_field_trl trl on trl.ad_field_id = main.ad_field_id&lt;br /&gt;
join ad_column col on col.ad_column_id = main.ad_column_id&lt;br /&gt;
join ad_tab tab on tab.ad_tab_id = main.ad_tab_id&lt;br /&gt;
join ad_window win on win.ad_window_id = tab.ad_window_id;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select * from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = '';&lt;br /&gt;
&lt;br /&gt;
update ad_field_trl set name = 'name', description = 'name' where ad_field_trl_uu in (&lt;br /&gt;
	select ad_field_trl_uu from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = ''&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
select main.ad_process_id, trl.ad_language, trl.ad_process_para_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_process_para main&lt;br /&gt;
join ad_process_para_trl trl on trl.ad_process_para_id = main.ad_process_para_id&lt;br /&gt;
where &lt;br /&gt;
	ad_process_id in ( select ad_process_id from ad_process where name like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_column_id, trl.ad_language, trl.ad_column_trl_uu, main.columnname, main.name, main.description, trl.name from&lt;br /&gt;
ad_column main&lt;br /&gt;
join ad_column_trl trl on trl.ad_column_id = main.ad_column_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_column_id in ( select ad_column_id from ad_column where columnname like '' );&lt;br /&gt;
	&lt;br /&gt;
select main.ad_element_id, trl.ad_language, trl.ad_element_trl_uu, main.columnname, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_element main&lt;br /&gt;
join ad_element_trl trl on trl.ad_element_id = main.ad_element_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_element_id in ( select ad_element_id from ad_element where columnname like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_menu_id, main.ad_menu_uu, trl.ad_language, trl.ad_menu_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_menu main&lt;br /&gt;
join ad_menu_trl trl on trl.ad_menu_id = main.ad_menu_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_menu_id in ( select ad_menu_id from ad_menu where name like '' );&lt;br /&gt;
&lt;br /&gt;
-- For 2pack (sync UUID's)&lt;br /&gt;
update ad_menu_trl &lt;br /&gt;
set ad_menu_trl_uu = '521bf63c-c0ab-40ac-a188-fe7cfd0a9612'&lt;br /&gt;
from ad_menu b&lt;br /&gt;
where &lt;br /&gt;
ad_menu_trl.ad_menu_id = b.ad_menu_id&lt;br /&gt;
and b.ad_menu_uu = 'ccf0fc37-76cc-4a3c-8e1c-80d4c28e695a';&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack out =&lt;br /&gt;
&lt;br /&gt;
== Backup AD information before running 2pack ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * into bk_rq16_process from ad_process;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_table from ad_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_column from ad_column;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_window from ad_window;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_tab from ad_tab;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_field from ad_field;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_reference from ad_reference;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_table from ad_ref_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_list from ad_ref_list;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields + tabs on windows (for Pack In) ==&lt;br /&gt;
&lt;br /&gt;
* Helps to ensure is packed in correctly&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* See also under the heading: 'Deletion'&lt;br /&gt;
&lt;br /&gt;
== Packout/Packin package details ==&lt;br /&gt;
&lt;br /&gt;
* Work in progress&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Imp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Duplicate key error when importing AD_Message ==&lt;br /&gt;
&lt;br /&gt;
* unique constraint (...AD_MESSAGE_TRL_KEY) violated&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_message_trl&lt;br /&gt;
WHERE AD_Message_ID=&lt;br /&gt;
( SELECT ad_message_id FROM ad_message WHERE value='KEYOFMESSAGE' );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all attachments of process ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_attachment where record_id in (&lt;br /&gt;
	select ad_process_id from ad_process where value like '%MYPROCESSKEY%' ) and &lt;br /&gt;
ad_table_id = (select ad_table_id from ad_table where tablename='AD_Process');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Migration scripts =&lt;br /&gt;
&lt;br /&gt;
== Which migration scripts have been run ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select releaseno,created,name,status,isapply,filename, script  from ad_migrationscript order by releaseno, name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11352</id>
		<title>Queries: AD</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11352"/>
		<updated>2017-04-05T01:12:50Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: /* Deletion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_client_id,value,name from ad_client order by ad_client_id;&lt;br /&gt;
&lt;br /&gt;
select ad_client_id from ad_client where name like 'A%'; &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Windows =&lt;br /&gt;
== Windows referencing a specific process ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select name from ad_window where ad_window_id in (&lt;br /&gt;
select ad_window_id from ad_tab where ad_process_id in (&lt;br /&gt;
select ad_process_id from ad_process where value = 'processname')&lt;br /&gt;
);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_window a&lt;br /&gt;
where a.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tab ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_tab a&lt;br /&gt;
where a.ad_window_id=id&lt;br /&gt;
&lt;br /&gt;
select distinct a.whereclause from ad_tab a &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.name as WindowName from ad_tab a&lt;br /&gt;
join ad_window b on a.ad_window_id = b.ad_window_id&lt;br /&gt;
where &lt;br /&gt;
	a.ad_table_id = &lt;br /&gt;
	(select ad_table_id from ad_table where name='tablename');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Field information =&lt;br /&gt;
&lt;br /&gt;
== Field ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_field a&lt;br /&gt;
join ad_tab b on a.ad_tab_id=b.ad_tab_id&lt;br /&gt;
where b.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Combining Window, tab, field ==&lt;br /&gt;
	&lt;br /&gt;
=== As a view ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drop view if exists zz_fieldinfo_v;&lt;br /&gt;
&lt;br /&gt;
create view zz_fieldinfo_v as&lt;br /&gt;
select &lt;br /&gt;
	tabtable.tablename as table_name, &lt;br /&gt;
	tabtable.entitytype as table_entitytype,&lt;br /&gt;
  	fld.isdisplayed as field_isdisplayed,&lt;br /&gt;
  	fld.seqno as field_seqno,&lt;br /&gt;
  	fld.name as field_name, &lt;br /&gt;
	col.columnname as column_name,&lt;br /&gt;
  	fld.displaylogic as field_display_logic,&lt;br /&gt;
	fld.readonlylogic as field_readonly_logic,&lt;br /&gt;
	tab.name as tab_name,&lt;br /&gt;
	win.name as WindowName, &lt;br /&gt;
	win.ad_window_id,&lt;br /&gt;
	tab.ad_tab_id,&lt;br /&gt;
  	tab.isactive as tab_isactive,&lt;br /&gt;
  	fld.ad_field_uu,&lt;br /&gt;
	fld.ad_field_id,&lt;br /&gt;
	fld.iscentrallymaintained as field_centrallymaintained,&lt;br /&gt;
	fld.ismandatory as field_ismandatory,&lt;br /&gt;
	fld.mandatorylogic as field_mandatorylogic,&lt;br /&gt;
	col.ad_element_id,&lt;br /&gt;
	ele.name as element_name,&lt;br /&gt;
	ref.name as ref_name, refvalue.name as ref_value,&lt;br /&gt;
	refvalue.ad_reference_id,&lt;br /&gt;
	reftabletbl.tablename as ref_table,&lt;br /&gt;
	col.created as column_created, col.updated as column_updated,&lt;br /&gt;
	fld.created as field_created, fld.updated as field_updated,&lt;br /&gt;
	fld.ad_val_rule_id as field_val_rule_id&lt;br /&gt;
from &lt;br /&gt;
	ad_field fld&lt;br /&gt;
join ad_tab tab on fld.ad_tab_id = tab.ad_tab_id&lt;br /&gt;
join ad_table tabtable on tabtable.ad_table_id = tab.ad_table_id&lt;br /&gt;
join ad_window win on tab.ad_window_id = win.ad_window_id&lt;br /&gt;
join ad_column col on fld.ad_column_id = col.ad_column_id&lt;br /&gt;
join ad_element ele on ele.ad_element_id = col.ad_element_id&lt;br /&gt;
left join ad_reference ref on col.ad_reference_id = ref.ad_reference_id&lt;br /&gt;
left join ad_reference refvalue on col.ad_reference_value_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_ref_table reftable on reftable.ad_reference_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_table reftabletbl on reftabletbl.ad_table_id = reftable.ad_table_id&lt;br /&gt;
order by win.name, tab.seqno, field_seqno;&lt;br /&gt;
&lt;br /&gt;
select field_display_name, field_ismandatory, field_mandatorylogic from zz_fieldinfo_v where windowname like  'C%' and field_mandatorylogic is not null;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show fields by update date (useful to run after loading 2pack) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select column_updated, column_name, * from zz_fieldinfo_v order by column_updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Form =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.entitytype, a.name, a.classname from ad_form a where a.entitytype='U' order by classname;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table =&lt;br /&gt;
== Table ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_table a&lt;br /&gt;
order by a.created desc;&lt;br /&gt;
&lt;br /&gt;
select a.* from ad_table a&lt;br /&gt;
where a.ad_table_id in (id, id)&lt;br /&gt;
&lt;br /&gt;
(select ad_table_id from ad_table where tablename='tablename')&lt;br /&gt;
&lt;br /&gt;
delete from ad_table where ad_table_id in (select ad_table_id from ad_table where tablename='tablename');&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table Columns =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.name, a.columnname, a.created from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in ((select ad_table_id from ad_table where tablename='tablename'))&lt;br /&gt;
order by a.name;&lt;br /&gt;
--order by a.created desc;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Menu =&lt;br /&gt;
&lt;br /&gt;
== All the main (root) menu items in a tree ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;SELECT m.name, mm.* FROM AD_TreeNodeMM mm&lt;br /&gt;
left join ad_menu m on mm.node_id = m.ad_menu_id&lt;br /&gt;
WHERE mm.AD_Tree_ID=1000171 and mm.parent_id=0;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update entity type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set entitytype='U' where ad_column_id=3510;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Callout =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.ad_column_id,tbl.tablename, a.columnname,a.name, a.callout from ad_column a&lt;br /&gt;
join ad_table tbl on a.ad_table_id = tbl.ad_table_id&lt;br /&gt;
where a.callout is not null and a.callout like '%bPartner%'&lt;br /&gt;
--and tbl.tablename = 'C_BankStatementLine'&lt;br /&gt;
order by tbl.tablename, a.callout, a.name;&lt;br /&gt;
--order by a.updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update callout ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set callout = 'org.compiere.model.CalloutInvoiceNew.bPartner' where ad_column_id = 3499;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_ref_list where ad_reference_id in ( select ad_reference_id from ad_reference where name = 'Ref Name' );&lt;br /&gt;
-&lt;br /&gt;
Incomplete:&lt;br /&gt;
left join&lt;br /&gt;
	ad_reference ref on ref.name = 'ZZ_Status'&lt;br /&gt;
left join&lt;br /&gt;
	ad_ref_list reflist on reflist.ad_reference_id = ref.ad_reference_id and reflist.value = perm.zz_status&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For use in Jasper Report to lookup reference name ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( SELECT rl.name FROM ad_ref_list rl WHERE ((rl.ad_reference_id = (select ad_reference_id from ad_reference where name = 'my ref name')::numeric) AND ((rl.value)::text = (v.ice_fuel_type)::text))) AS field_name&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Validation Rules ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_val_rule_id, name, code from ad_val_rule where upper(code) like upper('%quota%');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Elements =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.* from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in (1000153, 1000152, 1000154, 1000156)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Report and process =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_process order by created desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select ad_process_id, value, name,description, classname, jasperreport from ad_process where upper(value) like upper('%') order by value;&lt;br /&gt;
&lt;br /&gt;
select * from ad_process_para where ad_process_para_id = 1000000;&lt;br /&gt;
&lt;br /&gt;
select columnname, name, defaultvalue from ad_process_para where ad_process_id = 1000000 order by seqno;&lt;br /&gt;
&lt;br /&gt;
update ad_process_para set defaultvalue='1' where ad_process_id = 1000000 and columnname = 'columname';	--Sequence&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Deletion =&lt;br /&gt;
== Delete all fields on window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name like 'Name of window' &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields on tab ==&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1. &lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where name = 'tabname' and ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name = 'Name of window' &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where ad_window_uu in ( 'REPLACEWITHWINDOWUUHERE' ) &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_tab_uu in ( 'df93f2c3-f95b-4195-822d-d2f3c590b077' ) );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all occurences of column from windows ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_column_id in &lt;br /&gt;
( select ad_column_id from ad_column where upper(columnname) like upper('zz_nbsm_matchsetup_id') )&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sequences =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_sequence a set CURRENTNEXTSYS =13000  where a.name = 'name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Doctype =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_doctype_id from c_doctype where name = 'DocumentName'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== All pack-in attachments ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_attachment where ad_table_id = 50008 and record_id in (&lt;br /&gt;
  select AD_Package_Imp_Proc_id from AD_Package_Imp_Proc where name like '%%' &lt;br /&gt;
  );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Synchronize Translations =&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_process_trl a set name = b.name, description = b.name from ad_process b where a.ad_process_id = b.ad_process_id and b.name = 'Process Name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Various helpers (work in progress) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_message_id, value, msgtext, msgtip from ad_message where upper(msgtext) like upper('%login%') order by msgtext;&lt;br /&gt;
&lt;br /&gt;
drop view if exists zz_trl_helper_field_v;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_trl_helper_field_v  as &lt;br /&gt;
select &lt;br /&gt;
	main.ad_field_id, &lt;br /&gt;
	trl.ad_language, trl.ad_field_trl_uu, &lt;br /&gt;
	main.ad_field_uu, main.name as field_name, main.description as main_description, &lt;br /&gt;
	trl.name as trl_name, trl.description as trl_description, &lt;br /&gt;
	win.name as window_name, &lt;br /&gt;
	col.columnname&lt;br /&gt;
from&lt;br /&gt;
ad_field main&lt;br /&gt;
join ad_field_trl trl on trl.ad_field_id = main.ad_field_id&lt;br /&gt;
join ad_column col on col.ad_column_id = main.ad_column_id&lt;br /&gt;
join ad_tab tab on tab.ad_tab_id = main.ad_tab_id&lt;br /&gt;
join ad_window win on win.ad_window_id = tab.ad_window_id;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select * from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = '';&lt;br /&gt;
&lt;br /&gt;
update ad_field_trl set name = 'name', description = 'name' where ad_field_trl_uu in (&lt;br /&gt;
	select ad_field_trl_uu from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = ''&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
select main.ad_process_id, trl.ad_language, trl.ad_process_para_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_process_para main&lt;br /&gt;
join ad_process_para_trl trl on trl.ad_process_para_id = main.ad_process_para_id&lt;br /&gt;
where &lt;br /&gt;
	ad_process_id in ( select ad_process_id from ad_process where name like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_column_id, trl.ad_language, trl.ad_column_trl_uu, main.columnname, main.name, main.description, trl.name from&lt;br /&gt;
ad_column main&lt;br /&gt;
join ad_column_trl trl on trl.ad_column_id = main.ad_column_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_column_id in ( select ad_column_id from ad_column where columnname like '' );&lt;br /&gt;
	&lt;br /&gt;
select main.ad_element_id, trl.ad_language, trl.ad_element_trl_uu, main.columnname, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_element main&lt;br /&gt;
join ad_element_trl trl on trl.ad_element_id = main.ad_element_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_element_id in ( select ad_element_id from ad_element where columnname like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_menu_id, main.ad_menu_uu, trl.ad_language, trl.ad_menu_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_menu main&lt;br /&gt;
join ad_menu_trl trl on trl.ad_menu_id = main.ad_menu_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_menu_id in ( select ad_menu_id from ad_menu where name like '' );&lt;br /&gt;
&lt;br /&gt;
-- For 2pack (sync UUID's)&lt;br /&gt;
update ad_menu_trl &lt;br /&gt;
set ad_menu_trl_uu = '521bf63c-c0ab-40ac-a188-fe7cfd0a9612'&lt;br /&gt;
from ad_menu b&lt;br /&gt;
where &lt;br /&gt;
ad_menu_trl.ad_menu_id = b.ad_menu_id&lt;br /&gt;
and b.ad_menu_uu = 'ccf0fc37-76cc-4a3c-8e1c-80d4c28e695a';&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack out =&lt;br /&gt;
&lt;br /&gt;
== Backup AD information before running 2pack ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * into bk_rq16_process from ad_process;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_table from ad_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_column from ad_column;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_window from ad_window;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_tab from ad_tab;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_field from ad_field;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_reference from ad_reference;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_table from ad_ref_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_list from ad_ref_list;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields + tabs on windows (for Pack In) ==&lt;br /&gt;
&lt;br /&gt;
* Helps to ensure is packed in correctly&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Packout/Packin package details ==&lt;br /&gt;
&lt;br /&gt;
* Work in progress&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Imp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Duplicate key error when importing AD_Message ==&lt;br /&gt;
&lt;br /&gt;
* unique constraint (...AD_MESSAGE_TRL_KEY) violated&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_message_trl&lt;br /&gt;
WHERE AD_Message_ID=&lt;br /&gt;
( SELECT ad_message_id FROM ad_message WHERE value='KEYOFMESSAGE' );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all attachments of process ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_attachment where record_id in (&lt;br /&gt;
	select ad_process_id from ad_process where value like '%MYPROCESSKEY%' ) and &lt;br /&gt;
ad_table_id = (select ad_table_id from ad_table where tablename='AD_Process');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Migration scripts =&lt;br /&gt;
&lt;br /&gt;
== Which migration scripts have been run ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select releaseno,created,name,status,isapply,filename, script  from ad_migrationscript order by releaseno, name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11351</id>
		<title>Queries: AD</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11351"/>
		<updated>2017-04-05T01:00:24Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: /* Delete all fields on tab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_client_id,value,name from ad_client order by ad_client_id;&lt;br /&gt;
&lt;br /&gt;
select ad_client_id from ad_client where name like 'A%'; &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Windows =&lt;br /&gt;
== Windows referencing a specific process ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select name from ad_window where ad_window_id in (&lt;br /&gt;
select ad_window_id from ad_tab where ad_process_id in (&lt;br /&gt;
select ad_process_id from ad_process where value = 'processname')&lt;br /&gt;
);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_window a&lt;br /&gt;
where a.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tab ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_tab a&lt;br /&gt;
where a.ad_window_id=id&lt;br /&gt;
&lt;br /&gt;
select distinct a.whereclause from ad_tab a &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.name as WindowName from ad_tab a&lt;br /&gt;
join ad_window b on a.ad_window_id = b.ad_window_id&lt;br /&gt;
where &lt;br /&gt;
	a.ad_table_id = &lt;br /&gt;
	(select ad_table_id from ad_table where name='tablename');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Field information =&lt;br /&gt;
&lt;br /&gt;
== Field ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_field a&lt;br /&gt;
join ad_tab b on a.ad_tab_id=b.ad_tab_id&lt;br /&gt;
where b.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Combining Window, tab, field ==&lt;br /&gt;
	&lt;br /&gt;
=== As a view ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drop view if exists zz_fieldinfo_v;&lt;br /&gt;
&lt;br /&gt;
create view zz_fieldinfo_v as&lt;br /&gt;
select &lt;br /&gt;
	tabtable.tablename as table_name, &lt;br /&gt;
	tabtable.entitytype as table_entitytype,&lt;br /&gt;
  	fld.isdisplayed as field_isdisplayed,&lt;br /&gt;
  	fld.seqno as field_seqno,&lt;br /&gt;
  	fld.name as field_name, &lt;br /&gt;
	col.columnname as column_name,&lt;br /&gt;
  	fld.displaylogic as field_display_logic,&lt;br /&gt;
	fld.readonlylogic as field_readonly_logic,&lt;br /&gt;
	tab.name as tab_name,&lt;br /&gt;
	win.name as WindowName, &lt;br /&gt;
	win.ad_window_id,&lt;br /&gt;
	tab.ad_tab_id,&lt;br /&gt;
  	tab.isactive as tab_isactive,&lt;br /&gt;
  	fld.ad_field_uu,&lt;br /&gt;
	fld.ad_field_id,&lt;br /&gt;
	fld.iscentrallymaintained as field_centrallymaintained,&lt;br /&gt;
	fld.ismandatory as field_ismandatory,&lt;br /&gt;
	fld.mandatorylogic as field_mandatorylogic,&lt;br /&gt;
	col.ad_element_id,&lt;br /&gt;
	ele.name as element_name,&lt;br /&gt;
	ref.name as ref_name, refvalue.name as ref_value,&lt;br /&gt;
	refvalue.ad_reference_id,&lt;br /&gt;
	reftabletbl.tablename as ref_table,&lt;br /&gt;
	col.created as column_created, col.updated as column_updated,&lt;br /&gt;
	fld.created as field_created, fld.updated as field_updated,&lt;br /&gt;
	fld.ad_val_rule_id as field_val_rule_id&lt;br /&gt;
from &lt;br /&gt;
	ad_field fld&lt;br /&gt;
join ad_tab tab on fld.ad_tab_id = tab.ad_tab_id&lt;br /&gt;
join ad_table tabtable on tabtable.ad_table_id = tab.ad_table_id&lt;br /&gt;
join ad_window win on tab.ad_window_id = win.ad_window_id&lt;br /&gt;
join ad_column col on fld.ad_column_id = col.ad_column_id&lt;br /&gt;
join ad_element ele on ele.ad_element_id = col.ad_element_id&lt;br /&gt;
left join ad_reference ref on col.ad_reference_id = ref.ad_reference_id&lt;br /&gt;
left join ad_reference refvalue on col.ad_reference_value_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_ref_table reftable on reftable.ad_reference_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_table reftabletbl on reftabletbl.ad_table_id = reftable.ad_table_id&lt;br /&gt;
order by win.name, tab.seqno, field_seqno;&lt;br /&gt;
&lt;br /&gt;
select field_display_name, field_ismandatory, field_mandatorylogic from zz_fieldinfo_v where windowname like  'C%' and field_mandatorylogic is not null;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show fields by update date (useful to run after loading 2pack) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select column_updated, column_name, * from zz_fieldinfo_v order by column_updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Form =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.entitytype, a.name, a.classname from ad_form a where a.entitytype='U' order by classname;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table =&lt;br /&gt;
== Table ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_table a&lt;br /&gt;
order by a.created desc;&lt;br /&gt;
&lt;br /&gt;
select a.* from ad_table a&lt;br /&gt;
where a.ad_table_id in (id, id)&lt;br /&gt;
&lt;br /&gt;
(select ad_table_id from ad_table where tablename='tablename')&lt;br /&gt;
&lt;br /&gt;
delete from ad_table where ad_table_id in (select ad_table_id from ad_table where tablename='tablename');&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table Columns =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.name, a.columnname, a.created from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in ((select ad_table_id from ad_table where tablename='tablename'))&lt;br /&gt;
order by a.name;&lt;br /&gt;
--order by a.created desc;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Menu =&lt;br /&gt;
&lt;br /&gt;
== All the main (root) menu items in a tree ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;SELECT m.name, mm.* FROM AD_TreeNodeMM mm&lt;br /&gt;
left join ad_menu m on mm.node_id = m.ad_menu_id&lt;br /&gt;
WHERE mm.AD_Tree_ID=1000171 and mm.parent_id=0;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update entity type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set entitytype='U' where ad_column_id=3510;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Callout =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.ad_column_id,tbl.tablename, a.columnname,a.name, a.callout from ad_column a&lt;br /&gt;
join ad_table tbl on a.ad_table_id = tbl.ad_table_id&lt;br /&gt;
where a.callout is not null and a.callout like '%bPartner%'&lt;br /&gt;
--and tbl.tablename = 'C_BankStatementLine'&lt;br /&gt;
order by tbl.tablename, a.callout, a.name;&lt;br /&gt;
--order by a.updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update callout ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set callout = 'org.compiere.model.CalloutInvoiceNew.bPartner' where ad_column_id = 3499;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_ref_list where ad_reference_id in ( select ad_reference_id from ad_reference where name = 'Ref Name' );&lt;br /&gt;
-&lt;br /&gt;
Incomplete:&lt;br /&gt;
left join&lt;br /&gt;
	ad_reference ref on ref.name = 'ZZ_Status'&lt;br /&gt;
left join&lt;br /&gt;
	ad_ref_list reflist on reflist.ad_reference_id = ref.ad_reference_id and reflist.value = perm.zz_status&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For use in Jasper Report to lookup reference name ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( SELECT rl.name FROM ad_ref_list rl WHERE ((rl.ad_reference_id = (select ad_reference_id from ad_reference where name = 'my ref name')::numeric) AND ((rl.value)::text = (v.ice_fuel_type)::text))) AS field_name&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Validation Rules ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_val_rule_id, name, code from ad_val_rule where upper(code) like upper('%quota%');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Elements =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.* from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in (1000153, 1000152, 1000154, 1000156)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Report and process =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_process order by created desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select ad_process_id, value, name,description, classname, jasperreport from ad_process where upper(value) like upper('%') order by value;&lt;br /&gt;
&lt;br /&gt;
select * from ad_process_para where ad_process_para_id = 1000000;&lt;br /&gt;
&lt;br /&gt;
select columnname, name, defaultvalue from ad_process_para where ad_process_id = 1000000 order by seqno;&lt;br /&gt;
&lt;br /&gt;
update ad_process_para set defaultvalue='1' where ad_process_id = 1000000 and columnname = 'columname';	--Sequence&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Deletion =&lt;br /&gt;
== Delete all fields on window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name like 'Name of window' &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields on tab ==&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1. &lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where name = 'tabname' and ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name = 'Name of window' &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_tab_uu in ( 'df93f2c3-f95b-4195-822d-d2f3c590b077' ) );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all occurences of column from windows ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_column_id in &lt;br /&gt;
( select ad_column_id from ad_column where upper(columnname) like upper('zz_nbsm_matchsetup_id') )&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sequences =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_sequence a set CURRENTNEXTSYS =13000  where a.name = 'name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Doctype =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_doctype_id from c_doctype where name = 'DocumentName'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== All pack-in attachments ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_attachment where ad_table_id = 50008 and record_id in (&lt;br /&gt;
  select AD_Package_Imp_Proc_id from AD_Package_Imp_Proc where name like '%%' &lt;br /&gt;
  );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Synchronize Translations =&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_process_trl a set name = b.name, description = b.name from ad_process b where a.ad_process_id = b.ad_process_id and b.name = 'Process Name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Various helpers (work in progress) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_message_id, value, msgtext, msgtip from ad_message where upper(msgtext) like upper('%login%') order by msgtext;&lt;br /&gt;
&lt;br /&gt;
drop view if exists zz_trl_helper_field_v;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_trl_helper_field_v  as &lt;br /&gt;
select &lt;br /&gt;
	main.ad_field_id, &lt;br /&gt;
	trl.ad_language, trl.ad_field_trl_uu, &lt;br /&gt;
	main.ad_field_uu, main.name as field_name, main.description as main_description, &lt;br /&gt;
	trl.name as trl_name, trl.description as trl_description, &lt;br /&gt;
	win.name as window_name, &lt;br /&gt;
	col.columnname&lt;br /&gt;
from&lt;br /&gt;
ad_field main&lt;br /&gt;
join ad_field_trl trl on trl.ad_field_id = main.ad_field_id&lt;br /&gt;
join ad_column col on col.ad_column_id = main.ad_column_id&lt;br /&gt;
join ad_tab tab on tab.ad_tab_id = main.ad_tab_id&lt;br /&gt;
join ad_window win on win.ad_window_id = tab.ad_window_id;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select * from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = '';&lt;br /&gt;
&lt;br /&gt;
update ad_field_trl set name = 'name', description = 'name' where ad_field_trl_uu in (&lt;br /&gt;
	select ad_field_trl_uu from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = ''&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
select main.ad_process_id, trl.ad_language, trl.ad_process_para_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_process_para main&lt;br /&gt;
join ad_process_para_trl trl on trl.ad_process_para_id = main.ad_process_para_id&lt;br /&gt;
where &lt;br /&gt;
	ad_process_id in ( select ad_process_id from ad_process where name like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_column_id, trl.ad_language, trl.ad_column_trl_uu, main.columnname, main.name, main.description, trl.name from&lt;br /&gt;
ad_column main&lt;br /&gt;
join ad_column_trl trl on trl.ad_column_id = main.ad_column_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_column_id in ( select ad_column_id from ad_column where columnname like '' );&lt;br /&gt;
	&lt;br /&gt;
select main.ad_element_id, trl.ad_language, trl.ad_element_trl_uu, main.columnname, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_element main&lt;br /&gt;
join ad_element_trl trl on trl.ad_element_id = main.ad_element_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_element_id in ( select ad_element_id from ad_element where columnname like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_menu_id, main.ad_menu_uu, trl.ad_language, trl.ad_menu_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_menu main&lt;br /&gt;
join ad_menu_trl trl on trl.ad_menu_id = main.ad_menu_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_menu_id in ( select ad_menu_id from ad_menu where name like '' );&lt;br /&gt;
&lt;br /&gt;
-- For 2pack (sync UUID's)&lt;br /&gt;
update ad_menu_trl &lt;br /&gt;
set ad_menu_trl_uu = '521bf63c-c0ab-40ac-a188-fe7cfd0a9612'&lt;br /&gt;
from ad_menu b&lt;br /&gt;
where &lt;br /&gt;
ad_menu_trl.ad_menu_id = b.ad_menu_id&lt;br /&gt;
and b.ad_menu_uu = 'ccf0fc37-76cc-4a3c-8e1c-80d4c28e695a';&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack out =&lt;br /&gt;
&lt;br /&gt;
== Backup AD information before running 2pack ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * into bk_rq16_process from ad_process;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_table from ad_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_column from ad_column;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_window from ad_window;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_tab from ad_tab;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_field from ad_field;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_reference from ad_reference;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_table from ad_ref_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_list from ad_ref_list;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields + tabs on windows (for Pack In) ==&lt;br /&gt;
&lt;br /&gt;
* Helps to ensure is packed in correctly&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Packout/Packin package details ==&lt;br /&gt;
&lt;br /&gt;
* Work in progress&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Imp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Duplicate key error when importing AD_Message ==&lt;br /&gt;
&lt;br /&gt;
* unique constraint (...AD_MESSAGE_TRL_KEY) violated&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_message_trl&lt;br /&gt;
WHERE AD_Message_ID=&lt;br /&gt;
( SELECT ad_message_id FROM ad_message WHERE value='KEYOFMESSAGE' );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all attachments of process ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_attachment where record_id in (&lt;br /&gt;
	select ad_process_id from ad_process where value like '%MYPROCESSKEY%' ) and &lt;br /&gt;
ad_table_id = (select ad_table_id from ad_table where tablename='AD_Process');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Migration scripts =&lt;br /&gt;
&lt;br /&gt;
== Which migration scripts have been run ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select releaseno,created,name,status,isapply,filename, script  from ad_migrationscript order by releaseno, name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11350</id>
		<title>Queries: AD</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11350"/>
		<updated>2017-04-05T01:00:09Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: /* Delete all fields on tab */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_client_id,value,name from ad_client order by ad_client_id;&lt;br /&gt;
&lt;br /&gt;
select ad_client_id from ad_client where name like 'A%'; &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Windows =&lt;br /&gt;
== Windows referencing a specific process ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select name from ad_window where ad_window_id in (&lt;br /&gt;
select ad_window_id from ad_tab where ad_process_id in (&lt;br /&gt;
select ad_process_id from ad_process where value = 'processname')&lt;br /&gt;
);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_window a&lt;br /&gt;
where a.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tab ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_tab a&lt;br /&gt;
where a.ad_window_id=id&lt;br /&gt;
&lt;br /&gt;
select distinct a.whereclause from ad_tab a &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.name as WindowName from ad_tab a&lt;br /&gt;
join ad_window b on a.ad_window_id = b.ad_window_id&lt;br /&gt;
where &lt;br /&gt;
	a.ad_table_id = &lt;br /&gt;
	(select ad_table_id from ad_table where name='tablename');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Field information =&lt;br /&gt;
&lt;br /&gt;
== Field ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_field a&lt;br /&gt;
join ad_tab b on a.ad_tab_id=b.ad_tab_id&lt;br /&gt;
where b.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Combining Window, tab, field ==&lt;br /&gt;
	&lt;br /&gt;
=== As a view ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drop view if exists zz_fieldinfo_v;&lt;br /&gt;
&lt;br /&gt;
create view zz_fieldinfo_v as&lt;br /&gt;
select &lt;br /&gt;
	tabtable.tablename as table_name, &lt;br /&gt;
	tabtable.entitytype as table_entitytype,&lt;br /&gt;
  	fld.isdisplayed as field_isdisplayed,&lt;br /&gt;
  	fld.seqno as field_seqno,&lt;br /&gt;
  	fld.name as field_name, &lt;br /&gt;
	col.columnname as column_name,&lt;br /&gt;
  	fld.displaylogic as field_display_logic,&lt;br /&gt;
	fld.readonlylogic as field_readonly_logic,&lt;br /&gt;
	tab.name as tab_name,&lt;br /&gt;
	win.name as WindowName, &lt;br /&gt;
	win.ad_window_id,&lt;br /&gt;
	tab.ad_tab_id,&lt;br /&gt;
  	tab.isactive as tab_isactive,&lt;br /&gt;
  	fld.ad_field_uu,&lt;br /&gt;
	fld.ad_field_id,&lt;br /&gt;
	fld.iscentrallymaintained as field_centrallymaintained,&lt;br /&gt;
	fld.ismandatory as field_ismandatory,&lt;br /&gt;
	fld.mandatorylogic as field_mandatorylogic,&lt;br /&gt;
	col.ad_element_id,&lt;br /&gt;
	ele.name as element_name,&lt;br /&gt;
	ref.name as ref_name, refvalue.name as ref_value,&lt;br /&gt;
	refvalue.ad_reference_id,&lt;br /&gt;
	reftabletbl.tablename as ref_table,&lt;br /&gt;
	col.created as column_created, col.updated as column_updated,&lt;br /&gt;
	fld.created as field_created, fld.updated as field_updated,&lt;br /&gt;
	fld.ad_val_rule_id as field_val_rule_id&lt;br /&gt;
from &lt;br /&gt;
	ad_field fld&lt;br /&gt;
join ad_tab tab on fld.ad_tab_id = tab.ad_tab_id&lt;br /&gt;
join ad_table tabtable on tabtable.ad_table_id = tab.ad_table_id&lt;br /&gt;
join ad_window win on tab.ad_window_id = win.ad_window_id&lt;br /&gt;
join ad_column col on fld.ad_column_id = col.ad_column_id&lt;br /&gt;
join ad_element ele on ele.ad_element_id = col.ad_element_id&lt;br /&gt;
left join ad_reference ref on col.ad_reference_id = ref.ad_reference_id&lt;br /&gt;
left join ad_reference refvalue on col.ad_reference_value_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_ref_table reftable on reftable.ad_reference_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_table reftabletbl on reftabletbl.ad_table_id = reftable.ad_table_id&lt;br /&gt;
order by win.name, tab.seqno, field_seqno;&lt;br /&gt;
&lt;br /&gt;
select field_display_name, field_ismandatory, field_mandatorylogic from zz_fieldinfo_v where windowname like  'C%' and field_mandatorylogic is not null;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show fields by update date (useful to run after loading 2pack) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select column_updated, column_name, * from zz_fieldinfo_v order by column_updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Form =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.entitytype, a.name, a.classname from ad_form a where a.entitytype='U' order by classname;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table =&lt;br /&gt;
== Table ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_table a&lt;br /&gt;
order by a.created desc;&lt;br /&gt;
&lt;br /&gt;
select a.* from ad_table a&lt;br /&gt;
where a.ad_table_id in (id, id)&lt;br /&gt;
&lt;br /&gt;
(select ad_table_id from ad_table where tablename='tablename')&lt;br /&gt;
&lt;br /&gt;
delete from ad_table where ad_table_id in (select ad_table_id from ad_table where tablename='tablename');&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table Columns =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.name, a.columnname, a.created from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in ((select ad_table_id from ad_table where tablename='tablename'))&lt;br /&gt;
order by a.name;&lt;br /&gt;
--order by a.created desc;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Menu =&lt;br /&gt;
&lt;br /&gt;
== All the main (root) menu items in a tree ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;SELECT m.name, mm.* FROM AD_TreeNodeMM mm&lt;br /&gt;
left join ad_menu m on mm.node_id = m.ad_menu_id&lt;br /&gt;
WHERE mm.AD_Tree_ID=1000171 and mm.parent_id=0;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update entity type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set entitytype='U' where ad_column_id=3510;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Callout =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.ad_column_id,tbl.tablename, a.columnname,a.name, a.callout from ad_column a&lt;br /&gt;
join ad_table tbl on a.ad_table_id = tbl.ad_table_id&lt;br /&gt;
where a.callout is not null and a.callout like '%bPartner%'&lt;br /&gt;
--and tbl.tablename = 'C_BankStatementLine'&lt;br /&gt;
order by tbl.tablename, a.callout, a.name;&lt;br /&gt;
--order by a.updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update callout ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set callout = 'org.compiere.model.CalloutInvoiceNew.bPartner' where ad_column_id = 3499;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_ref_list where ad_reference_id in ( select ad_reference_id from ad_reference where name = 'Ref Name' );&lt;br /&gt;
-&lt;br /&gt;
Incomplete:&lt;br /&gt;
left join&lt;br /&gt;
	ad_reference ref on ref.name = 'ZZ_Status'&lt;br /&gt;
left join&lt;br /&gt;
	ad_ref_list reflist on reflist.ad_reference_id = ref.ad_reference_id and reflist.value = perm.zz_status&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For use in Jasper Report to lookup reference name ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( SELECT rl.name FROM ad_ref_list rl WHERE ((rl.ad_reference_id = (select ad_reference_id from ad_reference where name = 'my ref name')::numeric) AND ((rl.value)::text = (v.ice_fuel_type)::text))) AS field_name&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Validation Rules ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_val_rule_id, name, code from ad_val_rule where upper(code) like upper('%quota%');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Elements =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.* from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in (1000153, 1000152, 1000154, 1000156)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Report and process =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_process order by created desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select ad_process_id, value, name,description, classname, jasperreport from ad_process where upper(value) like upper('%') order by value;&lt;br /&gt;
&lt;br /&gt;
select * from ad_process_para where ad_process_para_id = 1000000;&lt;br /&gt;
&lt;br /&gt;
select columnname, name, defaultvalue from ad_process_para where ad_process_id = 1000000 order by seqno;&lt;br /&gt;
&lt;br /&gt;
update ad_process_para set defaultvalue='1' where ad_process_id = 1000000 and columnname = 'columname';	--Sequence&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Deletion =&lt;br /&gt;
== Delete all fields on window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name like 'Name of window' &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields on tab ==&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;1. &lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where name = 'tabname' and ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name = 'Name of window' &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_tab_uu in ( 'df93f2c3-f95b-4195-822d-d2f3c590b077' ) );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all occurences of column from windows ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_column_id in &lt;br /&gt;
( select ad_column_id from ad_column where upper(columnname) like upper('zz_nbsm_matchsetup_id') )&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sequences =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_sequence a set CURRENTNEXTSYS =13000  where a.name = 'name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Doctype =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_doctype_id from c_doctype where name = 'DocumentName'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== All pack-in attachments ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_attachment where ad_table_id = 50008 and record_id in (&lt;br /&gt;
  select AD_Package_Imp_Proc_id from AD_Package_Imp_Proc where name like '%%' &lt;br /&gt;
  );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Synchronize Translations =&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_process_trl a set name = b.name, description = b.name from ad_process b where a.ad_process_id = b.ad_process_id and b.name = 'Process Name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Various helpers (work in progress) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_message_id, value, msgtext, msgtip from ad_message where upper(msgtext) like upper('%login%') order by msgtext;&lt;br /&gt;
&lt;br /&gt;
drop view if exists zz_trl_helper_field_v;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_trl_helper_field_v  as &lt;br /&gt;
select &lt;br /&gt;
	main.ad_field_id, &lt;br /&gt;
	trl.ad_language, trl.ad_field_trl_uu, &lt;br /&gt;
	main.ad_field_uu, main.name as field_name, main.description as main_description, &lt;br /&gt;
	trl.name as trl_name, trl.description as trl_description, &lt;br /&gt;
	win.name as window_name, &lt;br /&gt;
	col.columnname&lt;br /&gt;
from&lt;br /&gt;
ad_field main&lt;br /&gt;
join ad_field_trl trl on trl.ad_field_id = main.ad_field_id&lt;br /&gt;
join ad_column col on col.ad_column_id = main.ad_column_id&lt;br /&gt;
join ad_tab tab on tab.ad_tab_id = main.ad_tab_id&lt;br /&gt;
join ad_window win on win.ad_window_id = tab.ad_window_id;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select * from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = '';&lt;br /&gt;
&lt;br /&gt;
update ad_field_trl set name = 'name', description = 'name' where ad_field_trl_uu in (&lt;br /&gt;
	select ad_field_trl_uu from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = ''&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
select main.ad_process_id, trl.ad_language, trl.ad_process_para_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_process_para main&lt;br /&gt;
join ad_process_para_trl trl on trl.ad_process_para_id = main.ad_process_para_id&lt;br /&gt;
where &lt;br /&gt;
	ad_process_id in ( select ad_process_id from ad_process where name like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_column_id, trl.ad_language, trl.ad_column_trl_uu, main.columnname, main.name, main.description, trl.name from&lt;br /&gt;
ad_column main&lt;br /&gt;
join ad_column_trl trl on trl.ad_column_id = main.ad_column_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_column_id in ( select ad_column_id from ad_column where columnname like '' );&lt;br /&gt;
	&lt;br /&gt;
select main.ad_element_id, trl.ad_language, trl.ad_element_trl_uu, main.columnname, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_element main&lt;br /&gt;
join ad_element_trl trl on trl.ad_element_id = main.ad_element_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_element_id in ( select ad_element_id from ad_element where columnname like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_menu_id, main.ad_menu_uu, trl.ad_language, trl.ad_menu_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_menu main&lt;br /&gt;
join ad_menu_trl trl on trl.ad_menu_id = main.ad_menu_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_menu_id in ( select ad_menu_id from ad_menu where name like '' );&lt;br /&gt;
&lt;br /&gt;
-- For 2pack (sync UUID's)&lt;br /&gt;
update ad_menu_trl &lt;br /&gt;
set ad_menu_trl_uu = '521bf63c-c0ab-40ac-a188-fe7cfd0a9612'&lt;br /&gt;
from ad_menu b&lt;br /&gt;
where &lt;br /&gt;
ad_menu_trl.ad_menu_id = b.ad_menu_id&lt;br /&gt;
and b.ad_menu_uu = 'ccf0fc37-76cc-4a3c-8e1c-80d4c28e695a';&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack out =&lt;br /&gt;
&lt;br /&gt;
== Backup AD information before running 2pack ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * into bk_rq16_process from ad_process;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_table from ad_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_column from ad_column;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_window from ad_window;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_tab from ad_tab;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_field from ad_field;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_reference from ad_reference;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_table from ad_ref_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_list from ad_ref_list;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields + tabs on windows (for Pack In) ==&lt;br /&gt;
&lt;br /&gt;
* Helps to ensure is packed in correctly&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Packout/Packin package details ==&lt;br /&gt;
&lt;br /&gt;
* Work in progress&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Imp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Duplicate key error when importing AD_Message ==&lt;br /&gt;
&lt;br /&gt;
* unique constraint (...AD_MESSAGE_TRL_KEY) violated&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_message_trl&lt;br /&gt;
WHERE AD_Message_ID=&lt;br /&gt;
( SELECT ad_message_id FROM ad_message WHERE value='KEYOFMESSAGE' );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all attachments of process ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_attachment where record_id in (&lt;br /&gt;
	select ad_process_id from ad_process where value like '%MYPROCESSKEY%' ) and &lt;br /&gt;
ad_table_id = (select ad_table_id from ad_table where tablename='AD_Process');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Migration scripts =&lt;br /&gt;
&lt;br /&gt;
== Which migration scripts have been run ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select releaseno,created,name,status,isapply,filename, script  from ad_migrationscript order by releaseno, name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11349</id>
		<title>Queries: AD</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_AD&amp;diff=11349"/>
		<updated>2017-04-05T00:59:48Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= Client =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_client_id,value,name from ad_client order by ad_client_id;&lt;br /&gt;
&lt;br /&gt;
select ad_client_id from ad_client where name like 'A%'; &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Windows =&lt;br /&gt;
== Windows referencing a specific process ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select name from ad_window where ad_window_id in (&lt;br /&gt;
select ad_window_id from ad_tab where ad_process_id in (&lt;br /&gt;
select ad_process_id from ad_process where value = 'processname')&lt;br /&gt;
);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_window a&lt;br /&gt;
where a.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tab ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_tab a&lt;br /&gt;
where a.ad_window_id=id&lt;br /&gt;
&lt;br /&gt;
select distinct a.whereclause from ad_tab a &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.name as WindowName from ad_tab a&lt;br /&gt;
join ad_window b on a.ad_window_id = b.ad_window_id&lt;br /&gt;
where &lt;br /&gt;
	a.ad_table_id = &lt;br /&gt;
	(select ad_table_id from ad_table where name='tablename');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Field information =&lt;br /&gt;
&lt;br /&gt;
== Field ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_field a&lt;br /&gt;
join ad_tab b on a.ad_tab_id=b.ad_tab_id&lt;br /&gt;
where b.ad_window_id=id&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Combining Window, tab, field ==&lt;br /&gt;
	&lt;br /&gt;
=== As a view ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;drop view if exists zz_fieldinfo_v;&lt;br /&gt;
&lt;br /&gt;
create view zz_fieldinfo_v as&lt;br /&gt;
select &lt;br /&gt;
	tabtable.tablename as table_name, &lt;br /&gt;
	tabtable.entitytype as table_entitytype,&lt;br /&gt;
  	fld.isdisplayed as field_isdisplayed,&lt;br /&gt;
  	fld.seqno as field_seqno,&lt;br /&gt;
  	fld.name as field_name, &lt;br /&gt;
	col.columnname as column_name,&lt;br /&gt;
  	fld.displaylogic as field_display_logic,&lt;br /&gt;
	fld.readonlylogic as field_readonly_logic,&lt;br /&gt;
	tab.name as tab_name,&lt;br /&gt;
	win.name as WindowName, &lt;br /&gt;
	win.ad_window_id,&lt;br /&gt;
	tab.ad_tab_id,&lt;br /&gt;
  	tab.isactive as tab_isactive,&lt;br /&gt;
  	fld.ad_field_uu,&lt;br /&gt;
	fld.ad_field_id,&lt;br /&gt;
	fld.iscentrallymaintained as field_centrallymaintained,&lt;br /&gt;
	fld.ismandatory as field_ismandatory,&lt;br /&gt;
	fld.mandatorylogic as field_mandatorylogic,&lt;br /&gt;
	col.ad_element_id,&lt;br /&gt;
	ele.name as element_name,&lt;br /&gt;
	ref.name as ref_name, refvalue.name as ref_value,&lt;br /&gt;
	refvalue.ad_reference_id,&lt;br /&gt;
	reftabletbl.tablename as ref_table,&lt;br /&gt;
	col.created as column_created, col.updated as column_updated,&lt;br /&gt;
	fld.created as field_created, fld.updated as field_updated,&lt;br /&gt;
	fld.ad_val_rule_id as field_val_rule_id&lt;br /&gt;
from &lt;br /&gt;
	ad_field fld&lt;br /&gt;
join ad_tab tab on fld.ad_tab_id = tab.ad_tab_id&lt;br /&gt;
join ad_table tabtable on tabtable.ad_table_id = tab.ad_table_id&lt;br /&gt;
join ad_window win on tab.ad_window_id = win.ad_window_id&lt;br /&gt;
join ad_column col on fld.ad_column_id = col.ad_column_id&lt;br /&gt;
join ad_element ele on ele.ad_element_id = col.ad_element_id&lt;br /&gt;
left join ad_reference ref on col.ad_reference_id = ref.ad_reference_id&lt;br /&gt;
left join ad_reference refvalue on col.ad_reference_value_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_ref_table reftable on reftable.ad_reference_id = refvalue.ad_reference_id&lt;br /&gt;
left join ad_table reftabletbl on reftabletbl.ad_table_id = reftable.ad_table_id&lt;br /&gt;
order by win.name, tab.seqno, field_seqno;&lt;br /&gt;
&lt;br /&gt;
select field_display_name, field_ismandatory, field_mandatorylogic from zz_fieldinfo_v where windowname like  'C%' and field_mandatorylogic is not null;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Show fields by update date (useful to run after loading 2pack) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select column_updated, column_name, * from zz_fieldinfo_v order by column_updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Form =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.entitytype, a.name, a.classname from ad_form a where a.entitytype='U' order by classname;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table =&lt;br /&gt;
== Table ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.* from ad_table a&lt;br /&gt;
order by a.created desc;&lt;br /&gt;
&lt;br /&gt;
select a.* from ad_table a&lt;br /&gt;
where a.ad_table_id in (id, id)&lt;br /&gt;
&lt;br /&gt;
(select ad_table_id from ad_table where tablename='tablename')&lt;br /&gt;
&lt;br /&gt;
delete from ad_table where ad_table_id in (select ad_table_id from ad_table where tablename='tablename');&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Table Columns =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.name, a.columnname, a.created from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in ((select ad_table_id from ad_table where tablename='tablename'))&lt;br /&gt;
order by a.name;&lt;br /&gt;
--order by a.created desc;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Menu =&lt;br /&gt;
&lt;br /&gt;
== All the main (root) menu items in a tree ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;SELECT m.name, mm.* FROM AD_TreeNodeMM mm&lt;br /&gt;
left join ad_menu m on mm.node_id = m.ad_menu_id&lt;br /&gt;
WHERE mm.AD_Tree_ID=1000171 and mm.parent_id=0;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update entity type ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set entitytype='U' where ad_column_id=3510;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Callout =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select a.ad_column_id,tbl.tablename, a.columnname,a.name, a.callout from ad_column a&lt;br /&gt;
join ad_table tbl on a.ad_table_id = tbl.ad_table_id&lt;br /&gt;
where a.callout is not null and a.callout like '%bPartner%'&lt;br /&gt;
--and tbl.tablename = 'C_BankStatementLine'&lt;br /&gt;
order by tbl.tablename, a.callout, a.name;&lt;br /&gt;
--order by a.updated desc;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update callout ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_column set callout = 'org.compiere.model.CalloutInvoiceNew.bPartner' where ad_column_id = 3499;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_ref_list where ad_reference_id in ( select ad_reference_id from ad_reference where name = 'Ref Name' );&lt;br /&gt;
-&lt;br /&gt;
Incomplete:&lt;br /&gt;
left join&lt;br /&gt;
	ad_reference ref on ref.name = 'ZZ_Status'&lt;br /&gt;
left join&lt;br /&gt;
	ad_ref_list reflist on reflist.ad_reference_id = ref.ad_reference_id and reflist.value = perm.zz_status&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For use in Jasper Report to lookup reference name ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;( SELECT rl.name FROM ad_ref_list rl WHERE ((rl.ad_reference_id = (select ad_reference_id from ad_reference where name = 'my ref name')::numeric) AND ((rl.value)::text = (v.ice_fuel_type)::text))) AS field_name&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Validation Rules ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_val_rule_id, name, code from ad_val_rule where upper(code) like upper('%quota%');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Elements =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select b.* from ad_column a&lt;br /&gt;
join ad_element b on a.ad_element_id=b.ad_element_id&lt;br /&gt;
where a.ad_table_id in (1000153, 1000152, 1000154, 1000156)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Report and process =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_process order by created desc;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select ad_process_id, value, name,description, classname, jasperreport from ad_process where upper(value) like upper('%') order by value;&lt;br /&gt;
&lt;br /&gt;
select * from ad_process_para where ad_process_para_id = 1000000;&lt;br /&gt;
&lt;br /&gt;
select columnname, name, defaultvalue from ad_process_para where ad_process_id = 1000000 order by seqno;&lt;br /&gt;
&lt;br /&gt;
update ad_process_para set defaultvalue='1' where ad_process_id = 1000000 and columnname = 'columname';	--Sequence&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Deletion =&lt;br /&gt;
== Delete all fields on window ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name like 'Name of window' &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields on tab ==&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;nowiki&amp;gt;1. &lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where name = 'tabname' and ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
	select ad_window_id from ad_window where name = 'Name of window' &lt;br /&gt;
) );&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
delete from ad_field where ad_tab_id in ( select ad_tab_id from ad_tab where ad_tab_uu in ( 'df93f2c3-f95b-4195-822d-d2f3c590b077' ) );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all occurences of column from windows ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_field where ad_column_id in &lt;br /&gt;
( select ad_column_id from ad_column where upper(columnname) like upper('zz_nbsm_matchsetup_id') )&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sequences =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_sequence a set CURRENTNEXTSYS =13000  where a.name = 'name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Doctype =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_doctype_id from c_doctype where name = 'DocumentName'&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Attachments =&lt;br /&gt;
&lt;br /&gt;
== All pack-in attachments ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * from ad_attachment where ad_table_id = 50008 and record_id in (&lt;br /&gt;
  select AD_Package_Imp_Proc_id from AD_Package_Imp_Proc where name like '%%' &lt;br /&gt;
  );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Synchronize Translations =&lt;br /&gt;
&lt;br /&gt;
An example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;update ad_process_trl a set name = b.name, description = b.name from ad_process b where a.ad_process_id = b.ad_process_id and b.name = 'Process Name';&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
== Various helpers (work in progress) ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select ad_message_id, value, msgtext, msgtip from ad_message where upper(msgtext) like upper('%login%') order by msgtext;&lt;br /&gt;
&lt;br /&gt;
drop view if exists zz_trl_helper_field_v;&lt;br /&gt;
&lt;br /&gt;
create or replace view zz_trl_helper_field_v  as &lt;br /&gt;
select &lt;br /&gt;
	main.ad_field_id, &lt;br /&gt;
	trl.ad_language, trl.ad_field_trl_uu, &lt;br /&gt;
	main.ad_field_uu, main.name as field_name, main.description as main_description, &lt;br /&gt;
	trl.name as trl_name, trl.description as trl_description, &lt;br /&gt;
	win.name as window_name, &lt;br /&gt;
	col.columnname&lt;br /&gt;
from&lt;br /&gt;
ad_field main&lt;br /&gt;
join ad_field_trl trl on trl.ad_field_id = main.ad_field_id&lt;br /&gt;
join ad_column col on col.ad_column_id = main.ad_column_id&lt;br /&gt;
join ad_tab tab on tab.ad_tab_id = main.ad_tab_id&lt;br /&gt;
join ad_window win on win.ad_window_id = tab.ad_window_id;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
select * from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = '';&lt;br /&gt;
&lt;br /&gt;
update ad_field_trl set name = 'name', description = 'name' where ad_field_trl_uu in (&lt;br /&gt;
	select ad_field_trl_uu from zz_trl_helper_field_v where ad_language in ( '' ) and columnname = ''&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
select main.ad_process_id, trl.ad_language, trl.ad_process_para_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_process_para main&lt;br /&gt;
join ad_process_para_trl trl on trl.ad_process_para_id = main.ad_process_para_id&lt;br /&gt;
where &lt;br /&gt;
	ad_process_id in ( select ad_process_id from ad_process where name like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_column_id, trl.ad_language, trl.ad_column_trl_uu, main.columnname, main.name, main.description, trl.name from&lt;br /&gt;
ad_column main&lt;br /&gt;
join ad_column_trl trl on trl.ad_column_id = main.ad_column_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_column_id in ( select ad_column_id from ad_column where columnname like '' );&lt;br /&gt;
	&lt;br /&gt;
select main.ad_element_id, trl.ad_language, trl.ad_element_trl_uu, main.columnname, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_element main&lt;br /&gt;
join ad_element_trl trl on trl.ad_element_id = main.ad_element_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_element_id in ( select ad_element_id from ad_element where columnname like '' );&lt;br /&gt;
&lt;br /&gt;
select main.ad_menu_id, main.ad_menu_uu, trl.ad_language, trl.ad_menu_trl_uu, main.name, main.description, trl.name, trl.description from&lt;br /&gt;
ad_menu main&lt;br /&gt;
join ad_menu_trl trl on trl.ad_menu_id = main.ad_menu_id&lt;br /&gt;
where &lt;br /&gt;
	trl.ad_language in ( 'en_ZA' ) and&lt;br /&gt;
	main.ad_menu_id in ( select ad_menu_id from ad_menu where name like '' );&lt;br /&gt;
&lt;br /&gt;
-- For 2pack (sync UUID's)&lt;br /&gt;
update ad_menu_trl &lt;br /&gt;
set ad_menu_trl_uu = '521bf63c-c0ab-40ac-a188-fe7cfd0a9612'&lt;br /&gt;
from ad_menu b&lt;br /&gt;
where &lt;br /&gt;
ad_menu_trl.ad_menu_id = b.ad_menu_id&lt;br /&gt;
and b.ad_menu_uu = 'ccf0fc37-76cc-4a3c-8e1c-80d4c28e695a';&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Pack out =&lt;br /&gt;
&lt;br /&gt;
== Backup AD information before running 2pack ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select * into bk_rq16_process from ad_process;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_table from ad_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_column from ad_column;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_window from ad_window;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_tab from ad_tab;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_field from ad_field;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_reference from ad_reference;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_table from ad_ref_table;&lt;br /&gt;
&lt;br /&gt;
select * into bk_rq16_ref_list from ad_ref_list;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all fields + tabs on windows (for Pack In) ==&lt;br /&gt;
&lt;br /&gt;
* Helps to ensure is packed in correctly&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_tab_customization where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
delete from ad_tab where ad_tab_id in ( select ad_tab_id from ad_tab where ad_window_id in &lt;br /&gt;
(&lt;br /&gt;
select ad_window_id from ad_window where name in ( 'nameOfWindow' ) &lt;br /&gt;
) );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Packout/Packin package details ==&lt;br /&gt;
&lt;br /&gt;
* Work in progress&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select &lt;br /&gt;
	hdr.name, det.created, det.updated, det.ad_package_exp_id, det.AD_Package_Exp_Detail_id, det.line, det.description, det.dbtype, det.sqlstatement, det.ad_table_id, tbl.tablename&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp_Detail det&lt;br /&gt;
join AD_Package_Exp hdr on hdr.ad_package_exp_id = det.ad_package_exp_id&lt;br /&gt;
left join ad_table tbl on tbl.ad_table_id = det.ad_table_id;&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Exp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
select &lt;br /&gt;
	updated, hdr.name, hdr.description&lt;br /&gt;
from &lt;br /&gt;
	AD_Package_Imp hdr&lt;br /&gt;
order by updated desc;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Duplicate key error when importing AD_Message ==&lt;br /&gt;
&lt;br /&gt;
* unique constraint (...AD_MESSAGE_TRL_KEY) violated&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_message_trl&lt;br /&gt;
WHERE AD_Message_ID=&lt;br /&gt;
( SELECT ad_message_id FROM ad_message WHERE value='KEYOFMESSAGE' );&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Delete all attachments of process ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;delete from ad_attachment where record_id in (&lt;br /&gt;
	select ad_process_id from ad_process where value like '%MYPROCESSKEY%' ) and &lt;br /&gt;
ad_table_id = (select ad_table_id from ad_table where tablename='AD_Process');&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Migration scripts =&lt;br /&gt;
&lt;br /&gt;
== Which migration scripts have been run ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select releaseno,created,name,status,isapply,filename, script  from ad_migrationscript order by releaseno, name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=IDempiere_Documents&amp;diff=11325</id>
		<title>IDempiere Documents</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=IDempiere_Documents&amp;diff=11325"/>
		<updated>2017-03-21T22:23:18Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
= SmartPOS: Various documents =&lt;br /&gt;
&lt;br /&gt;
== Documents supported ==&lt;br /&gt;
&lt;br /&gt;
Among others:&lt;br /&gt;
&lt;br /&gt;
* createSalesOrder&lt;br /&gt;
* createPurchaseOrder&lt;br /&gt;
* createOrderLine&lt;br /&gt;
* createMInOut&lt;br /&gt;
* createIOLine&lt;br /&gt;
* createInvoice&lt;br /&gt;
* createInvoiceLine&lt;br /&gt;
* createPayment&lt;br /&gt;
* createMovement&lt;br /&gt;
* createMovementLine&lt;br /&gt;
&lt;br /&gt;
== Link to source code ==&lt;br /&gt;
&lt;br /&gt;
* '''Source code:''' https://bitbucket.org/PedroRozo_SmartJSP/smartpos3-erp/src/6aa37da834fd9301db4e50ff2530be1087ff8b56/SmartPOSWeb/src/com/smj/util/Documents.java?at=default&lt;br /&gt;
* '''Plugin:''' http://wiki.idempiere.org/en/Plugin:_SmartPOS&lt;br /&gt;
* '''Credit:''' [[User:Smartjsp|User:Smartjsp]] ([[User talk:Smartjsp|talk]]) - [http://www.smartjsp.com SmartJSP]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* Recommended, that in the code given above, remove the exception handlers, and change .save to .saveEx&lt;br /&gt;
&lt;br /&gt;
= Create payment =&lt;br /&gt;
&lt;br /&gt;
Example of payment creation, with various features.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;private void createPayment() {&lt;br /&gt;
		&lt;br /&gt;
		m_payment = new MPayment(m_ctx, 0,  m_trxName);&lt;br /&gt;
		&lt;br /&gt;
		m_payment.setAD_Org_ID( m_AD_Org_ID );&lt;br /&gt;
		/****************************************************************************&lt;br /&gt;
		 * Set fields&lt;br /&gt;
		 ****************************************************************************/&lt;br /&gt;
		m_payment.setC_BPartner_ID( m_matchSetup.getC_BPartner_ID() );&lt;br /&gt;
		if ( ! m_payment.getC_BPartner().isActive() ) {&lt;br /&gt;
			throw new AdempiereException( String.format(&amp;quot;Business Partner is inactive&amp;quot; ) );&lt;br /&gt;
		}&lt;br /&gt;
		m_payment.setDateAcct					( m_dateAcct );&lt;br /&gt;
		m_payment.setDateTrx						( m_dateAcct );&lt;br /&gt;
		m_payment.setPayAmt						( m_stmtAmt.abs() );&lt;br /&gt;
		m_payment.setC_BankAccount_ID			( m_C_BankAccount_ID );&lt;br /&gt;
//			if ( ! m_po.getC_BankAccount().isActive() ) {&lt;br /&gt;
//				throw new AdempiereException( String.format(&amp;quot;Bank Account is inactive&amp;quot; ) );&lt;br /&gt;
//			}&lt;br /&gt;
		&lt;br /&gt;
//			m_po.setDocumentNo( thedocumentno );&lt;br /&gt;
		&lt;br /&gt;
		m_payment.setIsReceipt( m_isReceipt );&lt;br /&gt;
//		Still need to share NTierUtils on the Wiki&lt;br /&gt;
		m_payment.setC_Currency_ID( MClient.get(Env.getCtx()).getC_Currency_ID() );&lt;br /&gt;
//			&lt;br /&gt;
		m_payment.saveEx();&lt;br /&gt;
		&lt;br /&gt;
		// Chat - see http://wiki.idempiere.org/en/Code_Scratchpad:_Java:_General&lt;br /&gt;
		NTierChatUtils.addChat (m_payment.getCtx(), m_payment.get_TrxName(), &lt;br /&gt;
				m_payment, &lt;br /&gt;
				String.format(NBSM_Common.getChatPrefix() + &amp;quot;Payment created. &amp;quot;) + &lt;br /&gt;
				String.format(&amp;quot;Bank statement: '%s'/Line No: %s &amp;quot;, m_bankStatementName, m_bankStatementLineNo) +&lt;br /&gt;
				m_matchSetup.toString() );&lt;br /&gt;
		&lt;br /&gt;
		// Sanity check&lt;br /&gt;
		if ( m_payment.getAD_Org_ID() != m_AD_Org_ID ) {&lt;br /&gt;
			throw new AdempiereException( String.format(&lt;br /&gt;
					&amp;quot;The org has changed after saving the record. This is caused by the bank account &amp;quot; +&lt;br /&gt;
					&amp;quot; having a different org to the requested org. Please select a different bank account, &amp;quot; +&lt;br /&gt;
					&amp;quot; or correct the org on the selected bank account.&amp;quot;) );&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		info.setC_Payment_ID( m_payment.get_ID() );&lt;br /&gt;
		&lt;br /&gt;
		/****************************************************************************&lt;br /&gt;
		 * Complete Document&lt;br /&gt;
		 ****************************************************************************/&lt;br /&gt;
		String docAction = DocAction.ACTION_Complete;&lt;br /&gt;
		m_payment.setDocAction( docAction );&lt;br /&gt;
		m_payment.processIt( docAction );&lt;br /&gt;
		m_payment.saveEx();&lt;br /&gt;
		&lt;br /&gt;
		if ( ! docAction.equals( m_payment.getDocStatus() )) {&lt;br /&gt;
			String msg = String.format(&amp;quot;Error completing document: Invalid resulting status:- '%s' (expected '%s') Process Message:- '%s'&amp;quot;, &lt;br /&gt;
					m_payment.getDocStatus(), docAction, m_payment.getProcessMsg() );&lt;br /&gt;
			throw new AdempiereException( msg );&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
//				addInfo(&amp;quot;Payment has been created and successfully completed.&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		return;&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Credit: nTier Software Services http://www.ntier.co.za&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
	<entry>
		<id>https://wiki.idempiere.org/w-en/index.php?title=Queries:_Bank_Statement&amp;diff=11324</id>
		<title>Queries: Bank Statement</title>
		<link rel="alternate" type="text/html" href="https://wiki.idempiere.org/w-en/index.php?title=Queries:_Bank_Statement&amp;diff=11324"/>
		<updated>2017-03-21T13:18:32Z</updated>

		<summary type="html">&lt;p&gt;Ngordon7000: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code Scratchpad]]&lt;br /&gt;
[[Category:Development‏‎]]&lt;br /&gt;
[[Category:Developer documentation‏‎]]&lt;br /&gt;
&lt;br /&gt;
= General =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;select c_bankstatement_id,name from c_bankstatement where ad_client_id = 1000009 order by name;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Rough working queries to reinstate voided bank statement =&lt;br /&gt;
&lt;br /&gt;
* Possibly could be converted into a plugin&lt;br /&gt;
* Refer to MBankStatement.voidIt&lt;br /&gt;
* It should also be possible to simply delete the bank statement and reinsert the copy before void was done instead of using the staging table, but I didn't try it.&lt;br /&gt;
* Take a backup before running any queries&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;-- select docstatus, * from c_bankstatement where C_BankStatement_ID=1000200;&lt;br /&gt;
&lt;br /&gt;
-- Backup&lt;br /&gt;
select * into bk_20160906_bankstatement from c_bankstatement where c_bankstatement_id = 1000200;&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20160906_bankstatement;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20160906_bankstatementline from c_bankstatementline where c_bankstatement_id = 1000200;&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20160906_bankstatementline;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20160906_payment from c_payment;&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20160906_payment;&lt;br /&gt;
&lt;br /&gt;
select * into bk_20160906_c_bankaccount from c_bankaccount where c_bankaccount_id  =&lt;br /&gt;
(select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000200);&lt;br /&gt;
&lt;br /&gt;
select count(*) from bk_20160906_c_bankaccount;&lt;br /&gt;
&lt;br /&gt;
-- Staging tables (must contain the original data before void was done)&lt;br /&gt;
select * into zz_stage_bankstatement from c_bankstatement where c_bankstatement_id = 1000200;&lt;br /&gt;
delete from zz_stage_bankstatement;&lt;br /&gt;
select * into zz_stage_bankstatementline from c_bankstatementline where c_bankstatement_id = 1000200;&lt;br /&gt;
delete from zz_stage_bankstatementline;&lt;br /&gt;
&lt;br /&gt;
select count(*) from zz_stage_bankstatement;&lt;br /&gt;
select count(*) from zz_stage_bankstatementline;&lt;br /&gt;
select count(*) from c_bankstatement where c_bankstatement_id = 1000200;&lt;br /&gt;
select count(*) from c_bankstatementline where c_bankstatement_id = 1000200;&lt;br /&gt;
select count(*) from c_bankstatementline where c_bankstatement_id = 1000200 and c_payment_id is not null; --106&lt;br /&gt;
&lt;br /&gt;
select count(*) from c_payment where isreconciled = 'Y' and c_payment_id in (select c_payment_id from c_bankstatementline where c_bankstatement_id = 1000200); -- 106&lt;br /&gt;
&lt;br /&gt;
update c_bankstatement&lt;br /&gt;
	set&lt;br /&gt;
		docstatus = b.docstatus ,&lt;br /&gt;
		docaction = b.docaction ,&lt;br /&gt;
		processed = b.processed ,&lt;br /&gt;
		description = b.description ,&lt;br /&gt;
		statementdifference = b.statementdifference&lt;br /&gt;
from&lt;br /&gt;
	zz_stage_bankstatement b &lt;br /&gt;
where &lt;br /&gt;
	c_bankstatement.c_bankstatement_id = 1000200 and &lt;br /&gt;
	c_bankstatement.c_bankstatement_id = b.c_bankstatement_id ;&lt;br /&gt;
&lt;br /&gt;
update c_bankstatementline&lt;br /&gt;
	set&lt;br /&gt;
		description = b.description ,&lt;br /&gt;
		stmtamt = b.stmtamt ,&lt;br /&gt;
		trxamt = b.trxamt ,&lt;br /&gt;
		chargeamt = b.chargeamt ,&lt;br /&gt;
		interestamt = b.interestamt,&lt;br /&gt;
		c_payment_id = b.c_payment_id&lt;br /&gt;
from&lt;br /&gt;
	zz_stage_bankstatementline b &lt;br /&gt;
where &lt;br /&gt;
	c_bankstatementline.c_bankstatement_id = 1000200 and&lt;br /&gt;
	c_bankstatementline.c_bankstatementline_id = b.c_bankstatementline_id ;&lt;br /&gt;
&lt;br /&gt;
-- ba.setCurrentBalance(ba.getCurrentBalance().subtract(getStatementDifference()));&lt;br /&gt;
&lt;br /&gt;
select currentbalance from c_bankaccount where c_bankaccount_id = ( &lt;br /&gt;
	select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000200 &lt;br /&gt;
	);&lt;br /&gt;
	&lt;br /&gt;
update c_bankaccount&lt;br /&gt;
set currentBalance = currentBalance + &lt;br /&gt;
(select statementdifference from c_bankstatement where c_bankstatement_id = 1000200)&lt;br /&gt;
where c_bankaccount_id = ( &lt;br /&gt;
	select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000200 &lt;br /&gt;
	)&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
select currentbalance from c_bankaccount where c_bankaccount_id = ( &lt;br /&gt;
	select c_bankaccount_id from c_bankstatement where c_bankstatement_id = 1000200 &lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
update c_payment set&lt;br /&gt;
isreconciled = 'Y' &lt;br /&gt;
where c_payment_id in (select c_payment_id from c_bankstatementline where c_bankstatement_id = 1000200);&lt;br /&gt;
&lt;br /&gt;
-- Expect 106&lt;br /&gt;
select count(*) from c_payment where isreconciled = 'Y' and c_payment_id in (select c_payment_id from c_bankstatementline where c_bankstatement_id = 1000200);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''This page is brought to you by [http://www.ntier.co.za nTier Software Services].  Feel free to improve directly or suggest using the Discussion tab.&lt;/div&gt;</summary>
		<author><name>Ngordon7000</name></author>
	</entry>
</feed>