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