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