При интеграции 1С со сторонними системами через файлы Excel нередко возникает требование строгого соответствия шаблону загрузки. Например, если принимающая программа ожидает данные строго с определенной ячейки (допустим, с отступом в одну колонку слева и три строки сверху), стандартно сформированный табличный документ не подойдет без предварительного смещения.
Разберем основные подходы к решению этой задачи: программный перенос данных в новый табличный документ, вставку пустых областей со сдвигом, а также настройки на уровне схемы компоновки данных (СКД).
Проанализируем наиболее надежный программный вариант. Если у нас уже есть сформированный объект ТабличныйДокумент (например, переменная Результат), мы можем создать пустой документ-приемник и скопировать туда всю заполненную область, явно указав начальные координаты ячеек.
Рассмотрим по шагам реализацию этого метода:
Область() по его высоте и ширине.ВставитьОбласть() и сохраняем новый документ в формате XLSX.Посмотрим на пример программного кода:
НовыйТабДок = Новый ТабличныйДокумент;
// Получаем заполненную область исходного табличного документа
ИсходнаяОбласть = Результат.Область(1, 1, Результат.ВысотаТаблицы, Результат.ШиринаТаблицы);
// Задаем область-приемник со сдвигом:
// строка 4 (отступ 3 строки сверху), колонка 2 (отступ 1 колонка слева)
ОбластьПриемник = НовыйТабДок.Область(
4,
2,
4 + Результат.ВысотаТаблицы - 1,
2 + Результат.ШиринаТаблицы - 1
);
// Копируем данные в новый документ и сохраняем в файл
НовыйТабДок.ВставитьОбласть(ИсходнаяОбласть, ОбластьПриемник);
НовыйТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
Важный момент: при использовании метода ВставитьОбласть() размеры исходной и целевой областей по количеству строк и колонок должны быть строго равны, иначе возникнет ошибка времени выполнения.
Выясним, как сдвинуть существующие данные непосредственно в исходном табличном документе без создания промежуточного объекта. Для этого используется синтаксис метода ВставитьОбласть() с третьим параметром — системным перечислением ТипСмещенияТабличногоДокумента.
Разберем программную вставку пустых строк и колонок в начало документа:
// 1. Сдвиг по вертикали: вставляем 3 пустые строки сверху
Результат.ВставитьОбласть(
Результат.Область("R1:R3"),
Результат.Область("R1:R3"),
ТипСмещенияТабличногоДокумента.ПоВертикали
);
// 2. Сдвиг по горизонтали: вставляем 1 пустую колонку слева
Результат.ВставитьОбласть(
Результат.Область("C1"),
Результат.Область("C1"),
ТипСмещенияТабличногоДокумента.ПоГоризонтали
);
// Сохраняем итоговый результат
Результат.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
При таком подходе данные таблицы автоматически сдвинутся вправо и вниз на указанное количество ячеек.
Если отчет строится на базе системы компоновки данных, смещение можно настроить непосредственно в схеме без необходимости рисовать сложный пользовательский макет:
"" КАК ПустаяКолонка). В настройках отчета на вкладке «Выбранные поля» разместим это поле самым первым в списке.Выводить заголовок = Выводить) и в тексте заголовка добавить пустые строки (символы перевода строк). Также можно добавить пустую статическую группировку перед основной таблицей.ТабличныйДокумент можно предварительно вывести нужное количество пустых строк методом Вывести().Обратим внимание на распространенные ошибки при попытке изменить координаты ячеек:
ТекущаяОбласть (например, Результат.ТекущаяОбласть.Право = 5). Свойства границ области (Верх, Низ, Лево, Право) доступны только для чтения и служат для получения текущего положения курсора в пользовательском интерфейсе.ВставитьОбласть() переносит данные ячеек и их оформление, но не меняет автоматически ширину колонок в документе-приемнике. Если сторонней программе важна точная ширина столбцов, ее следует перенести в цикле через свойство ШиринаКолонки.