Ситуация, когда автоматический обмен в распределенной информационной базе (РИБ) внезапно прекращает работу, — одна из самых коварных проблем для администратора 1С. Особенную сложность добавляет симптом, при котором ручной запуск обмена проходит успешно, а регламентное задание «зависает» или вовсе не стартует. Рассмотрим подробно, как продиагностировать и устранить эту проблему на примере связки платформы 1С 8.2 (или 8.3 в режиме обычных форм), конфигурации «Управление торговлей 10.3» и СУБД MSSQL.
Первым делом проанализируем состояние системы через Консоль заданий. Если в журнале регистрации отсутствуют записи о старте или ошибках обмена, это верный признак того, что планировщик либо не может инициировать процесс, либо считает, что предыдущий процесс еще не завершен.
Разберем ситуацию, когда в консоли мы видим фоновое задание со статусом Выполняется, дата начала которого совпадает с моментом последней перезагрузки сервера, а дата окончания пуста. Это означает, что задание «зависло» на уровне рабочего процесса сервера 1С. Выясним причину такого поведения, двигаясь от простых решений к сложным.
Иногда перезагрузки хоста недостаточно, так как файлы сеансов и временные данные конфигурации могут сохраняться в папке службы сервера. Проанализируем содержимое каталога srvinfo. В платформе 8.2 часто возникают «фантомные» записи о выполнении заданий.
Алгоритм глубокой очистки:
Агент сервера 1С:Предприятия.C:\Program Files\1cv82\srvinfo).snaccxt и reg_1541 (кроме файла 1CV8Reg.lst, где описаны настройки базы).Это действие принудительно сбросит состояния всех «зависших» фоновых процессов, которые планировщик мог ошибочно считать активными.
Проанализируем критическое различие между ручным и автоматическим запуском. Ручной обмен выполняется в контексте текущего пользователя Windows, а регламентное задание — в контексте учетной записи, под которой запущена служба сервера 1С (обычно это USR1CV82 или LocalSystem).
Выясним, есть ли у этой системной учетной записи права на:
Если сервер работает на 64-битной ОС, а обмен использует COM-соединение, необходимо настроить компоненты DCOM через Component Services, иначе фоновый процесс будет бесконечно ждать ответа от системы, что в консоли выглядит как вечное выполнение.
В конфигурации «Управление торговлей 10.3» существует механизм защиты от одновременного запуска нескольких сеансов обмена. Рассмотрим регистр сведений Настройки выполнения обмена. Часто в нем зависает флаг, сигнализирующий о том, что обмен уже идет.
Проанализируем ситуацию: если в поле Выполняется стоит значение Истина, новое регламентное задание просто не запустится, ожидая завершения старого. Для решения проблемы можно воспользоваться обработкой или выполнить небольшой кусок кода:
Выборка = РегистрыСведений.НастройкиВыполненияОбмена.Выбрать();
Пока Выборка.Следующий() Цикл
МенеджерЗаписи = РегистрыСведений.НастройкиВыполненияОбмена.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка);
МенеджерЗаписи.Прочитать();
Если МенеджерЗаписи.Выбран() И МенеджерЗаписи.Выполняется Тогда
МенеджерЗаписи.Выполняется = Ложь;
МенеджерЗаписи.Записать();
Сообщить("Сброшен флаг выполнения для настройки: " + Выборка.НастройкаОбмена);
КонецЕсли;
КонецЦикла;
Иногда проблема кроется глубже — на уровне базы данных. Даже если консоль 1С показывает статус Выполняется, процесс в MSSQL может находиться в ожидании (SLEEPING) или быть заблокированным другим процессом. Рассмотрим Activity Monitor в SQL Management Studio. Ищем процессы (SPID), которые блокируют таблицы _ConfigSave или таблицы регистрации изменений (начинаются на _ChngR). Если фоновое задание 1С блокирует само себя из-за незавершенной транзакции в предыдущем сеансе, это потребует принудительного завершения процесса на стороне SQL.
Если вышеперечисленные методы не помогли, перейдем к самому надежному способу — отладке. Чтобы «поймать» фоновое задание отладчиком, выполним следующие шаги:
-debug.Отладка -> Подключение.Автоматическое подключение и установим флажок Фоновые задания.ПроцедурыОбменаДанными).Рассмотрим, на какой строке кода останавливается выполнение. Часто выясняется, что задание «зацикливается» при попытке прочитать объект с битой ссылкой в таблице регистрации изменений. В этом случае поможет тестирование и исправление базы (ТИИ) или очистка регистрации изменений для конкретного узла РИБ.
Подводя итог, отметим, что «зависание» обмена в 1С 8.2 чаще всего связано не с программной ошибкой в коде, а с состоянием окружения: кэшем сервера, правами системной учетной записи или «залипшими» флагами в регистрах настроек. Последовательная проверка этих узких мест позволяет восстановить работу обмена без радикальных мер вроде пересоздания образа РИБ.