• Ласкаво просимо на Спільнота для обміну досвідом між користувачами програм УкрБланк, УкрСклад, УкрЗарплата.
 

Пользовался скриптом и теперь перестала работать репликация

Автор Ярослав, Жовтень 30, 2015, 23:42:27

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Ярослав

Пользовался скриптом для отслеживания изменений цен, и теперь перестала работать репликация!
У меня версия програми 6.23
Скрипт
1. Делаем ОБЯЗАТЕЛЬНО резерв базы данных.
2. Обязательно делаем п.1
3. Заходим в меню Опции : SQL менеджер и выполняем подряд все эти запросы, по !!!одному!!! т.е. скопировали один клацнули Выполнить, скопировали второй клацнули Выполнить и т.д.

CREATE GENERATOR usr_gen_tovar_cena_change_id;

CREATE TABLE usr_tovar_cena_change
(
  num tnum NOT NULL,
  tovar_id tnum NOT NULL,
  change_date tdate,
  cena_r_old tmoney,
  cena_r tmoney,
  is_update tnum
);


ALTER TABLE usr_tovar_cena_change ADD PRIMARY KEY (num);

CREATE OR ALTER TRIGGER usr_tovar_cena_change_bi FOR usr_tovar_cena_change
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.num IS NULL) THEN
    NEW.num = GEN_ID(usr_gen_tovar_cena_change_id,1);
END


CREATE TRIGGER usr_cena_change_ai FOR tovar_name
ACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  INSERT INTO usr_tovar_cena_change
    (tovar_id, change_date, cena_r, is_update)
  VALUES
    (NEW.num, CURRENT_TIMESTAMP, NEW.cena_r, 0);
END


CREATE TRIGGER usr_cena_change_au FOR tovar_name
ACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF (NEW.cena_r != OLD.cena_r) THEN
    INSERT INTO usr_tovar_cena_change
      (tovar_id, change_date, cena_r_old, cena_r, is_update)
    VALUES
      (NEW.num, CURRENT_TIMESTAMP, OLD.cena_r, NEW.cena_r, 1);
END


4. Все готово, думаю дальше понятно как сделать связку по товарам, например

SELECT
  ch.*,
  tn.kod,
  tn.name
FROM
  usr_tovar_cena_change ch
    LEFT JOIN tovar_name tn ON (ch.tovar_id = tn.num)


По полям:
  tovar_id  - идентификатор товара
  change_date - точное время изменения цены,
  cena_r_old  - старая цена если цена обновлялась, если новый товар тогда поле NULL
  cena_r - новая цена
  is_update - если 1 то цена менялась в уже существующем товаре, если 0 то это новый товар добавлялся.


Захотите все поставить на место т.е. удалить все пользовательские таблицы, генераторы, триггеры, выполните по порядку:

DROP TRIGGER usr_cena_change_au;

DROP TRIGGER usr_cena_change_ai;

DROP TRIGGER usr_tovar_cena_change_bi;

DROP TABLE usr_tovar_cena_change;

DROP GENERATOR usr_gen_tovar_cena_change_id;
[/quote]


Теперь когда создаю(пересоздаю) базу даних для отдаленого офиса, есть ошибка, і создается файл бази с разшерением ".tcb" вместо ".gbk", скрин ошибки внизу.
Хотел виполнить код отката,
DROP TRIGGER usr_cena_change_au;

DROP TRIGGER usr_cena_change_ai;

DROP TRIGGER usr_tovar_cena_change_bi;

DROP TABLE usr_tovar_cena_change;

DROP GENERATOR usr_gen_tovar_cena_change_id;
[/quote]
но после виполнения четвертой строчки видает ошибку.

Ну ладно думаю виполню снова код
CREATE GENERATOR usr_gen_tovar_cena_change_id;

CREATE TABLE usr_tovar_cena_change
(
  num tnum NOT NULL,
  tovar_id tnum NOT NULL,
  change_date tdate,
  cena_r_old tmoney,
  cena_r tmoney,
  is_update tnum
);


ALTER TABLE usr_tovar_cena_change ADD PRIMARY KEY (num);

