Настройка способов обеспечения потребностей / Схема обеспечения / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	УстановитьУсловноеОформление();
	
	// Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	НастроитьФормуПоПравамИФункциональнымОпциям();
	
	НастроитьФормуПоПараметрам();
	Если СхемаОбеспечения.Ссылка.Пустая() И Не ЗначениеЗаполнено(СхемаОбеспечения.Наименование) Тогда
		СхемаОбеспечения.Наименование = НСтр("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) Тогда
				ЗагрузитьДеревоФорматов(Истина);
			КонецЕсли;
		ИначеЕсли Элементы.СтраницаСпособыОбеспеченияСклада.Видимость Тогда
			Элементы.СписокСпособовОбеспеченияСклада.Обновить();
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

#КонецОбласти

Связанные материалы