Работа пользователя и фоновые процессы: где проходит граница в 1С

· 9 мин

Содержание

Интерактивный режим в 1С — это работа, которую выполняет живой пользователь через формы: открыл документ, нажал «Провести», ответил на вопрос программы. Противоположность — фоновый режим, где код работает без окон и без человека: регламентные задания, обмены, длительные отчёты.

Разница не косметическая. В интерактивном режиме можно показать форму, задать вопрос, вывести предупреждение. В фоновом — нельзя: окно некому показать. Отсюда отдельные «интерактивные» права в ролях, ошибки про модальные окна и разное поведение одного и того же кода. Всё ниже относится к платформе 8.3 и общее для типовых конфигураций.

Интерактивный режим 1С: суть и признаки

Платформа различает, кто инициировал действие. Если команду вызвал пользователь из формы — это интерактивное действие. Если тот же объект записал код (обработка, обмен, регламентное задание) — программное.

Признаки интерактивного сеанса:

  • 👤 есть пользователь за экраном и клиентское приложение (тонкий, толстый или веб-клиент);
  • 🪟 открываются формы, работают диалоги и оповещения;
  • 🔘 действия запускаются кнопками и командами интерфейса;
  • 🔐 проверяются интерактивные права роли — «Интерактивное добавление», «Интерактивное удаление» и другие.

Фоновый сеанс в консоли кластера виден с приложением «Фоновое задание». Интерактивный — «Тонкий клиент», «Толстый клиент» или «Веб-клиент». По этой колонке администратор быстро понимает, кто сейчас нагружает сервер: люди или задания.

Интерактивные права ограничивают только действия через интерфейс. Код с привилегиями или с правом «Удаление» удалит объект, даже если «Интерактивное удаление» у роли снято.

Какие права в ролях называются интерактивными

У объектов конфигурации есть пары прав: обычное и интерактивное. Обычное разрешает действие вообще, в том числе из кода. Интерактивное — только через формы и кнопки.

Интерактивное правоЧто разрешает пользователюУ каких объектов
Интерактивное добавлениеСоздать новый элемент кнопкой «Создать»Справочники, документы, планы видов характеристик
Интерактивная пометка удаленияПоставить пометку удаленияСправочники, документы
Интерактивное снятие пометки удаленияСнять пометкуСправочники, документы
Интерактивное удалениеУдалить объект сразу, без пометкиСправочники, документы
Интерактивное удаление помеченныхУдалить помеченные объекты обработкойСправочники, документы
Интерактивное проведениеПровести документ из формыДокументы
Интерактивная отмена проведенияОтменить проведение кнопкойДокументы
Интерактивное изменение проведенныхРедактировать уже проведённый документДокументы

Интерактивное право не может быть шире обычного. Если у роли нет права «Удаление», флажок «Интерактивное удаление» не даст ничего.

Сеансы, которые не относятся ни к одному из режимов

Кроме пользователей и фоновых заданий, к базе подключаются внешние программы: через COM-соединение, веб-сервисы, HTTP-сервисы, OData. В таких сеансах тоже нет форм и диалогов. С точки зрения кода они ближе к фону: всё выполняется на сервере, вопросы показать некому. Отличие в том, что запрос приходит извне, а не по расписанию внутри базы.

Чем интерактивный режим отличается от фонового

ПараметрИнтерактивный режимФоновый режим
Кто запускаетПользователь в клиентеКод, расписание, другое задание
Формы и диалогиДоступныНедоступны
Где выполняется кодКлиент и серверТолько сервер (в файловом варианте — внутри процесса клиента)
Сообщения Сообщить()Сразу в окне сообщенийНакапливаются, их забирает вызывающий код
ПраваПроверяются обычные и интерактивныеИнтерактивные не участвуют
Влияние на интерфейсПока операция идёт, форма ждётПользователь работает дальше
Видно в консоли кластера«Тонкий клиент», «Веб-клиент»«Фоновое задание»

Главное практическое следствие: тяжёлая операция в интерактивном режиме «замораживает» окно. Та же операция в фоне отдаёт управление пользователю сразу, а результат приходит позже.

Файловая база — особый случай

В файловом варианте нет сервера кластера. Фоновые задания исполняет процесс одного из запущенных клиентов. Регламентные задания там работают, только пока открыт сеанс, которому это разрешено, например клиент с параметром запуска /AllowExecuteScheduledJobs -Force. Если базу никто не открыл, расписание стоит.

