Логотип 1С:Предприятие

1С:Предприятие

Обучайте сотрудников и назначайте курсы прямо из 1С: кадры и подразделения приходят в LMS автоматически, задачи обучения возвращаются в 1С, а вход в личный кабинет — по подписанной ссылке без пароля.

Перейти в 1С:Предприятие

Руководство по подключению 1С к Brusnika.LMS

Инструкция рассчитана на самостоятельное подключение: без помощи нашей команды. Подключение состоит из двух частей. 1С-разработчик создаёт и публикует HTTP-сервис в 1С, а администратор LMS указывает его адрес и ключ в настройках. Для автосинхронизации дополнительно нужен администратор сервера LMS.

Ориентировочный порядок: сначала сервис в 1С и его проверка через curl, затем настройка в LMS, потом расписание и вход без пароля.


Что понадобится

  • Brusnika.LMS в режиме Standalone (отдельный портал).
  • Права администратора в LMS: раздел «Управление системой».
  • 1С-разработчик, который умеет добавлять расширения конфигурации и HTTP-сервисы.
  • Информационная база 1С, опубликованная на веб-сервере, с адресом, доступным из LMS по HTTPS.
  • Отдельный сервисный пользователь информационной базы 1С для обращений LMS.
  • Для автосинхронизации — доступ к серверу LMS (администратор сервера).

Один портал LMS может держать несколько независимых подключений — например, по одному на каждое юрлицо со своей базой 1С. Шаги 1–5 и 7 выполняются отдельно для каждой базы, а крон из шага 6 настраивается один раз на весь портал. Если у вас одна база, заведите одно подключение.

1

HTTP-сервис в 1С

Разработчик создаёт расширение с сервисом /hs/lms по контракту.

2

Публикация и проверка

Сервис публикуется на веб-сервере и проверяется командами curl.

3

Настройка в LMS

Администратор указывает адрес, путь и ключ, проверяет связь и запускает синхронизацию.

4

Автосинхронизация

Администратор сервера настраивает регулярный вызов синхронизации.

5

Вход без пароля

1С формирует подписанные ссылки, а сотрудники открывают LMS без ввода пароля.


Шаг 1. Создайте HTTP-сервис в 1С

Если баз несколько, сервис нужно поднять на каждой из них. Сервис делается расширением конфигурации, чтобы не менять типовую конфигурацию. Корневой URL сервиса — lms, поэтому в LMS он будет доступен по пути /hs/lms. Другой путь тоже можно использовать, его нужно будет указать в настройках LMS.

Сервис должен реализовать четыре метода. Все ответы — JSON в кодировке UTF-8. Каждый запрос LMS отправляет с заголовком X-API-Key.

МетодНазначение
GET /pingПроверка связи
GET /departmentsСписок подразделений
GET /employees?limit=&offset=Постраничный список сотрудников
POST /tasksСоздание, завершение и удаление задачи обучения

Сервис учитывает сотрудников (физических лиц), а не пользователей информационной базы 1С. Сотрудников отдавайте из кадровых данных вашей конфигурации.

GET /ping

Возвращает любой корректный JSON без поля error. Рекомендуем такой ответ:

{ "ok": true }

GET /departments

Дерево подразделений. Поле id — стабильный идентификатор (GUID) подразделения, parent — идентификатор родительского подразделения или пустая строка для корневого.

{
  "items": [
    { "id": "guid-подразделения", "name": "Производство", "parent": "guid-родителя-или-пусто" }
  ]
}

GET /employees

Постраничный список сотрудников. Параметры: limit (по умолчанию 100, максимум 500) и offset (по умолчанию 0). Если есть следующая страница, верните "has_more": true.

{
  "items": [
    {
      "id": "guid-физлица",
      "tabNumber": "00123",
      "lastName": "Иванов",
      "firstName": "Иван",
      "middleName": "Иванович",
      "email": "ivanov@company.ru",
      "position": "Менеджер",
      "departments": ["guid-подразделения"],
      "active": true
    }
  ],
  "has_more": false
}

Требования к полям:

  • id — GUID физического лица. Он не должен меняться со временем, по нему LMS сопоставляет сотрудников.
  • departments — список идентификаторов из ответа /departments.
  • active — true для работающих сотрудников и false для уволенных. Чтобы LMS деактивировала уволенного, верните его с active: false.
  • Поля «руководитель» в контракте нет.
  • За один проход LMS обрабатывает до 5000 сотрудников.

POST /tasks

Один метод для трёх действий: поле action принимает значения add, complete и delete.

Создание задачи:

{
  "action": "add",
  "employee_id": "guid-физлица",
  "title": "Пройти курс «Охрана труда»",
  "due_date": "2026-10-15",
  "description": "...",
  "url": "https://lms.company.ru/?programs=42"
}

В ответ на add верните идентификатор созданной задачи — LMS запоминает его:

{ "task_id": "1c-task-987" }

Завершение и удаление задачи:

{
  "action": "complete",
  "employee_id": "guid-физлица",
  "task_id": "1c-task-987"
}

