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