Упаковки и единицы измерения / Форма выбора из документов / Модуль формы

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	УстановитьУсловноеОформление();
	
	// Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	Склад = Неопределено;
	Помещение = Неопределено;
	Параметры.Свойство("Номенклатура", Номенклатура);
	Если Параметры.Свойство("Склад",Склад) Тогда
		Параметры.Свойство("Помещение",Помещение);
		ДобавлятьЕдиницуХранения = Не СкладыСервер.ИспользоватьАдресноеХранение(Склад,Помещение)
	Иначе
		ДобавлятьЕдиницуХранения = Истина;
	КонецЕсли;
	
	ПоказыватьМерныеЕдиницыИзмерения = Неопределено;
	Если Не Параметры.Свойство("ПоказыватьМерныеЕдиницыИзмерения", ПоказыватьМерныеЕдиницыИзмерения) Тогда
		ПоказыватьМерныеЕдиницыИзмерения = Истина;
	КонецЕсли;
	
	Если Не Параметры.Свойство("ПоказыватьТоварныеМеста", ПоказыватьТоварныеМеста) Тогда
		ПоказыватьТоварныеМеста = Ложь;
	КонецЕсли;
	
	ЗаполнитьДеревоЕдиницИзмеренийУпаковок();
	
	ЕдиницаХранения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Номенклатура, "ЕдиницаИзмерения");
	
	Элементы.ГруппаСоздать.Видимость = ПравоДоступа("Добавление", Метаданные.Справочники.УпаковкиЕдиницыИзмерения);
	
	Если Не Элементы.ГруппаСоздать.Видимость Тогда
		Возврат;
	КонецЕсли;

	МожноДобавлятьУпаковки = Ложь;
	Если ЗначениеЗаполнено(Номенклатура) Тогда
		РеквизитыНоменклатуры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Номенклатура, "ИспользоватьУпаковки");
		МожноДобавлятьУпаковки = РеквизитыНоменклатуры.ИспользоватьУпаковки;
	КонецЕсли;
	ТипИзмеряемойВеличины = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЕдиницаХранения, "ТипИзмеряемойВеличины");
	МерныеТипыЕдиницИзмерений = Справочники.УпаковкиЕдиницыИзмерения.МерныеТипыЕдиницИзмерений();
	ДобавлятьЕдиницыИзмерения = МерныеТипыЕдиницИзмерений.Найти(ТипИзмеряемойВеличины) <> Неопределено;
	Элементы.ФормаСоздатьУпаковку.Видимость = МожноДобавлятьУпаковки;
	Если Не (ДобавлятьЕдиницыИзмерения
		Или ПоказыватьМерныеЕдиницыИзмерения
			И МерныеЕдиницыИзмеренияНоменклатуры.Количество() > 0) Тогда

		Элементы.ГруппаСоздать.Видимость = Ложь;
		Элементы.СоздатьУпаковку.Видимость = МожноДобавлятьУпаковки;

	КонецЕсли;

КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Выбрать(Команда)
	Если Элементы.УпаковкиЕдиницыИзмерения.ТекущаяСтрока = Неопределено Тогда
		Возврат;
	КонецЕсли;
	ВыбраннаяСтрокаДерева = УпаковкиЕдиницыИзмерения.НайтиПоИдентификатору(Элементы.УпаковкиЕдиницыИзмерения.ТекущаяСтрока);	
	Если ТипЗнч(ВыбраннаяСтрокаДерева.Ссылка) = Тип("СправочникСсылка.УпаковкиЕдиницыИзмерения") Тогда 
		Если Не ВыбраннаяСтрокаДерева.ДопустимыйКоэффициент Тогда
			ТекстПредупреждения = 
				НСтр("ru='Пересчет ""[ЕдИзм1]"" в ""[ЕдИзм2]"" для номенклатуры ""[Номенклатура]"" не поддерживается –
				|слишком большой коэффициент пересчета.'");
			ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ТекстПредупреждения, 
				Новый Структура("ЕдИзм1, ЕдИзм2, Номенклатура", 
					Строка(ВыбраннаяСтрокаДерева.Ссылка), Строка(ЕдиницаХранения), Строка(Номенклатура)));
			ПоказатьПредупреждение(, ТекстПредупреждения);
			Возврат;
		ИначеЕсли ЕдиницаХранения = ВыбраннаяСтрокаДерева.Ссылка Тогда
			ОповеститьОВыборе(ПредопределенноеЗначение("Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка"));
		Иначе
			ОповеститьОВыборе(ВыбраннаяСтрокаДерева.Ссылка);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура СоздатьУпаковку(Команда)
	
	ЗначенияЗаполнения = Новый Структура;
	ЗначенияЗаполнения.Вставить("Владелец", Номенклатура);
	ЗначенияЗаполнения.Вставить("ТипИзмеряемойВеличины", ПредопределенноеЗначение("Перечисление.ТипыИзмеряемыхВеличин.Упаковка"));
	
	Если Элементы.УпаковкиЕдиницыИзмерения.ТекущиеДанные <> Неопределено 
		И Элементы.УпаковкиЕдиницыИзмерения.ТекущиеДанные.ТипИзмеряемойВеличины = ПредопределенноеЗначение("Перечисление.ТипыИзмеряемыхВеличин.Упаковка") Тогда
		
		ЗначенияЗаполнения.Вставить("Родитель", Элементы.УпаковкиЕдиницыИзмерения.ТекущиеДанные.Ссылка);
		
	КонецЕсли;
	
	ПараметрыСоздания = Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьУпаковкуЕдиницуИзмерениеЗавершение", ЭтаФорма);
	
	ОткрытьФорму("Справочник.УпаковкиЕдиницыИзмерения.Форма.ФормаЭлементаУпаковки", ПараметрыСоздания, ЭтаФорма,,,,ОписаниеОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьЕдиницуИзмерения(Команда)
	
	ЗначенияЗаполнения = Новый Структура;
	ЗначенияЗаполнения.Вставить("Владелец", ПредопределенноеЗначение("Справочник.НаборыУпаковок.БазовыеЕдиницыИзмерения"));
	
	Если Элементы.УпаковкиЕдиницыИзмерения.ТекущиеДанные <> Неопределено 
		И Элементы.УпаковкиЕдиницыИзмерения.ТекущиеДанные.ТипИзмеряемойВеличины <> ПредопределенноеЗначение("Перечисление.ТипыИзмеряемыхВеличин.Упаковка") Тогда
		
		ЗначенияЗаполнения.Вставить("ТипИзмеряемойВеличины", Элементы.УпаковкиЕдиницыИзмерения.ТекущиеДанные.ТипИзмеряемойВеличины);
		
	КонецЕсли;
			
	ПараметрыСоздания = Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьУпаковкуЕдиницуИзмерениеЗавершение", ЭтаФорма);
	
	ОткрытьФорму("Справочник.УпаковкиЕдиницыИзмерения.Форма.ФормаЭлементаЕдиницыИзмерения", ПараметрыСоздания, ЭтаФорма,,,,ОписаниеОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьЕдиницуИзмеренияИзКлассификатора(Команда)
	
	ПараметрыОтбора = Новый Массив;
	Если Элементы.УпаковкиЕдиницыИзмерения.ТекущиеДанные <> Неопределено
		И ЗначениеЗаполнено(Элементы.УпаковкиЕдиницыИзмерения.ТекущиеДанные.ТипИзмеряемойВеличины)
		И Элементы.УпаковкиЕдиницыИзмерения.ТекущиеДанные.ТипИзмеряемойВеличины <> ПредопределенноеЗначение("Перечисление.ТипыИзмеряемыхВеличин.Упаковка") Тогда
		
		ПараметрыОтбора.Добавить(Элементы.УпаковкиЕдиницыИзмерения.ТекущиеДанные.ТипИзмеряемойВеличины);
		
	ИначеЕсли МерныеЕдиницыИзмеренияНоменклатуры.Количество() > 0 Тогда
		ПараметрыОтбора = МерныеЕдиницыИзмеренияНоменклатуры.ВыгрузитьЗначения();
	КонецЕсли;
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
	
	ОткрытьФорму("Справочник.УпаковкиЕдиницыИзмерения.Форма.КлассификаторЕдиницИзмерения",
		ПараметрыФормы,
		,
		,
		,
		,
		Новый ОписаниеОповещения("СоздатьУпаковкуЕдиницуИзмерениеЗавершение",
		ЭтотОбъект));

КонецПроцедуры

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

#Область ОбработчикиСобытийТаблицыФормыУпаковкиЕдиницыИзмерения

&НаКлиенте
Процедура ЕдиницыИзмеренияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	ВыбраннаяСтрокаДерева = УпаковкиЕдиницыИзмерения.НайтиПоИдентификатору(ВыбраннаяСтрока);
	Если ТипЗнч(ВыбраннаяСтрокаДерева.Ссылка) = Тип("СправочникСсылка.УпаковкиЕдиницыИзмерения") Тогда 
		Если Не ВыбраннаяСтрокаДерева.ДопустимыйКоэффициент Тогда
			ТекстПредупреждения = 
				НСтр("ru='Пересчет ""[ЕдИзм1]"" в ""[ЕдИзм2]"" для номенклатуры ""[Номенклатура]"" не поддерживается –
				|слишком большой коэффициент пересчета.'");
			ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ТекстПредупреждения, 
				Новый Структура("ЕдИзм1, ЕдИзм2, Номенклатура", 
					Строка(ВыбраннаяСтрокаДерева.Ссылка), Строка(ЕдиницаХранения), Строка(Номенклатура)));
			ПоказатьПредупреждение(, ТекстПредупреждения);
			СтандартнаяОбработка = Ложь;
		ИначеЕсли ЕдиницаХранения = ВыбраннаяСтрокаДерева.Ссылка Тогда
			ОповеститьОВыборе(ПредопределенноеЗначение("Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка"));
		Иначе
			ОповеститьОВыборе(ВыбраннаяСтрокаДерева.Ссылка);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

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

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура ЗаполнитьДеревоЕдиницИзмеренийУпаковок()
	
	МерныеЕдиницыИзмеренияНоменклатуры.Очистить();
	УпаковкиЕдиницыИзмерения.ПолучитьЭлементы().Очистить();
	
	Запрос = Новый Запрос;
	ТекстЗапроса = 	
	"ВЫБРАТЬ
	|	ВнутреннийЗапрос.Ссылка КАК Ссылка,
	|	ВнутреннийЗапрос.ТипИзмеряемойВеличины КАК ТипИзмеряемойВеличины,
	|	ВнутреннийЗапрос.Порядок КАК Порядок,
	|	ИСТИНА КАК ДопустимыйКоэффициент
	|ИЗ
	|	(ВЫБРАТЬ
	|		Номенклатура.ЕдиницаИзмерения КАК Ссылка,
	|		НЕОПРЕДЕЛЕНО КАК ТипИзмеряемойВеличины,
	|		1 КАК Порядок
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И (&ДобавлятьЕдиницуХранения
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес)
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем)
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина)
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь)
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Мощность)
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Энергия)
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.ЭлектрическийЗаряд)
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Время))
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ РАЗЛИЧНЫЕ
	|		ПРЕДСТАВЛЕНИЕ(ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)),
	|		ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка),
	|		2
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И Номенклатура.ИспользоватьУпаковки
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ РАЗЛИЧНЫЕ
	|		ПРЕДСТАВЛЕНИЕ(ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес)),
	|		ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес),
	|		3
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И Номенклатура.ВесИспользовать
	|		И Номенклатура.ВесМожноУказыватьВДокументах
	|		И (&ПоказыватьМерныеЕдиницыИзмерения
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес))
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ РАЗЛИЧНЫЕ
	|		ПРЕДСТАВЛЕНИЕ(ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем)),
	|		ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем),
	|		4
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И Номенклатура.ОбъемИспользовать
	|		И Номенклатура.ОбъемМожноУказыватьВДокументах
	|		И (&ПоказыватьМерныеЕдиницыИзмерения
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем))
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ РАЗЛИЧНЫЕ
	|		ПРЕДСТАВЛЕНИЕ(ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина)),
	|		ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина),
	|		5
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И Номенклатура.ДлинаИспользовать
	|		И Номенклатура.ДлинаМожноУказыватьВДокументах
	|		И (&ПоказыватьМерныеЕдиницыИзмерения
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина))
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ РАЗЛИЧНЫЕ
	|		ПРЕДСТАВЛЕНИЕ(ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь)),
	|		ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь),
	|		6
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И Номенклатура.ПлощадьИспользовать
	|		И Номенклатура.ПлощадьМожноУказыватьВДокументах
	|		И (&ПоказыватьМерныеЕдиницыИзмерения
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь))
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ РАЗЛИЧНЫЕ
	|		ПРЕДСТАВЛЕНИЕ(ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Мощность)),
	|		ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Мощность),
	|		7
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Мощность)
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ РАЗЛИЧНЫЕ
	|		ПРЕДСТАВЛЕНИЕ(ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Энергия)),
	|		ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Энергия),
	|		8
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Энергия)
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ РАЗЛИЧНЫЕ
	|		ПРЕДСТАВЛЕНИЕ(ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.ЭлектрическийЗаряд)),
	|		ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.ЭлектрическийЗаряд),
	|		9
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.ЭлектрическийЗаряд)
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ РАЗЛИЧНЫЕ
	|		ПРЕДСТАВЛЕНИЕ(ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Время)),
	|		ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Время),
	|		10
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Время)) КАК ВнутреннийЗапрос
	|
	|УПОРЯДОЧИТЬ ПО
	|	ВнутреннийЗапрос.Порядок
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВнутреннийЗапрос.Ссылка КАК Ссылка,
	|	ВнутреннийЗапрос.Порядок КАК Порядок,
	|	ВнутреннийЗапрос.Коэффициент КАК Коэффициент,
	|	ВнутреннийЗапрос.ДопустимыйКоэффициент КАК ДопустимыйКоэффициент
	|ИЗ
	|	(ВЫБРАТЬ
	|		УпаковкиНоменклатуры.Ссылка КАК Ссылка,
	|		3 КАК Порядок,
	|		&ТекстЗапросаКоэффициентУпаковки КАК Коэффициент,
	|		&ТекстЗапросаДоступностьКоэффициентУпаковки КАК ДопустимыйКоэффициент
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
	|			ПО (Номенклатура.ВесИспользовать)
	|				И (Номенклатура.ВесМожноУказыватьВДокументах)
	|				И (УпаковкиНоменклатуры.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес))
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И (&ПоказыватьМерныеЕдиницыИзмерения
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес))
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		УпаковкиНоменклатуры.Ссылка,
	|		4,
	|		&ТекстЗапросаКоэффициентУпаковки,
	|		&ТекстЗапросаДоступностьКоэффициентУпаковки
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
	|			ПО (Номенклатура.ОбъемИспользовать)
	|				И (Номенклатура.ОбъемМожноУказыватьВДокументах)
	|				И (УпаковкиНоменклатуры.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем))
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И (&ПоказыватьМерныеЕдиницыИзмерения
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем))
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		УпаковкиНоменклатуры.Ссылка,
	|		5,
	|		&ТекстЗапросаКоэффициентУпаковки,
	|		&ТекстЗапросаДоступностьКоэффициентУпаковки
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
	|			ПО (Номенклатура.ДлинаИспользовать)
	|				И (Номенклатура.ДлинаМожноУказыватьВДокументах)
	|				И (УпаковкиНоменклатуры.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина))
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И (&ПоказыватьМерныеЕдиницыИзмерения
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина))
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		УпаковкиНоменклатуры.Ссылка,
	|		6,
	|		&ТекстЗапросаКоэффициентУпаковки,
	|		&ТекстЗапросаДоступностьКоэффициентУпаковки
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
	|			ПО (Номенклатура.ПлощадьИспользовать)
	|				И (Номенклатура.ПлощадьМожноУказыватьВДокументах)
	|				И (УпаковкиНоменклатуры.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь))
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И (&ПоказыватьМерныеЕдиницыИзмерения
	|				ИЛИ Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь))
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		УпаковкиНоменклатуры.Ссылка,
	|		7,
	|		&ТекстЗапросаКоэффициентУпаковки,
	|		&ТекстЗапросаДоступностьКоэффициентУпаковки
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
	|			ПО (УпаковкиНоменклатуры.ТипИзмеряемойВеличины = Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины)
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Мощность)
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		УпаковкиНоменклатуры.Ссылка,
	|		8,
	|		&ТекстЗапросаКоэффициентУпаковки,
	|		&ТекстЗапросаДоступностьКоэффициентУпаковки
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
	|			ПО (УпаковкиНоменклатуры.ТипИзмеряемойВеличины = Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины)
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Энергия)
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		УпаковкиНоменклатуры.Ссылка,
	|		9,
	|		&ТекстЗапросаКоэффициентУпаковки,
	|		&ТекстЗапросаДоступностьКоэффициентУпаковки
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
	|			ПО (УпаковкиНоменклатуры.ТипИзмеряемойВеличины = Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины)
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.ЭлектрическийЗаряд)
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		УпаковкиНоменклатуры.Ссылка,
	|		10,
	|		&ТекстЗапросаКоэффициентУпаковки,
	|		&ТекстЗапросаДоступностьКоэффициентУпаковки
	|	ИЗ
	|		Справочник.Номенклатура КАК Номенклатура
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиНоменклатуры
	|			ПО (УпаковкиНоменклатуры.ТипИзмеряемойВеличины = Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины)
	|	ГДЕ
	|		Номенклатура.Ссылка = &Номенклатура
	|		И Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Время)) КАК ВнутреннийЗапрос
	|
	|УПОРЯДОЧИТЬ ПО
	|	ВнутреннийЗапрос.Порядок,
	|	ВнутреннийЗапрос.ДопустимыйКоэффициент УБЫВ,
	|	ВнутреннийЗапрос.Коэффициент УБЫВ,
	|	ВнутреннийЗапрос.Ссылка.Наименование
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	СпрУпаковки.Ссылка КАК Ссылка,
	|	СпрУпаковки.Числитель / СпрУпаковки.Знаменатель КАК Коэффициент,
	|	ИСТИНА КАК ДопустимыйКоэффициент
	|ИЗ
	|	Справочник.Номенклатура КАК СпрНоменклатура
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК СпрУпаковки
	|		ПО (ВЫБОР
	|				КОГДА СпрНоменклатура.НаборУпаковок = ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.ИндивидуальныйДляНоменклатуры)
	|					ТОГДА СпрУпаковки.Владелец = СпрНоменклатура.Ссылка
	|				КОГДА СпрНоменклатура.НаборУпаковок <> ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.ПустаяСсылка)
	|					ТОГДА СпрУпаковки.Владелец = СпрНоменклатура.НаборУпаковок
	|				ИНАЧЕ ЛОЖЬ
	|			КОНЕЦ)
	|ГДЕ
	|	СпрНоменклатура.Ссылка = &Номенклатура
	|	И НЕ СпрУпаковки.ПометкаУдаления
	|	И СпрУпаковки.ТипУпаковки <> ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	СпрУпаковки.Ссылка,
	|	СпрУпаковки.Числитель / СпрУпаковки.Знаменатель,
	|	ИСТИНА
	|ИЗ
	|	Справочник.Номенклатура КАК СпрНоменклатура
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК СпрУпаковки
	|		ПО (ВЫБОР
	|				КОГДА СпрНоменклатура.НаборУпаковок = ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.ИндивидуальныйДляНоменклатуры)
	|					ТОГДА СпрУпаковки.Владелец = СпрНоменклатура.Ссылка
	|				КОГДА СпрНоменклатура.НаборУпаковок <> ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.ПустаяСсылка)
	|					ТОГДА СпрУпаковки.Владелец = СпрНоменклатура.НаборУпаковок
	|				ИНАЧЕ ЛОЖЬ
	|			КОНЕЦ)
	|ГДЕ
	|	СпрНоменклатура.Ссылка = &Номенклатура
	|	И НЕ СпрУпаковки.ПометкаУдаления
	|	И &ПоказыватьТоварныеМеста
	|	И СпрУпаковки.ТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковокНоменклатуры.ТоварноеМесто)
	|
	|УПОРЯДОЧИТЬ ПО
	|	Ссылка ИЕРАРХИЯ";
	
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаКоэффициентУпаковки", Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковкиДляВыбора("УпаковкиНоменклатуры", "Номенклатура"));
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаДоступностьКоэффициентУпаковки", Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаДоступностьКоэффициентаДляВыбораУпаковки("УпаковкиНоменклатуры", "Номенклатура"));
	
	Запрос.Текст = ТекстЗапроса;
	                    
	Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
	Запрос.УстановитьПараметр("ПоказыватьМерныеЕдиницыИзмерения", ПоказыватьМерныеЕдиницыИзмерения);
	Запрос.УстановитьПараметр("ДобавлятьЕдиницуХранения", ДобавлятьЕдиницуХранения);
	Запрос.УстановитьПараметр("ПоказыватьТоварныеМеста", ПоказыватьТоварныеМеста);

	Результат = Запрос.ВыполнитьПакет();
	Корни = Результат[0].Выбрать();
	ЕдиницыИзмерения = Результат[1].Выбрать();
	Упаковки = Результат[2].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
	
	Пока Корни.Следующий() Цикл
		
		НоваяСтрокаТип = УпаковкиЕдиницыИзмерения.ПолучитьЭлементы().Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрокаТип, Корни); 
		
		Если Корни.ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.Упаковка Тогда
			Если Упаковки.Строки.Количество() = 0 Тогда
				УпаковкиЕдиницыИзмерения.ПолучитьЭлементы().Удалить(НоваяСтрокаТип);
			Иначе
				Упаковки.Строки.Сортировать("Коэффициент", Истина);
				ОбойтиДерево(НоваяСтрокаТип, Упаковки.Строки);
			КонецЕсли;
		ИначеЕсли Корни.ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.Вес
			Или Корни.ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.Объем
			Или Корни.ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.Длина
			Или Корни.ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.Площадь
			Или Корни.ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.Мощность
			Или Корни.ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.Энергия
			Или Корни.ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.ЭлектрическийЗаряд
			Или Корни.ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.Время Тогда
			
			Пока ЕдиницыИзмерения.НайтиСледующий(Новый Структура("Порядок", Корни.Порядок)) Цикл
				НоваяСтрокаЕдиницаИзмерения = НоваяСтрокаТип.ПолучитьЭлементы().Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрокаЕдиницаИзмерения, ЕдиницыИзмерения);
				НоваяСтрокаЕдиницаИзмерения.ТипИзмеряемойВеличины = Корни.ТипИзмеряемойВеличины;
				
				Если МерныеЕдиницыИзмеренияНоменклатуры.НайтиПоЗначению(Корни.ТипИзмеряемойВеличины) = Неопределено Тогда
					МерныеЕдиницыИзмеренияНоменклатуры.Добавить(Корни.ТипИзмеряемойВеличины);
				КонецЕсли;
			КонецЦикла;
			 
		КонецЕсли;
		
	КонецЦикла;
		
