Tutorial по обмену с 1С. Часть третья: Выжимаем максимум из стандарта. Что мы хотели бы знать 1000 проектов назад
Всем привет! Я Дина, ведущий разработчик личных кабинетов и ecom-систем в ИНТЕРВОЛГЕ. Мы не делаем тривиальных проектов. Все что я буду описывать ниже – уникальные задачи. Однако очень часто мы решаем их стандартными средствами за счет хитрых трюков и опыта.
Disclaimer: «Сайтом» мы называем не homepage, не корпоративную визитку и даже не классический интернет-магазин. Для нас «сайт» – B2B интернет-магазин с кучей складов и типов цен, маркетплейс, личный кабинет документооборота.
В каждом втором проекте надо делать обмен данными между сайтом и чем-то на базе 1С: Предприятие.
В статье я расскажу, как настроить стандартный обмен и добиться от него максимума пользы «почти без кастомизаций».
Штатный обмен first – и максимально быстро!
В городе N Наполеона должны были приветствовать салютом, но этого произошло. Император спросил:
– Почему.
– На это было двадцать пять причин. Первая – у нас не было пороха…
– Достаточно.
Исторический анекдот.
Структура данных и бизнес-процессы в компаниях отличаются. «Стандартная» 1С на самом деле имеет очень много настроек и дает очень большую степень свободы.
«Сайты» также отражают особенности бизнеса, и совмещение данных и логики двух систем часто требует огромных ресурсов.
В любом случае мы советуем сначала настроить стандартный обмен и передать хотя бы базовые сущности. Получается этакая «разведка». После этого можно будет понять, что не так, и сделать ТЗ на доработку обмена.
Первый шаг — установка типового модуля обмена с 1С. С чем вы столкнетесь?
Как ни странно, чаще всего модуля в системе просто нет. Почему? Причин много:
- используется базовая 1С, а стандартные модули есть только для ПРОФ или КОРП (приходится переходить на другую 1С, другого пути нет);
- устаревшая конфигурация 1С, для которой нет модуля обмена (можно попробовать запросить модуль в технической поддержке или поставить «через боль» модуль из другой конфигурации);
- 1С настолько сильно кастомизирована, что модуль ставится, но не работает;
- как там все устроено, знает ровно 1 человек, а он занят до 2035 года;
- не получается сделать копию 1С (нет места, например);
- вас не пускают безопасники Заказчика.
Эти вопросы придется решать, они часть критического пути проекта. Как? Разбираться в 1С самому или иметь рядом толкового специалиста. Мы несколько лет назад создали собственный отдел 1С-ников, которые в наших проектах вопрос интеграции закрывают полностью.
Сделали импорт товаров и справочников. Проверяем:
- Выгружается ли товар на сайт с SKU (торговыми предложениями) или без.
Это зависит от выбранного в 1С способа организации хранения товаров (в виде простых товаров или товаров с характеристиками) и влияет на структуру и настройки каталога на сайте.
- Какие свойства товаров выгружаются, все ли они нужны на сайте, есть ли свойства, которых не хватает.
- Выгружаются ли изображения по товарам, каков размер этих изображений.
Если картинки в 1С большие (от 1 Мб), то нужно передавать сжатые картинки.
- Как выгружаются разделы инфоблока каталога на сайт. В 1С можно настраивать пользовательское дерево групп, чтобы структура разделов на сайте могла отличаться от структуры групп в 1С без ее изменения.
Например, сотрудникам в 1С удобнее вести номенклатуру по брендам, а потом по типам товаров, а пользователям сайта наоборот.
- Существуют ли в 1С какие-то хитрые приемы хранения данных:
- товарами являются группы номенклатуры нижнего уровня, которые по умолчанию выгружаются на сайт из 1С как разделы каталога (это может быть связано с особенностями предметной области, либо является результатом неправильной организации номенклатуры в 1С, когда каждый SKU заводится как отдельный товар, а товаром становится группа последнего уровня вложенности);
- когда характеристики товара в 1С (SKU) должны стать основными товарами на сайте;
- когда на сайте нужно продать товар, который фактически из 1С приходит в виде составных частей (например, в импорте приходят столешница и ножки, а на сайте нужно продать целый стол).
Анализируем передачу заказов с сайта в 1С:
- Проверим выгрузку в 1С онлайн заказов с сайта, свойств заказов, контактных лиц, контрагентов, документов оплат и отгрузок.
- При экспорте новых (самостоятельно зарегистрированных на сайте) контактов и контрагентов обычно всегда возникает вопрос их сопоставления.
- 1С должна установить существование контакта и контрагента в своей базе, корректность входящих данных и связей между объектами.
- Юридических лиц можно идентифицировать по ИНН, а физических — по номеру телефона и/или E-mail.
- Возникает вопрос правдивости введенных пользователем сайта данных, решать который всегда нужно с учетом бизнес-процессов клиента (возможно, при помощи оффлайн идентификации).
- 1С может вернуть на сайт информацию об ошибке, когда проверка контактного лица или контрагента не прошла, либо пойти по другому сценарию. Если контактное лицо и контрагент уже заведены в 1С, то новый онлайн заказ и пользователь сайта будут привязаны к ним. Иначе будут созданы новые контактное лицо и контрагент и заведены все сопутствующие документы (например, типовой договор, пользовательское соглашение).
- В обоих случаях успешной привязки онлайн заказа 1С должна вернуть на сайт информацию по привязанному контакту и контрагенту для установки корректных связей между сущностями проекта (например, guid-ы пользователя и компании из 1С; новые элементы справочников, если контактные лица и контрагенты выгружаются на сайт в highload-блоки).
Сущности и порядок обмена
Гладко было на бумаге, да забыли про овраги.
(строка Льва Толстого, но уже считается народной пословицей)
Хорошей практикой мы считаем описание структуры данных обеих систем и сопоставление сущностей «до полей». Это занудная работа, но она точно позволяет не пропустить «оврагов».
Модули обмена могут импортировать на сайт из 1С:
- номенклатуру товаров (разделы и подразделы, товары с привязкой к разделам, SKU с привязкой к основным товарам, свойства товаров, типы цен, цены в одной валюте — многовалютности нет, склады, остатки по складам и общий остаток, изображения, единицы измерения);
- контрагентов (выгружаются в список пользователей и в профили покупателей);
- справочники (выгружаются в highload-блоки сайта), например, список контрагентов, поставщиков, производителей и любая другая “первичная” информация;
- изменения по онлайн заказам сайта из 1С (в том числе по связанным документам оплат и отгрузок);
- оффлайн-заказы,
- документы оплат и отгрузок (на практике оффлайн заказы редко участвуют в импорте).
С сайта в 1С можно выгружать:
- онлайн заказы,
- связанные документы оплат и отгрузок, штатно создаваемые на сайте;
- контактные лица и контрагенты по онлайн заказам;
- каталог товаров сайта (на практике почти никогда не экспортируется с сайта, может быть актуально в случае, если 1С вступает в бизнес-процессы клиента позже, чем сайт), его разделы и подразделы, товары, характеристики (SKU), типы цен, цены, свойства товаров, изображения.
Тут не все гладко.
Пример 1 «Структура контрагентов». 1С поддерживает выгрузку контрагентов, но на деле эта функция работает не стабильно и часто с ошибками.
Поэтому для получения корректного результата мы выгружаем контакты (пользователей сайта), контрагентов и связи между ними в виде справочников (в highload-блоки). Добавляем в обработчики событий создания и изменения элементов highload-блоков сайта — создание и изменение соответствующих пользователей и профилей покупателей.
При формировании в 1С указанных справочников стоит учитывать разницу в архитектуре сущностей взаимодействующих систем, чтобы продумать заранее их синхронизацию и гармоничное внедрение сайта в бизнес-логику клиента.

