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

Как присвоить другой код для всего товара в базе?

Автор depoll, Листопад 08, 2017, 09:40:10

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

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

admin

Цитата: alex-messer від Листопад 30, 2017, 10:41:42
Здравствуйте. Выполняю данный скрипт при этом параметр  is_preview = 1; - но результат не сохраняется. Подскажите пожалуйста в  чем может быть причина?

Вот без всяких превью:
EXECUTE BLOCK
AS
  DECLARE VARIABLE kod_new tsm_kod; -- новый код
  DECLARE VARIABLE kod_old tsm_kod; -- старый код
  DECLARE VARIABLE name_out ttovar_name; -- название товара
  DECLARE VARIABLE num INTEGER;
  DECLARE VARIABLE auto_start INTEGER;
  DECLARE VARIABLE auto_pref tl_kod;
  DECLARE VARIABLE auto_suf tl_kod;
  DECLARE VARIABLE auto_lzero INTEGER;
  DECLARE VARIABLE tmp_zero tl_kod;
  DECLARE VARIABLE tmp_num tl_kod;
BEGIN
  -- шаблон лидирующих нулей, если надо другой лидирующий символ, укажите
  tmp_zero = '00000000000000';
  -- начальный номер
  auto_start = 1;
  -- префикс
  auto_pref = '';
  -- суффикс
  auto_suf = '';
  -- кол-во лидирующих нулей от 0 до 15
  auto_lzero = 5;
  FOR
    SELECT
      tn.num,
      tn.kod,
      tn.name
    FROM
      tovar_name tn
    WHERE
      tn.visible = 1
    ORDER BY
      tn.tip,
      tn.name
    INTO
      :num,
      :kod_old,
      :name_out
  DO
  BEGIN
    tmp_num = CAST(auto_start AS VARCHAR(15));
    WHILE((CHAR_LENGTH(tmp_zero || tmp_num) > auto_lzero) AND (CHAR_LENGTH(tmp_zero) > 0)) DO
    BEGIN
      tmp_zero = SUBSTRING(tmp_zero FROM 1 FOR (CHAR_LENGTH(tmp_zero)-1));
    END
    kod_new = auto_pref || tmp_zero || tmp_num || auto_suf;
    auto_start = auto_start + 1;
    UPDATE
      tovar_name tn
    SET
      tn.kod = :kod_new
    WHERE
      tn.num = :num;
  END
END

alex-messer


admin

Скрипт с учетом удаленных товаров на других складах:
EXECUTE BLOCK
AS
  DECLARE VARIABLE kod_new tsm_kod; -- новый код
  DECLARE VARIABLE kod_old tsm_kod; -- старый код
  DECLARE VARIABLE name_out ttovar_name; -- название товара
  DECLARE VARIABLE num INTEGER;
  DECLARE VARIABLE auto_start INTEGER;
  DECLARE VARIABLE auto_pref tl_kod;
  DECLARE VARIABLE auto_suf tl_kod;
  DECLARE VARIABLE auto_lzero INTEGER;
  DECLARE VARIABLE tmp_zero tl_kod;
  DECLARE VARIABLE tmp_num tl_kod;
BEGIN
  -- шаблон лидирующих нулей, если надо другой лидирующий символ, укажите
  tmp_zero = '00000000000000';
  -- начальный номер
  auto_start = 1;
  -- префикс
  auto_pref = '';
  -- суффикс
  auto_suf = '';
  -- кол-во лидирующих нулей от 0 до 15
  auto_lzero = 5;
  FOR
    SELECT
      DISTINCT
      tn.num,
      tn.kod,
      tn.name
    FROM
      tovar_name tn
        JOIN tovar_zal tz ON (tn.num = tz.tovar_id)
        JOIN sklad_names sn ON (sn.num = tz.sklad_id AND sn.visible = 1)
    WHERE
      tn.visible = 1
    INTO
      :num,
      :kod_old,
      :name_out
  DO
  BEGIN
    tmp_num = CAST(auto_start AS VARCHAR(15));
    WHILE((CHAR_LENGTH(tmp_zero || tmp_num) > auto_lzero) AND (CHAR_LENGTH(tmp_zero) > 0)) DO
    BEGIN
      tmp_zero = SUBSTRING(tmp_zero FROM 1 FOR (CHAR_LENGTH(tmp_zero)-1));
    END
    kod_new = auto_pref || tmp_zero || tmp_num || auto_suf;
    auto_start = auto_start + 1;
    UPDATE
      tovar_name tn
    SET
      tn.kod = :kod_new
    WHERE
      tn.num = :num;
  END
END

HumanKM

вайбер 050-557-46-26