В конфигурации «Управление производственным предприятием 1.3» (УПП) задача получения данных об отработанном времени является классической, но скрывает в себе несколько подводных камней. В зависимости от настроек учетной политики и используемых документов, данные могут храниться в разных регистрах. Разберем подробно, как правильно извлечь информацию о часах с помощью встроенного языка запросов 1С.
Основным источником данных для учета фактически отработанного времени в УПП является регистр накопления РабочееВремяРаботниковОрганизаций. Именно в него попадают записи при проведении документа «Табель учета рабочего времени» или при расчете зарплаты, если табель не используется. Рассмотрим пример запроса, предложенный в обсуждении, и доработаем его до профессионального уровня.
Проанализируем ситуацию: если мы просто выберем все записи из физической таблицы регистра, мы рискуем получить некорректные данные из-за отсутствия фильтрации. Давайте составим правильный запрос, используя виртуальную таблицу Обороты, что является стандартом разработки на платформе 1С.
ВЫБРАТЬ
РабочееВремяОбороты.Сотрудник КАК Сотрудник,
РабочееВремяОбороты.ЧасовОборот КАК ОтработаноЧасов,
РабочееВремяОбороты.ВидИспользованияРабочегоВремени КАК ВидВремени
ИЗ
РегистрНакопления.РабочееВремяРаботниковОрганизаций.Обороты(
&НачалоПериода,
&КонецПериода,
День,
Сотрудник = &Сотрудник
И Организация = &Организация
) КАК РабочееВремяОбороты
ГДЕ
РабочееВремяОбороты.ВидИспользованияРабочегоВремени = ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.Явка)
Разберем по шагам, почему этот вариант лучше:
.Обороты вместо физической таблицы позволяет платформе быстрее обрабатывать данные, так как она обращается к уже рассчитанным итогам.ВидИспользованияРабочегоВремени, система может просуммировать их, и вы получите, например, 10 часов вместо 8 (8 часов явки + 2 часа ночных, которые входят в те же 8 часов).Выясним причину, по которой иногда данных в регистре накопления может не быть или они могут быть неполными. В УПП 1.3 фактический расчет зарплаты и учет вытеснений (например, когда больничный «перекрывает» рабочее время) происходит в регистре расчета ОсновныеНачисленияОрганизаций. Если вам нужно узнать, сколько часов было оплачено сотруднику по результатам расчета, лучше обращаться к этому регистру.
Посмотрим на пример логики запроса к регистру расчета:
ВЫБРАТЬ
ОсновныеНачисления.Сотрудник,
ОсновныеНачисления.ОтработаноЧасов КАК Часы
ИЗ
РегистрРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисления
ГДЕ
ОсновныеНачисления.ПериодРегистрации = &Период
И ОсновныеНачисления.Сотрудник = &Сотрудник
И ОсновныеНачисления.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме = ЛОЖЬ
Важный нюанс: В регистре расчета данные обычно хранятся сводно за месяц (период регистрации). Если вам нужны данные строго за конкретный день, и в системе не ведется подневный табель, то получить их из регистра расчета будет затруднительно. В этом случае система опирается на график работы.
Рассмотрим подробнее альтернативный вариант. В УПП 1.3 есть мощные встроенные механизмы для работы с рабочим временем. Вместо написания сложных запросов вручную, можно воспользоваться функциями из типовых модулей. Например, функциями программного интерфейса для получения данных графиков.
Проанализируем использование функции ПроцедурыУправленияПерсоналом.ПолучитьДанныеГрафика. Этот метод позволяет получить рабочее время с учетом индивидуального графика сотрудника и всех зарегистрированных отклонений (отпуска, командировки), даже если табель еще не введен.
// Пример логики вызова (схематично)
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ДатаНачала", НачалоДня(ВыбДата));
СтруктураПараметров.Вставить("ДатаОкончания", КонецДня(ВыбДата));
// Вызов типовой функции для получения таблицы рабочего времени
ТаблицаВремени = ПроцедурыУправленияПерсоналом.ПолучитьДанныеГрафика(Сотрудник, СтруктураПараметров);
При разработке отчетов или обработок по учету времени в УПП 1.3 всегда обращайте внимание на следующие аспекты:
РегистрНакопления.РабочееВремяРаботниковОрганизаций будет содержать наиболее полные данные.Сотрудник.Физлицо.Подводя итог, можно сказать: для оперативного получения данных за день наиболее правильным и быстрым способом является запрос к виртуальной таблице оборотов регистра накопления «Рабочее время работников организаций» с обязательной фильтрацией по организации и виду использования рабочего времени (код «Я» или «Явка»).