Как изменить тип файла по умолчанию при сохранении отчета в 1С:Предприятие

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

При работе в 1С:Предприятие пользователи часто сталкиваются с необходимостью массового сохранения отчетов во внешние форматы, такие как Excel (*.xlsx) или PDF. По умолчанию система всегда предлагает «родной» формат Табличный документ (*.mxl). Это логично с точки зрения платформы, так как именно этот формат сохраняет все интерактивные свойства документа (группировки, расшифровки, оформление). Однако для конечного пользователя необходимость каждый раз вручную менять тип файла в диалоговом окне становится рутинной и утомительной задачей. Для решения этой проблемы можно использовать подсистему для сохранения табличных данных из форм 1С в Excel.

В этой статье мы подробно разберем, почему так происходит, и рассмотрим несколько способов решения этой задачи: от простого изменения кода до использования современных механизмов расширений.

Анализируем причину: почему всегда MXL?

Прежде чем переходить к правке кода, давайте выясним причину такого поведения системы. Платформа 1С проектировалась с приоритетом на сохранение целостности данных. Формат .mxl является бинарным (или XML-ориентированным в новых версиях) представлением объекта ТабличныйДокумент. Любой другой формат (Excel, PDF, HTML) — это результат конвертации, при которой могут быть потеряны некоторые специфические настройки, например, уровни группировок или возможность «провалиться» в документ (расшифровка). Поэтому «по умолчанию» всегда предлагается самый безопасный вариант.

Способ 1. Изменение порядка форматов в общей форме (для программистов)

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

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

Важный нюанс: тип файла, который подставляется в диалоговое окно первым, определяется его позицией в массиве или списке значений. Если мы программно переместим ТипФайлаТабличногоДокумента.XLSX в начало списка, система автоматически выберет его при открытии окна сохранения.

Пример логики, которую мы можем реализовать:


// Пример изменения порядка в массиве форматов
Функция НастройкиФорматовСохраненияТабличногоДокумента() Экспорт
    Результат = Новый СписокЗначений;
    // Добавляем нужный нам формат первым
    Результат.Добавить(ТипФайлаТабличногоДокумента.XLSX, "Документ Microsoft Excel (.xlsx)");
    Результат.Добавить(ТипФайлаТабличногоДокумента.MXL, "Табличный документ (.mxl)");
    Результат.Добавить(ТипФайлаТабличногоДокумента.PDF, "Документ Adobe PDF (.pdf)");
    Возврат Результат;
КонецФункции

Способ 2. Использование расширений конфигурации (современный метод)

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

Проанализируем шаги по реализации через расширение:

  1. Создаем новое расширение и добавляем в него нужную общую форму или общий модуль (например, УправлениеПечатью).
  2. Используем аннотацию &Вместо или &После для перехвата процедуры формирования списка форматов.
  3. В коде расширения принудительно устанавливаем ИндексФормата или пересобираем список так, чтобы XLSX был первым элементом.

Способ 3. Создание кастомной кнопки сохранения

Если пользователям нужен определенный формат (например, только PDF для отправки счетов), проще всего будет вывести на форму отчета отдельную кнопку «Сохранить в PDF» или «Сохранить в Excel».

Разберем пример кода для такой кнопки. Допустим, у нас есть объект Результат (это наш ТабличныйДокумент на форме):


&НаКлиенте
Процедура СохранитьВExcel(Команда)
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.Заголовок = "Выберите путь для сохранения отчета";
    Диалог.ПолноеИмяФайла = "Отчет_от_" + Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd");
    Диалог.Фильтр = "Лист Excel (*.xlsx)|*.xlsx";
    
    Если Диалог.Выбрать() Тогда
        // Вызываем серверную процедуру для записи
        ЗаписатьДокументНаСервере(Диалог.ПолноеИмяФайла);
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ЗаписатьДокументНаСервере(ПутьКФайлу)
    // Сохраняем табличный документ в выбранном формате
    Результат.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры

Способ 4. Библиотека стандартных подсистем (БСП)

В типовых решениях (УТ 11, БП 3.0, ERP) работа с печатными формами и отчетами централизована. Проанализируем возможности подсистемы Печать. Часто формат вывода можно переопределить в модуле менеджера объекта в процедуре ДобавитьКомандыПечати. Хотя это больше относится к печатным формам документов, для отчетов на базе СКД можно использовать механизм «Рассылка отчетов».

Рассылка отчетов — это мощный штатный инструмент. Мы можем настроить автоматическую генерацию отчета в формате XLSX и его сохранение в определенную сетевую папку. В этом случае пользователю вообще не нужно открывать диалог сохранения — файл будет ждать его в папке или придет на почту.

Способ 5. Особенности программного управления ДиалогВыбораФайла

Если вы создаете свой собственный инструмент выгрузки (поможет универсальная выгрузка любых данных в XLSX), помните важное правило работы с объектом ДиалогВыбораФайла: свойство Фильтр определяет не только доступные расширения, но и выбор по умолчанию. Посмотрим на пример:


Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
// То расширение, которое добавлено в строку фильтра ПЕРВЫМ, 
// будет выбрано в окне сохранения автоматически.
Диалог.Фильтр = "Excel файлы (*.xlsx)|*.xlsx|Все файлы (*.*)|*.*";

Выясним причину неудач: почему настройки реестра не помогают?

В обсуждении упоминалось использование редактора реестра. Важно понимать, что 1С не хранит настройки формата по умолчанию в реестре Windows. Эти параметры жестко зашиты в программном коде платформы или логике конфигурации (БСП). Поэтому попытки изменить что-то через regedit в данном случае бессмысленны.

Резюме и рекомендации

Мы рассмотрели различные подходы к решению проблемы. Выбор метода зависит от ваших полномочий и версии программы:

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

← На главную