Когда работает интерактивный режим: примеры из практики

Несколько ситуаций, где граница «пользователь — фон» видна бухгалтеру и администратору.

Формирование отчётов. В БП 3.0, ЗУП 3.1 и УТ 11 многие отчёты строятся длительной операцией: пользователь нажал «Сформировать», а сам расчёт ушёл в фоновое задание. Поэтому во время построения можно переключиться на другую вкладку.

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

Проведение документов. Кнопка «Провести» — интерактивное проведение, для него у роли должно быть право «Интерактивное проведение». Групповое перепроведение обработкой — уже программная запись.

Регламентные задания. Загрузка курсов валют, обмен с банком, обновление классификаторов идут в фоне по расписанию. Их видно в Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания (в ЗУП и УТ раздел называется «Поддержка и обслуживание»).

Обмены данными. Синхронизация по расписанию — фон. Ручной запуск кнопкой «Синхронизировать» — интерактивное начало, но сам обмен всё равно выполняется длительной операцией.

Пакетный запуск. Администратор запускает обработку из командной строки ночью. Сеанс формально клиентский, но человека за экраном нет. Любой вопрос с кнопкой «Да/Нет» здесь подвесит процесс до утра.

Как ограничить или отключить интерактивный режим: пошагово

Единого переключателя «интерактивный режим вкл/выкл» в 1С нет. Задача решается тремя способами — в зависимости от того, что нужно.

ЦельСпособКто делает
Запретить пользователям конкретное действие через интерфейсСнять интерактивное право в ролиРазработчик или администратор
Временно выгнать людей, оставив фоновые заданияБлокировка начала сеансовАдминистратор
Запустить базу без вопросов и оконПараметры командной строкиАдминистратор

Способ 1. Интерактивные права в роли

  1. Откройте базу в Конфигураторе.
  2. В дереве конфигурации раскройте ветку Общие → Роли и откройте нужную роль.
  3. Выберите объект — справочник, документ, регистр.
  4. В правой части снимите флажки нужных прав: «Интерактивное удаление», «Интерактивная пометка удаления», «Интерактивное проведение» и т. п.
  5. Сохраните и обновите конфигурацию базы данных.

Правка типовой роли снимает конфигурацию с полной поддержки и усложняет обновления. В типовых конфигурациях удобнее создать свою роль в расширении или настроить профиль групп доступа в режиме «Предприятие»: Администрирование → Настройки пользователей и прав → Профили групп доступа.

Способ 2. Блокировка интерактивных сеансов

Нужна, когда пользователей надо вывести из базы на время обновления или закрытия месяца.

  1. Откройте Администрирование → Обслуживание → Блокировка работы пользователей (в ЗУП и УТ — Поддержка и обслуживание).
  2. Укажите текст сообщения, время начала и окончания.
  3. Установите блокировку. Пользователи получат предупреждение и через несколько минут будут отключены.

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

Блокировка обрывает работу пользователей. Несохранённые документы будут потеряны. Включайте её после предупреждения и в согласованное окно.

Способ 3. Запуск без диалогов

Для ночных и пакетных запусков у 1cv8.exe есть параметры, подавляющие интерактивные окна:

"C:\Program Files\1cv8\<версия>\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Robot" /P"пароль" /Execute"D:\Scripts\nightly.epf" /DisableStartupDialogs /DisableStartupMessages
  • /DisableStartupDialogs — не показывать диалог выбора базы и окно авторизации;
  • /DisableStartupMessages — не показывать стартовые предупреждения;
  • /Execute — сразу выполнить внешнюю обработку .

Сама обработка тоже не должна задавать вопросов. Если в ней есть ПоказатьВопрос, процесс повиснет.

Интерактивный режим и скорость работы 1С

Пользователь ощущает «тормоза» именно в интерактивном режиме: окно не отвечает, пока сервер считает. Что реально помогает:

  • ⏳ Переносить тяжёлое в фон. Пересчёт остатков, массовое перепроведение, выгрузку больших файлов лучше выполнять фоновым заданием или ночью.
  • 🗓️ Разводить расписание. Регламентные задания с большой нагрузкой (полнотекстовый индекс, обмены) ставьте на нерабочее время. В рабочий день они конкурируют с людьми за ресурсы.
  • 📉 Сокращать клиент-серверные вызовы. Каждое обращение формы к серверу — сетевой обмен. На медленном канале 20 лишних вызовов при открытии формы заметны глазом.
  • 🖥️ Следить за файловой базой. Фоновые задания в ней едят ресурсы клиента. Если у бухгалтера всё виснет каждый час, проверьте, не на его компьютере крутится обмен.
  • 🧹 Не держать десятки открытых форм. Каждая форма живёт в памяти клиента и на сервере.

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

