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