- Несколько групп-категорий товаров.
- Множественные свойства товаров.
- Свойства к предложению.
- Передача картинок через внешний ресурс.
- Выгрузка справочников и регистров сведений в highload-блоки.
- Выгрузка файла обмена на FTP
- Объединение товаров в одной карточке на сайте.
- Продажа товаров по разной цене от количества в заказе.
- Аналоги и сопутствующие товары
1. Несколько групп-категорий товаров.
Битрикс позволяет относить один товар к нескольким категориям, т.е. например товар "Конструктор" можно выводить одновременно в категориях "Развивающие игрушки", "Новинки" и "Конструкторы".
В 1С необходимо организовать хранилище дополнительных групп номенклатуры. Для этого можно использовать новый регистр сведений или добавить табличную часть в справочнике Номенклатура.
В процедуре выгрузки необходимо доработать добавление дополнительных групп в товаре в тег Группы. Для типовой выгрузки на сайт из УТ 11 это процедура ДобавитьНоменклатуруXDTO в общем модуле ОбменССайтом, для выгрузки от битрикса процедуры ВыгрузитьТоварыXDTO-ВыгрузитьГруппыНоменклатурыXDTO в общем модуле Б_ПроцедурыИФункцииВыгрузкиДанныхНаСайт.
//Начало
Если ВыборкаНоменклатуры.ИдентификаторРодителя.ССБ_ГруппыДляСайта.Количество() = 0 Тогда
XDTOГруппы.Ид.Добавить(ПолучитьИдентификаторГруппы(XMLСтрока(ВыборкаНоменклатуры.ИдентификаторРодителя)));
Иначе
Для каждого ГруппаЗамены из ВыборкаНоменклатуры.ИдентификаторРодителя.ССБ_ГруппыДляСайта Цикл
XDTOГруппы.Ид.Добавить(ПолучитьИдентификаторГруппы(XMLСтрока(ГруппаЗамены.ГруппыЗамены)));
КонецЦикла;
КонецЕсли;
Для каждого СтрДопГруппы из ВыборкаНоменклатуры.Номенклатура.ССБ_ДополнительныеГруппы Цикл
XDTOГруппы.Ид.Добавить(ПолучитьИдентификаторГруппы(XMLСтрока(СтрДопГруппы.ДопГруппа)));
КонецЦикла;
//XDTOГруппы.Ид.Добавить(ПолучитьИдентификаторГруппы(XMLСтрока(ВыборкаНоменклатуры.ИдентификаторРодителя)));
//Конец
В XML файле получаем следующую структуру:
Так же надо проверить вывод дополнительных групп в описании каталога в разделе Группы. По умолчанию туда попадают только группы номенклатуры, участвующей в выгрузке, поэтому дополнительные группы туда могут не попасть.
Доработок со стороны битрикса не требуется.
Модули обмена от Битрикс версий 7 и 8 позволяют настроить выгрузку товара в несколько групп при настройке произвольной иерархии групп, там можно отнести товар в несколько групп, доработок со стороны 1С в этом случае не потребуется.
Расширение для УТ 11.5, КА 2.5, ERP 2.5, Розница 3 и 2.3, УНФ 3 для работы с множественными свойствами и их выгрузки на сайт - //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С может быть существенным.
8. Продажа товаров по разной цене от количества в заказе.
Расширение и более подробное описание доработанного функционала для УТ 11, КА 2 и ERP 2 - //infostart.ru/1c/tools/2033419/
На товар применяются разные цены в зависимости от количества товара в заказе. На пример, при заказе товара в количестве от 1 до 100 шт., цена товара 100руб/шт., при заказе от 101 до 1000 - 70руб/шт., и больше 1000 - 60руб./шт.
Со стороны 1С, на примере конфигураций УТ 11, КА 2 и ERP 2, данный механизм можно настроить типовыми средствами, но типовой механизм имеет ряд недостатков и не выгружается на сайт типовыми модулями обмена. Поэтому было принято решение доработать механизм. Был добавлен справочник градаций цен в котором настраиваются пороги срабатывания цен и соответствующие им Виды цен. В справочнике номенклатура добавлена ссылка на справочник Градаций. Подробное описание доработки и настройки механизма можно посмотреть тут.
В выгрузке на сайт сделаны следующие доработки: В выгрузке типов цен каждая строка диапазона справочников градации выгружена как отдельный тип цены. В качестве ИД справочника использован ГУИД элемента справочника Градации цен и номер строки через #. Данное решение обусловлено ограничением типа для ИД справочника Типы цены в 40 символов в типовой схеме XDTO. И подразумевает полную выгрузку на сайт после редактирования справочника градаций, иначе цены на сайте могут быть не актуальны. В поле наименование записаны нижняя и верхняя граница диапазона количества для градации.
При выгрузке значений цен, если для номенклатуры Градация не заполнена - выполняется типовой механизм выгрузки и выгружается базовая розничная цена. Если градация заполнена, выполняется выгрузка базового типа цены (первый уровень градации - цена по умолчанию для штуки) и для каждой строки градации выгружается соответствующий тип цен и значение цены по указанному в строке градации типу.
Для сайтов под управлением Битрикс данный механизм является не типовым и требует существенных доработок на сайте. Типы цен и значения цен загрузятся стандартной выгрузкой, т.к. сама структура файлов осталась типовой. Но потребуется настройка вывода, настройка алгоритма подстановки цены, парсинг границ уровней градаций из наименования типа цен.
9. Аналоги и сопутствующие товары.
В моей практике для выгрузки Аналогов и/или Сопутствующих товаров на сайт всегда дорабатывалась типовая выгрузка из 1С и делались доработки на сайте. Хотя в 1С типовая схема XDTO версии 2.10 содержит раздел Аналоги, с полем Аналог, тип поля - Товар, множественное значение. Т.е. возможно сайт примет его без доработок на стороне Битрикса, но типовая выгрузка из 1С не заполняет этот раздел.
Для разработки возможности выгрузки аналогов и сопутствующих товаров, в начале необходимо определиться с хранением данных. В конфигурациях Розница и УНФ, ред. 3 этот функционал реализован типовыми регистрами сведений АналогиНоменклатуры и СопутствующиеТовары.
Для УТ 11 реализован механизм хранения сопутствующих товаров - РС НоменклатураПродаваемаяСовместно, но не реализован механизм хранения Аналогов.
В конфигурациях, где этот функционал не реализован, можно реализовать его на регистрах сведений по аналогии с типовыми регистрам УНФ. Если аналоги взаимозаменяемы, т.е. Товар А - аналог Товару Б и Товар Б - аналог Товару А, можно использовать архитектуру аналогичную применённой в конфигурации Рарус: Альфа-авто - регистр ГруппыАналогов, когда группе аналогов присваивается уникальный идентификатор группы и все товары-аналоги связаны одним идентификатором. Такая архитектура исключает дублирование записей А - аналог Б, Б - аналог А.
В части выгрузки на сайт потребуется добавление соответствующих реквизитов в схеме XDTO в Тип объектов Товар (для аналогов можно использовать типовой раздел Аналоги). И добавить их заполнение для товара, для УНФ в процедуре ИнтеграцияСИнтернетМагазиномСервер.ДобавитьНоменклатуруXDTO(), для УТ - ОбменССайтом.ДобавитьНоменклатуруXDTO().
При использовании типовой схемы необходимо учесть, что минимальное количество значений Аналог для типа Аналоги = 1, т.е. если Аналогов для товара нет, то добавлять раздел Аналоги в Товар не нужно, xml не пройдёт проверку.