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