Автор Тема: Как присвоить другой код для всего товара в базе?  (Прочитано 3619 раз)

0 Пользователей и 1 Гость просматривают эту тему.

admin

  • Админ
  • Помогающий
  • *****
  • Сообщений: 7157
  • Репутация: 1159
  • Пол: Мужской
    • УкрБланк, УкрСклад, УкрЗарплата, Унидок
Здравствуйте. Выполняю данный скрипт при этом параметр  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

  • Новенький
  • *
  • Сообщений: 3
  • Репутация: -1
Спасибо! Помогло.

admin

  • Админ
  • Помогающий
  • *****
  • Сообщений: 7157
  • Репутация: 1159
  • Пол: Мужской
    • УкрБланк, УкрСклад, УкрЗарплата, Унидок
Скрипт с учетом удаленных товаров на других складах:
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

  • Старший Пользователь
  • ****
  • Сообщений: 112
  • Репутация: 4
Дякую  *flag1*