CREATE OR ALTER TRIGGER usr_tovar_cena_change_bi FOR usr_tovar_cena_change
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.num IS NULL) THEN
    NEW.num = GEN_ID(usr_gen_tovar_cena_change_id,1);
END


CREATE TRIGGER usr_cena_change_ai FOR tovar_name
ACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  INSERT INTO usr_tovar_cena_change
    (tovar_id, change_date, cena_r, is_update)
  VALUES
    (NEW.num, CURRENT_TIMESTAMP, NEW.cena_r, 0);
END


CREATE TRIGGER usr_cena_change_au FOR tovar_name
ACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  IF (NEW.cena_r != OLD.cena_r) THEN
    INSERT INTO usr_tovar_cena_change
      (tovar_id, change_date, cena_r_old, cena_r, is_update)
    VALUES
      (NEW.num, CURRENT_TIMESTAMP, OLD.cena_r, NEW.cena_r, 1);
END

пусть работает хоть скрипт отслеживания переоценки, а с репликацией разберусь как-то. Но в процесе произошло несколько ошибок і тепер не меняется цена в справочнике товаров, видает ошибку фото nemenyaetcenu.JPG

Теперь не работает репликация, и не работает скрипт отслеживания переоценки и снова его установить не получается,+ и в справочнике цена не меняется.
От такую кашу я заварил. Как сделать чтоб нормально било? Мне нужно чтоб работал скрипт переоценки, ну и хорошо если б репликация работала. Ето возможно?


TheOK

Цитата: Ярослав від Жовтень 30, 2015, 23:45:58
скрин
Здесь вы ввели не полный текст команды. Вероятно там должна была быть команда создания таблицы
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

TheOK

Надеюсь, архив базы у Вас уже создан? Если нет, перед выполнением следующих советов, сделайте архивчик

Вполне вероятно, что решить проблему с репликацией не получится... нижеприведенными советами

Причинка какая-то достаточно простая
Например, для таблички, в которой храните изменения цены не установлен триггер, который устанавливает в ней поле num

Попробуйте сделать следующее.
1) Перезапустите базу (например, перезапустив ПК, на котором находится сервер, как самый простой вариант)
2) Попробуйте создать генератор для таблички с изменениями цен

CREATE GENERATOR usr_gen_tovar_cena_change_id;
3) После этого создать триггер, чтобы "прицепить" этот генератор к табличке:
CREATE OR ALTER TRIGGER usr_tovar_cena_change_bi FOR usr_tovar_cena_changeACTIVE BEFORE INSERT POSITION 0AS BEGIN   IF (NEW.num IS NULL) THEN     NEW.num = GEN_ID(usr_gen_tovar_cena_change_id,1);END
4) Узнайте максимальное значения поля NUM в Вашей табличке
select max(num ) from usr_tovar_cena_change
Запомните его, назовем его МаксЧисло
5) Выполните команду, подставив вместо выражения МаксЧисло+1 сумму числа МаксЧисло и 1
ALTER SEQUENCE USR_GEN_TOVAR_CENA_CHANGE_ID RESTART WITH МаксЧисло+1

Попробуйте обновить цену товара в справочнике
Если на каком-то этапе возникла ошибка, не обращайте внимания, попробуйте выполнить указанные скрипты до конца

ЗЫ Вы запускаете скрипты, которые полностью не показаны в скринах (я вижу полосу прокрутки, что выше скрипта, сложно сказать)
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

Ярослав

Цитата: TheOK від Жовтень 31, 2015, 00:47:02
Цитата: Ярослав від Жовтень 30, 2015, 23:45:58
скрин
Здесь вы ввели не полный текст команды. Вероятно там должна была быть команда создания таблицы
текст ввел полностю,здесь просто прокрутка!

Ярослав

Цитата: TheOK від Жовтень 31, 2015, 01:29:38
Надеюсь, архив базы у Вас уже создан? Если нет, перед выполнением следующих советов, сделайте архивчик

Вполне вероятно, что решить проблему с репликацией не получится... нижеприведенными советами

Причинка какая-то достаточно простая
Например, для таблички, в которой храните изменения цены не установлен триггер, который устанавливает в ней поле num

Попробуйте сделать следующее.
1) Перезапустите базу (например, перезапустив ПК, на котором находится сервер, как самый простой вариант)
2) Попробуйте создать генератор для таблички с изменениями цен

