Организации / Форма редактирования истории наименований / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;
	
	ЮридическоеФизическоеЛицо = Параметры.ЮридическоеФизическоеЛицо;
	ИсторияНаименований.Загрузить(Параметры.ИсторияНаименований.Выгрузить());
	
	УстановитьПризнакПервоначальногоЗначения(ИсторияНаименований);
	
	Если ИсторияНаименований.Количество() > 0 Тогда
		Элементы.ИсторияНаименований.ТекущаяСтрока = ИсторияНаименований[ИсторияНаименований.Количество()-1].ПолучитьИдентификатор();
	КонецЕсли;
	
	Если Не ПравоДоступа("Редактирование", Метаданные.Справочники.Организации) Тогда
		ТолькоПросмотр = Истина;
	КонецЕсли;
	
	Если ТолькоПросмотр Тогда
		
		Элементы.КомандаОтмена.КнопкаПоУмолчанию = Истина;
		
	КонецЕсли;
	
	УстановитьУсловноеОформление();
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыИсторияНаименований

&НаКлиенте
Процедура ИсторияНаименованийПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	
	Если НоваяСтрока Тогда
		
		Если Элемент.ТекущиеДанные <> Неопределено Тогда
			
			НовыйПериод = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса());
			
			// Получим максимальный период в таблице
			ПоследнийПериод = '00010101000000';
			ПоследняяЗапись = Неопределено;
			Для Каждого ЗаписьИстории Из ИсторияНаименований Цикл
				Если ЗаписьИстории.Период >= ПоследнийПериод
					И ЗаписьИстории <> Элемент.ТекущиеДанные Тогда
					ПоследнийПериод = ЗаписьИстории.Период;
					ПоследняяЗапись = ЗаписьИстории;
				КонецЕсли;
			КонецЦикла;
			
			Если НовыйПериод <= ПоследнийПериод Тогда
				НовыйПериод = НачалоДня(ПоследнийПериод + 60*60*24);
			КонецЕсли;
			
			Элемент.ТекущиеДанные.Период = НовыйПериод;
			Если ПоследняяЗапись <> Неопределено Тогда
				ЗаполнитьЗначенияСвойств(Элемент.ТекущиеДанные, ПоследняяЗапись, , "Период, ПервоначальноеЗначение");
			КонецЕсли;
			
			ТекущийЭлемент = Элементы.ИсторияНаименованийНаименованиеСокращенное;
			
		КонецЕсли;
		
	КонецЕсли;
	
	Если Элемент.ТекущиеДанные <> Неопределено Тогда
		НаименованиеСокращенноеДоИзменения = Элемент.ТекущиеДанные.НаименованиеСокращенное;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ИсторияНаименованийПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	Если ОтменаРедактирования Тогда
		Возврат;
	КонецЕсли;
	
	УстановитьПризнакПервоначальногоЗначения(ИсторияНаименований);
	
КонецПроцедуры

&НаКлиенте
Процедура ИсторияНаименованийНаименованиеСокращенноеПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.ИсторияНаименований.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ОрганизацииКлиентЛокализация.ИсторияНаименованийНаименованиеСокращенноеПриИзменении(ТекущиеДанные, ЭтотОбъект);
	
	НаименованиеСокращенноеДоИзменения = ТекущиеДанные.НаименованиеСокращенное;
	
КонецПроцедуры

&НаКлиенте
Процедура ИсторияНаименованийПередУдалением(Элемент, Отказ)
	
	Если ИсторияНаименований.Индекс(Элемент.ТекущиеДанные) = 0 Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Удаление начальной записи истории запрещено'"),,,, Отказ);
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура КомандаОК(Команда)
	
	Отказ = Ложь;
	
	ПроверитьЗаполнениеИстории(Отказ);
	
	Если Отказ Тогда
		Возврат;
	КонецЕсли;
	
	РезультатВыбора = Новый Структура;
	РезультатВыбора.Вставить("ИсторияНаименований", ИсторияНаименований);
	ОповеститьОВыборе(РезультатВыбора);
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаОтмена(Команда)
	
	Закрыть();
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	#Область Период
	ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
	КомпоновкаДанныхКлиентСервер.ДобавитьОформляемоеПоле(ЭлементУсловногоОформления.Поля, Элементы.ИсторияНаименованийПериод.Имя);
	
	ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ЭлементУсловногоОформления.Отбор,
		"ИсторияНаименований.ПервоначальноеЗначение", ВидСравненияКомпоновкиДанных.Равно, Истина);
	
	ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ЭлементУсловногоОформления.Отбор,
		"ИсторияНаименований.Период", ВидСравненияКомпоновкиДанных.Равно, Дата(1,1,1));
	
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Начальное значение'"));
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	
	ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
	КомпоновкаДанныхКлиентСервер.ДобавитьОформляемоеПоле(ЭлементУсловногоОформления.Поля, "ИсторияНаименованийПериод");
	
	ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ЭлементУсловногоОформления.Отбор,
		"ИсторияНаименований.ПервоначальноеЗначение", ВидСравненияКомпоновкиДанных.Равно, Ложь);
	ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ЭлементУсловногоОформления.Отбор,
		"ИсторияНаименований.Период", ВидСравненияКомпоновкиДанных.НеЗаполнено);
	#КонецОбласти
	
	#Область НаименованиеСокращенное
	ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
	КомпоновкаДанныхКлиентСервер.ДобавитьОформляемоеПоле(ЭлементУсловногоОформления.Поля, Элементы.ЗаголовокНаименованиеСокращенное.Имя);
	ЭлементОтбор = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбор.ЛевоеЗначение = Истина;
	ЭлементОтбор.ПравоеЗначение = Истина;
	ЭлементОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Сокращенное'"));
	#КонецОбласти
	
	#Область НаименованиеПолное
	ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
	КомпоновкаДанныхКлиентСервер.ДобавитьОформляемоеПоле(ЭлементУсловногоОформления.Поля, Элементы.ЗаголовокНаименованиеПолное.Имя);
	ЭлементОтбор = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбор.ЛевоеЗначение = Истина;
	ЭлементОтбор.ПравоеЗначение = Истина;
	ЭлементОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Полное'"));
	#КонецОбласти
	
	#Область НаименованиеМеждународное
	ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
	КомпоновкаДанныхКлиентСервер.ДобавитьОформляемоеПоле(ЭлементУсловногоОформления.Поля, Элементы.ЗаголовокНаименованиеМеждународное.Имя);
	ЭлементОтбор = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбор.ЛевоеЗначение = Истина;
	ЭлементОтбор.ПравоеЗначение = Истина;
	ЭлементОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Международное'"));
	#КонецОбласти
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПризнакПервоначальногоЗначения(ТаблицаИстории)
	
	ТаблицаИстории.Сортировать("Период");
	// Первая строка должна быть первоначальным значением
	Если ТаблицаИстории.Количество() > 0 Тогда
		ПерваяСтрока = ТаблицаИстории[0];
		ПерваяСтрока.ПервоначальноеЗначение = Истина;
		ПерваяСтрока.Период = '00010101';
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьЗаполнениеИстории(Отказ)
	
	ПериодыСтрок = Новый Массив;
	
	Для Каждого Запись Из ИсторияНаименований Цикл
		
		ИндексСтроки = ИсторияНаименований.Индекс(Запись);
		ПрефиксСообщенияСтроки = "ИсторияНаименований["+Формат(ИндексСтроки, "ЧЦ=; ЧДЦ=; ЧГ=")+"].";
		
		Если НЕ ЗначениеЗаполнено(Запись.Период) И ИндексСтроки > 0 Тогда
			СообщениеОбОшибке = НСтр("ru = 'Нужно указать дату начала действия'");
			ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке, , ПрефиксСообщенияСтроки+"Период", , Отказ);
		КонецЕсли;
		
		Если ПериодыСтрок.Найти(Запись.Период) = Неопределено Тогда
			Если ЗначениеЗаполнено(Запись.Период) Тогда
				ПериодыСтрок.Добавить(Запись.Период);
			КонецЕсли;
		Иначе
			// Строка с такой датой уже была раньше, это ошибка.
			// Не может быть 2 строки с одинаковой датой.
			СообщениеОбОшибке = НСтр("ru = 'Уже есть запись с указанной датой сведений'");
			ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке, , ПрефиксСообщенияСтроки+"Период", , Отказ);
		КонецЕсли;
		
		Если НЕ ЗначениеЗаполнено(Запись.НаименованиеСокращенное) Тогда
			СообщениеОбОшибке = НСтр("ru = 'Поле ""Сокращенное наименование"" не заполнено'");
			ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке, , ПрефиксСообщенияСтроки+"НаименованиеСокращенное",  , Отказ);
		КонецЕсли;
		
		Если НЕ ЗначениеЗаполнено(Запись.НаименованиеПолное) Тогда
			СообщениеОбОшибке = НСтр("ru = 'Поле ""Полное наименование"" не заполнено'");
			ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке, , ПрефиксСообщенияСтроки+"НаименованиеПолное",  , Отказ);
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

#КонецОбласти

Связанные материалы