+7 499 990-10-21

Может сделать раздел, посвященный POSTGRESQL

Re: Может сделать раздел, посвященный POSTGRESQL

Сообщение Spike » 01 июн 2011, 14:52

BigAndy писал(а):
таблица штрих-кодов может быть перезаписана по данным товароучетки в произвольный момент времени

А не пользоваться совсем скриптом загрузки из товароучётки или повесить запрещение на обновление по тому же триггеру, - такой вариант не подойдёт?

Нет , такой вариант не подойдет...
Изображение
Spike
 
Постов: 400
Зарегистрирован: 26 авг 2009, 15:33
Откуда: Курская обл. г.Льгов

Re: Может сделать раздел, посвященный POSTGRESQL

Сообщение Alexander » 01 июн 2011, 14:52

Отношение sales_bydate_operation не существует

В этом и проблема.
Alexander
 
Постов: 4955
Зарегистрирован: 16 авг 2009, 23:34
Откуда: Техподдержка ГК ДЭНСИ


Re: Может сделать раздел, посвященный POSTGRESQL

Сообщение BigAndy » 01 июн 2011, 16:18

turboatom писал(а):
Код: Выделить всё
LinCash=# * from
sales_bydate_operaion order by salesdate desc limit 10;


Подскажите в чем проблема? Скрин во вложении

В неправильном синтаксисе
BigAndy
 
Постов: 461
Зарегистрирован: 29 ноя 2009, 17:11

Re: Может сделать раздел, посвященный POSTGRESQL

Сообщение BigAndy » 01 июн 2011, 16:19

Spike писал(а):
BigAndy писал(а):Нет , такой вариант не подойдет...

Тогда колись, что значит "новые", как долго они будут "новыми" и что куда надо выгружать? И по какому событию?
BigAndy
 
Постов: 461
Зарегистрирован: 29 ноя 2009, 17:11

Re: Может сделать раздел, посвященный POSTGRESQL

Сообщение Alexander » 01 июн 2011, 16:38

Вот простенький вариант (предварительно надо установить postgresql-plpgsql):
Код: Выделить всё
CREATE TABLE new_ware_barcodes (
    wb_id integer NOT NULL,
    internal_id character varying(20),
    barcode character varying(20),
    coefficient numeric(10,3),
    main_barcode boolean
);

ALTER TABLE public.new_ware_barcodes OWNER TO postgres;

CREATE LANGUAGE 'plpgsql';

CREATE OR REPLACE FUNCTION "copy_barcode"() RETURNS TRIGGER AS '
BEGIN
INSERT INTO new_ware_barcodes VALUES( NEW.wb_id, NEW.internal_id, NEW.barcode, NEW.coefficient, NEW.main_barcode );
RETURN NULL;
END

' LANGUAGE 'plpgsql';

DROP TRIGGER newbrcd ON ware_barcode;

CREATE TRIGGER newbrcd AFTER INSERT ON ware_barcode FOR EACH ROW EXECUTE PROCEDURE copy_barcode();

Этот код можно сохранить в файл (например, Lincash_trg.sql) и добавить в БД LinCash с помощью
Код: Выделить всё
psql LinCash < ./LinCash_trg.sql

В скрипте при закрытии смены следует поменять таблицу-источник штрих-кодов с ware_barcode на new_ware_barcodes и добавить в скрипт ПОСЛЕ выгрузки штрих-кодов в файл инструкцию
Код: Выделить всё
DELETE FROM new_ware_barcodes;
для того, чтобы таблица не разрасталась с большой скоростью.
Хотелось бы обратить внимание, что загружаемые из товароучетки штрих-коды также будут попадать в таблицу новых. Также при добавлении нового штрих-кода в карточке товара в таблицу новых штрих-кодов попадут все штрих-коды этого товара (особенность сохранения карточки товара).
В общем, основное - в обработке новых штрих-кодов должна быть проверка на их существование в текущей БД товароучетки.
Alexander
 
Постов: 4955
Зарегистрирован: 16 авг 2009, 23:34
Откуда: Техподдержка ГК ДЭНСИ

Re: Может сделать раздел, посвященный POSTGRESQL

Сообщение Spike » 13 июл 2011, 01:34

