Интеграция 1С Предприятия и 1С-Битрикс на новой версии модуля обмена – из опыта

Уже, наверное, 2 месяца как делаю новым клиентам интеграции 1С-Битрикс и 1С Предприятия на новой версии модули обмена. Сразу хочу отметить, что новая версия обмена – офигенная, небо и земля по сравнению с тем, что было раньше. Но мелкие острые камушки – попадаются, нужно пройти по ним, ободрав пятки, прежде чем окунуться в это море удовольствия.

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

Когда Битриксоиды выпустили новый модуль, некоторое время я присматривалась к нему, но не хотела внедрять – опасалась.

А потом летом случилось страшное - в какой-то момент мои шустрые сотрудники закончили все проекты и 3 дня сидели без дела. Дело то я им, конечно, нашла – обновили наши модули в маркете, но страх повторения этого апокалипсиса – остался. В тот момент я придумала акцию «интеграция в подарок» за покупку у меня лицензии на Битрикс Бизнес или за заключение со мной договора техподдержки на год. Акцию публиковала в разделе партнерских акций на сайте Битрикса, и она выстрелила – до сих пор слышу эхо.

Прикол был в том, что в период действия акции ею воспользовались всего 2 клиента, но потом еще долгое время клиенты приходили ко мне и говорили, что видели акцию и, хотя не успели ею воспользоваться, – решили все равно обратиться ко мне. В итоге в июле и августе на наши плечи свалилось порядка 10 интеграций. Большинство кейсов были типовыми и скучными, однако попались и интересные сложные задачи.

Передо мной встал сложный выбор – интегрировать новых сложных клиентов своим старым способом или внедрять им новый модуль обмена. К слову, новый модуль обмена на 80% покрывает те задачки, к-е раньше мы допиливали клиентам, как нестандартные. Посмотрела я на него и на наши обработки и подумала, что развивать свой модуль на стороне 1с, пытаясь угнаться за Битриксоидами – будет не выгодно. К тому же я вступила во взаимовыгодное партнерство с фирмой, к-я предоставляет 1С Предприятие в качестве «аренды приложения» и я хотела максимально упростить наше взаимодействие и конфигурирование 1с-ки клиентов.
Этот же фактор заставил меня глубже разобраться в коде конфигурации 1С УТ, и я, как обычно, переосмыслила все на новом уровне. (Кстати, у меня в команде теперь есть совершенно отдельный человечек, который занимается исключительно начальными настройками 1С УТ под разные особенности учета и документооборота).

Итак я начала внедрять новый модуль обмена, устанавливая клиентам 1С Предприятие 8.3.5, 1С УТ 11.1.6, накатывала на 1С УТ свежую версию Битриксовского дополнения, и брали свежий на момент начала работ Битрикс. Кстати, версия Битрикс была один из камушков. С него и начну.

1) Соответствие версий обмена на стороне 1С Битрикс и на стороне 1С Предприятия

Не припомню конкретных дат, когда это произошло, но в переходный период выхода новых модулей обмена на стороне Битрикс и на стороне 1С Предприятия у нас с некоторыми клиентами сложилась ситуация, когда Битрикс был обновлен до самой последней версии, а сторона 1С обновлена не была, и в связи с изменением протокола обмена – этот обмен не пошел. Помню свою панику, я даже кинулась копировать старый модуль обмена на стороне Битрикс в свое простанство имен и использовать его, но Битриксоиды, к счастью, предусмотрели решение на этот случай. На стороне Битрикс нужно ввести команды:

Настройки -> Инструменты - > Команда PHP строка
COption::SetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y" ;
COption::SetOptionString("sale", "secure_1c_exchange", "N" ;

И включится поддержка старой версии протокола.

2) Экспорт в 1С большого объема товаров
На одном из проектов мне нужно было выгрузить с сайта в 1С порядка 40 000 номенклатурынх позиций с картинками. Обработка «Помощник импорта» выполняла эту операцию ужасно долго – больше суток, что было непреемлемо для меня, и я переписала в ней некоторые места – вынесла запросы к базе из цикла. Об этом я писала отдельный пост. Битриксоиды обещали оптимизировать обработку в обновлениях.

3) Обратный импорт и дерево групп
На проекте того же самого клиента, когда мы стали делать интеграцию в обратную сторону у нас сложилась очень специфичная ситуация.

Изначально структура каталога была создана на сайте – не на битриксовском сайте, а на другом старом сайте заказчика на OpenCart. Залили каталог в Битрикс. (используя, кстати, наш модуль импорта из yml и модуль экспорта в yml из опенкарт, к-й я написла на базе одного из бесплатных и дарю теперь тем, кто покупает мой модуль импорта из yml в Битрикс и хочет забрать товары из магазина на OpenCart)

Залили каталог в 1С – все получилось просто отлично – группам товаров был присвоен код, к-й соответствовал внешнему коду разделов XML_ID на стороне Битрикс. Договорились с заказчиком, что далее наполняем каталог и редактируем его структуру на стороне 1С. Выполнили обратный импорт каталога, чтобы убедиться, что все ок, настроили обмен ценами и остатками, протестировали. Затем заказчик сказал, что структура каталога на сайте и в 1С – будет разной. В новом модуле обмена – можно настраивать дерево групп – и такая задача теперь вообще не проблема. Однако выяснился интересный факт – это скорее фича, а не баг, но она меня сильно смутила по-началу. Когда я на стороне 1С настроила дерево групп, я думала, что после обмена они – группы, к-е уже были импортированны на сайт до настройки дерева – возьмут и сами в соответствии с этим деревом перестроятся. Однако начали создаваться новые группы с новыми XML_ID. И это пришлось учесть.

