Зависла обработка или регламент: как запустить процесс в 1С с чистого листа
Содержание
Чтобы начать цикл заново в 1С, сначала отмените зависшее фоновое задание или завершите сеанс, который его держит, и только потом запускайте обработку повторно. Перезапуск службы сервера 1С — крайняя мера, а не первый шаг. Частая ошибка: администратор сразу перезагружает весь сервер, хотя хватило бы удалить один сеанс в консоли кластера.
Почему так? Фоновое задание с ключом не стартует, пока активно предыдущее с тем же ключом. Блокировки данных держит конкретный сеанс. Уберите этот сеанс — и цикл запустится с нуля, остальные пользователи даже не заметят.
Как понять, что именно зависло: сеансы, процессы, блокировки
Перед любыми действиями найдите виновника. Иначе вы перезапустите всё, а через час получите ту же картину.
Откройте Администрирование серверов 1С Предприятия (консоль кластера) и пройдите по дереву:
Центральные серверы 1С:Предприятия → <ваш сервер> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы.- Отсортируйте сеансы по колонке времени начала или по длительности текущего вызова. Ищите сеанс с приложением «Фоновое задание» или с именем пользователя, который запускал обработку.
- Загляните в соседнюю ветку
Блокировкитой же базы: там видно, какой сеанс держит управляемые или объектные блокировки. - В ветке
Рабочие процессыкластера посмотрите память и загрузку каждогоrphost. Процесс, который съел всю доступную память, — частый источник «вечного» цикла.
Что подсказывает, что цикл именно завис, а не просто долго работает:
- 🔴 время вызова растёт, а объём прочитанных или записанных данных в свойствах сеанса не меняется;
- 🔴 в блокировках висит одна и та же запись больше 10–15 минут;
- 🔴 другие пользователи ловят
Конфликт блокировок при выполнении транзакцииилиПревышено максимальное время ожидания предоставления блокировки; - 🟡 процесс
rphostстабильно грузит одно ядро на 100% без изменения памяти — возможен бесконечный цикл в коде.
Если консоли под рукой нет, тот же список даёт утилита rac через сервер администрирования ras:
rac cluster list
rac session list --cluster=<uuid-кластера>
rac process list --cluster=<uuid-кластера>
В файловой базе консоли кластера нет. Там зависший цикл живёт внутри клиентского процесса 1cv8.exe конкретного пользователя: его видно в Администрирование → Обслуживание → Активные пользователи (БП 3.0, ЗУП 3.1) и в диспетчере задач Windows.
Отмена и повторный запуск фоновых и регламентных заданий
Большинство «циклов», которые надо начать заново, — это фоновые или регламентные задания: загрузка обмена, закрытие месяца , расчёт себестоимости, обновление полнотекстового индекса.
В типовых конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11) откройте Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. Дальше:
- На закладке фоновых заданий найдите строку в состоянии «Активно» и отмените её командой отмены в панели списка.
- Подождите, пока состояние сменится на «Отменено». Отмена срабатывает не мгновенно: задание прерывается при следующем обращении к серверу.
- Перейдите на закладку регламентных заданий, откройте нужное и запустите его командой «Выполнить сейчас».
- Обновите список и убедитесь, что появилось новое фоновое задание с текущим временем начала.
Если отмена не помогает и задание висит в «Активно» дольше получаса, удалите его сеанс в консоли кластера (раздел выше). После этого запись перейдёт в состояние «Завершено аварийно», и новый запуск пройдёт.
Из кода: найти, отменить, запустить повторно
Разработчику удобнее перезапустить задание программно. Пример для серверного модуля:
Отбор = Новый Структура("Ключ, Состояние", "ПересчетОстатков", СостояниеФоновогоЗадания.Активно);
Активные = ФоновыеЗадания.ПолучитьФоновые(Отбор);
Для Каждого Задание Из Активные Цикл
Задание.Отменить();
КонецЦикла;
// Ждём завершения отменённых заданий не дольше 60 секунд
Если Активные.Количество() > 0 Тогда
ФоновыеЗадания.ОжидатьЗавершенияВыполнения(Активные, 60);
КонецЕсли;
ФоновыеЗадания.Выполнить("МойОбщийМодуль.ПересчитатьОстатки", , "ПересчетОстатков", "Пересчёт остатков (повтор)");
Ключ "ПересчетОстатков" здесь не случаен. Платформа не даст запустить второе задание с тем же ключом, пока первое активно, и выдаст ошибку. Поэтому без отмены старого цикла новый не начнётся.
Метод ОжидатьЗавершенияВыполнения при превышении таймаута вызывает исключение. В рабочем коде оберните вызов в Попытка … Исключение.
Если цикл должен продолжиться, а не начаться с нуля
Для долгих обработок лучше заранее сохранять точку останова: номер последнего обработанного документа или дату в регистре сведений или константе. Тогда после отмены задание стартует с сохранённой позиции, а не перебирает уже обработанные 50 000 документов заново.
Файловая база: перезапуск без консоли кластера
В файловом варианте всё проще и жёстче. Фоновое задание выполняется в процессе клиента, поэтому способ один: закрыть программу у пользователя, который запустил цикл.
- Посмотрите в списке активных пользователей, кто работает в базе и с какого компьютера.
- Попросите этого пользователя закрыть 1С. Если окно не отвечает, завершите процесс
1cv8.exeили1cv8c.exeв диспетчере задач на его компьютере — несохранённые данные пропадут. - Убедитесь, что в каталоге базы не осталось лишних процессов, держащих файл
1Cv8.1CD. - Войдите в базу заново и запустите обработку.
Перезапуск службы сервера 1С:Предприятия и сервера администрирования ras
Перезапуск службы обрывает сеансы всех пользователей всех баз кластера. Несохранённые документы пропадут, незавершённые транзакции откатятся. Делайте это вне рабочего времени или после предупреждения пользователей.
Когда без перезапуска не обойтись:
- 🔧 консоль кластера не отвечает или не показывает сеансы;
- 🔧 сеанс удалили, а
rphostпродолжает держать память и блокировки; - 🔧 нужно очистить серверный кэш (следующий раздел);
- 🔧 после обновления платформы служба работает со старой версией.
Windows
Имя службы зависит от версии и разрядности платформы. Узнайте точное имя:
Get-Service *1C*
Затем перезапустите агент сервера:
Restart-Service -Name "<имя службы агента>" -Force
Если ras зарегистрирован как отдельная служба (его ставят вручную для работы rac и сторонних консолей), перезапустите и его — после агента, а не до.
Linux
С платформы 8.3.21 службы именуются по версии, например srv1cv8-8.3.24.1586@default. В более ранних версиях юнит обычно называется srv1cv83. Список посмотрите командой:
systemctl list-units --type=service | grep -i 1c
sudo systemctl restart <имя юнита>
Альтернатива полному перезапуску — завершить только проблемный рабочий процесс. В Windows это rphost.exe с нужным PID в диспетчере задач, в Linux — kill <PID>. Агент сам поднимет новый процесс. Но сеансы, которые жили в этом rphost, оборвутся так же жёстко, как при остановке службы.
Очистка кэша сервера и временных файлов
Иногда цикл стартует заново, но ведёт себя как старый: падает в том же месте, видит старые настройки, тащит устаревшие метаданные. Тогда виноват кэш.
| Что чистить | Где лежит | Когда помогает |
|---|---|---|
| Серверный кэш сеансовых данных | файлы snccntx* в каталоге srvinfo\reg_1541\ | после аварийного завершения службы, при ошибках сеансовых данных |
| Клиентский кэш | %APPDATA%\1C\1cv8\<GUID базы> и %LOCALAPPDATA%\1C\1cv8\<GUID базы> | старые формы, ошибки после обновления конфигурации |
| Временные файлы рабочих процессов | каталог %TEMP% пользователя, от которого запущена служба | заканчивается место на диске |
Порядок очистки серверного кэша:
- Предупредите пользователей и дождитесь окончания их работы.
- Остановите службу агента сервера 1С.
- Сделайте копию каталога
srvinfoцеликом. - В каталоге
reg_1541удалите только папки и файлы, имя которых начинается сsnccntx. - Запустите службу и проверьте вход в базу.
Не трогайте файлы 1CV8Clst.lst и 1CV8Reg.lst. В них хранится реестр кластера: список баз, рабочих серверов и администраторов. Без них кластер придётся настраивать заново.
Клиентский кэш проще всего сбросить запуском с параметром:
"C:\Program Files\1cv8\common\1cestart.exe" /ClearCache
В окне запуска 1С этот же параметр можно дописать в поле дополнительных параметров базы через кнопку «Изменить».
Временные таблицы СУБД вручную не чистите. В MS SQL их хранит tempdb, и она пересоздаётся при перезапуске службы SQL Server. Удаление строк из таблиц базы напрямую через SQL ломает целостность данных 1С.
Блокировка входа и монопольный режим для чистого перезапуска
Если циклу нужны данные, которые постоянно правят пользователи (перепроведение, закрытие периода ), запускайте его в «тишине». Для этого блокируют вход в базу.
Через программу. В БП 3.0 и ЗУП 3.1: Администрирование → Обслуживание → Блокировка работы пользователей. Укажите время начала, текст сообщения и код разрешения. Пользователей предупредят, затем завершат их сеансы.
Через консоль кластера. В свойствах информационной базы включите:
- ✅ «Блокировка начала сеансов включена» — новые пользователи не войдут;
- ✅ «Блокировка регламентных заданий включена» — регламенты не будут мешать вашему циклу;
- ✅ код разрешения — с ним войдёт администратор.
Войти в заблокированную базу можно с параметром запуска /UC<код разрешения>.
Монопольный режим нужен не всем операциям. Он обязателен для обновления структуры базы данных, загрузки из .dt, тестирования и исправления. Обычной обработке достаточно, чтобы в базе не работали другие пользователи и регламенты.
Не забудьте снять обе блокировки после завершения. Забытая «Блокировка регламентных заданий» — частая причина того, что обмены и резервное копирование тихо перестают работать на недели.
Через rac блокировку ставят командой rac infobase update с параметрами --sessions-deny=on и --scheduled-jobs-deny=on. Полный список ключей покажет rac help infobase.
Автоматический перезапуск: скрипты и планировщик заданий
Если цикл регулярно повисает, разовые ручные перезапуски — это лечение симптома. Но пока ищете причину в коде, поможет автоматизация.
Встроенный перезапуск рабочих процессов
В свойствах кластера есть параметры:
- Интервал перезапуска — через сколько секунд рабочие процессы перезапускаются плавно, без обрыва сеансов. Например,
86400— раз в сутки; - Допустимый объём памяти и интервал превышения допустимого объёма памяти — если
rphostпревысил лимит дольше заданного времени, кластер перезапустит его.
Плавный перезапуск переводит новые соединения на свежий процесс, а старый живёт, пока на нём есть сеансы. Это самый безопасный способ «обнулить» процессы.
Скрипт ночного перезапуска с очисткой кэша
@echo off
rem Ночной перезапуск сервера 1С с очисткой сеансовых данных
set SVC=<имя службы агента>
set SRVINFO=C:\Program Files\1cv8\srvinfo\reg_1541
net stop "%SVC%"
timeout /t 30 /nobreak
for /d %%D in ("%SRVINFO%\snccntx*") do rd /s /q "%%D"
net start "%SVC%"
Путь к srvinfo у вас может быть другим: его задают при установке сервера. Проверьте каталог перед первым запуском.
Зарегистрируйте скрипт в Планировщике заданий Windows:
schtasks /create /tn "1C restart" /tr "C:\scripts\restart1c.bat" /sc daily /st 03:00 /ru SYSTEM
Время перезапуска сверьте с расписанием резервного копирования и регламентных заданий. Если бэкап в 03:00, а рестарт службы тоже в 03:00, копия может не сделаться.
Частые ошибки при перезапуске
- ❌ Перезагрузка всего Windows-сервера вместо одного сеанса. Заодно падают SQL Server, обмены и терминальные сессии. Начинайте с минимального вмешательства.
- ❌ Повторный запуск без отмены старого задания. Два цикла работают параллельно, конфликтуют по блокировкам и пишут дубли.
- ❌ Удаление всего каталога
srvinfo. Вместе с кэшем уходит реестр кластера. - ❌ Ручная правка таблиц СУБД, чтобы «сбросить» обработку. Последствия всплывают позже, в отчётах и при закрытии месяца.
- ❌ Перезапуск, после которого причину никто не ищет. Если цикл зависает каждую неделю, смотрите технологический журнал и замер производительности.