Обработка ПС_ЗагрузкаТабеляУчётаРабочегоВремениИзEXCEL.
- Редактируемое поле "Наименование подразделения", привязка OnChange. - Списки выбора "Подразделение" и "Наименование подразделения" из ПС_НастройкиЗагрузкиТабелей с фильтром по организации. - Автоподстановка наименования подразделения, если в РС для выбранного подразделения единственное значение. - Обратная загрузка: при изменении ключевых реквизитов формы (организация, подразделение, наименование подразделения, период регистрации) поиск ранее сохранённого табеля через ПС_ЗагруженныеТабеля (последняя редакция по дате загрузки) и подтверждение пользователя при наличии данных в форме. Заполнение ТЧ — заглушка, открывает найденный табель.
This commit is contained in:
+4
-1
@@ -583,6 +583,10 @@
|
||||
<dataPath xsi:type="form:DataPath">
|
||||
<segments>Объект.НаименованиеПодразделения</segments>
|
||||
</dataPath>
|
||||
<handlers>
|
||||
<event>OnChange</event>
|
||||
<name>НаименованиеПодразделенияПриИзменении</name>
|
||||
</handlers>
|
||||
<extendedTooltip>
|
||||
<name>НаименованиеПодразделенияРасширеннаяПодсказка</name>
|
||||
<id>1553</id>
|
||||
@@ -599,7 +603,6 @@
|
||||
<autoFill>true</autoFill>
|
||||
</contextMenu>
|
||||
<type>InputField</type>
|
||||
<readOnly>false</readOnly>
|
||||
<editMode>Enter</editMode>
|
||||
<showInHeader>true</showInHeader>
|
||||
<headerHorizontalAlign>Left</headerHorizontalAlign>
|
||||
|
||||
+128
-7
@@ -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.ТабельУчетаРабочегоВремени или пустую ссылку.
|
||||
&НаСервереБезКонтекста
|
||||
Функция НайтиСсылкуНаТабель(Организация, Подразделение, НаименованиеПодразделения, ПериодРегистрации)
|
||||
Если НЕ ЗначениеЗаполнено(Организация)
|
||||
ИЛИ НЕ ЗначениеЗаполнено(Подразделение)
|
||||
ИЛИ ПустаяСтрока(НаименованиеПодразделения)
|
||||
ИЛИ НЕ ЗначениеЗаполнено(ПериодРегистрации) Тогда
|
||||
Возврат Документы.ТабельУчетаРабочегоВремени.ПустаяСсылка();
|
||||
КонецЕсли;
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| ПС_ЗагруженныеТабеляСрезПоследних.ТабельУчетаРабочегоВремени КАК ТабельУчетаРабочегоВремени
|
||||
|ИЗ
|
||||
| РегистрСведений.ПС_ЗагруженныеТабеля.СрезПоследних(
|
||||
| &ПериодРегистрации,
|
||||
| Организация = &Организация
|
||||
| И НаименованиеПодразделенияПоТабелю = &НаименованиеПодразделения
|
||||
| И ПериодВводаДанныхОВремени = &ПериодВводаДанныхОВремени
|
||||
| И СтруктурноеПодразделение = &СтруктурноеПодразделение) КАК ПС_ЗагруженныеТабеляСрезПоследних
|
||||
|УПОРЯДОЧИТЬ ПО
|
||||
| ПС_ЗагруженныеТабеляСрезПоследних.ДатаЗагрузки УБЫВ";
|
||||
Запрос.УстановитьПараметр("Организация", Организация);
|
||||
Запрос.УстановитьПараметр("СтруктурноеПодразделение", Подразделение);
|
||||
Запрос.УстановитьПараметр("НаименованиеПодразделения", НаименованиеПодразделения);
|
||||
Запрос.УстановитьПараметр("ПериодВводаДанныхОВремени", Перечисления.ПериодыВводаДанныхОВремени.ТекущийМесяц);
|
||||
Запрос.УстановитьПараметр("ПериодРегистрации", НачалоМесяца(ПериодРегистрации));
|
||||
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
Если РезультатЗапроса.Пустой() Тогда
|
||||
Возврат Документы.ТабельУчетаРабочегоВремени.ПустаяСсылка();
|
||||
КонецЕсли;
|
||||
|
||||
Выборка = РезультатЗапроса.Выбрать();
|
||||
Выборка.Следующий();
|
||||
Возврат Выборка.ТабельУчетаРабочегоВремени;
|
||||
КонецФункции
|
||||
|
||||
|
||||
Reference in New Issue
Block a user