КомплектПокупки = Новый ТаблицаЗначений;
КомплектПокупки.Колонки.Добавить("НомерСтрокиКомплекта", Новый ОписаниеТипов("Строка"));
КомплектПокупки.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
КомплектПокупки.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
КомплектПокупки.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
// Может быть лучше цикл в цикле?
Для Каждого СтрокаУсловия Из Условие.Строки Цикл
Если СтрокаУсловия.ИмяРаздела = "КомплектПокупки" Тогда
НоваяСтрокаКомплекта = КомплектПокупки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаКомплекта, СтрокаУсловия);
КонецЕсли;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Товары.КлючСвязи КАК КлючСвязи,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Количество КАК Количество,
| Товары.Сегмент КАК Сегмент
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Сегмент КАК Сегмент,
| СУММА(Товары.Количество) КАК Количество
|ПОМЕСТИТЬ ТоварыБезСтрок
|ИЗ
| Товары КАК Товары
|СГРУППИРОВАТЬ ПО
| Товары.Номенклатура,
| Товары.Характеристика,
| Товары.Сегмент
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КомплектПокупки.Номенклатура,
| КомплектПокупки.Характеристика,
| КомплектПокупки.Количество КАК Количество
|ПОМЕСТИТЬ КомплектПокупки
|ИЗ
| &КомплектПокупки КАК КомплектПокупки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Товары.КлючСвязи КАК КлючСвязи,
| КомплектПокупки.Номенклатура КАК Номенклатура,
| КомплектПокупки.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(Товары.Количество, 0) = 0
| ИЛИ КомплектПокупки.Количество = 0
| ТОГДА 0
| ИНАЧЕ ВЫБОР
| КОГДА (ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))) = (ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 3)))
| ТОГДА ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))
| ИНАЧЕ ВЫБОР
| КОГДА (ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))) * КомплектПокупки.Количество - Товары.Количество >= 0
| ТОГДА (ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))) - 1
| ИНАЧЕ ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ КАК КоличествоКомплектов
|ИЗ
| КомплектПокупки КАК КомплектПокупки
| ЛЕВОЕ СОЕДИНЕНИЕ Товары КАК Товары
| ПО КомплектПокупки.Номенклатура = Товары.Номенклатура
| И КомплектПокупки.Характеристика = Товары.Характеристика
| И Товары.Сегмент = &Сегмент
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КомплектПокупки.Номенклатура КАК Номенклатура,
| КомплектПокупки.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ЕСТЬNULL(Товары.Количество, 0) = 0
| ИЛИ КомплектПокупки.Количество = 0
| ТОГДА 0
| ИНАЧЕ ВЫБОР
| КОГДА (ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))) = (ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 3)))
| ТОГДА ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))
| ИНАЧЕ ВЫБОР
| КОГДА (ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))) * КомплектПокупки.Количество - Товары.Количество >= 0
| ТОГДА (ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))) - 1
| ИНАЧЕ ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ КАК КоличествоКомплектов
|ПОМЕСТИТЬ ТаблицаКомплектовБезСтрок
|ИЗ
| КомплектПокупки КАК КомплектПокупки
| ЛЕВОЕ СОЕДИНЕНИЕ ТоварыБезСтрок КАК Товары
| ПО КомплектПокупки.Номенклатура = Товары.Номенклатура
| И КомплектПокупки.Характеристика = Товары.Характеристика
| И Товары.Сегмент = &Сегмент
|
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МИНИМУМ(ТаблицаКомплектов.КоличествоКомплектов) КАК КоличествоКомплектов
|ИЗ
| ТаблицаКомплектовБезСтрок КАК ТаблицаКомплектов
|";
Запрос.УстановитьПараметр("Товары", СтрокаДереваСкидок.СтруктураДополнительныхДанных.ТаблицаТоваровПоСегментам);
Запрос.УстановитьПараметр("КомплектПокупки", КомплектПокупки);
Запрос.УстановитьПараметр("Сегмент", Справочники.СегментыНоменклатуры.ПустаяСсылка());
РезультатПакета = Запрос.ВыполнитьПакет();
ВыборкаКомплекты = РезультатПакета[5].Выбрать();
КоличествоКомплектов = 0;
Если ВыборкаКомплекты.Следующий() Тогда
Если ВыборкаКомплекты.КоличествоКомплектов > 0 Тогда
ТекущееУсловиеВыполнено = Истина;
КоличествоКомплектов = ВыборкаКомплекты.КоличествоКомплектов;
СтрокаДереваСкидок.КоличествоВыполненийУсловия = КоличествоКомплектов;
КонецЕсли;
КонецЕсли;
Если КоличествоКомплектов > 0 Тогда
СтруктураПоиска = Новый Структура;
ВыборкаСтроки = РезультатПакета[3].Выбрать();
Пока ВыборкаСтроки.Следующий() Цикл
Если ВыборкаСтроки.КоличествоКомплектов > 0 Тогда
СтруктураПоиска.Вставить("КлючСвязи", ВыборкаСтроки.КлючСвязи);
СтрокиЧека = СтрокаДереваСкидок.СтруктураДополнительныхДанных.ТаблицаТоваровПоСегментам.НайтиСтроки(СтруктураПоиска);
Для Каждого СтрокаЧека Из СтрокиЧека Цикл
СтрокаЧека.КоличествоВыполненийУсловия = ВыборкаСтроки.КоличествоКомплектов;
СтрокаЧека.УсловиеПоСтрокеВыполнено = Истина;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
|