Собственно есть вот такая задача. К примеру есть код 550015, а есть потребность изменить его на ну скажем 00001wr и так для всего товара. Если своими словами то перекодировать все коды товара начиная с 00001wr. Это как то автоматически делается?
Спасибо
Так робиться автоматично скриптом
Пошук по форуму
https://www.softbalance.com.ua/forum/index.php/topic,2683.msg16330.html (https://www.softbalance.com.ua/forum/index.php/topic,2683.msg16330.html)
Цитата: Creat від Листопад 08, 2017, 10:22:50
Так робиться автоматично скриптом
Пошук по форуму
https://www.softbalance.com.ua/forum/index.php/topic,2683.msg16330.html (https://www.softbalance.com.ua/forum/index.php/topic,2683.msg16330.html)
я искал по форуму, наверно как то не правильно формулировал поисковый запрос, спасибо за ссылку, буду пробовать
что то ругается программа на этот скрипт
6,75,2
пробная версия
Цитата: depoll від Листопад 08, 2017, 09:40:10
Собственно есть вот такая задача. К примеру есть код 550015, а есть потребность изменить его на ну скажем 00001wr и так для всего товара. Если своими словами то перекодировать все коды товара начиная с 00001wr. Это как то автоматически делается?
Спасибо
Это поможет?
https://youtu.be/Uxn1k2BQsOw
Яка версія не принципово. Як ругається? Викладіть скрін скрипта і помилки
Цитата: maxmokry від Листопад 08, 2017, 12:51:58
Цитата: depoll від Листопад 08, 2017, 09:40:10
Собственно есть вот такая задача. К примеру есть код 550015, а есть потребность изменить его на ну скажем 00001wr и так для всего товара. Если своими словами то перекодировать все коды товара начиная с 00001wr. Это как то автоматически делается?
Спасибо
Это поможет?
https://youtu.be/Uxn1k2BQsOw
ну как вариант чтоб со скриптами не возиться,где эту софтину взять7
Цитата: Creat від Листопад 08, 2017, 14:44:49
Яка версія не принципово. Як ругається? Викладіть скрін скрипта і помилки
вы лучше расскажите какие мои действия после открытие sql менеджера, скрипт копировал с темы по ссылке, добиваюсь чтоб началась нумерация товара с 00000wr
Можете выгрузить номенклатуру в 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;
ух ты, скрипт выполнился, а где эти значения (новый код) будет виден? в sql менеджере видно, а где еще?
вы простите меня за глупые вопросы, но спросить больше кроме вас не у кого
все испытания проводятся на локальной машине, на которой установлен укрсклад для испытаний и тестов
В довіднику товарів
Цитата: depoll від Листопад 08, 2017, 17:39:20
Цитата: maxmokry від Листопад 08, 2017, 12:51:58
Цитата: depoll від Листопад 08, 2017, 09:40:10
Собственно есть вот такая задача. К примеру есть код 550015, а есть потребность изменить его на ну скажем 00001wr и так для всего товара. Если своими словами то перекодировать все коды товара начиная с 00001wr. Это как то автоматически делается?
Спасибо
Это поможет?
https://youtu.be/Uxn1k2BQsOw
ну как вариант чтоб со скриптами не возиться,где эту софтину взять7
Разработчик софтины - я.
Можно установить и попробуете использовать.
Цитата: depoll від Листопад 08, 2017, 18:22:12
ух ты, скрипт выполнился, а где эти значения (новый код) будет виден? в sql менеджере видно, а где еще?
вы простите меня за глупые вопросы, но спросить больше кроме вас не у кого
все испытания проводятся на локальной машине, на которой установлен укрсклад для испытаний и тестов
В скрипте есть параметры, их можно менять если надо:
-- шаблон лидирующих нулей, если надо другой лидирующий символ, укажите
tmp_zero = '00000000000000';
-- начальный номер
auto_start = 1;
-- префикс
auto_pref = '';
-- суффикс
auto_suf = 'wr';
-- кол-во лидирующих нулей от 0 до 15
auto_lzero = 5;
-- предпросмотр, если 0 - скрипт просто покажет результат без замены, если 1 - то будет заменять в базе
is_preview = 0;
со скриптом я разобрался, менял крутил смотрел))) спасибо!!!
ну как не надо в слепую))) это же первый опыт первый запуск!
Цитата: admin від Листопад 09, 2017, 09:40:04
Цитата: depoll від Листопад 08, 2017, 18:22:12
ух ты, скрипт выполнился, а где эти значения (новый код) будет виден? в 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; - но результат не сохраняется. Подскажите пожалуйста в чем может быть причина?
Цитата: 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
Спасибо! Помогло.
Скрипт с учетом удаленных товаров на других складах:
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
Дякую *flag1*