Выгрузка цен из 1С - типы цен, единицы, частичный обмен
Настраиваем приём цен из учётной системы: сопоставляем типы, разбираемся с единицами и валютой, запускаем обмен только ценами.
Решение
Смотрим типы цен на сайте и их внешние коды:
use Bitrix\Main\Loader;
Loader::includeModule('catalog');// типы цен общие для установки: инфоблок на них не влияет$res = CCatalogGroup::GetList([], []);while ($group = $res->Fetch()) { printf("%-6s %-20s код=%s\n", $group['ID'], $group['NAME'], $group['XML_ID'] ?: '(пусто)');}// типы цен сопоставляются по внешнему коду, а не по названиюПустой внешний код означает, что тип цены с обменом не связан. Учётная система присылает свой идентификатор вида цены, и сопоставление идёт именно по нему, а не по совпадению названий.
Проверяем, какие цены пришли в файле обмена:
# виды цен объявляются в начале файла каталога, до самих товаровgrep -o '<Ид>[^<]*</Ид>' /home/bitrix/www/upload/1c_catalog/import*.xml | headgrep -c '<ЦенаЗаЕдиницу>' /home/bitrix/www/upload/1c_catalog/offers*.xmlФайл предложений содержит цены и остатки, а файл каталога - структуру и свойства товаров. Отсутствие цен в первом файле объясняет их отсутствие на сайте лучше, чем любые настройки торгового каталога.
Читаем цены товара после обмена:
$res = CPrice::GetList([], ['PRODUCT_ID' => $productId], false, false, ['CATALOG_GROUP_ID', 'PRICE', 'CURRENCY', 'QUANTITY_FROM', 'QUANTITY_TO']);while ($price = $res->Fetch()) { printf("тип=%-4s %10.2f %s от=%s до=%s\n", $price['CATALOG_GROUP_ID'], $price['PRICE'], $price['CURRENCY'], $price['QUANTITY_FROM'] ?: '-', $price['QUANTITY_TO'] ?: '-');}Каждый тип цены хранится отдельной строкой в таблице цен. Пустой результат при существующем товаре означает, что цена так и не создалась: чаще всего из-за неизвестной валюты или несопоставленного типа цены.
Запускаем обмен только ценами:
# шаги обмена вызываются по одному, каталог при этом не перечитываетсяcurl -s -u login:password \ "https://example.com/bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=offers.xml"Такой обмен идёт заметно быстрее полного, но новые товары в нём не появятся вовсе. Позиции сопоставляются по внешнему коду, и цена без своего товара просто отбрасывается при импорте.
Цены приезжают в файле предложений вместе с остатками, и это один шаг обмена. Обрыв на нём оставляет базу в состоянии, где товары уже обновились, а цены остались прежними. Повторный запуск того же шага чинит расхождение без полного перечитывания каталога.
Единица измерения приезжает вместе с ценой и на сайте не пересчитывается. Цена, заданная в учётной системе за упаковку, приедет ценой упаковки, даже если на сайте товар продаётся поштучно. Коэффициент пересчёта задают на стороне выгрузки, а не на сайте.
Типичные проблемы
Товары приехали, цен нет ни у одного.
Типы цен не сопоставлены по внешнему коду. Сайт получает цену с чужим идентификатором вида и не знает, куда её записать.
Приехал только один тип цены из нескольких.
Остальные виды не отмечены к выгрузке в учётной системе. Сайт создаёт ровно то, что пришло в файле.
Цена отличается от учётной в несколько раз.
Она задана за другую единицу измерения. Пересчёта по коэффициенту при импорте не происходит.
Цена не создалась, а в журнале обмена пусто.
Валюта цены отсутствует на сайте. Незнакомая валюта приводит к пропуску строки без сообщения об ошибке.
После обмена цены старые, товары новые.
Обмен оборвался между файлами. Каталог успел записаться, файл предложений с ценами - нет.
Частые вопросы
Как связать вид цены из 1С с типом цены на сайте?
Заполнением внешнего кода у типа цены значением идентификатора вида из учётной системы. После первой удачной выгрузки платформа заполняет его сама.
Можно ли не выгружать закупочные цены на сайт?
Да, состав выгружаемых видов цен задаётся в настройках обмена на стороне учётной системы. Сайт принимает всё, что ему прислали.
Почему цены приезжают, а на витрине их нет?
Компонент выводит только перечисленные в его параметрах типы цен. Приехавший, но не названный в параметрах тип на витрину не попадёт.
Что делать с ценами по количеству?
Они приезжают отдельными строками с границами количества. На сайте это штатный механизм, и компонент выбирает нужную строку по количеству в корзине.
Смежное
-
Цены при обмене - оглавление подтемы
-
Не выгружаются цены и остатки из 1С - разбор причин
-
Выгрузка товаров из 1С на сайт - как приезжает каталог
-
Обмен с 1С и HTTP - устройство обмена целиком
-
Типы цен: розница и опт, права групп, цена по количеству - куда приезжают цены из выгрузки
-
Валюты и курсы: несколько валют и пересчёт цен - что происходит с валютой при импорте
-
Остатки из 1С: сопоставление складов и приём количества - что ещё едет в том же файле
-
Скидки и ручные цены при обмене: что перезаписывает обмен - что делать с акциями и ручными ценами
-
Цены не обновились после обмена: разбор причин - когда цена приехала прежней