Перейти к основному содержимому
Версия: v1.6

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

Настройка выгрузки документа из 1С на ТСД

Начиная с версии «Склада 15» 1.2.5.х была доработана форма настроек выгрузки документов и добавлена возможность использовать произвольные коды при написании собственных обработчиков (до этого можно было применять только стандартный обработчик выгрузки).

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

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

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

Изменение настроек обработчиков документа возможно только для пользовательского бизнес-процесса и невозможно для типового бизнес-процесса.

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

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

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

Пример кода:

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

Так будет выглядеть текст произвольного поля в окне настройки бизнес-процесса.

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

Результат выполнения произвольного кода заносится в переменную с названием «Результат».

Если работа завершена некорректно, то появится системное сообщение о неверном статусе операции (ошибка). Проверьте пошагово, убедитесь, что код написан правильно.

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

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

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

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

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

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

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

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

Настройка загрузки документов в 1С с ТСД

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