Интерактивный режим в коде 1С: что важно разработчику

Где выполняется код

Клиентский код (&НаКлиенте) существует только в интерактивном сеансе. В фоновом задании клиента нет, работает лишь серверный код. Процедура для фонового задания должна быть экспортной и лежать в серверном общем модуле.

&НаСервереБезКонтекста
Функция ЗапуститьПересчет(ДатаРасчета)
    Параметры = Новый Массив;
    Параметры.Добавить(ДатаРасчета);
    Задание = ФоновыеЗадания.Выполнить("РасчетыСервер.ПересчитатьОстатки", Параметры, , "Пересчёт остатков");
    Возврат Задание.УникальныйИдентификатор;
КонецФункции

В типовых конфигурациях на БСП удобнее пользоваться модулем ДлительныеОперации: он сам запускает задание, показывает индикатор и возвращает результат в форму.

Как узнать, что код работает в фоне

Функция ЭтоФоновоеЗадание() Экспорт
    ТекущийСеанс = ПолучитьТекущийСеансИнформационнойБазы();
    Возврат ТекущийСеанс.ПолучитьФоновоеЗадание() <> Неопределено;
КонецФункции

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

Диалоги без модальности

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

&НаКлиенте
Процедура УдалитьСтроку(Команда)
    Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопрос", ЭтотОбъект);
    ПоказатьВопрос(Оповещение, "Удалить выбранную строку?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопрос(Результат, ДополнительныеПараметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        Элементы.Таблица.ТекущиеДанные.Пометка = Истина;
    КонецЕсли;
КонецПроцедуры

Проверка интерактивных прав в коде

Если команда формы делает то же, что стандартная кнопка, проверяйте то же право:

Если Не ПравоДоступа("ИнтерактивноеУдаление", Метаданные.Справочники.Номенклатура) Тогда
    ВызватьИсключение "Недостаточно прав на удаление номенклатуры";
КонецЕсли;

Иначе своя кнопка станет обходом ограничения, которое администратор настроил в профиле.

Сообщения из фонового задания

Сообщить() в фоне не теряется: сообщения копятся у задания. Вызывающий код забирает их методом ПолучитьСообщенияПользователю() объекта фонового задания и показывает пользователю.

Ошибки, которые выдаёт граница «интерактив — фон»

Диагностика: выберите симптом

Если ограничение интерактивных действий не сработало

Пользователь всё равно удаляет или проводит документы, хотя права сняты. Проверьте по порядку:

  1. Все группы доступа пользователя. Права складываются. Если пользователь состоит в двух группах и в одной из них право есть, оно действует.
  2. Флажок полных прав. Роль «Полные права» и профиль «Администратор» дают всё, включая интерактивные действия.
  3. Свои кнопки и обработки. Команда, написанная без проверки ПравоДоступа(), может удалять или проводить объекты программно, в обход интерактивного права.
  4. Привилегированный режим. Код в привилегированных общих модулях выполняется без проверки прав вообще.
  5. Повторный вход. Новые права применяются при начале сеанса. Попросите пользователя закрыть программу и зайти снова.

Частые вопросы

Занимает ли фоновое задание лицензию пользователя?
Нет, фоновые задания на сервере не расходуют клиентские лицензии. Лицензию занимают сеансы тонкого, толстого и веб-клиента, а также COM-соединения.
Можно ли запретить пользователю удалять документы, но оставить пометку удаления?
Да. В профиле или роли оставьте «Интерактивную пометку удаления» и снимите «Интерактивное удаление». Окончательно удалять будет администратор через обработку удаления помеченных.
Почему отчёт формируется, а я могу работать в другой вкладке?
Отчёт строится длительной операцией в фоновом задании. Форма лишь ждёт результат и периодически проверяет его готовность.
Как посмотреть, какие фоновые задания сейчас выполняются?
В разделе «Регламентные и фоновые задания» на вкладке фоновых заданий. В клиент-серверной базе — ещё и в консоли кластера, в списке сеансов с приложением «Фоновое задание».
Влияет ли блокировка сеансов на регламентные задания?
Блокировка начала сеансов не трогает фон. Для регламентных заданий в консоли кластера есть отдельный флажок блокировки.