При работе с печатными формами и отчетами в 1С разработчики часто сталкиваются с двумя классическими задачами: как сделать так, чтобы текст в ячейке не обрезался, а переносился на новую строку, и как вывести в одну таблицу данные, полученные из нескольких независимых запросов. Давайте разберем эти задачи по порядку.
Если у вас есть параметр в макете, который должен заполняться длинной строкой, стандартного вывода может быть недостаточно — текст будет просто выходить за границы области или обрезаться. Рассмотрим, как заставить ячейку «тянуться» вниз.
Размещение текста установите значение Переносить. Это даст системе команду разбивать длинную строку на строки внутри ячейки.Переносить недостаточно. Чтобы табличный документ понимал, что строку нужно растянуть по вертикали, необходимо программно задать свойство АвтоВысотаСтроки.Рассмотрим пример кода, который необходимо вызвать после формирования табличного документа:
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаДанных");
ОбластьМакета.Параметры.БольшойТекст = МойДлинныйТекст;
ТабличныйДокумент.Вывести(ОбластьМакета);
// Установка автоматической высоты для последней выведенной строки
ТабличныйДокумент.Области.СтрокаДанных.АвтоВысотаСтроки = Истина;
Помните, что ТабличныйДокумент не умеет динамически расширять ширину ячейки вправо — ширина колонок жестко задана в макете. Если текста много, он будет увеличивать высоту строки, что является единственным верным решением для табличного документа.
Частая ошибка новичков заключается в попытке выводить результаты трех разных запросов последовательно методом Вывести(). В результате данные «наслаиваются» друг на друга или выстраиваются в одну длинную вертикальную колонку. Чтобы выровнять данные из трех запросов в одну строку (в три соседних столбца), разберем два эффективных способа.
Этот метод является наиболее надежным и «чистым» с точки зрения архитектуры. Мы собираем все данные в промежуточную структуру, а затем выводим её.
ТаблицуЗначений с нужным количеством колонок (в нашем случае — три).ТаблицыЗначений.Преимущество этого метода в том, что вы полностью контролируете структуру данных до того, как они попадут в визуальную форму.
Если данных немного или вы хотите быстро решить задачу без создания промежуточной ТаблицыЗначений, можно воспользоваться методом прямого доступа к уже сформированному табличному документу.
Логика работы следующая: вы выводите первый запрос как обычно, а затем, зная координаты областей, программно заполняете ячейки во втором и третьем столбцах, обращаясь к объекту ТабличныйДокумент по индексу строк и колонок.
// Пример логики прямого доступа
Для Индекс = 1 По КоличествоСтрок Цикл
Ячейка = ТабличныйДокумент.Область(Индекс, 2); // Строка Индекс, Колонка 2
Ячейка.Текст = ДанныеВторогоЗапроса[Индекс];
КонецЦикла;
Однако будьте внимательны: этот метод требует тщательного контроля индексов, так как малейшая ошибка в расчетах приведет к тому, что данные попадут не в ту ячейку.
При разработке отчетов с большим объемом текста и несколькими наборами данных придерживайтесь следующих правил:
АвтоВысотаСтроки для ячеек с динамическим текстом.ТаблицаЗначений — это позволяет избежать «хаоса» при выводе.Систему Компоновки Данных (СКД). Она предоставляет инструмент Объединение наборов данных, который позволяет связывать разные запросы на уровне платформы без написания сложного кода для обхода строк и колонок.Разбираясь с этой задачей, вы учитесь не просто выводить данные, а проектировать структуру отчета так, чтобы он был предсказуемым и легко поддерживаемым в будущем.