617 lines
36 KiB
Plaintext
617 lines
36 KiB
Plaintext
// =============================================================================
|
||
// УТ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.Партнер = ЗначениеКонтрагента;
|
||
Возврат;
|
||
КонецЕсли;
|
||
Исключение
|
||
КонецПопытки;
|
||
|
||
КонецПроцедуры
|