Обязательно сделайте бекап сайта перед запуском каких-то выгрузок новым способом, или убедитесь у вашего хостера, что есть бекап сайта и на какую дату.
1. Добавить задание Sync.X
Задание с типом “Синхронизация Bitrix”
Задание можно назвать, например, “выгрузка цен и остатков в Bitrix”
Тип запуска установите “Вручную” и уберите птичку “Акт.”, сохраните настройки.
Это задание будет обновлять на сайте цены и остатки.
2. Добавить действие в Quad.Magic
Действие должно запускать задание Sync.X, которое добавили в предыдущем пункте. Действие должно срабатывать после всех действий, которые программа выполняет для обновления цен и остатков. Обычно эти действия настроены в группе Quad.Magic полного обновления + дублируются в отдельной группе, которая выполняется для обновления цен (в этом случае в группу обновления цен нужно будет добавить еще вызов действия, созданного в группе полного обновления).
В Настройка 1 указываю задание, добавленной в п.1 данной инструкции.
В Настройка 2 ничего не указывается, чтобы программа не ждала выполнения этого действия.
Можно добавить это действие после экспортов каких-то файлов обновлений для площадок. Можно его добавить и перед экспортами, если экспорты у вас выполняются долго - выгрузка в Bitrix по API не будет блокировать работу других действий, а будет выполняться в фоне.
Дублирование действия в группе обновления цен и остатков:
Обратите внимание, что в дополнительной группе, которая обновляет только цены и остатки, добавляется действие с типом “Действие QM”, которое ссылается на действие, добавленное в группе полного обновления. Так нужно делать, чтобы не дублировать настройки действий в разных группах.
3. Sync.X вкладка “Выгрузка API”
Далее нужно внести настройки выгрузки в действии Sync.X, которое добавили в п.1
Указываете настройки подключения к API, ключ и папки, которые настраивали по этой инструкции.
Указать ИД шаблона экспорта для выгрузки цен и остатков. Этот шаблон может быть вообще без настроек колонок (добавить новый) или же какой-то старый шаблон, через который выгружались цены и остатки.
Указать ИД инфоблока, в котором находятся товары на сайте
Поставить птичку “Обновлять цены и остатки”
Если на сайте несколько инфоблоков с товарами, то для каждого из них нужно будет настроить отдельное действие Sync для обновления, а так же создать для каждого инфоблока свой шаблон экспорта и отбирать в него товары через автозаполнение
4. Sync.X вкладка “Товары”
Здесь нужно заполнить следующие поля:
Внешний код товара - указать поле программы, в котором находится Внешний код.
Символьный код - указать поле программы, в котором находится Символьный код. Если такого поля у вас нет, то добавить пользовательское поле с типом Строка и указать его здесь (заполнять не нужно).
5. Sync.X вкладка “Цены и остатки”
Обновлять цены и остатки по ID Site - установите эту птичку, если обновлять цены и остатки нужно не по Внешнему коду, а по ИД товара на сайте (по умолчанию обновляется по Внешнему коду и желательно так и оставлять).
Поле с ID сайта - код поля, в котором сохранен ИД товара на сайте, заполняется если стоит первая птичка.
Обновлять Код по ID сайт - если стоит птичка, то на сайте у товаров обновляется Внешний код, выгруженный из программы.
ID главной цены - указывается ИД цены на сайте, в которую выгружать основную цену программы. ИД можно посмотреть в админке сайта на странице Типы цен.
Магазин / Настройки / Цены / Типы цен
Поле главной цены - указывается поле программы или SQL-запрос, с помощью которого получается цена программы. По умолчанию поле price - основная цена программы.
Валюта главной цены - код валюты, который выгружается на сайт, должен соответствовать одному из кодов валют, которые есть на сайте.
ID главного склада - указывается ИД склада на сайте, в который будет выгружаться числовой остаток товаров. Если на сайте нет складов, то здесь можно оставить 1.
Пример заполнения:
Поле полного остатка - код поля или SQL-запрос, с помощью которого на сайт передается числовой остаток товара.
Пример 1 запроса:
(case p.is_exists when 2 then 0 else 100 end)
Передается 0, если товара нет в наличии или 100, при другом статусе. 100 можно поменять на любое число. Этот остаток записывается сюда:
Пример 2 запроса:
Выгрузка числового остатка, а если его нет, то по типу наличия:
(select case when coalesce(ps.stock_4_summ, ps.stock_1_summ, 0) > 0 then coalesce(ps.stock_4_summ, ps.stock_1_summ)::varchar else (select ex.val8 from c_exists ex where ex.id = p.is_exists) end from product_stat ps where ps.prod_id = p.id)
Указанный SQL запрос выгружает Остаток на складе, если его нет, то Остаток в наличии,
если его нет, то текст из Настройки 8 типа наличия. ex.val8
- здесь можно поменять на другую колонку из типа наличия.
Применять скидки - птичка устанавливается, если программа должна выгружать на сайт скидки.
Поле цены без скидки - код поля в программе с ценой без скидки.
Фильтр товаров - здесь указывается SQL-фильтр товаров, для которых выгружается обновление цен и остатков. Если фильтр не указан, то выгружаются все товары.
Если нужно выгружать товары, отобранные через Автозаполнение для какого-нибудь шаблона экспорта, то указывается такой фильтр:
p.do_exp_20 = 1
где вместо 20 нужно указать ИД вашего шаблона экспорта, через который отбирается товар.
Для тестирования можно выбрать только 1 товар при помощи фильтра:
p.id = 12345
где вместо 12345 укажите QID товара для теста.
Если у вас есть Торговые предложения, то в программе должно быть поле ID родителя, которое заполнено у торговых предложений и не заполнено у товаров основного инфоблока. В этом случае делается 2 настройки выгрузки цен и остатков, для основного товара указывается такой фильтр:
(p.do_exp_20 = 1 and p.КодПоля > 0)
вместо 20 нужно указать ИД вашего шаблона экспорта, а вместо КодПоля
- код поля с ИД родителя.
Для торговых предложений такой фильтр:
(p.do_exp_20 = 1 and (p.КодПоля = 0 or p.КодПоля is null))
6. Sync.X вкладка “Поля”
Здесь указывается выгрузка дополнительных цен, складов и свойств товаров.
Каждое значение указывается с новой строки в виде:
PFLD|Название поля|SQL поля|Тип значения|Тип поля|Доп. параметр
парметры строки разделяются вертикальной чертой |
PFLD - постоянное значение, признак того, что это поле должно выгружаться при обновлении цен и остатков
Название поля - уникальное название поля, может быть любое, содержащее латинские буквы и цифры, например: field1, field2, prc123 и т.п. Главное чтобы оно во всех строках было разное.
SQL поля - здесь указывается код поля (вкладка Продукция) или SQL-запрос, с помощью которого отбирается информация, выгружаемая в это поле на сайт.
Тип значения - тип значения поля (N - число, S - строка или другое)
Тип поля - тип поля на сайте, в которое выгружается значение, возможные варианты:
PRM - свойство товара на сайте, все типы, кроме Списков)
ENM - свойство товара на сайте, тип Список
WHS - остаток склада
PRC - цена товара
PRD - поле из таблицы b_catalog_product
ELM - поле из таблицы b_iblock_element
Доп. параметр - здесь указывается дополнительный параметр, в зависимости от Тип поля
Если тип поля PRM или ENM, то указывается ИД свойства на сайте
Если тип поля WHS - указывается ИД склада на сайте
Если тип поля PRC - указывается ИД цены на сайте
Если тип поля PRD - указывается код поля из таблицы b_catalog_product
Если тип поля ELM - указывается код поля из таблицы b_iblock_element
Примеры полей
PFLD|prc9|p.f_42ddr03sf|N|PRC|9
выгружается значение поля f_42ddr03sf
в цену на сайт с ИД = 9
Выгрузка статуса наличия товара
PFLD|stk1|(case p.is_exists when 2 then 0 else 147 end)|N|ENM|345
выгружается значение 147 в случае, если товар в наличии, или 0. выгружается в свойство с ИД = 345
Данный пример выгружается признак наличия товара в свойство - это используется во многих шаблонах. Пример свойства:
Для таких свойств с типом Список нужно в качестве значения выгружать ИД значения списка.
Если в списке наличия несколько разных значений, то их можно задать в программе здесь:
Т.е. например в колонке “Пл. 7” указываются ИД значений свойства на сайте, которые соответствуют типу наличия в программе. В этом случае поле нужно указать в таком виде:
PFLD|stk1|(select ex.val7 from c_exists ex where ex.id = p.is_exists)|N|ENM|345
где val7
- это код поля “Пл. 7” из типов наличия. Может быть val1, val2, …, val10
Выгрузка даты доставки от региона:
PFLD|data1|(select TO_CHAR(CURRENT_DATE + interval '1' day * deliv_values.days_from, 'dd.mm.yyyy') from deliv_values where deliv_values.pd_id = p.pd_id and region_id = 45)|S|PRM|4896
в запросе 45
- ид региона, 4896
- ид свойства, в которое выгружается дата
Активность элемента
PFLD|act1|(case p.is_exists when 2 then 'N' else 'Y' end)|S|ELM|ACTIVE
Доступность товара
PFLD|avl1|(case p.is_exists when 2 then 'N' else 'Y' end)|S|PRD|AVAILABLE
Остатки из поля на склад
PFLD|whs3|p.f_42n7ksgt9|N|WHS|3
Выгружается число из поля p.f_42n7ksgt9
в склад на сайте с ИД = 3
запрос, которым можно скопировать остатки из какого прайса (загруженные в виде числового остатка) в поле в Продукции
update product set f_42n7kssrg = (select sum(coalesce(stock, 0)) from price_detail pd where pd.product_id = product.id and pd.price_id = 596 and pd.is_exists <> 2); update product set f_42n7kssrg = 0 where f_42n7kssrg is null;
f_42n7kssrg
- код поля, тип Число, в который копируется остаток
596
- ИД прайса, из которого копируется