КонецПроцедуры

&НаСервере
Процедура ОбойтиДерево(Родитель, Строки)
	
	Если Строки.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Для Каждого Строка Из Строки Цикл
		НоваяСтрока = Родитель.ПолучитьЭлементы().Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
		НоваяСтрока.ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.Упаковка;
		ОбойтиДерево(НоваяСтрока, Строка.Строки);
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьУпаковкуЕдиницуИзмерениеЗавершение(КодВозврата, Параметры) Экспорт
	
	ЗаполнитьДеревоЕдиницИзмеренийУпаковок();
	
	Для Каждого Строка Из УпаковкиЕдиницыИзмерения.ПолучитьЭлементы() Цикл 
		Элементы.УпаковкиЕдиницыИзмерения.Развернуть(Строка.ПолучитьИдентификатор(), Истина);
	КонецЦикла;
	
	Если ТипЗнч(КодВозврата) = Тип("Структура")
		И КодВозврата.Свойство("КоличествоНовыхЭлементов") Тогда
		
		НоменклатураКлиент.ОповеститьОбИзмененииСпискаВыбораЕдиницИзмерения(КодВозврата.КоличествоНовыхЭлементов,
			КодВозврата.НовыеЭлементы);
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	Элемент.Представление = НСтр("ru = 'Изменение цвета текста единиц измерения с недопустимым коэффициентом'");
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("УпаковкиЕдиницыИзмерения");
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("УпаковкиЕдиницыИзмерения.ДопустимыйКоэффициент");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый);
	
КонецПроцедуры

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

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