#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Заказ.Организация, ПустаяСсылка КАК Истина)
| и ЗначениеРазрешено(Заказ.Партнер, ПустаяСсылка КАК Истина)";
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании, ФункциональныеОпции = "") Экспорт
Если ПравоДоступа("Изменение", Метаданные.РегистрыСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.ОбщиеМодули.ИнтеграцияСМаркетплейсамиКлиент.ПолноеИмя();
КомандаСоздатьНаОсновании.Обработчик = "ЗаполнитьИРаспределитьВызов";
КомандаСоздатьНаОсновании.Представление = НСтр("ru = 'Заполнение сведений по товарам и распределение по отправлениям'");
КомандаСоздатьНаОсновании.МножественныйВыбор = Ложь;
КомандаСоздатьНаОсновании.ФункциональныеОпции = ФункциональныеОпцииТорговыхПлощадок()
+ ?(ПустаяСтрока(ФункциональныеОпции), "", "," + ФункциональныеОпции);
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция ТекстЗапросаДинамическогоСписка(УчетнаяЗапись) Экспорт
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СведенияПоТоварам.Заказ КАК Заказ,
| СведенияПоТоварам.НомерОтправления КАК НомерОтправления,
| ВЫБОР
| КОГДА ЕСТЬNULL(ЗаказКлиентаТовары.Отменено, ИСТИНА)
| ТОГДА НЕОПРЕДЕЛЕНО
| ИНАЧЕ СведенияПоТоварам.ДокументОтгрузки
| КОНЕЦ КАК ДокументОтгрузки,
| ЕСТЬNULL(ЗаказыИОтправления.Статус, ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовТорговыхПлощадок.ОжидаетСборки)) КАК Статус,
| ЕСТЬNULL(ЗаказыИОтправления.НомерОтправления, """") КАК НомерОтправленияДокументаОтгрузки,
| СведенияПоТоварам.ДокументОтгрузки <> НЕОПРЕДЕЛЕНО
| И СведенияПоТоварам.ДокументОтгрузки <> ЗНАЧЕНИЕ(Документ.ПередачаТоваровХранителю.ПустаяСсылка)
| И СведенияПоТоварам.ДокументОтгрузки <> ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)
| И (СведенияПоТоварам.НомерОтправления <> ЕСТЬNULL(ЗаказыИОтправления.НомерОтправления, """")
| ИЛИ ЕСТЬNULL(ЗаказКлиентаТовары.Отменено, ИСТИНА)
| ИЛИ СведенияПоТоварам.ИдентификаторСтроки = """"
| ИЛИ СведенияПоТоварам.НомерОтправления В (&ОтправленияИзмененные)) КАК ПереоформитьДокументОтгрузки,
| СведенияПоТоварам.ИдентификаторТовара КАК ИдентификаторТовара,
| СведенияПоТоварам.ИдентификаторЭкземпляра КАК ИдентификаторЭкземпляра,
| СведенияПоТоварам.Количество КАК Количество,
| СведенияПоТоварам.ТребуетсяСтранаПроисхождения КАК ТребуетсяСтранаПроисхождения,
| СведенияПоТоварам.ТребуетсяНомерГТД
| ИЛИ СведенияПоТоварам.ТребуетсяРНПТ КАК ТребуетсяГТД_РНПТ,
| СведенияПоТоварам.ТребуетсяНомерГТД КАК ТребуетсяНомерГТД,
| СведенияПоТоварам.ТребуетсяРНПТ КАК ТребуетсяРНПТ,
| СведенияПоТоварам.ТребуетсяМаркировка КАК ТребуетсяМаркировка,
| СведенияПоТоварам.ТребуетсяУИН КАК ТребуетсяУИН,
| СведенияПоТоварам.НомерГТД КАК НомерГТД,
| СведенияПоТоварам.ШтрихкодУпаковки КАК ШтрихкодУпаковки,
| СведенияПоТоварам.ПолныйКодМаркировки КАК ПолныйКодМаркировки,
| ВЫБОР
| КОГДА ЕСТЬNULL(ЗаказКлиентаТовары.Отменено, ИСТИНА)
| ТОГДА 0
| КОГДА СведенияПоТоварам.ТребуетсяМаркировка
| И СведенияПоТоварам.ШтрихкодУпаковки = ЗНАЧЕНИЕ(Справочник.ШтрихкодыУпаковокТоваров.ПустаяСсылка)
| И СведенияПоТоварам.ПолныйКодМаркировки = """"
| ТОГДА 2
| КОГДА СведенияПоТоварам.ТребуетсяМаркировка
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК КартинкаМаркировки,
| СведенияПоТоварам.УИН КАК УИН,
| ВЫБОР
| КОГДА СведенияПоТоварам.СтранаПроисхождения = ЗНАЧЕНИЕ(Справочник.СтраныМира.ПустаяСсылка)
| ТОГДА СправНоменклатура.СтранаПроисхождения
| ИНАЧЕ СведенияПоТоварам.СтранаПроисхождения
| КОНЕЦ КАК СтранаПроисхождения,
| ВЫБОР
| КОГДА ЕСТЬNULL(ЗаказКлиентаТовары.Отменено, ИСТИНА)
| ТОГДА ЛОЖЬ
| КОГДА СведенияПоТоварам.ДокументОтгрузки = НЕОПРЕДЕЛЕНО
| ИЛИ ЗаказыИОтправления.ДокументОтгрузки ЕСТЬ НЕ NULL
| И СведенияПоТоварам.НомерОтправления <> ЕСТЬNULL(ЗаказыИОтправления.НомерОтправления, """")
| ИЛИ ЕСТЬNULL(ЗаказКлиентаТовары.ВариантОбеспечения, ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)
| ИЛИ СведенияПоТоварам.НомерОтправления В (&ОтправленияИзмененные)
| ИЛИ СведенияПоТоварам.ДокументОтгрузки <> НЕОПРЕДЕЛЕНО
| И СведенияПоТоварам.ИдентификаторСтроки = """"
| ИЛИ (ВЫРАЗИТЬ(СведенияПоТоварам.ОписаниеОшибки КАК СТРОКА(1000))) <> """"
| ИЛИ СведенияПоТоварам.ТребуетсяСтранаПроисхождения
| И ВЫБОР
| КОГДА СведенияПоТоварам.СтранаПроисхождения = ЗНАЧЕНИЕ(Справочник.СтраныМира.ПустаяСсылка)
| ТОГДА СправНоменклатура.СтранаПроисхождения
| ИНАЧЕ СведенияПоТоварам.СтранаПроисхождения
| КОНЕЦ = ЗНАЧЕНИЕ(Справочник.СтраныМира.ПустаяСсылка)
| ИЛИ СведенияПоТоварам.ТребуетсяМаркировка
| И СведенияПоТоварам.ШтрихкодУпаковки = ЗНАЧЕНИЕ(Справочник.ШтрихкодыУпаковокТоваров.ПустаяСсылка)
| И СведенияПоТоварам.ПолныйКодМаркировки = """"
| ИЛИ (СведенияПоТоварам.ТребуетсяНомерГТД
| ИЛИ СведенияПоТоварам.ТребуетсяРНПТ)
| И СведенияПоТоварам.НомерГТД = ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
| ИЛИ СведенияПоТоварам.ТребуетсяУИН
| И СведенияПоТоварам.УИН = """"
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ТребуетсяЗаполнить,
| СведенияПоТоварам.НомерРодительскогоОтправления КАК НомерРодительскогоОтправления,
| &НоменклатураЗамена КАК Номенклатура,
| &ХарактеристикаЗамена КАК Характеристика,
| ВЫБОР
| КОГДА &УпаковкаЗамена = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА СправНоменклатура.ЕдиницаИзмерения
| ИНАЧЕ &УпаковкаЗамена
| КОНЕЦ КАК Упаковка,
| &ПредставлениеТовараЗамена КАК ПредставлениеТовара,
| ЗаказКлиентаТовары.Ссылка ЕСТЬ NULL КАК НетВЗаказе,
| ЕСТЬNULL(ЗаказКлиентаТовары.Отменено, ИСТИНА) КАК Отменено,
| ЕСТЬNULL(ПРЕДСТАВЛЕНИЕССЫЛКИ(ЗаказКлиентаТовары.ПричинаОтмены), """") КАК ПричинаОтмены,
| ЕСТЬNULL(ЗаказКлиентаТовары.ВариантОбеспечения, ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.ПустаяСсылка)) = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)
| И НЕ ЕСТЬNULL(ЗаказКлиентаТовары.Отменено, ИСТИНА) КАК ПозицияКОтгрузке,
| ЕСТЬNULL(СправНоменклатура.ВестиУчетПоГТД, ЛОЖЬ) КАК ВестиУчетПоГТД,
| ЕСТЬNULL(СправНоменклатура.ПрослеживаемыйТовар, ЛОЖЬ) КАК ПрослеживаемыйТовар,
| СведенияПоТоварам.КодСтроки КАК КодСтроки,
| СведенияПоТоварам.ИдентификаторСтроки КАК ИдентификаторСтроки,
| СведенияПоТоварам.ИдентификаторОбъектаМаркетплейса КАК ИдентификаторОбъектаМаркетплейса,
| СведенияПоТоварам.ОписаниеОшибки КАК ОписаниеОшибки
|ИЗ
| РегистрСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок КАК СведенияПоТоварам
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗаказыТорговыхПлощадок КАК ЗаказыИОтправления
| ПО СведенияПоТоварам.Заказ = ЗаказыИОтправления.Заказ
| И СведенияПоТоварам.ДокументОтгрузки = ЗаказыИОтправления.ДокументОтгрузки
| И (ЗаказыИОтправления.УчетнаяЗапись = &УчетнаяЗапись)
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
| ПО СведенияПоТоварам.Заказ = ЗаказКлиентаТовары.Ссылка
| И СведенияПоТоварам.КодСтроки = ЗаказКлиентаТовары.КодСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправНоменклатура
| ПО (&НоменклатураСтатусовПубликации = СправНоменклатура.Ссылка)
|ГДЕ
| СведенияПоТоварам.Заказ = &Заказ";
ДополнитьСведенияПоТоварамСоставляющими(
ТекстЗапроса,
"РегистрСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок КАК СведенияПоТоварам",
УчетнаяЗапись);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "СведенияПоТоварам.УчетнаяЗапись", "&УчетнаяЗапись");
Возврат ТекстЗапроса;
КонецФункции
Функция ПричинаОтменыБезЗаказа() Экспорт
Возврат НСтр("ru = 'Нет в заказе'");
КонецФункции
Процедура ОчиститьДанныеЭкземпляров(Заказ, ИмяСобытия = "") Экспорт
НачатьТранзакцию();
Попытка
БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок");
ЭлементБлокировкиДанных.УстановитьЗначение("Заказ", Заказ);
БлокировкаДанных.Заблокировать();
НаборЗаписей = РегистрыСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Заказ.Установить(Заказ);
НаборЗаписей.Записать(Истина);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'При удалении данных по экземплярам заказа <%1> возникла ошибка: %2.'",
ОбщегоНазначения.КодОсновногоЯзыка()),
Заказ,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(ИмяСобытия,
УровеньЖурналаРегистрации.Ошибка,,,
ТекстОшибки);
КонецПопытки;
КонецПроцедуры
Функция ПараметрыЗаполненияДанныхПоЭкземплярам() Экспорт
Параметры = Новый Структура;
Параметры.Вставить("ОбновлятьКодыСтрокПоЗаказу", Истина);
Параметры.Вставить("ОбновлятьИдентификаторыСтрокПоОтгрузке", Истина);
Параметры.Вставить("ОбновлятьНомераГТДПоОтгрузке", Истина);
Параметры.Вставить("ОбновлятьКодыМаркировкиПоОтгрузке", Истина);
Параметры.Вставить("УчитыватьПризнакМаркировкиИСМП", Ложь);
Параметры.Вставить("ОбновлятьНомераОтправлений", Истина);
Параметры.Вставить("ЗаписатьСведенияОбЭкземплярах", Истина);
Параметры.Вставить("ЗаписатьСведенияОбОтправлениях", Истина);
Параметры.Вставить("ПроверитьЗаказы", Ложь);
Параметры.Вставить("ВернутьСведенияПоТоварам", Ложь);
Параметры.Вставить("ВыводитьСообщениеОбОформленииДокументов", Ложь);
Возврат Параметры;
КонецФункции
Функция ЗаполнитьДанныеПоЭкземплярам(Знач Заказы, ПараметрыЗаполнения = Неопределено) Экспорт
Если ТипЗнч(Заказы) <> Тип("Массив") Тогда
Заказ = Заказы;
Заказы = Новый Массив;
Заказы.Добавить(Заказ);
КонецЕсли;
Если ПараметрыЗаполнения = Неопределено Тогда
ПараметрыЗаполнения = ПараметрыЗаполненияДанныхПоЭкземплярам();
Иначе
Если ПараметрыЗаполнения.ОбновлятьНомераГТДПоОтгрузке
И Не ПараметрыЗаполнения.ОбновлятьИдентификаторыСтрокПоОтгрузке Тогда
ПараметрыЗаполнения.ОбновлятьИдентификаторыСтрокПоОтгрузке = Истина;
КонецЕсли;
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("ИнформацияОбОшибке", ИнтеграцияСМаркетплейсамиСервер.НоваяОшибка());
Результат.Вставить("СведенияПоТоварам", Неопределено);
Результат.Вставить("РезультатПроверкиЗаказов", Новый Соответствие);
КодОшибки = КодОшибкиЗаполненияСведенийПоЭкземплярам();
СписокОшибок = Новый Массив;
Если Заказы.Количество() = 0 Тогда
Результат.ИнформацияОбОшибке.КодОшибки = КодОшибки;
Результат.ИнформацияОбОшибке.ОписаниеОшибки = НСтр("ru = 'Нет заказов для заполнения сведений по товарам.'");
Возврат Результат;
КонецЕсли;
ИндексыПакетов = Новый СписокЗначений;
ПакетРезультатов = ОбрабатываемыеДанные(Заказы, ИндексыПакетов, ПараметрыЗаполнения);
ТипБулево = Новый ОписаниеТипов("Булево");
ТипЧисло = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3));
ТипДенежный = ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля();
ТипСтрока = Новый ОписаниеТипов("Строка");
ШаблонОшибкиОтсутствияСведений =
НСтр("ru = 'Не обнаружены сведения по товарам для заказов:
| - %1.'");
ШаблонСообщенияОНевыведенныхДанных = НСтр("ru = ';%1 документ;;%1 документа;%1 документов;'");
СведенияПоТоварам = Неопределено;
СведенияПоТоварамРезультат =
РезультатЗапросаПоИмениПакета(ПакетРезультатов, ИндексыПакетов, "СведенияПоТоварам");
Если СведенияПоТоварамРезультат = Неопределено Или СведенияПоТоварамРезультат.Пустой() Тогда
ЗаказыДляВывода = ИнтеграцияСМаркетплейсамиКлиентСервер.ЭлементыМассиваДляВыводаСообщений(
Заказы,
ШаблонСообщенияОНевыведенныхДанных);
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонОшибкиОтсутствияСведений,
СтрСоединить(ЗаказыДляВывода, ";" + Символы.ПС + " - "));
СписокОшибок.Добавить(ТекстОшибки);
КонецЕсли;
Если СведенияПоТоварамРезультат <> Неопределено Тогда
СведенияПоТоварам = СведенияПоТоварамРезультат.Выгрузить();
СведенияПоТоварамРезультат = Неопределено;
СведенияПоТоварам.Колонки.Добавить("Цена", ТипДенежный);
СведенияПоТоварам.Колонки.Добавить("СуммаРучнойСкидки", ТипДенежный);
СведенияПоТоварам.Колонки.Добавить("СтавкаНДС", Новый ОписаниеТипов("СправочникСсылка.СтавкиНДС"));
СведенияПоТоварам.Колонки.Добавить("Склад", Новый ОписаниеТипов("СправочникСсылка.Склады"));
СведенияПоТоварам.Колонки.Добавить("ШтрихКодУпаковкиОбработан", ТипБулево);
СведенияПоТоварам.Колонки.Добавить("КодОшибки", ТипСтрока);
СведенияПоТоварам.Колонки.Добавить("ОписаниеОшибки", ТипСтрока);
Если СведенияПоТоварам.Количество() > 1000 Тогда
СведенияПоТоварам.Индексы.Добавить("Заказ");
СведенияПоТоварам.Индексы.Добавить("Заказ, КодСтрокиЗаполнен");
СведенияПоТоварам.Индексы.Добавить("Заказ, ИдентификаторСтрокиЗаполнен");
СведенияПоТоварам.Индексы.Добавить("Заказ, КодСтрокиЗаполнен, ИдентификаторСтрокиЗаполнен");
СведенияПоТоварам.Индексы.Добавить("Заказ, Отменено");
СведенияПоТоварам.Индексы.Добавить("Заказ, НомерОтправления");
СведенияПоТоварам.Индексы.Добавить("Заказ, ДокументОтгрузки");
СведенияПоТоварам.Индексы.Добавить("Заказ, ДокументОтгрузки,НомерОтправления");
СведенияПоТоварам.Индексы.Добавить("Заказ, КодСтрокиЗаполнен, ИдентификаторСтрокиЗаполнен, Статус");
СведенияПоТоварам.Индексы.Добавить("Заказ, КодСтрокиЗаполнен, НомерГТДЗаполнен");
СведенияПоТоварам.Индексы.Добавить("Заказ, НомерОтправления, КодСтроки, ИдентификаторСтроки, ШтрихКодУпаковкиОбработан");
КонецЕсли;
Если ПараметрыЗаполнения.ОбновлятьКодыСтрокПоЗаказу Тогда
ДанныеПоРаспоряжениям =
РезультатЗапросаПоИмениПакета(ПакетРезультатов, ИндексыПакетов, "ДанныеПоРаспоряжениям").Выгрузить();
ДанныеПоРаспоряжениям.Колонки.Добавить("КоличествоОбработано", ТипЧисло);
ДанныеПоРаспоряжениям.Колонки.Добавить("РучнаяСкидкаРаспределено", ТипДенежный);
ДанныеПоРаспоряжениям.Колонки.Добавить("Обработана", ТипБулево);
Если ДанныеПоРаспоряжениям.Количество() > 1000 Тогда
ДанныеПоРаспоряжениям.Индексы.Добавить("Заказ");
ДанныеПоРаспоряжениям.Индексы.Добавить("Заказ, ИдентификаторТовара, КодСтроки, Обработана");
ДанныеПоРаспоряжениям.Индексы.Добавить("Заказ, ИдентификаторТовара, Обработана");
КонецЕсли;
КонецЕсли;
Если ПараметрыЗаполнения.ОбновлятьИдентификаторыСтрокПоОтгрузке Тогда
ТоварыДокументовОтгрузки =
РезультатЗапросаПоИмениПакета(ПакетРезультатов, ИндексыПакетов, "ТоварыДокументовОтгрузки").Выгрузить();
ТоварыДокументовОтгрузки.Колонки.Добавить("КоличествоОбработано", ТипЧисло);
ТоварыДокументовОтгрузки.Колонки.Добавить("Обработана", ТипБулево);
Если ТоварыДокументовОтгрузки.Количество() > 1000 Тогда
ТоварыДокументовОтгрузки.Индексы.Добавить("Заказ, ИдентификаторТовара, КодСтроки, ИдентификаторСтроки, Обработана");
ТоварыДокументовОтгрузки.Индексы.Добавить("Заказ, ИдентификаторТовара, КодСтроки, Обработана");
КонецЕсли;
ДокументыОтгрузкиЗаказов =
РезультатЗапросаПоИмениПакета(ПакетРезультатов, ИндексыПакетов, "ДокументыОтгрузки");
ДокументыОтгрузкиЗаказов =
ДокументыОтгрузкиЗаказов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
КонецЕсли;
Если ПараметрыЗаполнения.ОбновлятьНомераГТДПоОтгрузке Тогда
НомераГТДДокументовОтгрузки =
РезультатЗапросаПоИмениПакета(ПакетРезультатов, ИндексыПакетов, "ДанныеПоНомерамГТДДокументовОтгрузки");
НомераГТДДокументовОтгрузки = НомераГТДДокументовОтгрузки.Выгрузить();
НомераГТДДокументовОтгрузки.Колонки.Добавить("КоличествоОбработано", ТипЧисло);
НомераГТДДокументовОтгрузки.Колонки.Добавить("Обработана", ТипБулево);
Если НомераГТДДокументовОтгрузки.Количество() > 1000 Тогда
НомераГТДДокументовОтгрузки.Индексы.Добавить("Заказ, ИдентификаторТовара, Обработана");
КонецЕсли;
КонецЕсли;
ПакетРезультатов = Неопределено;
Если ПараметрыЗаполнения.ПроверитьЗаказы Тогда
РезультатПроверкиЗаказов = Новый Соответствие;
КонецЕсли;
СписокЗаказовПрочих = Новый Массив;
СписокЗаказовПереоформляемых = Новый Массив;
Для Каждого Заказ Из Заказы Цикл
Если ПараметрыЗаполнения.ОбновлятьКодыСтрокПоЗаказу Тогда
ТаблицаПроверки = ДанныеПоРаспоряжениям;
Иначе
ТаблицаПроверки = СведенияПоТоварам;
КонецЕсли;
УчетнаяЗапись = УчетнаяЗаписьТорговойПлощадкиЗаказа(Заказ, ТаблицаПроверки);
Если Не ЗначениеЗаполнено(УчетнаяЗапись) Тогда
СписокЗаказовПрочих.Добавить(Заказ);
Продолжить;
КонецЕсли;
ТребуетсяЗаписьСведенийОбОтправлениях =
ТребуетсяЗаписьСведенийОбОтправлениях(Заказ, СведенияПоТоварам);
ТребуетсяПереоформлениеДокументовОтгрузки =
ТребуетсяПереоформлениеДокументовОтгрузкиПослеРазделенияОтправлений(Заказ, СведенияПоТоварам);
Если ПараметрыЗаполнения.ОбновлятьКодыСтрокПоЗаказу Тогда
ПроверитьКодыСтрокПоЗаказам(Заказ, СведенияПоТоварам, ДанныеПоРаспоряжениям);
ЗаполнитьКодыСтрокПоЗаказам(Заказ, СведенияПоТоварам, ДанныеПоРаспоряжениям);
КонецЕсли;
Если ПараметрыЗаполнения.ОбновлятьИдентификаторыСтрокПоОтгрузке Тогда
ПроверитьИдентификаторыСтрокПоДокументамОтгрузки(Заказ, СведенияПоТоварам, ТоварыДокументовОтгрузки);
Если ПараметрыЗаполнения.ОбновлятьНомераГТДПоОтгрузке Тогда
ПроверитьНомераГТДПоДокументамОтгрузки(Заказ, СведенияПоТоварам, НомераГТДДокументовОтгрузки);
КонецЕсли;
ЗаполнитьИдентификаторыСтрокПоДокументамОтгрузки(Заказ, СведенияПоТоварам, ТоварыДокументовОтгрузки,
ТребуетсяПереоформлениеДокументовОтгрузки);
Если ПараметрыЗаполнения.ОбновлятьНомераГТДПоОтгрузке Тогда
ЗаполнитьНомераГТДПоДокументамОтгрузки(Заказ, СведенияПоТоварам, НомераГТДДокументовОтгрузки,
ТребуетсяПереоформлениеДокументовОтгрузки);
КонецЕсли;
СведенияОбОтправлениях =
СведенияОбОтправлениях(Заказ, СведенияПоТоварам, ДокументыОтгрузкиЗаказов, ТребуетсяЗаписьСведенийОбОтправлениях);
Если ПараметрыЗаполнения.ПроверитьЗаказы Тогда
РезультатПроверкиЗаказа = ИнтеграцияСМаркетплейсамиКлиентСервер.РезультатПроверкиЗаказа(Заказ, РезультатПроверкиЗаказов);
РезультатПроверкиЗаказа.ДанныеПоНомерамОтправлений = СведенияОбОтправлениях.ДанныеПоНомерамОтправлений;
КонецЕсли;
ЗаполнитьНомераОтправлений(Заказ, СведенияПоТоварам, СведенияОбОтправлениях,
ТребуетсяЗаписьСведенийОбОтправлениях, ПараметрыЗаполнения.ЗаписатьСведенияОбОтправлениях);
Иначе
СведенияОбОтправлениях = Новый Структура;
СведенияОбОтправлениях.Вставить("ДанныеПоНомерамОтправлений", Новый Соответствие);
СведенияОбОтправлениях.Вставить("ДанныеПоДокументамОтгрузки", Новый Соответствие);
КонецЕсли;
Если ТребуетсяПереоформлениеДокументовОтгрузки Тогда
СписокЗаказовПереоформляемых.Добавить(Заказ);
КонецЕсли;
Если ПараметрыЗаполнения.ОбновлятьКодыМаркировкиПоОтгрузке Тогда
ОбновитьКодыМаркировки(
Заказ,
СведенияПоТоварам,
СведенияОбОтправлениях.ДанныеПоДокументамОтгрузки,
ПараметрыЗаполнения.УчитыватьПризнакМаркировкиИСМП);
КонецЕсли;
Если Не ПараметрыЗаполнения.ЗаписатьСведенияОбОтправлениях
И ПараметрыЗаполнения.ОбновлятьИдентификаторыСтрокПоОтгрузке Тогда
ЗаполнитьИдентификаторыСтрокПоДокументамОтгрузки(Заказ, СведенияПоТоварам, ТоварыДокументовОтгрузки,
ТребуетсяПереоформлениеДокументовОтгрузки);
Если ПараметрыЗаполнения.ОбновлятьНомераГТДПоОтгрузке Тогда
ЗаполнитьНомераГТДПоДокументамОтгрузки(Заказ, СведенияПоТоварам, НомераГТДДокументовОтгрузки,
ТребуетсяПереоформлениеДокументовОтгрузки);
КонецЕсли;
КонецЕсли;
ПроверитьИВернутьЭкземплярыВРодительскиеОтправления(Заказ, СведенияПоТоварам);
Если ПараметрыЗаполнения.ЗаписатьСведенияОбОтправлениях
И ТребуетсяЗаписьСведенийОбОтправлениях
И СведенияПоТоварам.Количество() > 0 Тогда
ТекстОшибки = РегистрыСведений.ЗаказыТорговыхПлощадок.ЗаписатьСведенияОбОтправлениях(
Заказ,
СведенияОбОтправлениях.ДанныеПоНомерамОтправлений);
Если Не ПустаяСтрока(ТекстОшибки) Тогда
СписокОшибок.Добавить(ТекстОшибки);
КонецЕсли;
КонецЕсли;
Если ПараметрыЗаполнения.ЗаписатьСведенияОбЭкземплярах Тогда
ТекстОшибки = ЗаписатьИзмененияСведенийПоТоварам(Заказ, СведенияПоТоварам);
Если Не ПустаяСтрока(ТекстОшибки) Тогда
СписокОшибок.Добавить(ТекстОшибки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если СписокЗаказовПрочих.Количество() > 0 Тогда
ЗаказыДляВывода = ИнтеграцияСМаркетплейсамиКлиентСервер.ЭлементыМассиваДляВыводаСообщений(
СписокЗаказовПрочих,
ШаблонСообщенияОНевыведенныхДанных);
ШаблонОшибкиОтсутствияРаспоряжений =
НСтр("ru = 'Не являются заказами торговой площадки:
| - %1.'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонОшибкиОтсутствияРаспоряжений,
СтрСоединить(ЗаказыДляВывода, ";" + Символы.ПС + " - "));
СписокОшибок.Добавить(ТекстОшибки);
КонецЕсли;
Если ПараметрыЗаполнения.ВыводитьСообщениеОбОформленииДокументов
И СписокЗаказовПереоформляемых.Количество() > 0 Тогда
ЗаказыДляВывода = ИнтеграцияСМаркетплейсамиКлиентСервер.ЭлементыМассиваДляВыводаСообщений(
СписокЗаказовПереоформляемых,
ШаблонСообщенияОНевыведенныхДанных);
ШаблонОшибкиПерезаполнения =
НСтр("ru = 'Требуется заполнение документов отгрузки по заказам:
| %1.'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонОшибкиПерезаполнения,
СтрСоединить(ЗаказыДляВывода, ";" + Символы.ПС + " - "));
СписокОшибок.Добавить(ТекстОшибки);
КонецЕсли;
КонецЕсли;
Если СписокОшибок.Количество() > 0 Тогда
Результат.ИнформацияОбОшибке.КодОшибки = КодОшибки;
Результат.ИнформацияОбОшибке.ОписаниеОшибки = СтрСоединить(СписокОшибок, Символы.ПС);
КонецЕсли;
Если ПараметрыЗаполнения.ПроверитьЗаказы Тогда
Результат.РезультатПроверкиЗаказов =
РегистрыСведений.ЗаказыТорговыхПлощадок.ПроверитьЗаказы(
Заказы,
РезультатПроверкиЗаказов,
Истина,
ПараметрыЗаполнения.ВернутьСведенияПоТоварам
Или ПараметрыЗаполнения.ЗаписатьСведенияОбЭкземплярах);
КонецЕсли;
Если ПараметрыЗаполнения.ВернутьСведенияПоТоварам И СведенияПоТоварам <> Неопределено Тогда
СведенияПоТоварам.Индексы.Очистить();
Результат.Вставить("СведенияПоТоварам", СведенияПоТоварам);
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура ВернутьЭкземплярыВРодительскиеОтправления(Заказ, КлючиЗаписей, ИмяСобытия = "", ПроверкаКлючей = Истина) Экспорт
Если ПроверкаКлючей Тогда
ТаблицаДанных = Новый ТаблицаЗначений;
Измерения = Метаданные.РегистрыСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок.Измерения;
Для Каждого Измерение Из Измерения Цикл
ТаблицаДанных.Колонки.Добавить(Измерение.Имя, Измерение.Тип);
КонецЦикла;
Для Каждого КлючЗаписи Из КлючиЗаписей Цикл
ЗаполнитьЗначенияСвойств(ТаблицаДанных.Добавить(), КлючЗаписи);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СведенияПоТоварам.Заказ КАК Заказ,
| СведенияПоТоварам.ИдентификаторТовара КАК ИдентификаторТовара,
| СведенияПоТоварам.ИдентификаторЭкземпляра КАК ИдентификаторЭкземпляра,
| СведенияПоТоварам.НомерОтправления КАК НомерОтправления,
| СведенияПоТоварам.НомерРодительскогоОтправления КАК НомерРодительскогоОтправления,
| ЕСТЬNULL(ЗаказКлиентаТовары.Отменено, ИСТИНА) КАК Отменено
|ПОМЕСТИТЬ СведенияПоТоварамЗаказа
|ИЗ
| РегистрСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок КАК СведенияПоТоварам
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
| ПО СведенияПоТоварам.Заказ = ЗаказКлиентаТовары.Ссылка
| И СведенияПоТоварам.КодСтроки = ЗаказКлиентаТовары.КодСтроки
|ГДЕ
| СведенияПоТоварам.Заказ = &Заказ
|
|ИНДЕКСИРОВАТЬ ПО
| Заказ,
| ИдентификаторТовара,
| ИдентификаторЭкземпляра
|;
|
|
|ВЫБРАТЬ
| ТаблицаДанных.Заказ КАК Заказ,
| ТаблицаДанных.ИдентификаторТовара КАК ИдентификаторТовара,
| ТаблицаДанных.ИдентификаторЭкземпляра КАК ИдентификаторЭкземпляра
|ПОМЕСТИТЬ ТаблицаДанных
|ИЗ
| &ТаблицаДанных КАК ТаблицаДанных
|
|ИНДЕКСИРОВАТЬ ПО
| Заказ,
| ИдентификаторТовара,
| ИдентификаторЭкземпляра
|;
|
|
|ВЫБРАТЬ
| СведенияПоТоварамЗаказа.Заказ КАК Заказ,
| СведенияПоТоварамЗаказа.НомерОтправления КАК НомерОтправления,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СведенияПоТоварамЗаказа.ИдентификаторЭкземпляра) КАК КоличествоЭкземпляров,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
| КОГДА ТаблицаДанных.ИдентификаторЭкземпляра ЕСТЬ NULL
| И СведенияПоТоварамЗаказа.Отменено
| ИЛИ НЕ ТаблицаДанных.ИдентификаторЭкземпляра ЕСТЬ NULL
| ТОГДА СведенияПоТоварамЗаказа.ИдентификаторЭкземпляра
| КОНЕЦ) КАК КоличествоОтмененныхЭкземпляров
|ПОМЕСТИТЬ ОтмененныеОтправления
|ИЗ
| СведенияПоТоварамЗаказа КАК СведенияПоТоварамЗаказа
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаДанных КАК ТаблицаДанных
| ПО СведенияПоТоварамЗаказа.Заказ = ТаблицаДанных.Заказ
| И СведенияПоТоварамЗаказа.ИдентификаторТовара = ТаблицаДанных.ИдентификаторТовара
| И СведенияПоТоварамЗаказа.ИдентификаторЭкземпляра = ТаблицаДанных.ИдентификаторЭкземпляра
|
|СГРУППИРОВАТЬ ПО
| СведенияПоТоварамЗаказа.Заказ,
| СведенияПоТоварамЗаказа.НомерОтправления
|
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СведенияПоТоварамЗаказа.ИдентификаторЭкземпляра) = КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
| КОГДА ТаблицаДанных.ИдентификаторЭкземпляра ЕСТЬ NULL
| И СведенияПоТоварамЗаказа.Отменено
| ИЛИ НЕ ТаблицаДанных.ИдентификаторЭкземпляра ЕСТЬ NULL
| ТОГДА СведенияПоТоварамЗаказа.ИдентификаторЭкземпляра
| КОНЕЦ)
|
|ИНДЕКСИРОВАТЬ ПО
| Заказ,
| НомерОтправления
|;
|
|
|УНИЧТОЖИТЬ ТаблицаДанных
|;
|
|
|ВЫБРАТЬ
| СведенияПоТоварамЗаказа.Заказ КАК Заказ,
| СведенияПоТоварамЗаказа.ИдентификаторТовара КАК ИдентификаторТовара,
| СведенияПоТоварамЗаказа.ИдентификаторЭкземпляра КАК ИдентификаторЭкземпляра
|ИЗ
| СведенияПоТоварамЗаказа КАК СведенияПоТоварамЗаказа
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОтмененныеОтправления КАК ОтмененныеОтправления
| ПО СведенияПоТоварамЗаказа.Заказ = ОтмененныеОтправления.Заказ
| И СведенияПоТоварамЗаказа.НомерОтправления = ОтмененныеОтправления.НомерОтправления
|;
|
|
|УНИЧТОЖИТЬ СведенияПоТоварамЗаказа
|;
|
|
|УНИЧТОЖИТЬ ОтмененныеОтправления";
Запрос.УстановитьПараметр("Заказ", Заказ);
Запрос.УстановитьПараметр("ТаблицаДанных", ТаблицаДанных);
КлючиЗаписей = Новый Массив;
УстановитьПривилегированныйРежим(Истина);
ВыборкаЗаписей = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
НачатьТранзакцию();
Попытка
БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировкиДанных =
БлокировкаДанных.Добавить("РегистрСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок");
ЭлементБлокировкиДанных.УстановитьЗначение("Заказ", Заказ);
БлокировкаДанных.Заблокировать();
Если ПроверкаКлючей Тогда
Пока ВыборкаЗаписей.Следующий() Цикл
ВернутьЭкземплярВРодительскоеОтправление(ВыборкаЗаписей);
КонецЦикла;
Иначе
Для Каждого КлючЗаписи Из КлючиЗаписей Цикл
ВернутьЭкземплярВРодительскоеОтправление(КлючЗаписи);
КонецЦикла;
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось вернуть экземпляры заказа <%1> в первоначальные отправления по причине: %2.'",
ОбщегоНазначения.КодОсновногоЯзыка()),
Заказ,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки);
ЗаписьЖурналаРегистрации(ИмяСобытия,
УровеньЖурналаРегистрации.Ошибка,,,
ТекстОшибки);
КонецПопытки;
КонецПроцедуры
Функция ЗаменитьНомерОтправления(Заказ, НомерОтправления, НовыйНомерОтправления, ИмяСобытия = "") Экспорт
ПараметрыЗамены = ИнтеграцияСМаркетплейсамиСервер.НовыеПараметрыЗаменыНомеровОтправленийПоЗаказу();
ПараметрыЗамены.ИмяРегистра =
Метаданные.РегистрыСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок.ПолноеИмя();
ПараметрыЗамены.ИмяСобытияЖурналаРегистрации = ИмяСобытия;
ПараметрыЗамены.Заказ = Заказ;
ДанныеЗаписиДляЗамены = ИнтеграцияСМаркетплейсамиСервер.НовыеДанныеЗаписиДляЗаменыНомераОтправленияПоЗаказу();
ДанныеЗаписиДляЗамены.НомерОтправления = НовыйНомерОтправления;
ПараметрыЗамены.ДанныеДляЗамены.Вставить(НомерОтправления, ДанныеЗаписиДляЗамены);
ТекстОшибки = ИнтеграцияСМаркетплейсамиСервер.ЗаменитьНомераОтправленийПоЗаказу(ПараметрыЗамены);
Возврат ТекстОшибки;
КонецФункции
Функция ПодготовитьСведенияПоТоварамДляЗаполненияДокументовОтгрузки(СведенияПоТоварам) Экспорт
КолонкаЗаказа = СведенияПоТоварам.Колонки.Найти("Заказ");
Если КолонкаЗаказа = Неопределено Тогда
СведенияПоТоварам.Колонки.Добавить("ЗаказКлиента", Новый ОписаниеТипов("ДокументСсылка.ЗаказКлиента"));
Иначе
КолонкаЗаказа.Имя = "ЗаказКлиента";
КонецЕсли;
ПоляГруппировки = "ЗаказКлиента, НомерОтправления, НомерРодительскогоОтправления,
|Номенклатура, Характеристика, Упаковка,
|КодСтроки, СтавкаНДС, Цена, КОтгрузке, Отменено";
ПоляСуммирования = "Количество, КоличествоУпаковок, СуммаРучнойСкидки";
СведенияПоТоварам.Свернуть(ПоляГруппировки, ПоляСуммирования);
Возврат СведенияПоТоварам;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ФункциональныеОпцииТорговыхПлощадок()
МассивФункциональныхОпций = Новый Массив;
МассивФункциональныхОпций.Добавить("ИспользоватьИнтеграциюСOzon");
Возврат СтрСоединить(МассивФункциональныхОпций, ",");
КонецФункции
Функция КодОшибкиЗаполненияСведенийПоЭкземплярам()
Возврат "Ошибка_ЗаполнениеЭкземпляров";
КонецФункции
#Область ПолучениеДанныхПоЭкземплярамСлужебный
Функция ОбрабатываемыеДанные(СписокЗаказов, ИндексыПакетов, ПараметрыЗаполнения = Неопределено)
Если ПараметрыЗаполнения = Неопределено Тогда
ПараметрыЗаполнения = ПараметрыЗаполненияДанныхПоЭкземплярам();
Иначе
Если ПараметрыЗаполнения.ОбновлятьНомераГТДПоОтгрузке
И Не ПараметрыЗаполнения.ОбновлятьИдентификаторыСтрокПоОтгрузке Тогда
ПараметрыЗаполнения.ОбновлятьИдентификаторыСтрокПоОтгрузке = Истина;
КонецЕсли;
КонецЕсли;
ТекстыЗапроса = Новый СписокЗначений;
ТекстЗапросаПодготовкаЗаказовИОтправлений(ТекстыЗапроса, ИндексыПакетов);
ТекстЗапросаПодготовкаЗаказовТорговыхПлощадок(ТекстыЗапроса, ИндексыПакетов);
ТекстЗапросаСведенияПоТоварам(ТекстыЗапроса, ИндексыПакетов,, ПараметрыЗаполнения.ОбновлятьКодыСтрокПоЗаказу);
ТекстЗапросаПодготовкаДанныхПоРаспоряжениям(ТекстыЗапроса, ИндексыПакетов);
ТекстЗапросаУничтоженияВременнойТаблицы(ТекстыЗапроса, ИндексыПакетов,
"СведенияПоТоварам");
Если ПараметрыЗаполнения.ОбновлятьКодыСтрокПоЗаказу Тогда
ТекстЗапросаДанныеПоРаспоряжениям(ТекстыЗапроса, ИндексыПакетов);
КонецЕсли;
Если ПараметрыЗаполнения.ОбновлятьИдентификаторыСтрокПоОтгрузке Тогда
ТекстЗапросаПодготовкаТоваровДокументовОтгрузкиКОформлению(ТекстыЗапроса, ИндексыПакетов);
ТекстЗапросаПодготовкаТоваровДокументовОтгрузки(ТекстыЗапроса, ИндексыПакетов);
ТекстЗапросаУничтоженияВременнойТаблицы(ТекстыЗапроса, ИндексыПакетов,
"ТоварыДокументовОтгрузкиКОформлению");
ТекстЗапросаТоварыДокументовОтгрузки(ТекстыЗапроса, ИндексыПакетов);
ТекстЗапросаДокументыОтгрузки(ТекстыЗапроса, ИндексыПакетов);
КонецЕсли;
ТекстЗапросаУничтоженияВременнойТаблицы(ТекстыЗапроса, ИндексыПакетов,
"ЗаказыТорговыхПлощадок, ЗаказыИОтправления, РазличныеСведенияПоТоварам, ИдентификаторыТоваров");
Если ПараметрыЗаполнения.ОбновлятьНомераГТДПоОтгрузке Тогда
ТекстЗапросаДанныеПоНомерамГТДДокументовОтгрузки(ТекстыЗапроса, ИндексыПакетов);
КонецЕсли;
ТекстЗапросаУничтоженияВременнойТаблицы(ТекстыЗапроса, ИндексыПакетов,
"ДанныеПоРаспоряжениям");
Если ПараметрыЗаполнения.ОбновлятьИдентификаторыСтрокПоОтгрузке Тогда
ТекстЗапросаУничтоженияВременнойТаблицы(ТекстыЗапроса, ИндексыПакетов,
"ТоварыДокументовОтгрузки");
КонецЕсли;
РабочиеСтатусы = Новый Массив;
РабочиеСтатусы.Добавить(Перечисления.СтатусыЗаказовТорговыхПлощадок.ПустаяСсылка());
РабочиеСтатусы.Добавить(Перечисления.СтатусыЗаказовТорговыхПлощадок.ОжидаетСборки);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СписокЗаказов", СписокЗаказов);
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("ЗаполнятьНесобраннымиТоварами", Ложь);
Запрос.УстановитьПараметр("РабочиеСтатусы", РабочиеСтатусы);
ГраницыОборотов = ОбщегоНазначенияУТ.ГраницыОборотовРегистра("РаспоряженияНаОтгрузкуИВозврат",
"Распоряжение В (&СписокЗаказов)",
Запрос.Параметры);
Запрос.УстановитьПараметр("НачПериодРаспоряженияНаОтгрузку", ГраницыОборотов.МинимальнаяДата);
Запрос.УстановитьПараметр("КонПериодРаспоряженияНаОтгрузку", ГраницыОборотов.МаксимальнаяДата);
УстановитьПривилегированныйРежим(Истина);
ПакетРезультатов = ОбщегоНазначенияУТ.ВыполнитьПакетЗапросов(Запрос, ТекстыЗапроса);
УстановитьПривилегированныйРежим(Ложь);
Возврат ПакетРезультатов;
КонецФункции
Функция ТекущийИндексПакетаЗапроса(ИндексыТаблиц)
ТекущийИндекс = 0;
КоличествоЗаписей = ИндексыТаблиц.Количество();
Если КоличествоЗаписей > 0 Тогда
ТекущийИндекс = Число(ИндексыТаблиц.Получить(КоличествоЗаписей - 1).Представление) + 1;
КонецЕсли;
Возврат ТекущийИндекс;
КонецФункции
Функция РезультатЗапросаПоИмениПакета(ПакетРезультатов, ИндексыПакетов, ИмяПакета)
РезультатЗапроса = Неопределено;
ИндексРезультата = ИндексыПакетов.НайтиПоЗначению(ИмяПакета);
Если ИндексРезультата <> Неопределено Тогда;
РезультатЗапроса = ПакетРезультатов[Число(ИндексРезультата.Представление)];
КонецЕсли;
Возврат РезультатЗапроса;
КонецФункции
#КонецОбласти
#Область ТекстыЗапросовДанныхПоЭкземплярам
Процедура ТекстЗапросаУничтоженияВременнойТаблицы(ТекстыЗапроса, ИндексыПакетов, ИменаТаблиц = "")
СписокТаблиц = СтрРазделить(ИменаТаблиц, ",");
Для Каждого ИмяТаблицы Из СписокТаблиц Цикл
ИмяПакета = "Уничтожить" + ИмяТаблицы;
ТекстыЗапроса.Добавить("УНИЧТОЖИТЬ" + " " + ИмяТаблицы, ИмяПакета);
ИндексыПакетов.Добавить(ИмяПакета, ТекущийИндексПакетаЗапроса(ИндексыПакетов));
КонецЦикла;
КонецПроцедуры
Процедура ТекстЗапросаПодготовкаЗаказовИОтправлений(ТекстыЗапроса, ИндексыПакетов,
ИмяПакета = "ПодготовкаЗаказовИОтправлений")
ТекстЗапроса =
"ВЫБРАТЬ
| ЗаказыТорговыхПлощадок.УчетнаяЗапись КАК УчетнаяЗапись,
| ЗаказыТорговыхПлощадок.Заказ КАК Заказ,
| ЗаказыТорговыхПлощадок.ИдентификаторЗаказа КАК ИдентификаторЗаказа,
| ЗаказыТорговыхПлощадок.НомерЗаказа КАК НомерЗаказа,
| ЗаказыТорговыхПлощадок.ДатаСозданияЗаказа КАК ДатаСозданияЗаказа,
| ЗаказыТорговыхПлощадок.СрокОтгрузки КАК СрокОтгрузки,
| ЗаказыТорговыхПлощадок.ИдентификаторСкладаТорговойПлощадки КАК ИдентификаторСкладаТорговойПлощадки,
| ЗаказыТорговыхПлощадок.НаименованиеСкладаТорговойПлощадки КАК НаименованиеСкладаТорговойПлощадки,
| ЗаказыТорговыхПлощадок.ДокументОтгрузки КАК ДокументОтгрузки,
| ВЫБОР
| КОГДА ЗаказыТорговыхПлощадок.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
| ТОГДА НЕ ВЫРАЗИТЬ(ЗаказыТорговыхПлощадок.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Проведен
| КОГДА ЗаказыТорговыхПлощадок.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
| ТОГДА НЕ ВЫРАЗИТЬ(ЗаказыТорговыхПлощадок.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Проведен
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ДокументОтгрузкиКОформлению,
| ЗаказыТорговыхПлощадок.НомерОтправления КАК НомерОтправления,
| НЕ ЗаказыТорговыхПлощадок.НомерОтправления ПОДОБНО &ПостфиксОтправления КАК ЭтоОсновноеОтправление,
| ЗаказыТорговыхПлощадок.НомерРодительскогоОтправления КАК НомерРодительскогоОтправления,
| ЗаказыТорговыхПлощадок.Статус КАК Статус
|ПОМЕСТИТЬ ЗаказыИОтправления
|ИЗ
| РегистрСведений.ЗаказыТорговыхПлощадок КАК ЗаказыТорговыхПлощадок
|ГДЕ
| ЗаказыТорговыхПлощадок.Заказ В(&СписокЗаказов)
|
|ИНДЕКСИРОВАТЬ ПО
| Заказ,
| ДокументОтгрузки";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПостфиксОтправления", """%"
+ РегистрыСведений.ЗаказыТорговыхПлощадок.ПостфиксНовогоОтправления() + "%""");
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяПакета);
ИндексыПакетов.Добавить(ИмяПакета, ТекущийИндексПакетаЗапроса(ИндексыПакетов));
КонецПроцедуры
Процедура ТекстЗапросаПодготовкаЗаказовТорговыхПлощадок(ТекстыЗапроса, ИндексыПакетов,
ИмяПакета = "ПодготовкаЗаказовТорговыхПлощадок")
ТекстЗапроса =
"ВЫБРАТЬ
| ЗаказыИОтправления.Заказ КАК Заказ,
| МИНИМУМ(ЗаказыИОтправления.УчетнаяЗапись) КАК УчетнаяЗапись,
| МИНИМУМ(ЗаказыИОтправления.ДатаСозданияЗаказа) КАК ДатаСозданияЗаказа,
| МИНИМУМ(ЗаказыИОтправления.ИдентификаторЗаказа) КАК ИдентификаторЗаказа,
| МИНИМУМ(ЗаказыИОтправления.НомерЗаказа) КАК НомерЗаказа,
| МИНИМУМ(ЗаказыИОтправления.ИдентификаторСкладаТорговойПлощадки) КАК ИдентификаторСкладаТорговойПлощадки,
| МИНИМУМ(ЗаказыИОтправления.НаименованиеСкладаТорговойПлощадки) КАК НаименованиеСкладаТорговойПлощадки,
| МАКСИМУМ(ЗаказыИОтправления.СрокОтгрузки) КАК СрокОтгрузки,
| ЕСТЬNULL(МИНИМУМ(ВЫБОР
| КОГДА ЗаказыИОтправления.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовТорговыхПлощадок.ОжидаетСборки)
| И ЗаказыИОтправления.НомерРодительскогоОтправления = """"
| ТОГДА ЗаказыИОтправления.НомерОтправления
| КОГДА ЗаказыИОтправления.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовТорговыхПлощадок.ОжидаетСборки)
| И ЗаказыИОтправления.ДокументОтгрузки = НЕОПРЕДЕЛЕНО
| ТОГДА ЗаказыИОтправления.НомерОтправления
| КОГДА ЗаказыИОтправления.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовТорговыхПлощадок.ОжидаетСборки)
| И НЕ ЗаказыИОтправления.НомерОтправления ПОДОБНО &ПостфиксОтправления
| ТОГДА ЗаказыИОтправления.НомерОтправления
| ИНАЧЕ NULL
| КОНЕЦ), """") КАК НомерОтправления,
| МАКСИМУМ(ВЫБОР
| КОГДА ЗаказыИОтправления.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовТорговыхПлощадок.ОжидаетСборки)
| И ЗаказыИОтправления.ДокументОтгрузки = НЕОПРЕДЕЛЕНО
| ТОГДА ЗаказыИОтправления.Статус
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовТорговыхПлощадок.ПустаяСсылка)
| КОНЕЦ) КАК Статус
|ПОМЕСТИТЬ ЗаказыТорговыхПлощадок
|ИЗ
| ЗаказыИОтправления КАК ЗаказыИОтправления
|
|СГРУППИРОВАТЬ ПО
| ЗаказыИОтправления.Заказ
|
|ИНДЕКСИРОВАТЬ ПО
| Заказ";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПостфиксОтправления", """%"
+ РегистрыСведений.ЗаказыТорговыхПлощадок.ПостфиксНовогоОтправления() + "%""");
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяПакета);
ИндексыПакетов.Добавить(ИмяПакета, ТекущийИндексПакетаЗапроса(ИндексыПакетов));
КонецПроцедуры
Процедура ТекстЗапросаСведенияПоТоварам(ТекстыЗапроса, ИндексыПакетов,
ИмяПакета = "СведенияПоТоварам", ОбновлятьКодыСтрокПоЗаказу = Истина)
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЕСТЬNULL(ЗаказыТорговыхПлощадок.УчетнаяЗапись, ЗНАЧЕНИЕ(Справочник.УчетныеЗаписиМаркетплейсов.ПустаяСсылка)) КАК УчетнаяЗапись,
| СведенияПоТоварам.Заказ КАК Заказ,
| СведенияПоТоварам.ИдентификаторТовара КАК ИдентификаторТовара,
| СведенияПоТоварам.ИдентификаторЭкземпляра КАК ИдентификаторЭкземпляра,
| СведенияПоТоварам.ИдентификаторОбъектаМаркетплейса КАК ИдентификаторОбъектаМаркетплейса,
| СведенияПоТоварам.Количество КАК КоличествоУпаковок,
| СведенияПоТоварам.ТребуетсяСтранаПроисхождения КАК ТребуетсяСтранаПроисхождения,
| СведенияПоТоварам.ТребуетсяНомерГТД КАК ТребуетсяНомерГТД,
| СведенияПоТоварам.ТребуетсяРНПТ КАК ТребуетсяРНПТ,
| СведенияПоТоварам.ТребуетсяМаркировка КАК ТребуетсяМаркировка,
| СведенияПоТоварам.ТребуетсяУИН КАК ТребуетсяУИН,
| СведенияПоТоварам.СтранаПроисхождения КАК СтранаПроисхождения,
| СведенияПоТоварам.НомерГТД КАК НомерГТД,
| СведенияПоТоварам.ШтрихкодУпаковки КАК ШтрихкодУпаковки,
| СведенияПоТоварам.ПолныйКодМаркировки КАК ПолныйКодМаркировки,
| СведенияПоТоварам.УИН КАК УИН,
| СведенияПоТоварам.НомерОтправления КАК НомерОтправления,
| ВЫБОР
| КОГДА СведенияПоТоварам.НомерРодительскогоОтправления = """"
| ТОГДА СведенияПоТоварам.НомерОтправления
| ИНАЧЕ СведенияПоТоварам.НомерРодительскогоОтправления
| КОНЕЦ КАК НомерРодительскогоОтправления,
| СведенияПоТоварам.КодСтроки КАК КодСтроки,
| СведенияПоТоварам.ДокументОтгрузки КАК ДокументОтгрузки,
| ЕСТЬNULL(ЗаказыТорговыхПлощадок.Статус, ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовТорговыхПлощадок.ПустаяСсылка)) КАК Статус,
| СведенияПоТоварам.ИдентификаторСтроки КАК ИдентификаторСтроки,
| &КОтгрузке КАК КОтгрузке,
| &Отменено КАК Отменено,
| &ПричинаОтмены КАК ПричинаОтмены
|ПОМЕСТИТЬ СведенияПоТоварамВыборка
|ИЗ
| РегистрСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок КАК СведенияПоТоварам
| ЛЕВОЕ СОЕДИНЕНИЕ ЗаказыТорговыхПлощадок КАК ЗаказыТорговыхПлощадок
| ПО СведенияПоТоварам.Заказ = ЗаказыТорговыхПлощадок.Заказ
|ГДЕ
| СведенияПоТоварам.Заказ В(&СписокЗаказов)
|;
|
|
|ВЫБРАТЬ
| &НомерЗаписи КАК НомерЗаписи,
| СведенияПоТоварам.УчетнаяЗапись КАК УчетнаяЗапись,
| СведенияПоТоварам.Заказ КАК Заказ,
| СведенияПоТоварам.ИдентификаторТовара КАК ИдентификаторТовара,
| СведенияПоТоварам.ИдентификаторЭкземпляра КАК ИдентификаторЭкземпляра,
| СведенияПоТоварам.ИдентификаторОбъектаМаркетплейса КАК ИдентификаторОбъектаМаркетплейса,
| &НоменклатураЗамена КАК Номенклатура,
| &ХарактеристикаЗамена КАК Характеристика,
| &УпаковкаЗамена КАК Упаковка,
| СведенияПоТоварам.КоличествоУпаковок КАК КоличествоУпаковок,
| СведенияПоТоварам.ТребуетсяСтранаПроисхождения КАК ТребуетсяСтранаПроисхождения,
| СведенияПоТоварам.ТребуетсяНомерГТД КАК ТребуетсяНомерГТД,
| СведенияПоТоварам.ТребуетсяРНПТ КАК ТребуетсяРНПТ,
| СведенияПоТоварам.ТребуетсяМаркировка КАК ТребуетсяМаркировка,
| СведенияПоТоварам.ТребуетсяУИН КАК ТребуетсяУИН,
| СведенияПоТоварам.СтранаПроисхождения КАК СтранаПроисхождения,
| СведенияПоТоварам.НомерГТД КАК НомерГТД,
| СведенияПоТоварам.ШтрихкодУпаковки КАК ШтрихкодУпаковки,
| СведенияПоТоварам.ПолныйКодМаркировки КАК ПолныйКодМаркировки,
| СведенияПоТоварам.УИН КАК УИН,
| СведенияПоТоварам.НомерОтправления КАК НомерОтправления,
| СведенияПоТоварам.НомерРодительскогоОтправления КАК НомерРодительскогоОтправления,
| СведенияПоТоварам.КодСтроки КАК КодСтроки,
| ВЫБОР
| КОГДА СведенияПоТоварам.Отменено
| ТОГДА НЕОПРЕДЕЛЕНО
| ИНАЧЕ СведенияПоТоварам.ДокументОтгрузки
| КОНЕЦ КАК ДокументОтгрузки,
| СведенияПоТоварам.Статус КАК Статус,
| ВЫБОР
| КОГДА СведенияПоТоварам.Отменено
| ТОГДА """"
| ИНАЧЕ СведенияПоТоварам.ИдентификаторСтроки
| КОНЕЦ КАК ИдентификаторСтроки,
| СведенияПоТоварам.Отменено КАК Отменено,
| СведенияПоТоварам.ПричинаОтмены КАК ПричинаОтмены,
| СведенияПоТоварам.КОтгрузке КАК КОтгрузке,
| &КодПричиныОтмены КАК КодПричиныОтмены,
| &НаименованиеПричиныОтмены КАК НаименованиеПричиныОтмены
|ПОМЕСТИТЬ СведенияПоТоварам
|ИЗ
| СведенияПоТоварамВыборка КАК СведенияПоТоварам
|
|ИНДЕКСИРОВАТЬ ПО
| УчетнаяЗапись,
| Заказ,
| ИдентификаторТовара,
| ИдентификаторЭкземпляра
|;
|
|
|УНИЧТОЖИТЬ СведенияПоТоварамВыборка
|;
|
|
|ВЫБРАТЬ
| СведенияПоТоварам.УчетнаяЗапись КАК УчетнаяЗапись,
| СведенияПоТоварам.Заказ КАК Заказ,
| СведенияПоТоварам.ИдентификаторТовара КАК ИдентификаторТовара,
| СведенияПоТоварам.ИдентификаторЭкземпляра КАК ИдентификаторЭкземпляра,
| СведенияПоТоварам.ИдентификаторОбъектаМаркетплейса КАК ИдентификаторОбъектаМаркетплейса,
| СведенияПоТоварам.Номенклатура КАК Номенклатура,
| СведенияПоТоварам.Характеристика КАК Характеристика,
| СведенияПоТоварам.Упаковка КАК Упаковка,
| ЕСТЬNULL(&Количество, СведенияПоТоварам.КоличествоУпаковок) КАК Количество,
| СведенияПоТоварам.КоличествоУпаковок КАК КоличествоУпаковок,
| СведенияПоТоварам.ТребуетсяСтранаПроисхождения КАК ТребуетсяСтранаПроисхождения,
| СведенияПоТоварам.ТребуетсяНомерГТД КАК ТребуетсяНомерГТД,
| СведенияПоТоварам.ТребуетсяРНПТ КАК ТребуетсяРНПТ,
| СведенияПоТоварам.ТребуетсяМаркировка КАК ТребуетсяМаркировка,
| СведенияПоТоварам.ТребуетсяУИН КАК ТребуетсяУИН,
| ВЫБОР
| КОГДА СведенияПоТоварам.СтранаПроисхождения = ЗНАЧЕНИЕ(Справочник.СтраныМира.ПустаяСсылка)
| ТОГДА СправочникНоменклатуры.СтранаПроисхождения
| ИНАЧЕ СведенияПоТоварам.СтранаПроисхождения
| КОНЕЦ КАК СтранаПроисхождения,
| СведенияПоТоварам.НомерГТД КАК НомерГТД,
| СведенияПоТоварам.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка) КАК НомерГТДЗаполнен,
| СведенияПоТоварам.ШтрихкодУпаковки КАК ШтрихкодУпаковки,
| СведенияПоТоварам.ШтрихкодУпаковки <> ЗНАЧЕНИЕ(Справочник.ШтрихкодыУпаковокТоваров.ПустаяСсылка) КАК ШтрихкодУпаковкиЗаполнен,
| СведенияПоТоварам.ПолныйКодМаркировки КАК ПолныйКодМаркировки,
| СведенияПоТоварам.УИН КАК УИН,
| СведенияПоТоварам.НомерОтправления КАК НомерОтправления,
| СведенияПоТоварам.НомерОтправления КАК ТекущийНомерОтправления,
| СведенияПоТоварам.НомерРодительскогоОтправления КАК НомерРодительскогоОтправления,
| СведенияПоТоварам.НомерОтправления = СведенияПоТоварам.НомерРодительскогоОтправления КАК ТоварОсновногоОтправления,
| СведенияПоТоварам.КодСтроки КАК КодСтроки,
| СведенияПоТоварам.КодСтроки <> 0 КАК КодСтрокиЗаполнен,
| СведенияПоТоварам.ДокументОтгрузки КАК ДокументОтгрузки,
| ЕСТЬNULL(ЗаказыИОтправления.Статус, СведенияПоТоварам.Статус) КАК Статус,
| ЕСТЬNULL(ЗаказыИОтправления.Статус, СведенияПоТоварам.Статус) В (&РабочиеСтатусы)КАК ЭкземплярВРаботе,
| ЕСТЬNULL(ЗаказыИОтправления.ДокументОтгрузкиКОформлению, ИСТИНА) КАК ДокументОтгрузкиКОформлению,
| СведенияПоТоварам.ИдентификаторСтроки КАК ИдентификаторСтроки,
| СведенияПоТоварам.ИдентификаторСтроки <> """" КАК ИдентификаторСтрокиЗаполнен,
| СведенияПоТоварам.КОтгрузке КАК КОтгрузке,
| СведенияПоТоварам.Отменено КАК Отменено,
| СведенияПоТоварам.ПричинаОтмены КАК ПричинаОтмены,
| СведенияПоТоварам.КодПричиныОтмены КАК КодПричиныОтмены,
| СведенияПоТоварам.НаименованиеПричиныОтмены КАК НаименованиеПричиныОтмены
|ИЗ
| СведенияПоТоварам КАК СведенияПоТоварам
| ЛЕВОЕ СОЕДИНЕНИЕ ЗаказыИОтправления КАК ЗаказыИОтправления
| ПО СведенияПоТоварам.Заказ = ЗаказыИОтправления.Заказ
| И СведенияПоТоварам.ДокументОтгрузки = ЗаказыИОтправления.ДокументОтгрузки
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатуры
| ПО СведенияПоТоварам.Номенклатура = СправочникНоменклатуры.Ссылка
|ГДЕ
| &УсловиеПоНомеруЗаписи
|
|УПОРЯДОЧИТЬ ПО
| Заказ,
| ДокументОтгрузкиКОформлению,
| ТоварОсновногоОтправления УБЫВ,
| НомерОтправления,
| ИдентификаторЭкземпляра";
ДополнитьСведенияОбОтменеСтрок(ТекстЗапроса, ОбновлятьКодыСтрокПоЗаказу);
ДополнитьСведенияПоТоварамСоставляющими(ТекстЗапроса);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Количество",
"ВЫБОР
| КОГДА &КоэффициентУпаковки = 0
| ТОГДА СведенияПоТоварам.КоличествоУпаковок
| ИНАЧЕ ВЫРАЗИТЬ(СведенияПоТоварам.КоличествоУпаковок * &КоэффициентУпаковки КАК ЧИСЛО(31, 2))
|КОНЕЦ");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&КоэффициентУпаковки",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"(ВЫБОР
| КОГДА СведенияПоТоварам.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ЕСТЬNULL(СправочникНоменклатуры.ЕдиницаИзмерения, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка))
| ИНАЧЕ СведенияПоТоварам.Упаковка
|КОНЕЦ)",
"СведенияПоТоварам.Номенклатура"));
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяПакета);
ИндексыПакетов.Добавить(ИмяПакета, ТекущийИндексПакетаЗапроса(ИндексыПакетов) + 3);
КонецПроцедуры
Процедура ДополнитьСведенияПоТоварамСоставляющими(ТекстЗапроса, ЗаменяемыйФрагмент = "", УчетнаяЗапись = Неопределено)
Если ПустаяСтрока(ЗаменяемыйФрагмент) Тогда
ЗаменяемыйФрагмент = "СведенияПоТоварамВыборка КАК СведенияПоТоварам";
КонецЕсли;
Если ЗначениеЗаполнено(УчетнаяЗапись) Тогда
ВидМаркетплейса = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ВидМаркетплейса");
Иначе
ВидМаркетплейса = Перечисления.ВидыМаркетплейсов.ПустаяСсылка();
КонецЕсли;
Соединения = Новый Массив;
Если ПолучитьФункциональнуюОпцию("ИспользоватьИнтеграциюСOzon")
И (Не ЗначениеЗаполнено(ВидМаркетплейса) Или ВидМаркетплейса = Перечисления.ВидыМаркетплейсов.МаркетплейсOzon) Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&НоменклатураЗамена",
"ЕСТЬNULL(ТоварыOzon.Номенклатура, &НоменклатураЗамена)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ХарактеристикаЗамена",
"ЕСТЬNULL(ТоварыOzon.Характеристика, &ХарактеристикаЗамена)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УпаковкаЗамена",
"ЕСТЬNULL(ТоварыOzon.Упаковка, &УпаковкаЗамена)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПредставлениеТовараЗамена",
"ЕСТЬNULL(ТоварыOzon.ПредставлениеОбъектаМаркетплейса, &ПредставлениеТовараЗамена)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&НоменклатураСтатусовПубликации", "ТоварыOzon.Номенклатура");
Соединения.Добавить("
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon КАК ТоварыOzon
| ПО СведенияПоТоварам.УчетнаяЗапись = ТоварыOzon.УчетнаяЗаписьМаркетплейса
| И (ТоварыOzon.ВидОбъектаМаркетплейса = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовМаркетплейсов.Товар))
| И СведенияПоТоварам.ИдентификаторТовара = ТоварыOzon.ИдентификаторFBSSKU");
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьИнтеграциюСЯндексМаркет")
И (Не ЗначениеЗаполнено(ВидМаркетплейса) Или ВидМаркетплейса = Перечисления.ВидыМаркетплейсов.МаркетплейсЯндексМаркет) Тогда
ПодставлятьПустуюУпаковку = (Не ЗначениеЗаполнено(ВидМаркетплейса));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&НоменклатураЗамена",
"ЕСТЬNULL(ТоварыЯндекс.Номенклатура, &НоменклатураЗамена)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ХарактеристикаЗамена",
"ЕСТЬNULL(ТоварыЯндекс.Характеристика, &ХарактеристикаЗамена)");
Если ПодставлятьПустуюУпаковку Тогда
ТекстЗапросаУпаковка =
"ВЫБОР
| КОГДА ТоварыЯндекс.Упаковка = НоменклатураЯндекс.ЕдиницаИзмерения
| ТОГДА ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ИНАЧЕ ТоварыЯндекс.Упаковка
|КОНЕЦ";
Иначе
ТекстЗапросаУпаковка = "ТоварыЯндекс.Упаковка";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УпаковкаЗамена",
СтрШаблон("ЕСТЬNULL(%1, &УпаковкаЗамена)", ТекстЗапросаУпаковка));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПредставлениеТовараЗамена",
"ЕСТЬNULL(ТоварыЯндекс.ПредставлениеТовара, &ПредставлениеТовараЗамена)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&НоменклатураСтатусовПубликации", "ТоварыЯндекс.Номенклатура");
Соединения.Добавить("
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыПубликацииТоваровЯндексМаркет КАК ТоварыЯндекс
| ПО СведенияПоТоварам.УчетнаяЗапись = ТоварыЯндекс.УчетнаяЗапись
| И СведенияПоТоварам.ИдентификаторОбъектаМаркетплейса = ТоварыЯндекс.ИдентификаторПредложения");
Если ПодставлятьПустуюУпаковку Тогда
Соединения.Добавить("
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК НоменклатураЯндекс
| ПО ТоварыЯндекс.Номенклатура = НоменклатураЯндекс.Ссылка");
КонецЕсли;
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&НоменклатураЗамена", "ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ХарактеристикаЗамена", "ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УпаковкаЗамена", "ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&НоменклатураСтатусовПубликации", "ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПредставлениеТовараЗамена", """""");
Если Соединения.Количество() > 0 Тогда
Соединения.Вставить(0, ЗаменяемыйФрагмент);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ЗаменяемыйФрагмент,
СтрСоединить(Соединения, Символы.ПС));
КонецЕсли;
КонецПроцедуры
Процедура ДополнитьСведенияОбОтменеСтрок(ТекстЗапроса, ОбновлятьКодыСтрокПоЗаказу)
Если ОбновлятьКодыСтрокПоЗаказу Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&КОтгрузке", "ЛОЖЬ");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Отменено", "ЛОЖЬ");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПричинаОтмены", "ЗНАЧЕНИЕ(Справочник.ПричиныОтменыЗаказовКлиентов.ПустаяСсылка)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&КодПричиныОтмены", "ВЫРАЗИТЬ("""" КАК СТРОКА(50))");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&НаименованиеПричиныОтмены", "ВЫРАЗИТЬ("""" КАК СТРОКА(150))");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&НомерЗаписи", "0");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПоНомеруЗаписи", "ИСТИНА");
Иначе
ЗаменяемыйФрагмент = "ЛЕВОЕ СОЕДИНЕНИЕ ЗаказыТорговыхПлощадок КАК ЗаказыТорговыхПлощадок";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ЗаменяемыйФрагмент, "
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
| ПО СведенияПоТоварам.Заказ = ЗаказКлиентаТовары.Ссылка
| И СведенияПоТоварам.КодСтроки = ЗаказКлиентаТовары.КодСтроки
| " + ЗаменяемыйФрагмент);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&КОтгрузке", "ЗаказКлиентаТовары.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Отменено", "ЕСТЬNULL(ЗаказКлиентаТовары.Отменено, ИСТИНА)");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПричинаОтмены", "ЕСТЬNULL(ЗаказКлиентаТовары.ПричинаОтмены, ЗНАЧЕНИЕ(Справочник.ПричиныОтменыЗаказовКлиентов.ПустаяСсылка))");
ЗаменяемыйФрагмент = "СведенияПоТоварамВыборка КАК СведенияПоТоварам";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ЗаменяемыйФрагмент, ЗаменяемыйФрагмент + "
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствияОбъектовМаркетплейсов КАК СоответствияОбъектов
| ПО СведенияПоТоварам.УчетнаяЗапись = СоответствияОбъектов.УчетнаяЗаписьМаркетплейса
| И СведенияПоТоварам.ПричинаОтмены = СоответствияОбъектов.Объект1С
| И (СоответствияОбъектов.ВидОбъектаМаркетплейса = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовМаркетплейсов.ПричинаОтмены))");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&КодПричиныОтмены", "ЕСТЬNULL(СоответствияОбъектов.ИдентификаторОбъектаМаркетплейса, """")");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&НаименованиеПричиныОтмены", "ЕСТЬNULL(СоответствияОбъектов.НаименованиеОбъектаМаркетплейса, """")");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&НомерЗаписи", "АВТОНОМЕРЗАПИСИ()");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПоНомеруЗаписи",
" (СведенияПоТоварам.НомерЗаписи, ИСТИНА) В
| (ВЫБРАТЬ
| МИНИМУМ(НомераСтрок.НомерЗаписи),
| ИСТИНА
| ИЗ
| СведенияПоТоварам КАК НомераСтрок
| ГДЕ
| СведенияПоТоварам.УчетнаяЗапись = НомераСтрок.УчетнаяЗапись
| И СведенияПоТоварам.Заказ = НомераСтрок.Заказ
| И СведенияПоТоварам.ИдентификаторТовара = НомераСтрок.ИдентификаторТовара
| И СведенияПоТоварам.ИдентификаторЭкземпляра = НомераСтрок.ИдентификаторЭкземпляра)");
КонецЕсли;
КонецПроцедуры
Процедура ТекстЗапросаПодготовкаДанныхПоРаспоряжениям(ТекстыЗапроса, ИндексыПакетов,
ИмяПакета = "ПодготовкаДанныхПоРаспоряжениям")
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СведенияПоТоварам.Заказ КАК Заказ,
| СведенияПоТоварам.КодСтроки КАК КодСтроки,
| СведенияПоТоварам.ИдентификаторТовара КАК ИдентификаторТовара
|ПОМЕСТИТЬ РазличныеСведенияПоТоварам
|ИЗ
| СведенияПоТоварам КАК СведенияПоТоварам
|;
|
|
|ВЫБРАТЬ
| СведенияПоТоварам.Заказ КАК Заказ,
| СведенияПоТоварам.Номенклатура КАК Номенклатура,
| СведенияПоТоварам.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА СведенияПоТоварам.Упаковка = СпрНоменклатура.ЕдиницаИзмерения
| ТОГДА ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ИНАЧЕ СведенияПоТоварам.Упаковка
| КОНЕЦ КАК Упаковка,
| МАКСИМУМ(СведенияПоТоварам.ИдентификаторТовара) КАК ИдентификаторТовара
|ПОМЕСТИТЬ ИдентификаторыТоваров
|ИЗ
| СведенияПоТоварам КАК СведенияПоТоварам
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО СведенияПоТоварам.Номенклатура = СпрНоменклатура.Ссылка
|
|СГРУППИРОВАТЬ ПО
| СведенияПоТоварам.Заказ,
| СведенияПоТоварам.Номенклатура,
| СведенияПоТоварам.Характеристика,
| ВЫБОР
| КОГДА СведенияПоТоварам.Упаковка = СпрНоменклатура.ЕдиницаИзмерения
| ТОГДА ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ИНАЧЕ СведенияПоТоварам.Упаковка
| КОНЕЦ
|;
|
|
|ВЫБРАТЬ
| РаспоряженияНаОтгрузку.Распоряжение КАК Заказ,
| ВЫБОР
| КОГДА РаспоряженияНаОтгрузку.ОтгруженоКоличествоОборот <> 0
| ТОГДА РаспоряженияНаОтгрузку.Регистратор
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК ДокументОтгрузки,
| РаспоряженияНаОтгрузку.Склад КАК Склад,
| РаспоряженияНаОтгрузку.КодСтроки КАК КодСтроки,
| (СУММА(РаспоряженияНаОтгрузку.КОтгрузкеКоличествоОборот) -
| СУММА(РаспоряженияНаОтгрузку.ОтгруженоКоличествоОборот)) > 0 КАК КОтгрузке,
| СУММА(ВЫБОР
| КОГДА РаспоряженияНаОтгрузку.ЗаказаноКоличествоОборот > 0
| ТОГДА РаспоряженияНаОтгрузку.ЗаказаноКоличествоОборот
| КОГДА РаспоряженияНаОтгрузку.КОтгрузкеКоличествоОборот > 0
| ТОГДА РаспоряженияНаОтгрузку.КОтгрузкеКоличествоОборот
| КОГДА РаспоряженияНаОтгрузку.ОтгруженоКоличествоОборот > 0
| ТОГДА РаспоряженияНаОтгрузку.ОтгруженоКоличествоОборот
| ИНАЧЕ 0
| КОНЕЦ) КАК Количество,
| СУММА(РаспоряженияНаОтгрузку.ОтмененоКоличествоОборот) КАК КоличествоОтменено
|ПОМЕСТИТЬ РаспоряженияНаОтгрузкуОбороты
|ИЗ
| #РаспоряженияНаОтгрузкуОборотыРазвернутая КАК РаспоряженияНаОтгрузку
|
|СГРУППИРОВАТЬ ПО
| РаспоряженияНаОтгрузку.Распоряжение,
|ВЫБОР
| КОГДА РаспоряженияНаОтгрузку.ОтгруженоКоличествоОборот <> 0
| ТОГДА РаспоряженияНаОтгрузку.Регистратор
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ,
| РаспоряженияНаОтгрузку.Склад,
| РаспоряженияНаОтгрузку.КодСтроки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыЗаказа.Ссылка,
| НЕОПРЕДЕЛЕНО,
| ТоварыЗаказа.Склад,
| ТоварыЗаказа.КодСтроки,
| ЛОЖЬ,
| ТоварыЗаказа.Количество,
| ВЫБОР
| КОГДА ТоварыЗаказа.Отменено
| ТОГДА ТоварыЗаказа.Количество
| ИНАЧЕ 0
| КОНЕЦ
|ИЗ
| Документ.ЗаказКлиента.Товары КАК ТоварыЗаказа
|ГДЕ
| ТоварыЗаказа.Ссылка В(&СписокЗаказов)
| И НЕ ТоварыЗаказа.Ссылка.Проведен
|
|ИНДЕКСИРОВАТЬ ПО
| Заказ,
| КодСтроки
|;
|
|
|ВЫБРАТЬ
| РаспоряженияНаОтгрузку.Заказ КАК Заказ,
| РаспоряженияНаОтгрузку.ДокументОтгрузки КАК ДокументОтгрузки,
| РаспоряженияНаОтгрузку.Склад КАК Склад,
| РаспоряженияНаОтгрузку.КодСтроки КАК КодСтроки,
| РаспоряженияНаОтгрузку.КОтгрузке КАК КОтгрузке,
| РаспоряженияНаОтгрузку.Количество КАК Количество,
| РаспоряженияНаОтгрузку.КоличествоОтменено КАК КоличествоОтменено,
| ЗаказыТорговыхПлощадок.УчетнаяЗапись КАК УчетнаяЗапись,
| ЗаказыТорговыхПлощадок.Статус КАК Статус,
| ЗаказыТорговыхПлощадок.ИдентификаторЗаказа КАК ИдентификаторЗаказа,
| ЗаказыТорговыхПлощадок.НомерЗаказа КАК НомерЗаказа,
| ЗаказыТорговыхПлощадок.ДатаСозданияЗаказа КАК ДатаСозданияЗаказа,
| ЗаказыТорговыхПлощадок.СрокОтгрузки КАК СрокОтгрузки,
| ЗаказыТорговыхПлощадок.ИдентификаторСкладаТорговойПлощадки КАК ИдентификаторСкладаТорговойПлощадки,
| ЗаказыТорговыхПлощадок.НаименованиеСкладаТорговойПлощадки КАК НаименованиеСкладаТорговойПлощадки,
| ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
| ЗаказКлиентаТовары.Характеристика КАК Характеристика,
| ЗаказКлиентаТовары.Упаковка КАК Упаковка,
| ВЫБОР
| КОГДА ЗаказКлиентаТовары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА ЕСТЬNULL(СправНоменклатура.ЕдиницаИзмерения, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка))
| ИНАЧЕ ЗаказКлиентаТовары.Упаковка
| КОНЕЦ КАК УпаковкаСправочно,
| ЗаказКлиентаТовары.СтавкаНДС КАК СтавкаНДС,
| ЗаказКлиентаТовары.Цена КАК Цена,
| ЗаказКлиентаТовары.СуммаРучнойСкидки КАК СуммаРучнойСкидки,
| ЗаказКлиентаТовары.ПричинаОтмены КАК ПричинаОтмены
|ПОМЕСТИТЬ ДанныеПоРаспоряжениямВыборка
|ИЗ
| РаспоряженияНаОтгрузкуОбороты КАК РаспоряженияНаОтгрузку
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗаказыТорговыхПлощадок КАК ЗаказыТорговыхПлощадок
| ПО РаспоряженияНаОтгрузку.Заказ = ЗаказыТорговыхПлощадок.Заказ
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
| ПО РаспоряженияНаОтгрузку.Заказ = ЗаказКлиентаТовары.Ссылка
| И РаспоряженияНаОтгрузку.КодСтроки = ЗаказКлиентаТовары.КодСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправНоменклатура
| ПО (ЗаказКлиентаТовары.Номенклатура = СправНоменклатура.Ссылка)
|;
|
|
|УНИЧТОЖИТЬ РаспоряженияНаОтгрузкуОбороты
|;
|
|
|ВЫБРАТЬ
| ДанныеПоРаспоряжениям.Заказ КАК Заказ,
| ДанныеПоРаспоряжениям.ДокументОтгрузки КАК ДокументОтгрузки,
| ДанныеПоРаспоряжениям.ДокументОтгрузки <> НЕОПРЕДЕЛЕНО КАК ЭтоОтгрузка,
| ЕСТЬNULL(ЗаказыИОтправления.УчетнаяЗапись, ДанныеПоРаспоряжениям.УчетнаяЗапись) КАК УчетнаяЗапись,
| ЕСТЬNULL(ЗаказыИОтправления.Статус, ДанныеПоРаспоряжениям.Статус) КАК Статус,
| ЕСТЬNULL(ЗаказыИОтправления.НомерОтправления, """") КАК НомерОтправления,
| ЕСТЬNULL(ЗаказыИОтправления.ЭтоОсновноеОтправление, ЛОЖЬ) КАК ЭтоОсновноеОтправление,
| ЕСТЬNULL(ЗаказыИОтправления.НомерРодительскогоОтправления, """") КАК НомерРодительскогоОтправления,
| ДанныеПоРаспоряжениям.Склад КАК Склад,
| ДанныеПоРаспоряжениям.КодСтроки КАК КодСтроки,
| ДанныеПоРаспоряжениям.КОтгрузке КАК КОтгрузке,
| ДанныеПоРаспоряжениям.ИдентификаторЗаказа КАК ИдентификаторЗаказа,
| ДанныеПоРаспоряжениям.НомерЗаказа КАК НомерЗаказа,
| ДанныеПоРаспоряжениям.ДатаСозданияЗаказа КАК ДатаСозданияЗаказа,
| ДанныеПоРаспоряжениям.СрокОтгрузки КАК СрокОтгрузки,
| ДанныеПоРаспоряжениям.ИдентификаторСкладаТорговойПлощадки КАК ИдентификаторСкладаТорговойПлощадки,
| ДанныеПоРаспоряжениям.НаименованиеСкладаТорговойПлощадки КАК НаименованиеСкладаТорговойПлощадки,
| &ИдентификаторТовара КАК ИдентификаторТовара,
| ДанныеПоРаспоряжениям.Номенклатура КАК Номенклатура,
| ДанныеПоРаспоряжениям.Характеристика КАК Характеристика,
| ДанныеПоРаспоряжениям.Упаковка КАК Упаковка,
| ДанныеПоРаспоряжениям.СтавкаНДС КАК СтавкаНДС,
| ДанныеПоРаспоряжениям.Цена КАК Цена,
| ДанныеПоРаспоряжениям.СуммаРучнойСкидки КАК СуммаРучнойСкидки,
| ВЫБОР
| КОГДА ДанныеПоРаспоряжениям.КоличествоОтменено > 0
| ТОГДА ДанныеПоРаспоряжениям.КоличествоОтменено
| ИНАЧЕ ДанныеПоРаспоряжениям.Количество
| КОНЕЦ КАК Количество,
| ДанныеПоРаспоряжениям.КоличествоОтменено > 0 КАК Отменено,
| ДанныеПоРаспоряжениям.ПричинаОтмены КАК ПричинаОтмены
|ПОМЕСТИТЬ ДанныеПоРаспоряжениям
|ИЗ
| ДанныеПоРаспоряжениямВыборка КАК ДанныеПоРаспоряжениям
| ЛЕВОЕ СОЕДИНЕНИЕ ЗаказыИОтправления КАК ЗаказыИОтправления
| ПО ДанныеПоРаспоряжениям.Заказ = ЗаказыИОтправления.Заказ
| И ДанныеПоРаспоряжениям.ДокументОтгрузки = ЗаказыИОтправления.ДокументОтгрузки
|
|ИНДЕКСИРОВАТЬ ПО
| Заказ,
| ДокументОтгрузки,
| КодСтроки
|;
|
|
|УНИЧТОЖИТЬ ДанныеПоРаспоряжениямВыборка";
ПараметрыФормированияТаблицы = РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.НовыйПараметрыФормированияРазвернутойТаблицы();
ПараметрыФормированияТаблицы.НачалоПериода = "&НачПериодРаспоряженияНаОтгрузку";
ПараметрыФормированияТаблицы.КонецПериода = "&КонПериодРаспоряженияНаОтгрузку";
ПараметрыФормированияТаблицы.Периодичность = "Регистратор";
ПараметрыФормированияТаблицы.ТекстУсловия =
"Распоряжение В (&СписокЗаказов)";
ПараметрыФормированияТаблицы.Группировка = "Регистратор, Распоряжение, КодСтроки, Склад";
ПараметрыФормированияТаблицы.Показатели = "Заказано, Отменено, КОтгрузке, Отгружено";
ПараметрыФормированияТаблицы.Ресурсы = "Количество";
РаспоряженияНаОтгрузкуОборотыРазвернутая =
РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.ТекстЗапросаРазвернутаяТаблица(
ПараметрыФормированияТаблицы);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"#РаспоряженияНаОтгрузкуОборотыРазвернутая",
РаспоряженияНаОтгрузкуОборотыРазвернутая);
ДополнитьИдентификаторамиТоваров(ТекстЗапроса);
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяПакета);
ИндексыПакетов.Добавить(ИмяПакета, ТекущийИндексПакетаЗапроса(ИндексыПакетов) + 6);
КонецПроцедуры
Процедура ДополнитьИдентификаторамиТоваров(ТекстЗапроса, ЗаменяемыйФрагмент = "",
СведенияПоТоварамИспользуются = Истина)
Если ПустаяСтрока(ЗаменяемыйФрагмент) Тогда
ЗаменяемыйФрагмент = "ДанныеПоРаспоряжениямВыборка КАК ДанныеПоРаспоряжениям";
КонецЕсли;
Соединения = Новый Массив;
Если ПолучитьФункциональнуюОпцию("ИспользоватьИнтеграциюСOzon") Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИдентификаторТовара",
"ЕСТЬNULL(ТоварыOzon.ИдентификаторFBSSKU, &ИдентификаторТовара)");
Соединения.Добавить("
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыПубликацииОбъектовМаркетплейсаOzon КАК ТоварыOzon
| ПО ДанныеПоРаспоряжениям.УчетнаяЗапись = ТоварыOzon.УчетнаяЗаписьМаркетплейса
| И ДанныеПоРаспоряжениям.Номенклатура = ТоварыOzon.Номенклатура
| И ДанныеПоРаспоряжениям.Характеристика = ТоварыOzon.Характеристика
| И ДанныеПоРаспоряжениям.Упаковка = ТоварыOzon.Упаковка
| И (ТоварыOzon.ВидОбъектаМаркетплейса = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовМаркетплейсов.Товар))");
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьИнтеграциюСЯндексМаркет") Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИдентификаторТовара",
"ЕСТЬNULL(ИдентификаторыТоваров.ИдентификаторТовара, &ИдентификаторТовара)");
Соединения.Добавить("
| ЛЕВОЕ СОЕДИНЕНИЕ ИдентификаторыТоваров КАК ИдентификаторыТоваров
| ПО ДанныеПоРаспоряжениям.Заказ = ИдентификаторыТоваров.Заказ
| И ДанныеПоРаспоряжениям.Номенклатура = ИдентификаторыТоваров.Номенклатура
| И ДанныеПоРаспоряжениям.Характеристика = ИдентификаторыТоваров.Характеристика
| И ДанныеПоРаспоряжениям.Упаковка = ИдентификаторыТоваров.Упаковка");
КонецЕсли;
Если СведенияПоТоварамИспользуются Тогда
Соединения.Добавить("
| ЛЕВОЕ СОЕДИНЕНИЕ РазличныеСведенияПоТоварам КАК СведенияПоТоварам
| ПО ДанныеПоРаспоряжениям.Заказ = СведенияПоТоварам.Заказ
| И ДанныеПоРаспоряжениям.КодСтроки = СведенияПоТоварам.КодСтроки");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИдентификаторТовара",
"ЕСТЬNULL(СведенияПоТоварам.ИдентификаторТовара, &ИдентификаторТовара)");
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИдентификаторТовара", """""");
Если Соединения.Количество() > 0 Тогда
Соединения.Вставить(0, ЗаменяемыйФрагмент);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ЗаменяемыйФрагмент,
СтрСоединить(Соединения, Символы.ПС));
КонецЕсли;
КонецПроцедуры
Процедура ТекстЗапросаДокументыОтгрузки(ТекстыЗапроса, ИндексыПакетов,
ИмяПакета = "ДокументыОтгрузки")
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДанныеПоРаспоряжениям.Заказ КАК Заказ,
| ДанныеПоРаспоряжениям.УчетнаяЗапись КАК УчетнаяЗапись,
| ДанныеПоРаспоряжениям.ИдентификаторЗаказа КАК ИдентификаторЗаказа,
| ДанныеПоРаспоряжениям.НомерЗаказа КАК НомерЗаказа,
| ДанныеПоРаспоряжениям.ДатаСозданияЗаказа КАК ДатаСозданияЗаказа,
| ДанныеПоРаспоряжениям.СрокОтгрузки КАК СрокОтгрузки,
| ДанныеПоРаспоряжениям.ИдентификаторСкладаТорговойПлощадки КАК ИдентификаторСкладаТорговойПлощадки,
| ДанныеПоРаспоряжениям.НаименованиеСкладаТорговойПлощадки КАК НаименованиеСкладаТорговойПлощадки,
| ДанныеПоРаспоряжениям.ДокументОтгрузки КАК ДокументОтгрузки,
| ВЫБОР
| КОГДА ДанныеПоРаспоряжениям.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
| ТОГДА ВЫРАЗИТЬ(ДанныеПоРаспоряжениям.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Номер
| КОГДА ДанныеПоРаспоряжениям.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
| ТОГДА ВЫРАЗИТЬ(ДанныеПоРаспоряжениям.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Номер
| ИНАЧЕ """"
| КОНЕЦ КАК НомерДокументаОтгрузки,
| ВЫБОР
| КОГДА ДанныеПоРаспоряжениям.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
| ТОГДА ВЫРАЗИТЬ(ДанныеПоРаспоряжениям.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Дата
| КОГДА ДанныеПоРаспоряжениям.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
| ТОГДА ВЫРАЗИТЬ(ДанныеПоРаспоряжениям.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Дата
| ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
| КОНЕЦ КАК ДатаДокументаОтгрузки,
| ДанныеПоРаспоряжениям.НомерОтправления КАК НомерОтправления,
| ДанныеПоРаспоряжениям.НомерРодительскогоОтправления КАК НомерРодительскогоОтправления,
| ВЫБОР
| КОГДА ДанныеПоРаспоряжениям.НомерОтправления = """"
| ТОГДА NULL
| КОГДА ДанныеПоРаспоряжениям.ЭтоОсновноеОтправление
| ТОГДА NULL
| ИНАЧЕ ДанныеПоРаспоряжениям.НомерОтправления
| КОНЕЦ КАК НомерНовогоОтправления,
| ДанныеПоРаспоряжениям.Статус КАК Статус,
| ВЫБОР
| КОГДА ДанныеПоРаспоряжениям.ДокументОтгрузки = НЕОПРЕДЕЛЕНО
| ТОГДА 4
| ИНАЧЕ 3
| КОНЕЦ КАК Уровень,
| ВЫБОР
| КОГДА ДанныеПоРаспоряжениям.ЭтоОсновноеОтправление
| ТОГДА 1
| КОГДА ДанныеПоРаспоряжениям.НомерОтправления <> """"
| ТОГДА 2
| ИНАЧЕ 3
| КОНЕЦ КАК Порядок
|ИЗ
| ДанныеПоРаспоряжениям КАК ДанныеПоРаспоряжениям
|ГДЕ
| ДанныеПоРаспоряжениям.ЭтоОтгрузка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗаказыИОтправления.Заказ,
| ЗаказыИОтправления.УчетнаяЗапись,
| ЗаказыИОтправления.ИдентификаторЗаказа,
| ЗаказыИОтправления.НомерЗаказа,
| ЗаказыИОтправления.ДатаСозданияЗаказа,
| ЗаказыИОтправления.СрокОтгрузки,
| ЗаказыИОтправления.ИдентификаторСкладаТорговойПлощадки,
| ЗаказыИОтправления.НаименованиеСкладаТорговойПлощадки,
| ЗаказыИОтправления.ДокументОтгрузки,
| ВЫБОР
| КОГДА ЗаказыИОтправления.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
| ТОГДА ВЫРАЗИТЬ(ЗаказыИОтправления.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Номер
| КОГДА ЗаказыИОтправления.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
| ТОГДА ВЫРАЗИТЬ(ЗаказыИОтправления.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Номер
| ИНАЧЕ """"
| КОНЕЦ,
| ВЫБОР
| КОГДА ЗаказыИОтправления.ДокументОтгрузки ССЫЛКА Документ.ПередачаТоваровХранителю
| ТОГДА ВЫРАЗИТЬ(ЗаказыИОтправления.ДокументОтгрузки КАК Документ.ПередачаТоваровХранителю).Дата
| КОГДА ЗаказыИОтправления.ДокументОтгрузки ССЫЛКА Документ.РеализацияТоваровУслуг
| ТОГДА ВЫРАЗИТЬ(ЗаказыИОтправления.ДокументОтгрузки КАК Документ.РеализацияТоваровУслуг).Дата
| ИНАЧЕ """"
| КОНЕЦ,
| ЗаказыИОтправления.НомерОтправления,
| ЗаказыИОтправления.НомерРодительскогоОтправления,
| ВЫБОР
| КОГДА ЗаказыИОтправления.НомерОтправления = """"
| ТОГДА NULL
| КОГДА ЗаказыИОтправления.ЭтоОсновноеОтправление
| ТОГДА NULL
| ИНАЧЕ ЗаказыИОтправления.НомерОтправления
| КОНЕЦ,
| ЗаказыИОтправления.Статус,
| ВЫБОР
| КОГДА ЗаказыИОтправления.ДокументОтгрузки = НЕОПРЕДЕЛЕНО
| ТОГДА 2
| ИНАЧЕ 1
| КОНЕЦ,
| ВЫБОР
| КОГДА ЗаказыИОтправления.ЭтоОсновноеОтправление
| ТОГДА 1
| КОГДА ЗаказыИОтправления.НомерОтправления <> """"
| ТОГДА 2
| ИНАЧЕ 3
| КОНЕЦ
|ИЗ
| ЗаказыИОтправления КАК ЗаказыИОтправления
|ГДЕ
| ЗаказыИОтправления.ДокументОтгрузкиКОформлению
|
|УПОРЯДОЧИТЬ ПО
| Уровень,
| Порядок,
| НомерОтправления,
| НомерДокументаОтгрузки
|ИТОГИ
| МАКСИМУМ(НомерНовогоОтправления)
|ПО
| Заказ";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяПакета);
ИндексыПакетов.Добавить(ИмяПакета, ТекущийИндексПакетаЗапроса(ИндексыПакетов));
КонецПроцедуры
Процедура ТекстЗапросаДанныеПоРаспоряжениям(ТекстыЗапроса, ИндексыПакетов,
ИмяПакета = "ДанныеПоРаспоряжениям")
ТекстЗапроса =
"ВЫБРАТЬ
| АВТОНОМЕРЗАПИСИ() КАК НомерЗаписи,
| ДанныеПоРаспоряжениям.УчетнаяЗапись КАК УчетнаяЗапись,
| ДанныеПоРаспоряжениям.Заказ КАК Заказ,
| ДанныеПоРаспоряжениям.КодСтроки КАК КодСтроки,
| ДанныеПоРаспоряжениям.КОтгрузке КАК КОтгрузке,
| ДанныеПоРаспоряжениям.ИдентификаторТовара КАК ИдентификаторТовара,
| ДанныеПоРаспоряжениям.Номенклатура КАК Номенклатура,
| ДанныеПоРаспоряжениям.Характеристика КАК Характеристика,
| ДанныеПоРаспоряжениям.Упаковка КАК Упаковка,
| ДанныеПоРаспоряжениям.СтавкаНДС КАК СтавкаНДС,
| ДанныеПоРаспоряжениям.Цена КАК Цена,
| ДанныеПоРаспоряжениям.СуммаРучнойСкидки КАК СуммаРучнойСкидки,
| ВЫБОР
| КОГДА ДанныеПоРаспоряжениям.Количество = 0
| ТОГДА 0
| ИНАЧЕ ВЫРАЗИТЬ(ДанныеПоРаспоряжениям.СуммаРучнойСкидки / ДанныеПоРаспоряжениям.Количество КАК ЧИСЛО(31, 2))
| КОНЕЦ КАК ЗначениеРучнойСкидки,
| ДанныеПоРаспоряжениям.Склад КАК Склад,
| ДанныеПоРаспоряжениям.Количество КАК Количество,
| ДанныеПоРаспоряжениям.Отменено КАК Отменено,
| ДанныеПоРаспоряжениям.ПричинаОтмены КАК ПричинаОтмены,
| ЕСТЬNULL(СоответствияОбъектов.ИдентификаторОбъектаМаркетплейса, """") КАК КодПричиныОтмены,
| ЕСТЬNULL(СоответствияОбъектов.НаименованиеОбъектаМаркетплейса, """") КАК НаименованиеПричиныОтмены
|ПОМЕСТИТЬ ВТ_ДанныеПоРаспоряжениям
|ИЗ
| ДанныеПоРаспоряжениям КАК ДанныеПоРаспоряжениям
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствияОбъектовМаркетплейсов КАК СоответствияОбъектов
| ПО ДанныеПоРаспоряжениям.УчетнаяЗапись = СоответствияОбъектов.УчетнаяЗаписьМаркетплейса
| И ДанныеПоРаспоряжениям.ПричинаОтмены = СоответствияОбъектов.Объект1С
| И (СоответствияОбъектов.ВидОбъектаМаркетплейса = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовМаркетплейсов.ПричинаОтмены))
|ГДЕ
| ДанныеПоРаспоряжениям.ДокументОтгрузки = НЕОПРЕДЕЛЕНО
|
|ИНДЕКСИРОВАТЬ ПО
| УчетнаяЗапись,
| Заказ,
| ИдентификаторТовара,
| КодСтроки
|;
|
|
|ВЫБРАТЬ
| ДанныеПоРаспоряжениям.УчетнаяЗапись КАК УчетнаяЗапись,
| ДанныеПоРаспоряжениям.Заказ КАК Заказ,
| ДанныеПоРаспоряжениям.КодСтроки КАК КодСтроки,
| ДанныеПоРаспоряжениям.КОтгрузке КАК КОтгрузке,
| ДанныеПоРаспоряжениям.ИдентификаторТовара КАК ИдентификаторТовара,
| ДанныеПоРаспоряжениям.Номенклатура КАК Номенклатура,
| ДанныеПоРаспоряжениям.Характеристика КАК Характеристика,
| ДанныеПоРаспоряжениям.Упаковка КАК Упаковка,
| ДанныеПоРаспоряжениям.СтавкаНДС КАК СтавкаНДС,
| ДанныеПоРаспоряжениям.Цена КАК Цена,
| ДанныеПоРаспоряжениям.СуммаРучнойСкидки КАК СуммаРучнойСкидки,
| ДанныеПоРаспоряжениям.ЗначениеРучнойСкидки КАК ЗначениеРучнойСкидки,
| ДанныеПоРаспоряжениям.Склад КАК Склад,
| ДанныеПоРаспоряжениям.Количество КАК Количество,
| ДанныеПоРаспоряжениям.Отменено КАК Отменено,
| ДанныеПоРаспоряжениям.ПричинаОтмены КАК ПричинаОтмены,
| ДанныеПоРаспоряжениям.КодПричиныОтмены КАК КодПричиныОтмены,
| ДанныеПоРаспоряжениям.НаименованиеПричиныОтмены КАК НаименованиеПричиныОтмены
|ИЗ
| ВТ_ДанныеПоРаспоряжениям КАК ДанныеПоРаспоряжениям
|ГДЕ
| (ДанныеПоРаспоряжениям.НомерЗаписи, ИСТИНА) В
| (ВЫБРАТЬ
| МИНИМУМ(НомераСтрок.НомерЗаписи),
| ИСТИНА
| ИЗ
| ВТ_ДанныеПоРаспоряжениям КАК НомераСтрок
| ГДЕ
| ДанныеПоРаспоряжениям.УчетнаяЗапись = НомераСтрок.УчетнаяЗапись
| И ДанныеПоРаспоряжениям.Заказ = НомераСтрок.Заказ
| И ДанныеПоРаспоряжениям.ИдентификаторТовара = НомераСтрок.ИдентификаторТовара
| И ДанныеПоРаспоряжениям.КодСтроки = НомераСтрок.КодСтроки)";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяПакета);
ИндексыПакетов.Добавить(ИмяПакета, ТекущийИндексПакетаЗапроса(ИндексыПакетов) + 1);
КонецПроцедуры
Процедура ТекстЗапросаПодготовкаТоваровДокументовОтгрузкиКОформлению(ТекстыЗапроса, ИндексыПакетов,
ИмяПакета = "ПодготовкаТоваровДокументовОтгрузкиКОформлению")
ТекстЗапроса =
"ВЫБРАТЬ
| ЗаказыИОтправления.УчетнаяЗапись КАК УчетнаяЗапись,
| ЗаказыИОтправления.Заказ КАК Заказ,
| ЗаказыИОтправления.ДокументОтгрузки КАК ДокументОтгрузки,
| ЗаказыИОтправления.НомерОтправления КАК НомерОтправления,
| ЕСТЬNULL(ЕСТЬNULL(ТоварыПередачи.Склад, ТоварыРеализации.Склад), ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)) КАК Склад,
| ЕСТЬNULL(ЕСТЬNULL(ТоварыПередачи.КодСтроки, ТоварыРеализации.КодСтроки), 0) КАК КодСтроки,
| ЕСТЬNULL(ЕСТЬNULL(ТоварыПередачи.ИдентификаторСтроки, ТоварыРеализации.ИдентификаторСтроки), """") КАК ИдентификаторСтроки,
| ЕСТЬNULL(ТоварыРеализации.ОбъектРасчетов, НЕОПРЕДЕЛЕНО) КАК ОбъектРасчетов,
| ЕСТЬNULL(ЕСТЬNULL(ТоварыПередачи.АналитикаУчетаНоменклатуры, ТоварыРеализации.АналитикаУчетаНоменклатуры), НЕОПРЕДЕЛЕНО) КАК АналитикаУчетаНоменклатуры,
| ЕСТЬNULL(ЕСТЬNULL(ТоварыПередачи.АналитикаУчетаНаборов, ТоварыРеализации.АналитикаУчетаНаборов), НЕОПРЕДЕЛЕНО) КАК АналитикаУчетаНаборов,
| ЕСТЬNULL(ЕСТЬNULL(ТоварыПередачи.Номенклатура, ТоварыРеализации.Номенклатура), ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК Номенклатура,
| ЕСТЬNULL(ЕСТЬNULL(ТоварыПередачи.Характеристика, ТоварыРеализации.Характеристика), ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК Характеристика,
| ЕСТЬNULL(ЕСТЬNULL(ТоварыПередачи.Упаковка, ТоварыРеализации.Упаковка), ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) КАК Упаковка,
| ВЫБОР
| КОГДА ТоварыПередачи.Упаковка ЕСТЬ НЕ NULL
| ТОГДА ВЫБОР
| КОГДА ТоварыПередачи.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА СправНоменклатура1.ЕдиницаИзмерения
| ИНАЧЕ ТоварыПередачи.Упаковка
| КОНЕЦ
| КОГДА ТоварыРеализации.Упаковка ЕСТЬ НЕ NULL
| ТОГДА ВЫБОР
| КОГДА ТоварыРеализации.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| ТОГДА СправНоменклатура2.ЕдиницаИзмерения
| ИНАЧЕ ТоварыРеализации.Упаковка
| КОНЕЦ
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
| КОНЕЦ КАК УпаковкаСправочно,
| ЕСТЬNULL(ЕСТЬNULL(ТоварыПередачи.Количество, ТоварыРеализации.Количество), 0) КАК Количество
|ПОМЕСТИТЬ ТоварыДокументовОтгрузкиКОформлению
|ИЗ
| ЗаказыИОтправления КАК ЗаказыИОтправления
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПередачаТоваровХранителю.Товары КАК ТоварыПередачи
| ПО ЗаказыИОтправления.ДокументОтгрузки = ТоварыПередачи.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправНоменклатура1
| ПО (ТоварыПередачи.Номенклатура = СправНоменклатура1.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК ТоварыРеализации
| ПО ЗаказыИОтправления.ДокументОтгрузки = ТоварыРеализации.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправНоменклатура2
| ПО (ТоварыРеализации.Номенклатура = СправНоменклатура2.Ссылка)
|ГДЕ
| ЗаказыИОтправления.ДокументОтгрузкиКОформлению";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяПакета);
ИндексыПакетов.Добавить(ИмяПакета, ТекущийИндексПакетаЗапроса(ИндексыПакетов));
КонецПроцедуры
Процедура ТекстЗапросаПодготовкаТоваровДокументовОтгрузки(ТекстыЗапроса, ИндексыПакетов,
ИмяПакета = "ПодготовкаТоваровДокументовОтгрузки")
ТекстЗапроса =
"ВЫБРАТЬ
| ДанныеПоРаспоряжениям.УчетнаяЗапись КАК УчетнаяЗапись,
| ДанныеПоРаспоряжениям.Заказ КАК Заказ,
| ДанныеПоРаспоряжениям.ДокументОтгрузки КАК ДокументОтгрузки,
| ЛОЖЬ КАК ДокументОтгрузкиКОформлению,
| ДанныеПоРаспоряжениям.НомерОтправления КАК НомерОтправления,
| ДанныеПоРаспоряжениям.Склад КАК Склад,
| ДанныеПоРаспоряжениям.КодСтроки КАК КодСтроки,
| ДанныеПоРаспоряжениям.ИдентификаторТовара КАК ИдентификаторТовара,
| ЕСТЬNULL(ЕСТЬNULL(ТоварыПередачи.ИдентификаторСтроки, ТоварыРеализации.ИдентификаторСтроки), """") КАК ИдентификаторСтроки,
| ЕСТЬNULL(ТоварыРеализации.ОбъектРасчетов, НЕОПРЕДЕЛЕНО) КАК ОбъектРасчетов,
| ЕСТЬNULL(ЕСТЬNULL(ТоварыПередачи.АналитикаУчетаНоменклатуры, ТоварыРеализации.АналитикаУчетаНоменклатуры), НЕОПРЕДЕЛЕНО) КАК АналитикаУчетаНоменклатуры,
| ЕСТЬNULL(ЕСТЬNULL(ТоварыПередачи.АналитикаУчетаНаборов, ТоварыРеализации.АналитикаУчетаНаборов), НЕОПРЕДЕЛЕНО) КАК АналитикаУчетаНаборов,
| ДанныеПоРаспоряжениям.Номенклатура КАК Номенклатура,
| ДанныеПоРаспоряжениям.Характеристика КАК Характеристика,
| ДанныеПоРаспоряжениям.Упаковка КАК Упаковка,
| ЕСТЬNULL(ЕСТЬNULL(ТоварыПередачи.Количество, ТоварыРеализации.Количество), 0) КАК Количество,
| 1 КАК Порядок
|ПОМЕСТИТЬ ТоварыДокументовОтгрузки
|ИЗ
| ДанныеПоРаспоряжениям КАК ДанныеПоРаспоряжениям
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПередачаТоваровХранителю.Товары КАК ТоварыПередачи
| ПО ДанныеПоРаспоряжениям.ДокументОтгрузки = ТоварыПередачи.Ссылка
| И ДанныеПоРаспоряжениям.Заказ = ТоварыПередачи.ЗаказКлиента
| И ДанныеПоРаспоряжениям.КодСтроки = ТоварыПередачи.КодСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК ТоварыРеализации
| ПО ДанныеПоРаспоряжениям.ДокументОтгрузки = ТоварыРеализации.Ссылка
| И ДанныеПоРаспоряжениям.Заказ = ТоварыРеализации.ЗаказКлиента
| И ДанныеПоРаспоряжениям.КодСтроки = ТоварыРеализации.КодСтроки
|ГДЕ
| ДанныеПоРаспоряжениям.ЭтоОтгрузка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ДанныеПоРаспоряжениям.УчетнаяЗапись,
| ДанныеПоРаспоряжениям.Заказ,
| ДанныеПоРаспоряжениям.ДокументОтгрузки,
| ИСТИНА,
| ДанныеПоРаспоряжениям.НомерОтправления,
| ДанныеПоРаспоряжениям.Склад,
| ДанныеПоРаспоряжениям.КодСтроки,
| &ИдентификаторТовара,
| ДанныеПоРаспоряжениям.ИдентификаторСтроки,
| ДанныеПоРаспоряжениям.ОбъектРасчетов,
| ДанныеПоРаспоряжениям.АналитикаУчетаНоменклатуры,
| ДанныеПоРаспоряжениям.АналитикаУчетаНаборов,
| ДанныеПоРаспоряжениям.Номенклатура,
| ДанныеПоРаспоряжениям.Характеристика,
| ДанныеПоРаспоряжениям.Упаковка,
| ДанныеПоРаспоряжениям.Количество,
| 2
|ИЗ
| ТоварыДокументовОтгрузкиКОформлению КАК ДанныеПоРаспоряжениям";
ДополнитьИдентификаторамиТоваров(ТекстЗапроса, "ТоварыДокументовОтгрузкиКОформлению КАК ДанныеПоРаспоряжениям");
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяПакета);
ИндексыПакетов.Добавить(ИмяПакета, ТекущийИндексПакетаЗапроса(ИндексыПакетов));
КонецПроцедуры
Процедура ТекстЗапросаТоварыДокументовОтгрузки(ТекстыЗапроса, ИндексыПакетов,
ИмяПакета = "ТоварыДокументовОтгрузки")
ТекстЗапроса =
"ВЫБРАТЬ
| ТоварыДокументовОтгрузки.УчетнаяЗапись КАК УчетнаяЗапись,
| ТоварыДокументовОтгрузки.Заказ КАК Заказ,
| ТоварыДокументовОтгрузки.ДокументОтгрузки КАК ДокументОтгрузки,
| ТоварыДокументовОтгрузки.ДокументОтгрузкиКОформлению КАК ДокументОтгрузкиКОформлению,
| ТоварыДокументовОтгрузки.Склад КАК Склад,
| ТоварыДокументовОтгрузки.КодСтроки КАК КодСтроки,
| ТоварыДокументовОтгрузки.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ТоварыДокументовОтгрузки.НомерОтправления КАК НомерОтправления,
| ТоварыДокументовОтгрузки.Номенклатура КАК Номенклатура,
| ТоварыДокументовОтгрузки.Характеристика КАК Характеристика,
| ТоварыДокументовОтгрузки.Упаковка КАК Упаковка,
| ТоварыДокументовОтгрузки.ИдентификаторТовара КАК ИдентификаторТовара,
| ТоварыДокументовОтгрузки.Количество КАК Количество,
| ТоварыДокументовОтгрузки.Порядок КАК Порядок
|ИЗ
| ТоварыДокументовОтгрузки КАК ТоварыДокументовОтгрузки
|
|УПОРЯДОЧИТЬ ПО
| Порядок";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяПакета);
ИндексыПакетов.Добавить(ИмяПакета, ТекущийИндексПакетаЗапроса(ИндексыПакетов));
КонецПроцедуры
Процедура ТекстЗапросаДанныеПоНомерамГТДДокументовОтгрузки(ТекстыЗапроса, ИндексыПакетов,
ИмяПакета = "ДанныеПоНомерамГТДДокументовОтгрузки")
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТоварыДокументовОтгрузки.Заказ КАК Заказ,
| ТоварыДокументовОтгрузки.ДокументОтгрузки КАК ДокументОтгрузки,
| ТоварыДокументовОтгрузки.ОбъектРасчетов КАК ОбъектРасчетов,
| ТоварыДокументовОтгрузки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыДокументовОтгрузки.АналитикаУчетаНаборов КАК АналитикаУчетаНаборов,
| ТоварыДокументовОтгрузки.Номенклатура КАК Номенклатура,
| ТоварыДокументовОтгрузки.Характеристика КАК Характеристика,
| ТоварыДокументовОтгрузки.Упаковка КАК Упаковка,
| ТоварыДокументовОтгрузки.ИдентификаторТовара КАК ИдентификаторТовара
|ПОМЕСТИТЬ РазличныеТоварыДокументовОтгрузки
|ИЗ
| ТоварыДокументовОтгрузки КАК ТоварыДокументовОтгрузки
|
|ИНДЕКСИРОВАТЬ ПО
| Заказ,
| ДокументОтгрузки,
| АналитикаУчетаНоменклатуры,
| АналитикаУчетаНаборов,
| Упаковка,
| ОбъектРасчетов
|;
|
|
|ВЫБРАТЬ
| ТоварыДокументовОтгрузки.Заказ КАК Заказ,
| ТоварыДокументовОтгрузки.ДокументОтгрузки КАК ДокументОтгрузки,
| ТоварыДокументовОтгрузки.ИдентификаторТовара КАК ИдентификаторТовара,
| ЕСТЬNULL(ЕСТЬNULL(ВидыЗапасовПередачи.НомерГТД, ВидыЗапасовРеализации.НомерГТД), ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)) КАК НомерГТД,
| СУММА(ЕСТЬNULL(ЕСТЬNULL(ВидыЗапасовПередачи.Количество, ВидыЗапасовРеализации.Количество), 0)) КАК Количество,
| МИНИМУМ(ВЫБОР
| КОГДА ВидыЗапасовПередачи.Ссылка.Проведен
| ТОГДА 1
| КОГДА ВидыЗапасовРеализации.Ссылка.Проведен
| ТОГДА 1
| ИНАЧЕ 2
| КОНЕЦ) КАК Порядок
|ИЗ
| РазличныеТоварыДокументовОтгрузки КАК ТоварыДокументовОтгрузки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПередачаТоваровХранителю.ВидыЗапасов КАК ВидыЗапасовПередачи
| ПО ТоварыДокументовОтгрузки.ДокументОтгрузки = ВидыЗапасовПередачи.Ссылка
| И ТоварыДокументовОтгрузки.Заказ = ВидыЗапасовПередачи.ЗаказКлиента
| И ТоварыДокументовОтгрузки.АналитикаУчетаНоменклатуры = ВидыЗапасовПередачи.АналитикаУчетаНоменклатуры
| И ТоварыДокументовОтгрузки.АналитикаУчетаНаборов = ВидыЗапасовПередачи.АналитикаУчетаНаборов
| И ТоварыДокументовОтгрузки.Упаковка = ВидыЗапасовПередачи.Упаковка
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.ВидыЗапасов КАК ВидыЗапасовРеализации
| ПО ТоварыДокументовОтгрузки.ДокументОтгрузки = ВидыЗапасовРеализации.Ссылка
| И ТоварыДокументовОтгрузки.Заказ = ВидыЗапасовРеализации.ЗаказКлиента
| И ТоварыДокументовОтгрузки.ОбъектРасчетов = ВидыЗапасовРеализации.ОбъектРасчетов
| И ТоварыДокументовОтгрузки.АналитикаУчетаНоменклатуры = ВидыЗапасовРеализации.АналитикаУчетаНоменклатуры
| И ТоварыДокументовОтгрузки.АналитикаУчетаНаборов = ВидыЗапасовРеализации.АналитикаУчетаНаборов
| И ТоварыДокументовОтгрузки.Упаковка = ВидыЗапасовРеализации.Упаковка
|ГДЕ
| ЕСТЬNULL(ЕСТЬNULL(ВидыЗапасовПередачи.НомерГТД, ВидыЗапасовРеализации.НомерГТД), ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
|
|СГРУППИРОВАТЬ ПО
| ТоварыДокументовОтгрузки.Заказ,
| ТоварыДокументовОтгрузки.ДокументОтгрузки,
| ТоварыДокументовОтгрузки.ИдентификаторТовара,
| ЕСТЬNULL(ЕСТЬNULL(ВидыЗапасовПередачи.НомерГТД, ВидыЗапасовРеализации.НомерГТД), ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка))
|
|УПОРЯДОЧИТЬ ПО
| Порядок";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяПакета);
ИндексыПакетов.Добавить(ИмяПакета, ТекущийИндексПакетаЗапроса(ИндексыПакетов) + 1);
ТекстЗапросаУничтоженияВременнойТаблицы(ТекстыЗапроса, ИндексыПакетов,
"РазличныеТоварыДокументовОтгрузки");
КонецПроцедуры
#КонецОбласти
#Область ОбработкаЭкземпляровСлужебный
Функция УчетнаяЗаписьТорговойПлощадкиЗаказа(Заказ, ДанныеПоРаспоряжениям)
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
СтрокиРаспоряжения = ДанныеПоРаспоряжениям.НайтиСтроки(Отбор);
Если СтрокиРаспоряжения.Количество() > 0 Тогда
УчетнаяЗапись = СтрокиРаспоряжения[0].УчетнаяЗапись;
Иначе
УчетнаяЗапись = Справочники.УчетныеЗаписиМаркетплейсов.ПустаяСсылка();
КонецЕсли;
Возврат УчетнаяЗапись;
КонецФункции
Функция ТребуетсяПереоформлениеДокументовОтгрузкиПослеРазделенияОтправлений(Заказ, СведенияПоТоварам)
Результат = Ложь;
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Отбор.Вставить("ИдентификаторСтрокиЗаполнен", Ложь);
СтрокиЭкземпляров = СведенияПоТоварам.НайтиСтроки(Отбор);
Если СтрокиЭкземпляров.Количество() > 0 Тогда
Результат = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ТребуетсяЗаписьСведенийОбОтправлениях(Заказ, СведенияПоТоварам)
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Отбор.Вставить("ИдентификаторСтрокиЗаполнен", Истина);
СтрокиЭкземпляров = СведенияПоТоварам.НайтиСтроки(Отбор);
Результат = (СтрокиЭкземпляров.Количество() = 0) И (СведенияПоТоварам.Количество() > 0);
Возврат Результат;
КонецФункции
Процедура ПроверитьКодыСтрокПоЗаказам(Заказ, СведенияПоТоварам, ДанныеПоРаспоряжениям)
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Отбор.Вставить("КодСтрокиЗаполнен", Истина);
СтрокиЭкземпляров = СведенияПоТоварам.НайтиСтроки(Отбор);
Для Каждого ЭкземплярТовара Из СтрокиЭкземпляров Цикл
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Отбор.Вставить("ИдентификаторТовара", ЭкземплярТовара.ИдентификаторТовара);
Отбор.Вставить("КодСтроки", ЭкземплярТовара.КодСтроки);
Отбор.Вставить("Обработана", Ложь);
СтрокиРаспоряжения = ДанныеПоРаспоряжениям.НайтиСтроки(Отбор);
Если СтрокиРаспоряжения.Количество() > 0 Тогда
Для Каждого СтрокаДокумента Из СтрокиРаспоряжения Цикл
Количество = Мин(ЭкземплярТовара.Количество, СтрокаДокумента.Количество - СтрокаДокумента.КоличествоОбработано);
Если Количество < ЭкземплярТовара.Количество И Не ЭкземплярТовара.ЭкземплярВРаботе Тогда
ЭкземплярТовара.КодСтроки = 0;
ЭкземплярТовара.КодСтрокиЗаполнен = Ложь;
ЭкземплярТовара.КОтгрузке = Ложь;
ЭкземплярТовара.ИдентификаторСтроки = "";
ЭкземплярТовара.ИдентификаторСтрокиЗаполнен = Ложь;
ЭкземплярТовара.Цена = 0;
ЭкземплярТовара.СтавкаНДС = Справочники.СтавкиНДС.ПустаяСсылка();
ЭкземплярТовара.Отменено = Ложь;
ЭкземплярТовара.ПричинаОтмены = Справочники.ПричиныОтменыЗаказовКлиентов.ПустаяСсылка();
ЭкземплярТовара.КодПричиныОтмены = "";
ЭкземплярТовара.НаименованиеПричиныОтмены = "";
ЭкземплярТовара.Склад = Справочники.Склады.ПустаяСсылка();
Продолжить;
Иначе
ЭкземплярТовара.Цена = СтрокаДокумента.Цена;
ЭкземплярТовара.СтавкаНДС = СтрокаДокумента.СтавкаНДС;
ЭкземплярТовара.Отменено = СтрокаДокумента.Отменено;
ЭкземплярТовара.ПричинаОтмены = СтрокаДокумента.ПричинаОтмены;
ЭкземплярТовара.КодПричиныОтмены = СтрокаДокумента.КодПричиныОтмены;
ЭкземплярТовара.НаименованиеПричиныОтмены = СтрокаДокумента.НаименованиеПричиныОтмены;
ЭкземплярТовара.Склад = СтрокаДокумента.Склад;
ЭкземплярТовара.КОтгрузке = СтрокаДокумента.КОтгрузке;
Если ЭкземплярТовара.Отменено Тогда
ЭкземплярТовара.ДокументОтгрузки = Неопределено;
ЭкземплярТовара.ДокументОтгрузкиКОформлению = Истина;
ЭкземплярТовара.ИдентификаторСтроки = "";
ЭкземплярТовара.ИдентификаторСтрокиЗаполнен = Ложь;
КонецЕсли;
СтрокаДокумента.КоличествоОбработано =
СтрокаДокумента.КоличествоОбработано + Количество;
СтрокаДокумента.Обработана =
(СтрокаДокумента.Количество = СтрокаДокумента.КоличествоОбработано);
Если СтрокаДокумента.Обработана Тогда
СуммаРучнойСкидки = СтрокаДокумента.СуммаРучнойСкидки - СтрокаДокумента.РучнаяСкидкаРаспределено;
СтрокаДокумента.РучнаяСкидкаРаспределено = СтрокаДокумента.СуммаРучнойСкидки;
Иначе
СуммаРучнойСкидки = ЭкземплярТовара.Количество * СтрокаДокумента.ЗначениеРучнойСкидки;
СтрокаДокумента.РучнаяСкидкаРаспределено = СтрокаДокумента.РучнаяСкидкаРаспределено + СуммаРучнойСкидки;
КонецЕсли;
ЭкземплярТовара.СуммаРучнойСкидки = СуммаРучнойСкидки;
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
ЭкземплярТовара.КодСтроки = 0;
ЭкземплярТовара.КодСтрокиЗаполнен = Ложь;
ЭкземплярТовара.КОтгрузке = Ложь;
ЭкземплярТовара.ИдентификаторСтроки = "";
ЭкземплярТовара.ИдентификаторСтрокиЗаполнен = Ложь;
ЭкземплярТовара.Цена = 0;
ЭкземплярТовара.СтавкаНДС = Справочники.СтавкиНДС.ПустаяСсылка();
ЭкземплярТовара.Отменено = Ложь;
ЭкземплярТовара.ПричинаОтмены = Справочники.ПричиныОтменыЗаказовКлиентов.ПустаяСсылка();
ЭкземплярТовара.КодПричиныОтмены = "";
ЭкземплярТовара.НаименованиеПричиныОтмены = "";
ЭкземплярТовара.Склад = Справочники.Склады.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьКодыСтрокПоЗаказам(Заказ, СведенияПоТоварам, ДанныеПоРаспоряжениям)
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Отбор.Вставить("КодСтрокиЗаполнен", Ложь);
СтрокиЭкземпляров = СведенияПоТоварам.НайтиСтроки(Отбор);
Для Каждого ЭкземплярТовара Из СтрокиЭкземпляров Цикл
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Отбор.Вставить("ИдентификаторТовара", ЭкземплярТовара.ИдентификаторТовара);
Отбор.Вставить("Обработана", Ложь);
СтрокиРаспоряжения = ДанныеПоРаспоряжениям.НайтиСтроки(Отбор);
Если СтрокиРаспоряжения.Количество() > 0 Тогда
Для Каждого СтрокаДокумента Из СтрокиРаспоряжения Цикл
Количество = Мин(ЭкземплярТовара.Количество, СтрокаДокумента.Количество - СтрокаДокумента.КоличествоОбработано);
Если Количество < ЭкземплярТовара.Количество Тогда
Продолжить;
Иначе
ЭкземплярТовара.КодСтроки = СтрокаДокумента.КодСтроки;
ЭкземплярТовара.КодСтрокиЗаполнен = Истина;
ЭкземплярТовара.Цена = СтрокаДокумента.Цена;
ЭкземплярТовара.СтавкаНДС = СтрокаДокумента.СтавкаНДС;
ЭкземплярТовара.Отменено = СтрокаДокумента.Отменено;
ЭкземплярТовара.ПричинаОтмены = СтрокаДокумента.ПричинаОтмены;
ЭкземплярТовара.КодПричиныОтмены = СтрокаДокумента.КодПричиныОтмены;
ЭкземплярТовара.НаименованиеПричиныОтмены = СтрокаДокумента.НаименованиеПричиныОтмены;
ЭкземплярТовара.Склад = СтрокаДокумента.Склад;
ЭкземплярТовара.КОтгрузке = СтрокаДокумента.КОтгрузке;
Если ЭкземплярТовара.Отменено Тогда
ЭкземплярТовара.ДокументОтгрузки = Неопределено;
ЭкземплярТовара.ДокументОтгрузкиКОформлению = Истина;
ЭкземплярТовара.ИдентификаторСтроки = "";
ЭкземплярТовара.ИдентификаторСтрокиЗаполнен = Ложь;
КонецЕсли;
СтрокаДокумента.КоличествоОбработано =
СтрокаДокумента.КоличествоОбработано + Количество;
СтрокаДокумента.Обработана =
(СтрокаДокумента.Количество = СтрокаДокумента.КоличествоОбработано);
Если СтрокаДокумента.Обработана Тогда
СуммаРучнойСкидки = СтрокаДокумента.СуммаРучнойСкидки - СтрокаДокумента.РучнаяСкидкаРаспределено;
СтрокаДокумента.РучнаяСкидкаРаспределено = СтрокаДокумента.СуммаРучнойСкидки;
Иначе
СуммаРучнойСкидки = ЭкземплярТовара.Количество * СтрокаДокумента.ЗначениеРучнойСкидки;
СтрокаДокумента.РучнаяСкидкаРаспределено = СтрокаДокумента.РучнаяСкидкаРаспределено + СуммаРучнойСкидки;
КонецЕсли;
ЭкземплярТовара.СуммаРучнойСкидки = СуммаРучнойСкидки;
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
ЭкземплярТовара.КОтгрузке = Ложь;
ЭкземплярТовара.ИдентификаторСтроки = "";
ЭкземплярТовара.ИдентификаторСтрокиЗаполнен = Ложь;
ЭкземплярТовара.Цена = 0;
ЭкземплярТовара.СтавкаНДС = Справочники.СтавкиНДС.ПустаяСсылка();
ЭкземплярТовара.Отменено = Истина;
ЭкземплярТовара.ПричинаОтмены = Справочники.ПричиныОтменыЗаказовКлиентов.ПустаяСсылка();
ЭкземплярТовара.ПричинаОтмены = Неопределено;
ЭкземплярТовара.КодПричиныОтмены = "";
ЭкземплярТовара.НаименованиеПричиныОтмены = ПричинаОтменыБезЗаказа();
ЭкземплярТовара.Склад = Справочники.Склады.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьИдентификаторыСтрокПоДокументамОтгрузки(Заказ, СведенияПоТоварам, ТоварыДокументовОтгрузки)
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Отбор.Вставить("КодСтрокиЗаполнен", Истина);
Отбор.Вставить("ИдентификаторСтрокиЗаполнен", Истина);
СтрокиЭкземпляров = СведенияПоТоварам.НайтиСтроки(Отбор);
Для Каждого ЭкземплярТовара Из СтрокиЭкземпляров Цикл
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Отбор.Вставить("НомерОтправления", ЭкземплярТовара.НомерОтправления);
Отбор.Вставить("ИдентификаторТовара", ЭкземплярТовара.ИдентификаторТовара);
Отбор.Вставить("КодСтроки", ЭкземплярТовара.КодСтроки);
Отбор.Вставить("ИдентификаторСтроки", ЭкземплярТовара.ИдентификаторСтроки);
Отбор.Вставить("Обработана", Ложь);
СтрокиДокументаОтгрузки = ТоварыДокументовОтгрузки.НайтиСтроки(Отбор);
Если СтрокиДокументаОтгрузки.Количество() > 0 Тогда
Для Каждого СтрокаДокумента Из СтрокиДокументаОтгрузки Цикл
Количество = Мин(ЭкземплярТовара.Количество, СтрокаДокумента.Количество - СтрокаДокумента.КоличествоОбработано);
Если Количество < ЭкземплярТовара.Количество И ЭкземплярТовара.ЭкземплярВРаботе Тогда
ЭкземплярТовара.ИдентификаторСтроки = "";
ЭкземплярТовара.ИдентификаторСтрокиЗаполнен = Ложь;
ЭкземплярТовара.ДокументОтгрузки = Неопределено;
ЭкземплярТовара.ДокументОтгрузкиКОформлению = Истина;
Продолжить;
Иначе
ЭкземплярТовара.ДокументОтгрузки = СтрокаДокумента.ДокументОтгрузки;
ЭкземплярТовара.ДокументОтгрузкиКОформлению = СтрокаДокумента.ДокументОтгрузкиКОформлению;
СтрокаДокумента.КоличествоОбработано =
СтрокаДокумента.КоличествоОбработано + Количество;
СтрокаДокумента.Обработана =
(СтрокаДокумента.Количество = СтрокаДокумента.КоличествоОбработано);
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
ЭкземплярТовара.ИдентификаторСтроки = "";
ЭкземплярТовара.ИдентификаторСтрокиЗаполнен = Ложь;
ЭкземплярТовара.ДокументОтгрузки = Неопределено;
ЭкземплярТовара.ДокументОтгрузкиКОформлению = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьИдентификаторыСтрокПоДокументамОтгрузки(Заказ, СведенияПоТоварам, ТоварыДокументовОтгрузки,
ТребуетсяПереоформлениеДокументовОтгрузки = Ложь)
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Отбор.Вставить("КодСтрокиЗаполнен", Истина);
Отбор.Вставить("ИдентификаторСтрокиЗаполнен", Ложь);
СтрокиЭкземпляров = СведенияПоТоварам.НайтиСтроки(Отбор);
Для Каждого ЭкземплярТовара Из СтрокиЭкземпляров Цикл
Отбор = Новый Структура;
Отбор.Вставить("Заказ", ЭкземплярТовара.Заказ);
Отбор.Вставить("НомерОтправления", ЭкземплярТовара.НомерОтправления);
Отбор.Вставить("ИдентификаторТовара", ЭкземплярТовара.ИдентификаторТовара);
Отбор.Вставить("КодСтроки", ЭкземплярТовара.КодСтроки);
Отбор.Вставить("ДокументОтгрузкиКОформлению", Ложь);
Отбор.Вставить("Обработана", Ложь);
ЗаполнитьИдентификаторСтрокиПоДокументамОтгрузки(ЭкземплярТовара, ТоварыДокументовОтгрузки, Отбор);
Если Не ЭкземплярТовара.ИдентификаторСтрокиЗаполнен Тогда
Отбор = Новый Структура;
Отбор.Вставить("Заказ", ЭкземплярТовара.Заказ);
Отбор.Вставить("ИдентификаторТовара", ЭкземплярТовара.ИдентификаторТовара);
Отбор.Вставить("КодСтроки", ЭкземплярТовара.КодСтроки);
Отбор.Вставить("ДокументОтгрузкиКОформлению", Ложь);
Отбор.Вставить("Обработана", Ложь);
ЗаполнитьИдентификаторСтрокиПоДокументамОтгрузки(ЭкземплярТовара, ТоварыДокументовОтгрузки, Отбор);
КонецЕсли;
Если Не ЭкземплярТовара.ИдентификаторСтрокиЗаполнен Тогда
Отбор = Новый Структура;
Отбор.Вставить("Заказ", ЭкземплярТовара.Заказ);
Отбор.Вставить("ИдентификаторТовара", ЭкземплярТовара.ИдентификаторТовара);
Отбор.Вставить("КодСтроки", ЭкземплярТовара.КодСтроки);
Отбор.Вставить("ДокументОтгрузкиКОформлению", Истина);
Отбор.Вставить("Обработана", Ложь);
ЗаполнитьИдентификаторСтрокиПоДокументамОтгрузки(ЭкземплярТовара, ТоварыДокументовОтгрузки, Отбор);
КонецЕсли;
Если Не ЭкземплярТовара.Отменено И Не ЭкземплярТовара.ИдентификаторСтрокиЗаполнен Тогда
ТребуетсяПереоформлениеДокументовОтгрузки = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьИдентификаторСтрокиПоДокументамОтгрузки(ЭкземплярТовара, ТоварыДокументовОтгрузки, Отбор)
СтрокиДокументаОтгрузки = ТоварыДокументовОтгрузки.НайтиСтроки(Отбор);
Для Каждого СтрокаДокумента Из СтрокиДокументаОтгрузки Цикл
Количество = Мин(ЭкземплярТовара.Количество, СтрокаДокумента.Количество - СтрокаДокумента.КоличествоОбработано);
Если Количество < ЭкземплярТовара.Количество Тогда
Продолжить;
Иначе
ЭкземплярТовара.ДокументОтгрузки = СтрокаДокумента.ДокументОтгрузки;
ЭкземплярТовара.ИдентификаторСтроки = СтрокаДокумента.ИдентификаторСтроки;
ЭкземплярТовара.ИдентификаторСтрокиЗаполнен = Истина;
ЭкземплярТовара.ДокументОтгрузкиКОформлению = СтрокаДокумента.ДокументОтгрузкиКОформлению;
СтрокаДокумента.КоличествоОбработано =
СтрокаДокумента.КоличествоОбработано + Количество;
СтрокаДокумента.Обработана =
(СтрокаДокумента.Количество = СтрокаДокумента.КоличествоОбработано);
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьИВернутьЭкземплярыВРодительскиеОтправления(Заказ, СведенияПоТоварам)
ПроверяемыеОтправления = Новый Соответствие;
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Отбор.Вставить("Отменено", Истина);
Отбор.Вставить("ЭкземплярВРаботе", Истина);
СтрокиЭкземпляров = СведенияПоТоварам.НайтиСтроки(Отбор);
Для Каждого СтрокаЭкземпляра Из СтрокиЭкземпляров Цикл
Если СтрокаЭкземпляра.НомерОтправления <> СтрокаЭкземпляра.НомерРодительскогоОтправления Тогда
ОтменяемыеЭкземпляры = ПроверяемыеОтправления[СтрокаЭкземпляра.НомерОтправления];
Если ОтменяемыеЭкземпляры = Неопределено Тогда
ОтменяемыеЭкземпляры = Новый Массив;
КонецЕсли;
ОтменяемыеЭкземпляры.Добавить(СтрокаЭкземпляра);
ПроверяемыеОтправления.Вставить(СтрокаЭкземпляра.НомерОтправления, ОтменяемыеЭкземпляры);
КонецЕсли;
КонецЦикла;
Для Каждого ПроверяемоеОтправление Из ПроверяемыеОтправления Цикл
ОтборЭкземпляров = Новый Структура;
ОтборЭкземпляров.Вставить("Заказ", Заказ);
ОтборЭкземпляров.Вставить("НомерОтправления", ПроверяемоеОтправление.Ключ);
Если ПроверяемоеОтправление.Значение.Количество() = СведенияПоТоварам.НайтиСтроки(ОтборЭкземпляров).Количество() Тогда
Для Каждого СтрокаЭкземпляра Из ПроверяемоеОтправление.Значение Цикл
СтрокаЭкземпляра.НомерОтправления = СтрокаЭкземпляра.НомерРодительскогоОтправления;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьНомераГТДПоДокументамОтгрузки(Заказ, СведенияПоТоварам, НомераГТДДокументовОтгрузки)
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Отбор.Вставить("КодСтрокиЗаполнен", Истина);
Отбор.Вставить("НомерГТДЗаполнен", Истина);
Отбор.Вставить("ЭкземплярВРаботе", Истина);
СтрокиЭкземпляров = СведенияПоТоварам.НайтиСтроки(Отбор);
Для Каждого ЭкземплярТовара Из СтрокиЭкземпляров Цикл
Отбор = Новый Структура;
Отбор.Вставить("Заказ", ЭкземплярТовара.Заказ);
Отбор.Вставить("ИдентификаторТовара", ЭкземплярТовара.ИдентификаторТовара);
Отбор.Вставить("НомерГТД", ЭкземплярТовара.НомерГТД);
Отбор.Вставить("Обработана", Ложь);
СтрокиДокументаОтгрузки = НомераГТДДокументовОтгрузки.НайтиСтроки(Отбор);
Если СтрокиДокументаОтгрузки.Количество() > 0 Тогда
Для Каждого СтрокаДокумента Из СтрокиДокументаОтгрузки Цикл
Количество = Мин(ЭкземплярТовара.Количество, СтрокаДокумента.Количество - СтрокаДокумента.КоличествоОбработано);
Если Количество < ЭкземплярТовара.Количество Тогда
ЭкземплярТовара.НомерГТД = Справочники.НомераГТД.ПустаяСсылка();
Продолжить;
Иначе
СтрокаДокумента.КоличествоОбработано =
СтрокаДокумента.КоличествоОбработано + Количество;
СтрокаДокумента.Обработана =
(СтрокаДокумента.Количество = СтрокаДокумента.КоличествоОбработано);
Прервать;
КонецЕсли;
КонецЦикла;
ИначеЕсли ЭкземплярТовара.Статус = Перечисления.СтатусыЗаказовТорговыхПлощадок.ОжидаетСборки Тогда
ЭкземплярТовара.НомерГТД = Справочники.НомераГТД.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьНомераГТДПоДокументамОтгрузки(Заказ, СведенияПоТоварам, НомераГТДДокументовОтгрузки,
ТребуетсяПереоформлениеДокументовОтгрузки = Ложь)
Если ТребуетсяПереоформлениеДокументовОтгрузки Тогда
Возврат;
КонецЕсли;
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Отбор.Вставить("КодСтрокиЗаполнен", Истина);
Отбор.Вставить("ИдентификаторСтрокиЗаполнен", Истина);
Отбор.Вставить("Статус", Перечисления.СтатусыЗаказовТорговыхПлощадок.ОжидаетСборки);
СтрокиЭкземпляров = СведенияПоТоварам.НайтиСтроки(Отбор);
Для Каждого ЭкземплярТовара Из СтрокиЭкземпляров Цикл
Отбор = Новый Структура;
Отбор.Вставить("Заказ", ЭкземплярТовара.Заказ);
Отбор.Вставить("ИдентификаторТовара", ЭкземплярТовара.ИдентификаторТовара);
Отбор.Вставить("Обработана", Ложь);
СтрокиДокументаОтгрузки = НомераГТДДокументовОтгрузки.НайтиСтроки(Отбор);
Если СтрокиДокументаОтгрузки.Количество() > 0 Тогда
Для Каждого СтрокаДокумента Из СтрокиДокументаОтгрузки Цикл
Количество = Мин(ЭкземплярТовара.Количество, СтрокаДокумента.Количество - СтрокаДокумента.КоличествоОбработано);
Если Количество < ЭкземплярТовара.Количество Тогда
Продолжить;
Иначе
ЭкземплярТовара.НомерГТД = СтрокаДокумента.НомерГТД;
СтрокаДокумента.КоличествоОбработано =
СтрокаДокумента.КоличествоОбработано + Количество;
СтрокаДокумента.Обработана =
(СтрокаДокумента.Количество = СтрокаДокумента.КоличествоОбработано);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#Область ОбработкаМаркировкиСлужебный
Функция ДанныеРаспределенияШтрихкодовУпаковокПоДокументуОтгрузки(ДокументСсылка, РеквизитыДокумента)
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст = ТекстЗапросаТоваровИШтрихкодовДляИСМП();
Запрос.УстановитьПараметр("Ссылка" , ДокументСсылка);
Запрос.УстановитьПараметр("ЦенаВключаетНДС" , РеквизитыДокумента.ЦенаВключаетНДС);
Запрос.УстановитьПараметр("Организация" , РеквизитыДокумента.Организация);
Запрос.УстановитьПараметр("ТребуетсяЗалогЗаТару" , РеквизитыДокумента.ТребуетсяЗалогЗаТару);
Запрос.УстановитьПараметр("ВернутьМногооборотнуюТару", РеквизитыДокумента.ВернутьМногооборотнуюТару);
Запрос.УстановитьПараметр("МерныеТипыЕдиницИзмерений", Справочники.УпаковкиЕдиницыИзмерения.МерныеТипыЕдиницИзмерений());
УстановитьПривилегированныйРежим(Истина);
Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
ПолноеИмя = ДокументСсылка.Метаданные().ПолноеИмя();
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
ПараметрыУказанияСерий = МенеджерОбъекта.ПараметрыУказанияСерий(РеквизитыДокумента);
ДанныеДокумента = РозничныеПродажиЛокализация.ПолучитьТоварыИШтрихкодыДляИСМП(ДокументСсылка, МенеджерВременныхТаблиц);
Штрихкоды = ДанныеДокумента.Штрихкоды;
Товары = ДанныеДокумента.Товары;
ДополнитьТаблицуТоваровКодамиИИдентификаторамиСтрок(Товары, МенеджерВременныхТаблиц);
УстановитьПривилегированныйРежим(Истина);
ДанныеРаспределения = РозничныеПродажиЛокализация.ДанныеРаспределенияШтрихкодовУпаковокПоТоварам(
ДокументСсылка,
Штрихкоды,
ПараметрыУказанияСерий,
Товары);
УстановитьПривилегированныйРежим(Ложь);
Возврат ДанныеРаспределения;
КонецФункции
Функция ТекстЗапросаТоваровИШтрихкодовДляИСМП()
ТекстЗапроса =
"ВЫБРАТЬ
| ТабличнаяЧасть.НомерСтроки КАК НомерСтроки,
| ТабличнаяЧасть.КодСтроки КАК КодСтроки,
| ТабличнаяЧасть.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ТабличнаяЧасть.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТабличнаяЧасть.ЗаказКлиента КАК Заказ,
| ТабличнаяЧасть.Номенклатура КАК Номенклатура,
| ТабличнаяЧасть.Характеристика КАК Характеристика,
| ТабличнаяЧасть.Серия КАК Серия,
| ТабличнаяЧасть.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТабличнаяЧасть.Упаковка КАК Упаковка,
| СпрНоменклатура.ОсобенностьУчета КАК ОсобенностьУчета,
| ТабличнаяЧасть.Количество КАК Количество,
| ТабличнаяЧасть.КоличествоУпаковок КАК КоличествоУпаковок,
| ВЫРАЗИТЬ(ВЫБОР
| КОГДА &ЦенаВключаетНДС
| ТОГДА ТабличнаяЧасть.Цена
| КОГДА ТабличнаяЧасть.КоличествоУпаковок = 0
| ТОГДА ТабличнаяЧасть.СуммаСНДС
| ИНАЧЕ (ТабличнаяЧасть.СуммаСНДС + ТабличнаяЧасть.СуммаРучнойСкидки + ТабличнаяЧасть.СуммаАвтоматическойСкидки) / ТабличнаяЧасть.КоличествоУпаковок
| КОНЕЦ КАК ЧИСЛО(31, 2)) КАК Цена,
| ТабличнаяЧасть.СуммаРучнойСкидки + ТабличнаяЧасть.СуммаАвтоматическойСкидки КАК СуммаСкидки,
| ТабличнаяЧасть.СтавкаНДС КАК СтавкаНДС,
| ТабличнаяЧасть.СуммаНДС КАК СуммаНДС,
| ТабличнаяЧасть.СуммаСНДС КАК СуммаСНДС,
| СпрНоменклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины В (&МерныеТипыЕдиницИзмерений) КАК МернаяЕдиницаИзмерения
|ПОМЕСТИТЬ ТаблицаТовары
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК ТабличнаяЧасть
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО (СпрНоменклатура.Ссылка = ТабличнаяЧасть.Номенклатура)
|ГДЕ
| ТабличнаяЧасть.Ссылка = &Ссылка
| И (НЕ &ВернутьМногооборотнуюТару
| ИЛИ НЕ &ТребуетсяЗалогЗаТару
| И СпрНоменклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
| ИЛИ &ТребуетсяЗалогЗаТару)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТабличнаяЧасть.НомерСтроки КАК НомерСтроки,
| ТабличнаяЧасть.КодСтроки КАК КодСтроки,
| ТабличнаяЧасть.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ТабличнаяЧасть.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТабличнаяЧасть.ЗаказКлиента КАК Заказ,
| ТабличнаяЧасть.Номенклатура КАК Номенклатура,
| ТабличнаяЧасть.Характеристика КАК Характеристика,
| ТабличнаяЧасть.Серия КАК Серия,
| ТабличнаяЧасть.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТабличнаяЧасть.Упаковка КАК Упаковка,
| СпрНоменклатура.ОсобенностьУчета КАК ОсобенностьУчета,
| ТабличнаяЧасть.Количество КАК Количество,
| ТабличнаяЧасть.КоличествоУпаковок КАК КоличествоУпаковок,
| ТабличнаяЧасть.Цена КАК Цена,
| 0 КАК СуммаСкидки,
| ЗНАЧЕНИЕ(Справочник.СтавкиНДС.БезНДС) КАК СтавкаНДС,
| 0 КАК СуммаНДС,
| ТабличнаяЧасть.Сумма КАК СуммаСНДС,
| СпрНоменклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины В (&МерныеТипыЕдиницИзмерений) КАК МернаяЕдиницаИзмерения
|ИЗ
| Документ.ПередачаТоваровХранителю.Товары КАК ТабличнаяЧасть
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО (СпрНоменклатура.Ссылка = ТабличнаяЧасть.Номенклатура)
|ГДЕ
| ТабличнаяЧасть.Ссылка = &Ссылка
| И (НЕ &ВернутьМногооборотнуюТару
| ИЛИ СпрНоменклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
|;
|
|
|ВЫБРАТЬ
| ШтрихкодыУпаковок.ШтрихкодУпаковки КАК ШтрихкодУпаковки,
| ШтрихкодыУпаковок.ЧастичноеВыбытиеВариантУчета КАК ЧастичноеВыбытиеВариантУчета,
| ШтрихкодыУпаковок.ЧастичноеВыбытиеНоменклатура КАК ЧастичноеВыбытиеНоменклатура,
| ШтрихкодыУпаковок.ЧастичноеВыбытиеХарактеристика КАК ЧастичноеВыбытиеХарактеристика,
| ШтрихкодыУпаковок.ЧастичноеВыбытиеКоличество КАК ЧастичноеВыбытиеКоличество,
| ШтрихкодыУпаковок.РазрешительныйРежимИдентификаторЗапросаГИСМТ КАК РазрешительныйРежимИдентификаторЗапросаГИСМТ,
| ШтрихкодыУпаковок.РазрешительныйРежимДатаЗапросаГИСМТ КАК РазрешительныйРежимДатаЗапросаГИСМТ,
| ШтрихкодыУпаковок.РазрешительныйРежимИдентификаторЭкземпляраПО КАК РазрешительныйРежимИдентификаторЭкземпляраПО,
| ШтрихкодыУпаковок.РазрешительныйРежимВерсияБазы КАК РазрешительныйРежимВерсияБазы
|ПОМЕСТИТЬ ТаблицаАкцизныеМарки
|ИЗ
| Документ.РеализацияТоваровУслуг.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок
|ГДЕ
| ШтрихкодыУпаковок.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ШтрихкодыУпаковок.ШтрихкодУпаковки КАК ШтрихкодУпаковки,
| ЗНАЧЕНИЕ(Перечисление.ВариантыУчетаЧастичногоВыбытияИС.ПустаяСсылка) КАК ЧастичноеВыбытиеВариантУчета,
| ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) КАК ЧастичноеВыбытиеНоменклатура,
| ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ЧастичноеВыбытиеХарактеристика,
| 0 КАК ЧастичноеВыбытиеКоличество,
| """" КАК РазрешительныйРежимИдентификаторЗапросаГИСМТ,
| """" КАК РазрешительныйРежимДатаЗапросаГИСМТ,
| """" КАК РазрешительныйРежимИдентификаторЭкземпляраПО,
| """" КАК РазрешительныйРежимВерсияБазы
|ИЗ
| Документ.ПередачаТоваровХранителю.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок
|ГДЕ
| ШтрихкодыУпаковок.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ТаблицаТовары.Упаковка КАК Упаковка,
| Штрихкоды.Штрихкод КАК Штрихкод,
| ВЫБОР
| КОГДА ТаблицаТовары.Упаковка = Штрихкоды.Упаковка
| ТОГДА 2
| ИНАЧЕ 1
| КОНЕЦ КАК ПриоритетШтрихКода
|ПОМЕСТИТЬ Штрихкоды
|ИЗ
| ТаблицаТовары КАК ТаблицаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
| ПО ТаблицаТовары.Номенклатура = Штрихкоды.Номенклатура
| И ТаблицаТовары.Характеристика = Штрихкоды.Характеристика
| И (ТаблицаТовары.Упаковка = Штрихкоды.Упаковка
| ИЛИ &ТекстЗапросаКоэффициентУпаковки1 = 1
| И ТаблицаТовары.Номенклатура.ЕдиницаИзмерения = ТаблицаТовары.Упаковка.ЕдиницаИзмерения
| И Штрихкоды.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка))
|;
|
|
|ВЫБРАТЬ
| Штрихкоды.Номенклатура КАК Номенклатура,
| Штрихкоды.Характеристика КАК Характеристика,
| Штрихкоды.Упаковка КАК Упаковка,
| МАКСИМУМ(Штрихкоды.ПриоритетШтрихКода) КАК ПриоритетШтрихКода
|ПОМЕСТИТЬ ПриоритетыШтрихКода
|ИЗ
| Штрихкоды КАК Штрихкоды
|
|СГРУППИРОВАТЬ ПО
| Штрихкоды.Номенклатура,
| Штрихкоды.Характеристика,
| Штрихкоды.Упаковка
|;
|
|
|ВЫБРАТЬ
| Штрихкоды.Номенклатура КАК Номенклатура,
| Штрихкоды.Характеристика КАК Характеристика,
| Штрихкоды.Упаковка КАК Упаковка,
| МАКСИМУМ(Штрихкоды.Штрихкод) КАК Штрихкод
|ПОМЕСТИТЬ ШтрихкодыНоменклатуры
|ИЗ
| Штрихкоды КАК Штрихкоды
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПриоритетыШтрихКода КАК ПриоритетыШтрихКода
| ПО Штрихкоды.Номенклатура = ПриоритетыШтрихКода.Номенклатура
| И Штрихкоды.Характеристика = ПриоритетыШтрихКода.Характеристика
| И Штрихкоды.Упаковка = ПриоритетыШтрихКода.Упаковка
| И Штрихкоды.ПриоритетШтрихКода = ПриоритетыШтрихКода.ПриоритетШтрихКода
|
|СГРУППИРОВАТЬ ПО
| Штрихкоды.Номенклатура,
| Штрихкоды.Характеристика,
| Штрихкоды.Упаковка
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| Упаковка
|;
|
|
|УНИЧТОЖИТЬ Штрихкоды
|;
|
|
|УНИЧТОЖИТЬ ПриоритетыШтрихКода
|;
|
|
|ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.КодСтроки КАК КодСтроки,
| Товары.ИдентификаторСтроки КАК ИдентификаторСтроки,
| Товары.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| Товары.Заказ КАК Заказ,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Серия КАК Серия,
| Товары.СтатусУказанияСерий КАК СтатусУказанияСерий,
| Товары.Упаковка КАК Упаковка,
| Товары.ОсобенностьУчета КАК ОсобенностьУчета,
| Товары.Количество КАК Количество,
| Товары.КоличествоУпаковок КАК КоличествоУпаковок,
| Товары.Цена КАК Цена,
| Товары.СуммаСкидки КАК СуммаСкидки,
| Товары.СтавкаНДС КАК СтавкаНДС,
| Товары.СуммаНДС КАК СуммаНДС,
| Товары.СуммаСНДС КАК СуммаСНДС,
| ВЫБОР
| КОГДА Товары.МернаяЕдиницаИзмерения
| ТОГДА """"
| ИНАЧЕ ЕСТЬNULL(ШтрихкодыНоменклатуры.Штрихкод, """")
| КОНЕЦ КАК Штрихкод
|ПОМЕСТИТЬ Товары
|ИЗ
| ТаблицаТовары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
| ПО (ШтрихкодыНоменклатуры.Номенклатура = Товары.Номенклатура)
| И (ШтрихкодыНоменклатуры.Характеристика = Товары.Характеристика)
| И (ШтрихкодыНоменклатуры.Упаковка = Товары.Упаковка)
|;
|
|
|УНИЧТОЖИТЬ ТаблицаТовары
|;
|
|
|УНИЧТОЖИТЬ ШтрихкодыНоменклатуры
|;
|
|
|ВЫБРАТЬ
| Серии.НомерСтроки КАК НомерСтроки,
| Серии.Серия КАК СерияТаблицыСерий,
| Серии.Количество КАК КоличествоУпаковок,
| Серии.Номенклатура КАК Номенклатура,
| Серии.Характеристика КАК Характеристика
|ПОМЕСТИТЬ Серии
|ИЗ
| Документ.РеализацияТоваровУслуг.Серии КАК Серии
|ГДЕ
| Серии.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Серии.НомерСтроки КАК НомерСтроки,
| Серии.Серия КАК СерияТаблицыСерий,
| Серии.Количество КАК КоличествоУпаковок,
| Серии.Номенклатура КАК Номенклатура,
| Серии.Характеристика КАК Характеристика
|ИЗ
| Документ.ПередачаТоваровХранителю.Серии КАК Серии
|ГДЕ
| Серии.Ссылка = &Ссылка";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"&ТекстЗапросаКоэффициентУпаковки1",
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
"ТаблицаТовары.Упаковка",
"ТаблицаТовары.Номенклатура"));
Возврат ТекстЗапроса;
КонецФункции
Процедура ДополнитьТаблицуТоваровКодамиИИдентификаторамиСтрок(Товары, МенеджерВременныхТаблиц)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыПодготовленные.НомерСтроки КАК НомерСтроки,
| ТоварыПодготовленные.Номенклатура КАК Номенклатура,
| ТоварыПодготовленные.Характеристика КАК Характеристика,
| ТоварыПодготовленные.СерияТаблицыТоваров КАК СерияТаблицыТоваров,
| ТоварыПодготовленные.СерияТаблицыСерий КАК СерияТаблицыСерий,
| ТоварыПодготовленные.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТоварыПодготовленные.ОсобенностьУчета КАК ОсобенностьУчета,
| ТоварыПодготовленные.Упаковка КАК Упаковка,
| ТоварыПодготовленные.КоличествоУпаковок КАК КоличествоУпаковок,
| ТоварыПодготовленные.Цена КАК Цена,
| ТоварыПодготовленные.СуммаСкидки КАК СуммаСкидки,
| ТоварыПодготовленные.СтавкаНДС КАК СтавкаНДС,
| ТоварыПодготовленные.СтавкаНДСЧислом КАК СтавкаНДСЧислом,
| ТоварыПодготовленные.СуммаНДС КАК СуммаНДС,
| ТоварыПодготовленные.СуммаСНДС КАК СуммаСНДС,
| ТоварыПодготовленные.Серия КАК Серия,
| ТоварыПодготовленные.УчитыватьСерии КАК УчитыватьСерии,
| ТоварыПодготовленные.Количество КАК Количество,
| ТоварыПодготовленные.ИндексИсходнойСтроки КАК ИндексИсходнойСтроки
|ПОМЕСТИТЬ ТоварыПодготовленные
|ИЗ
| &ТоварыПодготовленные КАК ТоварыПодготовленные
|;
|
|
|ВЫБРАТЬ
| ТоварыПодготовленные.НомерСтроки КАК НомерСтроки,
| ТоварыПодготовленные.Номенклатура КАК Номенклатура,
| ТоварыПодготовленные.Характеристика КАК Характеристика,
| ТоварыПодготовленные.СерияТаблицыТоваров КАК СерияТаблицыТоваров,
| ТоварыПодготовленные.СерияТаблицыСерий КАК СерияТаблицыСерий,
| ТоварыПодготовленные.СтатусУказанияСерий КАК СтатусУказанияСерий,
| ТоварыПодготовленные.ОсобенностьУчета КАК ОсобенностьУчета,
| ТоварыПодготовленные.Упаковка КАК Упаковка,
| ТоварыПодготовленные.КоличествоУпаковок КАК КоличествоУпаковок,
| ТоварыПодготовленные.Цена КАК Цена,
| ТоварыПодготовленные.СуммаСкидки КАК СуммаСкидки,
| ТоварыПодготовленные.СтавкаНДС КАК СтавкаНДС,
| ТоварыПодготовленные.СтавкаНДСЧислом КАК СтавкаНДСЧислом,
| ТоварыПодготовленные.СуммаНДС КАК СуммаНДС,
| ТоварыПодготовленные.СуммаСНДС КАК СуммаСНДС,
| ТоварыПодготовленные.Серия КАК Серия,
| ТоварыПодготовленные.УчитыватьСерии КАК УчитыватьСерии,
| ТоварыПодготовленные.Количество КАК Количество,
| ТоварыПодготовленные.ИндексИсходнойСтроки КАК ИндексИсходнойСтроки,
| Товары.КодСтроки КАК КодСтроки,
| Товары.ИдентификаторСтроки КАК ИдентификаторСтроки
|ИЗ
| ТоварыПодготовленные КАК ТоварыПодготовленные
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Товары КАК Товары
| ПО ТоварыПодготовленные.НомерСтроки = Товары.НомерСтроки
|;
|
|
|УНИЧТОЖИТЬ ТоварыПодготовленные";
Запрос.УстановитьПараметр("ТоварыПодготовленные", Товары);
Товары = Запрос.Выполнить().Выгрузить();
КонецПроцедуры
#КонецОбласти
Процедура ОбновитьКодыМаркировки(Заказ, СведенияПоТоварам, ДанныеПоДокументамОтгрузки,
УчитыватьПризнакМаркировкиИСМП = Ложь)
Если ДанныеПоДокументамОтгрузки.Количество() > 0 Тогда
КодОшибки = КодОшибкиЗаполненияСведенийПоЭкземплярам();
ТипыДокументовОтгрузки = Новый Массив;
ТипыДокументовОтгрузки.Добавить(Тип("ДокументСсылка.ПередачаТоваровХранителю"));
ТипыДокументовОтгрузки.Добавить(Тип("ДокументСсылка.РеализацияТоваровУслуг"));
ТаблицаДокументовОтгрузки = Новый ТаблицаЗначений;
ТаблицаДокументовОтгрузки.Колонки.Добавить("ДокументОтгрузки", Новый ОписаниеТипов(ТипыДокументовОтгрузки));
ТаблицаДокументовОтгрузки.Колонки.Добавить("НомерОтправления", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(50)));
МассивРеализацийСМаркировкой = Новый Массив;
МассивПередачСМаркировкой = Новый Массив;
РеквизитыДокументовОтгрузки = Новый Соответствие;
Для Каждого ДанныеПоДокументуОтгрузки Из ДанныеПоДокументамОтгрузки Цикл
СтрокаДокументаОтгрузки = ТаблицаДокументовОтгрузки.Добавить();
СтрокаДокументаОтгрузки.ДокументОтгрузки = ДанныеПоДокументуОтгрузки.Ключ;
СтрокаДокументаОтгрузки.НомерОтправления = ДанныеПоДокументуОтгрузки.Значение;
Если ТипЗнч(СтрокаДокументаОтгрузки.ДокументОтгрузки) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
МассивРеализацийСМаркировкой.Добавить(СтрокаДокументаОтгрузки.ДокументОтгрузки);
ИначеЕсли ТипЗнч(СтрокаДокументаОтгрузки.ДокументОтгрузки) = Тип("ДокументСсылка.ПередачаТоваровХранителю") Тогда
МассивПередачСМаркировкой.Добавить(СтрокаДокументаОтгрузки.ДокументОтгрузки);
КонецЕсли;
КонецЦикла;
ТаблицаДокументовОтгрузки.Сортировать("НомерОтправления");
Если МассивРеализацийСМаркировкой.Количество() > 0 Тогда
Реквизиты = "Проведен, ЦенаВключаетНДС, ТребуетсяЗалогЗаТару, ВернутьМногооборотнуюТару, Организация, Склад, ХозяйственнаяОперация, Статус, Дата";
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие(РеквизитыДокументовОтгрузки,
ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивРеализацийСМаркировкой, Реквизиты));
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Если МассивПередачСМаркировкой.Количество() > 0 Тогда
Реквизиты = "Проведен, ВернутьМногооборотнуюТару, Организация, Склад, ХозяйственнаяОперация, Дата";
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие(РеквизитыДокументовОтгрузки,
ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивПередачСМаркировкой, Реквизиты));
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Для Каждого КлючИЗначение Из РеквизитыДокументовОтгрузки Цикл
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(КлючИЗначение.Значение,
Новый Структура("ЦенаВключаетНДС, ТребуетсяЗалогЗаТару, Статус", Ложь, Ложь, Перечисления.СтатусыРеализацийТоваровУслуг.ПустаяСсылка()),
Ложь);
КонецЦикла;
ИспользованныеШтрихкодыУпаковок = Новый Соответствие;
Для Каждого ДанныеПоДокументуОтгрузки Из ТаблицаДокументовОтгрузки Цикл
ДокументОтгрузки = ДанныеПоДокументуОтгрузки.ДокументОтгрузки;
НомерОтправления = ДанныеПоДокументуОтгрузки.НомерОтправления;
РеквизитыДокументаОтгрузки = РеквизитыДокументовОтгрузки[ДокументОтгрузки];
Если Не ЗначениеЗаполнено(ДокументОтгрузки)
Или РеквизитыДокументаОтгрузки = Неопределено
Или Не РеквизитыДокументаОтгрузки.Проведен Тогда
Продолжить;
КонецЕсли;
ДанныеРаспределения = ДанныеРаспределенияШтрихкодовУпаковокПоДокументуОтгрузки(ДокументОтгрузки, РеквизитыДокументаОтгрузки);
Если ДанныеРаспределения.РаспределенныеСтроки.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Для Каждого РаспределеннаяСтрока Из ДанныеРаспределения.РаспределенныеСтроки Цикл
СтрокаТовара = РаспределеннаяСтрока.Ключ;
ДанныеРаспределенияСтроки = РаспределеннаяСтрока.Значение;
Если ДанныеРаспределенияСтроки.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
ОтборЭкземпляров = Новый Структура;
ОтборЭкземпляров.Вставить("Заказ", Заказ);
ОтборЭкземпляров.Вставить("НомерОтправления", НомерОтправления);
ОтборЭкземпляров.Вставить("КодСтроки", СтрокаТовара.КодСтроки);
ОтборЭкземпляров.Вставить("ИдентификаторСтроки", СтрокаТовара.ИдентификаторСтроки);
ОтборЭкземпляров.Вставить("ШтрихКодУпаковкиОбработан", Ложь);
СтрокиЭкземпляров = СведенияПоТоварам.НайтиСтроки(ОтборЭкземпляров);
Для Каждого ЭкземплярТовара Из СтрокиЭкземпляров Цикл
Если ЭкземплярТовара.Статус = Перечисления.СтатусыЗаказовТорговыхПлощадок.ОжидаетСборки Тогда
ЭкземплярТовара.ШтрихкодУпаковки = Справочники.ШтрихкодыУпаковокТоваров.ПустаяСсылка();
ЭкземплярТовара.ПолныйКодМаркировки = "";
ЭкземплярТовара.ШтрихкодУпаковкиЗаполнен = Ложь;
КонецЕсли;
ЭкземплярТовара.КодОшибки = "";
ЭкземплярТовара.ОписаниеОшибки = "";
КоличествоЭкземпляра = ЭкземплярТовара.Количество;
Если ЭкземплярТовара.ТребуетсяМаркировка Тогда
ДополнениеОшибки = "";
ИначеЕсли УчитыватьПризнакМаркировкиИСМП Тогда
ДополнениеОшибки =
НСтр("ru = 'Различается признак маркируемого товара на торговой площадке и в учетной системе 1С.'")
+ Символы.ПС;
Иначе
Продолжить;
КонецЕсли;
Для Каждого ДанныеШтрихкода Из ДанныеРаспределенияСтроки Цикл
Количество = Мин(КоличествоЭкземпляра, ДанныеШтрихкода.Количество);
Если КоличествоЭкземпляра = 0 Тогда
Прервать;
ИначеЕсли Количество < КоличествоЭкземпляра Тогда
Продолжить;
КонецЕсли;
КоличествоЭкземпляра = КоличествоЭкземпляра - Количество;
ДанныеШтрихкода.Количество = ДанныеШтрихкода.Количество - Количество;
ДокументОтгрузкиШтрихкода = ИспользованныеШтрихкодыУпаковок[ДанныеШтрихкода.ШтрихкодУпаковки];
Если Не ПустаяСтрока(ДанныеШтрихкода.ТекстОшибки) Тогда
ЭкземплярТовара.КодОшибки = КодОшибки;
ЭкземплярТовара.ОписаниеОшибки = ДополнениеОшибки + ДанныеШтрихкода.ТекстОшибки;
ИначеЕсли ДокументОтгрузкиШтрихкода <> Неопределено И ДокументОтгрузкиШтрихкода <> ДокументОтгрузки Тогда
Шаблон = НСтр("ru = 'Код маркировки, указанный для товара в документе ""%1"", уже использован в документе ""%2"".'");
ЭкземплярТовара.КодОшибки = КодОшибки;
ЭкземплярТовара.ОписаниеОшибки = ДополнениеОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
ДокументОтгрузки,
ДокументОтгрузкиШтрихкода);
ИначеЕсли ПустаяСтрока(ДанныеШтрихкода.ПолныйКодМаркировки) Тогда
Шаблон = НСтр("ru = 'Требуется пересканировать товар в документе отгрузки ""%1"", т.к. отсутствуют данные о полном коде маркировки.'");
ЭкземплярТовара.КодОшибки = КодОшибки;
ЭкземплярТовара.ОписаниеОшибки = ДополнениеОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
ДокументОтгрузки);
Иначе
Если ЭкземплярТовара.Статус = Перечисления.СтатусыЗаказовТорговыхПлощадок.ОжидаетСборки Тогда
ЭкземплярТовара.ШтрихкодУпаковки = ДанныеШтрихкода.ШтрихкодУпаковки;
ЭкземплярТовара.ПолныйКодМаркировки = ДанныеШтрихкода.ПолныйКодМаркировки;
ЭкземплярТовара.ШтрихкодУпаковкиЗаполнен = ЗначениеЗаполнено(ЭкземплярТовара.ШтрихкодУпаковки);
КонецЕсли;
ЭкземплярТовара.ШтрихКодУпаковкиОбработан = Истина;
Если ЗначениеЗаполнено(ДанныеШтрихкода.ШтрихкодУпаковки) Тогда
ИспользованныеШтрихкодыУпаковок.Вставить(ДанныеШтрихкода.ШтрихкодУпаковки, ЭкземплярТовара.ДокументОтгрузки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Функция СведенияОбОтправлениях(Заказ, СведенияПоТоварам, ДокументыОтгрузкиЗаказов, ТребуетсяЗаписьСведенийОбОтправлениях = Ложь)
ТаблицаСоответствий = ПодготовитьТаблицуДокументовОтгрузки(Заказ, СведенияПоТоварам);
ДанныеПоНомерамОтправлений = Новый Соответствие;
ДанныеПоДокументамОтгрузки = Новый Соответствие;
КлючиДанныхДляЗаписи = РегистрыСведений.ЗаказыТорговыхПлощадок.КлючиДанныхДляЗаписиЗаказаТорговойПлощадки();
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Пока ДокументыОтгрузкиЗаказов.НайтиСледующий(Отбор) Цикл
КоличествоОтправлений = РегистрыСведений.ЗаказыТорговыхПлощадок.ПорядковыйНомерНовогоОтправления(
ДокументыОтгрузкиЗаказов.НомерНовогоОтправления);
ВыборкаДокументовОтгрузки = ДокументыОтгрузкиЗаказов.Выбрать();
Пока ВыборкаДокументовОтгрузки.Следующий() Цикл
Параметры = Новый Структура;
Параметры.Вставить("ИспользоватьНомерОтправления", ВыборкаДокументовОтгрузки.Порядок = 1);
Параметры.Вставить("ДокументОтгрузки", ВыборкаДокументовОтгрузки.ДокументОтгрузки);
Параметры.Вставить("НомерОтправления", ВыборкаДокументовОтгрузки.НомерОтправления);
Параметры.Вставить("НомерРодительскогоОтправления", ВыборкаДокументовОтгрузки.НомерРодительскогоОтправления);
Параметры.Вставить("ПоискДокументаОтгрузки", Не ЗначениеЗаполнено(ВыборкаДокументовОтгрузки.ДокументОтгрузки));
Параметры.Вставить("ПоискНомераОтправления", Не ЗначениеЗаполнено(ВыборкаДокументовОтгрузки.НомерОтправления));
Если ДанныеПоДокументамОтгрузки.Количество() > 0
И ДанныеПоДокументамОтгрузки.Получить(Параметры.ДокументОтгрузки) <> Неопределено Тогда
Параметры.ДокументОтгрузки = Неопределено;
Иначе
ОпределитьДанныеДокументаОтгрузки(
Параметры,
ТаблицаСоответствий,
ДанныеПоДокументамОтгрузки,
ДанныеПоНомерамОтправлений,
ТребуетсяЗаписьСведенийОбОтправлениях);
Если Параметры.ПоискНомераОтправления И ПустаяСтрока(Параметры.НомерОтправления) Тогда
Параметры.НомерОтправления = РегистрыСведений.ЗаказыТорговыхПлощадок.НомерНовогоОтправления(
ВыборкаДокументовОтгрузки.НомерЗаказа,
КоличествоОтправлений);
КоличествоОтправлений = КоличествоОтправлений + 1;
Параметры.ИспользоватьНомерОтправления = Истина;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.ДокументОтгрузки) Тогда
ДанныеПоДокументамОтгрузки.Вставить(Параметры.ДокументОтгрузки, Параметры.НомерОтправления);
КонецЕсли;
Если Параметры.ИспользоватьНомерОтправления Тогда
ДанныеОтправления = Новый Структура(КлючиДанныхДляЗаписи);
ЗаполнитьЗначенияСвойств(ДанныеОтправления, ВыборкаДокументовОтгрузки,,
"Заказ, ДокументОтгрузки, НомерОтправления, НомерРодительскогоОтправления");
ДанныеОтправления.Заказ = Заказ;
ДанныеОтправления.ДокументОтгрузки = Параметры.ДокументОтгрузки;
ДанныеОтправления.НомерОтправления = Параметры.НомерОтправления;
Если Параметры.НомерРодительскогоОтправления <> Параметры.НомерОтправления Тогда
ДанныеОтправления.НомерРодительскогоОтправления = Параметры.НомерРодительскогоОтправления;
КонецЕсли;
ДанныеПоНомерамОтправлений.Вставить(Параметры.НомерОтправления, ДанныеОтправления);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ДокументыОтгрузкиЗаказов.Сбросить();
СведенияОбОтправлениях = Новый Структура;
СведенияОбОтправлениях.Вставить("ДанныеПоНомерамОтправлений", ДанныеПоНомерамОтправлений);
СведенияОбОтправлениях.Вставить("ДанныеПоДокументамОтгрузки", ДанныеПоДокументамОтгрузки);
Возврат СведенияОбОтправлениях;
КонецФункции
Функция ПодготовитьТаблицуДокументовОтгрузки(Заказ, СведенияПоТоварам)
ТипСтрока_50 = Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(50));
ТаблицаСоответствий = Новый ТаблицаЗначений;
ТаблицаСоответствий.Колонки.Добавить("ДокументОтгрузки");
ТаблицаСоответствий.Колонки.Добавить("НомерОтправления", ТипСтрока_50);
ТаблицаСоответствий.Колонки.Добавить("НомерРодительскогоОтправления", ТипСтрока_50);
НомераОтправлений = Новый Соответствие;
ДокументыОтгрузки = Новый Соответствие;
ОтборЭкземпляров = Новый Структура;
ОтборЭкземпляров.Вставить("Заказ", Заказ);
ОтборЭкземпляров.Вставить("КодСтрокиЗаполнен", Истина);
ОтборЭкземпляров.Вставить("ИдентификаторСтрокиЗаполнен", Истина);
СтрокиЭкземпляров = СведенияПоТоварам.НайтиСтроки(ОтборЭкземпляров);
Для Каждого СтрокаЭкземпляра Из СтрокиЭкземпляров Цикл
ДанныеДокументаОтгрузки = ДокументыОтгрузки[СтрокаЭкземпляра.ДокументОтгрузки];
Если ДанныеДокументаОтгрузки = Неопределено Тогда
ДанныеДокументаОтгрузки = Новый Структура;
ДанныеДокументаОтгрузки.Вставить("НомерРодительскогоОтправления", СтрокаЭкземпляра.НомерРодительскогоОтправления);
ДанныеДокументаОтгрузки.Вставить("СписокНомеровОтправлений", Новый Массив);
ДокументыОтгрузки.Вставить(СтрокаЭкземпляра.ДокументОтгрузки, ДанныеДокументаОтгрузки);
КонецЕсли;
Если ДанныеДокументаОтгрузки.СписокНомеровОтправлений.Найти(СтрокаЭкземпляра.НомерОтправления) = Неопределено Тогда
ДанныеДокументаОтгрузки.СписокНомеровОтправлений.Добавить(СтрокаЭкземпляра.НомерОтправления);
КонецЕсли;
СписокДокументовОтгрузки = НомераОтправлений[СтрокаЭкземпляра.НомерОтправления];
Если СписокДокументовОтгрузки = Неопределено Тогда
СписокДокументовОтгрузки = Новый Массив;
НомераОтправлений.Вставить(СтрокаЭкземпляра.НомерОтправления, СписокДокументовОтгрузки);
КонецЕсли;
Если СписокДокументовОтгрузки.Найти(СтрокаЭкземпляра.ДокументОтгрузки) = Неопределено Тогда
СписокДокументовОтгрузки.Добавить(СтрокаЭкземпляра.ДокументОтгрузки);
КонецЕсли;
КонецЦикла;
ТаблицаСоответствий.Свернуть("ДокументОтгрузки, НомерОтправления, НомерРодительскогоОтправления");
ТаблицаСоответствий.Колонки.Добавить("КоличествоНомеровОтправленийДокументаОтгрузки", Новый ОписаниеТипов("Число"));
ТаблицаСоответствий.Колонки.Добавить("КоличествоДокументовОтгрузкиНомераОтправления", Новый ОписаниеТипов("Число"));
ТаблицаСоответствий.Колонки.Добавить("Обработана", Новый ОписаниеТипов("Булево"));
Для Каждого ДанныеДокументаОтгрузки Из ДокументыОтгрузки Цикл
ДокументОтгрузки = ДанныеДокументаОтгрузки.Ключ;
СписокНомеровОтправлений = ДанныеДокументаОтгрузки.Значение.СписокНомеровОтправлений;
НомерРодительскогоОтправления = ДанныеДокументаОтгрузки.Значение.НомерРодительскогоОтправления;
Для Каждого НомерОтправления Из СписокНомеровОтправлений Цикл
СписокДокументовОтгрузки = НомераОтправлений[НомерОтправления];
НовоеСоответствие = ТаблицаСоответствий.Добавить();
НовоеСоответствие.ДокументОтгрузки = ДокументОтгрузки;
НовоеСоответствие.НомерОтправления = НомерОтправления;
НовоеСоответствие.НомерРодительскогоОтправления = НомерРодительскогоОтправления;
НовоеСоответствие.КоличествоНомеровОтправленийДокументаОтгрузки = СписокНомеровОтправлений.Количество();
НовоеСоответствие.КоличествоДокументовОтгрузкиНомераОтправления = СписокДокументовОтгрузки.Количество();
КонецЦикла;
КонецЦикла;
Возврат ТаблицаСоответствий;
КонецФункции
Процедура ОпределитьДанныеДокументаОтгрузки(Параметры, ТаблицаСоответствий,
ДанныеПоДокументамОтгрузки, ДанныеПоНомерамОтправлений,ТребуетсяЗаписьСведенийОбОтправлениях = Ложь)
Если Не Параметры.ПоискДокументаОтгрузки
И Не Параметры.ПоискНомераОтправления Тогда
Параметры.ПоискДокументаОтгрузки = Истина;
Параметры.ПоискНомераОтправления = Истина;
КонецЕсли;
ОтборСоответствия = Новый Структура;
ОтборСоответствия.Вставить("Обработана", Ложь);
Если Параметры.ПоискДокументаОтгрузки Тогда
ОтборСоответствия.Вставить("НомерОтправления", Параметры.НомерОтправления);
КонецЕсли;
Если Параметры.ПоискНомераОтправления Тогда
ОтборСоответствия.Вставить("ДокументОтгрузки", Параметры.ДокументОтгрузки);
КонецЕсли;
СтрокиСоответствий = ТаблицаСоответствий.НайтиСтроки(ОтборСоответствия);
НайденнаяСтрока = НайтиСоответствиеНомераОтправленияИДокументаОтгрузки(
СтрокиСоответствий,
Параметры.ПоискДокументаОтгрузки,
ДанныеПоДокументамОтгрузки,
ДанныеПоНомерамОтправлений);
Если НайденнаяСтрока = Неопределено
И Параметры.ПоискНомераОтправления И Параметры.ПоискДокументаОтгрузки Тогда
ОтборСоответствия.Удалить("НомерОтправления");
Параметры.ПоискДокументаОтгрузки = Ложь;
СтрокиСоответствий = ТаблицаСоответствий.НайтиСтроки(ОтборСоответствия);
НайденнаяСтрока = НайтиСоответствиеНомераОтправленияИДокументаОтгрузки(
СтрокиСоответствий,
Параметры.ПоискДокументаОтгрузки,
ДанныеПоДокументамОтгрузки,
ДанныеПоНомерамОтправлений);
КонецЕсли;
Если НайденнаяСтрока = Неопределено Тогда
Если ТаблицаСоответствий.Найти(Параметры.ДокументОтгрузки) = Неопределено Тогда
Параметры.ДокументОтгрузки = Неопределено;
Если Параметры.ИспользоватьНомерОтправления Или Параметры.ПоискДокументаОтгрузки Тогда
ТребуетсяЗаписьСведенийОбОтправлениях = Истина;
КонецЕсли;
Иначе
Параметры.ИспользоватьНомерОтправления = Истина;
КонецЕсли;
Иначе
Если Параметры.ПоискДокументаОтгрузки Тогда
Параметры.ДокументОтгрузки = НайденнаяСтрока.ДокументОтгрузки;
Иначе
Параметры.НомерОтправления = НайденнаяСтрока.НомерОтправления;
КонецЕсли;
Параметры.НомерРодительскогоОтправления = НайденнаяСтрока.НомерРодительскогоОтправления;
Параметры.ИспользоватьНомерОтправления = Истина;
ТребуетсяЗаписьСведенийОбОтправлениях = Истина;
КонецЕсли;
КонецПроцедуры
Функция НайтиСоответствиеНомераОтправленияИДокументаОтгрузки(СтрокиСоответствий, ЭтоПоискДокументаОтгрузки,
ДанныеПоДокументамОтгрузки, ДанныеПоНомерамОтправлений)
НайденнаяСтрока = Неопределено;
Для Каждого СтрокаСоответствия Из СтрокиСоответствий Цикл
Если НайденнаяСтрока = Неопределено Тогда
Если ЭтоПоискДокументаОтгрузки И (ДанныеПоДокументамОтгрузки.Количество() = 0
Или ДанныеПоДокументамОтгрузки.Получить(СтрокаСоответствия.ДокументОтгрузки) = Неопределено)
Или Не ЭтоПоискДокументаОтгрузки И (ДанныеПоНомерамОтправлений.Количество() = 0
Или ДанныеПоНомерамОтправлений.Получить(СтрокаСоответствия.НомерОтправления) = Неопределено) Тогда
НайденнаяСтрока = СтрокаСоответствия;
КонецЕсли;
Иначе
Если ЭтоПоискДокументаОтгрузки Тогда
КолонкаПроверки = "КоличествоНомеровОтправленийДокументаОтгрузки";
Иначе
КолонкаПроверки = "КоличествоДокументовОтгрузкиНомераОтправления";
КонецЕсли;
Если НайденнаяСтрока[КолонкаПроверки] < СтрокаСоответствия[КолонкаПроверки]
И (ЭтоПоискДокументаОтгрузки И (ДанныеПоДокументамОтгрузки.Количество() = 0
Или ДанныеПоДокументамОтгрузки.Получить(СтрокаСоответствия.ДокументОтгрузки) = Неопределено)
Или Не ЭтоПоискДокументаОтгрузки И (ДанныеПоНомерамОтправлений.Количество() > 0
Или ДанныеПоНомерамОтправлений.Получить(СтрокаСоответствия.НомерОтправления) = Неопределено)) Тогда
НайденнаяСтрока = СтрокаСоответствия;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НайденнаяСтрока <> Неопределено Тогда
НайденнаяСтрока.Обработана = Истина;
КонецЕсли;
Возврат НайденнаяСтрока;
КонецФункции
Процедура ЗаполнитьНомераОтправлений(Заказ, СведенияПоТоварам, СведенияОбОтправлениях,
ТребуетсяЗаписьСведенийОбОтправлениях = Ложь, ЗаписатьСведенияОбОтправлениях = Ложь)
ДанныеПоДокументамОтгрузки = СведенияОбОтправлениях.ДанныеПоДокументамОтгрузки;
Для Каждого ДанныеПоДокументуОтгрузки Из ДанныеПоДокументамОтгрузки Цикл
ДокументОтгрузки = ДанныеПоДокументуОтгрузки.Ключ;
НомерОтправления = ДанныеПоДокументуОтгрузки.Значение;
Если ДанныеПоДокументамОтгрузки.Количество() = 1
И Не ЗначениеЗаполнено(ДокументОтгрузки) Тогда
ТребуетсяЗаписьСведенийОбОтправлениях = Ложь;
КонецЕсли;
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
Отбор.Вставить("ДокументОтгрузки", ДокументОтгрузки);
Если Не ТребуетсяЗаписьСведенийОбОтправлениях Тогда
Отбор.Вставить("НомерОтправления", "");
КонецЕсли;
СтрокиЭкземпляров = СведенияПоТоварам.НайтиСтроки(Отбор);
Для Каждого ЭкземплярТовара Из СтрокиЭкземпляров Цикл
Если ПустаяСтрока(ЭкземплярТовара.НомерОтправления)
Или Не ЗаписатьСведенияОбОтправлениях Тогда
ЭкземплярТовара.НомерОтправления = НомерОтправления;
ИначеЕсли ТребуетсяЗаписьСведенийОбОтправлениях
И ЭкземплярТовара.НомерОтправления <> НомерОтправления Тогда
ЭкземплярТовара.ИдентификаторСтроки = "";
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Функция ЗаписатьИзмененияСведенийПоТоварам(Заказ, СведенияПоТоварам)
ТекстОшибки = "";
УстановитьПривилегированныйРежим(Истина);
НачатьТранзакцию();
Попытка
БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировкиДанных =
БлокировкаДанных.Добавить("РегистрСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок");
ЭлементБлокировкиДанных.УстановитьЗначение("Заказ", Заказ);
БлокировкаДанных.Заблокировать();
НаборЗаписей = РегистрыСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Заказ.Установить(Заказ);
Отбор = Новый Структура;
Отбор.Вставить("Заказ", Заказ);
СтрокиЭкземпляров = СведенияПоТоварам.НайтиСтроки(Отбор);
Для Каждого ЭкземплярТовара Из СтрокиЭкземпляров Цикл
Запись = НаборЗаписей.Добавить();
ЗаполнитьЗначенияСвойств(Запись, ЭкземплярТовара,, "Количество");
Запись.Количество = ЭкземплярТовара.КоличествоУпаковок;
Если ЭкземплярТовара.ДокументОтгрузкиКОформлению Тогда
Запись.ИдентификаторСтроки = "";
КонецЕсли;
КонецЦикла;
НаборЗаписей.Записать();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось записать изменения сведений по товарам заказа %1 по причине: %2.'"),
Заказ,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
УстановитьПривилегированныйРежим(Ложь);
Возврат ТекстОшибки;
КонецФункции
Процедура ВернутьЭкземплярВРодительскоеОтправление(КлючЗаписи)
Запись = РегистрыСведений.ДополнительныеСведенияПоТоварамЗаказовТорговыхПлощадок.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(Запись, КлючЗаписи);
Запись.Прочитать();
Если Запись.Выбран() И Не ПустаяСтрока(Запись.НомерРодительскогоОтправления) Тогда
Запись.НомерОтправления = Запись.НомерРодительскогоОтправления;
Запись.Записать();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли