Как узнать, выгружался ли документ в файл обмена 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

Синхронизация данных между конфигурациями 1С (например, между двумя базами на платформе «1С:Предприятие», такими как «Управление производственным предприятием») — это критически важный процесс. Нередко возникает ситуация, когда в ручном режиме запуск обмена проходит успешно и документы попадают в базу-приемник, а в автоматическом режиме (по регламентному заданию) данные не доходят. При этом у технического специалиста может не быть прямого доступа к FTP-серверу или каталогу обмена, чтобы физически проверить наличие выгруженного XML-файла.

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

Метод 1. Анализ регистрации изменений на узле плана обмена

Каждый автоматический обмен строится на механизме планов обмена. Когда объект (документ или справочник) создается или изменяется, платформа фиксирует это событие. Для проверки того, «участвовал» ли документ в выгрузке, мы можем проанализировать таблицу регистрации изменений. Для обеспечения стабильности процесса автоматический регулярный обмен данными между базами 1С по расписанию настраивается поверх существующих правил конвертации.

Разберем по шагам состояния регистрации объекта:

  1. До начала обмена: Объект зарегистрирован на узле. В таблице регистрации изменений поле НомерСообщения имеет значение 0 или NULL. Это указывает на то, что объект ожидает своей очереди на отправку.
  2. В процессе выгрузки: При инициализации обмена система выбирает все зарегистрированные объекты, помещает их в XML-файл и присваивает им текущий номер отправляемого сообщения (например, 125).
  3. После завершения выгрузки (до получения квитанции): На узле плана обмена у нашего документа поле НомерСообщения изменится с 0 на конкретное число (номер отправленного пакета). Если автоматический обмен отработал, а у документа появился номер сообщения — это означает, что платформа физически выбрала этот объект и попыталась записать его в файл обмена.
  4. После успешного подтверждения: Когда база-приемник успешно загрузит файл и отправит назад файл-подтверждение (квитанцию), база-источник снимет регистрацию с этого документа, и он исчезнет из таблицы изменений. Чтобы исключить ошибки в итоговых данных, автоматическое сравнение бухгалтерских и налоговых проводок между базами 1С выполняется через COM-соединение.

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	РеализацияИзменения.Ссылка КАК ДокументСсылка,
    |	РеализацияИзменения.Узел КАК УзелОбмена,
    |	РеализацияИзменения.НомерСообщения КАК НомерСообщения
    |ИЗ
    |	Документ.РеализацияТоваровУслуг.Изменения КАК РеализацияИзменения
    |ГДЕ
    |	РеализацияИзменения.Ссылка = &СсылкаНаДокумент";
    
Запрос.УстановитьПараметр("СсылкаНаДокумент", ПроверяемыйДокумент);
РезультатЗапроса = Запрос.Выполнить();

Проанализируем результаты выполнения такого запроса:

Метод 2. Перенаправление обмена в локальный каталог и диагностика прав

Часто для локализации проблемы разработчики временно изменяют настройки обмена, перенаправляя выгрузку из недоступного FTP-ресурса в локальную папку на сервере. Однако здесь можно столкнуться со следующей проблемой: при ручном запуске файл в папке появляется, а при автоматическом (через регламентное задание) — каталог остается пустым.

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

Если у пользователя USR1CV8 отсутствуют права «Запись» и «Изменение» на целевой каталог, регламентное задание завершится ошибкой записи файла, и папка останется пустой. Чтобы исправить это, выполним следующие шаги:

  1. Откроем свойства целевой папки на сервере.
  2. Перейдем на вкладку «Безопасность».
  3. Добавим пользователя, от имени которого запущена служба 1C:Enterprise Server (например, USR1CV8), и предоставим ему полные права на чтение и запись.
  4. В качестве альтернативы для тестов можно использовать стандартную временную папку сервера, путь к которой можно получить программно через функцию КаталогВременныхФайлов().

Метод 3. Перехват пароля FTP с помощью отладчика

Если нам критически важно зайти на FTP-сервер обмена, но учетные данные утеряны или скрыты под маской в интерфейсе настроек 1С, мы можем программно перехватить пароль в режиме отладки.

Проанализируем, как это сделать:

  1. Запустим конфигуратор под учетной записью администратора и включим отладку.
  2. Откроем глобальный поиск (сочетание клавиш Ctrl + Shift + F) и найдем вызовы функций работы с FTP, выполнив поиск по ключевому слову Новый FTPСоединение.
  3. Перейдем в найденный модуль (обычно это общий модуль обмена данными, например, ОбменДаннымиСервер) и установим точку останова на строке инициализации соединения.
  4. В режиме «1С:Предприятие» зайдем в настройки синхронизации и нажмем кнопку «Проверить подключение».
  5. При срабатывании точки останова откроем окно «Табло» (клавиши Ctrl + Alt + W) и добавим туда переменные, содержащие адрес сервера, имя пользователя и пароль (например, ПараметрыПодключения.Пароль или ПарольFTP).

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

Метод 4. Логирование выгрузки через правила конвертации (КД 2.0)

Если обмен настроен по правилам обмена (типично для конфигураций на обычных формах, таких как УПП), мы можем внедрить трассировку выгрузки конкретного объекта непосредственно в код правил через конфигурацию «Конвертация данных».

Добавим запись в стандартный Журнал регистрации источника. Для этого откроем правила конвертации объектов (ПКО) для нужного нам документа и перейдем в обработчик события «После выгрузки». Напишем следующий код:


// Проверяем, что выгружается именно наш тестовый документ
Если Источник.Ссылка = СсылкаНаПроверяемыйДокумент Тогда
    ЗаписьЖурналаРегистрации(
        "ОбменДанными.ДетальнаяВыгрузка",
        УровеньЖурналаРегистрации.Информация,
        Источник.Метаданные(),
        Источник.Ссылка,
        "Объект успешно обработан правилом и записан в XML-файл обмена."
    );
КонецЕсли;

Этот простой метод позволит со 100% уверенностью определить, дошел ли объект до этапа сериализации в XML. Если после выполнения фонового обмена в Журнале регистрации источника появится данное событие — значит, выгрузка прошла успешно, файл был сформирован, и проблему нужно искать на этапе доставки файла или его загрузки в приемник.

Метод 5. Использование встроенных инструментов отладки БСП

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

  1. Перейдем в раздел «Администрирование» — «Синхронизация данных».
  2. Включим флаг «Режим отладки».
  3. Настроим опцию сохранения временных файлов обмена. Система позволяет сохранять промежуточные XML-файлы во внутренний регистр сведений или в выбранный каталог на сервере. При этом файлы не будут удаляться после завершения сеанса обмена.
  4. Мы сможем выгрузить эти файлы прямо из интерфейса 1С через «Монитор синхронизации данных» для последующего детального анализа структуры XML-пакета.

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

← На главную