- Несколько групп-категорий товаров.
- Множественные свойства товаров.
- Свойства к предложению.
- Передача картинок через внешний ресурс.
- Выгрузка справочников и регистров сведений в highload-блоки.
- Выгрузка файла обмена на FTP
- Объединение товаров в одной карточке на сайте.
1. Несколько групп-категорий товаров.
Битрикс позволяет относить один товар к нескольким категориям, т.е. например товар "Конструктор" можно выводить одновременно в категориях "Развивающие игрушки", "Новинки" и "Конструкторы".
В 1С необходимо организовать хранилище дополнительных групп номенклатуры. Для этого можно использовать новый регистр сведений или добавить табличную часть в справочнике Номенклатура.
В процедуре выгрузки необходимо доработать добавление дополнительных групп в товаре в тег Группы. Для типовой выгрузки на сайт из УТ 11 это процедура ДобавитьНоменклатуруXDTO в общем модуле ОбменССайтом, для выгрузки от битрикса процедуры ВыгрузитьТоварыXDTO-ВыгрузитьГруппыНоменклатурыXDTO в общем модуле Б_ПроцедурыИФункцииВыгрузкиДанныхНаСайт.
//Начало
Если ВыборкаНоменклатуры.ИдентификаторРодителя.ССБ_ГруппыДляСайта.Количество() = 0 Тогда
XDTOГруппы.Ид.Добавить(ПолучитьИдентификаторГруппы(XMLСтрока(ВыборкаНоменклатуры.ИдентификаторРодителя)));
Иначе
Для каждого ГруппаЗамены из ВыборкаНоменклатуры.ИдентификаторРодителя.ССБ_ГруппыДляСайта Цикл
XDTOГруппы.Ид.Добавить(ПолучитьИдентификаторГруппы(XMLСтрока(ГруппаЗамены.ГруппыЗамены)));
КонецЦикла;
КонецЕсли;
Для каждого СтрДопГруппы из ВыборкаНоменклатуры.Номенклатура.ССБ_ДополнительныеГруппы Цикл
XDTOГруппы.Ид.Добавить(ПолучитьИдентификаторГруппы(XMLСтрока(СтрДопГруппы.ДопГруппа)));
КонецЦикла;
//XDTOГруппы.Ид.Добавить(ПолучитьИдентификаторГруппы(XMLСтрока(ВыборкаНоменклатуры.ИдентификаторРодителя)));
//Конец
В XML файле получаем следующую структуру:
Так же надо проверить вывод дополнительных групп в описании каталога в разделе Группы. По умолчанию туда попадают только группы номенклатуры, участвующей в выгрузке, поэтому дополнительные группы туда могут не попасть.
Доработок со стороны битрикса не требуется.
Расширение для УТ 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 - без ограничений.
Доработок со стороны битрикса не требуется.
Битрикс позволяет устанавливать свойства как для товара, так и для товарного предложения. В типовой выгрузке товарное предложение формируется как Номенклатура + Характеристика (если используются) и в свойства предложения выгружаются дополнительные реквизиты добавленные к характеристике. Это можно использовать, на пример, для вывода параметров, относящихся к конкретной характеристике - габариты для разные размеров товаров и т.д.
Но свойства предложений можно использовать и без использования характеристик в 1С. На пример, на одном проекте была необходимость на сайте дать возможность пользователям заказывать один и тот же товар с разных складов в одном заказе. От выбора склада зависел срок поставки и цена товара. Типовой механизм работы со складами на битриксе использовать для этой задачи не получалось. В итоге выгрузка остатков по складам была отключена, а при формировании выгрузки товарного предложения сделаны доработки: ИД товарного предложения формировался как Уникальный идентификатор номенклатуры + Уникальный идентификатор склада. Товарное предложение разбивалось на несколько по количеству складов в базе, со своим остатком и ценой для каждого склада. В товарное предложение было добавлено свойство "Склад". Описание свойства "Склад" и возможные значения принудительно выводились в классификатор в разделе свойства. В результате в рамках одной корзины клиент на сайте по каждому товару мог выбрать склад с которого он хочет сделать заказ.
По другой задаче аналогичным образом была сделана возможность заказа поштучно с розничного склада и кратно упаковкам с оптового. В свойства предложения была добавлена кратность заказа (число). На сайте настроено заполнение количества к заказу кратное упаковке, если у предложения передана кратность.
Механизм не требует доработки со стороны битрикса для получения данных. Но требует настройки вывода и логики работы с полученными данными на сайте.
4. Картинки через внешний ресурс
Эта доработка требует изменений и со стороны Битрикса. Специфика базы 1С в описываемой задаче - это большое количество товаров, при этом регулярно появляются новые товарные позиции и могут изменяться большие объёмы уже существующих данных. Т.е. в типовом варианте выгрузки регулярно на сайт передавался большой объём фотографий товаров, что негативно сказывалось на скорости обмена и объёме трафика. Варианты комбинирования полного обмена и обмена изменениями без картинок не дали необходимого улучшения и было принято решение не передавать картинки типовыми средствами.
В базе было доработано хранение картинок на диске (речь идёт о УТ 10.3, для УТ 11 и современных конфигураций на БСП хранение приложенных файлов в томах уже типовой функционал). Папка хранения картинок была синхронизирована с каталогом на хостинге по средствам стороннего ПО. В настройках обмена в 1С отключена выгрузка картинок на сайт, а в выгрузку добавлено множественное свойство КартинкаСтрокой в которое выгружался список путей к картинкам.
На битриксе сделаны соответствующие доработки для отображения картинки из папки на FTP по пути переданному в свойстве КартинкаСтрокой.
В результате получилось существенно ускорить время обмена 1С с сайтом и обновления данных на сайте.
5. Справочники и регистры сведений в highload-блоки
Выгрузка дополнительных справочников реализована в модуле обмена от Битрикса и позволяет передавать данные справочников на сайт с гибкой настройкой какие реквизиты требуется передать. Но в типовом Обмене с сайтом в конфигурациях 1С это не реализовано.
Для доработки типового механизма потребуется внести изменения в XDTO-пакет, т.к. типовой пакет CML208 не содержит типов ПользовательскиеСправочники, Справочник и ЭлементСправочника. Можно добавить их в типовой пакет или воспользоваться пакетом из обмена предоставленного модулем Битриксом, я воспользовался вторым вариантом. XDTO-пакет находится в плане обмена Б_ОбменССайтом в макете СхемаXSDОбмена.
В общем модуле ОбменССайтом было реализовано заполнение файла XML в соответствии со структурой пакета. В блоке ПользовательскиеСправочники в начале описывается структура справочника: перечень реквизитов и их типы, далее записываем значение элементов справочника. На выходе получаем файл следующей структуры:
Этот файл можно передать на типовой скрипт обмена с сайтом, при этом необходимо указать Тип соединения - "reference".
// Отправляем файл на сайт.
Если Параметры.ВыгружатьНаСайт Тогда
ВыгруженоУспешно = ВыгрузитьДанныеНаСайт(Параметры, СтрокаТаблицыИнформации, "reference");
Иначе
ВыгруженоУспешно = Истина;
КонецЕсли;
/////////////////////////
Функция ВыгрузитьДанныеНаСайт(Параметры, СтрокаТаблицыИнформации, ТипСоединения = Неопределено)
АдресДляРаботы = НастройкиПодключения.АдресСкрипта + "?type=" + ТипСоединения;
Данный метод подходит для выгрузки любых произвольных данных, не только справочников. На пример, была задача выгрузки таблицы независимого регистра сведений на сайт. Алгоритм выгрузки остался аналогичным выгрузке справочника, в качестве ИД Элемента справочника был указан перечень идентификаторов измерений регистра, т.е. по сути ключ записи. Тут надо обратить внимание на ограничение типа поля ИД у ЭлементСправочника. В пакете из обмена Битрикса это поле имеет тип ИдентификаторГлобальныйТип - строка с ограничением длины 40 символов. Т.е. для записи Уникальных идентификаторов двух измерений пришлось увеличить длину строки до 73 символов. В данном случае обмен прошел и Битрикс успешно принял эту строку. Но для регистров с большим количеством измерений такой вариант может не подойти и нужен будет другой механизм формирования ИД записи, на пример, добавить реквизит в регистр и при записи записывать в этот реквизит уникальный идентификатор.
Механизм не требует доработки со стороны битрикса для получения данных. Но требует настройки вывода и логики работы с полученными данными на сайте.
6. Выгрузка файла обмена на ФТП
Эта доработка будет скорее актуальна для сайтов на платформах, отличных от Битрикса и UMI, не имеющих готового функционала для приёма от 1С файлов обмена. При настройке выгрузки на прямую на сайт 1С выполняет определённую последовательность http-запросов и получает ответы от сайта, подробнее по протоколу обмена можно почитать на сайте 1С в этой статье.
Если разработка на сайте полного функционала обмена с обработкой всей последовательности запросов по каким-то причинам не целесообразна, можно передавать файлы обмена на хостинг по FTP. Далее на сайте по расписанию проверять обновления файла и при появлении нового файла обмена осуществлять загрузку данных в каталог.
Для реализации доработки в УТ 11 в план обмена ОбменССайтом были добавлены настройки доступа к FTP ресурсу (сделано по аналогии с типовыми настройками обмена РИБ). Для хранения настроек в базе использован регистр сведений Безопасное хранилище данных и процедуры - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище, ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища. Настройка способа обмена данными выбрана - Выгружать в каталог на диске. И в общем модуле ОбменССайтом в процедуре ВыполнитьОбменССайтом после выгрузки каталога и пакета предложений добавлено сжатие файлов обмена в архив и отправка сформированного архива с файлами обмена на указанный FTP сервер.
7. Объединение товаров в одной карточке на сайте.
Что бы товар с разными свойствами выводился на сайте в одной карточке с возможностью выбора свойств в типовом варианте в 1С необходимо использовать Характеристики номенклатуры. На примере одежды, для карточки товара заносим в характеристики размеры и цвета, принты. В результате типовой выгрузке по справочнику номенклатуры на сайте формируются товары, а по справочнику Характеристики - товарные предложения (ТП). Получаем единую карточку товара, с возможностью выбора характеристик.
Но что делать, если использование характеристик в 1С не целесообразно или учёт уже ведётся без использования характеристик?
Эту задачу можно решить доработкой со стороны Битрикса: в 1С заводим доп. реквизит для объединения товаров, на пример - Общее наименование карточки. Товары выгружаются на сайт типовой выгрузкой. Далее товар уже на сайте объединяется в одну карточку по этому полю. Дополнительно можно добавить в свойствах товара признак, что дополнительный реквизит используется для объединения. В одном из проектов не делали этого признака, реквизит для свёртки настраивался на сайте в ручном режиме программистами Битрикс.
К сожалению, данная доработка вызывает сложности у некоторых Битрикс-специалистов. Не являюсь специалистом по Битрикс и оценить её реальную сложность не могу. Но эту задачу можно решить и со стороны 1С, без доработки Битрикс. В этом случае необходимо разработать интерфейс для настройки объединения товаров в базе 1С и доработать выгрузку на сайт. При выгрузки заменять формирование ТП с Номенклатура+характеристика, на номенклатура+объединяемая номенклатура. Для доп. реквизитов так же необходимо завести признак - использовать реквизит для товара или ТП.
Для встроенной выгрузки в УТ необходимо доработать формирование файла Offers.xml. Для модуля от Битрикс ещё формирование файлов по остаткам и ценам. Если планируется использование загрузки заказов, то механизм получения номенклатуры так же необходимо доработать.
В этом варианте доработок со стороны битрикса не потребуется, но объём работ со стороны 1С может быть существенным.