При работе в 1С 7.7 программисты часто сталкиваются с неприятной особенностью штатного механизма «Сохранить как»: при попытке выгрузить печатную форму в формате Excel (XLS) текст в ячейках обрезается до 256 символов, а настройки переносов и автовысоты строк бесследно исчезают. Разберем, почему это происходит и какими способами можно обойти это ограничение.
Для начала проанализируем ситуацию и выясним причину. Встроенный конвертер 1С 7.7 использует крайне устаревший формат BIFF (Binary Interchange File Format), соответствующий спецификациям Excel 95 или Excel 97. В этих старых форматах на уровне архитектуры заложено ограничение: текстовое поле в ячейке не может превышать 255-256 символов. Кроме того, флаги форматирования (такие как WrapText — перенос по словам) передаются некорректно или вовсе игнорируются штатным движком 1С при конвертации .mxl в .xls.
Как показывает практика и обсуждение на форуме, это самый надежный и эффективный метод. Yoksel — это мощный инструмент, который заменяет стандартный табличный редактор 1С 7.7 и предоставляет расширенные возможности для работы с файлами Excel.
Рассмотрим преимущества этого метода:
Для реализации этого метода нам потребуется подключить компоненту. Примерный алгоритм работы в коде 1С будет выглядеть следующим образом:
// Создаем объект Йокселя
Конвертер = СоздатьОбъект("Поток.ТабличныйДокумент");
// Загружаем текущую таблицу в Йоксель
Конвертер.ЗагрузитьИзТаблицы(Таб);
// Сохраняем в файл формата Excel 97
Конвертер.Записать("C:\MyFiles\Report.xls", 1);
Проанализируем этот код: мы сначала передаем сформированный объект Таблица во внутренний формат компоненты, а затем вызываем метод Записать, который формирует полноценный двоичный файл XLS, лишенный ограничений 1С.
Если по каким-то причинам вы не можете использовать внешние компоненты (например, из-за политики безопасности компании), существует «хитрый» способ обхода ограничений через промежуточный формат. Мы можем сохранить таблицу в формате HTML.
Давайте разберем по шагам, почему это работает:
<br> или стилями, которые 1С формирует достаточно корректно.Алгоритм действий для пользователя:
В режиме «Предприятие» выберите меню Файл — Сохранить как, укажите тип файла HTML (*.htm, *.html). После сохранения просто откройте этот файл с помощью Excel и пересохраните его в формате .xlsx.
Этот метод подразумевает прямое программирование приложения Excel из кода 1С. Мы не используем встроенную конвертацию, а буквально «рисуем» таблицу в Excel построчно.
Посмотрим на пример реализации такого процесса:
Попытка
Эксель = СоздатьОбъект("Excel.Application");
Исключение
Сообщить("Excel не установлен!");
Возврат;
КонецПопытки;
Книга = Эксель.Workbooks.Add();
Лист = Книга.Worksheets(1);
// Проходим по строкам и колонкам таблицы 1С
Для Стр = 1 По Таб.ВысотаТаблицы() Цикл
Для Кол = 1 По Таб.ШиринаТаблицы() Цикл
ТекстЯчейки = Таб.Область(Стр, Кол).Текст;
Лист.Cells(Стр, Кол).Value = ТекстЯчейки;
// Включаем перенос текста, если строка длинная
Если СтрДлина(ТекстЯчейки) > 50 Тогда
Лист.Cells(Стр, Кол).WrapText = -1; // Аналог True
КонецЕсли;
КонецЦикла;
КонецЦикла;
Эксель.Visible = 1;
Важный нюанс: при программном заполнении через COM-объект крайне важно следить за символами переноса строки. В 1С 7.7 это константа РазделительСтрок (комбинация символов CHR(13) + CHR(10)). Excel понимает эти символы и при установленном свойстве WrapText = -1 корректно отобразит ячейку как многострочную.
Рассмотрим еще одну стратегию, упомянутую в обсуждении. Вместо того чтобы выгружать готовую таблицу из 1С, мы можем заранее подготовить файл .xls с красивым оформлением, рамками, настроенными шрифтами и формулами. В этом файле мы оставляем пустые ячейки-маркеры.
В коде 1С мы открываем этот шаблон через COM, находим нужные ячейки и заполняем их данными. Это позволяет избежать проблем с форматированием в 1С, так как форматирование изначально задано в самом файле Excel. Этот метод идеально подходит для сложных отчетов и официальных бланков.
Чтобы выгрузка была максимально качественной, проанализируем следующие советы:
Rows(...).AutoFit().Подводя итог, можно сказать, что для массовой выгрузки больших таблиц лучшим выбором будет Yoksel. Если же вам нужно быстро сохранить одну форму без установки дополнительных компонент — используйте экспорт через HTML. Для создания сложных, регламентированных отчетов с идеальным дизайном лучше всего подойдет работа с шаблонами Excel через COM.