Также стоит отметить, что логику формирования справочника на стороне 1С можно реализовать произвольную, например, выгружая на сайт только отмеченные специальным признаком элементы.
Пример 2 «Скидки»
Типовой обмен не поддерживает выгрузку скидок на сайт, хотя эта функция очень часто нужна на проекте (исключение — скидки, зависящие от количества товара в заказе).
Возможным решением является создание и выгрузка дополнительных типов цен (уже со скидкой). Теоретически это выглядит хорошо, что не всегда подходит в силу используемой редакции БУС, соображений производительности обмена или специфики скидки (персональные скидки). В таком случае мы рекомендуем выгружать скидки через справочники (в highload-блоки), создавая/редактируя на основе этой информации кастомные скидки на стороне сайта (без изменения ядра сайта).
Настройка узлов обмена
Обычно для каждой сущности (справочника, заказов, номенклатуры) мы создаем отдельный узел обмена в 1С. Это удобно для отладки.
Однако если вы выгружаете пользователей из 1С на сайт в виде справочников, стоит объединить обмен заказами и справочниками (как минимум по контактным лицам и контрагентам) в один узел обмена.
Это нужно для того, чтобы по онлайн заказам новых пользователей сайта в том же обмене импортировать вновь созданные/найденные (и ранее не выгруженные) в 1С контакты и контрагентов в highload-блоки сайта.
Проблема новых значений свойств
Иногда изменения в объектах обмена на стороне 1С (например, при добавлении в онлайн заказ нового свойства на стороне 1С, которое нужно вернуть заполненным на сайт) могут автоматически не распознаваться службой регистрации изменений в 1С. Такие кейсы нужно отслеживать и исправлять.
Пример организации расписания обменов сайта и 1С
- Полный обмен номенклатурой: занимает 1 час, запуск 1 раз в сутки в 04:00.
- Обмен изменениями номенклатуры (выгрузка остатков): занимает 5 минут, запуск каждые 10 минут.
- Полный обмен заказами проводим только 1 раз при старте проекта — для первичной выгрузки оффлайн заказов на сайт (и вручную по необходимости).
- Полный обмен справочниками: занимает 10 минут, запуск 1 раз в сутки в 05:00.
- Обмен изменениями заказов и справочников (общий узел обмена): занимает 2 минуты, запуск каждые 5 минут.
Реалтайм
Теоретически системы 1С и сайты также позволяют выполнять обмен в режиме реального времени, работающий только в ответ на создание/редактирование онлайн заказа на стороне сайта.
Такой реалтайм штатными средствами 1С не встречается практически никогда. В наших проектах мы пишем обмены с нуля на очередях. Получается относительно быстро и очень хорошо.Точка правды. Единый источник достоверных данных
Основное различие между правдой и ложью
заключается в том, что ложь легче выдать за правду, чем наоборот.Когда мы настраиваем обмен данными между несколькими системами, возникает вопрос синхронизации и достоверности изменений в них. Если данные меняются в 2 системах сразу — не избежать коллизий.
В простых ситуациях, «точкой правды» считается 1С, она вправе перезаписать любые данные в других системах. Однако в реальности бывает и сложнее:
Примеры ситуаций, когда у клиента может быть несколько 1С систем:
- компания ведет в одной 1С оптовые продажи, а в другой розничные;
- у магазина есть региональные подразделения со своими отдельными складами и 1С;
- есть несколько поставщиков маркетплейса и у каждого своя 1С, и своя 1С есть у владельца маркетплейса;
- 1С + CRM + сайт.
- 1С (хранит номенклатуру, цены и остатки) + Сайт + третья система, из которой на сайт подтягиваются/парсятся изображения/описания/характеристики.
- 1С + сайт + маркетплейсы + программа лояльности + отдельная WMS + …
В такой ситуации не обойтись без шины и “взрослого” обмена, но это совсем другая история.
Сайт — это не учетная система, мы с уверенностью можем сказать, что попытка решать на сайте задачи учета всегда заканчивается плачевно.
Мы советуем в большинстве случаев в качестве главной (master-системы) выбирать одну 1С, а сайт будет обмениваться данными только с ней и через нее.
Эта 1С будет вести учет товаров, контрагентов, контактов, заказов, оплат, доставок. Будет самостоятельно синхронизироваться со всеми остальными системами клиента, в том числе с сайтом.
1С должна следить за целостностью данных, их взаимосвязями, корректностью, достаточностью, управлять бизнес-процессом ведения заказов. Так мы сокращаем вероятность возникновения ошибок, дублирования или расхождения информации во взаимодействующих системах.
Принцип «изменения каждого вида данных только в одной системе».
Помимо онлайн заказов никакие другие сущности, участвующие в импорте из 1С (каталог товаров, оффлайн заказы, справочники), на сайте не редактируются, а их изменения не отправляются в 1С и затираются очередным обменом.
В случае, когда у клиента есть несколько исходных 1С, рекомендуем выбрать среди них одну главную или развернуть дополнительную новую 1С, предназначенную специально для обмена с сайтом. Во втором случае логику последующего обмена онлайн заказами с сайта между новой и исходными 1С системами нужно будет реализовать специалистам 1С.
В крупных проектах может быть сложнее, потребуется внедрение ESB на базе классического Rabbit или 1C:Шина/Datareon, но пока это все же редкость.
Хитрые настройки
Величайшая уловка дьявола состоит в том, чтобы убедить вас, что он не существует.
Шарль Бодлер
На первый взгляд настройки — штука простая. Зашел, натыкал, победил. На деле, однако, настройка обменов открывает кучу возможностей.
Расскажу самое интересное.
Важные настройки — форма «Интеграция с 1С» (Администрирование / Магазин / Настройки / Интеграция с 1С)
Настройка «Использовать контрольные суммы элементов для оптимизации обновления каталога» (вкладка «Каталог») включает механизм контрольных сумм (хешей), определяющих, были ли произведены изменения над объектом обмена и нужно ли его пересохранить. Это позволяет экономить ресурсы сервера и сокращает время выполнения обмена каталогом, так как операции чтения данных из базы работают быстрее операций обновления.

