При работе в 1С:Предприятие пользователи часто сталкиваются с необходимостью массового сохранения отчетов во внешние форматы, такие как Excel (*.xlsx) или PDF. По умолчанию система всегда предлагает «родной» формат Табличный документ (*.mxl). Это логично с точки зрения платформы, так как именно этот формат сохраняет все интерактивные свойства документа (группировки, расшифровки, оформление). Однако для конечного пользователя необходимость каждый раз вручную менять тип файла в диалоговом окне становится рутинной и утомительной задачей. Для решения этой проблемы можно использовать подсистему для сохранения табличных данных из форм 1С в Excel.
В этой статье мы подробно разберем, почему так происходит, и рассмотрим несколько способов решения этой задачи: от простого изменения кода до использования современных механизмов расширений.
Прежде чем переходить к правке кода, давайте выясним причину такого поведения системы. Платформа 1С проектировалась с приоритетом на сохранение целостности данных. Формат .mxl является бинарным (или XML-ориентированным в новых версиях) представлением объекта ТабличныйДокумент. Любой другой формат (Excel, PDF, HTML) — это результат конвертации, при которой могут быть потеряны некоторые специфические настройки, например, уровни группировок или возможность «провалиться» в документ (расшифровка). Поэтому «по умолчанию» всегда предлагается самый безопасный вариант.
Если ваша конфигурация находится на поддержке с возможностью изменения, мы можем вмешаться в работу общих форм, которые отвечают за вывод отчетов. Рассмотрим алгоритм, предложенный участниками обсуждения:
ОбщаяФорма.ФормаОтчета).ДоступныеФорматыСохраненияОтчета.НастройкиФорматовСохраненияТабличногоДокумента.Важный нюанс: тип файла, который подставляется в диалоговое окно первым, определяется его позицией в массиве или списке значений. Если мы программно переместим ТипФайлаТабличногоДокумента.XLSX в начало списка, система автоматически выберет его при открытии окна сохранения.
Пример логики, которую мы можем реализовать:
// Пример изменения порядка в массиве форматов
Функция НастройкиФорматовСохраненияТабличногоДокумента() Экспорт
Результат = Новый СписокЗначений;
// Добавляем нужный нам формат первым
Результат.Добавить(ТипФайлаТабличногоДокумента.XLSX, "Документ Microsoft Excel (.xlsx)");
Результат.Добавить(ТипФайлаТабличногоДокумента.MXL, "Табличный документ (.mxl)");
Результат.Добавить(ТипФайлаТабличногоДокумента.PDF, "Документ Adobe PDF (.pdf)");
Возврат Результат;
КонецФункции
Для современных версий платформы 8.3 (особенно в конфигурациях на базе БСП) лучше использовать Расширения. Это позволит не снимать основную конфигурацию с поддержки и избежать проблем при обновлении.
Проанализируем шаги по реализации через расширение:
УправлениеПечатью).&Вместо или &После для перехвата процедуры формирования списка форматов.ИндексФормата или пересобираем список так, чтобы XLSX был первым элементом.Если пользователям нужен определенный формат (например, только PDF для отправки счетов), проще всего будет вывести на форму отчета отдельную кнопку «Сохранить в PDF» или «Сохранить в Excel».
Разберем пример кода для такой кнопки. Допустим, у нас есть объект Результат (это наш ТабличныйДокумент на форме):
&НаКлиенте
Процедура СохранитьВExcel(Команда)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Выберите путь для сохранения отчета";
Диалог.ПолноеИмяФайла = "Отчет_от_" + Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd");
Диалог.Фильтр = "Лист Excel (*.xlsx)|*.xlsx";
Если Диалог.Выбрать() Тогда
// Вызываем серверную процедуру для записи
ЗаписатьДокументНаСервере(Диалог.ПолноеИмяФайла);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаписатьДокументНаСервере(ПутьКФайлу)
// Сохраняем табличный документ в выбранном формате
Результат.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры
В типовых решениях (УТ 11, БП 3.0, ERP) работа с печатными формами и отчетами централизована. Проанализируем возможности подсистемы Печать. Часто формат вывода можно переопределить в модуле менеджера объекта в процедуре ДобавитьКомандыПечати. Хотя это больше относится к печатным формам документов, для отчетов на базе СКД можно использовать механизм «Рассылка отчетов».
Рассылка отчетов — это мощный штатный инструмент. Мы можем настроить автоматическую генерацию отчета в формате XLSX и его сохранение в определенную сетевую папку. В этом случае пользователю вообще не нужно открывать диалог сохранения — файл будет ждать его в папке или придет на почту.
Если вы создаете свой собственный инструмент выгрузки (поможет универсальная выгрузка любых данных в XLSX), помните важное правило работы с объектом ДиалогВыбораФайла: свойство Фильтр определяет не только доступные расширения, но и выбор по умолчанию. Посмотрим на пример:
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
// То расширение, которое добавлено в строку фильтра ПЕРВЫМ,
// будет выбрано в окне сохранения автоматически.
Диалог.Фильтр = "Excel файлы (*.xlsx)|*.xlsx|Все файлы (*.*)|*.*";
В обсуждении упоминалось использование редактора реестра. Важно понимать, что 1С не хранит настройки формата по умолчанию в реестре Windows. Эти параметры жестко зашиты в программном коде платформы или логике конфигурации (БСП). Поэтому попытки изменить что-то через regedit в данном случае бессмысленны.
Мы рассмотрели различные подходы к решению проблемы. Выбор метода зависит от ваших полномочий и версии программы:
Alt + Ф + К — файл, сохранить копию) и последующий выбор формата мышью.Помните, что при принудительной смене формата на .xlsx вы берете на себя ответственность за возможную потерю форматирования, специфичного для 1С. Всегда проверяйте итоговый файл на корректность отображения данных после внесения правок в систему.