Почему при сохранении отчета 1С в Excel появляется больше столбцов, чем в макете?

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

При разработке и доработке печатных форм и отчетов в 1С разработчики часто сталкиваются с неприятным поведением: на экране в режиме 1С:Предприятие табличный документ выглядит аккуратно и содержит фиксированное количество столбцов, однако после сохранения в формат Excel (XLS, XLSX) или открытия в табличных процессорах (MS Excel, OpenOffice Calc) колонки начинают дробиться на две, три и более мелких частей. В результате лист превращается в сетку из множества мелких ячеек, объединенных между собой, что делает дальнейшую работу с таблицей крайне неудобной.

Разберем детально физику этого процесса, выясним причину такого поведения платформы и рассмотрим способы исправления макетов и программного кода.

В чем причина разделения колонок при экспорте

Проанализируем ключевое архитектурное различие между табличным документом 1С (ТабличныйДокумент) и листом Excel:

  1. Табличный документ 1С поддерживает концепцию независимых форматов строк. Это означает, что строка 1–5 (шапка) может иметь собственное количество колонок и их ширину, строка 6–15 (тело таблицы) — совершенно другую ширину колонок, а строка 16–20 (подвал или подписи) — третью сетку разметки.
  2. Электронная таблица Excel имеет строго единую сквозную координатную сетку колонок по всей высоте листа. Колонка A или B имеет одну и ту же ширину от первой до последней строки листа.

Когда платформа 1С выполняет конвертацию табличного документа в формат Excel, она проецирует абсолютно все вертикальные границы колонок со всех строк документа на одну общую шкалу. Если хотя бы в одной строке (в шапке, подвале или даже пустой скрытой секции) вертикальная граница смещена относительно основной таблицы хотя бы на один пиксель, Excel вынужден создать дополнительный столбец для сохранения визуального оформления, а остальные ячейки объединить (Merge Cells).

Поиск проблемных областей в макете

Разберем по шагам, как локализовать строки, нарушающие единую сетку таблицы:

  1. Откроем макет отчета или печатной формы в Конфигураторе.
  2. Обратим внимание на левую служебную панель (рядом с номерами строк). Если для группы строк применен собственный формат, слева отображаются специальные вертикальные маркеры (скобки или полосы), отделяющие эти строки от остального документа.
  3. Проверим все секции макета: Шапка, Строка, Итоги, Подвал, Подписи. Часто бывает так, что разработчик настраивает идеальные ширины колонок в области данных, но оставляет область подвала со стандартной или произвольной шириной колонок.

Исправление формата строк в Конфигураторе

Чтобы результирующий файл в Excel содержал ровно столько же колонок, сколько и визуальный отчет, необходимо привести все секции макета к единому формату строк:

  1. Выделим весь макет целиком, нажав комбинацию клавиш Ctrl + A.
  2. В главном меню перейдем в пункт: Таблица → Формат строк → Удалить формат строк (или вызовем контекстное меню на номерах строк и выберем соответствующую команду).
  3. После удаления локальных форматов все строки макета подчинятся единой базовой линейке колонок.
  4. Скорректируем оформление шапок и подвалов исключительно с помощью операции Объединить над ячейками базовой сетки, не создавая новые форматы строк для отдельных областей.

Программный вывод секций и типовые процедуры

Иногда сам макет выглядит чистым, но деление колонок все равно происходит при выводе отчета из встроенного языка. Рассмотрим, как это происходит.

В типовых конфигурациях (например, УПП, Комплексная автоматизация или ERP) вывод подписей и колонтитулов часто выполняется отдельными процедурами общих модулей. Посмотрим на типовой вызов:


БухгалтерскиеОтчеты.СформироватьИВывестиПодписиОтчета(ЭтотОбъект, ДокументРезультат, ВысотаЗаголовка, ПоказыватьПодписи);

Если в типовой процедуре к результирующему документу ДокументРезультат присоединяется секция с подписями, которая внутри себя содержит собственный формат колонок (или программно вызывается метод СоздатьФорматСтрок()), результирующий документ получает разорванную сетку. Даже если флаг вывода подписей отключен, но сама область неявно выводится или форматирует строки документа, это испортит экспорт в Excel.

Для устранения проблемы проанализируем код формирования отчета:

  1. Убедимся, что типовые процедуры печати подписей не выводят пустые области, меняющие сетку макета.
  2. При программном формировании отчетов избегаем необоснованного использования метода СоздатьФорматСтрок() на объекте ТабличныйДокумент:

// Если требуется задать ширину колонок для всего документа:
ДокументРезультат.Область("C1").ШиринаКолонки = 25;
ДокументРезультат.Область("C2").ШиринаКолонки = 15;

// Избегаем создания отдельного формата для подвала:
// Не рекомендуется: ДокументРезультат.Область("R10:R15").СоздатьФорматСтрок();

Альтернативные способы сохранения чистых данных

Если отчет предназначен исключительно для дальнейшей математической или машинной обработки пользователем в Excel, и сложная визуальная верстка (шапки, логотипы, рамки) не требуется, рассмотрим следующие альтернативы:

  1. Выгрузка в CSV: Данный формат полностью исключает форматирование макета и сохраняет исключительно плоскую таблицу данных.
  2. Прямое заполнение книги Excel через COM-соединение: Выгрузка результата запроса или таблицы значений напрямую в объект Excel.Application позволяет построчно заполнить лист без дробления ячеек.
← На главную