На скриншоте изменение данных работает в 1,8 раз медленнее, чем чтение.
Объект в базе сайта обновляется лишь в случае, если он был изменен (из 1С пришла новая контрольная сумма). Настройка работает и при полном обмене каталогом.
Эта настройка регулирует контроль версий элементов каталога (товаров, SKU, разделов) и справочников (highload-блоков), выгруженных из 1С.
На практике бывают ситуации, когда 1С-специалисты, дорабатывая модуль обмена, забывают о необходимости пересчета контрольных сумм каталога после внесенных ими кастомных изменений, в этом случае на сайт приходят новые данные со старыми контрольными суммами, и возникает проблема обновления объектов. Решение этого кейса заключается в отключении контрольных сумм. Если это устраняет проблему обновления, то есть вероятность, что можно исправить причину проблемы на стороне 1С в кастомизированной части модуля обмена.
Вместе с настройкой в форме «Интеграция с 1С» на сайте нужно помнить о «Настройке версионности выгружаемых данных» на стороне 1С, которая также для определенных (выбранных) видов выгруженных на сайт объектов может генерировать каждый раз новую версию, чтобы эти объекты обновлялись при каждой выгрузке.
Настройка «Тегированный кеш инфоблока» (вкладка «Каталог») устанавливает режим сброса кеша инфоблока в процессе/после импорта каталога товаров из 1С на сайт. Если значение будет установлено в «Не сбрасывать», то и после очередного импорта товаров в публичной части сайта будут выводится ранее закешированные, не актуальные данные. Также не стоит выбирать вариант «сбрасывать после каждой операции», так как это с большой долей вероятности способно повлиять на производительность сайта. Рекомендуется сбрасывать кеш.
Если вы воспользуетесь предложенным принципом использования 1С как единого источника достоверных данных, то вам требуется проверить, что установлены опции «Менять статусы заказов по информации из 1С«, «Создавать новые документы оплаты из 1с«, «Создавать новый документы доставки из 1с» (вкладка «Заказы»), чтобы управление движением заказов принадлежало 1С.
Форма «Интеграция с 1С» — профили обмена и дополнительные данные по заказам.
Интеграция функционала оформления заказов на сайте предполагает создание типов плательщиков (Магазин/Настройки/Типы плательщиков, например, физических и юридических лиц), определяющих набор полей, которые покупатель того или иного типа должен заполнить при создании заказа (ФИО, телефон, E-mail, ИНН и т.д.).
Такие поля создаются как свойства заказа (Магазин/Настройки/Свойства заказа), привязанные к тому или иному типу покупателя (плательщика).
Для экспорта заказов сайта в 1С можно штатно настроить список отправляемых данных (вкладка «Профили обмена«). Для каждого типа плательщика есть свой профиль обмена. Здесь настраивается соответствие полей экспорта в 1С с полями заказа на сайте (в т.ч. свойствами заказов).
Обязательно проверяйте корректность обмена данными отдельно по онлайн и оффлайн заказам.
Настройки сайта в первую очередь рассчитаны на экспорт онлайн заказов в 1С. Корректная отправка данных по онлайн заказам в 1С не гарантирует, что при той же структуре xml-файла данные по оффлайн заказам запишутся в нужные (аналогичные онлайн) поля заказа на сайте. Может потребоваться донастройка профиля обмена или кастомизация импорта (например, по банковским реквизитам, импорт которых для оффлайн заказов штатно не предусматривает).
В настройках каждого профиля обмена формы «Интеграция с 1С» в блоке «1С: Дополнительные параметры» вы можете добавить любое количество дополнительных (в том числе служебных) реквизитов, экспортируемых сайтом по заказам в 1С (данные будут добавлены в узел xml-файла экспорта).
Стоит учесть, что настройка дополнительных реквизитов штатно работает лишь для экспорта заказов, а вот при импорте оффлайн заказов, если вы передадите в xml-файл импорта значения в аналогичные реквизиты, по умолчанию сайт их не распознает и не импортирует (для решения такой задачи потребуется кастомизация импорта заказов).
Статусы заказов
Статусы — это этапы движения заказа (например, «Новый», «Принят», «Отгружен» и т.д.).
Список и последовательность смены статусов должны соответствовать бизнес-логике сайта.
Статусы заказа на стороне сайта настраиваются через Магазин/Настройки/Статусы. Статус может относиться к заказу или документу отгрузки.
В 1С-Битрикс существуют особые статусы заказов и отгрузок заказов, удаление которых невозможно:
N — начальный статус (название по умолчанию — Принят), в который заказ устанавливается при создании;
F — финальный статус (название по умолчанию — Выполнен), в котором заказ считается выполненным (т.е. оплаченным и доставленным).
DN — начальный статус документа отгрузки товаров (название по умолчанию — Ожидает обработки);
DF — финальный статус документа отгрузки товаров (название по умолчанию — Отгружен).
Статусы заказа на сайте могут отличаться от статусов в 1С, в настройках узла обмена на стороне 1С нужно настроить их соответствие.
Удобно, когда за логику смены статусов отвечает 1С, тогда на сайте остается лишь принять из 1С новый статус по заказу и вывести его пользователю (и иногда совершить сопутствующие операции, например, отправить уведомления). В этом случае на стороне сайта не нужно совершать дополнительных настроек (например, вкладка «Автоматизация процессов» модуля «Интернет-магазин») и управлять процессом смены статусов заказов.
Настройки модуля «Интернет-магазин»
Настройка «Статус, начиная с которого можно оплатить заказ» является важной и должна учитывать бизнес-процесс работы с заказами сайта.
Настройка поможет реализовать, например, такой кейс: при создании заказа для него на сайте устанавливается статус «Ожидает подтверждения», оплата в котором пользователю не доступна. После загрузки заказа в 1С и внутрисистемной проверки (автоматической или менеджером 1С), например, на фактическое наличие остатков по всем товарам или на корректность данных контрагента, 1С отдает сайту новый статус заказа, например, «Принят», в котором оплата на сайте уже возможна.
Документы оплат и обмен сайта с 1С
При создании онлайн заказа система 1С-Битрикс автоматически штатно создает документ оплаты. Он содержит информацию о выбранной покупателем платежной системе, статусе оплаты, номере и дате документа прихода.
Без хотя бы одного документа оплаты нельзя оплатить заказ на сайте (например, если удалить штатно созданную оплату).
Если в результате импорта заказов из 1С по онлайн заказу существующий на сайте документ оплаты не приходит, то он автоматически удаляется с сайта.
Документы оплаты могут быть отправлены сайтом в 1С и получены из нее штатными средствами обмена между 1С-Битрикс и 1С, что настраивается в узле обмена с сайтом на стороне 1С: галочки «Загружать оплаты» и «Выгружать оплаты» настроек обмена документами.
Загрузка оплат из 1С на сайт также должна быть разрешена через вышеупомянутую настройку «Создавать новые документы оплаты из 1с» в 1С-Битрикс.
Для корректного сохранения на сайте номера и даты документа оплаты из 1С в xml-файле импорта необходимо наличие реквизитов «Номер оплаты по 1С» и «Дата оплаты по 1С» (этих реквизитов может не быть по умолчанию, нужно донастроить на стороне 1С).
1С-Битрикс не дает изменять уже оплаченные оплаты. 1С-Битрикс не позволяет удалить заказ с оплаченным документом оплаты.
Для изменения/удаления оплаченной оплаты нужно сначала ее отменить (установить статус “Не оплачено”), а затем уже следующим запуском обмена вместе с изменениями оплаты можно снова сделать ее оплаченной.
Если задачей является отмена или изменения заказа, у которого есть оплаченная оплата на сайте, то нужно сначала отменить эту оплату в одном импорте, а в другом уже отменить или удалить заказ с сайта.
Пометка на удаление документа оплаты из 1С приходит как отмена документа оплаты. Чтобы физически удалить документ оплаты с сайта нужно, чтобы оплата была не оплачена, и этот документ оплаты не пришел при очередном импорте заказов из 1С.
Документы отгрузки и обмен сайта с 1С
При оформлении онлайн заказа в 1С-Битрикс автоматически создается документ отгрузки, привязанный к этому заказу.
Документ отгрузки на сайте хранит информацию о выбранной при оформлении заказа службе доставки, составе и количестве товаров в отгрузке, разрешении на доставку, статусе отгрузки, номере и дате документа отгрузки.
В настройках узла обмена на стороне 1С можно управлять загрузкой отгрузок в 1С и их выгрузкой на сайт. Импорт отгрузок из 1С на сайт также должен быть разрешен через настройку «Создавать новый документы доставки из 1с » в 1С-Битрикс.
Если в результате импорта заказов из 1С по онлайн заказу существующий на сайте документ отгрузки не приходит, то он автоматически удаляется с сайта.
Для сохранения у отгрузки на сайте номера и даты документа отгрузки нужно передать соответствующие значения в реквизит «Номер отгрузки по 1С» и узел «Дата1С» (не реквизит) xml-файла обмена.
Реквизит «Метод доставки ИД» xml-файла обмена устанавливает способ доставки, который должен быть выбран для отгрузки, в значении реквизита должен быть ID (целое число) службы доставки с сайта.
Если ваш каталог выгружается из 1С без торговых предложений (SKU), а при обмене онлайн заказами возникает ошибка «Попытка добавить в отгрузку товар, не входящий в состав заказа», можно попробовать удалить из xml-файла обмена (на стороне 1С) реквизиты «СвойствоКорзины#CATALOG.XML_ID » и «#PRODUCT.XML_ID» у товаров в отгрузке, эти реквизиты автоматически генерируются в 1С для работы с SKU, но без торговых предложений могут приводить к ошибке.
Если при обмене по заказам (наблюдали для оффлайн заказа) возникает ошибка «Попытка увеличить количество товара в отгрузке до количества, которое превышает не отгруженное в заказе«, возможно, в xml-файле обмена в составе заказа некоторый товар указан несколько раз — с разным количеством заказанных товаров, а в отгрузке только один раз — с суммарным количеством. Нужно на стороне 1С в xml-файле выгрузки для заказа объединить записи по идентичным товарным позициям в одну. Например, если раньше в составе заказа “товар А” был указан дважды с количеством 8 400 шт. и 1 600 шт., а в отгрузке только один раз — с количеством 10 000 шт., то теперь и в заказе, и в отгрузке «товар А» нужно указать только по одному разу с количеством в 10 000 шт.
1С-Битрикс не позволяет изменить отгруженную отгрузку, для внесения изменений нужно сначала сменить статус отгрузки на «Не отгружен» (поле «Отгрузка»).
Если пометить отгрузку на удаление в 1С, но физически из базы 1С не удалять, то ранее отгруженная на сайте отгрузка станет не отгруженной.
Если физически удалить отгрузку из базы 1С, то документ отгрузки просто не придет с заказом (скорее всего потребуется полный обмен, а обмен изменений вообще не подхватит связанный заказ), что удалит отгрузку и на сайте, если она не отгружена.
Вывод и личное мнение
У профессионального разработчика чешутся руки сделать все самому. Однако здравый смысл и опыт показывает, что из базового обмена можно выжать максимум пользы, и только потом переходить к доработкам. Об этом – в других статьях.
P.S. Я впервые публикуюсь на Хабре. Прошу обратной связи и комментариев, чтобы я быстрее подготовила следующую часть. Она будет про наш опыт отладки обмена передачи оффлайн-заказов и некоторые программные трюки.
Спасибо!- настройка обмена
- обмен 1с
- стандартный обмен 1с
- туториал 1с
- интеграция с 1с
- штатный обмен 1с
- как настроить обмен 1с
- настройка модулей 1с
Возможности доработки выгрузки из 1С в Битрикс
В статье собраны некоторые полезные и интересные примеры доработок выгрузки из 1С на сайты на платформе Битрикс (Возможно, что-то подойдёт и для WordPress и других платформ, принимающих типовую выгрузку на сайт из 1С). Доработки рассмотрены без привязки к конкретным конфигурациям, примеры кода взяты в основном из доработок УТ 10 и 11. Некоторые доработки требуют изменений на стороне Битрикса, некоторые укладываются в типовой функционал. Примеры взяты из личного опыта, возможно, описание где-то не полное, т.к. доработки делались в разное время. Если материал будет интересен или будут аналогичные актуальные задачи, буду стараться дополнять статью более подробным описанием и примерами.
- Несколько групп-категорий товаров.
- Множественные свойства товаров.
- Свойства к предложению.
- Передача картинок через внешний ресурс.
- Выгрузка справочников и регистров сведений в highload-блоки.
- Выгрузка файла обмена на FTP
- Объединение товаров в одной карточке на сайте.
1. Несколько групп-категорий товаров.
Битрикс позволяет относить один товар к нескольким категориям, т.е. например товар «Конструктор» можно выводить одновременно в категориях «Развивающие игрушки», «Новинки» и «Конструкторы».
В 1С необходимо организовать хранилище дополнительных групп номенклатуры. Для этого можно использовать новый регистр сведений или добавить табличную часть в справочнике Номенклатура.
В процедуре выгрузки необходимо доработать добавление дополнительных групп в товаре в тег Группы. Для типовой выгрузки на сайт из УТ 11 это процедура ДобавитьНоменклатуруXDTO в общем модуле ОбменССайтом, для выгрузки от битрикса процедуры ВыгрузитьТоварыXDTO-ВыгрузитьГруппыНоменклатурыXDTO в общем модуле Б_ПроцедурыИФункцииВыгрузкиДанныхНаСайт.
//Начало Если ВыборкаНоменклатуры.ИдентификаторРодителя.ССБ_ГруппыДляСайта.Количество() = 0 Тогда XDTOГруппы.Ид.Добавить(ПолучитьИдентификаторГруппы(XMLСтрока(ВыборкаНоменклатуры.ИдентификаторРодителя))); Иначе Для каждого ГруппаЗамены из ВыборкаНоменклатуры.ИдентификаторРодителя.ССБ_ГруппыДляСайта Цикл XDTOГруппы.Ид.Добавить(ПолучитьИдентификаторГруппы(XMLСтрока(ГруппаЗамены.ГруппыЗамены))); КонецЦикла; КонецЕсли; Для каждого СтрДопГруппы из ВыборкаНоменклатуры.Номенклатура.ССБ_ДополнительныеГруппы Цикл XDTOГруппы.Ид.Добавить(ПолучитьИдентификаторГруппы(XMLСтрока(СтрДопГруппы.ДопГруппа))); КонецЦикла; //XDTOГруппы.Ид.Добавить(ПолучитьИдентификаторГруппы(XMLСтрока(ВыборкаНоменклатуры.ИдентификаторРодителя))); //КонецВ XML файле получаем следующую структуру:

Так же надо проверить вывод дополнительных групп в описании каталога в разделе Группы. По умолчанию туда попадают только группы номенклатуры, участвующей в выгрузке, поэтому дополнительные группы туда могут не попасть.

Доработок со стороны битрикса не требуется.
2. Множественные свойства
Расширение для УТ 11.5 для работы с множественными свойствами — //infostart.ru/public/1813142/
Функционал Битрикса позволяет задавать для товара множественные свойства, т.е. одно свойство может иметь несколько значений, на пример, одна деталь может применяться на несколько моделей. В 1С хранение таких свойств не реализовано и требует доработки. На инфостарте есть несколько статей с подробным описанием подобных доработок для разных конфигураций, в том числе и мой вариант. В двух словах, во первых, необходимо доработать выбор множественного свойства на форме номенклатуры. Далее, для УТ 10.3 необходимо организовать хранилище множественных свойств в отдельном регистре или через разделители в справочнике ЗначенияСвойств. В УТ 11 доп. реквизиты хранятся в таблице справочника номенклатуры и организация отельного хранилища не требуется, т.к. в табличной части нет проверки уникальности. Возможен вариант хранения как отдельной строкой для каждого значения свойства, так и использования разделителей или сериализации, на пример с помощью объекта СериализаторXDTO или методом ЗначениеВСтрокуВнутр(). В случае использования сериализации значение списка свойств можно хранить в реквизите табличной части ТекстоваяСтрока (Строка неограниченной длины), а в реквизит Значение — записать строковое представление (первые несколько значений) для вывода в отчетах.
Для выгрузки множественного свойства на сайт необходимо внести три изменения. Во первых, в описании свойства в классификаторе добавить признак свойства — Множественное = Истина.

