Top.Mail.Ru
Центр помощи / Для администратора / 4. Интеграции / Синхронизация пользователей / 1С: Синхронизация статусов расписания – как устроен обработчик

1С: Синхронизация статусов расписания – как устроен обработчик

UnSpot Schedule Status Adapter — внешняя обработка 1С, которая переносит рабочие статусы сотрудников из «ЗУП» в расписание UnSpot: больничные, отпуска, командировки, отсутствия и удалённую работу. Статья описывает устройство обмена: кто кого вызывает, что именно уходит в UnSpot и что остаётся в 1С, где хранятся токен и кэш, что попадает в журнал и какие права нужны обработке. Её можно передать службе информационной безопасности и администраторам 1С при согласовании интеграции. Порядок подключения — в статье 1С: Синхронизация статусов расписания – настройка интеграции, разбор скрипта выбора данных — в статье 1С: Синхронизация статусов расписания – как устроен скрипт. Обработка дополняет синхронизацию пользователей из 1С: та управляет карточками сотрудников и оргструктурой, эта — статусами в расписании.

Кратко

  • Обмен односторонний и по инициативе 1С: на каждый статус обработка отправляет один запрос POST в External API UnSpot «Импорт расписания сотрудника».
  • В UnSpot уходят только email сотрудника, дата и статус. Имена, должности, сведения о документах остаются в 1С.
  • Отправленные статусы запоминаются в кэше в базе 1С, поэтому повторно уходит только изменившееся.
  • Настройки, токен и кэш хранятся в справочнике «Файлы», ход запуска — в журнале регистрации.
  • Незнакомое слово — загляните в раздел Термины статьи-обзора.

Важно для службы безопасности

  • Токен хранится в базе 1С без шифрования и попадает в резервные копии.
  • Безопасный режим выключен. Скрипт из настроек выполняется с правами сеанса синхронизации.
  • Сертификат сервера UnSpot обработка не проверяет — трафик шифруется, но подлинность сервера не подтверждается.
  • Журнал регистрации накапливает рабочие email и сведения об отсутствиях сотрудников.
  • Сброс статуса на рабочий день снимает личные брони столов — см. Правила и ограничения.

Как работает обработка

Обработка состоит из двух частей. Движок синхронизации — код самой обработки (модуль объекта): он отправляет статусы в UnSpot по HTTPS, ведёт кэш уже отправленных статусов и пишет подробный журнал. Скрипт выбора данных — код на встроенном языке 1С, который собирает из информационной базы список сотрудников и их статусы по датам. Для конфигурации «ЗУП 3.1» скрипт встроен в обработку и не требует настройки; для нестандартных конфигураций его можно заменить собственным — см. 1С: Собственный скрипт – настройка интеграции.

При каждом запуске обработка выбирает действующих сотрудников с заполненным email; определяет статус каждого сотрудника на каждый день в периоде от −45 до +45 дней от текущей даты (по данным учёта рабочего времени ЗУП: графики, табели, документы отклонений); сравнивает результат с кэшем и отправляет в UnSpot только новые и изменившиеся статусы — по одному запросу на статус, с паузой в 1 секунду. Статусы передаются через External API «Импорт расписания сотрудника», сотрудники сопоставляются по email.

Дни, когда сотрудник работает в обычном режиме, тоже синхронизируются: для них обработка отправляет сброс статуса. Так статус «Отпуск» исчезает из расписания, когда в 1С отпуск закончился или был отменён.

Проверочный запуск устроен так же, но период сокращается до текущего дня, и отправляется один статус (встроенный скрипт выбирает в проверке одну дату; при нескольких датах отправляется по одному статусу на каждую дату). Он запускается кнопкой «Сохранить и проверить» на форме настроек и описан в статье о настройке.

Направление и инициатор обмена

Обмен односторонний: инициатор всегда 1С. Обработка сама открывает исходящее соединение к UnSpot и отправляет запросы; UnSpot к информационной базе не обращается.

