Как при обмене данными через XML сообщать пользователю о записанных объектах в 1С

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

При выполнении обмена данными через XML с использованием универсальной загрузки часто возникает необходимость проинформировать пользователя о том, какие именно объекты были созданы или изменены в процессе импорта. Проанализируем возможные варианты реализации этой задачи — от простых методов в правилах конвертации данных до работы с фоновыми заданиями и протоколированием.

Использование метода Сообщить() в обработчиках Конвертации Данных

Самый прямой и простой способ вывести информацию — вызов системного метода Сообщить() непосредственно в обработчике события Правил Конвертации Данных (ПКД).

Рассмотрим по шагам, как это реализовать:

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

Сообщить("Записан объект: " + Строка(Объект));

Разберем нюансы данного подхода. При загрузке данных интерактивно через универсальную обработку метод Сообщить() выведет сообщение в окно сообщений пользователя для каждого обработанного объекта.

Ограничения метода: При массовой загрузке тысяч объектов вывод сообщения на каждый элемент резко снижает производительность системы и перегружает пользовательский интерфейс. Кроме того, если обмен выполняется на сервере без интерактивного сеанса, стандартный вывод сообщений не отобразится на клиенте автоматически.

Оптимизация сбора сообщений через глобальные параметры обмена

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

  1. В обработчике Перед загрузкой данных инициализируем массив для хранения сведений в структуре Параметры:

Параметры.Вставить("СписокЗагруженныхОбъектов", Новый Массив);

  1. В обработчике После загрузки каждого объекта сохраняем представление или ссылку в наш массив:

Параметры.СписокЗагруженныхОбъектов.Добавить(Строка(Объект));

  1. В обработчике После загрузки данных формируем единое уведомление и выводим его пользователю:

ТекстСообщения = "Загрузка завершена. Обработано объектов: " + Параметры.СписокЗагруженныхОбъектов.Количество();
Сообщить(ТекстСообщения);

Информирование пользователя при работе в фоновых и регламентных заданиях

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

Рассмотрим порядок действий:

  1. На стороне сервера в коде фонового задания вызовем метод Сообщить() или сохраним данные во временном хранилище с помощью ПоместитьВоВременноеХранилище().
  2. На стороне клиента при проверке статуса выполнения задания получаем накопившийся буфер сообщений с помощью метода ПолучитьСообщенияПользователю().
  3. При работе с Библиотекой Стандартных Подсистем (БСП) из подсистемы ДлительныеОперации результаты выполнения фоновой задачи возвращаются на клиент, где их можно вывести через ПоказатьОповещениеПользователю().

Альтернативные способы фиксации результатов обмена

Проанализируем ситуации, когда сообщения пользователю требуется не просто показать на экране, но и сохранить для последующего анализа:

1. Запись в Журнал регистрации
Использование системного метода ЗаписатьВЖурналРегистрации() позволяет фиксировать события записи или изменения объектов независимо от контекста выполнения (клиент или сервер).


ЗаписатьВЖурналРегистрации("Обмен данными.Загрузка",
    УровеньЖурналаРегистрации.Информация,
    ,
    Объект.Ссылка,
    "Успешно загружен объект: " + Строка(Объект));

2. Запись в специализированный регистр сведений
В типовых конфигурациях на базе БСП применяется регистр сведений «Результаты обмена данными». Можно также создать собственный регистр сведений для сохранения истории загрузки с полями: объект, дата, статус и пользователь.

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

← На главную