#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
Если Параметры.Свойство("ТочностьОкругления") Тогда
ТочностьОкругления = Параметры.ТочностьОкругления;
КонецЕсли;
Если Параметры.Свойство("ВариантОкругления") Тогда
ВариантОкругления = Параметры.ВариантОкругления;
КонецЕсли;
Если Параметры.Свойство("ГраницаДиапазонаЦен") Тогда
ГраницаДиапазонаЦен = Параметры.ГраницаДиапазонаЦен;
Иначе
ГраницаДиапазонаЦен = -1;
КонецЕсли;
Если Параметры.Свойство("ПсихологическоеОкругление") Тогда
ПсихологическоеОкругление = Параметры.ПсихологическоеОкругление;
ИспользоватьПсихологическоеОкругление = Истина;
КонецЕсли;
Если Параметры.Свойство("ПримерЧисло") Тогда
ПримерЧисло = Параметры.ПримерЧисло;
Иначе
ПримерЧисло = 1111.11;
КонецЕсли;
ПримерРезультат = РассчитатьПримерРезультат(ПримерЧисло, ТочностьОкругления, ВариантОкругления, ПсихологическоеОкругление);
СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
НастроитьФорму();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОК(Команда)
ВозвращаемоеЗначение = Новый Структура;
ВозвращаемоеЗначение.Вставить("ПсихологическоеОкругление", ПсихологическоеОкругление);
ВозвращаемоеЗначение.Вставить("ТочностьОкругления", ТочностьОкругления);
ВозвращаемоеЗначение.Вставить("ВариантОкругления", ВариантОкругления);
Закрыть(ВозвращаемоеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура СформироватьПример(Команда)
ПримерРезультат = РассчитатьПримерРезультат(ПримерЧисло, ТочностьОкругления, ВариантОкругления, ПсихологическоеОкругление);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ПримерЧислоПриИзменении(Элемент)
ПримерРезультат = РассчитатьПримерРезультат(ПримерЧисло, ТочностьОкругления, ВариантОкругления, ПсихологическоеОкругление);
КонецПроцедуры
&НаКлиенте
Процедура ТочностьОкругленияПриИзменении(Элемент)
ОбновитьОкругление();
Если ПсихологическоеОкругление > ТочностьОкругления Тогда
ПсихологическоеОкругление = ТочностьОкругления - 0.01;
КонецЕсли;
Элементы.ПсихологическоеОкругление.МаксимальноеЗначение = ТочностьОкругления - 0.01;
КонецПроцедуры
&НаКлиенте
Процедура ВариантОкругленияПриИзменении(Элемент)
ОбновитьОкругление();
КонецПроцедуры
&НаКлиенте
Процедура ПсихологическоеОкруглениеПриИзменении(Элемент)
ОбновитьОкругление();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиентеНаСервереБезКонтекста
Функция РассчитатьПримерРезультат(Знач ПримерЧисло,
Знач ТочностьОкругления,
Знач ВариантОкругления,
Знач ПсихологическоеОкругление)
Если ЗначениеЗаполнено(ТочностьОкругления) Тогда
ПримерЧисло = ЦенообразованиеКлиентСервер.ОкруглитьЦену(ПримерЧисло, ТочностьОкругления, ВариантОкругления);
КонецЕсли;
Возврат ЦенообразованиеКлиентСервер.ПрименитьПсихологическоеОкругление(ПримерЧисло, ПсихологическоеОкругление);
КонецФункции
&НаКлиенте
Процедура ОбновитьОкругление()
ПримерРезультат = РассчитатьПримерРезультат(ПримерЧисло, ТочностьОкругления, ВариантОкругления, ПсихологическоеОкругление);
КонецПроцедуры
&НаСервере
Процедура НастроитьФорму()
НастроитьДоступностьЭлементовФормы(ЭтаФорма);
Элементы.ТочностьОкругления.СписокВыбора.Очистить();
ЗначениеОкругления = 0.01;
ЧетноеПриращение = Ложь;
МаксимальноеЗначениеОкругления = 1000;
ГраницаДиапазонаЦен = -1;
Пока ЗначениеОкругления <= МаксимальноеЗначениеОкругления
И (ЗначениеОкругления <= ГраницаДиапазонаЦен Или ГраницаДиапазонаЦен < 0) Цикл
Элементы.ТочностьОкругления.СписокВыбора.Добавить(ЗначениеОкругления);
ЗначениеОкругления = ЗначениеОкругления * ?(ЧетноеПриращение, 2, 5);
ЧетноеПриращение = Не ЧетноеПриращение;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура НастроитьДоступностьЭлементовФормы(Форма)
Форма.Элементы.ПсихологическоеОкругление.Видимость = Форма.ИспользоватьПсихологическоеОкругление;
КонецПроцедуры
#КонецОбласти