При интеграции 1С со сторонними системами учета рабочего времени часто возникает вопрос выбора подходящего объекта метаданных. Мы рассмотрим, как правильно хранить данные о входах и выходах сотрудников, чтобы обеспечить корректную отчетность без избыточных затрат ресурсов платформы.
Основная дилемма, с которой сталкиваются разработчики — стоит ли использовать РегистрСведений без регистратора или полноценную схему с документами. Давайте разберем оба подхода.
Вариант 1: Использование периодического регистра сведений
Этот подход подходит для хранения «сырых» данных о событиях (вход/выход). Если вам необходимо фиксировать каждую отметку времени, настройте регистр с периодичностью «в пределах секунды».
Сотрудник (тип СправочникСсылка.Сотрудники), Событие (можно использовать перечисление: Вход/Выход).ДатаВремя (тип Дата).Преимущество этого метода в отсутствии необходимости создавать документы. Однако, для получения итогового времени пребывания, вам придется выполнять сложные запросы с использованием соединения таблицы с самой собой, чтобы вычислить разницу между парами «вход» и «выход».
Вариант 2: Использование документа-регистратора
Это классический и самый надежный способ. Мы рекомендуем создать документ, например ЖурналПосещений. В его табличную часть при импорте данных вы будете записывать все события за день или смену.
Почему это лучше:
ДлительностьВМинутах) в РегистрНакопления или РегистрСведений.Для того чтобы данные поступали из стороннего ПО автоматически, рассмотрим следующие механизмы:
Используйте РегламентныеЗадания для запуска процесса обмена по расписанию (например, раз в сутки ночью). Это позволит не нагружать систему в рабочее время.
В зависимости от возможностей стороннего ПО, выберите оптимальный метод передачи данных:
HTTP-сервис на стороне 1С. Это самый современный и надежный способ — система будет получать данные «по факту» их появления.ЧтениеJSON или ЧтениеXML.Если вы решили использовать РегистрСведений и хранить данные за день, вот как можно упростить расчет:
// Пример логики в модуле менеджера или обработке
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Регистр.Сотрудник КАК Сотрудник,
| Регистр.ВремяВхода КАК Вход,
| Регистр.ВремяВыхода КАК Выход
|ИЗ
| РегистрСведений.Посещаемость КАК Регистр";
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Разница = Результат.Выход - Результат.Вход;
// Разница выражается в секундах, переводим в часы или минуты
ИтогМинут = Разница / 60;
КонецЦикла;
Чтобы система не «тормозила» на больших объемах данных (например, при расчете за месяц по 1000 сотрудников):
Сотрудник на первое место в списке измерений.В заключение, помните, что создание документа для регистрации событий — это не «излишество», а профессиональный подход, который сэкономит вам массу времени при поддержке системы в будущем.