Для удаления передайте "action": "delete" с теми же полями.

Ошибки

Если запрос нельзя выполнить, верните JSON с полем error и понятным текстом причины. LMS покажет администратору, что действие не удалось.


Шаг 2. Опубликуйте сервис

  1. Опубликуйте информационную базу на веб-сервере (Apache или IIS) стандартными средствами платформы 1С:Предприятие.
  2. В файле публикации default.vrd включите публикацию расширений по умолчанию: publishExtensionsByDefault="true".
  3. Обновите публикацию и убедитесь, что сервис отвечает по адресу вида:
https://<сервер>/<имя_публикации>/hs/lms/ping

Адрес должен быть доступен из сети, где работает LMS, по HTTPS. Если 1С находится за файрволом, разрешите доступ с адреса сервера LMS.


Шаг 3. Создайте сервисного пользователя и ключ

  1. Создайте в информационной базе 1С отдельного пользователя для интеграции. Это должен быть сервисный пользователь, а не сотрудник.
  2. Выдайте ему право использовать HTTP-сервис lms.
  3. Задайте ключ доступа, который сервис проверяет в заголовке X-API-Key. Этот ключ вы укажете в LMS как «Ключ API».

Храните ключ в закрытом месте и не публикуйте его в скриптах и репозиториях.


Шаг 4. Проверьте сервис командами curl

Прежде чем настраивать LMS, убедитесь, что сервис работает. Подставьте свой адрес и ключ:

curl -sS -H "X-API-Key: KEY" "https://<сервер>/<публикация>/hs/lms/ping"
curl -sS -H "X-API-Key: KEY" "https://<сервер>/<публикация>/hs/lms/departments"
curl -sS -H "X-API-Key: KEY" "https://<сервер>/<публикация>/hs/lms/employees?limit=10&offset=0"

Ожидаемый результат:

  • /ping возвращает корректный JSON без ошибки;
  • /departments возвращает список подразделений в поле items;
  • /employees возвращает первые 10 сотрудников в поле items с корректными id, ФИО и active.

Пока эти запросы не отвечают, переходить к настройке в LMS не стоит.


Шаг 5. Добавьте подключение в LMS

  1. Откройте Настройки → Управление системой → Интеграции → Интеграция с 1С и нажмите «Добавить подключение».
  2. Задайте код подключения (slug) и название компании. Код — только латиница, цифры, «-» и «_», начинается с буквы или цифры, например parnas. Он входит в ссылку входа без пароля и во внутреннюю адресацию, поэтому после создания его изменить нельзя.
  3. Заполните параметры подключения:
ПолеЧто указать
Адрес публикации 1САдрес информационной базы из публикации, например https://1c.company.ru/zup
Путь HTTP-сервисаПуть сервиса, по умолчанию /hs/lms
Ключ APIКлюч сервисного пользователя из шага 3
SSO-секретСекрет для подписи ссылок входа этой базы (см. шаг 7)
  1. Нажмите «Сохранить», затем «Проверить». Если связь есть, статус изменится на «Подключено».
  2. Нажмите «Синхронизировать». В результате появятся счётчики: создано, обновлено, деактивировано и пропущено из-за лимита мест.
  3. Откройте список пользователей LMS и убедитесь, что сотрудники и подразделения из 1С загрузились.
  4. Для каждой следующей компании повторите шаги 1–4 и этот шаг. Список подключений показывает все компании сразу со статусом настройки.

Ключ и SSO-секрет после сохранения показываются в скрытом виде. Чтобы изменить значение, введите новое.

Что общее на весь портал: пользователи и профили, одно дерево оргструктуры и лимит мест по тарифу — все компании делят один пул мест.

Что своё у каждого подключения: код, адрес, путь, ключ API, SSO-секрет, соответствие «сотрудник 1С ↔ пользователь LMS» и своя ветка в общем дереве оргструктуры, поэтому подразделения разных компаний не смешиваются.


Шаг 6. Включите автосинхронизацию

Кнопка «Синхронизировать» запускает обмен вручную для одного подключения. Чтобы кадры обновлялись сами, администратор сервера LMS настраивает регулярный вызов. Он настраивается один раз на весь портал, а не на каждую компанию: вызов синхронизирует все подключения сразу.

  1. Сгенерируйте секретный токен для планировщика:
openssl rand -hex 32
  1. Запишите его в файл include/onec.local.php на сервере LMS. Файл создаётся на основе шаблона include/onec.local.php.example:
<?php
return [
    'ONEC_CRON_TOKEN' => 'сгенерированный-токен',
];
  1. Добавьте в планировщик (crontab) вызов раз в час. Токен передаётся в заголовке X-OneC-Cron-Token:
0 * * * * curl -sS -X POST -H "X-OneC-Cron-Token: <токен>" "https://<хост-LMS>/api/onec-sync-cron"

Если токен неверный или не задан, LMS ответит отказом, и синхронизация не запустится. Токен не является ключом API 1С: это отдельный секрет, известный только серверу LMS и планировщику.


Шаг 7. Настройте вход без пароля

