При автоматизации регулярной отправки прайс-листов и аналитических сводок в конфигурациях на базе БСП (включая 1С:Управление торговлей 11) часто возникает необходимость использовать внешний отчет с произвольным кодом формирования и отправлять его через типовой механизм Рассылка отчетов. Дополнительно разработчики сталкиваются с проблемой, когда сформированный документ при выгрузке в файл Excel сохраняет боковую панель уровней группировок, даже если на форме они скрыты. Рассмотрим по шагам, как решить обе эти задачи.
Механизм подсистемы Рассылка отчетов работает исключительно на сервере в фоновом режиме через регламентные задания. Чтобы внешний отчет успешно подключился к рассылке и корректно формировался по расписанию, выполним следующие действия:
СведенияОВнешнейОбработке(), указав вид ДополнительныйОтчет. Зарегистрируем отчет в информационной базе через меню Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Отключаем типовое формирование отчета средствами СКД
СтандартнаяОбработка = Ложь;
// Формируем отчет программно с выводом в переданный табличный документ
СформироватьТабличныйДокумент(ДокументРезультат);
КонецПроцедуры
Важно: Весь код формирования должен выполняться строго на сервере без обращения к клиентским методам, формам и интерактивным диалогам, иначе регламентное задание рассылки завершится аварийно.
Разберем, почему визуальное скрытие группировок в 1С не решает проблему при экспорте. Свойство ОтображатьГруппировки или соответствующий пункт меню Таблица управляют лишь отображением элементов интерфейса (плюсов и минусов) на экране в окне 1С. При сохранении в формат .xlsx или .xls платформа переносит физическую структуру строк макета, и Microsoft Excel автоматически строит панель структуры группировки слева.
Чтобы результирующий файл в Excel не содержал уровней группировки, применим один из следующих подходов:
// Снимаем структуру группировок со всей области документа
ДокументРезультат.Область().Разгруппировать();
ТабличныйДокумент.Вывести(), не передаем параметр уровня группировки либо оставляем его равным нулю:
// Вывод области без создания иерархических уровней
ДокументРезультат.Вывести(ОбластьСтрока);
Использование обработчика ПриКомпоновкеРезультата в сочетании с методом Разгруппировать() гарантирует, что внешний отчет будет корректно отправляться планировщиком задач, а получатели увидят чистый файл Excel без навязчивой боковой панели структуры.