Вывод значений свойств необходимо сделать в блоке ЗначенияСвойства — после реквизита ИД необходимо для каждого значения добавить блок «ЗначениеСвойства» содержащий реквизит «Значение». Без доработок выгрузка УТ11 будет формировать отдельный блок ЗначенияСвойства для каждой строки таблицы свойств, что не верно. На скриншоте пример множественного и одиночного свойства.

Для УТ 11 доработки вносятся в общем модуле ОбменССайтом, процедуры ДобавитьСвойстваНоменклатурыВКлассификаторXDTO и ДобавитьЗначенияСвойствНоменклатурыXDTO.
Если ВыборкаСвойствНоменклатуры.м_МожетПриниматьМножественноеЗначение Тогда СвойствоXDTO.Множественное = XMLСтрока(Истина); КонецЕсли;Для добавления блока ЗначениеСвойсва в блок ЗначенияСвойства необходимо внести изменения в пакете XDTO Commerce ML 2.08 (В Управлении торговлей 10 и 11 это пакет с именем CML208). В типах объектов добавляем новый тип ЗначениеСвойства, содержащий реквизит Значение — тип ЗначениеТип. А в типе ЗначенияСвойств добавляем поле ЗначениеСвойства — тип наше добавленное ЗначениеСвойства. Для полей Значение и ЗначениеСвойства необходимо настроить Минимальное количество = 0, т.к. для одиночных свойств будет заполнено только Значение, а для множественных только ЗначениеСвойства. Для поля ЗначениеСвойства устанавливаем Максимальное количество = -1 — без ограничений.

