При выполнении обмена данными через XML с использованием универсальной загрузки часто возникает необходимость проинформировать пользователя о том, какие именно объекты были созданы или изменены в процессе импорта. Проанализируем возможные варианты реализации этой задачи — от простых методов в правилах конвертации данных до работы с фоновыми заданиями и протоколированием.
Самый прямой и простой способ вывести информацию — вызов системного метода Сообщить() непосредственно в обработчике события Правил Конвертации Данных (ПКД).
Рассмотрим по шагам, как это реализовать:
Сообщить("Записан объект: " + Строка(Объект));
Разберем нюансы данного подхода. При загрузке данных интерактивно через универсальную обработку метод Сообщить() выведет сообщение в окно сообщений пользователя для каждого обработанного объекта.
Ограничения метода: При массовой загрузке тысяч объектов вывод сообщения на каждый элемент резко снижает производительность системы и перегружает пользовательский интерфейс. Кроме того, если обмен выполняется на сервере без интерактивного сеанса, стандартный вывод сообщений не отобразится на клиенте автоматически.
Чтобы избежать падения производительности и не заспамить интерфейс, разберем более продвинутый подход с накоплением данных и единым итоговым выводом.
Параметры:
Параметры.Вставить("СписокЗагруженныхОбъектов", Новый Массив);
Параметры.СписокЗагруженныхОбъектов.Добавить(Строка(Объект));
ТекстСообщения = "Загрузка завершена. Обработано объектов: " + Параметры.СписокЗагруженныхОбъектов.Количество();
Сообщить(ТекстСообщения);
Выясним, как получать информацию, если обмен выполняется в фоновом режиме на сервере. В платформе 1С предусмотрена возможность трансляции сообщений с сервера на клиент при использовании фоновых заданий.
Рассмотрим порядок действий:
Сообщить() или сохраним данные во временном хранилище с помощью ПоместитьВоВременноеХранилище().ПолучитьСообщенияПользователю().ДлительныеОперации результаты выполнения фоновой задачи возвращаются на клиент, где их можно вывести через ПоказатьОповещениеПользователю().Проанализируем ситуации, когда сообщения пользователю требуется не просто показать на экране, но и сохранить для последующего анализа:
1. Запись в Журнал регистрации
Использование системного метода ЗаписатьВЖурналРегистрации() позволяет фиксировать события записи или изменения объектов независимо от контекста выполнения (клиент или сервер).
ЗаписатьВЖурналРегистрации("Обмен данными.Загрузка",
УровеньЖурналаРегистрации.Информация,
,
Объект.Ссылка,
"Успешно загружен объект: " + Строка(Объект));
2. Запись в специализированный регистр сведений
В типовых конфигурациях на базе БСП применяется регистр сведений «Результаты обмена данными». Можно также создать собственный регистр сведений для сохранения истории загрузки с полями: объект, дата, статус и пользователь.
Таким образом, выбор конкретного метода зависит от архитектуры обмена и требований к производительности: для разовых интерактивных загрузок достаточно метода Сообщить() или пакетирования сообщений через параметры, а для фоновых процессов предпочтительны механизмы БСП и запись в журнал регистрации.