Почему перестал работать обмен по расписанию в 1С:Управление торговлей 10.3 и как это исправить?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Ситуация, когда автоматический обмен в распределенной информационной базе (РИБ) внезапно прекращает работу, — одна из самых коварных проблем для администратора 1С. Особенную сложность добавляет симптом, при котором ручной запуск обмена проходит успешно, а регламентное задание «зависает» или вовсе не стартует. Рассмотрим подробно, как продиагностировать и устранить эту проблему на примере связки платформы 1С 8.2 (или 8.3 в режиме обычных форм), конфигурации «Управление торговлей 10.3» и СУБД MSSQL.

Диагностика состояния фонового задания

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

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

Очистка серверного кэша и сеансовых данных

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

Алгоритм глубокой очистки:

  1. Остановим службу Агент сервера 1С:Предприятия.
  2. Перейдем в каталог данных сервера (по умолчанию это C:\Program Files\1cv82\srvinfo).
  3. Найдем папку нужной информационной базы (ее ID можно посмотреть в консоли администрирования).
  4. Удалим содержимое папок snaccxt и reg_1541 (кроме файла 1CV8Reg.lst, где описаны настройки базы).
  5. Запустим службу заново.

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

Проверка прав учетной записи службы 1С

Проанализируем критическое различие между ручным и автоматическим запуском. Ручной обмен выполняется в контексте текущего пользователя Windows, а регламентное задание — в контексте учетной записи, под которой запущена служба сервера 1С (обычно это USR1CV82 или LocalSystem).

Выясним, есть ли у этой системной учетной записи права на:

Если сервер работает на 64-битной ОС, а обмен использует COM-соединение, необходимо настроить компоненты DCOM через Component Services, иначе фоновый процесс будет бесконечно ждать ответа от системы, что в консоли выглядит как вечное выполнение.

Сброс флагов в регистре настроек обмена

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

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


Выборка = РегистрыСведений.НастройкиВыполненияОбмена.Выбрать();
Пока Выборка.Следующий() Цикл
    МенеджерЗаписи = РегистрыСведений.НастройкиВыполненияОбмена.СоздатьМенеджерЗаписи();
    ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка);
    МенеджерЗаписи.Прочитать();
    Если МенеджерЗаписи.Выбран() И МенеджерЗаписи.Выполняется Тогда
        МенеджерЗаписи.Выполняется = Ложь;
        МенеджерЗаписи.Записать();
        Сообщить("Сброшен флаг выполнения для настройки: " + Выборка.НастройкаОбмена);
    КонецЕсли;
КонецЦикла;

Анализ блокировок на уровне MSSQL

Иногда проблема кроется глубже — на уровне базы данных. Даже если консоль 1С показывает статус Выполняется, процесс в MSSQL может находиться в ожидании (SLEEPING) или быть заблокированным другим процессом. Рассмотрим Activity Monitor в SQL Management Studio. Ищем процессы (SPID), которые блокируют таблицы _ConfigSave или таблицы регистрации изменений (начинаются на _ChngR). Если фоновое задание 1С блокирует само себя из-за незавершенной транзакции в предыдущем сеансе, это потребует принудительного завершения процесса на стороне SQL.

Отладка регламентного задания

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

  1. Запустим сервер 1С с параметром -debug.
  2. В конфигураторе перейдем в меню Отладка -> Подключение.
  3. Нажмем кнопку Автоматическое подключение и установим флажок Фоновые задания.
  4. Установим точку останова в процедуре обмена (обычно это модуль ПроцедурыОбменаДанными).

Рассмотрим, на какой строке кода останавливается выполнение. Часто выясняется, что задание «зацикливается» при попытке прочитать объект с битой ссылкой в таблице регистрации изменений. В этом случае поможет тестирование и исправление базы (ТИИ) или очистка регистрации изменений для конкретного узла РИБ.

Заключение

Подводя итог, отметим, что «зависание» обмена в 1С 8.2 чаще всего связано не с программной ошибкой в коде, а с состоянием окружения: кэшем сервера, правами системной учетной записи или «залипшими» флагами в регистрах настроек. Последовательная проверка этих узких мест позволяет восстановить работу обмена без радикальных мер вроде пересоздания образа РИБ.

← На главную