Зависло фоновое задание в файловой 1С: как его остановить и не повредить базу

· 9 мин

Содержание

Чтобы завершить фоновое задание в файловой базе 1С 8.3, откройте Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания, перейдите на вкладку фоновых заданий, выделите строку в состоянии «Активно» и нажмите «Отменить». Если отмена не срабатывает, задание завершают вместе с процессом, в котором оно выполняется: в файловом варианте это клиентское приложение (1cv8c.exe или 1cv8.exe) либо веб-сервер, если база опубликована.

Отличие файловой базы от клиент-серверной в том, что здесь нет кластера и консоли администрирования. Фоновое задание живёт внутри процесса конкретного пользователя. Поэтому «убить» его отдельной командой нельзя: либо задание отменяется штатно, либо закрывается процесс, который его выполняет.

Как понять, что фоновое задание действительно зависло

Не каждое долгое задание зависло. Обновление полнотекстового индекса или загрузка классификаторов на большой базе может идти 20–40 минут, и это нормально. Признаки настоящей проблемы другие:

  • ⏳ задание висит в состоянии «Активно» часами, а время его старта не меняется;
  • 🔒 пользователи получают ошибки блокировки при записи документов, которые затрагивает задание;
  • 🐢 база заметно тормозит у всех, хотя никто не проводит тяжёлых операций;
  • 🚫 при попытке войти в Конфигуратор для обновления программа сообщает, что база используется;
  • 📈 процесс 1cv8c.exe у одного из пользователей держит высокую загрузку процессора и не отпускает память.

Где смотреть список заданий:

  1. Откройте форму Регламентные и фоновые задания по пути выше. В конфигурациях на базе БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) она есть всегда, но доступна только пользователю с полными правами.
  2. Включите отбор по состоянию «Активно». Обратите внимание на колонки с наименованием, именем метода и временем начала.
  3. Сравните время начала с текущим. Если задание стартовало утром, а сейчас вечер, это кандидат на отмену.
  4. Параллельно откройте Администрирование → Обслуживание → Активные пользователи. Фоновые задания там отображаются отдельными сеансами с приложением «Фоновое задание». Так видно, сколько их и с какого времени они работают.

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

Отмена фонового задания из интерфейса программы

Это самый безопасный способ: платформа сама откатывает незавершённую транзакцию задания, данные остаются согласованными.

Порядок действий:

  1. Зайдите в базу под пользователем с правами администратора.
  2. Откройте форму регламентных и фоновых заданий.
  3. Найдите активное задание, выделите его.
  4. Нажмите «Отменить» в командной панели списка.
  5. Обновите список через 1–2 минуты. Состояние должно смениться на «Отменено».

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

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

Отмена обработкой, если формы нет

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

&НаСервере
Процедура ОтменитьАктивныеНаСервере()

	Отбор = Новый Структура("Состояние", СостояниеФоновогоЗадания.Активно);
	Активные = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);

	Для Каждого Задание Из Активные Цикл
		Сообщить(СтрШаблон("%1 | %2 | старт %3",
			Задание.Наименование, Задание.ИмяМетода, Задание.Начало));
		Задание.Отменить();
	КонецЦикла;

	Сообщить(СтрШаблон("Отправлено на отмену: %1", Формат(Активные.Количество(), "ЧН=0; ЧГ=0")));

КонецПроцедуры

&НаКлиенте
Процедура ОтменитьАктивные(Команда)
	ОтменитьАктивныеНаСервере();
КонецПроцедуры

Обработка отменяет все активные задания разом. Если нужно остановить только одно, добавьте в структуру отбора ключ ИмяМетода или Наименование со значением из списка.

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

Остановка через командную строку Windows

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

Сначала найдите, какие процессы 1С запущены на компьютере:

tasklist /FI "IMAGENAME eq 1cv8c.exe"
tasklist /FI "IMAGENAME eq 1cv8.exe"

1cv8c.exe — тонкий клиент, 1cv8.exe — толстый клиент и Конфигуратор. Если процессов несколько, ориентируйтесь на загрузку процессора и память в Диспетчере задач (вкладка «Подробности»).

Завершить один процесс по его PID:

taskkill /PID 12345 /F

Завершить все клиенты 1С на этом компьютере:

taskkill /IM 1cv8c.exe /F
taskkill /IM 1cv8.exe /F

Транзакция, которую выполняло задание, будет отменена при следующем открытии базы. Завершение процесса посреди записи — это примерно то же, что отключение питания: обычно база переживает его без последствий, но риск повреждения файла 1Cv8.1CD есть. Поэтому перед taskkill по возможности сохраните копию папки базы.

Если база лежит в сетевой папке

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

openfiles /query /fo table | findstr /I "1Cv8"

Команда покажет, какие пользователи открыли файлы базы. Дальше два варианта:

  • 👤 попросите этого пользователя закрыть 1С или перезагрузить компьютер;
  • 🔌 если человека нет на месте, закройте сетевой сеанс: openfiles /disconnect /id <ID> с идентификатором из списка или через Управление компьютером → Общие папки → Открытые файлы.

Если база опубликована на веб-сервере

При работе через браузер или веб-клиент фоновые задания выполняются в процессе веб-сервера. Тогда отмену делают перезапуском: для IIS — перезапуском пула приложений, где опубликована база, для Apache — перезапуском службы. Это обрывает сеансы всех, кто работает через эту публикацию.

Служебные файлы и блокировки: что можно удалить

После аварийного завершения процесса база иногда не открывается или открывается с ошибкой блокировки. Причина — служебные файлы, которые клиент не успел убрать за собой.

Что лежит в папке файловой базы:

