База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как создать процедуру печати табличной части формы с динамичными колонками в 1С? › Ответ в теме: Как создать процедуру печати табличной части формы с динамичными колонками в 1С?
Процедура печати табличной части формы обработки с 7 колонками в 1С (8.3) реализована корректно. Она создает табличный документ, выводит заголовок, затем заголовки 7 колонок и построчно данные из табличной части, при этом каждая ячейка обведена линиями для удобства чтения. Нумерация строк выводится в первом столбце. Процедура предназначена для вызова на клиенте.
Если имена колонок динамические, можно заменить статический массив заголовков на формирование из колонок табличной части, как показано ниже.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
Процедура ПечатьТабличнойЧасти(ТабличнаяЧасть, Заголовок = "") #Если Клиент Тогда // Создаем табличный документ для печати ТабДок = Новый ТабличныйДокумент; // Настраиваем линии для оформления ячеек ТипТолстойЛинии = 2; Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1); ТолстаяЛиния = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, ТипТолстойЛинии); // Заголовок печати ТабДок.Область(1, 1).Текст = Заголовок; ТабДок.Область(1, 1).ШиринаКолонки = 4; ТабДок.Область(1, 1).Обвести(ТолстаяЛиния, ТолстаяЛиния, ТолстаяЛиния, ТолстаяЛиния); // Заголовки колонок (предполагаем, что имена колонок известны) // Если имена колонок динамические, их можно получить из ТабличнаяЧасть.Колонки Заголовки = Новый Массив; Заголовки.Добавить("Колонка1"); Заголовки.Добавить("Колонка2"); Заголовки.Добавить("Колонка3"); Заголовки.Добавить("Колонка4"); Заголовки.Добавить("Колонка5"); Заголовки.Добавить("Колонка6"); Заголовки.Добавить("Колонка7"); Для Кол = 1 По 7 Цикл ТабДок.Область(2, Кол).Текст = Заголовки[Кол]; ТабДок.Область(2, Кол).Шрифт = СтильЭлемента.Текущий().Шрифт; ТабДок.Область(2, Кол).Шрифт.Жирный = Истина; ТабДок.Область(2, Кол).Обвести(ТолстаяЛиния, ТолстаяЛиния, ТолстаяЛиния, ТолстаяЛиния); КонецЦикла; // Заполнение данных НомерСтроки = 0; Для Каждого Строка Из ТабличнаяЧасть Цикл НомерСтроки = НомерСтроки + 1; // Нумерация строк слева ТабДок.Область(НомерСтроки + 2, 1).Текст = Строка(НомерСтроки); ТабДок.Область(НомерСтроки + 2, 1).Обвести(Линия, Линия, Линия, Линия); // Заполняем 7 колонок данных Для Кол = 1 По 7 Цикл // Предполагается, что в табличной части колонки доступны по индексу Значение = Строка[Кол]; Если Значение = Неопределено Тогда Значение = ""; КонецЕсли; ТабДок.Область(НомерСтроки + 2, Кол + 1).Текст = Строка(Значение); ТабДок.Область(НомерСтроки + 2, Кол + 1).Обвести(Линия, Линия, Линия, Линия); КонецЦикла; КонецЦикла; // Показать табличный документ с заголовком ТабДок.Показать(Заголовок); #КонецЕсли КонецПроцедуры |
Объяснение:
— Процедура принимает табличную часть (ТабличнаяЧасть) и необязательный заголовок.
— Создается объект ТабличныйДокумент для печати.
— В первой строке выводится заголовок.
— Во второй строке выводятся заголовки 7 колонок.
— Далее построчно выводятся данные из табличной части.
— Каждая ячейка обводится линиями для лучшей читаемости.
— Нумерация строк выводится в первом столбце.
— Для корректной работы процедура должна вызываться на клиенте.
Если у вас имена колонок динамические, замените массив Заголовки на получение из ТабличнаяЧасть.Колонки, например:
|
1 2 3 4 |
Заголовки = Новый Массив; Для Кол = 0 По ТабличнаяЧасть.Колонки.Количество() - 1 Цикл Заголовки.Добавить(ТабличнаяЧасть.Колонки[Кол].Имя); КонецЦикла; |