Часто разработчики сталкиваются с ситуацией, когда печатная форма, идеально настроенная в 1С с использованием свойства АвтоМасштаб, при сохранении в файл формата .xls или .xlsx теряет свои настройки страницы. В результате пользователь видит в Excel «разъехавшуюся» таблицу, которая не умещается на один лист при печати. Давайте разберем, почему это происходит и как мы можем решить эту задачу.
Важно понимать, что АвтоМасштаб в 1С — это встроенная функция платформы, которая управляет выводом документа на принтер средствами самой 1С. При сохранении в Excel происходит экспорт данных в сторонний формат. Формат Excel имеет свою собственную модель параметров печати (PageSetup), которая не считывает напрямую «автомасштаб» из 1С. Excel применяет настройки «по умолчанию» для новых документов, поэтому информация о том, что документ нужно «сжать» до ширины одной страницы, просто теряется в процессе конвертации.
Самый надежный и «чистый» способ — это подогнать макет под стандартные размеры листа А4. Если мы изначально проектируем печатную форму так, что ее общая ширина (сумма ширин колонок) укладывается в доступную область печати, нам не потребуется программное вмешательство.
Рекомендации по верстке:
Ландшафт.Этот метод хорош тем, что документ будет выглядеть одинаково хорошо как при прямой печати из 1С, так и после сохранения в любой формат, включая PDF и Excel.
Если изменить макет невозможно или таблица динамически меняет количество столбцов, мы можем использовать мощный инструмент — COMОбъект("Excel.Application"). С его помощью мы можем «докрутить» настройки уже сохраненного файла Excel программным путем.
Пошаговый алгоритм действий:
ТабДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX).ActiveSheet и обращаемся к его свойству PageSetup.Рассмотрим пример кода, который поможет нам реализовать эту логику:
// Предположим, что файл уже сохранен на диске
Попытка
Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.Workbooks.Open(ПутьКФайлу);
Лист = Книга.Worksheets(1);
// Настройка параметров страницы
Лист.PageSetup.Zoom = Ложь; // Отключаем фиксированный масштаб
Лист.PageSetup.FitToPagesWide = 1; // Уместить по ширине в 1 страницу
Лист.PageSetup.FitToPagesTall = 0; // Не ограничивать высоту (авто)
Книга.Save();
Книга.Close();
Excel.Quit();
Исключение
// Обработка ошибок, если Excel не установлен или файл занят
Сообщить("Ошибка при настройке Excel: " + ОписаниеОшибки());
КонецПопытки;
При использовании COMОбъект следует учитывать несколько критических факторов:
Quit(), иначе в памяти могут остаться «зависшие» процессы excel.exe..mxl. В этом формате все настройки страницы, включая масштаб и поля, сохраняются в полном соответствии с настройками табличного документа.Проанализировав оба варианта, мы приходим к выводу: для идеальной печати лучше всего стремиться к верстке макета «в размер», а для автоматизации процессов, где верстка нестабильна, использовать COM-объекты для финализации файла Excel. Сочетание этих подходов позволит пользователям получать всегда корректно отформатированные документы.