ВопросКак в этой интеграции
Кто инициирует обменВсегда 1С. Обработка открывает исходящее соединение к адресу из поля «UnSpot API URL» и отправляет запросы методом POST
Входящие подключенияНет. Обработка не публикует ни веб-сервисов, ни сервисов, принимающих запросы; UnSpot не вызывает 1С ни по расписанию, ни по событию. Публиковать информационную базу в интернет для этой интеграции не нужно
Обратный потокНет. Ответ сервера записывается в журнал регистрации 1С и при проверочном запуске на экран выводится только сообщение из ответа сервера. В данные информационной базы ответ не попадает
Что запускает обменРегламентное задание 1С либо администратор вручную — кнопкой на форме обработки или командой на странице «Дополнительные отчеты и обработки». Полный запуск выполняется фоновым заданием, проверочный («Сохранить и проверить») — в серверном вызове формы. В клиент-серверной базе оба идут на сервере 1С, в файловой — на компьютере, где запущена 1С
Сколько адресатовОдин. Единственный получатель данных — адрес, введённый в настройках обработки. Никаких других доменов, телеметрии и внешних служб обработка не вызывает

Протокол, адрес и шифрование

ПараметрЗначение
ПротоколHTTPS. Метод — POST, тело — JSON в UTF-8, без метки порядка байтов
Порт443 для адреса с https:// и 80 — для адреса с незащищённой схемой (без буквы «s»). Порт определяется схемой адреса и в настройках не задаётся; нестандартный порт в строке адреса не поддерживается
АдресРовно то значение, которое администратор ввёл в поле «UnSpot API URL», — обычно https://<домен>/api/external/v1/user-schedule. Обработка разбирает адрес на узел и путь и обращается только по нему
ШифрованиеЗащищённое соединение включается, когда адрес начинается с https://. Адрес с незащищённой схемой (без буквы «s») обработка примет: соединение откроется на порт 80 без шифрования, и токен уйдёт в открытом виде. Карточка в UnSpot всегда выдаёт https-адрес — вводите его без изменений. Адрес без протокола отклоняется с ошибкой «Неверный формат URL»
Проверка сертификатаОбработка создаёт защищённое соединение без списка сертификатов удостоверяющих центров, а в таком режиме платформа 1С, по её документации, подлинность сертификата сервера не проверяет: трафик шифруется, но подмена сервера не будет обнаружена. Настройки для проверки сертификата в обработке нет
Таймаут60 секунд на запрос
ПроксиВ обработке не настраивается — параметр соединения оставлен пустым

Аутентификация одна: заголовок Authorization со схемой Bearer и токеном External API. Взаимный TLS, Basic-аутентификация, ключ в строке запроса и получение токена отдельным запросом в этой интеграции не используются.

Что передаётся в UnSpot

Обработка отправляет по одному запросу на каждый статус каждого сотрудника на каждую дату. Обработка задаёт запросу два заголовка — Authorization: Bearer <токен> и Content-Type: application/json (служебные заголовки вроде Host и Content-Length добавляет платформа) — и тело из пяти полей. Других полей в теле нет.

Поля запроса

ПолеЧто содержитОткуда берётся в 1СКогда заполняется
userEmailРабочий адрес электронной почты сотрудника в нижнем регистре. Единственные персональные данные, которые уходят в UnSpotРеквизит EMailПредставление сотрудника организацииВсегда
dateДата, на которую ставится статус, в формате гггг-ММ-ддДата из данных учёта рабочего времени ЗУПВсегда
statusTypeТип статуса: NOT_WORKING или REMOTE_WORKОпределяется статусом: фиксированная таблица внутри обработкиПусто (null) для рабочего дня — это и есть сброс статуса
statusNameНазвание статуса: «Больничный», «Отпуск», «Командировка», «Отсутствие», «Удаленная работа»Фиксированный список внутри обработки, из 1С не берётсяПусто (null) для рабочего дня
statusCodeКороткий код статуса: БЛ, ОТ, К, НН, ДФиксированный список внутри обработки, из 1С не берётсяПусто (null) для рабочего дня

Итого в UnSpot уходит связка email — дата — статус. Ни идентификаторы 1С, ни имя сотрудника, ни название кадрового документа в запрос не попадают.

Какие статусы передаются

Статус определяется по буквенному коду вида учёта рабочего времени ЗУП (если у вида нет собственного кода — по коду его основного времени). Коды передаются в UnSpot так:

Ситуация в 1СБуквенные кодыСтатус в UnSpotКод в расписании
Рабочий деньВиды времени с признаком «рабочее время»Сброс статуса (день без отметки)—
БольничныйБ, ТНе работаю · «Больничный»БЛ
ОтпускО, ОТ, ОД, ОУ, ДБ, Р, УД, У, ОЗ, ДО, ОЖНе работаю · «Отпуск»ОТ
КомандировкаК, ПК, ПМРаботаю удалённо · «Командировка»К
ОтсутствиеНН, НБ, НО, ПВ, П, Г, ЗБ, НЗ, ПРНе работаю · «Отсутствие»НН
Удалённая работаД, а также период дистанционной работы по договору, попавший на рабочий деньРаботаю удалённо · «Удаленная работа»Д

