Compare commits
6 Commits
090ae55ddf
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| d37dd83b23 | |||
| d4661b3677 | |||
| 6cb4ff7b78 | |||
| 1095488c88 | |||
| 691edc541c | |||
| bcadc737b7 |
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f3b01825-0b99-4164-8e92-f4d0535f9033">
|
||||
<name>ПС_Описание</name>
|
||||
<name>ПС_ЗагрузкаДанныхИзExcel_Описание</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Описание</value>
|
||||
@@ -0,0 +1,561 @@
|
||||
// Серверные функции для работы с табелем учёта рабочего времени.
|
||||
// Перенесены из модуля формы обработки ПС_ЗагрузкаТабеляУчётаРабочегоВремениИзEXCEL.
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
// Поиск элементов справочника ВидыИспользованияРабочегоВремени по наименованию.
|
||||
// Используется как замена прямого обращения к реквизитам формы обработки.
|
||||
// Имена элементов зафиксированы в проекте и не подлежат изменению.
|
||||
|
||||
Функция ВидВремениЯвкаСГЗ()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Явка (СГЗ)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениЯвкаПД()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Явка (ПД)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениЯвкаОМС()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Явка (ОМС)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениПраздникиСГЗ()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Праздники (СГЗ)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениПраздникиПД()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Праздники (ПД)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениПраздникиОМС()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Праздники (ОМС)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениПраздникиБезПовышеннойОплатыСГЗ()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Праздники без повышенной оплаты (СГЗ)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениПраздникиБезПовышеннойОплатыПД()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Праздники без повышенной оплаты (ПД)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениПраздникиБезПовышеннойОплатыОМС()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Праздники без повышенной оплаты (ОМС)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениРаботаНочныеЧасыСГЗ()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Работа ночные часы (СГЗ)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениРаботаНочныеЧасыПД()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Работа ночные часы (ПД)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениРаботаНочныеЧасыОМС()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Работа ночные часы (ОМС)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениСверхурочныеСГЗ()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Сверхурочные (СГЗ)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениСверхурочныеПД()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Сверхурочные (ПД)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениСверхурочныеОМС()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Сверхурочные (ОМС)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениСверхурочныеБезПовышеннойОплатыСГЗ()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Сверхурочные без повышенной оплаты (СГЗ)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениСверхурочныеБезПовышеннойОплатыПД()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Сверхурочные без повышенной оплаты (ПД)", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениСверхурочныеБезПовышеннойОплатыОМС()
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Сверхурочные без повышенной оплаты (ОМС)", Истина);
|
||||
КонецФункции
|
||||
|
||||
// Статьи финансирования — ищем предопределённые элементы.
|
||||
Функция СтатьяФинансированияСГЗ()
|
||||
Возврат Справочники.СтатьиФинансированияЗарплата.НайтиПоНаименованию("СГЗ", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция СтатьяФинансированияПД()
|
||||
Возврат Справочники.СтатьиФинансированияЗарплата.НайтиПоНаименованию("ПД", Истина);
|
||||
КонецФункции
|
||||
|
||||
Функция СтатьяФинансированияОМС()
|
||||
Возврат Справочники.СтатьиФинансированияЗарплата.НайтиПоНаименованию("ОМС", Истина);
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ПолучениеВидовВремени
|
||||
|
||||
// Возвращает элемент справочника ВидыИспользованияРабочегоВремени для вида «Явка»
|
||||
// по текущей статье финансирования (СГЗ / ПД / ОМС).
|
||||
//
|
||||
// Параметры:
|
||||
// СтатьяФинансирования - CatalogRef.СтатьиФинансированияЗарплата
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// CatalogRef.ВидыИспользованияРабочегоВремени
|
||||
//
|
||||
Функция ВидВремениЯвка(СтатьяФинансирования) Экспорт
|
||||
Если СтатьяФинансирования = СтатьяФинансированияСГЗ() Тогда
|
||||
Возврат ВидВремениЯвкаСГЗ();
|
||||
ИначеЕсли СтатьяФинансирования = СтатьяФинансированияПД() Тогда
|
||||
Возврат ВидВремениЯвкаПД();
|
||||
ИначеЕсли СтатьяФинансирования = СтатьяФинансированияОМС() Тогда
|
||||
Возврат ВидВремениЯвкаОМС();
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
// Возвращает элемент справочника для вида «Болезнь».
|
||||
Функция ВидВремениБолезнь() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.Болезнь;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениВыходныеДни() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.ВыходныеДни;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениДополнительныйОтпуск() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.ДополнительныйОтпуск;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениКомандировка() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.Командировка;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениКормлениеРебенка() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.КормлениеРебенка;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениНеявкиПоНевыясненнымПричинам() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НеявкиПоНевыясненнымПричинам;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениНеоплачиваемыйОтпускПоРазрешениюРаботодателя() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.НеоплачиваемыйОтпускПоРазрешениюРаботодателя;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениОтстранениеОтРаботыБезОплаты() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.ОтстранениеОтРаботыБезОплаты;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениОтстранениеОтРаботыСОплатой() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.ОтстранениеОтРаботыСОплатой;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениОплачиваемыеНерабочиеДни() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.ОплачиваемыеНерабочиеДни;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениОсновнойОтпуск() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.ОсновнойОтпуск;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениОтпускНаОбучение() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.ОтпускНаОбучение;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениОтпускПоБеременностиИРодам() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.ОтпускПоБеременностиИРодам;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениОтпускПоУходуЗаРебенком() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.ОтпускПоУходуЗаРебенком;
|
||||
КонецФункции
|
||||
|
||||
// В исходном коде модуля формы эта функция возвращает ОтпускПоУходуЗаРебенком —
|
||||
// копируем как есть (так зафиксировано в проекте).
|
||||
Функция ВидВремениДополнительныеВыходныеДниОплачиваемые() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.ОтпускПоУходуЗаРебенком;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениПовышениеКвалификации() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.ПовышениеКвалификации;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениПраздники(СтатьяФинансирования) Экспорт
|
||||
Если СтатьяФинансирования = СтатьяФинансированияСГЗ() Тогда
|
||||
Возврат ВидВремениПраздникиСГЗ();
|
||||
ИначеЕсли СтатьяФинансирования = СтатьяФинансированияПД() Тогда
|
||||
Возврат ВидВремениПраздникиПД();
|
||||
ИначеЕсли СтатьяФинансирования = СтатьяФинансированияОМС() Тогда
|
||||
Возврат ВидВремениПраздникиОМС();
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениПраздникиБезПовышеннойОплаты(СтатьяФинансирования) Экспорт
|
||||
Если СтатьяФинансирования = СтатьяФинансированияСГЗ() Тогда
|
||||
Возврат ВидВремениПраздникиБезПовышеннойОплатыСГЗ();
|
||||
ИначеЕсли СтатьяФинансирования = СтатьяФинансированияПД() Тогда
|
||||
Возврат ВидВремениПраздникиБезПовышеннойОплатыПД();
|
||||
ИначеЕсли СтатьяФинансирования = СтатьяФинансированияОМС() Тогда
|
||||
Возврат ВидВремениПраздникиБезПовышеннойОплатыОМС();
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениПрогулы() Экспорт
|
||||
Возврат Справочники.ВидыИспользованияРабочегоВремени.Прогулы;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениРаботаНочныеЧасы(СтатьяФинансирования) Экспорт
|
||||
Если СтатьяФинансирования = СтатьяФинансированияСГЗ() Тогда
|
||||
Возврат ВидВремениРаботаНочныеЧасыСГЗ();
|
||||
ИначеЕсли СтатьяФинансирования = СтатьяФинансированияПД() Тогда
|
||||
Возврат ВидВремениРаботаНочныеЧасыПД();
|
||||
ИначеЕсли СтатьяФинансирования = СтатьяФинансированияОМС() Тогда
|
||||
Возврат ВидВремениРаботаНочныеЧасыОМС();
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениСверхурочные(СтатьяФинансирования) Экспорт
|
||||
Если СтатьяФинансирования = СтатьяФинансированияСГЗ() Тогда
|
||||
Возврат ВидВремениСверхурочныеСГЗ();
|
||||
ИначеЕсли СтатьяФинансирования = СтатьяФинансированияПД() Тогда
|
||||
Возврат ВидВремениСверхурочныеПД();
|
||||
ИначеЕсли СтатьяФинансирования = СтатьяФинансированияОМС() Тогда
|
||||
Возврат ВидВремениСверхурочныеОМС();
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениСверхурочныеБезПовышеннойОплаты(СтатьяФинансирования) Экспорт
|
||||
Если СтатьяФинансирования = СтатьяФинансированияСГЗ() Тогда
|
||||
Возврат ВидВремениСверхурочныеБезПовышеннойОплатыСГЗ();
|
||||
ИначеЕсли СтатьяФинансирования = СтатьяФинансированияПД() Тогда
|
||||
Возврат ВидВремениСверхурочныеБезПовышеннойОплатыПД();
|
||||
ИначеЕсли СтатьяФинансирования = СтатьяФинансированияОМС() Тогда
|
||||
Возврат ВидВремениСверхурочныеБезПовышеннойОплатыОМС();
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область КлассификацияВидовВремени
|
||||
|
||||
// Возвращает код финансирования ("СГЗ"/"ПД"/"ОМС") для указанного вида времени.
|
||||
// Для неденежных видов (болезнь, отпуск и т.п.) возвращает Неопределено.
|
||||
Функция ФинансированиеПоВидуВремени(ВидВремени) Экспорт
|
||||
Если ВидВремени = ВидВремениЯвкаСГЗ()
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыСГЗ()
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиСГЗ()
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыСГЗ()
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеСГЗ()
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыСГЗ() Тогда
|
||||
Возврат "СГЗ";
|
||||
ИначеЕсли ВидВремени = ВидВремениЯвкаПД()
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыПД()
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиПД()
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыПД()
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеПД()
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыПД() Тогда
|
||||
Возврат "ПД";
|
||||
ИначеЕсли ВидВремени = ВидВремениЯвкаОМС()
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыОМС()
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиОМС()
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыОМС()
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеОМС()
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыОМС() Тогда
|
||||
Возврат "ОМС";
|
||||
Иначе
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениЯвкаПринадлежитФинансированию(ВидВремени) Экспорт
|
||||
Возврат ВидВремени = ВидВремениЯвкаСГЗ()
|
||||
ИЛИ ВидВремени = ВидВремениЯвкаПД()
|
||||
ИЛИ ВидВремени = ВидВремениЯвкаОМС();
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениПраздникиПринадлежит(ВидВремени) Экспорт
|
||||
Возврат ВидВремени = ВидВремениПраздникиСГЗ()
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиПД()
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиОМС()
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыСГЗ()
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыПД()
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыОМС();
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениНочныеПринадлежит(ВидВремени) Экспорт
|
||||
Возврат ВидВремени = ВидВремениРаботаНочныеЧасыСГЗ()
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыПД()
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыОМС();
|
||||
КонецФункции
|
||||
|
||||
Функция ВидВремениСверхурочныеПринадлежит(ВидВремени) Экспорт
|
||||
Возврат ВидВремени = ВидВремениСверхурочныеСГЗ()
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеПД()
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеОМС()
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыСГЗ()
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыПД()
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыОМС()
|
||||
ИЛИ ВидВремени = ВидВремениКормлениеРебенка()
|
||||
ИЛИ ВидВремени = ВидВремениПовышениеКвалификации();
|
||||
КонецФункции
|
||||
|
||||
// Возвращает буквенное обозначение вида времени (для UI/Excel-формата).
|
||||
Функция БукваПоВидуВремени(ВидВремени) Экспорт
|
||||
Если ВидВремени = ВидВремениБолезнь() Тогда
|
||||
Возврат "Б";
|
||||
ИначеЕсли ВидВремени = ВидВремениВыходныеДни() Тогда
|
||||
Возврат "В";
|
||||
ИначеЕсли ВидВремени = ВидВремениОсновнойОтпуск() Тогда
|
||||
Возврат "О";
|
||||
ИначеЕсли ВидВремени = ВидВремениДополнительныйОтпуск() Тогда
|
||||
Возврат "ОД";
|
||||
ИначеЕсли ВидВремени = ВидВремениКомандировка() Тогда
|
||||
Возврат "К";
|
||||
ИначеЕсли ВидВремени = ВидВремениПрогулы() Тогда
|
||||
Возврат "П";
|
||||
ИначеЕсли ВидВремени = ВидВремениНеявкиПоНевыясненнымПричинам() Тогда
|
||||
Возврат "НН";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтпускНаОбучение() Тогда
|
||||
Возврат "ОУ";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтпускПоБеременностиИРодам() Тогда
|
||||
Возврат "Р";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтпускПоУходуЗаРебенком() Тогда
|
||||
Возврат "ОР";
|
||||
ИначеЕсли ВидВремени = ВидВремениНеоплачиваемыйОтпускПоРазрешениюРаботодателя() Тогда
|
||||
Возврат "ОЗ";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтстранениеОтРаботыБезОплаты() Тогда
|
||||
Возврат "НБ";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтстранениеОтРаботыСОплатой() Тогда
|
||||
Возврат "НО";
|
||||
Иначе
|
||||
Возврат "";
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбратноеПреобразование
|
||||
|
||||
// Классифицирует записи дня для обратной загрузки из табеля в ТЧ формы.
|
||||
//
|
||||
// Параметры:
|
||||
// ЗаписиДня - Массив из Структура (ключи "ВидВремени", "Часы")
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура с ключами "Основная", "Ночные", "Сверхурочные".
|
||||
// Каждое значение — Структура("Часы, Буква, ВидВремени") или Неопределено.
|
||||
//
|
||||
Функция КлассифицироватьДень(ЗаписиДня) Экспорт
|
||||
Результат = Новый Структура("Основная, Ночные, Сверхурочные", Неопределено, Неопределено, Неопределено);
|
||||
|
||||
ЧасыПраздничных = 0;
|
||||
ЧасыЯвки = 0;
|
||||
ЧасыНочных = 0;
|
||||
ЧасыСверхурочных = 0;
|
||||
ВидВремениПраздничных = Неопределено;
|
||||
ВидВремениЯвки = Неопределено;
|
||||
ВидВремениНочных = Неопределено;
|
||||
ВидВремениСверхурочных = Неопределено;
|
||||
ПервыйНеденежный = Неопределено;
|
||||
|
||||
Для Каждого Запись Из ЗаписиДня Цикл
|
||||
ВидВремени = Запись.ВидВремени;
|
||||
Часы = Запись.Часы;
|
||||
|
||||
Если ВидВремениЯвкаПринадлежитФинансированию(ВидВремени) Тогда
|
||||
ЧасыЯвки = ЧасыЯвки + Часы;
|
||||
Если ВидВремениЯвки = Неопределено Тогда
|
||||
ВидВремениЯвки = ВидВремени;
|
||||
КонецЕсли;
|
||||
ИначеЕсли ВидВремениПраздникиПринадлежит(ВидВремени) Тогда
|
||||
ЧасыПраздничных = ЧасыПраздничных + Часы;
|
||||
Если ВидВремениПраздничных = Неопределено Тогда
|
||||
ВидВремениПраздничных = ВидВремени;
|
||||
КонецЕсли;
|
||||
ИначеЕсли ВидВремениНочныеПринадлежит(ВидВремени) Тогда
|
||||
ЧасыНочных = ЧасыНочных + Часы;
|
||||
Если ВидВремениНочных = Неопределено Тогда
|
||||
ВидВремениНочных = ВидВремени;
|
||||
КонецЕсли;
|
||||
ИначеЕсли ВидВремениСверхурочныеПринадлежит(ВидВремени) Тогда
|
||||
ЧасыСверхурочных = ЧасыСверхурочных + Часы;
|
||||
Если ВидВремениСверхурочных = Неопределено Тогда
|
||||
ВидВремениСверхурочных = ВидВремени;
|
||||
КонецЕсли;
|
||||
ИначеЕсли ПервыйНеденежный = Неопределено Тогда
|
||||
ПервыйНеденежный = Новый Структура("Часы, Буква, ВидВремени", Часы, БукваПоВидуВремени(ВидВремени), ВидВремени);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Если ЧасыПраздничных > 0 Тогда
|
||||
Результат.Основная = Новый Структура("Часы, Буква, ВидВремени", ЧасыПраздничных, "РП", ВидВремениПраздничных);
|
||||
ИначеЕсли ЧасыЯвки > 0 Тогда
|
||||
Результат.Основная = Новый Структура("Часы, Буква, ВидВремени", ЧасыЯвки, "Ф", ВидВремениЯвки);
|
||||
ИначеЕсли ПервыйНеденежный <> Неопределено Тогда
|
||||
Результат.Основная = ПервыйНеденежный;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧасыНочных > 0 Тогда
|
||||
Результат.Ночные = Новый Структура("Часы, Буква, ВидВремени", ЧасыНочных, "Н", ВидВремениНочных);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧасыСверхурочных > 0 Тогда
|
||||
Результат.Сверхурочные = Новый Структура("Часы, Буква, ВидВремени", ЧасыСверхурочных, "С", ВидВремениСверхурочных);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
// Возвращает Истина, если во всех 31 колонках ЧасовN строки значение <= 0.
|
||||
Функция СтрокаПустаяПоЧасам(СтрокаТЧ) Экспорт
|
||||
Для НомерДня = 1 По 31 Цикл
|
||||
Если СтрокаТЧ["Часов" + НомерДня] > 0 Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Возврат Истина;
|
||||
КонецФункции
|
||||
|
||||
// Группирует часы по буквенным кодам и формирует строку вида "Я 7, Б 10".
|
||||
Функция РассчитатьВремяИтог(СтрокаТЧ) Экспорт
|
||||
ГруппировкаЧасов = Новый Соответствие;
|
||||
Для НомерДня = 1 По 31 Цикл
|
||||
Часы = СтрокаТЧ["Часов" + НомерДня];
|
||||
Если Часы = 0 Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
Буква = СтрокаТЧ["Время" + НомерДня + "Буква"];
|
||||
Если Буква = "" Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
ТекущаяСумма = ГруппировкаЧасов[Буква];
|
||||
Если ТекущаяСумма = Неопределено Тогда
|
||||
ТекущаяСумма = 0;
|
||||
КонецЕсли;
|
||||
ГруппировкаЧасов.Вставить(Буква, ТекущаяСумма + Часы);
|
||||
КонецЦикла;
|
||||
|
||||
Результат = "";
|
||||
Для Каждого КЗ Из ГруппировкаЧасов Цикл
|
||||
Если Результат <> "" Тогда
|
||||
Результат = Результат + ", ";
|
||||
КонецЕсли;
|
||||
Результат = Результат + КЗ.Ключ + " " + Формат(КЗ.Значение, "ЧРД=.; ЧГ=");
|
||||
КонецЦикла;
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Валидация
|
||||
|
||||
// Проверяет, есть ли в записях дня другие виды времени, отличные от указанного.
|
||||
Функция ЕстьНесовместимыеВидыВремени(Сотрудник, НомерДня, ТаблицаДня, ВидВремени) Экспорт
|
||||
НесовместимыеВидыВремениНайдены = Ложь;
|
||||
СписокНесовместимыхВидовВремени = "";
|
||||
Для каждого СтрокаТаблицыДня Из ТаблицаДня Цикл
|
||||
Если СтрокаТаблицыДня.ВидВремени <> ВидВремени Тогда
|
||||
Если СписокНесовместимыхВидовВремени = "" Тогда
|
||||
СписокНесовместимыхВидовВремени = Строка(СтрокаТаблицыДня.ВидВремени);
|
||||
Иначе
|
||||
СписокНесовместимыхВидовВремени = СписокНесовместимыхВидовВремени + ", " + Строка(СтрокаТаблицыДня.ВидВремени);
|
||||
КонецЕсли;
|
||||
НесовместимыеВидыВремениНайдены = Истина;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Возврат НесовместимыеВидыВремениНайдены;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ПоискСотрудников
|
||||
|
||||
// Возвращает табельный номер (поле Код) для указанного сотрудника.
|
||||
Функция ТабельныйНомерСотрудникаБД(Сотрудник) Экспорт
|
||||
Возврат Сотрудник.Код;
|
||||
КонецФункции
|
||||
|
||||
// Получает последнюю кадровую историю сотрудника.
|
||||
Функция КадровыеДанные(Сотрудник, ДатаПолученияКадровыхДанных) Экспорт
|
||||
СтруктураПоискаКадровыхДанных = Новый Структура("Сотрудник", Сотрудник);
|
||||
Возврат РегистрыСведений.КадроваяИсторияСотрудников.ПолучитьПоследнее(ДатаПолученияКадровыхДанных, СтруктураПоискаКадровыхДанных);
|
||||
КонецФункции
|
||||
|
||||
// Возвращает пустую структуру данных сотрудника (используется как фабрика).
|
||||
Функция СтруктураДанныхСотрудника() Экспорт
|
||||
Возврат Новый Структура("Сотрудник,Должность,НаименованиеДолжностиДляТабеля,ДолжностьПоШтатномуРасписанию,Подразделение,ВидЗанятости,КоличествоСтавок," +
|
||||
"ПредставлениеСотрудника,ПредставлениеДолжности,ПредставлениеПодразделения,Обработан",
|
||||
Справочники.Сотрудники.ПустаяСсылка(),
|
||||
Справочники.Должности.ПустаяСсылка(), "",
|
||||
Справочники.ШтатноеРасписание.ПустаяСсылка(),
|
||||
Справочники.ПодразделенияОрганизаций.ПустаяСсылка(),
|
||||
"",
|
||||
0,
|
||||
"", "", "",
|
||||
Ложь);
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ФильтрацияСотрудников
|
||||
|
||||
// Проверяет, есть ли сотрудник в списке совместителей (по физическому лицу).
|
||||
Функция СотрудникВСпискеСовместителей(Сотрудник, СписокСовместителей) Экспорт
|
||||
Результат = Ложь;
|
||||
Попытка
|
||||
Если СписокСовместителей.Количество() > 0 Тогда
|
||||
Если Сотрудник.ФизическоеЛицо = СписокСовместителей[0].Сотрудник.ФизическоеЛицо Тогда
|
||||
Результат = Истина;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
Исключение
|
||||
КонецПопытки;
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ПоискТабеля
|
||||
|
||||
// Ищет ссылку на сохранённый табель по ключевым реквизитам через РС ПС_ЗагруженныеТабеля.
|
||||
// Возвращает последнюю по дате загрузки редакцию.
|
||||
Функция НайтиСсылкуНаТабель(Организация, Подразделение, НаименованиеПодразделения, ПериодРегистрации) Экспорт
|
||||
Если НЕ ЗначениеЗаполнено(Организация)
|
||||
ИЛИ НЕ ЗначениеЗаполнено(Подразделение)
|
||||
ИЛИ ПустаяСтрока(НаименованиеПодразделения)
|
||||
ИЛИ НЕ ЗначениеЗаполнено(ПериодРегистрации) Тогда
|
||||
Возврат Документы.ТабельУчетаРабочегоВремени.ПустаяСсылка();
|
||||
КонецЕсли;
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| ПС_ЗагруженныеТабеляСрезПоследних.ТабельУчетаРабочегоВремени КАК ТабельУчетаРабочегоВремени
|
||||
|ИЗ
|
||||
| РегистрСведений.ПС_ЗагруженныеТабеля.СрезПоследних(
|
||||
| &ПериодРегистрации,
|
||||
| Организация = &Организация
|
||||
| И НаименованиеПодразделенияПоТабелю = &НаименованиеПодразделения
|
||||
| И ПериодВводаДанныхОВремени = &ПериодВводаДанныхОВремени
|
||||
| И СтруктурноеПодразделение = &СтруктурноеПодразделение) КАК ПС_ЗагруженныеТабеляСрезПоследних
|
||||
|УПОРЯДОЧИТЬ ПО
|
||||
| ПС_ЗагруженныеТабеляСрезПоследних.ДатаЗагрузки УБЫВ";
|
||||
Запрос.УстановитьПараметр("Организация", Организация);
|
||||
Запрос.УстановитьПараметр("СтруктурноеПодразделение", Подразделение);
|
||||
Запрос.УстановитьПараметр("НаименованиеПодразделения", НаименованиеПодразделения);
|
||||
Запрос.УстановитьПараметр("ПериодВводаДанныхОВремени", Перечисления.ПериодыВводаДанныхОВремени.ТекущийМесяц);
|
||||
Запрос.УстановитьПараметр("ПериодРегистрации", НачалоМесяца(ПериодРегистрации));
|
||||
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
Если РезультатЗапроса.Пустой() Тогда
|
||||
Возврат Документы.ТабельУчетаРабочегоВремени.ПустаяСсылка();
|
||||
КонецЕсли;
|
||||
|
||||
Выборка = РезультатЗапроса.Выбрать();
|
||||
Выборка.Следующий();
|
||||
Возврат Выборка.ТабельУчетаРабочегоВремени;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ce51cd3a-9b22-4c6a-9f49-7b3b1fa0f1aa">
|
||||
<name>ПС_ТабелиСервер</name>
|
||||
<server>true</server>
|
||||
<externalConnection>true</externalConnection>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
<returnValuesReuse>DuringSession</returnValuesReuse>
|
||||
</mdclass:CommonModule>
|
||||
@@ -75,8 +75,10 @@
|
||||
<commonModules>CommonModule.КадровыйУчетВызовСервера</commonModules>
|
||||
<commonModules>CommonModule.КадровыйУчетБазовый</commonModules>
|
||||
<commonModules>CommonModule.УчетРабочегоВремениРасширенный</commonModules>
|
||||
<commonModules>CommonModule.ПС_Описание</commonModules>
|
||||
<commonModules>CommonModule.ПС_ЗагрузкаДанныхИзExcel_Описание</commonModules>
|
||||
<commonModules>CommonModule.ПС_КартаДанных</commonModules>
|
||||
<commonModules>CommonModule.ПС_ТабелиСервер</commonModules>
|
||||
<httpServices>HTTPService.ПС_ВебСервисТабелей</httpServices>
|
||||
<catalogs>Catalog.Организации</catalogs>
|
||||
<catalogs>Catalog.ПодразделенияОрганизаций</catalogs>
|
||||
<catalogs>Catalog.Пользователи</catalogs>
|
||||
|
||||
+11
-12
@@ -499,6 +499,10 @@
|
||||
<dataPath xsi:type="form:DataPath">
|
||||
<segments>Объект.Подразделение</segments>
|
||||
</dataPath>
|
||||
<handlers>
|
||||
<event>OnChange</event>
|
||||
<name>ПодразделениеПриИзменении</name>
|
||||
</handlers>
|
||||
<extendedTooltip>
|
||||
<name>ПодразделениеРасширеннаяПодсказка</name>
|
||||
<id>493</id>
|
||||
@@ -579,6 +583,10 @@
|
||||
<dataPath xsi:type="form:DataPath">
|
||||
<segments>Объект.НаименованиеПодразделения</segments>
|
||||
</dataPath>
|
||||
<handlers>
|
||||
<event>OnChange</event>
|
||||
<name>НаименованиеПодразделенияПриИзменении</name>
|
||||
</handlers>
|
||||
<extendedTooltip>
|
||||
<name>НаименованиеПодразделенияРасширеннаяПодсказка</name>
|
||||
<id>1553</id>
|
||||
@@ -595,7 +603,6 @@
|
||||
<autoFill>true</autoFill>
|
||||
</contextMenu>
|
||||
<type>InputField</type>
|
||||
<readOnly>true</readOnly>
|
||||
<editMode>Enter</editMode>
|
||||
<showInHeader>true</showInHeader>
|
||||
<headerHorizontalAlign>Left</headerHorizontalAlign>
|
||||
@@ -608,18 +615,10 @@
|
||||
<chooseType>true</chooseType>
|
||||
<typeDomainEnabled>true</typeDomainEnabled>
|
||||
<textEdit>true</textEdit>
|
||||
<textColor xsi:type="core:ColorRef">
|
||||
<color>Style.SpecialTextColor</color>
|
||||
</textColor>
|
||||
<backColor xsi:type="core:ColorRef">
|
||||
<color>Style.ReportHeaderBackColor</color>
|
||||
</backColor>
|
||||
<textSize>Normal</textSize>
|
||||
<font xsi:type="core:FontRef">
|
||||
<font>Style.NormalTextFont</font>
|
||||
<bold>true</bold>
|
||||
<italic>false</italic>
|
||||
<underline>false</underline>
|
||||
<strikeout>false</strikeout>
|
||||
<scale>100</scale>
|
||||
</font>
|
||||
</extInfo>
|
||||
</items>
|
||||
<items xsi:type="form:FormField">
|
||||
|
||||
+596
-71
@@ -143,7 +143,7 @@
|
||||
Возврат ВидВремениСверхурочныеБезПовышеннойОплатыСГЗ;
|
||||
ИначеЕсли ТекущаяСтатьяФинансирования = СтатьяФинансированияПД Тогда
|
||||
Возврат ВидВремениСверхурочныеБезПовышеннойОплатыПД;
|
||||
ИначеЕсли Объект.СтатьяФинансирования = СтатьяФинансированияОМС Тогда
|
||||
ИначеЕсли ТекущаяСтатьяФинансирования = СтатьяФинансированияОМС Тогда
|
||||
Возврат ВидВремениСверхурочныеБезПовышеннойОплатыОМС;
|
||||
КонецЕсли;
|
||||
КонецФункции // ВидВремениНаСервереПоБукве()
|
||||
@@ -232,14 +232,14 @@
|
||||
&НаКлиенте
|
||||
Функция СтраницаФормыПоСтатьеФинансирования(АнализируемаяСтатьяФинансирования)
|
||||
Если АнализируемаяСтатьяФинансирования = СтатьяФинансированияСГЗ Тогда
|
||||
Возврат Элементы.ГруппаСтраницаТабельСГЗ
|
||||
Возврат Элементы.ГруппаСтраницаТабельСГЗ;
|
||||
ИначеЕсли АнализируемаяСтатьяФинансирования = СтатьяФинансированияПД Тогда
|
||||
Возврат Элементы.ГруппаСтраницаТабельПД
|
||||
Возврат Элементы.ГруппаСтраницаТабельПД;
|
||||
ИначеЕсли АнализируемаяСтатьяФинансирования = СтатьяФинансированияОМС Тогда
|
||||
Возврат Элементы.ГруппаСтраницаТабельОМС
|
||||
Возврат Элементы.ГруппаСтраницаТабельОМС;
|
||||
КонецЕсли;
|
||||
Возврат "";
|
||||
КонецФункции // ИмяТабличнойЧастиПоИсточникуФинансировани я()
|
||||
Возврат Элементы.ГруппаСтраницаТабельСГЗ;
|
||||
КонецФункции
|
||||
|
||||
&НаКлиенте
|
||||
Функция ЗаписатьКоличествоСотрудниковПоСтатьеФинансирования(АнализируемаяСтатьяФинансирования)
|
||||
@@ -573,6 +573,9 @@
|
||||
|
||||
&НаКлиенте
|
||||
Асинх Процедура КомандаОткрыть(Команда)
|
||||
// Перед открытием файла очищаем форму от данных предыдущей загрузки,
|
||||
// чтобы при ошибке формата Excel пользователь увидел чистую форму.
|
||||
НачатьСначала(Неопределено);
|
||||
//Если ЗначениеЗаполнено(Объект.ДатаЗагрузки) Тогда
|
||||
Режим = РежимДиалогаВыбораФайла.Открытие;
|
||||
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
|
||||
@@ -596,6 +599,42 @@
|
||||
ФайлДанных.Прочитать(ИмяФайла);
|
||||
|
||||
ИначеЕсли Прав(ИмяФайла, 3)="xls" ИЛИ (Прав(ИмяФайла, 4)="xlsx") Тогда
|
||||
Ждать ЗагрузитьДанныеИзФайлаExcel(ИмяФайла);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
НайтиРанееЗагруженныйТабель();
|
||||
ОпределитьВидимостьСтраниц();
|
||||
Элементы.ГруппаСтраницы.ТекущаяСтраница = СтраницаФормыПоСтатьеФинансирования(ТекущаяСтатьяФинансирования);
|
||||
ЗаписатьКоличествоСотрудниковПоСтатьеФинансирования(ТекущаяСтатьяФинансирования);
|
||||
//ОбновитьСписокЗагруженныхТабелей();
|
||||
ДанныеИзменены = Истина;
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ЗакрытьExcel(Excel)
|
||||
Если Excel = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
Попытка
|
||||
Если Excel.ActiveWorkbook <> Неопределено Тогда
|
||||
Excel.ActiveWorkbook.Close(False);
|
||||
КонецЕсли;
|
||||
Исключение
|
||||
КонецПопытки;
|
||||
Попытка
|
||||
Excel.Quit();
|
||||
Исключение
|
||||
КонецПопытки;
|
||||
Excel = Неопределено;
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Асинх Функция ЗагрузитьДанныеИзФайлаExcel(ИмяФайла)
|
||||
|
||||
Перем Excel;
|
||||
Excel = Неопределено;
|
||||
ИмяФайлаКраткое = Прав(ИмяФайла, СтрДлина(ИмяФайла) - СтрНайти(ИмяФайла, "\", НаправлениеПоиска.СКонца));
|
||||
|
||||
Попытка
|
||||
Excel = Новый COMОбъект("Excel.Application");
|
||||
Excel.WorkBooks.Open(ИмяФайла, 2, True);
|
||||
@@ -605,23 +644,18 @@
|
||||
Исключение
|
||||
Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
|
||||
Сообщить(ОписаниеОшибки());
|
||||
Возврат;
|
||||
ЗакрытьExcel(Excel);
|
||||
Возврат Неопределено;
|
||||
КонецПопытки;
|
||||
|
||||
Попытка
|
||||
//Открываем необходимый лист
|
||||
Excel.Sheets(1).Select();
|
||||
// лист 1, по умолчанию
|
||||
Исключение //Закрываем Excel
|
||||
Excel.ActiveWorkbook.Close();
|
||||
Excel = 0;
|
||||
Сообщить("Файл "+Строка(ИмяФайла)+" не соответствует необходимому формату! Первый лист не найден!");
|
||||
|
||||
Возврат;
|
||||
Исключение
|
||||
Сообщить("Файл "+ИмяФайла+" не соответствует необходимому формату! Первый лист не найден!");
|
||||
ЗакрытьExcel(Excel);
|
||||
Возврат Неопределено;
|
||||
КонецПопытки;
|
||||
|
||||
// СтрокаОпределенияФормата = Excel.Cells(10, 1).Text;
|
||||
|
||||
|
||||
Сообщение = Новый СообщениеПользователю;
|
||||
Сообщение.Текст = "Определен файл выгрузки данных табеля учета рабочего времени.";
|
||||
Сообщение.Сообщить();
|
||||
@@ -854,11 +888,11 @@
|
||||
ТабличнаяЧасть = ИмяТабличнойЧастиПоСтатьеФинансирования(ТекущаяСтатьяФинансирования);
|
||||
Объект[ТабличнаяЧасть].Очистить();
|
||||
Иначе
|
||||
Возврат
|
||||
ЗакрытьExcel(Excel);
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
НомерСтрокиТабеля = 1;
|
||||
//Оценка количества сотрудников
|
||||
МаксимальноеКоличествоСотрудников = 0;
|
||||
Если ПродолжитьЦикл Тогда
|
||||
Состояние("Загрузка файла табеля """ + ИмяФайлаКраткое + """",1,"Оценка размера файла...");
|
||||
@@ -911,7 +945,6 @@
|
||||
Объект.Организация,
|
||||
Объект.КонецПериодаТабеля,
|
||||
ИФ);
|
||||
|
||||
Иначе
|
||||
КоличествоСовместителей = КоличествоСовместителей + 1;
|
||||
КонецЕсли;
|
||||
@@ -938,29 +971,25 @@
|
||||
ТекущаяСтрокаТабличнойЧасти.Сотрудник = Сотрудник;
|
||||
ТекущаяСтрокаТабличнойЧасти.Должность = Должность;
|
||||
|
||||
|
||||
ВремяИтог = СокрЛП(Excel.Cells(НомерТекущейСтроки, Колонка_ВремяИтог).Text);
|
||||
ТекущаяСтрокаТабличнойЧасти.ВремяИтог = ВремяИтог;
|
||||
|
||||
Если ВысотаСтроки = 3 Тогда //Есть ночные
|
||||
Если ВысотаСтроки = 3 Тогда
|
||||
НоваяСтрокаНочныхЧасовТабличнойЧасти = Объект[ТабличнаяЧасть].Добавить();
|
||||
|
||||
Если ЗначениеЗаполнено(ФИО) Тогда
|
||||
ФИОСотрудника = ФИО;
|
||||
КонецЕсли;
|
||||
НоваяСтрокаНочныхЧасовТабличнойЧасти.ФИОСотрудника = ФИОСотрудника;
|
||||
НоваяСтрокаНочныхЧасовТабличнойЧасти.ТабельныйНомер = ТабельныйНомер;
|
||||
НоваяСтрокаНочныхЧасовТабличнойЧасти.ДолжностьСотрудника = НаименованиеДолжностиСотрудника;
|
||||
|
||||
НоваяСтрокаНочныхЧасовТабличнойЧасти.Сотрудник = Сотрудник;
|
||||
|
||||
ВремяИтог = СокрЛП(Excel.Cells(НомерТекущейСтроки + 1, Колонка_ВремяИтог).Text);
|
||||
НоваяСтрокаНочныхЧасовТабличнойЧасти.ВремяИтог = ВремяИтог;
|
||||
КонецЕсли;
|
||||
Для ЧислоДня = 1 По КонецМесяцаТабеля Цикл // число для отладки
|
||||
|
||||
Для ЧислоДня = 1 По КонецМесяцаТабеля Цикл
|
||||
|
||||
ИмяКолонкиЦифра = "Часов" + ЧислоДня;
|
||||
|
||||
ИмяКолонкиБуква = "Время" + ЧислоДня + "Буква";
|
||||
ИмяКолонкиВидВремени = "ВидВремени" + ЧислоДня;
|
||||
НомерКолонкиФайла = НК+ЧислоДня;
|
||||
@@ -970,7 +999,7 @@
|
||||
КоличествоНочныхЧасов = 0;
|
||||
КоличествоЧасов = 0;
|
||||
НайденоРабочееВремя = Ложь;
|
||||
Если ВысотаСтроки = 3 Тогда //Есть ночные
|
||||
Если ВысотаСтроки = 3 Тогда
|
||||
ТекстЯчейки = ВРег(СокрЛП(Excel.Cells(НомерТекущейСтроки+1, НомерКолонкиФайла).Text));
|
||||
Если (Найти(ТекстЯчейки,"Н") > 0) и (Найти(ТекстЯчейки,"НН") = 0) и
|
||||
(Найти(ТекстЯчейки,"НБ") = 0) и (Найти(ТекстЯчейки,"НОД") = 0) и
|
||||
@@ -984,7 +1013,6 @@
|
||||
Если Найти(ТекстКоличестваНочныхЧасов_2,"Н") = 0 Тогда
|
||||
ТекстКоличестваНочныхЧасов = ТекстКоличестваНочныхЧасов_2;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТекстКоличестваНочныхЧасов = "" Тогда
|
||||
КоличествоНочныхЧасов = 0;
|
||||
Иначе
|
||||
@@ -1016,7 +1044,6 @@
|
||||
Попытка
|
||||
КоличествоЧасов = Число(ТекстКоличестваЧасов);
|
||||
Исключение
|
||||
Сообщение = Новый СообщениеПользователю;
|
||||
СообщениеОбОшибкеВидаВремени = "Ошибка получения часов по табелю. Сотрудник: " + ФИО +
|
||||
". Номер дня: " + Строка(ЧислоДня);
|
||||
ИнформационноеСообщение(СообщениеОбОшибкеВидаВремени,СтатусСообщения.ОченьВажное);
|
||||
@@ -1027,54 +1054,54 @@
|
||||
|
||||
Если ТекстЯчейки = "" Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениВыходныеДни();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Ф") = 1 Тогда //Явка
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Ф") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениЯвка();
|
||||
НайденоРабочееВремя = Истина;
|
||||
ИначеЕсли Найти(ТекстЯчейки,"С") = 1 Тогда //Сверхурочные
|
||||
ИначеЕсли Найти(ТекстЯчейки,"С") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениСверхурочные();
|
||||
НайденоРабочееВремя = Истина;
|
||||
ИначеЕсли Найти(ТекстЯчейки,"РП") = 1 Тогда //Праздничные и выходные
|
||||
ИначеЕсли Найти(ТекстЯчейки,"РП") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениПраздники();
|
||||
НайденоРабочееВремя = Истина;
|
||||
ИначеЕсли Найти(ТекстЯчейки,"В") = 1 Тогда //Выходные и праздничные дни
|
||||
ИначеЕсли Найти(ТекстЯчейки,"В") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениВыходныеДни();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"К") = 1 Тогда //Больничный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"К") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениКомандировка();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Б") = 1 Тогда //Больничный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Б") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениБолезнь();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Р") = 1 Тогда //Отпуск по беременности и родам
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Р") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениОтпускПоБеременностиИРодам();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОР") = 1 Тогда //Отпуск по уходу за ребенком
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОР") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениОтпускПоУходуЗаРебенком();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"П") = 1 Тогда //Прогул
|
||||
ИначеЕсли Найти(ТекстЯчейки,"П") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениПрогулы();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"А") = 1 Тогда //Прогул
|
||||
ИначеЕсли Найти(ТекстЯчейки,"А") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныеВыходныеДниОплачиваемые();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"О") = 1 Тогда //Отпуск основной
|
||||
ИначеЕсли Найти(ТекстЯчейки,"О") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениОсновнойОтпуск();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОД") = 1 Тогда //Отпуск дополнительный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОД") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныйОтпуск();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОУ") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОУ") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениОтпускНаОбучение();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ВУ") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ВУ") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныеВыходныеДниОплачиваемые();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НН") = 1 Тогда //Неявки по невыясненным причинам
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НН") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениНеявкиПоНевыясненнымПричинам();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОЗ") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОЗ") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениНеоплачиваемыйОтпускПоРазрешениюРаботодателя();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОВ") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОВ") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныеВыходныеДниОплачиваемые();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НБ") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НБ") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениОтстранениеОтРаботыБезОплаты();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НОД") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НОД") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныеВыходныеДниОплачиваемые();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ДВ") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ДВ") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныеВыходныеДниОплачиваемые();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Д") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Д") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныеВыходныеДниОплачиваемые();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НА") = 1 Тогда //Неявка из-за ареста (Неявки по невыясненным причинам)
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НА") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениНеявкиПоНевыясненнымПричинам();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НО") = 1 и (Найти(ТекстЯчейки,"НОД") = 0) Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НО") = 1 и (Найти(ТекстЯчейки,"НОД") = 0) Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениОтстранениеОтРаботыСОплатой();
|
||||
КонецЕсли;
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиЦифра] = КоличествоЧасов;
|
||||
@@ -1095,26 +1122,15 @@
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
Объект.Комментарий = "Загружено " + Строка(ТекущаяДата()) +
|
||||
" по данным файлов: """ + ИмяФайлаСГЗ + """, """ + ИмяФайлаПД + """, """ + ИмяФайлаСГЗ + """";
|
||||
|
||||
НомерСтрокиТабеля = 100001;
|
||||
НомерТекущейСтрокиТабличнойЧасти = 100001;
|
||||
|
||||
Excel.WorkBooks.Close();
|
||||
//ЗаполнитьТабличнуюЧасть();
|
||||
//ОчисткаЗначенийРекрвизитовФормы()
|
||||
//ЭтаОбработка = РеквизитФормыВЗначение("Объект");
|
||||
//Объект.Табель.Очистить();
|
||||
КонецЕсли;
|
||||
НайтиРанееЗагруженныйТабель();
|
||||
ОпределитьВидимостьСтраниц();
|
||||
Элементы.ГруппаСтраницы.ТекущаяСтраница = СтраницаФормыПоСтатьеФинансирования(ТекущаяСтатьяФинансирования);
|
||||
ЗаписатьКоличествоСотрудниковПоСтатьеФинансирования(ТекущаяСтатьяФинансирования);
|
||||
//ОбновитьСписокЗагруженныхТабелей();
|
||||
ДанныеИзменены = Истина;
|
||||
КонецПроцедуры
|
||||
ЗакрытьExcel(Excel);
|
||||
Возврат ТекущаяСтатьяФинансирования;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Процедура НайтиРанееЗагруженныйТабель()
|
||||
@@ -3088,6 +3104,8 @@
|
||||
СвойствоДляНаименованияДолжностиОМС = СвойствоСотрудникаНаименованиеДолжностиДляТабеля("ОМС");
|
||||
|
||||
ЗначениеВРеквизитФормы(ЭтаОбработка,"Объект");
|
||||
|
||||
ЗаполнитьСписокВыбораПодразделений();
|
||||
КонецПроцедуры
|
||||
|
||||
// <Описание процедуры>
|
||||
@@ -3294,8 +3312,111 @@
|
||||
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ОрганизацияПриИзменении(Элемент)
|
||||
Асинх Процедура ОрганизацияПриИзменении(Элемент)
|
||||
Объект.Табель = "";
|
||||
ЗаполнитьСписокВыбораПодразделений();
|
||||
ОбновитьСписокЗагруженныхТабелей();
|
||||
ПриИзмененииКлючевыхРеквизитов();
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
&НаКлиенте
|
||||
Асинх Процедура ПодразделениеПриИзменении(Элемент)
|
||||
Объект.Табель = "";
|
||||
ЗаполнитьСписокВыбораНаименованийПодразделений();
|
||||
ПриИзмененииКлючевыхРеквизитов();
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
&НаКлиенте
|
||||
Асинх Процедура НаименованиеПодразделенияПриИзменении(Элемент)
|
||||
Объект.Табель = "";
|
||||
ПриИзмененииКлючевыхРеквизитов();
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
&НаСервере
|
||||
Процедура ЗаполнитьСписокВыбораПодразделений()
|
||||
Элементы.Подразделение.СписокВыбора.Очистить();
|
||||
Элементы.НаименованиеПодразделения.СписокВыбора.Очистить();
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|
||||
| ПС_НастройкиЗагрузкиТабелейСрезПоследних.СтруктурноеПодразделение КАК СтруктурноеПодразделение,
|
||||
| ПС_НастройкиЗагрузкиТабелейСрезПоследних.НаименованиеПодразделенияПоТабелю КАК НаименованиеПодразделенияПоТабелю
|
||||
|ИЗ
|
||||
| РегистрСведений.ПС_НастройкиЗагрузкиТабелей.СрезПоследних(, Организация = &Организация) КАК ПС_НастройкиЗагрузкиТабелейСрезПоследних
|
||||
|ГДЕ
|
||||
| ПС_НастройкиЗагрузкиТабелейСрезПоследних.СтруктурноеПодразделение <> &ПустоеПодразделение
|
||||
|УПОРЯДОЧИТЬ ПО
|
||||
| СтруктурноеПодразделение";
|
||||
Запрос.УстановитьПараметр("Организация", Объект.Организация);
|
||||
Запрос.УстановитьПараметр("ПустоеПодразделение", Справочники.ПодразделенияОрганизаций.ПустаяСсылка());
|
||||
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
Если РезультатЗапроса.Пустой() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Выборка = РезультатЗапроса.Выбрать();
|
||||
Пока Выборка.Следующий() Цикл
|
||||
Если ЗначениеЗаполнено(Выборка.СтруктурноеПодразделение) Тогда
|
||||
Элементы.Подразделение.СписокВыбора.Добавить(Выборка.СтруктурноеПодразделение);
|
||||
КонецЕсли;
|
||||
Если ЗначениеЗаполнено(Выборка.НаименованиеПодразделенияПоТабелю) Тогда
|
||||
Элементы.НаименованиеПодразделения.СписокВыбора.Добавить(
|
||||
Выборка.НаименованиеПодразделенияПоТабелю,
|
||||
Выборка.НаименованиеПодразделенияПоТабелю);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
&НаСервере
|
||||
Процедура ЗаполнитьСписокВыбораНаименованийПодразделений()
|
||||
Элементы.НаименованиеПодразделения.СписокВыбора.Очистить();
|
||||
Объект.НаименованиеПодразделения = "";
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Объект.Организация)
|
||||
ИЛИ НЕ ЗначениеЗаполнено(Объект.Подразделение) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|
||||
| ПС_НастройкиЗагрузкиТабелейСрезПоследних.НаименованиеПодразделенияПоТабелю КАК НаименованиеПодразделенияПоТабелю
|
||||
|ИЗ
|
||||
| РегистрСведений.ПС_НастройкиЗагрузкиТабелей.СрезПоследних(, Организация = &Организация
|
||||
| И СтруктурноеПодразделение = &СтруктурноеПодразделение) КАК ПС_НастройкиЗагрузкиТабелейСрезПоследних
|
||||
|ГДЕ
|
||||
| ПС_НастройкиЗагрузкиТабелейСрезПоследних.НаименованиеПодразделенияПоТабелю <> """"
|
||||
|УПОРЯДОЧИТЬ ПО
|
||||
| НаименованиеПодразделенияПоТабелю";
|
||||
Запрос.УстановитьПараметр("Организация", Объект.Организация);
|
||||
Запрос.УстановитьПараметр("СтруктурноеПодразделение", Объект.Подразделение);
|
||||
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
Если РезультатЗапроса.Пустой() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Выборка = РезультатЗапроса.Выбрать();
|
||||
Пока Выборка.Следующий() Цикл
|
||||
Элементы.НаименованиеПодразделения.СписокВыбора.Добавить(
|
||||
Выборка.НаименованиеПодразделенияПоТабелю,
|
||||
Выборка.НаименованиеПодразделенияПоТабелю);
|
||||
КонецЦикла;
|
||||
|
||||
// Если в РС для выбранного подразделения только одно наименование — подставить сразу.
|
||||
Если Элементы.НаименованиеПодразделения.СписокВыбора.Количество() = 1 Тогда
|
||||
Объект.НаименованиеПодразделения = Элементы.НаименованиеПодразделения.СписокВыбора[0].Значение;
|
||||
КонецЕсли;
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
@@ -3331,10 +3452,11 @@
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ПериодРегистрацииПриИзменении()
|
||||
Асинх Процедура ПериодРегистрацииПриИзменении()
|
||||
УчетРабочегоВремениРасширенныйКлиентСервер.ТабельУстановитьПериодДокумента(ЭтаФорма);
|
||||
ОчиститьДанные();
|
||||
КонецПроцедуры // авры()
|
||||
ПриИзмененииКлючевыхРеквизитов();
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
&НаКлиенте
|
||||
@@ -3383,3 +3505,406 @@
|
||||
ОбновитьСписокЗагруженныхТабелей();
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
// Обратная загрузка данных из ранее сохранённого табеля (Задача 1).
|
||||
// Диспетчер вызывается при изменении любого из четырёх ключевых реквизитов формы:
|
||||
// Организация, Подразделение, НаименованиеПодразделения, ПериодРегистрации.
|
||||
&НаКлиенте
|
||||
Асинх Процедура ПриИзмененииКлючевыхРеквизитов()
|
||||
Если НЕ КлючевыеРеквизитыЗаполнены() Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
СсылкаНаТабель = НайтиСсылкуНаТабельАсинх();
|
||||
Если НЕ ЗначениеЗаполнено(СсылкаНаТабель) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Объект.Табель = СсылкаНаТабель;
|
||||
|
||||
Если ЕстьДанныеВТабличныхЧастях() Тогда
|
||||
Режим = РежимДиалогаВопрос.ДаНет;
|
||||
ТекстВопроса = "Найден ранее загруженный табель за "
|
||||
+ Формат(Объект.ПериодРегистрации, "ДФ='MMMM yyyy'")
|
||||
+ " по " + Строка(Объект.Подразделение)
|
||||
+ ". Подгрузить его данные в форму? Текущие данные будут заменены.";
|
||||
Ответ = Ждать ВопросАсинх(ТекстВопроса, Режим);
|
||||
Если Ответ <> КодВозвратаДиалога.Да Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
ЗагрузитьДанныеТабеляВФорму(СсылкаНаТабель);
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Функция КлючевыеРеквизитыЗаполнены()
|
||||
Возврат ЗначениеЗаполнено(Объект.Организация)
|
||||
И ЗначениеЗаполнено(Объект.Подразделение)
|
||||
И НЕ ПустаяСтрока(Объект.НаименованиеПодразделения)
|
||||
И ЗначениеЗаполнено(Объект.ПериодРегистрации);
|
||||
КонецФункции
|
||||
|
||||
&НаКлиенте
|
||||
Функция ЕстьДанныеВТабличныхЧастях()
|
||||
Возврат Объект.ТабличнаяЧастьСГЗ.Количество() > 0
|
||||
ИЛИ Объект.ТабличнаяЧастьПД.Количество() > 0
|
||||
ИЛИ Объект.ТабличнаяЧастьОМС.Количество() > 0;
|
||||
КонецФункции
|
||||
|
||||
// Проход Б: полная обратная загрузка данных табеля в табличные части формы.
|
||||
&НаКлиенте
|
||||
Асинх Процедура ЗагрузитьДанныеТабеляВФорму(СсылкаНаТабель)
|
||||
ЗаполнитьТабличныеЧастиИзТабеляНаСервере(СсылкаНаТабель);
|
||||
|
||||
ОпределитьВидимостьСтраниц();
|
||||
|
||||
Если Объект.ТабличнаяЧастьСГЗ.Количество() > 0 Тогда
|
||||
ТекущаяСтатьяФинансирования = СтатьяФинансированияСГЗ;
|
||||
ИначеЕсли Объект.ТабличнаяЧастьПД.Количество() > 0 Тогда
|
||||
ТекущаяСтатьяФинансирования = СтатьяФинансированияПД;
|
||||
ИначеЕсли Объект.ТабличнаяЧастьОМС.Количество() > 0 Тогда
|
||||
ТекущаяСтатьяФинансирования = СтатьяФинансированияОМС;
|
||||
КонецЕсли;
|
||||
|
||||
Элементы.ГруппаСтраницы.ТекущаяСтраница = СтраницаФормыПоСтатьеФинансирования(ТекущаяСтатьяФинансирования);
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Функция ЗаполнитьТабличныеЧастиИзТабеляНаСервере(СсылкаНаТабель)
|
||||
Если НЕ ЗначениеЗаполнено(СсылкаНаТабель) Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
ТабельОбъект = СсылкаНаТабель.ПолучитьОбъект();
|
||||
Если ТабельОбъект = Неопределено Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
// Формируем выборку по (Сотрудник, Финансирование, День).
|
||||
ДанныеПоСотрудникам = Новый Соответствие;
|
||||
|
||||
Для Каждого СтрокаТЧ Из ТабельОбъект.ДанныеОВремени Цикл
|
||||
Если НЕ ЗначениеЗаполнено(СтрокаТЧ.Сотрудник) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Для НомерДня = 1 По 31 Цикл
|
||||
ВидВремени = СтрокаТЧ["ВидВремени" + НомерДня];
|
||||
Если НЕ ЗначениеЗаполнено(ВидВремени) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
Часы = СтрокаТЧ["Часов" + НомерДня];
|
||||
|
||||
Финансирование = ФинансированиеПоВидуВремени(ВидВремени);
|
||||
Если Финансирование = Неопределено Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Сотрудники = ДанныеПоСотрудникам[СтрокаТЧ.Сотрудник];
|
||||
Если Сотрудники = Неопределено Тогда
|
||||
Сотрудники = Новый Соответствие;
|
||||
ДанныеПоСотрудникам.Вставить(СтрокаТЧ.Сотрудник, Сотрудники);
|
||||
КонецЕсли;
|
||||
ПоФинансированию = Сотрудники[Финансирование];
|
||||
Если ПоФинансированию = Неопределено Тогда
|
||||
ПоФинансированию = Новый Соответствие;
|
||||
Сотрудники.Вставить(Финансирование, ПоФинансированию);
|
||||
КонецЕсли;
|
||||
ПоДню = ПоФинансированию[НомерДня];
|
||||
Если ПоДню = Неопределено Тогда
|
||||
ПоДню = Новый Массив;
|
||||
ПоФинансированию.Вставить(НомерДня, ПоДню);
|
||||
КонецЕсли;
|
||||
ЗаписьДня = Новый Структура("ВидВремени, Часы", ВидВремени, Часы);
|
||||
ПоДню.Добавить(ЗаписьДня);
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
|
||||
// Прямо заполняем ТЧ объекта обработки.
|
||||
Объект.ТабличнаяЧастьСГЗ.Очистить();
|
||||
Объект.ТабличнаяЧастьПД.Очистить();
|
||||
Объект.ТабличнаяЧастьОМС.Очистить();
|
||||
|
||||
Для Каждого КЗ_Сотрудник Из ДанныеПоСотрудникам Цикл
|
||||
Сотрудник = КЗ_Сотрудник.Ключ;
|
||||
ДанныеСотрудника = КЗ_Сотрудник.Значение;
|
||||
|
||||
Для Каждого КЗ_Фин Из ДанныеСотрудника Цикл
|
||||
Финансирование = КЗ_Фин.Ключ;
|
||||
ДанныеПоДням = КЗ_Фин.Значение;
|
||||
|
||||
ТЧ = Объект["ТабличнаяЧасть" + Финансирование];
|
||||
|
||||
СтрокаОсновная = ТЧ.Добавить();
|
||||
СтрокаОсновная.Сотрудник = Сотрудник;
|
||||
СтрокаОсновная.ТабельныйНомер = Сотрудник.Код;
|
||||
|
||||
СтрокаНочные = ТЧ.Добавить();
|
||||
СтрокаНочные.Сотрудник = Сотрудник;
|
||||
СтрокаНочные.ТабельныйНомер = Сотрудник.Код;
|
||||
|
||||
СтрокаСверхурочные = ТЧ.Добавить();
|
||||
СтрокаСверхурочные.Сотрудник = Сотрудник;
|
||||
СтрокаСверхурочные.ТабельныйНомер = Сотрудник.Код;
|
||||
|
||||
Для НомерДня = 1 По 31 Цикл
|
||||
ЗаписиДня = ДанныеПоДням[НомерДня];
|
||||
Если ЗаписиДня = Неопределено Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Классификация = КлассифицироватьДень(ЗаписиДня);
|
||||
|
||||
Если Классификация.Основная <> Неопределено Тогда
|
||||
СтрокаОсновная["Часов" + НомерДня] = Классификация.Основная.Часы;
|
||||
СтрокаОсновная["Время" + НомерДня + "Буква"] = Классификация.Основная.Буква;
|
||||
СтрокаОсновная["ВидВремени" + НомерДня] = Классификация.Основная.ВидВремени;
|
||||
КонецЕсли;
|
||||
|
||||
Если Классификация.Ночные <> Неопределено Тогда
|
||||
СтрокаНочные["Часов" + НомерДня] = Классификация.Ночные.Часы;
|
||||
СтрокаНочные["Время" + НомерДня + "Буква"] = Классификация.Ночные.Буква;
|
||||
СтрокаНочные["ВидВремени" + НомерДня] = Классификация.Ночные.ВидВремени;
|
||||
КонецЕсли;
|
||||
|
||||
Если Классификация.Сверхурочные <> Неопределено Тогда
|
||||
СтрокаСверхурочные["Часов" + НомерДня] = Классификация.Сверхурочные.Часы;
|
||||
СтрокаСверхурочные["Время" + НомерДня + "Буква"] = Классификация.Сверхурочные.Буква;
|
||||
СтрокаСверхурочные["ВидВремени" + НомерДня] = Классификация.Сверхурочные.ВидВремени;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Если СтрокаПустаяПоЧасам(СтрокаНочные) Тогда
|
||||
ТЧ.Удалить(СтрокаНочные);
|
||||
Иначе
|
||||
СтрокаНочные.ВремяИтог = РассчитатьВремяИтог(СтрокаНочные);
|
||||
КонецЕсли;
|
||||
|
||||
Если СтрокаПустаяПоЧасам(СтрокаСверхурочные) Тогда
|
||||
ТЧ.Удалить(СтрокаСверхурочные);
|
||||
Иначе
|
||||
СтрокаСверхурочные.ВремяИтог = РассчитатьВремяИтог(СтрокаСверхурочные);
|
||||
КонецЕсли;
|
||||
|
||||
СтрокаОсновная.ВремяИтог = РассчитатьВремяИтог(СтрокаОсновная);
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Неопределено;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция ФинансированиеПоВидуВремени(ВидВремени)
|
||||
Если ВидВремени = ВидВремениЯвкаСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыСГЗ Тогда
|
||||
Возврат "СГЗ";
|
||||
ИначеЕсли ВидВремени = ВидВремениЯвкаПД
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыПД
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиПД
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыПД
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеПД
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыПД Тогда
|
||||
Возврат "ПД";
|
||||
ИначеЕсли ВидВремени = ВидВремениЯвкаОМС
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыОМС
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиОМС
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыОМС
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеОМС
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыОМС Тогда
|
||||
Возврат "ОМС";
|
||||
Иначе
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция СтрокаПустаяПоЧасам(СтрокаТЧ)
|
||||
Для НомерДня = 1 По 31 Цикл
|
||||
Если СтрокаТЧ["Часов" + НомерДня] > 0 Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Возврат Истина;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция КлассифицироватьДень(ЗаписиДня)
|
||||
Результат = Новый Структура("Основная, Ночные, Сверхурочные", Неопределено, Неопределено, Неопределено);
|
||||
|
||||
ЧасыПраздничных = 0;
|
||||
ЧасыЯвки = 0;
|
||||
ЧасыНочных = 0;
|
||||
ЧасыСверхурочных = 0;
|
||||
ВидВремениПраздничных = Неопределено;
|
||||
ВидВремениЯвки = Неопределено;
|
||||
ВидВремениНочных = Неопределено;
|
||||
ВидВремениСверхурочных = Неопределено;
|
||||
ПервыйНеденежный = Неопределено;
|
||||
|
||||
Для Каждого Запись Из ЗаписиДня Цикл
|
||||
ВидВремени = Запись.ВидВремени;
|
||||
Часы = Запись.Часы;
|
||||
|
||||
Если ВидВремениЯвкаПринадлежитФинансированию(ВидВремени) Тогда
|
||||
ЧасыЯвки = ЧасыЯвки + Часы;
|
||||
Если ВидВремениЯвки = Неопределено Тогда
|
||||
ВидВремениЯвки = ВидВремени;
|
||||
КонецЕсли;
|
||||
ИначеЕсли ВидВремениПраздникиПринадлежит(ВидВремени) Тогда
|
||||
ЧасыПраздничных = ЧасыПраздничных + Часы;
|
||||
Если ВидВремениПраздничных = Неопределено Тогда
|
||||
ВидВремениПраздничных = ВидВремени;
|
||||
КонецЕсли;
|
||||
ИначеЕсли ВидВремениНочныеПринадлежит(ВидВремени) Тогда
|
||||
ЧасыНочных = ЧасыНочных + Часы;
|
||||
Если ВидВремениНочных = Неопределено Тогда
|
||||
ВидВремениНочных = ВидВремени;
|
||||
КонецЕсли;
|
||||
ИначеЕсли ВидВремениСверхурочныеПринадлежит(ВидВремени) Тогда
|
||||
ЧасыСверхурочных = ЧасыСверхурочных + Часы;
|
||||
Если ВидВремениСверхурочных = Неопределено Тогда
|
||||
ВидВремениСверхурочных = ВидВремени;
|
||||
КонецЕсли;
|
||||
ИначеЕсли ПервыйНеденежный = Неопределено Тогда
|
||||
ПервыйНеденежный = Новый Структура("Часы, Буква, ВидВремени", Часы, БукваПоВидуВремени(ВидВремени), ВидВремени);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Если ЧасыПраздничных > 0 Тогда
|
||||
Результат.Основная = Новый Структура("Часы, Буква, ВидВремени", ЧасыПраздничных, "РП", ВидВремениПраздничных);
|
||||
ИначеЕсли ЧасыЯвки > 0 Тогда
|
||||
Результат.Основная = Новый Структура("Часы, Буква, ВидВремени", ЧасыЯвки, "Ф", ВидВремениЯвки);
|
||||
ИначеЕсли ПервыйНеденежный <> Неопределено Тогда
|
||||
Результат.Основная = ПервыйНеденежный;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧасыНочных > 0 Тогда
|
||||
Результат.Ночные = Новый Структура("Часы, Буква, ВидВремени", ЧасыНочных, "Н", ВидВремениНочных);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧасыСверхурочных > 0 Тогда
|
||||
Результат.Сверхурочные = Новый Структура("Часы, Буква, ВидВремени", ЧасыСверхурочных, "С", ВидВремениСверхурочных);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция ВидВремениЯвкаПринадлежитФинансированию(ВидВремени)
|
||||
Возврат ВидВремени = ВидВремениЯвкаСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениЯвкаПД
|
||||
ИЛИ ВидВремени = ВидВремениЯвкаОМС;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция ВидВремениПраздникиПринадлежит(ВидВремени)
|
||||
Возврат ВидВремени = ВидВремениПраздникиСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиПД
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиОМС
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыПД
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыОМС;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция ВидВремениНочныеПринадлежит(ВидВремени)
|
||||
Возврат ВидВремени = ВидВремениРаботаНочныеЧасыСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыПД
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыОМС;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция ВидВремениСверхурочныеПринадлежит(ВидВремени)
|
||||
Возврат ВидВремени = ВидВремениСверхурочныеСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеПД
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеОМС
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыПД
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыОМС
|
||||
ИЛИ ВидВремени = ВидВремениКормлениеРебенка()
|
||||
ИЛИ ВидВремени = ВидВремениПовышениеКвалификации();
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция БукваПоВидуВремени(ВидВремени)
|
||||
Если ВидВремени = ВидВремениБолезнь() Тогда
|
||||
Возврат "Б";
|
||||
ИначеЕсли ВидВремени = ВидВремениВыходныеДни() Тогда
|
||||
Возврат "В";
|
||||
ИначеЕсли ВидВремени = ВидВремениОсновнойОтпуск() Тогда
|
||||
Возврат "О";
|
||||
ИначеЕсли ВидВремени = ВидВремениДополнительныйОтпуск() Тогда
|
||||
Возврат "ОД";
|
||||
ИначеЕсли ВидВремени = ВидВремениКомандировка() Тогда
|
||||
Возврат "К";
|
||||
ИначеЕсли ВидВремени = ВидВремениПрогулы() Тогда
|
||||
Возврат "П";
|
||||
ИначеЕсли ВидВремени = ВидВремениНеявкиПоНевыясненнымПричинам() Тогда
|
||||
Возврат "НН";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтпускНаОбучение() Тогда
|
||||
Возврат "ОУ";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтпускПоБеременностиИРодам() Тогда
|
||||
Возврат "Р";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтпускПоУходуЗаРебенком() Тогда
|
||||
Возврат "ОР";
|
||||
ИначеЕсли ВидВремени = ВидВремениНеоплачиваемыйОтпускПоРазрешениюРаботодателя() Тогда
|
||||
Возврат "ОЗ";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтстранениеОтРаботыБезОплаты() Тогда
|
||||
Возврат "НБ";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтстранениеОтРаботыСОплатой() Тогда
|
||||
Возврат "НО";
|
||||
Иначе
|
||||
Возврат "";
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция РассчитатьВремяИтог(СтрокаТЧ)
|
||||
ГруппировкаЧасов = Новый Соответствие;
|
||||
Для НомерДня = 1 По 31 Цикл
|
||||
Часы = СтрокаТЧ["Часов" + НомерДня];
|
||||
Если Часы = 0 Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
Буква = СтрокаТЧ["Время" + НомерДня + "Буква"];
|
||||
Если Буква = "" Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
ТекущаяСумма = ГруппировкаЧасов[Буква];
|
||||
Если ТекущаяСумма = Неопределено Тогда
|
||||
ТекущаяСумма = 0;
|
||||
КонецЕсли;
|
||||
ГруппировкаЧасов.Вставить(Буква, ТекущаяСумма + Часы);
|
||||
КонецЦикла;
|
||||
|
||||
Результат = "";
|
||||
Для Каждого КЗ Из ГруппировкаЧасов Цикл
|
||||
Если Результат <> "" Тогда
|
||||
Результат = Результат + ", ";
|
||||
КонецЕсли;
|
||||
Результат = Результат + КЗ.Ключ + " " + Формат(КЗ.Значение, "ЧРД=.; ЧГ=");
|
||||
КонецЦикла;
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
// Серверная обёртка для вызова с клиента без контекста формы.
|
||||
&НаСервереБезКонтекста
|
||||
Функция НайтиСсылкуНаТабельНаСервере(Организация, Подразделение, НаименованиеПодразделения, ПериодРегистрации)
|
||||
Возврат ПС_ТабелиСервер.НайтиСсылкуНаТабель(Организация, Подразделение, НаименованиеПодразделения, ПериодРегистрации);
|
||||
КонецФункции
|
||||
|
||||
&НаКлиенте
|
||||
Функция НайтиСсылкуНаТабельАсинх()
|
||||
Возврат НайтиСсылкуНаТабельНаСервере(
|
||||
Объект.Организация,
|
||||
Объект.Подразделение,
|
||||
Объект.НаименованиеПодразделения,
|
||||
Объект.ПериодРегистрации);
|
||||
КонецФункции
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,385 @@
|
||||
// HTTP-сервис "Веб-сервис табелей".
|
||||
// Маршруты:
|
||||
// GET /index — HTML-форма ввода табеля
|
||||
// GET /me — JSON с данными текущего пользователя
|
||||
// GET /departments — JSON со списком доступных подразделений
|
||||
// GET /employees — JSON со списком действующих сотрудников подразделения
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
||||
Функция ОбработкаГлавной(Запрос)
|
||||
Возврат ГлавнаяHtml();
|
||||
КонецФункции
|
||||
|
||||
Функция ОбработкаТекущегоПользователя(Запрос)
|
||||
Данные = ДанныеТекущегоПользователя();
|
||||
Объект = Новый Соответствие;
|
||||
Объект.Вставить("name", Данные.Имя);
|
||||
Объект.Вставить("user", Данные.ИмяПользователя);
|
||||
Возврат JsonОтвет(200, Объект);
|
||||
КонецФункции
|
||||
|
||||
Функция ОбработкаСпискаПодразделений(Запрос)
|
||||
Массив = Новый Массив;
|
||||
Подразделения = ДоступныеПодразделения();
|
||||
Для Каждого КлючЗначение Из Подразделения Цикл
|
||||
П = КлючЗначение.Значение;
|
||||
Элемент = Новый Соответствие;
|
||||
Элемент.Вставить("ref", XMLСтрока(П.Ссылка));
|
||||
Элемент.Вставить("name", П.Имя);
|
||||
Массив.Добавить(Элемент);
|
||||
КонецЦикла;
|
||||
Объект = Новый Соответствие;
|
||||
Объект.Вставить("items", Массив);
|
||||
Возврат JsonОтвет(200, Объект);
|
||||
КонецФункции
|
||||
|
||||
Функция ОбработкаСпискаСотрудников(Запрос)
|
||||
СтрокаПодразделения = Запрос.ПараметрыЗапроса.Получить("dep");
|
||||
Если СтрокаПодразделения = Неопределено Тогда
|
||||
СтрокаПодразделения = Запрос.ПараметрыURL.Получить("dep");
|
||||
КонецЕсли;
|
||||
Если СтрокаПодразделения = Неопределено ИЛИ ПустаяСтрока(СтрокаПодразделения) Тогда
|
||||
Ошибка = Новый Соответствие;
|
||||
Ошибка.Вставить("error", "Не передано подразделение (dep)");
|
||||
Возврат JsonОтвет(400, Ошибка);
|
||||
КонецЕсли;
|
||||
|
||||
Массив = Новый Массив;
|
||||
СотрудникиСписок = СотрудникиПодразделения(СтрокаПодразделения);
|
||||
Для Каждого Строка Из СотрудникиСписок Цикл
|
||||
Элемент = Новый Соответствие;
|
||||
Элемент.Вставить("ref", XMLСтрока(Строка.Ссылка));
|
||||
Элемент.Вставить("name", Строка.Имя);
|
||||
Элемент.Вставить("position", Строка.Должность);
|
||||
Массив.Добавить(Элемент);
|
||||
КонецЦикла;
|
||||
|
||||
Объект = Новый Соответствие;
|
||||
Объект.Вставить("items", Массив);
|
||||
Возврат JsonОтвет(200, Объект);
|
||||
КонецФункции
|
||||
|
||||
Функция ОбработкаСпискаВидовВремени(Запрос)
|
||||
Массив = Новый Массив;
|
||||
ВидыСписок = ВидыВремениСписок();
|
||||
Для Каждого Строка Из ВидыСписок Цикл
|
||||
Элемент = Новый Соответствие;
|
||||
Элемент.Вставить("ref", XMLСтрока(Строка.Ссылка));
|
||||
Элемент.Вставить("letter", Строка.Буква);
|
||||
Элемент.Вставить("name", Строка.Наименование);
|
||||
Массив.Добавить(Элемент);
|
||||
КонецЦикла;
|
||||
|
||||
Объект = Новый Соответствие;
|
||||
Объект.Вставить("items", Массив);
|
||||
Возврат JsonОтвет(200, Объект);
|
||||
КонецФункции
|
||||
|
||||
Функция ОбработкаСпискаИсточниковФинансирования(Запрос)
|
||||
Массив = Новый Массив;
|
||||
Для Каждого Строка Из ИсточникиФинансированияСписок() Цикл
|
||||
Элемент = Новый Соответствие;
|
||||
Элемент.Вставить("ref", Строка.Код);
|
||||
Элемент.Вставить("name", Строка.Наименование);
|
||||
Массив.Добавить(Элемент);
|
||||
КонецЦикла;
|
||||
|
||||
Объект = Новый Соответствие;
|
||||
Объект.Вставить("items", Массив);
|
||||
Возврат JsonОтвет(200, Объект);
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
// HTML-страница.
|
||||
|
||||
Функция ГлавнаяHtml()
|
||||
ДанныеПользователя = ДанныеТекущегоПользователя();
|
||||
Подразделения = ДоступныеПодразделения();
|
||||
|
||||
Части = Новый Массив;
|
||||
Части.Добавить("<!DOCTYPE html>");
|
||||
Части.Добавить("<html lang=""ru"">");
|
||||
Части.Добавить("<head>");
|
||||
Части.Добавить("<meta charset=""utf-8"">");
|
||||
Части.Добавить("<title>Ввод табеля — MVP</title>");
|
||||
Части.Добавить("<style>");
|
||||
Части.Добавить("body { font-family: -apple-system, Segoe UI, sans-serif; margin: 24px; color: #1f2933; background: #f7f9fb; }");
|
||||
Части.Добавить("h1 { margin: 0 0 4px; font-size: 22px; }");
|
||||
Части.Добавить(".muted { color: #6b7280; font-size: 13px; }");
|
||||
Части.Добавить(".card { background: white; border: 1px solid #e1e5eb; border-radius: 6px; padding: 16px; margin-top: 12px; }");
|
||||
Части.Добавить(".filters { display: flex; gap: 16px; flex-wrap: wrap; align-items: flex-end; }");
|
||||
Части.Добавить(".filter-cell { display: flex; flex-direction: column; min-width: 180px; }");
|
||||
Части.Добавить("label { margin-top: 8px; font-size: 13px; }");
|
||||
Части.Добавить("select, input, button { padding: 6px 10px; font-size: 14px; border: 1px solid #cbd2d9; border-radius: 4px; }");
|
||||
Части.Добавить("button { background: #2c7be5; color: white; border: 0; cursor: pointer; padding: 8px 16px; }");
|
||||
Части.Добавить("button:disabled { background: #9aa5b1; cursor: not-allowed; }");
|
||||
Части.Добавить("table.t { border-collapse: collapse; margin-top: 12px; font-size: 12px; }");
|
||||
Части.Добавить("table.t th, table.t td { border: 1px solid #e1e5eb; padding: 2px; text-align: center; min-width: 32px; }");
|
||||
Части.Добавить("table.t th { background: #f0f4f8; }");
|
||||
Части.Добавить("table.t td.name, table.t th.name { text-align: left; padding-left: 8px; min-width: 220px; background: #fafbfc; position: sticky; left: 0; }");
|
||||
Части.Добавить("table.t select { width: 100%; border: 0; padding: 2px 4px; font-size: 12px; background: transparent; }");
|
||||
Части.Добавить(".scroll { overflow-x: auto; max-width: 100%; }");
|
||||
Части.Добавить("</style>");
|
||||
Части.Добавить("</head>");
|
||||
Части.Добавить("<body>");
|
||||
Части.Добавить("<h1>Ввод табеля учёта рабочего времени</h1>");
|
||||
Части.Добавить("<div class=""muted"">MVP — проверка концепции.</div>");
|
||||
Части.Добавить("<div class=""card"">");
|
||||
Части.Добавить("<div><b>Пользователь:</b> " + ДанныеПользователя.Имя + "</div>");
|
||||
Части.Добавить("<div><b>Подразделений доступно:</b> " + Формат(Подразделения.Количество(), "ЧГ=0") + "</div>");
|
||||
Части.Добавить("</div>");
|
||||
Части.Добавить("<div class=""card"">");
|
||||
Части.Добавить("<div class=""filters"">");
|
||||
Части.Добавить("<div class=""filter-cell""><label>Подразделение</label>");
|
||||
Части.Добавить("<select id=""depSelect""><option value="""">— выберите —</option>" + ОпцииПодразделений(Подразделения) + "</select></div>");
|
||||
Части.Добавить("<div class=""filter-cell""><label>Период (месяц)</label>");
|
||||
Части.Добавить("<input type=""month"" id=""period"" value=""" + Формат(ТекущаяДатаСеанса(), "ДФ=yyyy-MM") + """></div>");
|
||||
Части.Добавить("<div class=""filter-cell""><label>Источник финансирования</label>");
|
||||
Части.Добавить("<select id=""fundSelect""><option value="""">— выберите —</option></select></div>");
|
||||
Части.Добавить("<div class=""filter-cell""><label> </label><button id=""load"" disabled>Загрузить табель</button></div>");
|
||||
Части.Добавить("</div>");
|
||||
Части.Добавить("<div style=""margin-top: 8px;""><span id=""status"" class=""muted""></span></div>");
|
||||
Части.Добавить("</div>");
|
||||
Части.Добавить("<div class=""card"">");
|
||||
Части.Добавить("<div id=""tableArea""><div class=""muted"">Сотрудники появятся после загрузки.</div></div>");
|
||||
Части.Добавить("</div>");
|
||||
Части.Добавить("<script>");
|
||||
Части.Добавить("var sel = document.getElementById('depSelect');");
|
||||
Части.Добавить("var period = document.getElementById('period');");
|
||||
Части.Добавить("var fundSel = document.getElementById('fundSelect');");
|
||||
Части.Добавить("var btn = document.getElementById('load');");
|
||||
Части.Добавить("var status = document.getElementById('status');");
|
||||
Части.Добавить("var tableArea = document.getElementById('tableArea');");
|
||||
Части.Добавить("var kinds = [];");
|
||||
Части.Добавить("function ready() { btn.disabled = !(sel.value && period.value && fundSel.value); }");
|
||||
Части.Добавить("sel.onchange = ready; period.onchange = ready; fundSel.onchange = ready;");
|
||||
Части.Добавить("function loadKinds(cb) {");
|
||||
Части.Добавить(" var xhr = new XMLHttpRequest();");
|
||||
Части.Добавить(" xhr.open('GET', '/8ZikBudg/hs/tabel/kinds', true);");
|
||||
Части.Добавить(" xhr.onload = function() {");
|
||||
Части.Добавить(" if (xhr.status === 200) { try { var d = JSON.parse(xhr.responseText); kinds = d.items || []; cb && cb(); }");
|
||||
Части.Добавить(" catch (e) { status.textContent = 'Ошибка /kinds: ' + e.message; } }");
|
||||
Части.Добавить(" else { status.textContent = 'Ошибка /kinds: HTTP ' + xhr.status; } };");
|
||||
Части.Добавить(" xhr.onerror = function() { status.textContent = 'Сбой запроса /kinds.'; };");
|
||||
Части.Добавить(" xhr.send();");
|
||||
Части.Добавить("}");
|
||||
Части.Добавить("function loadFunds() {");
|
||||
Части.Добавить(" var xhr = new XMLHttpRequest();");
|
||||
Части.Добавить(" xhr.open('GET', '/8ZikBudg/hs/tabel/funds', true);");
|
||||
Части.Добавить(" xhr.onload = function() {");
|
||||
Части.Добавить(" if (xhr.status === 200) { try { var d = JSON.parse(xhr.responseText);");
|
||||
Части.Добавить(" for (var i = 0; i < d.items.length; i++) {");
|
||||
Части.Добавить(" var o = document.createElement('option'); o.value = d.items[i].ref; o.textContent = d.items[i].name; fundSel.appendChild(o);");
|
||||
Части.Добавить(" } ready(); }");
|
||||
Части.Добавить(" catch (e) { status.textContent = 'Ошибка /funds: ' + e.message; } }");
|
||||
Части.Добавить(" else { status.textContent = 'Ошибка /funds: HTTP ' + xhr.status; } };");
|
||||
Части.Добавить(" xhr.onerror = function() { status.textContent = 'Сбой запроса /funds.'; };");
|
||||
Части.Добавить(" xhr.send();");
|
||||
Части.Добавить("}");
|
||||
Части.Добавить("function daysInPeriod(p) {");
|
||||
Части.Добавить(" var a = p.split('-'); var y = parseInt(a[0], 10); var m = parseInt(a[1], 10);");
|
||||
Части.Добавить(" return new Date(y, m, 0).getDate();");
|
||||
Части.Добавить("}");
|
||||
Части.Добавить("btn.onclick = function() {");
|
||||
Части.Добавить(" status.textContent = 'Загрузка…'; btn.disabled = true; tableArea.innerHTML = '';");
|
||||
Части.Добавить(" var days = daysInPeriod(period.value);");
|
||||
Части.Добавить(" var xhr = new XMLHttpRequest();");
|
||||
Части.Добавить(" xhr.open('GET', '/8ZikBudg/hs/tabel/employees?dep=' + encodeURIComponent(sel.value), true);");
|
||||
Части.Добавить(" xhr.onload = function() {");
|
||||
Части.Добавить(" if (xhr.status === 200) { try {");
|
||||
Части.Добавить(" var data = JSON.parse(xhr.responseText); renderTable(data.items || [], days);");
|
||||
Части.Добавить(" status.textContent = 'Готово. Сотрудников: ' + (data.items || []).length + ', дней: ' + days + '.';");
|
||||
Части.Добавить(" } catch (e) { status.textContent = 'Ошибка разбора: ' + e.message; } }");
|
||||
Части.Добавить(" else { status.textContent = 'Ошибка /employees: HTTP ' + xhr.status; }");
|
||||
Части.Добавить(" ready();");
|
||||
Части.Добавить(" };");
|
||||
Части.Добавить(" xhr.onerror = function() { status.textContent = 'Сбой запроса /employees.'; ready(); };");
|
||||
Части.Добавить(" xhr.send();");
|
||||
Части.Добавить("};");
|
||||
Части.Добавить("function renderTable(items, days) {");
|
||||
Части.Добавить(" if (!items.length) { tableArea.innerHTML = '<div class=""muted"">В подразделении нет действующих сотрудников.</div>'; return; }");
|
||||
Части.Добавить(" var opts = '';");
|
||||
Части.Добавить(" for (var k = 0; k < kinds.length; k++) { opts += '<option value=""' + kinds[k].letter + '"">' + kinds[k].letter + '</option>'; }");
|
||||
Части.Добавить(" var html = '<div class=""scroll""><table class=""t""><thead><tr>';");
|
||||
Части.Добавить(" html += '<th class=""name"">№</th><th class=""name"">Сотрудник</th>';");
|
||||
Части.Добавить(" for (var d = 1; d <= days; d++) { html += '<th>' + d + '</th>'; }");
|
||||
Части.Добавить(" html += '</tr></thead><tbody>';");
|
||||
Части.Добавить(" for (var i = 0; i < items.length; i++) {");
|
||||
Части.Добавить(" html += '<tr><td class=""name"">' + (i + 1) + '</td><td class=""name"">' + items[i].name + '</td>';");
|
||||
Части.Добавить(" for (var d = 1; d <= days; d++) { html += '<td><select data-row=""' + i + '"" data-day=""' + d + '""><option value=""""></option>' + opts + '</select></td>'; }");
|
||||
Части.Добавить(" html += '</tr>';");
|
||||
Части.Добавить(" }");
|
||||
Части.Добавить(" html += '</tbody></table></div>';");
|
||||
Части.Добавить(" tableArea.innerHTML = html;");
|
||||
Части.Добавить("}");
|
||||
Части.Добавить("loadFunds(); loadKinds();");
|
||||
Части.Добавить("</script>");
|
||||
Части.Добавить("</body></html>");
|
||||
|
||||
ТелоHtml = СтрСоединить(Части, Символы.ПС);
|
||||
|
||||
Ответ = Новый HTTPСервисОтвет(200);
|
||||
Ответ.Заголовки.Вставить("Content-Type", "text/html; charset=utf-8");
|
||||
Ответ.УстановитьТелоИзСтроки(ТелоHtml, КодировкаТекста.UTF8);
|
||||
Возврат Ответ;
|
||||
КонецФункции
|
||||
|
||||
Функция ОпцииПодразделений(Подразделения)
|
||||
Части = Новый Массив;
|
||||
Для Каждого КлючЗначение Из Подразделения Цикл
|
||||
Ссылка = XMLСтрока(КлючЗначение.Значение.Ссылка);
|
||||
Имя = КлючЗначение.Значение.Имя;
|
||||
Части.Добавить("<option value=""" + Ссылка + """>" + Имя + "</option>");
|
||||
КонецЦикла;
|
||||
Возврат СтрСоединить(Части, "");
|
||||
КонецФункции
|
||||
|
||||
// Backend.
|
||||
|
||||
Функция ДанныеТекущегоПользователя()
|
||||
ИмяПользователя = "";
|
||||
Попытка
|
||||
ИмяПользователя = ИмяПользователя();
|
||||
Исключение
|
||||
ИмяПользователя = "Не определён";
|
||||
КонецПопытки;
|
||||
Возврат Новый Структура("ИмяПользователя, Имя", ИмяПользователя, ИмяПользователя);
|
||||
КонецФункции
|
||||
|
||||
// Возвращает Соответствие: Ключ = XMLСтрока(ссылки), Значение = Структура{Ссылка, Имя}.
|
||||
Функция ДоступныеПодразделения()
|
||||
Результат = Новый Соответствие;
|
||||
Запрос = Новый Запрос(
|
||||
"ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка, Наименование КАК Имя
|
||||
|ИЗ Справочник.ПодразделенияОрганизаций
|
||||
|ГДЕ НЕ ПометкаУдаления
|
||||
|УПОРЯДОЧИТЬ ПО Наименование");
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
Пока Выборка.Следующий() Цикл
|
||||
Данные = Новый Структура("Ссылка, Имя", Выборка.Ссылка, СокрЛП(Выборка.Имя));
|
||||
Результат.Вставить(XMLСтрока(Выборка.Ссылка), Данные);
|
||||
КонецЦикла;
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
// Фиксированный набор источников финансирования для учреждений здравоохранения.
|
||||
Функция ИсточникиФинансированияСписок()
|
||||
Результат = Новый Массив;
|
||||
Результат.Добавить(Новый Структура("Код, Наименование", "СГЗ",
|
||||
"Субсидии на выполнение государственного задания"));
|
||||
Результат.Добавить(Новый Структура("Код, Наименование", "ПД",
|
||||
"Приносящая доход деятельность"));
|
||||
Результат.Добавить(Новый Структура("Код, Наименование", "ОМС",
|
||||
"Обязательное медицинское страхование"));
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
// Возвращает массив структур {Ссылка, Имя, Должность} — сотрудники, действующие в подразделении.
|
||||
Функция СотрудникиПодразделения(Знач СтрокаПодразделения)
|
||||
Результат = Новый Массив;
|
||||
|
||||
ПодразделениеСсылка = XMLЗначение(Тип("СправочникСсылка.ПодразделенияОрганизаций"),
|
||||
СтрокаПодразделения);
|
||||
|
||||
Запрос = Новый Запрос(
|
||||
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
|
||||
| КадроваяИстория.Сотрудник КАК Сотрудник
|
||||
|ИЗ
|
||||
| РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИстория
|
||||
|ГДЕ
|
||||
| КадроваяИстория.Подразделение = &Подразделение
|
||||
| И КадроваяИстория.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
|
||||
| И КадроваяИстория.ДатаНачала <= &ТекущаяДата
|
||||
| И (КадроваяИстория.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)
|
||||
| ИЛИ КадроваяИстория.ДатаОкончания >= &ТекущаяДата)
|
||||
|УПОРЯДОЧИТЬ ПО
|
||||
| КадроваяИстория.Сотрудник.Наименование");
|
||||
Запрос.УстановитьПараметр("Подразделение", ПодразделениеСсылка);
|
||||
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса());
|
||||
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
Пока Выборка.Следующий() Цикл
|
||||
Сотрудник = Выборка.Сотрудник;
|
||||
Результат.Добавить(Новый Структура(
|
||||
"Ссылка, Имя, Должность",
|
||||
Сотрудник,
|
||||
СокрЛП(Сотрудник.Наименование),
|
||||
""));
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
// Возвращает массив структур {Ссылка, Буква, Наименование} — предопределённые виды использования рабочего времени.
|
||||
Функция ВидыВремениСписок()
|
||||
Результат = Новый Массив;
|
||||
|
||||
Запрос = Новый Запрос(
|
||||
"ВЫБРАТЬ
|
||||
| ВидыВремени.Ссылка КАК Ссылка,
|
||||
| ВидыВремени.БуквенныйКод КАК Буква,
|
||||
| ВидыВремени.Наименование КАК Наименование
|
||||
|ИЗ
|
||||
| Справочник.ВидыИспользованияРабочегоВремени КАК ВидыВремени
|
||||
|ГДЕ
|
||||
| НЕ ВидыВремени.ПометкаУдаления
|
||||
| И ВидыВремени.НеИспользуется = ЛОЖЬ
|
||||
|УПОРЯДОЧИТЬ ПО
|
||||
| ВидыВремени.Наименование");
|
||||
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
Выборка = Запрос.Выполнить().Выбрать();
|
||||
УстановитьПривилегированныйРежим(Ложь);
|
||||
|
||||
Пока Выборка.Следующий() Цикл
|
||||
Результат.Добавить(Новый Структура(
|
||||
"Ссылка, Буква, Наименование",
|
||||
Выборка.Ссылка,
|
||||
СокрЛП(Выборка.Буква),
|
||||
СокрЛП(Выборка.Наименование)));
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
// Сериализация в JSON.
|
||||
|
||||
Функция JsonОтвет(КодСостояния, Объект)
|
||||
ЗаписьJSON = Новый ЗаписьJSON;
|
||||
ЗаписьJSON.УстановитьСтроку();
|
||||
ЗаписатьJsonЗначение(ЗаписьJSON, Объект);
|
||||
Тело = ЗаписьJSON.Закрыть();
|
||||
|
||||
Ответ = Новый HTTPСервисОтвет(КодСостояния);
|
||||
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
|
||||
Ответ.УстановитьТелоИзСтроки(Тело, КодировкаТекста.UTF8);
|
||||
Возврат Ответ;
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаписатьJsonЗначение(ЗаписьJSON, Значение)
|
||||
Если Значение = Неопределено Тогда
|
||||
ЗаписьJSON.ЗаписатьЗначение(Null);
|
||||
ИначеЕсли ТипЗнч(Значение) = Тип("Соответствие") ИЛИ ТипЗнч(Значение) = Тип("Структура") Тогда
|
||||
ЗаписьJSON.ЗаписатьНачалоОбъекта();
|
||||
Для Каждого КлючЗначение Из Значение Цикл
|
||||
ЗаписьJSON.ЗаписатьИмяСвойства(КлючЗначение.Ключ);
|
||||
ЗаписатьJsonЗначение(ЗаписьJSON, КлючЗначение.Значение);
|
||||
КонецЦикла;
|
||||
ЗаписьJSON.ЗаписатьКонецОбъекта();
|
||||
ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда
|
||||
ЗаписьJSON.ЗаписатьНачалоМассива();
|
||||
Для Каждого Элемент Из Значение Цикл
|
||||
ЗаписатьJsonЗначение(ЗаписьJSON, Элемент);
|
||||
КонецЦикла;
|
||||
ЗаписьJSON.ЗаписатьКонецМассива();
|
||||
Иначе
|
||||
ЗаписьJSON.ЗаписатьЗначение(Значение);
|
||||
КонецЕсли;
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
+103
@@ -0,0 +1,103 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:HTTPService xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="8fcbeb90-fb46-4f8a-9d9a-da3a1005ea23">
|
||||
<name>ПС_ВебСервисТабелей</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Веб-сервис табелей</value>
|
||||
</synonym>
|
||||
<rootURL>tabel</rootURL>
|
||||
<reuseSessions>AutoUse</reuseSessions>
|
||||
<sessionMaxAge>20</sessionMaxAge>
|
||||
<urlTemplates uuid="67247dad-9453-41aa-8e88-2b895a5ca48a">
|
||||
<name>Корневой</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Корневой URL</value>
|
||||
</synonym>
|
||||
<template>/index</template>
|
||||
<methods uuid="dcd0c0b4-ded3-4462-a1d9-84a6a723e0fb">
|
||||
<name>Главная</name>
|
||||
<handler>ОбработкаГлавной</handler>
|
||||
</methods>
|
||||
</urlTemplates>
|
||||
<urlTemplates uuid="d1885db9-af3d-4cb3-b90a-e74096076566">
|
||||
<name>ТекущийПользователь</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Текущий пользователь</value>
|
||||
</synonym>
|
||||
<template>/me</template>
|
||||
<methods uuid="692d8ffd-af43-47e0-bf4e-68ca93635e64">
|
||||
<name>Получить</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>GET /me</value>
|
||||
</synonym>
|
||||
<handler>ОбработкаТекущегоПользователя</handler>
|
||||
</methods>
|
||||
</urlTemplates>
|
||||
<urlTemplates uuid="779b1022-0604-4aa4-85ad-d7c59cdf9146">
|
||||
<name>Подразделения</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Список подразделений</value>
|
||||
</synonym>
|
||||
<template>/departments</template>
|
||||
<methods uuid="f4de8672-285a-416b-8936-c030453f8c3b">
|
||||
<name>Получить</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>GET /departments</value>
|
||||
</synonym>
|
||||
<handler>ОбработкаСпискаПодразделений</handler>
|
||||
</methods>
|
||||
</urlTemplates>
|
||||
<urlTemplates uuid="a2c66a9e-06b5-4636-bfce-f021e1b348b7">
|
||||
<name>СотрудникиПодразделения</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Сотрудники подразделения</value>
|
||||
</synonym>
|
||||
<template>/employees</template>
|
||||
<methods uuid="d784cad9-e739-4c7e-972f-96466b37c27f">
|
||||
<name>Получить</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>GET /employees?dep=...</value>
|
||||
</synonym>
|
||||
<handler>ОбработкаСпискаСотрудников</handler>
|
||||
</methods>
|
||||
</urlTemplates>
|
||||
<urlTemplates uuid="7bdbf8ab-d00d-4a52-8f4e-8137aab4e1cd">
|
||||
<name>ВидыВремени</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Виды использования рабочего времени</value>
|
||||
</synonym>
|
||||
<template>/kinds</template>
|
||||
<methods uuid="bb592643-a5c4-4a7c-a2cd-28a91eca8ee9">
|
||||
<name>Получить</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>GET /kinds</value>
|
||||
</synonym>
|
||||
<handler>ОбработкаСпискаВидовВремени</handler>
|
||||
</methods>
|
||||
</urlTemplates>
|
||||
<urlTemplates uuid="a5ceeefc-14ef-4a89-aa52-21835d58618f">
|
||||
<name>ИсточникиФинансирования</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Источники финансирования</value>
|
||||
</synonym>
|
||||
<template>/funds</template>
|
||||
<methods uuid="8f2dfa7c-1cfe-4a3f-932e-831a52e79a42">
|
||||
<name>Получить</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>GET /funds</value>
|
||||
</synonym>
|
||||
<handler>ОбработкаСпискаИсточниковФинансирования</handler>
|
||||
</methods>
|
||||
</urlTemplates>
|
||||
</mdclass:HTTPService>
|
||||
+1
-1
@@ -35,7 +35,7 @@
|
||||
//
|
||||
// Общие модули:
|
||||
// ПС_РаботаСНастройками — программный интерфейс (Сервер)
|
||||
// ПС_Описание — настоящий модуль документации
|
||||
// ПС_ПериодическиеНастройки_Описание — настоящий модуль документации
|
||||
//
|
||||
// ПРИНЦИП ЗАПИСИ БЕЗ УКАЗАНИЯ ПЕРИОДА
|
||||
//
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6d9ceeed-89b2-436f-8698-d7314fff223f">
|
||||
<name>ПС_Описание</name>
|
||||
<name>ПС_ПериодическиеНастройки_Описание</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Описание</value>
|
||||
@@ -46,7 +46,7 @@
|
||||
</languages>
|
||||
<roles>Role.ПС_ЗаписьНастроек</roles>
|
||||
<roles>Role.ПС_ЧтениеНастроек</roles>
|
||||
<commonModules>CommonModule.ПС_Описание</commonModules>
|
||||
<commonModules>CommonModule.ПС_ПериодическиеНастройки_Описание</commonModules>
|
||||
<commonModules>CommonModule.ПС_РаботаСНастройками</commonModules>
|
||||
<definedTypes>DefinedType.ПС_ТипыЗначенийНастроек</definedTypes>
|
||||
<catalogs>Catalog.Пользователи</catalogs>
|
||||
|
||||
Submodule
+1
Submodule Учет родительской платы added at d21b4cc635
Reference in New Issue
Block a user