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