Пример тела запроса для отпуска:

POST /api/external/v1/user-schedule
Authorization: Bearer <токен>
Content-Type: application/json

{
  "userEmail": "employee@company.ru",
  "date": "2026-07-28",
  "statusType": "NOT_WORKING",
  "statusName": "Отпуск",
  "statusCode": "ОТ"
}
HTTPS

Цвет плашки статуса в расписании назначает UnSpot автоматически; источником таких изменений UnSpot записывает External API. Подробное описание эндпоинта — в справочнике External API: обновление статуса в расписании.

Что читается в 1С, но не передаётся

Встроенный запрос к ЗУП забирает из информационной базы больше реквизитов, чем нужно для запроса. Они используются внутри 1С и в UnSpot не уходят:

  • фамилия и имя — складываются в имя сотрудника и подставляются только в сообщения журнала регистрации 1С;
  • подразделение, должность, табельный номер — читаются запросом, но обработкой не используются и никуда не отправляются;
  • вид занятости и количество ставок — нужны, чтобы у совместителя выбрать одно место работы; дата приёма тоже читается, но на выбор не влияет;
  • идентификатор физического лица — служебный ключ, по которому статусы связываются с сотрудником внутри обработки и кэша.

Что не передаётся

  • Пароли и учётные данные сотрудников — обработка их не читает и не отправляет.
  • ФИО, должность, подразделение, табельный номер — остаются в 1С.
  • Телефон, фотография, адрес, дата рождения, паспортные и иные персональные данные — встроенный скрипт их не запрашивает: их нет ни в одном его запросе к информационной базе.
  • Основание отсутствия — номер, вид и содержание кадрового документа, номер листка нетрудоспособности, сведения о состоянии здоровья. В UnSpot уходит только обобщённый статус вида «Больничный» без подробностей.
  • Данные из UnSpot в 1С — брони, встречи, расписание и события обратно не загружаются: ответ сервера в информационную базу не записывается.
  • Пользователи, подразделения и права — обработка их не создаёт и не изменяет; этим занимается отдельная синхронизация пользователей.
  • Данные другим адресатам — единственный получатель запросов задан в поле «UnSpot API URL».

Что учитывать. Перечень выше относится к встроенному скрипту для «ЗУП 3.1». Собственный скрипт для нестандартной конфигурации читает из базы то, что в нём написано, но в UnSpot из него всё равно уходят только пять полей запроса.

Где хранятся токен и настройки

Все настройки обработки — адрес API, токен доступа, выбранная конфигурация, пользовательский скрипт выбора данных и служебный номер версии кэша — хранятся внутри информационной базы 1С. Это служебный файл с именем UnSpotScheduleStatusSettings в справочнике «Файлы», в папке UnSpotScheduleStatus, с типом хранения «в информационной базе». Файлов на диске сервера, записей в реестре и переменных окружения обработка не создаёт.

Значение упаковано в хранилище значения со сжатием, но не зашифровано: сжатие не является средством защиты. Что из этого следует для доступа к токену:

  • токен доступен любому пользователю 1С, у которого есть право на чтение справочника «Файлы» и на открытие формы настроек обработки;
  • токен попадает в резервные копии информационной базы и в её выгрузки (dt) в том же открытом виде;
  • в форме настроек поле «Токен доступа» — обычное текстовое: значение видно на экране целиком и не маскируется;
  • автором служебных файлов записывается пользователь 1С, от имени которого выполнялось сохранение настроек или синхронизация.

Что с этим делать: ограничьте штатными средствами 1С круг пользователей, которым доступны дополнительные обработки и справочник «Файлы», и защитите резервные копии базы. Токену задавайте срок действия при подключении карточки в UnSpot и обновляйте его в настройках обработки после перевыпуска. Сама обработка использует токен только для одного эндпоинта — импорта расписания сотрудника.

В журнал регистрации 1С токен не пишется: логируется тело запроса, а заголовки в журнал не попадают.

Что кэшируется и где