Возвращаясь к теме:
1) запускаем скрипт psql LinCash < ./LinCash_trg.sql. Это надо сделать один раз. (после обновления ДЭНСИ нужно запускать этот скрипт или не надо)
2) В скрипте dnc_after_z.sh
следует поменять таблицу-источник штрих-кодов с ware_barcode на new_ware_barcodes
Как это сделать ?
3) добавить в скрипт dnc_after_z.sh ПОСЛЕ выгрузки штрих-кодов в файл инструкцию DELETE FROM new_ware_barcodes;

т.е. скрипт примерно должен выглядеть вот так:
Код: Выделить всё
What="/mnt/work/barcodebackup"
CurentDate=`date +%F+%H%M%S`
echo $CurentDate
Namefile=barcode-$CurentDate".txt"
mkdir $What
psql -U postgres LinCash -c "SELECT * FROM ware_barcode;"  > $What/$Namefile

#Выгрузка отчета после закрытия смены
/usr/local/bin/createreport_3.sh > /var/Exchange/report.flr

psql -U postgres LinCash -c "DELETE FROM new_ware_barcodes;"
Изображение
Spike
 
Постов: 400
Зарегистрирован: 26 авг 2009, 15:33
Откуда: Курская обл. г.Льгов

Re: Может сделать раздел, посвященный POSTGRESQL

Сообщение Alexander » 13 июл 2011, 10:52

Мне кажется, тут есть опечатка
Код: Выделить всё
psql -U postgres LinCash -c "SELECT * FROM ware_barcode;"  > $What/$Namefile

следует заменить на
Код: Выделить всё
psql -U postgres LinCash -c "SELECT * FROM new_ware_barcodes;"  > $What/$Namefile

Иначе какой смысл был в создании таблицы new_ware_barcodes ?
Alexander
 
Постов: 4955
Зарегистрирован: 16 авг 2009, 23:34
Откуда: Техподдержка ГК ДЭНСИ

Re: Может сделать раздел, посвященный POSTGRESQL

Сообщение amur-admin » 08 окт 2012, 14:28

Помогите реализовать Онлайн выгрузку транзакций из ДЭНСИ-КАССА в 1С 7.7
В ходе разговра с техподдержкой - выяснилось что организовать онлайн выгрузку можно с помощью написания триггера в базе транзакций Postgre SQL, задача которого периодически реагировать на флаг выставленный обработкой AtolPos9X.ert, pos1.rep.flg - как это у нас было реализовано во Фронтоле(атол), и выгружать соответвующие транзакции накопившиеся за короткий отрезок времени в каталог \var\Exchange\
Поделитесь примерами написанием данного триггера если кто то сталкивался или знает как это сделать.
amur-admin
 
Постов: 43
Зарегистрирован: 26 сен 2012, 14:16

Re: Может сделать раздел, посвященный POSTGRESQL

Сообщение Alexander » 08 окт 2012, 15:13

Вариант решения:
1. Устанавливаете язык plperl (имя пакета postgresql-plperl). Например, для 32бит
2. Добавляете язык, функцию и триггер в БД Transaction:
Код: Выделить всё
CREATE LANGUAGE 'plperlu';

CREATE OR REPLACE FUNCTION exec_on_close_check() RETURNS trigger AS $$
if ($_TD->{new}{"tr_type"} eq 55) {
  system("/usr/bin/dnc_after_closecheck");
  return;
}
return;
$$ LANGUAGE plperlu;

CREATE TRIGGER exec_on_close_check AFTER INSERT ON "transaction" FOR EACH ROW execute procedure exec_on_close_check();

3. Размещаете в /usr/bin/ скрипт с именем dnc_after_closecheck примерно такого содержания:
Код: Выделить всё
touch /var/Exchange/report.flr
chmod 666 /var/Exchange/report.flr


В приложении - примеры соответствующих скриптов.
Если брать их за основу, то изменения в БД можно внести командой
psql Transaction < ./realtime_unload.sql

P.S. В данном примере триггер будет срабатывать только на транзакцию с типом "55" (закрытие чека). Если надо что-то еще (отмена чека, отложенный чек, Z-отчет и т.п.) - надо добавить условия на колонку tr_type
Вложения
dnc_aftercheck_example.zip
(548 байт) Скачиваний: 378
Alexander
 
Постов: 4955
Зарегистрирован: 16 авг 2009, 23:34
Откуда: Техподдержка ГК ДЭНСИ

Пред.След.

Вернуться в Ваши предложения

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5



Кто сейчас на конференции

Сейчас посетителей на конференции: 5, из них зарегистрированных: 0, скрытых: 0 и гостей: 5 (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (170) здесь было 16 май 2020, 01:50

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5