4) Мелкие неприятности на стороне 1С
Трем клиентам внедряли 1С УТ с нуля (+ интегрировали с Битрикс конечно же). Кейсы были идентичными, и делали фактически параллельно. Я сделала одному клиенту, протестила и посадила помощницу все сделать точно так же на 2х других проектах. Начинаю тестировать – на 2х других проектах не работают стандартные отчеты. Вылетает ошибка

Индексируемые поля должны присутствовать в списке выборки
<>Сегменты.Номенклатура

Начинаю внутренне закипать и перебирать в уме все известные мне бранные выражения. Вслух молчу – проверяю. Вроде все одинаково. Разница оказалась в версиях платформы. Там, где все работало ок, версия стояла 8.3.5.1068, а там, где вылетала ошибка – стояла версия платформы 8.3.5.1119, конфигурация стояла одна и та же 1С УТ 11.1.6.26 Проблему решило включение режима совместимости с версией 8.3.4 А при установке дополнения я его обычно совсем выключала - а надо было, видимо, ставить 8.3.4 Хотя на более низких версиях платформы - в частности на 8.3.5.1068 все было ок с отключенным режимом совместимости, а я уже думала, что съем кого-нибудь.

5) Соответствия служб доставок и контрагентов – грузоперевозчиков
Эта задача у нас была неплохо и удобно решена на старом модуле, но к новому модулю старое решение не подходило совсем. На новом модуле я решила задачу с минимальной модификацией модуля обмена заказами, а именно процедуры "СоздатьОбновитьЗаказ".

Дописала там, где шло заполнение свойств заказа, возможно, не очень оптимально.
СпособДоставки = ПолучитьЗначениеРеквизитаДокумента(ДокументXML.ЗначенияРеквизитов, "Способ доставки";);
АдресДоставик= ПолучитьЗначениеРеквизитаДокумента(ДокументXML.ЗначенияРеквизитов, "Адрес доставки";);

//Получаем соответсвия доставок из наших доп настроек:
КлючОбъекта = "Бедросова";
КлючНастроек = "ОбменССайтомБедросова";
//ИмяПользователя = ИмяПользователя();
ИмяПользователя = "SHARE";
СтруктураНастроек = Новый Структура();
Попытка
СтруктураНастроек = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта,КлючНастроек,,ИмяПользователя);
Исключение
Сообщить("Нет прав на чтение доп настроек обмена.";);
КонецПопытки;
Если СтруктураНастроек = Неопределено Тогда
Сообщить("Не вышло прочитать доп настройки обмена!";);
Иначе
НайденнаяСтрока = СтруктураНастроек.СоответствиеСпособовДоставки.Найти(СпособДоставки, "НаСайте";);
Если НЕ НайденнаяСтрока = Неопределено Тогда
Заказ.СпособДоставки = НайденнаяСтрока.НаСервере;
Заказ.ПеревозчикПартнер = НайденнаяСтрока.Контрагент;
КонецЕсли;
КонецЕсли
А дополнительные настройки - оставила во внешней обработке - так же, как описывала раньше.




6) Корректная передача валюты в заказах
Делая одному из клиентов обмен заказами, столкнулась с такой проблемой: Обмен сам-по себе - проходит нормально, но затем заказу, пришедшему с сайта не удается изменить статус - выдавало ошибку

"Значение поля Валюта не может быть пустым"

В типовых соглашениях о продажах, используемом при обмене - валюта была указана RUB.
На сайте, вроде как, была указана такая же валюта в настройках валют.


Но в заказах, пришедших с сайта валюта была не заполнена.
Оказалось, нужно было указать валюту еще и в настройках интеграции на стороне сайта:

к сожалению, не было возможности протестировать это на мультивалютных магазинах.

7) Отбор номенклатуры по свойству товара

У одного из клиентов стояла 1С УТ 10.3.29.1, накатила на нее соответсвующий модуль обмена. При выгрузке номенклатуры из 1С на сайт нужно было сделать, чтобы выгружались только те товары, у которых определенное пользовательское свойство равно определенному значению. Сначала думала, что для этой цели можно использовать настройки отбора.


Оказалось, что нет.
Этот отбор не для отбора товаров, а общий отбор свойств. Т.е. будут выгружены только те свойства, которые в этом отборе(независимо от доп. настроек свойств).

Но в 1С УТ 10.3 в модуле менеджера объекта плана обмена "Б_ОбменССайтом" есть процедура "НастроитьПостроительТоваров". В ней я и подправила пакет запросов, связанный с выборкой товаров для того, чтобы решить свою задачу.

Картинки торговых предложений
Очень интересный случай - оставлю на закуску - напишу в следующий раз, как я по-новому реализовала на новом модуле свой старый кейс для магазинов одежды, где учет ведется по характеристикам – цвету и размеру.
0
Александр
03.03.2016 01:23:48
Интересная история, молодец, что все-таки не побоялась и решилась внедрять новый модуль.
Ответить Ссылка 0
0
Дмитрий
03.03.2016 01:25:03
Я тоже недавно перешел на новый модуль, у него намного более широкий функционал.
Ответить Ссылка 0
0
Анна
03.03.2016 01:26:36
Я так понимаю, что риск себя оправдал?:)
Ответить Ссылка 0
0
Костенко Дмитрий
03.03.2016 01:27:43
Ждем пост по старый кейс на новом модуле;)
Ответить Ссылка 0