Для пользовательских бизнес-процессов (как их создавать и редактировать, описано в статье) можно использовать произвольный код при загрузке документов в 1С. Для этого требуется проставить флаг «Выполнить только произвольный код при загрузке» в главном окне настройки бизнес-процесса.
Далее, чтобы использовать произвольный код при загрузке документа, в модуль интеграционной обработки нужно поместить экспортную процедуру, выполняющую программное заполнение документа 1С данными документа Mobile SMARTS. Имя процедуры должно совпадать с именем обработчика, указанным в поле «Обработчик загрузки документа» на форме настройки бизнес-процесса.
В структуру параметров процедуры будут переданы следующие данные:
- АдресаПеременных — структура, содержащая адреса переменных с текущими настройками подключения 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СРезультат.Записать(РежимЗаписиДокумента.Запись); КонецПроцедуры