Как сдвинуть результат выгрузки в Excel на несколько ячеек в 1С

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

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

Разберем основные подходы к решению этой задачи: программный перенос данных в новый табличный документ, вставку пустых областей со сдвигом, а также настройки на уровне схемы компоновки данных (СКД).

Способ 1. Перенос данных в новый табличный документ со сдвигом координат

Проанализируем наиболее надежный программный вариант. Если у нас уже есть сформированный объект ТабличныйДокумент (например, переменная Результат), мы можем создать пустой документ-приемник и скопировать туда всю заполненную область, явно указав начальные координаты ячеек.

Рассмотрим по шагам реализацию этого метода:

  1. Получаем заполненную область исходного документа с помощью метода Область() по его высоте и ширине.
  2. Определяем координаты области-приемника в новом документе с учетом требуемого отступа (для отступа в 3 строки сверху берем строку 4, для отступа в 1 колонку слева — колонку 2).
  3. Вызываем метод ВставитьОбласть() и сохраняем новый документ в формате XLSX.

Посмотрим на пример программного кода:


НовыйТабДок = Новый ТабличныйДокумент;

// Получаем заполненную область исходного табличного документа
ИсходнаяОбласть = Результат.Область(1, 1, Результат.ВысотаТаблицы, Результат.ШиринаТаблицы);

// Задаем область-приемник со сдвигом: 
// строка 4 (отступ 3 строки сверху), колонка 2 (отступ 1 колонка слева)
ОбластьПриемник = НовыйТабДок.Область(
    4, 
    2, 
    4 + Результат.ВысотаТаблицы - 1, 
    2 + Результат.ШиринаТаблицы - 1
);

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

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

Способ 2. Вставка пустых областей со смещением в исходный документ

Выясним, как сдвинуть существующие данные непосредственно в исходном табличном документе без создания промежуточного объекта. Для этого используется синтаксис метода ВставитьОбласть() с третьим параметром — системным перечислением ТипСмещенияТабличногоДокумента.

Разберем программную вставку пустых строк и колонок в начало документа:


// 1. Сдвиг по вертикали: вставляем 3 пустые строки сверху
Результат.ВставитьОбласть(
    Результат.Область("R1:R3"), 
    Результат.Область("R1:R3"), 
    ТипСмещенияТабличногоДокумента.ПоВертикали
);

// 2. Сдвиг по горизонтали: вставляем 1 пустую колонку слева
Результат.ВставитьОбласть(
    Результат.Область("C1"), 
    Результат.Область("C1"), 
    ТипСмещенияТабличногоДокумента.ПоГоризонтали
);

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

При таком подходе данные таблицы автоматически сдвинутся вправо и вниз на указанное количество ячеек.

Способ 3. Формирование отступов средствами СКД

Если отчет строится на базе системы компоновки данных, смещение можно настроить непосредственно в схеме без необходимости рисовать сложный пользовательский макет:

  1. Сдвиг слева на одну колонку: в наборе данных запроса или на вкладке «Вычисляемые поля» добавим пустое поле (например, выражение "" КАК ПустаяКолонка). В настройках отчета на вкладке «Выбранные поля» разместим это поле самым первым в списке.
  2. Сдвиг сверху на три строки: в настройках отчета на вкладке «Другие настройки» можно включить вывод заголовка (параметр Выводить заголовок = Выводить) и в тексте заголовка добавить пустые строки (символы перевода строк). Также можно добавить пустую статическую группировку перед основной таблицей.
  3. При программном выводе СКД: перед запуском процессора вывода в результирующий ТабличныйДокумент можно предварительно вывести нужное количество пустых строк методом Вывести().

Частые ошибки при работе с областями

Обратим внимание на распространенные ошибки при попытке изменить координаты ячеек:

  1. Попытка изменить координаты через свойство ТекущаяОбласть (например, Результат.ТекущаяОбласть.Право = 5). Свойства границ области (Верх, Низ, Лево, Право) доступны только для чтения и служат для получения текущего положения курсора в пользовательском интерфейсе.
  2. Потеря ширины колонок при переносе. Метод ВставитьОбласть() переносит данные ячеек и их оформление, но не меняет автоматически ширину колонок в документе-приемнике. Если сторонней программе важна точная ширина столбцов, ее следует перенести в цикле через свойство ШиринаКолонки.
← На главную