Перейти к основному содержимому

Настройка обмена документами с использованием произвольного кода и обработчика выгрузки

Выгрузка документа из 1С на мобильное устройство

Начиная с версии «Склада 15» 1.2.5.x, в форму настроек выгрузки документов была добавлена поддержка произвольного кода — теперь можно реализовать собственные сценарии выгрузки, помимо использования стандартного обработчика.

Первый метод. Выгрузка с помощью произвольного кода

Для этого способа необходимо установить флаг «Выполнить только произвольный код при выгрузке» в основной форме настроек бизнес-процесса.

обработчики документов

Настройка обработчиков возможна только для пользовательских бизнес-процессов. В типовых процессах изменить код нельзя.

Затем в настройке бизнес-процесса выберите опцию «Произвольный код выгрузки», введите нужный код в открывшемся поле и нажмите «Сохранить и закрыть».

Возвращаемая структура должна содержать ключи: «ШапкаДокумента» и «ТабличныеЧасти». В последнем ключе необходимо передать массивы строк по таблицам.

обработчики документов

Пример произвольного кода:

ДанныеШапки.Вставить("ИдСклада", "1");
ДанныеШапки.Вставить("ИдСклада1С", XMLСтрока(СсылкаДокумент1С.Склад));
ДанныеШапки.Вставить("ИмяСклада", СсылкаДокумент1С.Склад.Наименование);
ДанныеШапки.Вставить("ИдКонтрагента", XMLСтрока(СсылкаДокумент1С.Контрагент));
ДанныеШапки.Вставить("ИмяКонтрагента", СсылкаДокумент1С.Контрагент.Наименование);
ДанныеТабличныхЧастей = Новый Структура;
МассивДанныхСтрок = Новый Массив;
Для Каждого СтрокаТЧ Из СсылкаДокумент1С.Товары Цикл
ДанныеДляВыгрузки_Строка = Новый Структура;
ДанныеДляВыгрузки_Строка.Вставить("ИдТовара", XMLСтрока(СтрокаТЧ.Номенклатура));
ДанныеДляВыгрузки_Строка.Вставить("ИдУпаковки", XMLСтрока(СтрокаТЧ.Номенклатура.ЕдиницаИзмерения));
ДанныеДляВыгрузки_Строка.Вставить("ИдЕдиницыИзмерения", XMLСтрока(СтрокаТЧ.Номенклатура.ЕдиницаИзмерения));
ДанныеДляВыгрузки_Строка.Вставить("КоличествоПлан", СтрокаТЧ.КоличествоУпаковок);
МассивДанныхСтрок.Добавить(ДанныеДляВыгрузки_Строка);
КонецЦикла;
ДанныеТабличныхЧастей.Вставить("СтрокиПлан", МассивДанныхСтрок);
ДанныеДокумента.Вставить("ШапкаДокумента", ДанныеШапки);
ДанныеДокумента.Вставить("ТабличныеЧасти",ДанныеТабличныхЧастей);
Результат = ДанныеДокумента;

Такой код вставляется в соответствующее поле настройки бизнес-процесса:

обработчики документов

Значение переменной Результат становится итогом выполнения произвольного кода.

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

обработчики документов

Второй метод. Настройка с помощью обработчика выгрузки

Пользовательский бизнес-процесс также может использовать внешний обработчик выгрузки для отправки данных из 1С.

Откройте настройки бизнес-процесса, включите флаг «Выполнить только произвольный код при выгрузке» и выберите «Обработчик выгрузки».

В открывшемся окне введите имя обработчика, реализованного в модуле интеграционной обработки. Обработчик будет вызван при выгрузке документа.

Для корректной работы необходимо, чтобы модуль интеграции был подключен в конфигураторе 1С.

обработчики документов

Загрузка документа из Mobile SMARTS в 1С

Для пользовательских бизнес-процессов можно задать произвольный код загрузки документа. Это делается с помощью флага «Выполнить только произвольный код при загрузке» в настройках бизнес-процесса.

обработчики документов

Для обработки загрузки требуется экспортная процедура в модуле интеграции. Имя процедуры должно соответствовать значению в поле «Обработчик загрузки документа» в форме настройки бизнес-процесса.

Параметры, передаваемые в процедуру:

  • АдресаПеременных — настройки подключения Mobile SMARTS;
  • ДанныеДокументаMS — структура с данными из Mobile SMARTS;
  • Док1СОснование — ссылка на исходный документ 1С (если есть);
  • ДокументТСД — структура с содержимым документа Mobile SMARTS;
  • СтрокаНастройки — параметры бизнес-процесса;
  • ТекущиеНастройкиMS — текущие параметры подключения Mobile SMARTS.

Пример загрузки документа:

Процедура ПоступлениеТоваровУслуг_Загрузка(СтруктураПараметров) Экспорт
Док1СОснование = СтруктураПараметров.Док1СОснование;
Если Док1СОснование = Неопределено Тогда
Док1СРезультат = Документы[СтруктураПараметров.СтрокаНастройки.ТипРезультирующегоДокумента1С].СоздатьДокумент();
Док1СРезультат.Дата = ТекущаяДата();
Иначе
Док1СРезультат = Док1СОснование.ПолучитьОбъект();
КонецЕсли;
ДокументТСД = СтруктураПараметров.ДокументТСД;
ШапкаДокумента = ДокументТСД.ШапкаДокумента;
СтрокиФакт = ДокументТСД.СтрокиФакт;
Док1СРезультат.Склад = Справочники.Склады.ПолучитьСсылку(Новый УникальныйИдентификатор(ШапкаДокумента.ИдСклада1С));
Док1СРезультат.Контрагент = Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(ШапкаДокумента.ИдКонтрагента));
Для Каждого СтрокаТЧ Из СтрокиФакт Цикл
Если СтрокаТЧ.Свойство("ЭтоТаблицаЗначений") Тогда
Продолжить;
КонецЕсли;
Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаТЧ.ИдТовара));
Упаковка = Справочники.УпаковкиЕдиницыИзмерения.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаТЧ.ИдУпаковки));
Если ЗначениеЗаполнено(Упаковка) И Упаковка.Владелец.ИмяПредопределенныхДанных = "БазовыеЕдиницыИзмерения" Тогда
Упаковка = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка();
КонецЕсли;
СтруктураПоиска = Новый Структура("Номенклатура, Упаковка", Номенклатура, Упаковка);
НайденныеСтроки = Док1СРезультат.Товары.НайтиСтроки(СтруктураПоиска);
Если НайденныеСтроки.Количество() = 0 Тогда
СтрокаДокумента = Док1СРезультат.Товары.Добавить();
СтрокаДокумента.Номенклатура = Номенклатура;
СтрокаДокумента.Упаковка = Упаковка;
Иначе
СтрокаДокумента = НайденныеСтроки[0];
КонецЕсли;
СтрокаДокумента.КоличествоУпаковок = СтрокаДокумента.КоличествоУпаковок + СтрокаТЧ.КоличествоФакт;
СтрокаДокумента.Количество = СтрокаДокумента.КоличествоУпаковок * ?(ЗначениеЗаполнено(СтрокаДокумента.Упаковка), СтрокаДокумента.Упаковка.Коэффициент, 1);
КонецЦикла;
Док1СРезультат.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры