Càrrega massiva de dades II

De Wikijoan
Dreceres ràpides: navegació, cerca

Amb el mètode explicat a la wiki hem de crear els formats d'importació adequats i, a través d'un fitxer CSV, populem la taula i_product (o la que sigui). Després ja importem les dades i populem m_product.

Ara bé, si es coneix l'estructura de i_product, podem fer insercions directes en aquesta taula, i el resultat és el mateix. L'esforç que fem per genera el fitxer CSV el podem fer per generar un script SQL amb tots els inserts.

El primer que farem és inserir directament les categories de productes, i més quan el mètode oficial no ens serveix per inserir les categories de productes i serveis (no es pot inserir qualsevol cosa amb els formats d'importació).

Les taules involucrades són:

i_product
m_product
m_product_category

Inserció manual de les categories de serveis

openbravo=# select * from m_product_category;

openbravo=# \d m_product_category
 m_product_category_id | numeric(10,0)               | not null
 ad_client_id          | numeric(10,0)               | not null
 ad_org_id             | numeric(10,0)               | not null
 isactive              | character(1)                | not null default 'Y'::bpchar
 created               | timestamp without time zone | not null default now()
 createdby             | numeric(10,0)               | not null
 updated               | timestamp without time zone | not null default now()
 updatedby             | numeric(10,0)               | not null
 value                 | character varying(40)       | not null
 name                  | character varying(60)       | not null
 description           | character varying(255)      | 
 isdefault             | character(1)                | not null default 'N'::bpchar
 plannedmargin         | numeric                     | not null
 a_asset_group_id      | numeric(10,0)               | 

Veient quina és l'estructura de m_product_category (sobretot mirant quins són els camps obligatoris que no tenen valor per defecte), i a partir de les dades de què disposo, puc construir un script SQL:

insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000001, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'DOM-0','Dominis','Dominis','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000002, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'DOM-1','Registre dominis','Registre dominis','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000003, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'HOS-0','Hosting compartit','Hosting compartit','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000004, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'HOS-1','Plans','Plans','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000005, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'HOS-2','Servidor virtual','Servidor virtual','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000006, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'SER-0','Servidores dedicats','Servidores dedicats','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000007, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'SER-1','Servidor dedicat model','Servidor dedicat model','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000008, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'SER-2','Servidor dedicat administrat','Servidor dedicat administrat','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000009, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'SER-3','Servidor dedicat de correu','Servidor dedicat de correu','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000010, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'ACC-I','Accés a Internet','Accés a Internet','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000011, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'HOST DNS','Hosting DNS','Hosting DNS','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000012, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'HOST MAIL','Hosting de correu','Hosting de correu','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000013, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'APL-0','Aplicacions','Aplicacions','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000014, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'APL-1','Balmes Backup','Balmes Backup','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000015, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'APL-2','Alta en cercadors','Alta en cercadors','N',0);
insert into m_product_category(m_product_category_id,ad_client_id,ad_org_id,isactive,created,createdby,updated,updatedby,value,name,description,isdefault,plannedmargin) values(1000016, 1000000,0,'Y','2008-11-30',1000000,'2008-11-30',1000000,'APL-3','tenda online','tenda online','N',0);

El valor de m_product_category_id el faig consecutiu a partir de l'últim valor que tinc.

Inserció manual en la taula i_product

La documentació em diu quins són els camps obligatoris per a i_product: Search key, Name, Product type, Business Partner and Product Category. El Search Key normalment es correspon amb el camp Value, i té el sentit de referència, és a dir, una clau primària que es fa servir en l'organització per identificar l'article (no és la clau primària interna d'openbravo ..._id).

Això no vol dir que siguin els únics camps obligatoris per a m_product. Senzillament, que si només s'especifiquen aquests, en el procés de càrrega la resta de camps obligatoris s'omplen automàticament amb valors per defecte (per ex createdby, updatedby, c_taxcategory_id)

Això ho podem veure fent

\d i_product
\d m_product

Puc ficar directament les dades dins de i_product:

insert into i_product(i_product_id,ad_client_id,ad_org_id,value,name,description,producttype,m_product_category_id,pricepo,pricelist) values(1,1000000,0,'ref1','article1','desc_article1','S',1000001,25,20);
insert into i_product(i_product_id,ad_client_id,ad_org_id,value,name,description,producttype,m_product_category_id,pricepo,pricelist) values(2,1000000,0,'ref2','article2','desc_article2','I',1000003,45,40);

Després de fer el insert, vaig a importar datos -> importar productos, i veig com efectivament ja tinc un article en la taula i_product, llest per importar l'article a m_product. Clico sobre 'importar productos', i es trasllada de forma satisfactòria a la taula m_product (i a altres taules relacionades), excepte el preu. El problema del preu ve relacionat amb la tarifa que aplico, cosa que he de solucionar.

select m_product_id, value, name from m_product;

Veig que ja tinc l'article 1000357

delete from m_product where m_product_id=1000357;

Si vull eliminar-lo, també he d'eliminar la seva referència en i_product.

delete from i_product where i_product_id=1;
delete from m_product where m_product_id=1000357;

ara sí

1. Creo llistes de tarifes
LListes de tarifes
select m_pricelist_id,name,description from m_pricelist;

2. Creo versions de les llistes de tarifes
Versions de les llistes de tarifes

select m_pricelist_version_id,name,description,isactive,m_pricelist_id,m_discountschema_id from m_pricelist_version;

3. Ara ja puc ficar els articles a alguna de les llistes de tarifes
select m_pricelist_version_id,m_product_id,isactive,pricelist,pricestd,pricelimit from m_productprice;

pricelist: preu tarifa
pricestd: preu estàndar
pricelimit: preu límit: preu que no podrà baixar per sota

Per tant, per tal de què en fer una importació de productes m'apareguin els preus correctament, prèviament ha d'existir una llista de tarifes que tingui almenys una versió.

i_product: pricelist, pricepo, priceeffective

potser per acabar-ho s'ha de fer manualment, en la taula m_productprice, l'associació del producte que he importat (m_product_id) amb la versió de tarifes (m_pricelist_version_id)

Un cop fetes aquestes insercions
insert into m_productprice ...

ja podem veure els preus cercant en dades mestres -> producte

Anem a fer-ho:
select m_product_id,name from m_product;
1000005;"art1"

select m_pricelist_version_id,name,description,isactive,m_pricelist_id,m_discountschema_id from m_pricelist_version;


1000005;"03-12-2008";"";"Y";1000004;1000001

insert into m_productprice(
m_pricelist_version_id,
m_product_id,
ad_client_id,
ad_org_id,
isactive,
createdby,
updatedby,
pricelist,
pricestd,
pricelimit)
VALUES(1000005,1000005,1000002,0,'Y',1000006,1000006,50,40,30);

Precio tarifa: Precio de catálogo establecido por el proveedor.
Pr. estándar: Indica el precio final del producto impuestos no incluidos.
Pr. límite: Indica el precio más bajo para un producto establecido en los precios de las tarifas. 

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines