В программе есть несколько способов массового изменения названий товаров.
Обратите внимание, что если вы формируете свой каталог товаров на базе onliner.by (Каталог BY), то ваши изменения в названиях могут быть затерты названиями, взятыми с онлайнера. Чтобы такого не произошло, нужно убрать птичку “Обновлять названия товаров”, подробнее здесь:
Замена/удаление/добавление текста в название товара
Если нужно заменить какой-то текст в названии у выбранных товаров, то нужно выделить эти товары и выбрать пункт меню Операции с товаром → Замена / добавление текста в поле.
В открывшемся окне выбрать поле “Наименование” и операцию, которую нужно сделать с этим полем.
Внимание! Выполненное действие отменить нельзя, поэтому прежде, чем что-то делать - сделайте бекап базы и убедитесь, что он сформировался не нулевого размера.
Автоматические замены текста в названии, бренде, модели
Если вам нужно автоматически делать какие-то операции замены для новых товаров, которые появляются в вашем каталоге, то:
Добавьте действие Quad.Magic “Выполнить запрос БД” где-нибудь в группу действий полного обновления или получения описаний.
В Настройка 1 указать следующий текст select replace_price_info(0);
Выполните это действие. Если в результате получите ошибку, то нужно перейти во вкладку Конфигурация / внизу База данных и выполнить следующий запрос:
-- FUNCTION: public.replace_price_info(bigint)
-- DROP FUNCTION public.replace_price_info(bigint);
CREATE OR REPLACE FUNCTION public.replace_price_info(
priceid bigint)
RETURNS numeric
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
declare
s_fld_to character varying;
s_fld_from character varying;
s_fld_field character varying;
s_price_id character varying;
dt_date timestamp with time zone;
s_sql character varying;
rec_repl RECORD;
cur_repl CURSOR FOR SELECT * FROM a_e_data_replace;
begin
s_fld_from = 'fld_mc6syu';
s_fld_to = 'fld_mc6syn';
s_fld_field = 'fld_mc6syo';
s_price_id = PriceId::character varying;
OPEN cur_repl;
LOOP
FETCH cur_repl INTO rec_repl;
EXIT WHEN NOT FOUND;
IF rec_repl.aed_e_code = 'PRRPLBRN' THEN
s_sql = 'update price_detail set manuf = regexp_replace(manuf, ''' ||
replace(rec_repl.fld_mc6syu, '''', '''''') || ''', ''' ||
replace(COALESCE(rec_repl.fld_mc6syn, ''), '''', '''''') || ''', ''gi'') ' ||
' where lower(manuf) like lower(''' ||
replace(rec_repl.fld_mc6syu, '''', '''''') || ''') ';
IF PriceId > 0 THEN
s_sql = s_sql || ' and price_id = ' || s_price_id;
END IF;
EXECUTE s_sql;
s_sql = 'update price_detail set title = regexp_replace(title, ''' ||
replace(rec_repl.fld_mc6syu, '''', '''''') || ''', ''' ||
replace(COALESCE(rec_repl.fld_mc6syn, ''), '''', '''''') || ''', ''gi'') ' ||
' where lower(title) like lower(''%' ||
replace(rec_repl.fld_mc6syu, '''', '''''') || '%'') ';
IF PriceId > 0 THEN
s_sql = s_sql || ' and price_id = ' || s_price_id;
END IF;
EXECUTE s_sql;
END IF;
IF rec_repl.aed_e_code = 'PRRPLMOD' THEN
s_sql = 'update price_detail set article = regexp_replace(article, ''' ||
replace(rec_repl.fld_mc6syu, '''', '''''') || ''', ''' ||
replace(COALESCE(rec_repl.fld_mc6syn, ''), '''', '''''') || ''', ''gi'') ' ||
' where lower(article) like lower(''' ||
replace(rec_repl.fld_mc6syu, '''', '''''') || ''') ';
IF PriceId > 0 THEN
s_sql = s_sql || ' and price_id = ' || s_price_id;
END IF;
EXECUTE s_sql;
s_sql = 'update price_detail set title = regexp_replace(title, ''' ||
replace(rec_repl.fld_mc6syu, '''', '''''') || ''', ''' ||
replace(COALESCE(rec_repl.fld_mc6syn, ''), '''', '''''') || ''', ''gi'') ' ||
' where lower(title) like lower(''%' ||
replace(rec_repl.fld_mc6syu, '''', '''''') || '%'') ';
IF PriceId > 0 THEN
s_sql = s_sql || ' and price_id = ' || s_price_id;
END IF;
EXECUTE s_sql;
END IF;
IF rec_repl.aed_e_code = 'PRRPLALL' THEN
if COALESCE(rec_repl.fld_mc6syo, '') = '' then
s_fld_field = 'title';
else
s_fld_field = rec_repl.fld_mc6syo;
end if;
s_sql = 'update price_detail set ' || s_fld_field || ' = regexp_replace(' || s_fld_field || ', ''' ||
replace(rec_repl.fld_mc6syu, '''', '''''') || ''', ''' ||
replace(COALESCE(rec_repl.fld_mc6syn, ''), '''', '''''') || ''', ''gi'') ' ||
' where lower(' || s_fld_field || ') like lower(''%' ||
replace(rec_repl.fld_mc6syu, '''', '''''') || '%'') ';
IF PriceId > 0 THEN
s_sql = s_sql || ' and price_id = ' || s_price_id;
END IF;
EXECUTE s_sql;
END IF;
IF rec_repl.aed_e_code = 'MNRPLALL' THEN
if COALESCE(rec_repl.fld_mc6syo, '') = '' then
s_fld_field = 'title';
else
s_fld_field = rec_repl.fld_mc6syo;
end if;
s_sql = 'update product set ' || s_fld_field || ' = regexp_replace(' || s_fld_field || ', ''' ||
replace(rec_repl.fld_mc6syu, '''', '''''') || ''', ''' ||
replace(COALESCE(rec_repl.fld_mc6syn, ''), '''', '''''') || ''', ''gi'') ' ||
' where lower(' || s_fld_field || ') like lower(''%' ||
replace(rec_repl.fld_mc6syu, '''', '''''') || '%'') ';
EXECUTE s_sql;
END IF;
END LOOP;
CLOSE cur_repl;
RETURN 0;
end
$BODY$;
ALTER FUNCTION public.replace_price_info(bigint)
OWNER TO postgres;
Настройки замены задаются в окне Quad.Magic / Данные
Выберите слева “По указанному полю” и справа добавляйте правила
В первой колонке - текст который заменяется,
во второй колонке - на что заменяется,
в третьей колонке - поле, в котором заменяется. Если в третьей колонке не указано ничего, то заменяется в названии. Можно указать code - будет замена в Коде товара, article - замена в Модели товара. Можно указывать и какие-то пользовательские поля.
Указанные замены выполняются для всех товаров каждый раз при выполнении действия Quad.Magic.
Будьте внимательны, чтобы не получилось так, что какой-то текст у вас будет заменяться бесконечно. Например, вы хотите чтобы точка в поле заменилась на три точки .→…
Если прописать такое условие, то у вас после первого раза станет 3 точки, после второго выполнения 9 точек и т.д., т.е. заменяться будет каждый раз один и тот же текст. После добавления правил замены выполните действие Quad.Magic несколько раз и проверьте, что в итоге заменилось, чтобы в случае ошибки восстановить базу данных из бекапа.