При разработке печатных форм, обработок и т.п. часто возникает задача получить отработанное время сотрудника за определённый период. Когда у меня возникла подобная необходимость, я не смог найти в общих модулях учета времени экспортную функцию, к которой можно было бы обратиться и получить данные по времени в простом виде (возможно, плохо искал). Основной модуль учета времени в программе называется "УчетРабочегоВремениРасширенный". Изучение текста запросов в модуле вызывает, скажем так, желание "уйти в отпуск". В интернете чего то простого я также не нашёл.
При получении отработанного времени следует учитывать, доступны ли на момент получения данные документа "Табель". Брать ли информацию из движений документа "Табель" напрямую или нужно получить данные по времени с учетом всех "отсутствий" ("состояний") сотрудника и его графиков.
Функции модуля возвращают данные в структуру, пример:
СтрЧасыОтр = МодульИзмененияКонфигурации.изм_ДанныеТабельногоУчетаРабочегоВремениСотрудников(Сотрудник,ДатаНачала,ДатаОкончания,Организация);
ЧасовНачисления = СтрЧасыОтр.ОтработаноЧасов;
Расширение содержит функции:
1. изм_ПолучитьОтработаноЧасовСотрудникаЗаМесяц(Сотрудник,ПериодМесяц,Организация)
возвращает структуру с ключами "ОтработаноЧасов","НормаЧасов"
вид времени - РабочееВремя, по данным отсутствий
2. изм_ПолучитьОтработаноЧасовСотрудникаЗаПериод(Сотрудник,ДатаНачала,ДатаОкончания,Организация)
возвращает структуру с ключами"ОтработаноЧасов","НормаЧасов" , по данным отсутствий
вид времени - РабочееВремя
3. изм_ДанныеТабельногоУчетаРабочегоВремениСотрудников(Сотрудник,ДатаНачала,ДатаОкончания,Организация)
возвращает структуру с ключами"ОтработаноЧасов","ОтработаноДней"
вид времени - Явка, НочныеЧасы, по данным табеля
4. изм_ДанныеТабельногоУчетаРабочегоВремениСотрудниковСверхурочно(Сотрудник,ДатаНачала,ДатаОкончания,Организация)
возвращает структуру с ключами"ОтработаноЧасов","ОтработаноДней"
вид времени - Сверхурочные, СверхурочныеБезПовышеннойОплаты, по данным табеля
5. изм_ДанныеТабельногоУчетаРабочегоВремениСотрудниковПоВидамВремени(Сотрудник,ДатаНачала,ДатаОкончания,Организация)
возвращает строку вида "ОТ 18; Б 5; " - перечисление всех отсутствий, по данным табеля
вид времени - все кроме Явка, НочныеЧасы, ВыходныеДни
6. изм_НормаЧасовПоГрафикуСотрудника(Сотрудник, ПериодМесяц)
возвращает структуру с ключами"НормаДней","НормаЧасов" , по данным графиков сотрудника
Основная функция по данным табеля:
функция изм_ДанныеТабельногоУчетаРабочегоВремениСотрудников(Сотрудник,ДатаНачала,ДатаОкончания,Организация) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СУММА(ДанныеТабельногоУчетаРабочегоВремениСотрудников.Дни) КАК Дни,
| СУММА(ДанныеТабельногоУчетаРабочегоВремениСотрудников.Часы) КАК Часы
|ИЗ
| РегистрНакопления.ДанныеТабельногоУчетаРабочегоВремениСотрудников КАК ДанныеТабельногоУчетаРабочегоВремениСотрудников
|ГДЕ
| ДанныеТабельногоУчетаРабочегоВремениСотрудников.Период МЕЖДУ &НачалоПериода И &КонецПериода
| И ДанныеТабельногоУчетаРабочегоВремениСотрудников.Сотрудник = &Сотрудник
| И ДанныеТабельногоУчетаРабочегоВремениСотрудников.ВидУчетаВремени В(&МассивВидов)
|
|СГРУППИРОВАТЬ ПО
| ДанныеТабельногоУчетаРабочегоВремениСотрудников.Сотрудник";
Запрос.Параметры.Вставить("Сотрудник",Сотрудник);
Запрос.Параметры.Вставить("НачалоПериода" ,Началодня(ДатаНачала));
Запрос.Параметры.Вставить("КонецПериода" ,КонецДня(ДатаОкончания));
МассивВидов = Новый Массив;
МассивВидов.Добавить(Справочники.ВидыИспользованияРабочегоВремени.Явка);
МассивВидов.Добавить(Справочники.ВидыИспользованияРабочегоВремени.РаботаНочныеЧасы);
Запрос.Параметры.Вставить("МассивВидов",МассивВидов);
ДанныеТабеля = Запрос.Выполнить().Выгрузить();
СтрВозврат = Новый Структура;
СтрВозврат.Вставить("ОтработаноЧасов",0);
СтрВозврат.Вставить("ОтработаноДней",0);
Если ДанныеТабеля.Количество() > 0 Тогда
Если ЗначениеЗаполнено(ДанныеТабеля[0].Часы) Тогда
СтрВозврат.Вставить("ОтработаноЧасов",ДанныеТабеля[0].Часы);
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеТабеля[0].Дни) Тогда
СтрВозврат.Вставить("ОтработаноДней",ДанныеТабеля[0].Дни);
КонецЕсли;
КонецЕсли;
Возврат СтрВозврат;
КонецФункции
Подключаем расширение: в меню Администрирование, "Печатные формы, отчеты и обработки", Расширения нажимаем "Добавить из файла", убираем галку "Безопасный режим".
Проверено на следующих конфигурациях и релизах:
- Зарплата и управление персоналом, редакция 3.1, релизы 3.1.34.40
Вступайте в нашу телеграмм-группу Инфостарт