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