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