Тази статия носи информативен характер и споделя личния опит на автора да извърши автоматизирано действие за което има разработени безплатни и платени решения.
Авторът не поема никаква отговорност ако това решение не проработи при Вас и е извън препоръчаните методи за импорт от страна на разработчика на Warehouse Open. Решението е плод на експеримент с продукти с отворен код и не претендира за функционалност и практичност.
Въпреки това прилагам снимков материал, споделям наученото в процеса на работа и оставам на разположение на всеки който иска да разбере повече или среща трудности при опит да реализира това решение за внасяне на CSV файлове и съхранение на данни в Warehosue Open - можете да ми пишете колеги.
Сблъсквайки се с желание на мой клиент да ползва приличен складов софтуер се насочих
към Warehouse Open. Програмата се инсталира лесно и дава възможности за многоплатформено ползване
което според мен е присъщо за приложенията с Отворен код, въпреки че разработчикът Microinvest я е насочил главно към потребителите на Линукс.
Последните за жалост са малко - клиентите ползват Линукс за сървърни решения и нямат практика и изградена бизнес и фирмена идеология за ползване на Отворени Операционни системи за настолна работа, за което ние можем да спомогнем. При всяко положение добрите продукти и решения дават възможност на потребителя да избере средата в която е свикнал да работи, особенно щом са реализирани под GPL лиценз - примерите са десетки и все на успешни проекти.
Относно Warehouse Open впечатление прави невъзможността за архивиране и експорт на данни от самата програма (базовата версия). Вероятно има платени решения за случая но ние - ползвайки среда и програма с отворен код, можем да си облекчим пределно работата разчитайки на възможностите на PHP MyAdmin - едно сериозно и професионално решение с отворен код за работа с бази данни.
След като инсталирате MySQL и Warehouse Open, инсталирайте PHP MyAdmin.
http://www.phpmyadmin.net/home_page/index.php
PHP MyAdmin се конфигурира за работа със сървъра Апач спoред типа дистрибуция и ОС която ползвате. В случая с Debian Lenny можете да извикате командата echo "Include /etc/phpmyadmin/apache.conf" >> /etc/apache2/apache2.conf за да сработят настройките на PHP MyAdmin (или прочетете наръчник он-лайн за конкретната ОС или дистрибуция). Адресът при правилна настройка е 127.0.0.1 или IP на хоста и каталог /phpmyadmin/ - ще Ви бъдат поискани потребителско име и парола за достъп до базата данни MySQL.
С негова помощ ще можете да следите записите които прави Warehouse Open при операции, да експортирате базата данни и таблици с продукти, продуктови групи, клиенти и др., което е жизненоважно при архивиране на информация от складовата програма. Всичко това можете да правите и дистанционно
през Интернет или локалната мрежа с помоща на PHP MyAdmin.
Казус
Какво се случва когато Ваш клиент иска да внесе 10.000 артикула в Warehose Open?
Ами вариантите са няколко - да се въведат на ръка (безумие), да бъдат импортнати чрез платен модул (казаха ми че има такъв за CSV импорт), друго решение което ми бе подсказано от Г-н Виктор Павлов, или както аз подходих - да инсталирам мощния PHP MyAdmin и да пробвам чрез него, или възможностите за импорт на MySQL от команден ред, на CSV файл.
Важно - при използването на това решение не извършвайте операции с продуктите преди да ги
въведете като продуктови групи и импортирате акуратно от CSV файла по начина описан по-долу,
освен за пробни нужди.
И така да започваме - имаме данни за продукти във формат на електронни таблици. Първоначално ги оставяме настрана и създаваме основните продуктови групи в Warehouse Open.
http://www.linuxprojects.eu/zenphoto/warehouse_open_csv_import/suzdavane...
Това могат да бъдат каквито и да е наименования, само че при създаването им и листинг през PHP MyAdmin на таблицата goodsgroups ще видим тези групи които се намират в колонката ID. Това ни дава вече ориентир къде можем да сложим дадените 1-n продукта.
http://www.linuxprojects.eu/zenphoto/warehouse_open_csv_import/goodsgrou...
След това отваряме електронната таблица в която имаме някакви данни за продуктите
и според колонките които съществуват в нея преценяваме в кои съответстващи колони от таблицата goods можем да извършим записи, експортирайки я в CSV формат. Например ако имаме таблици с данни - Код, Име на продукт, Описание, Доставна цена, Цена на едно, Цена на дребно трябва да добавим още една колонка която да отговаря по индекс на Group ID от на съответната група продукти в таблицата goodsgroups. В случая съм подчертал Силиконови въздуховоди и групата е "4".
http://www.linuxprojects.eu/zenphoto/warehouse_open_csv_import/warehouse...
След това се насочваме към таблицата goods за да видим в кои полета можем да впишем данни от нашия файл. Сравняваме с данните които имаме за нашите продукти които искаме да внесем и в случая да речем можем да впишем в колони отговарящи на параметрите по-горе: Code, Name, Description, PriceIn, PriceOut1, PriceOut2 и GroupID.
http://www.linuxprojects.eu/zenphoto/warehouse_open_csv_import/goods_tab...
http://www.linuxprojects.eu/zenphoto/warehouse_open_csv_import/goods_scr...
За да впишем данни в тях трябва да съхраним файл с данни в електронна таблица отговарящ на тези полета в CSV формат с делител "," или ";" между полетата. Важно е да сте в режим на локализация САЩ или друга с делител "." за десетичните знаци (по подразбиране в локал BG е ","). Ако делителят е запетая числата в MySQL биват закръглявани и ще имате проблеми с внасянето на цени.
http://www.linuxprojects.eu/zenphoto/warehouse_open_csv_import/localisat...
Примерен изход от CSV файл: 111;"обувка кожена мъжка";"Италианска , черна";110.25;120.25;140.5;4
Експортирания файл внасяте чрез инструмента на PHP МyAdmin или чрез команда от реда на MySQL като
в първия случай избирате типа делител и указвате че се вписва в колоните които желаете в случая Code, Name, Description, PriceIn, PriceOut1, PriceOut2, и GroupID като ги разделяте със запетая.
http://www.linuxprojects.eu/zenphoto/warehouse_open_csv_import/csv_file_...
Внасянето от команден ред означава да имате достъп с права за запис в съответната база и от командния ред на MySQL можете да изпълните:
МySQL> LOAD DATA INFILE '/път до файла/файл.csv' INTO TABLE име на базата.goods FIELDS TERMINATED BY ';' ENCLOSED BY ' " ' LINES TERMINATED BY '\r\n' (Code, Name, Description, PriceIn, PriceOut1, PriceOut2, GroupID);
За мен бе по-лесно да ги импортирам файла през PHP MyAdmin, но и двата начина работят като не съм сигурен дали ще възприеме командата за новите редове или можете да минете и без нея - пробвайте.
След успешен импорт продуктите се появяват в съответната група на Warehouse Open.
Има още две неща които трябва да направите - погледнете в таблицата goods и ако има полета със стойност NULL ги изключете (да бъдат Not Null). Също така инициирайте следните команди за преобразуване на стойносите в полетата след импорт "TaxGroup" трябва да има стойност различна от "0" за да не Ви излиза отрицателно ДДС в/у продукта. Същото можете да направите и с колонката "Ratio".
http://www.linuxprojects.eu/zenphoto/warehouse_open_csv_import/goods_not...
Влезте в MySQL команден ред изберете базата данни на Warehouse Open>>
MySQL>use database
MySQL>UPDATE goods SET TaxGroup=replace(TaxGroup,'0','1');
MySQL>UPDATE goods SET Ratio=replace(Ratio,'0','1');
По този начин се освобождаваме от нулевите стойности за стоките и ги причисляваме към ДДС групата с която работим (1).
Дотук бяхме с хамалогията остана една малко по-логическа част и сме готови.
Ако сме въвели правилно продуктите независимо в кои колони пишем ще се визуализират правилно в Warehouse Open само че няма да можем да въвеждаме количества за тях при операциите "Ревизия" и "Доставка". Отново на помощ ще ни дойде PHP MyAdmin и малко наблюдение за работата на програмата в сферата на reverse engeneering ;)
Когато създаваме нов продукт, той бива вписан на две места - в таблицата goods съществува като ID но също така присъства с това ID и ObjectID от 1-5 като полета в таблицата store. В нашия случаи програмата отчита хаотично записи в ObjectID полетата и може да има да записи в ред 1,2 или 4,5
например. В тях може да има нанесени от предишната операция с импорт цени и други данни.
http://www.linuxprojects.eu/zenphoto/warehouse_open_csv_import/store_tab...
Какво трябва да се направи?
Чрез подходящ скрипт инициираме проверка за налични ObjectID 1-5 срещу всяко уникално ID в таблицата store. Ако нямаме запис в полетата ObjectID се създава такъв с празен запис. Те са нужни на програмата за да вписва данни като количества и други данни за стоките. Прилагам такъв скрипт написан от колега който създава таблица store2 която е с правилни записи (обработвайки оригиналната таблица).
http://www.linuxprojects.eu/zenphoto/warehouse_open_csv_import/php_my_ad...
http://www.linuxprojects.eu/zenphoto/warehouse_open_csv_import/script_pl...
избирате команда GO след като въведете скрипта в полето както е показано
Прилагам скрипта тук който се стартира в PHP MyAdmin:
drop table if exists store2;
CREATE TABLE store2
(
ID int(11) NOT NULL auto_increment,
ObjectID int(11) default '0',
GoodID int(11) default '0',
Qtty double default '0',
Price double default '0',
Lot varchar(250) default NULL,
LotID int(11) default '0',
LotOrder int(11) default '0',
PRIMARY KEY (ID),
KEY ID (ID),
KEY GoodID (GoodID),
KEY ObjectID (ObjectID),
KEY Lot (Lot),
KEY LotID (LotID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=17760 ;
insert into store2 (ObjectID,GoodID,Qtty,Price,Lot,LotID,LotOrder) select 1,ID,0, 0,'',1,1 from goods ;
insert into store2 (ObjectID,GoodID,Qtty,Price,Lot,LotID,LotOrder) select 2,ID,0, 0,'',1,1 from goods ;
insert into store2 (ObjectID,GoodID,Qtty,Price,Lot,LotID,LotOrder) select 3,ID,0, 0,'',1,1 from goods ;
insert into store2 (ObjectID,GoodID,Qtty,Price,Lot,LotID,LotOrder) select 4,ID,0, 0,'',1,1 from goods ;
insert into store2 (ObjectID,GoodID,Qtty,Price,Lot,LotID,LotOrder) select 5,ID,0, 0,'',1,1 from goods ;
-- #####################################
Можем да преименуваме старата таблица на store_old през PHP MyAdmin и след това да ползваме store2 преименувана на store.
След преименуване на store2 в store за всеки случаи можем да инициираме команда от реда на MySQL :
MySQL>UPDATE store SET LotID=replace(LotID, '0','1');
MySQL> UPDATE store SET LotOrder=replace(LotOrder, '0','1');
Гарантираща ни еднаквост на внесените продукти с тези създадени и заскладени от самата програма.
След това се уверяваме че Warehouse Open правилно заскладява количества за продукти при операциите "Ревизия", "Доставка" и вади от склад при извършване на "Продажба".
* * *
След всички тези операции, които на пръв поглед изглеждат сложни но всъщност следват логиката на работа на Warehouse Open Вие ще имате въведени продукти които ще бъдат разположени в съответните групи с внесени параметри за тях, с възможност да бъдат обработвани.
Нямаше да прибегна до такова решение ако не трябваше и не бях вече внесъл над 10.000 артикула в програмата, като не знаех как да продължа напред. Стигайки дотук и създавайки около 100 продуктови групи трябваше да потърся решение което слава Богу и с помоща на колеги намерих (по отношение на MySQL скрипта). Съмнявам се че разработените решения за импорт дават възможност за такова ниво на гъвкавост, каквото предлага ръчният и контролиран от нас импорт на CSV файл с данни.
Надявам се това споделено решение да Ви бъде полезно. Отново заявявам че то може да не е най-лесното или поддържано от колегите от Microinvest като правилно, но в крайна сметка само и единствено чрез проба/грешка и свободата на Отворените решения - можем да достигнем до подобрение и имаме гъвкавост в ползването на даден продукт.
В заключение - архивирайте често базата данни на Warehouse Open като наблегнете на таблиците goods, goodsgroups, store, partnersgroups и partners. PHP MyAdmin е един чудесен инструмент с чиято помощ работата с Warehouse Open се облекчава, дава възможност за импорт и експорт на Вашите данни и остава в рамките на Свободните решения.