Как в УПП 1.3 вычислить число отработанных часов по сотруднику за определенный день

Программист 1С v8.3 (Обычные формы) Управленческий учет IT и автоматизация бизнеса
← На главную

В конфигурации «Управление производственным предприятием 1.3» (УПП) задача получения данных об отработанном времени является классической, но скрывает в себе несколько подводных камней. В зависимости от настроек учетной политики и используемых документов, данные могут храниться в разных регистрах. Разберем подробно, как правильно извлечь информацию о часах с помощью встроенного языка запросов 1С.

Метод 1. Использование регистра накопления «Рабочее время работников организаций»

Основным источником данных для учета фактически отработанного времени в УПП является регистр накопления РабочееВремяРаботниковОрганизаций. Именно в него попадают записи при проведении документа «Табель учета рабочего времени» или при расчете зарплаты, если табель не используется. Рассмотрим пример запроса, предложенный в обсуждении, и доработаем его до профессионального уровня.

Проанализируем ситуацию: если мы просто выберем все записи из физической таблицы регистра, мы рискуем получить некорректные данные из-за отсутствия фильтрации. Давайте составим правильный запрос, используя виртуальную таблицу Обороты, что является стандартом разработки на платформе 1С.


ВЫБРАТЬ
    РабочееВремяОбороты.Сотрудник КАК Сотрудник,
    РабочееВремяОбороты.ЧасовОборот КАК ОтработаноЧасов,
    РабочееВремяОбороты.ВидИспользованияРабочегоВремени КАК ВидВремени
ИЗ
    РегистрНакопления.РабочееВремяРаботниковОрганизаций.Обороты(
        &НачалоПериода,
        &КонецПериода,
        День,
        Сотрудник = &Сотрудник
            И Организация = &Организация
    ) КАК РабочееВремяОбороты
ГДЕ
    РабочееВремяОбороты.ВидИспользованияРабочегоВремени = ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.Явка)

Разберем по шагам, почему этот вариант лучше:

  1. Виртуальная таблица Обороты: Использование таблицы .Обороты вместо физической таблицы позволяет платформе быстрее обрабатывать данные, так как она обращается к уже рассчитанным итогам.
  2. Фильтрация по Виду времени: Это критически важный момент. В регистре могут одновременно храниться записи по виду времени «Явка», «Ночные» и «Сверхурочные». Если не указать фильтр по ВидИспользованияРабочегоВремени, система может просуммировать их, и вы получите, например, 10 часов вместо 8 (8 часов явки + 2 часа ночных, которые входят в те же 8 часов).
  3. Параметры виртуальной таблицы: Передача условий (Сотрудник, Организация) непосредственно в параметры виртуальной таблицы (в скобках) значительно ускоряет выполнение запроса на больших базах.

Метод 2. Использование регистра расчета «Основные начисления организаций»

Выясним причину, по которой иногда данных в регистре накопления может не быть или они могут быть неполными. В УПП 1.3 фактический расчет зарплаты и учет вытеснений (например, когда больничный «перекрывает» рабочее время) происходит в регистре расчета ОсновныеНачисленияОрганизаций. Если вам нужно узнать, сколько часов было оплачено сотруднику по результатам расчета, лучше обращаться к этому регистру.

Посмотрим на пример логики запроса к регистру расчета:


ВЫБРАТЬ
    ОсновныеНачисления.Сотрудник,
    ОсновныеНачисления.ОтработаноЧасов КАК Часы
ИЗ
    РегистрРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисления
ГДЕ
    ОсновныеНачисления.ПериодРегистрации = &Период
    И ОсновныеНачисления.Сотрудник = &Сотрудник
    И ОсновныеНачисления.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме = ЛОЖЬ

Важный нюанс: В регистре расчета данные обычно хранятся сводно за месяц (период регистрации). Если вам нужны данные строго за конкретный день, и в системе не ведется подневный табель, то получить их из регистра расчета будет затруднительно. В этом случае система опирается на график работы.

Метод 3. Программный способ через типовые функции

Рассмотрим подробнее альтернативный вариант. В УПП 1.3 есть мощные встроенные механизмы для работы с рабочим временем. Вместо написания сложных запросов вручную, можно воспользоваться функциями из типовых модулей. Например, функциями программного интерфейса для получения данных графиков.

Проанализируем использование функции ПроцедурыУправленияПерсоналом.ПолучитьДанныеГрафика. Этот метод позволяет получить рабочее время с учетом индивидуального графика сотрудника и всех зарегистрированных отклонений (отпуска, командировки), даже если табель еще не введен.


// Пример логики вызова (схематично)
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ДатаНачала", НачалоДня(ВыбДата));
СтруктураПараметров.Вставить("ДатаОкончания", КонецДня(ВыбДата));

// Вызов типовой функции для получения таблицы рабочего времени
ТаблицаВремени = ПроцедурыУправленияПерсоналом.ПолучитьДанныеГрафика(Сотрудник, СтруктураПараметров);

Особенности учета, которые необходимо учитывать

При разработке отчетов или обработок по учету времени в УПП 1.3 всегда обращайте внимание на следующие аспекты:

  1. Метод ведения учета: В организации может применяться «Метод отклонений» (когда рабочее время — это график минус больничные/отпуска) или «Метод сплошной регистрации» (когда обязательно заполняется документ «Табель учета рабочего времени»). Если табель ведется, то РегистрНакопления.РабочееВремяРаботниковОрганизаций будет содержать наиболее полные данные.
  2. Внутреннее совместительство: Помните, что в УПП один и тот же человек (Физическое лицо) может быть принят как несколько «Сотрудников» (например, на основное место и по внутреннему совместительству). Если вам нужно общее время по человеку, делайте запрос в разрезе Сотрудник.Физлицо.
  3. Сводные табели: Некоторые организации вводят данные в табель не подневно, а сводно за период. В этом случае в регистре будет одна запись на конец месяца с общим количеством часов, и узнать время за конкретное число через запрос к регистру станет невозможно.

Подводя итог, можно сказать: для оперативного получения данных за день наиболее правильным и быстрым способом является запрос к виртуальной таблице оборотов регистра накопления «Рабочее время работников организаций» с обязательной фильтрацией по организации и виду использования рабочего времени (код «Я» или «Явка»).

← На главную