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

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

depoll

  • Пользователь
  • ***
  • Сообщений: 63
  • Репутация: 0
Собственно есть вот такая задача. К примеру есть код 550015,  а есть потребность изменить его на ну скажем 00001wr и так для всего товара. Если своими словами то перекодировать все коды товара начиная с 00001wr. Это как то автоматически делается?

Спасибо

Creat

  • Помогающий
  • *****
  • Сообщений: 1127
  • Репутация: 386
  • Пол: Мужской
    • kinderok.sells.com.ua
Так робиться автоматично скриптом
Пошук по форуму
https://www.softbalance.com.ua/forum/index.php/topic,2683.msg16330.html

depoll

  • Пользователь
  • ***
  • Сообщений: 63
  • Репутация: 0
Так робиться автоматично скриптом
Пошук по форуму
https://www.softbalance.com.ua/forum/index.php/topic,2683.msg16330.html

я искал по форуму, наверно как то не правильно формулировал поисковый запрос, спасибо за ссылку, буду пробовать

depoll

  • Пользователь
  • ***
  • Сообщений: 63
  • Репутация: 0
что то ругается программа на этот скрипт
6,75,2
пробная версия

maxmokry

  • Интегратор :)
  • Старший Пользователь
  • ****
  • Сообщений: 183
  • Репутация: 28
  • Пол: Мужской
    • Разработка сайтов
Собственно есть вот такая задача. К примеру есть код 550015,  а есть потребность изменить его на ну скажем 00001wr и так для всего товара. Если своими словами то перекодировать все коды товара начиная с 00001wr. Это как то автоматически делается?

Спасибо
Это поможет?

Creat

  • Помогающий
  • *****
  • Сообщений: 1127
  • Репутация: 386
  • Пол: Мужской
    • kinderok.sells.com.ua
Яка версія не принципово. Як ругається? Викладіть скрін скрипта і помилки

depoll

  • Пользователь
  • ***
  • Сообщений: 63
  • Репутация: 0
Собственно есть вот такая задача. К примеру есть код 550015,  а есть потребность изменить его на ну скажем 00001wr и так для всего товара. Если своими словами то перекодировать все коды товара начиная с 00001wr. Это как то автоматически делается?

Спасибо
Это поможет?


ну как вариант чтоб со скриптами не возиться,где эту софтину взять7
« Последнее редактирование: Ноябрь 08, 2017, 17:41:58 от depoll »

depoll

  • Пользователь
  • ***
  • Сообщений: 63
  • Репутация: 0
Яка версія не принципово. Як ругається? Викладіть скрін скрипта і помилки
вы лучше расскажите какие мои действия после открытие sql менеджера, скрипт копировал с темы по ссылке, добиваюсь чтоб началась нумерация товара с 00000wr

admin

  • Админ
  • Помогающий
  • *****
  • Сообщений: 7157
  • Репутация: 1159
  • Пол: Мужской
    • УкрБланк, УкрСклад, УкрЗарплата, Унидок
Можете выгрузить номенклатуру в CSV (правой кнопкой Экспорт таблицы), после в Excel отредактировать нумерацию и вгрузить через меню Опции : Импорт товаров / контрагентов из файла.
А можете попробовать скрипт ниже. Думаю там все понятно и по комментариям. ОБЯЗАТЕЛЬНО сделать резерв перед выполнением в меню Оцпии : SQL менеджер:
EXECUTE BLOCK
RETURNS
(
  kod_new tsm_kod, -- новый код
  kod_old tsm_kod, -- старый код
  name_out ttovar_name -- название товара
)
AS
  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;
  DECLARE VARIABLE is_preview INTEGER;
BEGIN
  -- шаблон лидирующих нулей, если надо другой лидирующий символ, укажите
  tmp_zero = '00000000000000';
  -- начальный номер
  auto_start = 1;
  -- префикс
  auto_pref = '';
  -- суффикс
  auto_suf = 'wr';
  -- кол-во лидирующих нулей от 0 до 15
  auto_lzero = 5;
  -- предпросмотр, если 0 - скрипт просто покажет результат без замены, если 1 - то будет заменять в базе
  is_preview = 0;
  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;
    SUSPEND;
    IF(is_preview = 1) THEN
    BEGIN
      UPDATE
        tovar_name tn
      SET
        tn.kod = :kod_new
      WHERE
        tn.num = :num;
    END
  END
