TSDZakazScladVasilek/CommonTemplates/КодGetDocПоступлениеУТ11/Ext/Template.txt

617 lines
36 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// =============================================================================
// УТ11: getDoc — заказ + поступление (вместо реализации)
//
// Вставьте/замените соответствующие функции в модуле веб-сервиса tsdsync.
// Хелперы ДанныеНоменклатурыXDTO и ЗаполнитьМаркиXDTO — без изменений.
//
// type: "ЗаказКлиента" | "ПоступлениеТоваровУслуг" | "ПоступлениеТоваровИУслуг"
// | "ПриобретениеТоваровУслуг" | "" (авто: сначала заказ, потом поступление)
//
// В метаданных УТ11 документ может быть:
// ПоступлениеТоваровУслуг или ПриобретениеТоваровУслуг
// В XDTO/ED — всегда Документ.ПоступлениеТоваровУслуг
// =============================================================================
Функция GetDoc(barcode, type) Экспорт
Ссылки = НайтиДокументыПоШтрихкодуИлиНомеру(barcode, type);
Фабрика = ФабрикаXDTO; // фабрика пакета веб-сервиса / общая
Если Ссылки.Количество() = 0 Тогда
Возврат ПустойОтветGetDoc(Фабрика, type);
КонецЕсли;
Ссылка = Ссылки[0];
Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
Возврат СформироватьXDTOЗаказКлиента(Фабрика, Ссылка);
ИначеЕсли ЭтоСсылкаПоступленияУТ11(Ссылка) Тогда
Возврат СформироватьXDTOПоступлениеТоваровУслуг(Фабрика, Ссылка);
КонецЕсли;
Возврат ПустойОтветGetDoc(Фабрика, type);
КонецФункции
// Получаем документ с ТСД и записываем в базу
Функция setDoc(doc) Экспорт
Возврат ЗагрузитьДокументИзТСД(doc);
КонецФункции
Функция ЭтоСсылкаПоступленияУТ11(Ссылка)
Если Метаданные.Документы.Найти("ПоступлениеТоваровУслуг") <> Неопределено Тогда
Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Если Метаданные.Документы.Найти("ПриобретениеТоваровУслуг") <> Неопределено Тогда
Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.ПриобретениеТоваровУслуг") Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Возврат Ложь;
КонецФункции
Функция ИмяДокументаПоступленияУТ11()
Если Метаданные.Документы.Найти("ПоступлениеТоваровУслуг") <> Неопределено Тогда
Возврат "ПоступлениеТоваровУслуг";
КонецЕсли;
Если Метаданные.Документы.Найти("ПриобретениеТоваровУслуг") <> Неопределено Тогда
Возврат "ПриобретениеТоваровУслуг";
КонецЕсли;
Возврат "ПоступлениеТоваровУслуг";
КонецФункции
Функция МенеджерДокументаПоступленияУТ11()
Если ИмяДокументаПоступленияУТ11() = "ПриобретениеТоваровУслуг" Тогда
Возврат Документы.ПриобретениеТоваровУслуг;
КонецЕсли;
Возврат Документы.ПоступлениеТоваровУслуг;
КонецФункции
Функция ТипСсылкиПоступленияУТ11()
Если ИмяДокументаПоступленияУТ11() = "ПриобретениеТоваровУслуг" Тогда
Возврат Тип("ДокументСсылка.ПриобретениеТоваровУслуг");
КонецЕсли;
Возврат Тип("ДокументСсылка.ПоступлениеТоваровУслуг");
КонецФункции
Функция ЭтоТипПоступленияGetDoc(ТипДокумента)
Т = ВРег(СокрЛП(Строка(ТипДокумента)));
Возврат Т = ВРег("ПоступлениеТоваровУслуг")
Или Т = ВРег("ПоступлениеТоваровИУслуг")
Или Т = ВРег("ПриобретениеТоваровУслуг")
Или Т = ВРег("ПриобретениеТоваровИУслуг");
КонецФункции
Функция НайтиДокументыПоШтрихкодуИлиНомеру(barcode, ТипДокумента)
Ссылки = Новый Массив;
Код = СокрЛП(Строка(barcode));
Если Не ЗначениеЗаполнено(Код) Тогда
Возврат Ссылки;
КонецЕсли;
ИскатьЗаказ = (ТипДокумента = "" Или ТипДокумента = "ЗаказКлиента");
ИскатьПоступление = (ТипДокумента = "" Или ЭтоТипПоступленияGetDoc(ТипДокумента));
ИмяДокПоступления = ИмяДокументаПоступленияУТ11();
Менеджеры = Новый Массив;
Если ИскатьЗаказ Тогда
Менеджеры.Добавить(Документы.ЗаказКлиента);
КонецЕсли;
Если ИскатьПоступление Тогда
Менеджеры.Добавить(МенеджерДокументаПоступленияУТ11());
КонецЕсли;
// Типовую ПолучитьСсылкуПоШтрихкодуТабличногоДокумента не вызываем:
// в этой базе она падает на Задачи.ТипВсеСсылки(ТипСсылки).
ДобавитьДокументыУТ11ПоШтрихкодуПечатнойФормы(Ссылки, Код, Менеджеры);
Если Ссылки.Количество() > 0 Тогда
Возврат Ссылки;
КонецЕсли;
Если ИскатьЗаказ Тогда
ДобавитьДокументУТ11ПоНомеру(Ссылки, "ЗаказКлиента", Код);
КонецЕсли;
Если Ссылки.Количество() = 0 И ИскатьПоступление Тогда
ДобавитьДокументУТ11ПоНомеру(Ссылки, ИмяДокПоступления, Код);
КонецЕсли;
Возврат Ссылки;
КонецФункции
Процедура ДобавитьДокументыУТ11ПоШтрихкодуПечатнойФормы(Ссылки, Код, Менеджеры)
УИД = Неопределено;
Если СтрДлина(Код) = 36 И СтрНайти(Код, "-") = 9 Тогда
Попытка
УИД = Новый УникальныйИдентификатор(Код);
Исключение
УИД = Неопределено;
КонецПопытки;
Иначе
УИД = УникальныйИдентификаторИзЧисловогоШтрихкода(Код);
КонецЕсли;
Если УИД = Неопределено Тогда
Возврат;
КонецЕсли;
Для Каждого МенеджерДокумента Из Менеджеры Цикл
Попытка
Ссылка = МенеджерДокумента.ПолучитьСсылку(УИД);
Если Ссылка.ПолучитьОбъект() <> Неопределено Тогда
Ссылки.Добавить(Ссылка);
КонецЕсли;
Исключение
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Функция УникальныйИдентификаторИзЧисловогоШтрихкода(Код)
Если СтрДлина(Код) < 13 Или СтрДлина(Код) > 32 Тогда
Возврат Неопределено;
КонецЕсли;
Для Номер = 1 По СтрДлина(Код) Цикл
КодСимволаЗначения = КодСимвола(Сред(Код, Номер, 1));
Если КодСимволаЗначения < 48 Или КодСимволаЗначения > 57 Тогда
Возврат Неопределено;
КонецЕсли;
КонецЦикла;
Попытка
ЧислоШтрихкода = Число(Код);
Исключение
Возврат Неопределено;
КонецПопытки;
Если ЧислоШтрихкода = 0 Тогда
Возврат Неопределено;
КонецЕсли;
Hex = "";
Алфавит = "0123456789abcdef";
ОстатокЧисла = ЧислоШтрихкода;
Пока ОстатокЧисла > 0 Цикл
Остаток = ОстатокЧисла % 16;
ОстатокЧисла = (ОстатокЧисла - Остаток) / 16;
Hex = Сред(Алфавит, Остаток + 1, 1) + Hex;
КонецЦикла;
Пока СтрДлина(Hex) < 32 Цикл
Hex = "0" + Hex;
КонецЦикла;
Если СтрДлина(Hex) > 32 Тогда
Hex = Прав(Hex, 32);
КонецЕсли;
СтрокаУИД = Сред(Hex, 1, 8) + "-" + Сред(Hex, 9, 4) + "-" + Сред(Hex, 13, 4)
+ "-" + Сред(Hex, 17, 4) + "-" + Сред(Hex, 21, 12);
Попытка
Возврат Новый УникальныйИдентификатор(СтрокаУИД);
Исключение
Возврат Неопределено;
КонецПопытки;
КонецФункции
Процедура ДобавитьДокументУТ11ПоНомеру(Ссылки, ИмяДокумента, Номер)
Если Не ЗначениеЗаполнено(ИмяДокумента) Или Не ЗначениеЗаполнено(Номер) Тогда
Возврат;
КонецЕсли;
Если Метаданные.Документы.Найти(ИмяДокумента) = Неопределено Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Док.Ссылка КАК Ссылка
|ИЗ
| Документ." + ИмяДокумента + " КАК Док
|ГДЕ
| Док.Номер = &НомерТочный
|
|УПОРЯДОЧИТЬ ПО
| Док.Дата УБЫВ";
Запрос.УстановитьПараметр("НомерТочный", Номер);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Ссылки.Добавить(Выборка.Ссылка);
Возврат;
КонецЕсли;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Док.Ссылка КАК Ссылка
|ИЗ
| Документ." + ИмяДокумента + " КАК Док
|ГДЕ
| Док.Номер ПОДОБНО &НомерКонец
|
|УПОРЯДОЧИТЬ ПО
| Док.Дата УБЫВ";
Запрос.УстановитьПараметр("НомерКонец", "%" + Номер);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Ссылки.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецПроцедуры
Функция СформироватьXDTOЗаказКлиента(Фабрика, Ссылка)
ЗаявкаXDTO = Фабрика.Создать(Фабрика.Тип("https://vasvas.itinalog.ru/ed19", "Документ.ЗаказКлиента"));
КлючевыеСвойства = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваЗаказКлиента"));
КлючевыеСвойстваКонтрагент = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваКонтрагент"));
Товары = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Документ.ЗаказКлиента.Товары"));
Марки = Фабрика.Создать(Фабрика.Тип("https://vasvas.itinalog.ru/ed19", "Документ.ЗаказКлиента.Марки"));
КлючевыеСвойства.Ссылка = Строка(Ссылка.УникальныйИдентификатор());
КлючевыеСвойства.Номер = Ссылка.Номер;
КлючевыеСвойства.Дата = Ссылка.Дата;
КлючевыеСвойстваКонтрагент.Ссылка = Строка(Ссылка.Партнер.УникальныйИдентификатор());
КлючевыеСвойстваКонтрагент.Наименование = Ссылка.Партнер.Наименование;
Для Каждого Товар Из Ссылка.Товары Цикл
СтрокаТовара = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "Документ.ЗаказКлиента.Товары.Строка"));
СтрокаТовара.НомерСтрокиДокумента = Товар.НомерСтроки;
СтрокаТовара.ДанныеНоменклатуры = ДанныеНоменклатурыXDTO(Фабрика, Товар.Номенклатура, Товар.Упаковка);
СтрокаТовара.Количество = Товар.Количество;
Товары.Строка.Добавить(СтрокаТовара);
КонецЦикла;
ЗаполнитьМаркиXDTO(Фабрика, Марки, Ссылка);
ЗаявкаXDTO.КлючевыеСвойства = КлючевыеСвойства;
УстановитьКонтрагентаИлиПартнераXDTO(ЗаявкаXDTO, КлючевыеСвойстваКонтрагент);
ЗаявкаXDTO.Товары = Товары;
ЗаявкаXDTO.Марки = Марки;
Возврат ЗаявкаXDTO;
КонецФункции
// Было: СформироватьXDTOРеализацияТоваровУслуг
// Стало: выгрузка поступления (Поступление / Приобретение) в ED-тип ПоступлениеТоваровУслуг
//
Функция СформироватьXDTOПоступлениеТоваровУслуг(Фабрика, Ссылка)
URI_ED = "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19";
ЗаявкаXDTO = Фабрика.Создать(Фабрика.Тип(URI_ED, "Документ.ПоступлениеТоваровУслуг"));
// Имя ключевых свойств в ED может отличаться — пробуем специализированное, иначе общее
Попытка
КлючевыеСвойства = Фабрика.Создать(Фабрика.Тип(URI_ED, "КлючевыеСвойстваПоступлениеТоваровУслуг"));
Исключение
КлючевыеСвойства = Фабрика.Создать(Фабрика.Тип(URI_ED, "КлючевыеСвойстваДокумент"));
КонецПопытки;
КлючевыеСвойстваКонтрагент = Фабрика.Создать(Фабрика.Тип(URI_ED, "КлючевыеСвойстваКонтрагент"));
Товары = Фабрика.Создать(Фабрика.Тип(URI_ED, "Документ.ПоступлениеТоваровУслуг.Товары"));
КлючевыеСвойства.Ссылка = Строка(Ссылка.УникальныйИдентификатор());
КлючевыеСвойства.Номер = Ссылка.Номер;
КлючевыеСвойства.Дата = Ссылка.Дата;
ПартнерСсылка = Неопределено;
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Ссылка, "Партнер")
И ЗначениеЗаполнено(Ссылка.Партнер) Тогда
ПартнерСсылка = Ссылка.Партнер;
ИначеЕсли ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Ссылка, "Контрагент")
И ЗначениеЗаполнено(Ссылка.Контрагент) Тогда
ПартнерСсылка = Ссылка.Контрагент;
КонецЕсли;
Если ЗначениеЗаполнено(ПартнерСсылка) Тогда
КлючевыеСвойстваКонтрагент.Ссылка = Строка(ПартнерСсылка.УникальныйИдентификатор());
КлючевыеСвойстваКонтрагент.Наименование = Строка(ПартнерСсылка);
КонецЕсли;
Для Каждого Товар Из Ссылка.Товары Цикл
СтрокаТовара = Фабрика.Создать(
Фабрика.Тип(URI_ED, "Документ.ПоступлениеТоваровУслуг.Товары.Строка"));
СтрокаТовара.НомерСтрокиДокумента = Товар.НомерСтроки;
УпаковкаСтроки = Неопределено;
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Товар, "Упаковка") Тогда
УпаковкаСтроки = Товар.Упаковка;
КонецЕсли;
СтрокаТовара.ДанныеНоменклатуры = ДанныеНоменклатурыXDTO(Фабрика, Товар.Номенклатура, УпаковкаСтроки);
СтрокаТовара.Количество = Товар.Количество;
Товары.Строка.Добавить(СтрокаТовара);
КонецЦикла;
ЗаявкаXDTO.КлючевыеСвойства = КлючевыеСвойства;
УстановитьКонтрагентаИлиПартнераXDTO(ЗаявкаXDTO, КлючевыеСвойстваКонтрагент);
ЗаявкаXDTO.Товары = Товары;
Возврат ЗаявкаXDTO;
КонецФункции
Функция ДанныеНоменклатурыXDTO(Фабрика, Номенклатура, Упаковка)
ДанныеНоменклатуры = Фабрика.Создать(Фабрика.Тип("https://vasvas.itinalog.ru/ed19", "ОбщиеСвойстваДанныеНоменклатуры"));
ДанныеНоменклатуры.Номенклатура = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваНоменклатура"));
ДанныеНоменклатуры.Номенклатура.Ссылка = Строка(Номенклатура.УникальныйИдентификатор());
ДанныеНоменклатуры.Номенклатура.Наименование = Номенклатура.Наименование;
ДанныеНоменклатуры.Код = Номенклатура.Код;
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Номенклатура, "Вупаковке") Тогда
ДанныеНоменклатуры.Вупаковке = Номенклатура.Вупаковке;
КонецЕсли;
Если Номенклатура.ВидНоменклатуры.ИспользоватьСерии Тогда
ДанныеНоменклатуры.SKU = 1;
Иначе
ДанныеНоменклатуры.SKU = 0;
КонецЕсли;
Упаковки = Фабрика.Создать(Фабрика.Тип("https://vasvas.itinalog.ru/ed19", "ОбщиеСвойстваДанныеНоменклатуры.Упаковки"));
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод,
| ШтрихкодыНоменклатуры.Упаковка.Числитель КАК УпаковкаЧислитель
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|ГДЕ
| ШтрихкодыНоменклатуры.Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
ШтрихКодБазовойЕдиницы = "";
МинЧислитель = 999999;
ВыборкаУпаковок = Запрос.Выполнить().Выбрать();
Пока ВыборкаУпаковок.Следующий() Цикл
КоличествоУпаковки = ВыборкаУпаковок.УпаковкаЧислитель;
Если КоличествоУпаковки <= 0 Тогда
КоличествоУпаковки = 1;
КонецЕсли;
УпаковкаСтрока = Фабрика.Создать(Фабрика.Тип("https://vasvas.itinalog.ru/ed19", "ОбщиеСвойстваДанныеНоменклатуры.Упаковки.Строка"));
УпаковкаСтрока.ШтрихКод = ВыборкаУпаковок.Штрихкод;
УпаковкаСтрока.Количество = КоличествоУпаковки;
Упаковки.Строка.Добавить(УпаковкаСтрока);
Если ВыборкаУпаковок.УпаковкаЧислитель < МинЧислитель Тогда
МинЧислитель = ВыборкаУпаковок.УпаковкаЧислитель;
ШтрихКодБазовойЕдиницы = ВыборкаУпаковок.Штрихкод;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(Номенклатура.GTIN) Тогда
ДанныеНоменклатуры.ШтрихКод = Номенклатура.GTIN;
ИначеЕсли ЗначениеЗаполнено(ШтрихКодБазовойЕдиницы) Тогда
ДанныеНоменклатуры.ШтрихКод = ШтрихКодБазовойЕдиницы;
Иначе
ДанныеНоменклатуры.ШтрихКод = "не установлен";
КонецЕсли;
УстановитьТоварнуюКатегориюВXDTO(ДанныеНоменклатуры, ПолучитьТоварнуюКатегориюНоменклатуры(Номенклатура));
ДанныеНоменклатуры.Упаковка = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваУпаковка"));
Если ЗначениеЗаполнено(Упаковка) Тогда
ДанныеНоменклатуры.Упаковка.Ссылка = Строка(Упаковка.УникальныйИдентификатор());
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Упаковка, "Числитель") Тогда
ДанныеНоменклатуры.Упаковка.Коэффициент = Упаковка.Числитель;
КонецЕсли;
КонецЕсли;
ДанныеНоменклатуры.Упаковка.ЕдиницаИзмерения = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваЕдиницаИзмерения"));
ДанныеНоменклатуры.Упаковка.ЕдиницаИзмерения.Ссылка = Строка(Номенклатура.ЕдиницаИзмерения.УникальныйИдентификатор());
ДанныеНоменклатуры.Упаковка.ЕдиницаИзмерения.ДанныеКлассификатора = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "ОбщиеСвойстваДанныеКлассификатора"));
ДанныеНоменклатуры.Упаковка.ЕдиницаИзмерения.ДанныеКлассификатора.Код = Номенклатура.ЕдиницаИзмерения.Код;
ДанныеНоменклатуры.Упаковка.ЕдиницаИзмерения.ДанныеКлассификатора.Наименование = Номенклатура.ЕдиницаИзмерения.Наименование;
ДанныеНоменклатуры.Упаковки = Упаковки;
Возврат ДанныеНоменклатуры;
КонецФункции
Процедура ЗаполнитьМаркиXDTO(Фабрика, Марки, Ссылка)
Если Ссылка.Метаданные().ТабличныеЧасти.Найти("КодыМаркировки") = Неопределено Тогда
Возврат;
КонецЕсли;
Для Каждого Марка Из Ссылка.КодыМаркировки Цикл
СтрокаМарки = Фабрика.Создать(Фабрика.Тип("https://vasvas.itinalog.ru/ed19", "Документ.ЗаказКлиента.Марки.Строка"));
СтрокаМарки.НомерСтрокиДокумента = Марка.Строка;
СтрокаМарки.Код = Марка.Код;
ДанныеНоменклатуры = Фабрика.Создать(Фабрика.Тип("https://vasvas.itinalog.ru/ed19", "ОбщиеСвойстваДанныеНоменклатуры"));
ДанныеНоменклатуры.Номенклатура = Фабрика.Создать(Фабрика.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19", "КлючевыеСвойстваНоменклатура"));
ДанныеНоменклатуры.Номенклатура.Ссылка = Строка(Марка.Номенклатура.УникальныйИдентификатор());
ДанныеНоменклатуры.Номенклатура.Наименование = Марка.Номенклатура.Наименование;
ДанныеНоменклатуры.Код = Марка.Номенклатура.Код;
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Марка.Номенклатура, "Вупаковке") Тогда
ДанныеНоменклатуры.Вупаковке = Марка.Номенклатура.Вупаковке;
КонецЕсли;
Упаковки = Фабрика.Создать(Фабрика.Тип("https://vasvas.itinalog.ru/ed19", "ОбщиеСвойстваДанныеНоменклатуры.Упаковки"));
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод,
| ШтрихкодыНоменклатуры.Упаковка.Числитель КАК УпаковкаЧислитель
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|ГДЕ
| ШтрихкодыНоменклатуры.Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", Марка.Номенклатура);
ШтрихКодБазовойЕдиницы = "";
МинЧислитель = 999999;
ВыборкаУпаковок = Запрос.Выполнить().Выбрать();
Пока ВыборкаУпаковок.Следующий() Цикл
КоличествоУпаковки = ВыборкаУпаковок.УпаковкаЧислитель;
Если КоличествоУпаковки <= 0 Тогда
КоличествоУпаковки = 1;
КонецЕсли;
УпаковкаСтрока = Фабрика.Создать(Фабрика.Тип("https://vasvas.itinalog.ru/ed19", "ОбщиеСвойстваДанныеНоменклатуры.Упаковки.Строка"));
УпаковкаСтрока.ШтрихКод = ВыборкаУпаковок.Штрихкод;
УпаковкаСтрока.Количество = КоличествоУпаковки;
Упаковки.Строка.Добавить(УпаковкаСтрока);
Если ВыборкаУпаковок.УпаковкаЧислитель < МинЧислитель Тогда
МинЧислитель = ВыборкаУпаковок.УпаковкаЧислитель;
ШтрихКодБазовойЕдиницы = ВыборкаУпаковок.Штрихкод;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(Марка.Номенклатура.GTIN) Тогда
ДанныеНоменклатуры.ШтрихКод = Марка.Номенклатура.GTIN;
ИначеЕсли ЗначениеЗаполнено(ШтрихКодБазовойЕдиницы) Тогда
ДанныеНоменклатуры.ШтрихКод = ШтрихКодБазовойЕдиницы;
Иначе
ДанныеНоменклатуры.ШтрихКод = "не установлен";
КонецЕсли;
УстановитьТоварнуюКатегориюВXDTO(ДанныеНоменклатуры, ПолучитьТоварнуюКатегориюНоменклатуры(Марка.Номенклатура));
ДанныеНоменклатуры.Упаковки = Упаковки;
СтрокаМарки.ДанныеНоменклатуры = ДанныеНоменклатуры;
Марки.Строка.Добавить(СтрокаМарки);
КонецЦикла;
КонецПроцедуры
Функция ПолучитьТоварнуюКатегориюНоменклатуры(Номенклатура)
Если Номенклатура = Неопределено Тогда
Возврат "";
КонецЕсли;
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Номенклатура, "ТоварнаяКатегория") Тогда
Категория = Номенклатура.ТоварнаяКатегория;
Если ЗначениеЗаполнено(Категория) Тогда
Попытка
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Категория, "Наименование") Тогда
Возврат СокрЛП(Строка(Категория.Наименование));
КонецЕсли;
Исключение
КонецПопытки;
Возврат СокрЛП(Строка(Категория));
КонецЕсли;
КонецЕсли;
Возврат "";
КонецФункции
Процедура УстановитьТоварнуюКатегориюВXDTO(ДанныеНоменклатуры, Категория)
Если ДанныеНоменклатуры = Неопределено Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ДанныеНоменклатуры, "ТоварнаяКатегория") Тогда
ДанныеНоменклатуры.ТоварнаяКатегория = Категория;
КонецЕсли;
КонецПроцедуры
Функция ПустойОтветGetDoc(Фабрика, ТипДокумента)
ЭтоПоступление = ЭтоТипПоступленияGetDoc(ТипДокумента);
URI_ED = "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19";
URI_TSD = "https://vasvas.itinalog.ru/ed19";
Если ЭтоПоступление Тогда
ЗаявкаXDTO = Фабрика.Создать(Фабрика.Тип(URI_ED, "Документ.ПоступлениеТоваровУслуг"));
Попытка
КлючевыеСвойства = Фабрика.Создать(Фабрика.Тип(URI_ED, "КлючевыеСвойстваПоступлениеТоваровУслуг"));
Исключение
КлючевыеСвойства = Фабрика.Создать(Фабрика.Тип(URI_ED, "КлючевыеСвойстваДокумент"));
КонецПопытки;
КлючевыеСвойства.Ссылка = Строка(
МенеджерДокументаПоступленияУТ11().ПустаяСсылка().УникальныйИдентификатор());
ПустыеТоварыИмя = "Документ.ПоступлениеТоваровУслуг.Товары";
URI_Товары = URI_ED;
Иначе
ЗаявкаXDTO = Фабрика.Создать(Фабрика.Тип(URI_TSD, "Документ.ЗаказКлиента"));
КлючевыеСвойства = Фабрика.Создать(Фабрика.Тип(URI_ED, "КлючевыеСвойстваЗаказКлиента"));
КлючевыеСвойства.Ссылка = Строка(Документы.ЗаказКлиента.ПустаяСсылка().УникальныйИдентификатор());
ПустыеТоварыИмя = "Документ.ЗаказКлиента.Товары";
URI_Товары = URI_ED;
КонецЕсли;
ЗаявкаXDTO.КлючевыеСвойства = КлючевыеСвойства;
УстановитьКонтрагентаИлиПартнераXDTO(ЗаявкаXDTO, Фабрика.Создать(Фабрика.Тип(URI_ED, "КлючевыеСвойстваКонтрагент")));
ЗаявкаXDTO.Товары = Фабрика.Создать(Фабрика.Тип(URI_Товары, ПустыеТоварыИмя));
Если Не ЭтоПоступление Тогда
ЗаявкаXDTO.Марки = Фабрика.Создать(Фабрика.Тип(URI_TSD, "Документ.ЗаказКлиента.Марки"));
КонецЕсли;
Возврат ЗаявкаXDTO;
КонецФункции
// В ED у Документ.ПоступлениеТоваровУслуг может не быть свойства Контрагент —
// тогда пишем в Партнер. Если нет ни того, ни другого — ничего не ставим.
//
Процедура УстановитьКонтрагентаИлиПартнераXDTO(ДокXDTO, ЗначениеКонтрагента)
Если ДокXDTO = Неопределено Или ЗначениеКонтрагента = Неопределено Тогда
Возврат;
КонецЕсли;
Попытка
Если ДокXDTO.Свойства().Получить("Контрагент") <> Неопределено Тогда
ДокXDTO.Контрагент = ЗначениеКонтрагента;
Возврат;
КонецЕсли;
Исключение
КонецПопытки;
Попытка
Если ДокXDTO.Свойства().Получить("Партнер") <> Неопределено Тогда
ДокXDTO.Партнер = ЗначениеКонтрагента;
Возврат;
КонецЕсли;
Исключение
КонецПопытки;
КонецПроцедуры