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