Расширяем функционал обмена заказами между 1С-Битрикс и 1С Предприятие УТ 11

от автора

Обмен заказами между 1С Предприятие 8.3 Управление Торговлей 11.1 (далее по тексту 1С УТ) и интернет-магазином на базе 1С-Битрикс 14.0 (далее по тексту Битрикс) — это часть стандартного «коробочного» механизма обмена между указанными системами. Пользователь формирует заказ на сайте, а затем по расписанию и, начиная с определенного статуса заказа, заказы выгружаются в 1С УТ. Описание данного механизма в его стандартном виде можно найти по ссылкам, указанным в конце данной статьи, статья же о том, как расширить указанный функционал и подогнать его под документооборот конкретного торгового предприятия.

В стандартном варианте данный механизм обмена не полностью автоматизирует работу менеджера на стороне 1С УТ: дело в том, что реквизиты заказа, такие как метод оплаты, способ доставки — передаются на сторону 1С УТ и записываются в доп. сведения о заказе.

Но поля доставки заказа, а так же грузоперевозчик (при доставке грузоперевозчиком), метод оплаты, склад — остаются незаполненными.

И для того, чтобы пустить заказ в дальнейший документооборот, пользователю требуется посмотреть на дополнительные сведения и вручную заполнить в заказе все перечисленные поля (автоматическое заполнение склада — это, конечно спорный вопрос, но, как правило, удобно, чтобы по умолчанию при создании заказа выбирался основной склад).

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

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

Не будем подробно заострять внимание на том, как оформить внешнюю обработку для платформы 1С Предприятие 8.3, потому что это общеизвестная для 1С-программистов вещь. Пройдемся лишь по ключевым моментам. Так как обработка должна отрабатывать как при ручном запуске, так и при выполнении регламентного задания (по расписанию), в основном модуле внешней обработки, в функции СведенияОВнешнейОбработке должны быть прописаны параметры для обоих этих режимов.

Функция СведенияОВнешнейОбработке() Экспорт                  РегистрационныеДанные = Новый Структура;                 РегистрационныеДанные.Вставить("Наименование", "Расширенный обмен заказами с сайтом");                 РегистрационныеДанные.Вставить("БезопасныйРежим", Ложь);                 РегистрационныеДанные.Вставить("Версия", "1.0");                 РегистрационныеДанные.Вставить("Вид", "ДополнительнаяОбработка");                 РегистрационныеДанные.Вставить("Информация", "Обработка для обмена с сайтами, с дополнительными настройками");                              тзКоманд = Новый ТаблицаЗначений;                 тзКоманд.Колонки.Добавить("Идентификатор");                 тзКоманд.Колонки.Добавить("Представление");                 тзКоманд.Колонки.Добавить("Модификатор");                 тзКоманд.Колонки.Добавить("ПоказыватьОповещение");                 тзКоманд.Колонки.Добавить("Использование");                                 строкаКоманды = тзКоманд.Добавить();                 строкаКоманды.Идентификатор = "1";                 строкаКоманды.Представление = "Ввод настроек (ОткрытиеФормы)";                 строкаКоманды.ПоказыватьОповещение = Истина;                 строкаКоманды.Использование = "ОткрытиеФормы"; 		строкаКоманды.Модификатор = ""; 		                 строкаКоманды = тзКоманд.Добавить();                 строкаКоманды.Идентификатор = "2";                 строкаКоманды.Представление = "Запуск обмена (ВызовСерверногоМетода)";                 строкаКоманды.ПоказыватьОповещение = Истина;                 строкаКоманды.Использование = "ВызовСерверногоМетода"; 		строкаКоманды.Модификатор = "";                 РегистрационныеДанные.Вставить("Команды", тзКоманд);                 Возврат РегистрационныеДанные; КонецФункции  

Там же в основном модуле обработки необходимо описать процедуру, которую мы будем вешать на регламентное задание, и которая будет непосредственно запускать обмен:

Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт 	 	ЗагрузитьРеквизиты(); 	ВыполнитьОбмен(ЭтотОбъект.УзелОбмена, НСтр("ru = 'Фоновый обмен'"));	 КонецПроцедуры 

В процедуре выше мы использовали вызов функции ЗагрузитьРеквизиты. В этой фукнции мы выбираем ранее заданные реквизиты дополнительных настроек обмена из хранилища:

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

А для того, чтобы задавать расширенные параметры обмена, добавляем к внешней обработке форму, на которой пользователь сможет выбрать узел обмена заказами (узел обмена заказами, настроенный предворительно согласно стандартному руководству), а так же сопоставить способы доставки на сайте со способами доставки на стороне 1С УТ, а методы оплаты на сайте с методами оплаты на стороне 1С УТ. Следует уточнить, что грузоперевозчик — на стороне 1С УТ — это контрагент, поэтому при сопоставлении метода доставки, осуществляемой какой-либо экспедиционной службой, нужно будет выбрать и контрагента-грузоперевозка. Это позволит в дальнейшем формировать по заказу транспортную накладную, не выбирая контрагента-перевозчика заново каждый раз.

Сохранение дополнительных реквизитов обмена осуществляется процедурой СохранитьРеквизиты из модуля формы (не путать с основным модулем внешней обработки).

Процедура СохранитьРеквизиты() Экспорт 	КлючОбъекта  = "РасширенныйОбмен"; 	КлючНастроек = "ОбменСРасширенныйОбмен "; 	ИмяПользователя = "SHARE"; 	Настройки    = Новый Структура(); 	Хранитель = РеквизитФормыВЗначение("Объект"); 	РеквизитыОбработки = Хранитель.Метаданные().Реквизиты;  	Для каждого Реквизит из РеквизитыОбработки Цикл 		ТипЗначения =  ТипЗнч(Объект[Реквизит.Имя]); 		Если ТипЗначения = Тип("ДанныеФормыКоллекция") Тогда 			Настройки.Вставить(Реквизит.Имя, Объект[Реквизит.Имя].Выгрузить()); 		Иначе					 			Настройки.Вставить(Реквизит.Имя, Объект[Реквизит.Имя]); 		КонецЕсли			 	КонецЦикла; 	ХранилищеОбщихНастроек.Сохранить(КлючОбъекта,  КлючНастроек, Настройки, , ИмяПользователя); КонецПроцедуры 

Параметры будут сохраняться в ХранилищеОбщихНастроек — это очень удобный инструмент платформы 1С Предприятие.

Там же в модуле формы мы описываем процедуру ЗагрузитьРеквизиты() аналогично процедуре ЗагрузитьРеквизиты() из основного модуля внешней обработки.

Еще одна процедура из модуля формы — это процедура ручного запуска обмена.

Процедура Начать()	 	Обработка = РеквизитФормыВЗначение("Объект"); 	Обработка.ВыполнитьОбмен(Обработка.УзелОбмена, НСтр("ru = 'Фоновый обмен'")); КонецПроцедуры 

После того, как данные приготовления сделаны, мы копируем из стандартного модуля обмена с сайтом конфигурации 1С УТ все те процедуры, которые необходимы нам для обмена заказами (можно скопировать и весь текст модуля). Далее уже в нашем модуле внешней обработки расширенного обмена заказами мы видоизменяем процедуры обмена так, чтобы при обмене посредством данной обработки учитывались наши дополнительные настройки, а именно:

В процедуре СоздатьОбновитьДокументы находим место, где заполняется (в цикле) дополнительное сведение заказа:

СвойстваЗаказа.Вставить(Реквизит, Значение);

Дописываем после этой строки:

    Если Реквизит = "Способ доставки" Тогда 				 НайденнаяСтрока =  ЭтотОбъект.СоответствиеСпособовДоставки.Найти(Значение, "НаСайте");  				 Если НЕ НайденнаяСтрока = Неопределено Тогда 			 	    Док.ДокументОбъект.СпособДоставки = НайденнаяСтрока.НаСервере; 					Док.ДокументОбъект.ПеревозчикПартнер = НайденнаяСтрока.Контрагент; 					Попытка 						Для Каждого СтрДерева Из Док.СтруктураДанныхКонтрагента.ДеревоАдресов.Строки Цикл 							Док.ДокументОбъект.АдресДоставки =  СтрДерева.Представление; 						КонецЦикла;  					Исключение 						//Действия при ошибке 					КонецПопытки;  				КонецЕсли;  				  			ИначеЕсли Реквизит = "Метод оплаты" Тогда 				НайденнаяСтрока =  ЭтотОбъект.СоответствиеМетодовОплаты.Найти(Значение, "НаСайте");  				Если НЕ НайденнаяСтрока = Неопределено Тогда 			 	    Док.ДокументОбъект.ФормаОплаты = НайденнаяСтрока.НаСервере; 				КонецЕсли;  			 КонецЕсли; 

В той же процедуре после окончания цикла, в котором записываются доп. сведения вставляем:

Если ЭтотОбъект.ДобавлятьСкладКТоварам Тогда 			Для Каждого Строка из Док.ДокументОбъект.Товары Цикл 				Строка["Склад"] = Док.ДокументОбъект.Склад; 			КонецЦикла; КонецЕсли; 

Это сделано для того, чтобы сразу установить заказу основной склад по умолчанию.

Это все. Остается только зарегистрировать обработку в режиме предприятия (я напомню, что это делается в Администрирование-Настройка параметров системы — Печатные формы отчеты и обработки — Дополнительные отчеты и обработки).

Задать соответствия для методов оплаты.

Задать соответствия для способов доставки:

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

Ссылки:
1. Описание протокола обмена заказами между 1С-Битрикс и 1С Предприятием УТ;
2. Описание настройки стандартного обмена на стороне 1С-Битрикс;
3. Описание настройки стандартного обмена на стороне 1С Предприятия УТ;
4. Описание формата CommerceML 2.

ссылка на оригинал статьи http://habrahabr.ru/post/216219/


Комментарии

Добавить комментарий

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