CREATE GENERATOR usr_gen_tovar_cena_change_id;
3) После этого создать триггер, чтобы "прицепить" этот генератор к табличке:
CREATE OR ALTER TRIGGER usr_tovar_cena_change_bi FOR usr_tovar_cena_changeACTIVE BEFORE INSERT POSITION 0AS BEGIN   IF (NEW.num IS NULL) THEN     NEW.num = GEN_ID(usr_gen_tovar_cena_change_id,1);END
4) Узнайте максимальное значения поля NUM в Вашей табличке
select max(num ) from usr_tovar_cena_change
Запомните его, назовем его МаксЧисло
5) Выполните команду, подставив вместо выражения МаксЧисло+1 сумму числа МаксЧисло и 1
ALTER SEQUENCE USR_GEN_TOVAR_CENA_CHANGE_ID RESTART WITH МаксЧисло+1

Попробуйте обновить цену товара в справочнике
Если на каком-то этапе возникла ошибка, не обращайте внимания, попробуйте выполнить указанные скрипты до конца

ЗЫ Вы запускаете скрипты, которые полностью не показаны в скринах (я вижу полосу прокрутки, что выше скрипта, сложно сказать)
Зашол в УкрСклад с компа которий стоит в магазине, здесь получается сделать откат скрипта, также получается снова установить скрипт отслеживания. Если сделать откат скрипта, то репликация делается без проблем с нужним разшерением ".gbk" без ошибок.
Виполнил ваш предложений скрипт, к сожелению не помогла и репликация не работает, кстати там ошибка кажется
CREATE OR ALTER TRIGGER usr_tovar_cena_change_bi FOR usr_tovar_cena_change(здесь должен бить пробел?)ACTIVE BEFORE INSERT POSITION 0AS BEGIN   IF (NEW.num IS NULL) THEN     NEW.num = GEN_ID(usr_gen_tovar_cena_change_id,1);END

Ярослав

Возможно есть отчет какой то для ослеживание изменения цени, может платний? что б не пользоватся даним скриптом.

TheOK

Цитата: Ярослав від Жовтень 31, 2015, 10:27:14
Виполнил ваш предложений скрипт, к сожелению не помогла и репликация не работает, кстати там ошибка кажется
Скрипт был не для налаживания репликации, а для того, чтобы Вы могли бы восстановить работоспособность УкрСклада при смене цены
Ошибка выбивает по прежнему при ее смене?

Как работает репликация не знаю. Поэтому сложно сказать какие нужно внести изменения, чтобы она работала

*пробел был нужен, потерялся он как-то:)
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

TheOK

Цитата: Ярослав від Жовтень 31, 2015, 10:31:31
Возможно есть отчет какой то для ослеживание изменения цени, может платний? что б не пользоватся даним скриптом.
Программа не хранит историю изменения цен. Без подобных манипуляций не обойтись
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

Ярослав

Цитата: TheOK від Жовтень 31, 2015, 23:31:46
Цитата: Ярослав від Жовтень 31, 2015, 10:27:14
Виполнил ваш предложений скрипт, к сожелению не помогла и репликация не работает, кстати там ошибка кажется
Скрипт был не для налаживания репликации, а для того, чтобы Вы могли бы восстановить работоспособность УкрСклада при смене цены
Ошибка выбивает по прежнему при ее смене?

Как работает репликация не знаю. Поэтому сложно сказать какие нужно внести изменения, чтобы она работала

*пробел был нужен, потерялся он как-то:)
ошибку не вибивало в магазине, ошибку вибивало в офисе. В офисе ваш скрипт не запускал,потому что восстановил базу даних и создал сеть через hamachi и подключаюсь таким образом к компу в магазине. репликацию решил не использовать, потому что скрипт переоценки мне важен больше, лучше уж заплатить 90 грн в месяц за 3G интернет. Вот так то. Спасибо за помощь)

TheOK

Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

Ярослав

Цитата: TheOK від Листопад 02, 2015, 12:39:32
в таком случае, как я понимаю, проблема решилась
Да решилась, может когда то разработчики сделают такую опцию в програме что б не пользоватся скриптами. Мне кажется ето било би полезно многим пользователям.