Как дописать обмен с Битрикс не меняя конфигурацию

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

Самая частая задача в доработке обмена с сайтом на Битрикс — дописать логику загрузки Заказов клиентов. Давайте рассмотрим один из наших реальных кейсов.

Постановка задачи

Наш клиент переходил с УТ 10.3 на УТ 11.4. Задача от клиента звучала так:

Обмен с сайтом. Синхронизация по коду клиента
В обмене с сайтом на УТ 10 была синхронизация по коду клиента. Менеджеры переносили руками код справочника Контрагенты при заведении клиента на сайте.
В модуле обмена битрикс в УТ 10 я правил, чтобы если этот код передавали — то искалось по нему.

Надо сделать так же, поскольку иначе начинает создавать новых клиентов, а не подвязывать старых. 
При этом посмотрите, пожалуйста, вполне возможно, что это можно реализовать настройками, без изменения кода обмена как со стороны сайта, так и со стороны 1С. Программисты, которые были до вас, не смогли найти такие настройки, если они есть ))
Здесь может быть нюанс, что при переносе справочника Контрагенты -> Партнеры — мог удлиниться код.

Т.е. с сайта в Заказе клиента приходило поле «Код контрагента», в котором был код партнера из 1С. Но данный код мог содержать «лишние» нули. Более того, мы не знали, сколько лишних нулей в каждом конкретном коде.
Пример:
Код из УТ 10.3: 00002714
Код из УТ 11.4: 00000002714
Код из УТ 10.3: 0002715
Код из УТ 11.4: 00000002715

Что было сделано

Мы внесли изменения в алгоритм поиска Партнера: научили 1С брать код клиента из заказа, удалять из него лидирующие нули. Далее искать по оставшемуся коду партнеров в 1С, затем обходить найденных, и сравнивать код из заказа без лидирующих нулей с кодом партнера без лидирующих нулей. Если совпадают — подставлять Партнера в заказ. Если не совпадают или код партнера пустой — партнер не заполняется. 
Все изменения внесены в режиме «1С:Предприятие», без изменения кода 1С или сайта.

Как дописать обмен с Битрикс не меняя конфигурацию

1. Зйти в настройки обмена документами:

Как дописать обмен с Битрикс не меняя конфигурацию. Открываем настройки

2. Нажать «Настроить реквизиты загружаемых в 1С документов»:

Как дописать обмен с Битрикс не меняя конфигурацию. Настроить реквизиты загружаемых в 1С документов

3. Выделить мышкой заказ клиента и нажать «Настроить соответствия реквизитов»:

Настроить соответствия реквизитов

4. Найти партнера и поставить тип данных «Свой алгоритм»:

Как дописать обмен с Битрикс не меняя конфигурацию. Тип данных - <Свой алгоритм>

5. «Провалиться» в выбор значения:

Выбор значения

6. Написать нужный код. Синтаксис почти не отличается от стандартного кода 1С и описан прямо в выборе значения:

//Параметр на  создаваемый/редактируемый документ происходит через параметр [Документ]
 // Параметр на создаваемую новую строку документа [НоваяСтрока] Если ее нет(шапка заполняется), то Неопределено
 // Глобальные настройки в параметре [ПараметрыОбмена] 
 //
 // Параметр, возвращающий результат [Результат]
 // 
 // Параметр на данные документа  ИЗ XML [ДокументXML]
 // Параметр, на данные строки товаров из XML [СтрокаXML]. Если ее нет, то Неопределено
 //---------------------------------------------------------------------------------------------------------
 //Если в алгоритме необходимо брать данные из заполняемого документа, то нужно понимать, что заполняется документ последовательно, заполняемый реквизит должен быть ниже в списке(на форме), чем тот, на который идет ссылка.
 //
 //Описать структуру параметров [ДокументXML] и [СтрокаXML] очень сложно, т.к. они могут разных данных, в зависимости от настроек. Узнать, что в них - можно через конфигуратор, перехватив через точку останова
 //Выполняется в функции 'ПолучитьЗначениеРеквизитаДокументаПоСоответствию' находящаяся в общем модуле 'Б_ОбменССайтомСерверЗагрузкиДанных' 
 // 
 //---------------------------------------------------------------------------------------------------------
 //ПРОСТЕНЬКИЙ ПРИМЕР. 
 [Результат] = [Документ].Контрагент.Наименование; 

Пример нашего кода

Для каждого стр из [ДокументXML].ЗначенияРеквизитов Цикл
Если стр.Наименование = "Код контрагента" Тогда
Если значениеЗаполнено(стр.Значение) Тогда	
//Убираем лидирующие нули
	Номер = стр.Значение;
	Пока Лев(Номер,1)="0" Цикл
		Номер = Прав(Номер,СтрДлина(Номер)-1);
	КонецЦикла;
	//запросом получаем всех партнеров с похожим кодом
	Запрос = новый запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	Партнеры.Ссылка КАК Ссылка,
	|	Партнеры.Код КАК Код
	|ИЗ
	|	Справочник.Партнеры КАК Партнеры
	|ГДЕ
	|	Партнеры.Код ПОДОБНО &Код";
	Запрос.УстановитьПараметр("Код","%"+Номер);
	Выборка = Запрос.Выполнить().Выбрать();
	Пока выборка.Следующий() Цикл
		//теперь убираем лидирующие нули у полученного кода
		НомерКода = выборка.Код;
		Пока Лев(НомерКода,1)="0" Цикл
			НомерКода = Прав(НомерКода,СтрДлина(НомерКода)-1);
		КонецЦикла;
		//Если оба кода без нулей полностью идентичны, значит это нужный нам партнер
		Если НомерКода = Номер Тогда
			[Результат] = Выборка.Ссылка;
			Прервать;
		КонецЕсли;
	КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;

Заключение

Подобным образом можно писать почти любые алгоритмы. Единственный минус тут — нельзя отладчиком остановиться и проверить, что происходит внутри вашего кода. Но это малая плата за то, чтобы оставить модуль Битрикс типовым.
Надеемся, данная статья была полезна и сэкономит вам кучу времени при обновлении конфигурации и модуля обмена «Битрикс».

Также вы можете заказать у нас настройку и доработку обмена с Битрикс

Прокрутить вверх