При работе с распределенными информационными базами (РИБ) системные администраторы и программисты часто сталкиваются с парадоксальной ситуацией: интерактивный запуск синхронизации проходит успешно, а автоматический фоновый обмен завершается ошибкой. Особенно часто это проявляется в файловых версиях конфигураций, таких как 1С:Розница 2.2, после переноса базы на новый компьютер или обновления платформы. В данной статье мы подробно разберем, почему возникает ошибка «Каталог не обнаружен» при использовании FTP-соединения и как привести систему в рабочее состояние.
Для начала проанализируем, чем отличается нажатие кнопки «Синхронизировать» от работы регламентного задания. В файловом варианте 1С фоновые задания выполняются не на сервере (которого нет), а в контексте одного из запущенных клиентских сеансов. Если запущено несколько копий программы, одно из них берет на себя роль «планировщика».
Основная сложность заключается в том, что фоновый процесс может использовать иные механизмы обращения к кэшу и метаданным, чем активное окно пользователя. Рассмотрим ситуацию, когда при смене оборудования или обновлении платформы 1cv8.exe начинает некорректно интерпретировать настройки транспорта. Программа «думает», что ей нужно искать локальный каталог (тип обмена FILE), хотя в настройках четко прописан FTP. Это происходит из-за рассинхронизации данных в кэше метаданных и реальных записей в базе данных.
Как показывает практика, первой и самой эффективной мерой является полная очистка кэша. Кэш 1С хранит временные копии структур конфигурации и настроек пользователей. При переносе базы на новый ноутбук старые идентификаторы объектов могут конфликтовать с новыми.
Выполним очистку по следующему алгоритму:
%AppData%\Local\1C\1Cv8%AppData%\Roaming\1C\1Cv8Важный нюанс: если база используется в клиент-серверном варианте, не забудем также про очистку серверного кэша и перезапуск службы 1C:Enterprise 8.3 Server Agent.
Даже если в визуальном интерфейсе «Настройки синхронизации данных» вы видите выбранный способ «Через FTP-ресурс», во внутренних регистрах системы может сохраняться старый признак. Проанализируем состояние данных в регистрах сведений Библиотеки стандартных подсистем (БСП).
Разберем процесс перезаписи настроек:
Перезапись заставляет систему обновить записи в регистре сведений НастройкиТранспортаОбмена. Если этого не сделать, фоновое задание может продолжать считывать устаревшие параметры напрямую из старой версии записи регистра, игнорируя интерфейсные изменения.
При использовании новых ноутбуков с актуальными версиями Windows брандмауэр часто блокирует входящие соединения, которые инициирует FTP-сервер в активном режиме. В интерактивном режиме 1С может использовать системные разрешения текущего пользователя, а фоновое задание, работающее как «системный» процесс, натыкается на блокировку.
Рассмотрим, как гарантированно включить пассивный режим программно или через настройки. В настройках транспорта обмена обязательно должна стоять галочка Использовать пассивный режим. Это заставляет клиентское приложение (1С) само открывать порты для передачи данных, что значительно «прозрачнее» для сетевых экранов.
Если проблема сохраняется, проанализируем ситуацию с помощью отладчика. Нам нужно найти место, где инициализируется объект FTPСоединение. В типовых конфигурациях типа «Розница 2.2» это происходит в модулях обмена данными БСП. Посмотрим на пример кода, который вызывается при попытке подключения:
// Пример инициализации соединения в фоновом задании
ПараметрыПодключения = ОбменДаннымиСервер.ПолучитьПараметрыТранспорта(УзелИнформационнойБазы);
Если ПараметрыПодключения.ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда
Попытка
FTPСоединение = Новый FTPСоединение(
ПараметрыПодключения.FTPАдрес,
ПараметрыПодключения.FTPПорт,
ПараметрыПодключения.FTPПользователь,
ПараметрыПодключения.FTPПароль,
ПараметрыПодключения.FTPПрокси,
ПараметрыПодключения.FTPПассивныйРежим
);
Исключение
ЗаписатьЛогСобытий("Ошибка при подключении к FTP: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
При отладке фонового задания (не забудьте включить «Отладку фоновых заданий» в параметрах конфигуратора) мы можем обнаружить, что условие ВидТранспорта = FTP попросту не выполняется, так как переменная содержит значение FILE. Это прямое следствие «залипшего» кэша или некорректных данных в регистре настроек транспорта.
Выясним еще одну возможную причину ошибки «Каталог не обнаружен». Перед отправкой файла на FTP 1С создает временный файл выгрузки в локальной папке. Если фоновое задание запущено от имени пользователя, у которого нет прав на запись в каталог Temp, или если путь к этому каталогу содержит кириллицу, которую FTP-клиент 1С иногда обрабатывает некорректно, возникнет ошибка.
Проанализируем права доступа к папкам:
%TEMP% для учетной записи, под которой работает служба 1С или сеанс-планировщик.НайтиФайлы() или УстановитьТекущийКаталог() вернет ошибку отсутствия ресурса.Подводя итог, можно сказать, что проблема «невидимости» FTP-каталога в фоне обычно кроется в кэшировании неверного типа транспорта. Пройдемся по контрольному списку еще раз:
Соблюдение этих шагов позволяет устранить большинство проблем с фоновым обменом без необходимости переписывания типового кода конфигурации.