Вход без пароля работает в обратную сторону: ссылку формирует 1С, а LMS проверяет её подпись именно по секрету того подключения, которое указано в ссылке.

  1. Придумайте длинный случайный SSO-секрет и укажите его в настройках нужного подключения в поле «SSO-секрет». У каждого подключения секрет свой.
  2. Передайте то же значение разработчику соответствующей базы 1С. Оно должно совпадать с обеих сторон.
  3. На стороне 1С формируйте подпись по правилу:
payload = connection + "|" + employee_id + "|" + ts
sig = HMAC-SHA256(payload, ssoSecret)

Здесь connection — код подключения из шага 5, employee_id — GUID сотрудника из ответа /employees, ts — текущее время Unix в секундах, а sig — подпись в виде hex-строки.

  1. Соберите ссылку:
https://<хост-LMS>/?onec=Y&connection=parnas&employee_id=guid-физлица&ts=1780000000&sig=<hex-hmac>
  1. Разместите ссылку там, где сотрудник открывает обучение: в форме, на рабочем столе или в задаче.

Что важно учесть:

  • Код подключения обязателен и входит в подпись, поэтому подменить его на другую компанию, не сломав подпись, нельзя. При одной базе это просто единственный заведённый код.
  • Ссылка действует 1 час от времени ts. Формируйте её в момент, когда сотрудник её открывает, а не заранее.
  • Часы сервера 1С и сервера LMS должны быть синхронизированы.
  • Сотрудник должен быть уже загружен в LMS хотя бы одной синхронизацией именно этого подключения, иначе вход не пройдёт.

Шаг 8. Задачи обучения в 1С

Отдельной настройки для задач нет. Когда сотруднику, пришедшему из 1С, назначают курс в разделе «Расписания программ», LMS вызывает POST /tasks с действием add и запоминает возвращённый task_id. Если подключений несколько, LMS сама определяет нужную базу по сотруднику: метка подключения ставится при синхронизации, и запрос уходит в ту базу, откуда сотрудник пришёл.

Что учесть при реализации метода в 1С:

  • создайте в 1С задачу для сотрудника с указанным employee_id и верните её идентификатор в поле task_id;
  • сотрудник, который не приходил из 1С, в этом сценарии пропускается: назначение курса не прерывается;
  • действия complete и delete реализуйте в сервисе сразу, хотя LMS пока не вызывает их автоматически.

Проверка результата

  • Три команды curl из шага 4 возвращают корректные ответы (для каждой базы).
  • В настройках каждого подключения статус «Подключено», кнопка «Проверить» проходит.
  • После «Синхронизировать» счётчик «Создано» соответствует ожидаемому числу сотрудников.
  • Сотрудники и подразделения из 1С видны в LMS.
  • Уволенный сотрудник (active: false) после очередной синхронизации деактивирован.
  • Регулярный вызов по расписанию отрабатывает, «Последняя синхронизация» обновляется.
  • Ссылка входа, сформированная в 1С, открывает личный кабинет сотрудника.
  • При назначении курса в расписании программ в 1С появляется задача.

Частые проблемы

Что происходитВозможная причинаЧто делать
Кнопка «Проверить» выдаёт ошибкуНеверный адрес, путь или ключ; 1С недоступна из LMSПроверьте адрес публикации, путь /hs/lms и ключ. Выполните curl с сервера LMS
Ответ не в формате JSONПубликация не подхватила расширениеПроверьте publishExtensionsByDefault="true" и обновите публикацию
Список сотрудников пустойВ выборке нет сотрудников или у сервисного пользователя нет прав на данныеПроверьте запрос в сервисе и права пользователя
Сотрудники дублируютсяПоле id меняется между вызовамиОтдавайте стабильный GUID физического лица
Сотрудник не деактивируетсяСервис не возвращает его с active: falseВозвращайте уволенных сотрудников с признаком active: false
Часть сотрудников не созданаИсчерпан лимит мест тарифа: он общий на весь порталСмотрите счётчик «Пропущено (лимит мест)» и расширьте тариф
Вход по ссылке не работаетСекреты различаются, не тот код подключения в ссылке или подписи, ссылка просрочена, сотрудник не синхронизированСверьте SSO-секрет этого подключения, connection, время серверов и выполните синхронизацию
Один человек появился в LMS дваждыОн числится в двух базах 1С одновременно, и каждая база создаёт свой аккаунтОставьте его только в одной базе
Автосинхронизация не запускаетсяНе задан или неверен токен планировщикаПроверьте ONEC_CRON_TOKEN и заголовок X-OneC-Cron-Token
Синхронизация не создаёт задачиСотрудник не пришёл из 1С или курс назначен не через расписание программПроверьте, что сотрудник загружен синхронизацией, а курс назначен в «Расписаниях программ»

Что дальше

Общая информация об интеграции


Часто задаваемые вопросы

Остались вопросы?

Нужна консультация, демонстрация или помощь с выбором тарифа?

Напишите нам — мы подскажем, как запустить обучение и выбрать подходящий формат.

  • Наш Email
    info@brusnika-solutions.com