Файл или папкаЧто этоМожно ли удалять
1Cv8.1CDСами данные и конфигурация❌ Никогда
1Cv8LogЖурнал регистрации❌ Только после выгрузки, если журнал не нужен
1Cv8tmpВременные файлы сеансов✅ Когда все пользователи вышли
1Cv8.cflСлужебный файл блокировки конфигурации✅ Когда все вышли, после копии

Порядок безопасной чистки:

  1. Убедитесь, что ни один клиент 1С не работает с базой: на сервере проверьте openfiles из прошлого раздела.
  2. Скопируйте всю папку базы в другое место.
  3. Удалите папку 1Cv8tmp и, если он есть и база пишет об ошибке блокировки, файл 1Cv8.cfl.
  4. Откройте базу. Платформа создаст служебные файлы заново.

Если Windows не даёт удалить файл и пишет, что он занят другим процессом, значит, база ещё кем-то открыта. Не обходите это сторонними утилитами разблокировки: вы удалите файл из-под работающего сеанса.

Отдельно стоит почистить кэш на компьютере пользователя, у которого висело задание. Самый простой способ — запустить базу с параметром /ClearCache. Его добавляют в строку «Дополнительные параметры запуска» в свойствах базы в окне запуска. После одного успешного входа параметр убирают.

Ищем причину в журнале регистрации

Отменить задание — полдела. Если не понять, почему оно повисло, завтра всё повторится. Причину ищут в журнале регистрации: Администрирование → Обслуживание → Журнал регистрации.

Как настроить отбор :

  1. Откройте журнал и нажмите «Установить отбор».
  2. Задайте интервал: от времени старта задания до момента отмены.
  3. В отборе по событиям выберите события группы «Фоновое задание» — запуск, успешное завершение, ошибка выполнения, отмена.
  4. Если зависло регламентное задание, добавьте в отбор и метаданные, с которыми оно работает.

Что искать:

  • ❗ «Ошибка выполнения» с текстом исключения — чаще всего это Ошибка при вызове метода контекста, таймаут подключения к внешнему сервису или нехватка прав;
  • 🔁 одно и то же задание стартует каждые несколько минут и не завершается — это расписание с коротким интервалом при долгом выполнении, задания накладываются;
  • 🔒 рядом с событиями задания идут ошибки Конфликт блокировок при выполнении транзакции — задание и пользователь писали одни и те же данные;
  • 🌐 задание застряло на шаге обращения к интернету — проверьте прокси и доступ к нужным адресам с этого компьютера.

Если в журнале нет событий фоновых заданий, проверьте уровень логирования: Администрирование → Обслуживание → Журнал регистрации → Настройка журнала (в некоторых релизах — через меню Конфигуратора Администрирование → Настройка журнала регистрации). Уровень «Ошибки» не покажет запуски и отмены, нужен «Информация» или «Примечания».

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

Как настроить регламентные задания, чтобы не зависали

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

Решение — управлять этим явно через параметр командной строки /AllowExecuteScheduledJobs:

  • /AllowExecuteScheduledJobs -Off — этот клиент регламентные задания не выполняет;
  • /AllowExecuteScheduledJobs -Force — этот клиент выполняет регламентные задания.

Практичная схема для офиса на 5–15 человек:

  1. На компьютерах пользователей пропишите в свойствах базы в окне запуска параметр -Off.
  2. На одном компьютере, который работает постоянно (или на самом файловом сервере), создайте ярлык запуска с параметром -Force под отдельным служебным пользователем.
  3. Пусть этот клиент будет открыт круглосуточно. Задания перестанут «прыгать» между пользователями.

Пример ярлыка для служебного клиента:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Регламент" /P"пароль" /AllowExecuteScheduledJobs -Force

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

Что ещё проверить в списке регламентных заданий:

  • 🔕 отключите то, чем не пользуетесь: загрузку курсов валют без валютных операций, обмены с отключёнными сервисами, обновление классификаторов по ночам, если никто не работает с базой ночью;
  • ⏱ разведите по времени тяжёлые задания: обновление полнотекстового индекса и обмены не должны стартовать одновременно;
  • 📅 для заданий раз в сутки ставьте расписание на обед или конец дня, когда нагрузка ниже;
  • 🧹 включите повтор при аварийном завершении только для коротких заданий, иначе зависшее долгое задание будет перезапускаться по кругу.

Если база выросла до нескольких гигабайт, а пользователей больше 10, файловый режим работает на пределе. Регулярные зависания фоновых заданий в такой базе — сигнал задуматься о переходе на клиент-серверный вариант, где задания выполняются на сервере и управляются из консоли кластера.

Профилактика зависаний в файловой базе
Выполнено: 0 / 6

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

Чем отличается фоновое задание от регламентного?
Регламентное задание — это задача по расписанию, описанная в конфигурации. При каждом запуске она выполняется как фоновое задание. Фоновое задание может быть запущено и без расписания, например кнопкой в форме документа.
Можно ли завершить фоновое задание другого пользователя, не закрывая его 1С?
Да, через отмену в форме регламентных и фоновых заданий или обработкой. Отмена действует на само задание, сеанс пользователя остаётся открытым.
Пропадут ли данные, если завершить задание через taskkill?
Незавершённая транзакция откатится, уже записанные до неё данные останутся. Несохранённые изменения в открытых окнах этого пользователя будут потеряны.
Почему фоновые задания не выполняются совсем?
В файловой базе задания идут, только пока открыт хотя бы один клиент, которому разрешено их выполнять. Проверьте, не стоит ли у всех параметр -Off, и не выключено ли задание.
Нужен ли монопольный режим, чтобы отменить фоновое задание?
Нет. Отмена делается в обычном режиме Предприятия, другие пользователи могут продолжать работу.