Quad.Wiki

Bitrix API: Выгрузка цен и остатков из программы на сайт

 

Обязательно сделайте бекап сайта перед запуском каких-то выгрузок новым способом, или убедитесь у вашего хостера, что есть бекап сайта и на какую дату.

1. Добавить задание Sync.X

Что такое Sync.X?

Задание с типом “Синхронизация Bitrix”

Задание можно назвать, например, “выгрузка цен и остатков в Bitrix”

Тип запуска установите “Вручную” и уберите птичку “Акт.”, сохраните настройки.

Это задание будет обновлять на сайте цены и остатки.

 

2. Добавить действие в Quad.Magic

Что такое 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 товар при помощи фильтра:

где вместо 12345 укажите QID товара для теста.

Если у вас есть Торговые предложения, то в программе должно быть поле ID родителя, которое заполнено у торговых предложений и не заполнено у товаров основного инфоблока. В этом случае делается 2 настройки выгрузки цен и остатков, для основного товара указывается такой фильтр:

вместо 20 нужно указать ИД вашего шаблона экспорта, а вместо КодПоля - код поля с ИД родителя.

Для торговых предложений такой фильтр:

 

Сделать не активными товары, которых Нет в наличии - если установлена данная птичка, то товары, которые в статусе Нет в наличии, на сайте станут Не активными

 

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

 

 

 

поле

Тип

Комментарий

ID

int(11)

 

QUANTITY

double

 

QUANTITY_TRACE

char(1) [N]

 

WEIGHT

double [0]

 

TIMESTAMP_X

timestamp [CURRENT_TIMESTAMP]

 

PRICE_TYPE

char(1) [S]

 

RECUR_SCHEME_LENGTH

int(11) NULL

 

RECUR_SCHEME_TYPE

char(1) [D]

 

TRIAL_PRICE_ID

int(11) NULL

 

WITHOUT_ORDER

char(1) [N]

 

SELECT_BEST_PRICE

char(1) [Y]

 

VAT_ID

int(11) NULL [0]

 

VAT_INCLUDED

char(1) NULL [Y]

 

CAN_BUY_ZERO

char(1) [N]

 

NEGATIVE_AMOUNT_TRACE

char(1) [D]

 

TMP_ID

varchar(40) NULL

 

PURCHASING_PRICE

decimal(18,2) NULL

 

PURCHASING_CURRENCY

char(3) NULL

 

BARCODE_MULTI

char(1) [N]

 

QUANTITY_RESERVED

double NULL [0]

 

SUBSCRIBE

char(1) NULL

 

WIDTH

double NULL

 

LENGTH

double NULL

 

HEIGHT

double NULL

 

MEASURE

int(11) NULL

 

TYPE

int(11) NULL

 

AVAILABLE

char(1) NULL

 

BUNDLE

char(1) NULL

 

 

Если тип поля ELM - указывается код поля из таблицы b_iblock_element

 

 

 

поле

Тип

Комментарий

ID

int(11) Автоматическое приращение

 

TIMESTAMP_X

datetime NULL

 

MODIFIED_BY

int(18) NULL

 

DATE_CREATE

datetime NULL

 

CREATED_BY

int(18) NULL

 

IBLOCK_ID

int(11) [0]

 

IBLOCK_SECTION_ID

int(11) NULL

 

ACTIVE

char(1) [Y]

 

ACTIVE_FROM

datetime NULL

 

ACTIVE_TO

datetime NULL

 

SORT

int(11) [500]

 

NAME

varchar(255)

 

PREVIEW_PICTURE

int(18) NULL

 

PREVIEW_TEXT

text NULL

 

PREVIEW_TEXT_TYPE

varchar(4) [text]

 

DETAIL_PICTURE

int(18) NULL

 

DETAIL_TEXT

longtext NULL

 

DETAIL_TEXT_TYPE

varchar(4) [text]

 

SEARCHABLE_CONTENT

text NULL

 

WF_STATUS_ID

int(18) NULL [1]

 

WF_PARENT_ELEMENT_ID

int(11) NULL

 

WF_NEW

char(1) NULL

 

WF_LOCKED_BY

int(18) NULL

 

WF_DATE_LOCK

datetime NULL

 

WF_COMMENTS

text NULL

 

IN_SECTIONS

char(1) [N]

 

XML_ID

varchar(255) NULL

 

CODE

varchar(255) NULL

 

TAGS

varchar(255) NULL

 

TMP_ID

varchar(40) NULL

 

WF_LAST_HISTORY_ID

int(11) NULL

 

SHOW_COUNTER

int(18) NULL

 

SHOW_COUNTER_START

datetime NULL

 

 

 

Примеры полей

выгружается значение поля f_42ddr03sf в цену на сайт с ИД = 9

 

Выгрузка статуса наличия товара

выгружается значение 147 в случае, если товар в наличии, или 0. выгружается в свойство с ИД = 345

Данный пример выгружается признак наличия товара в свойство - это используется во многих шаблонах. Пример свойства:

Для таких свойств с типом Список нужно в качестве значения выгружать ИД значения списка.

Если в списке наличия несколько разных значений, то их можно задать в программе здесь:

Т.е. например в колонке “Пл. 7” указываются ИД значений свойства на сайте, которые соответствуют типу наличия в программе. В этом случае поле нужно указать в таком виде:

где val7 - это код поля “Пл. 7” из типов наличия. Может быть val1, val2, …, val10

 

Выгрузка даты доставки от региона:

в запросе 45 - ид региона, 4896 - ид свойства, в которое выгружается дата

 

Активность элемента

 

Доступность товара

 

Остатки из поля на склад

Выгружается число из поля p.f_42n7ksgt9 в склад на сайте с ИД = 3

запрос, которым можно скопировать остатки из какого прайса (загруженные в виде числового остатка) в поле в Продукции

f_42n7kssrg - код поля, тип Число, в который копируется остаток

596 - ИД прайса, из которого копируется

 

Выгрузка единиц измерения

в поле f_43gom416r должно быть ИД единицы измерения на сайте

Если у поля f_43gom416r тип Справочник, то настройка будет выглядеть так

в SQL нужно указать соответствие между ИД справочника в программе и ИД на сайте при помощи такого текста для каждого значения

when 24 then 1