Доработок со стороны битрикса не требуется.
3. Свойства к предложению
Битрикс позволяет устанавливать свойства как для товара, так и для товарного предложения. В типовой выгрузке товарное предложение формируется как Номенклатура + Характеристика (если используются) и в свойства предложения выгружаются дополнительные реквизиты добавленные к характеристике. Это можно использовать, на пример, для вывода параметров, относящихся к конкретной характеристике — габариты для разные размеров товаров и т.д.
Но свойства предложений можно использовать и без использования характеристик в 1С. На пример, на одном проекте была необходимость на сайте дать возможность пользователям заказывать один и тот же товар с разных складов в одном заказе. От выбора склада зависел срок поставки и цена товара. Типовой механизм работы со складами на битриксе использовать для этой задачи не получалось. В итоге выгрузка остатков по складам была отключена, а при формировании выгрузки товарного предложения сделаны доработки: ИД товарного предложения формировался как Уникальный идентификатор номенклатуры + Уникальный идентификатор склада. Товарное предложение разбивалось на несколько по количеству складов в базе, со своим остатком и ценой для каждого склада. В товарное предложение было добавлено свойство «Склад». Описание свойства «Склад» и возможные значения принудительно выводились в классификатор в разделе свойства. В результате в рамках одной корзины клиент на сайте по каждому товару мог выбрать склад с которого он хочет сделать заказ.
По другой задаче аналогичным образом была сделана возможность заказа поштучно с розничного склада и кратно упаковкам с оптового. В свойства предложения была добавлена кратность заказа (число). На сайте настроено заполнение количества к заказу кратное упаковке, если у предложения передана кратность.

