Разрабатывалась для УТ 10.3, но адаптируется под другие конфигурации. Тестировалось на УТ 10.3.23.3.
Варианты использования
Обработка будет полезна, если:
1. 1С внедряется при уже работающем сайте на Битрикс. И необходимо создать в 1С номенклатуру по каталогу сайта.
В этом случае обработка используется 1 раз на этапе внедрения.
2. Удобнее пополнять каталог в Битриксе - там указывать дополнительные свойства, подгружать картинки. И загружать из Битрикс в 1С только номенклатуру, без картинок, возможно и без свойств. Т.е. вариант синхронизации, обратный типовому.
В этом случае обработка используется постоянно для загрузки новой номенклатуры с сайта. Для каждой позиции номенклатуры есть возможность загружать в 1С адрес ее карточки на сайте. Имея эту информацию картинка и свойства в 1С не нужны, т.к. можно реализовать переход из карточки номенклатуры на сайт, где есть вся дополнительная информация.
Требования
1. Обработка работает через подключение к базе данных сайта. Поэтому должна быть возможность прямого подключения к базе MySQL Битрикса. В нашем случае мы настроили на хостинге внешний доступ к MySQL с ограничением по IP. Также на компьютере, с которого будет производиться подключение должен стоять ODBC-драйвер для MySQL.
2. В справочник "Номенклатура" нужно добавить следующие реквизиты:
Реквизит |
Тип |
Описание |
ИдБитрикс |
Число (11,0) Для групп и элементов. |
ИД номенклатуры или секции каталога (группы) в базе Битрикс |
АдресБитрикс |
Строка (150) |
Страница номенклатуры на сайте |
Настройки
Настройки задаются в реквизитах обработки.
Настройка |
Описание |
АдресСервераБД |
Сервер базы Битрикс (MySQL) |
ПортСервера |
Порт сервера Битрикс (MySQL). По умолчанию 3306 |
ИмяБД |
Имя базы данных на сервере (MySQL) |
ПользовательБД |
Имя пользователя в базе данных Битрикс (MySQL) |
Пароль |
Пароль пользователя (MySQL) |
ПапкаЗагрузки |
Папка в спр. Номенклатура, в которую будет загружаться структура папок и номенклатуры из Битрикс |
ИдСвойстваКодНоменклатуры |
ID свойства номенклатуры в Битрикс (в таблице "b_iblock_property"), в которое будет записываться код номенклатуры 1С после создания номенклатуры в 1С. Это может быть удобно для последующего быстрого поиска номенклатуры в 1С. Если параметр не задан, то передача из 1С в базу Битрикс кода номенклатуры не производится. |
ВидНоменклатурыПриЗагрузке |
Вид номенклатуры, устанавливаемый для загружаемой в 1С номенклатуры (напр. "Товар") |
Программный интерфейс
Ниже описаны экспортные процедуры и функции в модуле объекта обработки. Общий принцип - отдельная процедура для считывания тех или иных данных, которая заполняет определенную таб. часть обработки, и отдельная функция для записи данных в базу 1С. В форме обработки выведены таб. части и кнопки для их заполнения, запускающие некоторые из перечисленных ниже процедур (для удобства тестирования).
Процедура / функция | Описание |
---|---|
ПрочитатьНастройки() | Загрузка и установка настроек обработки (см. описание настроек) |
ЗаписатьНастройки() | Сохранение настроек обработки |
ПодключитьсяКБазе() |
Подключение к базе данных Битрикс. Возвращает объект подключения, используемый во всех последующих процедурах. |
ОтключитьСоединение(Соединение) |
Закрывает соединение с базой Битрикс. Параметр - COMОбъект, возвращенный функцией ПодключитьсяКБазе() |
ЗаполнитьНовыеСекции(СоединениеБитрикс) |
Считывает из базы Битрикс список новых секций (групп) номенклатуры, которых нет в базе 1С. Заполняется ТЧ НовыеСекции |
ЗаполнитьСекции(СоединениеБитрикс, ТолькоНовые = Ложь) |
Считывает из Битрикс секции (группы) номенклатуры и заполняет ими ТЧ ТаблицаСекции. Возможно считывание всех секций или только новых, которых нет в 1С (параметр ТолькоНовые) |
ЗаполнитьНовуюНоменклатуру(СоединениеБитрикс) |
Считывает из Битрикс список новой номенклатуры, которой еще нет в базе 1С. Заполняется ТЧ НоваяНоменклатура |
ЗаполнитьНоменклатуру(СоединениеБитрикс, ТолькоНовая = Ложь) |
Считывает из Битрикс номенклатуру и записывает в ТЧ ТаблицаНоменклатура Возможно считывание всей номенклатуры или только новой, которой нет в 1С (Параметр ТолькоНовая) |
ЗаполнитьТаблицуХарактеристик(СоединениеБитрикс, ТолькоНовые = Ложь) |
Считывает из Битрикс характеристики номенклатуры в ТЧ ТаблицаХарактеристики. Считывание по всей номенклатуре или только по новой (парметр ТолькоНовые) |
ЗаписатьСекции() |
Записывает в базу 1С секции (группы) номенклатуры, ранее считанные в ТЧ ТаблицаСекции Папкой верхнего уровня будет ПапкаЗагрузки из настроек обработки |
ЗаписатьНоменклатуру(СоединениеБитрикс) |
Записывает в базу 1С номенклатуру, ранее считанную в ТЧ ТаблицаНоменклатура. Номенклатура записывается в папки в соответствии с секцией в Битрикс. Одновременно записывает в базу Битрикс 1С-ный код добавленной номенклатуры. |
ЗаписатьХарактеристики() |
Записывает в базу 1С характеристики номенклатуры, ранее считанные в ТЧ ТаблицаХарактеристики |
ПолучитьЦенуНоменклатурыНаСайте(Соединение, Номенклатура) |
Считывает из базы Битрикс цену одной позиции номенклатуры (параметр Номенклатура) Возвращает цену в рублях. Если в Битрикс указана в другой валюте - пересчитывает по курсу. |
Пример использования
1. Загрузка новой номенклатуры
Обработка = Обработки.ЗагрузкаНоменклатурыИзБитрикс.Создать();
Обработка.ПрочитатьНастройки();
Обработка.ТолькоНовые = Истина;
Сообщить("Соединяемся с сайтом...");
Соединение = Обработка.ПодключитьсяКБазе();
Сообщить("Ищем новую номенклатуру...");
Обработка.ЗаполнитьНовыеСекции(Соединение);
Обработка.ЗаполнитьНовуюНоменклатуру(Соединение);
Если Обработка.НоваяНоменклатура.Количество() = 0 Тогда
Сообщить("Новой номенклатуры нет.");
Обработка.ОтключитьСоединение(Соединение);
Возврат;
Иначе
Сообщить("Нашли " + Обработка.НоваяНоменклатура.Количество() + " позиций");
КонецЕсли;
Сообщить("Получаем данные с сайта...");
Обработка.ЗаполнитьСекции(Соединение, Истина);
Обработка.ЗаполнитьНоменклатуру(Соединение, Истина);
Сообщить("Записываем данные в 1С...");
Обработка.ЗаписатьСекции();
Обработка.ЗаписатьНоменклатуру(Соединение);
Обработка.ОтключитьСоединение(Соединение);
Сообщить("Загрузка выполнена!");
2. Получение цены для выбранной номенклатуры
Обмен = Обработки.ЗагрузкаНоменклатурыИзБитрикс.Создать();
Обмен.ПрочитатьНастройки();
Соединение = Обмен.ПодключитьсяКБазе();
Если Соединение = Неопределено Тогда
Сообщить("Не удалось установить соединение с сайтом! Получение цены невозможно!");
Возврат 0
КонецЕсли;
НоваяЦена = Обмен.ПолучитьЦенуНоменклатурыНаСайте(Соединение, Номенклатура);
Если ЗначениеЗаполнено(НоваяЦена) Тогда
Возврат НоваяЦена
Иначе
Сообщить("Не удалось прочитать цену " + Номенклатура);
Возврат 0
КонецЕсли;
Обмен.ОтключитьСоединение(Соединение);