END

Не надо вслепую запускать скрипт, он для примера, очень важно проверить и подправить параметры скрипта, перед запуском, чтобы он сделал именно так как вы хотели:
  -- шаблон лидирующих нулей, если надо другой лидирующий символ, укажите
  tmp_zero = '00000000000000';
  -- начальный номер
  auto_start = 1;
  -- префикс
  auto_pref = '';
  -- суффикс
  auto_suf = 'wr';
  -- кол-во лидирующих нулей от 0 до 15
  auto_lzero = 5;
  -- предпросмотр, если 0 - скрипт просто покажет результат без замены, если 1 - то будет заменять в базе
  is_preview = 0;
« Последнее редактирование: Ноябрь 09, 2017, 09:40:45 от admin »

depoll

  • Пользователь
  • ***
  • Сообщений: 63
  • Репутация: 0
ух ты, скрипт выполнился, а где эти значения (новый код) будет виден? в sql менеджере видно, а где еще?

вы простите меня за глупые вопросы, но спросить больше кроме вас не у кого

все испытания проводятся на локальной машине, на которой установлен укрсклад для испытаний и тестов

Creat

  • Помогающий
  • *****
  • Сообщений: 1127
  • Репутация: 386
  • Пол: Мужской
    • kinderok.sells.com.ua
В довіднику товарів

maxmokry

  • Интегратор :)
  • Старший Пользователь
  • ****
  • Сообщений: 183
  • Репутация: 28
  • Пол: Мужской
    • Разработка сайтов
Собственно есть вот такая задача. К примеру есть код 550015,  а есть потребность изменить его на ну скажем 00001wr и так для всего товара. Если своими словами то перекодировать все коды товара начиная с 00001wr. Это как то автоматически делается?

Спасибо
Это поможет?


ну как вариант чтоб со скриптами не возиться,где эту софтину взять7
Разработчик софтины - я.
Можно установить и попробуете использовать.

admin

  • Админ
  • Помогающий
  • *****
  • Сообщений: 7157
  • Репутация: 1159
  • Пол: Мужской
    • УкрБланк, УкрСклад, УкрЗарплата, Унидок
ух ты, скрипт выполнился, а где эти значения (новый код) будет виден? в sql менеджере видно, а где еще?

вы простите меня за глупые вопросы, но спросить больше кроме вас не у кого

все испытания проводятся на локальной машине, на которой установлен укрсклад для испытаний и тестов

В скрипте есть параметры, их можно менять если надо:
  -- шаблон лидирующих нулей, если надо другой лидирующий символ, укажите
  tmp_zero = '00000000000000';
  -- начальный номер
  auto_start = 1;
  -- префикс
  auto_pref = '';
  -- суффикс
  auto_suf = 'wr';
  -- кол-во лидирующих нулей от 0 до 15
  auto_lzero = 5;
  -- предпросмотр, если 0 - скрипт просто покажет результат без замены, если 1 - то будет заменять в базе
  is_preview = 0;

depoll

  • Пользователь
  • ***
  • Сообщений: 63
  • Репутация: 0
со скриптом я разобрался, менял крутил смотрел))) спасибо!!!

ну как не надо в слепую))) это же первый опыт первый запуск!

alex-messer

  • Новенький
  • *
  • Сообщений: 3
  • Репутация: -1
ух ты, скрипт выполнился, а где эти значения (новый код) будет виден? в sql менеджере видно, а где еще?

вы простите меня за глупые вопросы, но спросить больше кроме вас не у кого

все испытания проводятся на локальной машине, на которой установлен укрсклад для испытаний и тестов

В скрипте есть параметры, их можно менять если надо:
  -- шаблон лидирующих нулей, если надо другой лидирующий символ, укажите
  tmp_zero = '00000000000000';
  -- начальный номер
  auto_start = 1;
  -- префикс
  auto_pref = '';
  -- суффикс
  auto_suf = 'wr';
  -- кол-во лидирующих нулей от 0 до 15
  auto_lzero = 5;
  -- предпросмотр, если 0 - скрипт просто покажет результат без замены, если 1 - то будет заменять в базе
  is_preview = 0;

Здравствуйте. Выполняю данный скрипт при этом параметр  is_preview = 1; - но результат не сохраняется. Подскажите пожалуйста в  чем может быть причина?