Механизм не требует доработки со стороны битрикса для получения данных. Но требует настройки вывода и логики работы с полученными данными на сайте.
4. Картинки через внешний ресурс
Эта доработка требует изменений и со стороны Битрикса. Специфика базы 1С в описываемой задаче — это большое количество товаров, при этом регулярно появляются новые товарные позиции и могут изменяться большие объёмы уже существующих данных. Т.е. в типовом варианте выгрузки регулярно на сайт передавался большой объём фотографий товаров, что негативно сказывалось на скорости обмена и объёме трафика. Варианты комбинирования полного обмена и обмена изменениями без картинок не дали необходимого улучшения и было принято решение не передавать картинки типовыми средствами.
В базе было доработано хранение картинок на диске (речь идёт о УТ 10.3, для УТ 11 и современных конфигураций на БСП хранение приложенных файлов в томах уже типовой функционал). Папка хранения картинок была синхронизирована с каталогом на хостинге по средствам стороннего ПО. В настройках обмена в 1С отключена выгрузка картинок на сайт, а в выгрузку добавлено множественное свойство КартинкаСтрокой в которое выгружался список путей к картинкам.

На битриксе сделаны соответствующие доработки для отображения картинки из папки на FTP по пути переданному в свойстве КартинкаСтрокой.
В результате получилось существенно ускорить время обмена 1С с сайтом и обновления данных на сайте.
5. Справочники и регистры сведений в highload-блоки
Выгрузка дополнительных справочников реализована в модуле обмена от Битрикса и позволяет передавать данные справочников на сайт с гибкой настройкой какие реквизиты требуется передать. Но в типовом Обмене с сайтом в конфигурациях 1С это не реализовано.
Для доработки типового механизма потребуется внести изменения в XDTO-пакет, т.к. типовой пакет CML208 не содержит типов ПользовательскиеСправочники, Справочник и ЭлементСправочника. Можно добавить их в типовой пакет или воспользоваться пакетом из обмена предоставленного модулем Битриксом, я воспользовался вторым вариантом. XDTO-пакет находится в плане обмена Б_ОбменССайтом в макете СхемаXSDОбмена.


В общем модуле ОбменССайтом было реализовано заполнение файла XML в соответствии со структурой пакета. В блоке ПользовательскиеСправочники в начале описывается структура справочника: перечень реквизитов и их типы, далее записываем значение элементов справочника. На выходе получаем файл следующей структуры:
Этот файл можно передать на типовой скрипт обмена с сайтом, при этом необходимо указать Тип соединения — «reference».
Эта доработка будет скорее актуальна для сайтов на платформах, отличных от Битрикса и UMI, не имеющих готового функционала для приёма от 1С файлов обмена. При настройке выгрузки на прямую на сайт 1С выполняет определённую последовательность http-запросов и получает ответы от сайта, подробнее по протоколу обмена можно почитать на Безопасное хранилище данных и процедуры — ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище, ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища. Настройка способа обмена данными выбрана — Выгружать в каталог на диске. И в общем модуле ОбменССайтом в процедуре ВыполнитьОбменССайтом после выгрузки каталога и пакета предложений добавлено сжатие файлов обмена в архив и отправка сформированного архива с файлами обмена на указанный FTP сервер.

