Загрузка номенклатуры из Битрикс


Обработка для загрузки номенклатуры напрямую из базы данных Битрикс. Умеет загружать номенклатуру, структуру папок (секции), свойства. Есть функция определения цены номенклатуры. Есть возможность выгрузки кода создаваемой в 1С номенклатуры в Битрикс. Полезна в том числе как пример работы с MySQL через ODBC. Также полезна для понимания, какими запросами вытаскивать из Битрикс номенклатуру, ее свойства, цены и т.д. (значительную часть времени разбирались с этими вопросами).

Разрабатывалась для УТ 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
КонецЕсли;
Обмен.ОтключитьСоединение(Соединение);

 

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *