Физические лица / Воинский учет / Модуль формы

файл

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

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

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

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

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

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
	
	РедактированиеПериодическихСведений.ПроверитьЗаписьВФорме(ЭтотОбъект, "ВоинскийУчет", ФизическоеЛицоСсылка, Отказ);
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецПроцедуры

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

&НаКлиенте
Процедура ВоинскийУчетПериодПриИзменении(Элемент)
	
	ВоинскийУчетЗаблокироватьФизическоеЛицо();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ВоинскийУчетИстория(Команда)

	СотрудникиКлиент.ОткрытьФормуРедактированияИстории("ВоинскийУчет", ФизическоеЛицоСсылка, ЭтотОбъект);

КонецПроцедуры

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

&НаКлиенте
Процедура Отмена(Команда)
	
	Модифицированность = Ложь;
	Закрыть();
	
КонецПроцедуры

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

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

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

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

КонецПроцедуры

&НаКлиенте
Процедура СохранитьДанныеЗавершение(Отказ, ОповещениеЗавершения) Экспорт  
	
	Если Не Отказ Тогда
		
		Если ПроверитьЗаполнение() Тогда
			
			ВозвращаемыйПараметр = Новый Структура;
			ВозвращаемыйПараметр.Вставить("ИмяФормы", ИмяФормы);
			ВозвращаемыйПараметр.Вставить("АдресВХранилище", АдресДанныхДополнительнойФормыНаСервере(СотрудникиКлиентСервер.ОписаниеДополнительнойФормы(ИмяФормы)));
			
			Оповестить(
				"ИзмененыДанныеДополнительнойФормы",
				ВозвращаемыйПараметр,
				ВладелецФормы);
			
		Иначе
			Отказ = Истина;
		КонецЕсли;
		
	КонецЕсли; 
	
	Если ОповещениеЗавершения <> Неопределено Тогда 
		ВыполнитьОбработкуОповещения(ОповещениеЗавершения, Отказ);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура СохранитьИЗакрыть(Результат, ДополнительныеПараметры) Экспорт 
	
	СохранитьИЗакрытьНаКлиенте();
	
КонецПроцедуры

&НаКлиенте
Процедура СохранитьИЗакрытьНаКлиенте(ЗакрытьФорму = Истина) Экспорт 

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

&НаКлиенте
Процедура СохранитьИЗакрытьНаКлиентеЗавершение(Отказ, ДополнительныеПараметры) Экспорт 

	Если Не Отказ И Открыта() Тогда
		
		Модифицированность = Ложь;
		Если ДополнительныеПараметры.ЗакрытьФорму Тогда
			Закрыть();
		КонецЕсли; 
		
	КонецЕсли; 
	
КонецПроцедуры

&НаСервере
Процедура ПрочитатьНаборЗаписейПериодическихСведений(ИмяРегистра, ВедущийОбъект) Экспорт
	
	РедактированиеПериодическихСведений.ПрочитатьНаборЗаписей(ЭтотОбъект, ИмяРегистра, ВедущийОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьПолеЗабронированОрганизацией()

	СтруктураОтбора = Новый Структура;
	СтруктураОтбора.Вставить("ФизическоеЛицо", ФизическоеЛицоСсылка);
	
	ДанныеБронирования = РегистрыСведений.БронированиеСотрудников.СрезПоследних(, СтруктураОтбора);
	Если ДанныеБронирования.Количество() = 0 Тогда 
		Возврат;
	КонецЕсли;
	
	ЗабронированОрганизацией = ДанныеБронирования[0].Организация;
	Если ТипЗнч(ДанныеБронирования[0].Регистратор) = Тип("ДокументСсылка.ПриказОБронированииРаботников") Тогда 
		ПриказОБронировании = ДанныеБронирования[0].Регистратор;
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьПолеВоинскийУчетПериод(Форма, ДатаСеанса) Экспорт
	// Не обязательно заполнение поля Период если данные по умолчанию.
	Если ЗарплатаКадрыРасширенныйКлиентСервер.ВоинскийУчетПоУмолчанию(Форма.ВоинскийУчет) И 
		НЕ ЗначениеЗаполнено(Форма.ВоинскийУчетПрежняя.Период) Тогда
		Если ЗначениеЗаполнено(Форма.ВоинскийУчет.Период) Тогда
			Форма.ВоинскийУчет.Период = '00010101';
		КонецЕсли; 
	Иначе
		Если НЕ ЗначениеЗаполнено(Форма.ВоинскийУчет.Период) Тогда
			Форма.ВоинскийУчет.Период = ДатаСеанса;
		КонецЕсли; 
	КонецЕсли;
	
	РедактированиеПериодическихСведенийКлиентСервер.ОбновитьОтображениеПолейВвода(Форма, "ВоинскийУчет", Форма.ФизическоеЛицоСсылка);
	
КонецПроцедуры

&НаСервере
Функция АдресДанныхДополнительнойФормыНаСервере(ОписаниеДополнительнойФормы)
	
	Возврат СотрудникиФормы.АдресДанныхДополнительнойФормы(ОписаниеДополнительнойФормы, ЭтотОбъект);
	
КонецФункции

&НаСервере
Процедура ВоинскийУчетСоставПриИзмененииНаСервере()

	УстановитьСвойстваЭлементовФормы();
	
КонецПроцедуры

&НаСервере
Процедура ВоинскийУчетОтношениеКВоинскомуУчетуПриИзмененииНаСервере()
	
	Если ВоинскийУчет.ОтношениеКВоинскомуУчету <> Перечисления.ОтношениеКВоинскомуУчету.СнятПоВозрасту 
		И ВоинскийУчет.ОтношениеКВоинскомуУчету <> Перечисления.ОтношениеКВоинскомуУчету.СнятПоСостояниюЗдоровья Тогда 
		ВоинскийУчет.ДатаСнятияСВоинскогоУчета = Дата(1, 1, 1);
	КонецЕсли;
	
	УстановитьСвойстваЭлементовФормы();
	
КонецПроцедуры

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

&НаКлиенте
Функция ЗаблокироватьОбъектВФормеВладельце() Экспорт
	
	Возврат СотрудникиКлиент.ЗаблокироватьОбъектВФормеВладельцеДополнительнойФормы(ЭтотОбъект, ИзФормыСотрудника);
	
КонецФункции

&НаСервере
Процедура УстановитьСвойстваЭлементовФормы()
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
		Элементы, 
		"ВоинскийУчетДатаСнятияСВоинскогоУчета", 
		"ТолькоПросмотр", 
		ВоинскийУчет.ОтношениеКВоинскомуУчету <> Перечисления.ОтношениеКВоинскомуУчету.СнятПоВозрасту 
			И ВоинскийУчет.ОтношениеКВоинскомуУчету <> Перечисления.ОтношениеКВоинскомуУчету.СнятПоСостояниюЗдоровья);
	
	ОфицерскийСостав = Ложь;
	Если ЗначениеЗаполнено(ВоинскийУчет.Состав) Тогда 
		ОфицерскийСостав = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВоинскийУчет.Состав, "ОфицерскийСостав");
	КонецЕсли;
	
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ВоинскийУчетКатегорияЗапаса", "Доступность", Не ОфицерскийСостав);
	
КонецПроцедуры

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

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