7. Объединение товаров в одной карточке на сайте.
Что бы товар с разными свойствами выводился на сайте в одной карточке с возможностью выбора свойств в типовом варианте в 1С необходимо использовать Характеристики номенклатуры. На примере одежды, для карточки товара заносим в характеристики размеры и цвета, принты. В результате типовой выгрузке по справочнику номенклатуры на сайте формируются товары, а по справочнику Характеристики — товарные предложения (ТП). Получаем единую карточку товара, с возможностью выбора характеристик.
Но что делать, если использование характеристик в 1С не целесообразно или учёт уже ведётся без использования характеристик?
Эту задачу можно решить доработкой со стороны Битрикса: в 1С заводим доп. реквизит для объединения товаров, на пример — Общее наименование карточки. Товары выгружаются на сайт типовой выгрузкой. Далее товар уже на сайте объединяется в одну карточку по этому полю. Дополнительно можно добавить в свойствах товара признак, что дополнительный реквизит используется для объединения. В одном из проектов не делали этого признака, реквизит для свёртки настраивался на сайте в ручном режиме программистами Битрикс.
К сожалению, данная доработка вызывает сложности у некоторых Битрикс-специалистов. Не являюсь специалистом по Битрикс и оценить её реальную сложность не могу. Но эту задачу можно решить и со стороны 1С, без доработки Битрикс. В этом случае необходимо разработать интерфейс для настройки объединения товаров в базе 1С и доработать выгрузку на сайт. При выгрузки заменять формирование ТП с Номенклатура+характеристика, на номенклатура+объединяемая номенклатура. Для доп. реквизитов так же необходимо завести признак — использовать реквизит для товара или ТП.
Для встроенной выгрузки в УТ необходимо доработать формирование файла Offers.xml. Для модуля от Битрикс ещё формирование файлов по остаткам и ценам. Если планируется использование загрузки заказов, то механизм получения номенклатуры так же необходимо доработать.
В этом варианте доработок со стороны битрикса не потребуется, но объём работ со стороны 1С может быть существенным.
Как выгрузить highload из 1с в битрикс

Автор: Татьяна Старкова
Просмотров: 18042
Дата изменения: 24.12.2022Вы хотите загрузить данные в новый Highload-блок? Сделайте это вместе с инструментом импорта.
-
Шаг 1. Подготовьте XML-файл Как подготовить XML-файл см. в предыдущем уроке c данными и загрузите его на сервер.
Примечание: если у вас в XML-файле есть описание поля типа Файл, то подготовьте и загрузите также файлы для записей Highload-блока в папку с названием _files. Она располагается внутри той же папки, где и файл импорта.
В качестве примера мы рассмотрим импорт на основе простого файла
Myhighloadblock b_my_highload_block ru Мой highload-блок UF_NAME string 100 N N Y Y Y Y 20 1 0 0 Название торта Название торта Название торта Наполеон 
- Шаг 3. Укажите параметры импорта:
- В поле Файл для импорта укажите загруженный файл.
- В поле Highload-блок выберите -создать новый-.
- Проверьте, чтобы все опции были отмечены, а параметр Поле внешнего ключа не настраивается.
- Шаг 4. Запустите процесс импорта. По окончании вы увидите специальное сообщение
. - Шаг 5. Проверьте загруженные данные:
- Откройте страницу со списком Highload-блоков ( Контент > Highload-блоки ). Вы увидите новый Highload-блок
. - Откройте страницу со списком полей нового Highload-блока и убедись, что поля созданы
. - Откройте страницу со списком записей Highload-блока и добавленные записи
.
- Откройте страницу со списком Highload-блоков ( Контент > Highload-блоки ). Вы увидите новый Highload-блок
Как видите, инструмент импорта позволяет легко создать и наполнить Highload-блок данными.
Как выгрузить highload из 1с в битрикс
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы ( Marketplace > Обновление платформы ).
Ограничений нет
Вам нужно перенести информацию из Highload-блока? Используйте инструмент экспорта. Он позволяет всего за 3 простых шага выгрузить данные в файл формата XML.
Шаг 1. Страница Экспорт Highload-блока
Откройте страницу Экспорт Highload-блока ( Контент > Highload-блоки > Экспорт/импорт > Экспорт ):
Шаг 2. Параметры выгрузки
Задайте параметры выгрузки:
- Файл для экспорта – укажите путь относительно корня сайта к файлу и сам XML-файл, в который будет выгружена информация из Highload-блока. Чтобы создать новый файл, укажите произвольное название в формате .xml – этот файл будет создан в процессе выгрузки.
- Highload-блок – выберите Highload-блок для экспорта.
- Экспортировать структуру – отметьте опцию для выгрузки структуры Highload-блока: его названия, перечня полей, названия таблицы в базе данных.
- Экспортировать данные – отметьте для выгрузки записей Highload-блока. Файлы при этом выгружаются в папку с названием _files. Она размещается внутри той же папки, где и файл экспорта.
Шаг 3. Экспорт
Нажмите кнопку Экспортировать. Начинается экспорт Highload-блока, и над формой отображается ход процесса выгрузки. По окончании на странице выводится соответствующее сообщение:

Итак, скачайте файлы и используйте информацию из Highload-блока по своему усмотрению.
