diff --git a/101_ЦМСЧ_ЗиКГУ.ЗагрузкаДанныхИзExcel/src/DataProcessors/ПС_ЗагрузкаТабеляУчётаРабочегоВремениИзEXCEL/Forms/Форма/Form.form b/101_ЦМСЧ_ЗиКГУ.ЗагрузкаДанныхИзExcel/src/DataProcessors/ПС_ЗагрузкаТабеляУчётаРабочегоВремениИзEXCEL/Forms/Форма/Form.form
index 90ff202..7362750 100644
--- a/101_ЦМСЧ_ЗиКГУ.ЗагрузкаДанныхИзExcel/src/DataProcessors/ПС_ЗагрузкаТабеляУчётаРабочегоВремениИзEXCEL/Forms/Форма/Form.form
+++ b/101_ЦМСЧ_ЗиКГУ.ЗагрузкаДанныхИзExcel/src/DataProcessors/ПС_ЗагрузкаТабеляУчётаРабочегоВремениИзEXCEL/Forms/Форма/Form.form
@@ -583,6 +583,10 @@
Объект.НаименованиеПодразделения
+
+ OnChange
+ НаименованиеПодразделенияПриИзменении
+
НаименованиеПодразделенияРасширеннаяПодсказка
1553
@@ -599,7 +603,6 @@
true
InputField
- false
Enter
true
Left
diff --git a/101_ЦМСЧ_ЗиКГУ.ЗагрузкаДанныхИзExcel/src/DataProcessors/ПС_ЗагрузкаТабеляУчётаРабочегоВремениИзEXCEL/Forms/Форма/Module.bsl b/101_ЦМСЧ_ЗиКГУ.ЗагрузкаДанныхИзExcel/src/DataProcessors/ПС_ЗагрузкаТабеляУчётаРабочегоВремениИзEXCEL/Forms/Форма/Module.bsl
index ad634d7..b9ce839 100644
--- a/101_ЦМСЧ_ЗиКГУ.ЗагрузкаДанныхИзExcel/src/DataProcessors/ПС_ЗагрузкаТабеляУчётаРабочегоВремениИзEXCEL/Forms/Форма/Module.bsl
+++ b/101_ЦМСЧ_ЗиКГУ.ЗагрузкаДанныхИзExcel/src/DataProcessors/ПС_ЗагрузкаТабеляУчётаРабочегоВремениИзEXCEL/Forms/Форма/Module.bsl
@@ -3309,21 +3309,26 @@
&НаКлиенте
-Процедура ОрганизацияПриИзменении(Элемент)
+Асинх Процедура ОрганизацияПриИзменении(Элемент)
+ Объект.Табель = "";
ЗаполнитьСписокВыбораПодразделений();
ОбновитьСписокЗагруженныхТабелей();
+ ПриИзмененииКлючевыхРеквизитов();
КонецПроцедуры
&НаКлиенте
-Процедура ПодразделениеПриИзменении(Элемент)
+Асинх Процедура ПодразделениеПриИзменении(Элемент)
+ Объект.Табель = "";
ЗаполнитьСписокВыбораНаименованийПодразделений();
+ ПриИзмененииКлючевыхРеквизитов();
КонецПроцедуры
&НаКлиенте
-Процедура НаименованиеПодразделенияПриИзменении(Элемент)
- // Редактируемое поле; дополнительной логики не требуется.
+Асинх Процедура НаименованиеПодразделенияПриИзменении(Элемент)
+ Объект.Табель = "";
+ ПриИзмененииКлючевыхРеквизитов();
КонецПроцедуры
@@ -3372,6 +3377,7 @@
&НаСервере
Процедура ЗаполнитьСписокВыбораНаименованийПодразделений()
Элементы.НаименованиеПодразделения.СписокВыбора.Очистить();
+ Объект.НаименованиеПодразделения = "";
Если НЕ ЗначениеЗаполнено(Объект.Организация)
ИЛИ НЕ ЗначениеЗаполнено(Объект.Подразделение) Тогда
@@ -3403,6 +3409,11 @@
Выборка.НаименованиеПодразделенияПоТабелю,
Выборка.НаименованиеПодразделенияПоТабелю);
КонецЦикла;
+
+ // Если в РС для выбранного подразделения только одно наименование — подставить сразу.
+ Если Элементы.НаименованиеПодразделения.СписокВыбора.Количество() = 1 Тогда
+ Объект.НаименованиеПодразделения = Элементы.НаименованиеПодразделения.СписокВыбора[0].Значение;
+ КонецЕсли;
КонецПроцедуры
@@ -3438,10 +3449,11 @@
КонецПроцедуры
&НаКлиенте
-Процедура ПериодРегистрацииПриИзменении()
- УчетРабочегоВремениРасширенныйКлиентСервер.ТабельУстановитьПериодДокумента(ЭтаФорма);
+Асинх Процедура ПериодРегистрацииПриИзменении()
+ УчетРабочегоВремениРасширенныйКлиентСервер.ТабельУстановитьПериодДокумента(ЭтаФорма);
ОчиститьДанные();
-КонецПроцедуры // авры()
+ ПриИзмененииКлючевыхРеквизитов();
+КонецПроцедуры
&НаКлиенте
@@ -3490,3 +3502,112 @@
ОбновитьСписокЗагруженныхТабелей();
КонецПроцедуры
+
+// Обратная загрузка данных из ранее сохранённого табеля (Задача 1).
+// Диспетчер вызывается при изменении любого из четырёх ключевых реквизитов формы:
+// Организация, Подразделение, НаименованиеПодразделения, ПериодРегистрации.
+&НаКлиенте
+Асинх Процедура ПриИзмененииКлючевыхРеквизитов()
+ Если НЕ КлючевыеРеквизитыЗаполнены() Тогда
+ Возврат;
+ КонецЕсли;
+
+ СсылкаНаТабель = Ждать НайтиСсылкуНаТабельАсинх();
+ Если НЕ ЗначениеЗаполнено(СсылкаНаТабель) Тогда
+ Возврат;
+ КонецЕсли;
+
+ Объект.Табель = СсылкаНаТабель;
+
+ Если ЕстьДанныеВТабличныхЧастях() Тогда
+ Режим = РежимДиалогаВопрос.ДаНет;
+ ТекстВопроса = "Найден ранее загруженный табель за "
+ + Формат(Объект.ПериодРегистрации, "ДФ='MMMM yyyy'")
+ + " по " + Строка(Объект.Подразделение)
+ + ". Подгрузить его данные в форму? Текущие данные будут заменены.";
+ Ответ = Ждать ВопросАсинх(ТекстВопроса, Режим);
+ Если Ответ <> КодВозвратаДиалога.Да Тогда
+ Возврат;
+ КонецЕсли;
+ КонецЕсли;
+
+ ЗагрузитьДанныеТабеляВФорму(СсылкаНаТабель);
+КонецПроцедуры
+
+&НаКлиенте
+Функция КлючевыеРеквизитыЗаполнены()
+ Возврат ЗначениеЗаполнено(Объект.Организация)
+ И ЗначениеЗаполнено(Объект.Подразделение)
+ И НЕ ПустаяСтрока(Объект.НаименованиеПодразделения)
+ И ЗначениеЗаполнено(Объект.ПериодРегистрации);
+КонецФункции
+
+&НаКлиенте
+Функция ЕстьДанныеВТабличныхЧастях()
+ Возврат Объект.ТабличнаяЧастьСГЗ.Количество() > 0
+ ИЛИ Объект.ТабличнаяЧастьПД.Количество() > 0
+ ИЛИ Объект.ТабличнаяЧастьОМС.Количество() > 0;
+КонецФункции
+
+// Заглушка Прохода А. Полная реализация заполнения ТЧ будет в Проходе Б.
+&НаКлиенте
+Асинх Процедура ЗагрузитьДанныеТабеляВФорму(СсылкаНаТабель)
+ Ждать ОткрытьЗначениеАсинх(СсылкаНаТабель);
+КонецПроцедуры
+
+// Серверная обёртка для вызова с клиента без контекста формы.
+&НаСервереБезКонтекста
+Функция НайтиСсылкуНаТабельНаСервере(Организация, Подразделение, НаименованиеПодразделения, ПериодРегистрации)
+ Возврат НайтиСсылкуНаТабель(Организация, Подразделение, НаименованиеПодразделения, ПериодРегистрации);
+КонецФункции
+
+&НаКлиенте
+Асинх Функция НайтиСсылкуНаТабельАсинх()
+ Возврат Ждать НайтиСсылкуНаТабельНаСервере(
+ Объект.Организация,
+ Объект.Подразделение,
+ Объект.НаименованиеПодразделения,
+ Объект.ПериодРегистрации);
+КонецФункции
+
+// Поиск ссылки на табель по ключевым реквизитам.
+// Источник: РС ПС_ЗагруженныеТабеля.СрезПоследних (последняя редакция по ДатаЗагрузки).
+// Возвращает DocumentRef.ТабельУчетаРабочегоВремени или пустую ссылку.
+&НаСервереБезКонтекста
+Функция НайтиСсылкуНаТабель(Организация, Подразделение, НаименованиеПодразделения, ПериодРегистрации)
+ Если НЕ ЗначениеЗаполнено(Организация)
+ ИЛИ НЕ ЗначениеЗаполнено(Подразделение)
+ ИЛИ ПустаяСтрока(НаименованиеПодразделения)
+ ИЛИ НЕ ЗначениеЗаполнено(ПериодРегистрации) Тогда
+ Возврат Документы.ТабельУчетаРабочегоВремени.ПустаяСсылка();
+ КонецЕсли;
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ПС_ЗагруженныеТабеляСрезПоследних.ТабельУчетаРабочегоВремени КАК ТабельУчетаРабочегоВремени
+ |ИЗ
+ | РегистрСведений.ПС_ЗагруженныеТабеля.СрезПоследних(
+ | &ПериодРегистрации,
+ | Организация = &Организация
+ | И НаименованиеПодразделенияПоТабелю = &НаименованиеПодразделения
+ | И ПериодВводаДанныхОВремени = &ПериодВводаДанныхОВремени
+ | И СтруктурноеПодразделение = &СтруктурноеПодразделение) КАК ПС_ЗагруженныеТабеляСрезПоследних
+ |УПОРЯДОЧИТЬ ПО
+ | ПС_ЗагруженныеТабеляСрезПоследних.ДатаЗагрузки УБЫВ";
+ Запрос.УстановитьПараметр("Организация", Организация);
+ Запрос.УстановитьПараметр("СтруктурноеПодразделение", Подразделение);
+ Запрос.УстановитьПараметр("НаименованиеПодразделения", НаименованиеПодразделения);
+ Запрос.УстановитьПараметр("ПериодВводаДанныхОВремени", Перечисления.ПериодыВводаДанныхОВремени.ТекущийМесяц);
+ Запрос.УстановитьПараметр("ПериодРегистрации", НачалоМесяца(ПериодРегистрации));
+
+ РезультатЗапроса = Запрос.Выполнить();
+ Если РезультатЗапроса.Пустой() Тогда
+ Возврат Документы.ТабельУчетаРабочегоВремени.ПустаяСсылка();
+ КонецЕсли;
+
+ Выборка = РезультатЗапроса.Выбрать();
+ Выборка.Следующий();
+ Возврат Выборка.ТабельУчетаРабочегоВремени;
+КонецФункции
+