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