Quad.Wiki

Редактирование названий товаров

В программе есть несколько способов массового изменения названий товаров.

Обратите внимание, что если вы формируете свой каталог товаров на базе 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 несколько раз и проверьте, что в итоге заменилось, чтобы в случае ошибки восстановить базу данных из бекапа.