Для пользовательских бизнес-процессов (как их создавать и редактировать, описано в статье) можно использовать произвольный код при загрузке документов в 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СРезультат.Записать(РежимЗаписиДокумента.Запись);КонецПроцедуры