Каждый успешно отправленный статус (ответ 200) запоминается в кэше. Кэш — тоже служебные файлы в справочнике «Файлы», папка UnSpotScheduleStatus, хранение — внутри информационной базы. Файлов два вида: один индексный, со списком актуальных файлов кэша, и по одному файлу на каждую дату периода синхронизации.

Вопрос о кэшеОтвет
Что лежит внутриСоответствие «идентификатор физического лица → числовой код статуса». Ни email, ни ФИО, ни название статуса, ни данные UnSpot в кэш не попадают
Где хранитсяВ информационной базе 1С, в справочнике «Файлы» (папка UnSpotScheduleStatus). Имя файла даты — UnSpotScheduleStatusCacheFiles<дата>v<версия>. Внешних файлов и временных каталогов на диске обработка не создаёт
Зачем нуженПри следующем запуске статус отправляется повторно только если значение в 1С изменилось, — поэтому регулярные запуски проходят быстро и не нагружают API
Когда записываетсяПосле обработки каждой даты: если на эту дату были успешные отправки, файл даты перезаписывается. Если запуск прервётся посреди даты, статусы этой даты уйдут повторно при следующем запуске
Срок жизниВременем не ограничен. Файлы дат, вышедших за пределы периода ±45 дней, удаляются на очередном запуске
Как сброситьЛюбым сохранением настроек: номер версии кэша увеличивается, и следующий запуск проходит полностью, а файлы прошлой версии удаляются. Файлы кэша можно и удалить вручную из справочника «Файлы» — обработка создаст их заново
Проверочный запускКэш не читает и не изменяет

Что пишется в журнал регистрации

Обработка ведёт подробный журнал в штатном журнале регистрации 1С — «Администрирование → Обслуживание → Журнал регистрации». Источник записей — UnSpotScheduleStatus#<дата>, где дата — день первого сохранения настроек; уровень — «Примечание». В журнал попадают:

  • запуск и завершение синхронизации, режим запуска (проверочный или полный), а в полном запуске — номер версии кэша;
  • период выборки и количество выбранных сотрудников с email — эти записи делает встроенный скрипт; собственный скрипт пишет только то, что в нём запрограммировано;
  • полное тело каждого отправленного запроса в формате JSON — то есть рабочий email сотрудника, дата и статус;
  • код состояния и тело ответа сервера UnSpot на каждый запрос;
  • пропуски с указанием имени сотрудника и даты: статус найден в кэше (пишет движок); у сотрудника больше одного статуса на дату и вид учёта времени без соответствия статусу UnSpot (пишет встроенный скрипт);
  • итог запуска — сколько статусов отправлено успешно.

Токен и заголовки запроса в журнал не пишутся. При этом журнал накапливает рабочие email и сведения об отсутствиях сотрудников — учитывайте это, когда назначаете права на просмотр журнала и выбираете срок его хранения.

