Использование произвольного кода для загрузки документов в 1С

Последние изменения: 20.03.2020

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