Как выгрузить значения реквизитов справочников и вычислить данные при обмене с 1С-Битрикс?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При настройке обмена данными между 1С и сайтом 1С-Битрикс часто возникают задачи, требующие адаптации данных под формат, понятный конечному пользователю. Рассмотрим, как правильно обращаться к ссылочным типам данных и как реализовать расчет дополнительных показателей прямо в модуле обмена.

Получение строкового представления справочника вместо ID

Когда вы обращаетесь к реквизиту номенклатуры, который имеет тип СправочникСсылка, система по умолчанию возвращает уникальный идентификатор (GUID). Для того чтобы на сайт передавалось понятное пользователю текстовое значение, необходимо обратиться к конкретному полю этого справочника, например, к Наименование.

Рассмотрим, как это сделать правильно. Вместо простого обращения к реквизиту, мы будем использовать точечную нотацию:

Результат = Номенклатура.ЕдиницаИзмерения.Наименование;

Однако, простое обращение может привести к ошибке, если реквизит не заполнен (содержит пустую ссылку). Чтобы избежать аварийного завершения выгрузки, добавим проверку функцией ЗначениеЗаполнено:


Если ЗначениеЗаполнено(Номенклатура.ЕдиницаИзмерения) Тогда
    Результат = Номенклатура.ЕдиницаИзмерения.Наименование;
Иначе
    Результат = \"Значение не задано\";
КонецЕсли;

Этот простой метод позволяет гарантированно передать на сайт именно то значение, которое отображается в карточке товара в 1С.

Реализация вычисляемых полей при обмене

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

Разберем, как вычислить площадь одной штуки на основе двух существующих показателей:


Если КоличествоШтук <> 0 Тогда
    Площадь1шт = ПлощадьВсехШтук / КоличествоШтук;
Иначе
    Площадь1шт = 0;
КонецЕсли;

Важные рекомендации при написании алгоритмов:

  1. Контроль деления на ноль. Всегда проверяйте делитель перед операцией деления. Если значение равно нулю, присваивайте результату 0 или пустое значение, иначе процесс выгрузки будет прерван ошибкой.
  2. Типизация данных. Убедитесь, что итоговый результат соответствует формату, который ожидает инфоблок на сайте. При необходимости приводите данные к строке или числу.
  3. Использование универсальных методов. В типовых конфигурациях для получения значений реквизитов можно использовать функцию ОбщегоНазначения.ЗначениеРеквизитаОбъекта(). Она позволяет безопасно получить значение, если имя реквизита передается строкой, и автоматически обрабатывает пустые ссылки.

Советы по оптимизации процесса

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

Следуя этим рекомендациям, вы сможете гибко настроить обмен данными, сделав информацию на сайте максимально полезной и актуальной для ваших клиентов.

← На главную