Правила и ограничения

  • Сопоставление по email. Статус получает пользователь UnSpot с тем же email, что у сотрудника в 1С (email передаётся в нижнем регистре). Архивные и деактивированные пользователи статусы не получают — сервер отвечает «User not found»
  • Сотрудник есть в 1С, но не в UnSpot. Сервер возвращает ошибку 400, обработка записывает её в журнал и продолжает работу. Ошибка не кэшируется — когда пользователь появится в UnSpot, его статусы передадутся при следующем запуске автоматически
  • Один статус на день. В UnSpot у сотрудника один статус на дату. Если в 1С на день приходится несколько разных отметок (например, полдня отпуска и полдня работы), обработка пропускает этот день для сотрудника и фиксирует это в журнале
  • Один сотрудник на физлицо. Если у физического лица несколько мест работы, берётся одно: приоритет у вида занятости (основное место работы, затем внутреннее совместительство, совместительство, подработка), при равенстве — у большего количества ставок; если и ставки равны, остаётся позиция, встретившаяся в выборке первой
  • Снятие броней столов. Когда в UnSpot приходит статус графика на дату (из 1С или из любого другого источника), система освобождает рабочее место сотрудника на этот день: личные брони столов, начинающиеся в эту дату, удаляются, а уже начавшаяся бронь останавливается. Завершённые брони и брони, оформленные на гостя, не затрагиваются. Брони переговорных и парковочных мест не затрагиваются вообще. То же происходит при передаче рабочего дня (сброса статуса): по текущему коду сервера личные брони столов, начинающиеся в эту дату, освобождаются независимо от того, был ли на эту дату статус
  • Неизвестные виды времени. Вид учёта времени без соответствия в таблице выше и без признака «рабочее время» пропускается; для видов с буквенным кодом это фиксируется в журнале регистрации
  • Ограничение частоты. Сервер принимает не более 1 запроса в секунду на токен — обработка соблюдает лимит паузой в секунду между запросами. Паузу делает процедура ВызватьПаузу, которой в самой обработке нет: её должна предоставлять конфигурация. Без неё модуль обработки не скомпилируется и обработка не запустится вовсе
  • Только статусы. Обработка не создаёт и не изменяет пользователей, подразделения или права — за это отвечает синхронизация пользователей. Настраивайте её первой
  • Ошибка ответа сервера. Запрос с ответом не 200 не переотправляется: обработка пишет код и тело ответа в журнал и переходит к следующему статусу. В кэш попадают только успешные отправки, поэтому неудавшийся статус уйдёт заново при следующем запуске
  • Ошибка соединения. Если сервер UnSpot недоступен или не ответил за 60 секунд, запуск прерывается целиком. Что уже записано в кэш, повторно не отправляется; остальное уйдёт при следующем запуске
  • Один источник статусов. В периоде ±45 дней 1С считается источником статусов: статус отправляется при первой отправке за дату и каждый раз, когда значение в 1С изменилось, и заменяет статус в расписании UnSpot, в том числе поставленный вручную. Если значение в 1С не менялось, обработка его повторно не отправляет — ручная правка расписания сохранится до сброса кэша или изменения в 1С
  • Параллельный запуск. Пока фоновое задание обработки активно, второй запуск не стартует: «Синхронизация уже выполняется, подождите завершения»

Что делать с каждой из ошибок — в разделе «Возможные ошибки» статьи 1С: Синхронизация статусов расписания – настройка интеграции.

Требования к сети и правам в 1С

Поскольку инициатор обмена всегда 1С, входящих правил на межсетевом экране интеграция не требует.

Что нужноПодробности
Исходящее правилоОдно: с сервера 1С (точнее, с машины, где выполняется фоновое задание) к домену вашего рабочего пространства UnSpot, TCP/443. Рабочим станциям доступ не нужен — кроме файловой базы: там и полный, и проверочный запуск идут с компьютера, где запущена 1С, и исходящий доступ нужен ему
Входящие правилаНе нужны. UnSpot не устанавливает соединений с контуром клиента, и публиковать информационную базу наружу не требуется
ПроксиВ обработке не настраивается. Если исходящий трафик идёт через прокси, вопрос решается настройками платформы 1С и сети, а не обработкой
Права на установкуРегистрация внешней обработки в разделе «Дополнительные отчеты и обработки» — полные права либо право на работу с дополнительными обработками
Безопасный режимОбработка регистрируется с отключённым безопасным режимом: платформа не ограничивает ей доступ к внешним ресурсам. Без этого обработка не смогла бы обратиться к сети
Права на данныеВ информационной базе обработке нужны: чтение кадровых данных и данных учёта рабочего времени ЗУП; чтение регистра сведений «Дистанционная работа сотрудников»; чтение, запись и удаление элементов справочника «Файлы» (удаление нужно для очистки устаревшего кэша); поиск и создание папки в справочнике «Папки файлов»; чтение параметра сеанса «Текущий пользователь» (автор служебных файлов); запуск фоновых заданий
Учётная записьОбработка работает от имени пользователя 1С, который запустил команду или под которым выполняется регламентное задание. Отдельная учётная запись операционной системы и отдельная служба не создаются

Принцип минимальных привилегий здесь упирается в одну особенность. Поле «Код выбора данных для синхронизации» в режиме «Нестандартная конфигурация» хранит произвольный скрипт на встроенном языке 1С, и обработка выполняет его при каждом запуске без безопасного режима. Это значит, что тот, кто может изменить настройки обработки, может выполнить в информационной базе произвольный код с правами пользователя, под которым идёт синхронизация. Право на изменение настроек этой обработки приравнивайте к праву на изменение кода, а для регламентного задания заведите отдельного пользователя 1С с перечисленными выше правами вместо администратора с полными правами.

Связанные статьи

Оставьте заявку, и мы свяжемся с вами в течение 30 минут.

Loading

Как улучшить работу офиса?

Оставьте контакт - покажем на демо как уйти от таблиц, двойных бронирований и путаницы с рабочими местами.

Loading