Нумерация колонок таблицы (при формировании через СКД)

20.06.18

Разработка - СКД

При формировании таблицы через СКД бывает необходимо пронумеровать колонки. Привожу один из возможных вариантов решения.

При формировании отчета-таблицы через СКД мне потребовалось нумеровать колонки. Стандартного функционала для этого не нашел, поэтому сделал следующее:

  • организовал программный вывод отчета (т.к. первоначально планировалось, что СКД все будет делать сама);
  • "допилил" сформированный в ТабличныйДокумент отчет, заменив первые несколько строк на нужный мне макет шапки (благо СКД "фиксирует" шапку отчета сама, что позволяет определить ее высоту);

Процедура Сформировать(Результат = Неопределено, ДанныеРасшифровки = Неопределено, ВыводВФормуОтчета = Истина) Экспорт

Результат.Очистить();

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

ЭтотОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки());

// Сгенерируем макет компоновки данных при помощи компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
//Создадим и инициализируем процессор компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);

//
ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.УстановитьДокумент(ТабДокДанныеОтчета);
ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.Вывести(ПроцессорКомпоновки);

// Выводим свою шапку таблицы
ШапкаТаблицы = ЭтотОбъект.ПолучитьМакет("ШапкаТаблицы");
Результат.Вывести(Шапкатаблицы);

// Выводим данные отчета
ОблШапкаСКД = ТабДокДанныеОтчета.Область("R1:R" + ТабДокДанныеОтчета.ФиксацияСверху);
ТабДокДанныеОтчета.УдалитьОбласть(ОблШапкаСКД, ТипСмещенияТабличногоДокумента.ПоВертикали);
Результат.Вывести(ТабДокДанныеОтчета);
Результат.ФиксацияСверху = 2;

КонецПроцедуры

Так же на скрине отмечена область "Группировок СКД", выведенная на форму отчета. Чтобы не париться с организацией различный вариантов отчета, предлагаю делать сразу несколько веток в одном варианте. При этом для "включения" нужного варианта необходимо всего лишь "включить" головной узел нужной ветки и выключить все остальные головные узлы. При этом, даже если высота шапки будет изменяться, мы сможем вставить нужный нам макет шапки с нумерацией.

Вступайте в нашу телеграмм-группу Инфостарт

скд нумерация колонок табличный документ колонки номер

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    245767    1350    419    

1128

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    4944    279    shapa_pro    25    

66

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    15550    ovetgana    112    

105

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    9111    krasnoshchekovpavel    5    

66

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    8297    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    15473    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

СКД – инструмент, на базе которого в современных конфигурациях реализованы практически все отчеты. СКД используется в динамических списках, печатных формах и универсальных механизмах. Если построить простейший отчет может каждый разработчик, то с нюансами знакомы далеко не все. Расскажем о неочевидных на первый взгляд приемах, способных значительно повысить качество отчетов.

24.12.2024    13057    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    9502    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Hany 06.04.12 14:14 Сейчас в теме
А почему не нарисовать макет самому вручную и не подменять программно шапку вообще? ;)
Прикрепленные файлы:
2. Поручик 4605 06.04.12 20:37 Сейчас в теме
(1) Насколько это будет универсально?
3. Hany 06.04.12 21:50 Сейчас в теме
(2)
Достаточно универсально.
В макете можно переопределить формат вывода всего макета, который создается СКД автоматически.
Для такой цели, как описано в данной публикации, использование макета - единственно красивый способ. Программно раскрашивать/изменять названия/менять шрифт некоторых полей, как мне кажется, не очень красиво, для этого ж и существует закладка Макет?
4. TorLink 18.09.13 14:31 Сейчас в теме
Хм, проблемка нарисовалась, границы колонок то съезжают, что-то не допру пока как это поправить(
http://clip2net.com/s/5M6WAe
Сделал как в 1м посте, программно конечно интереснее, но как их сопоставить не понятно.
5. echo77 1937 20.06.18 14:31 Сейчас в теме
(0) Вариант конечно, но не самый лучший :-)
Выкладывать картинку за 1$m - это интересно, надо попробовать :-)
6. Lars Ulrich 637 20.06.18 16:21 Сейчас в теме
(5) Видимо при изменениях сайта старая публикация конвертировалась в такую вот подставу :)
Тут вообще никаких вложений не может быть, т.к. весь сабж описан в тексте+скрины.
7. andrey_sag 59 13.10.23 10:42 Сейчас в теме
Так проще и без макета:
Процедура Пронумеровать(Результат) Экспорт
	
	СтрокВШапке = Результат.ФиксацияСверху;
	КоличествоКолонок	= Результат.ШиринаТаблицы;
	ОбластьШапки = Результат.Область(СтрокВШапке, , СтрокВШапке);
	ОбластьПриемник	= Результат.Область(СтрокВШапке + 1, , СтрокВШапке + 1); 
	Результат.ВставитьОбласть(ОбластьШапки, ОбластьПриемник, ТипСмещенияТабличногоДокумента.ПоГоризонтали, Ложь);
	
	Для НомерКолонки = 1 По КоличествоКолонок Цикл
	
		ТекОбласть	= Результат.Область(СтрокВШапке + 1, НомерКолонки); 
		ТекОбласть.Текст	= Строка(НомерКолонки);
		ТекОбласть.ГоризонтальноеПоложение	= ГоризонтальноеПоложение.Центр;
	
	КонецЦикла;                                                             
	
	Результат.ФиксацияСверху	= Результат.ФиксацияСверху + 1;

КонецПроцедуры

// в модуле объекта СКД
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	Настройки	= КомпоновщикНастроек.ПолучитьНастройки();
	МакетКомпоновки	= КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
	ПроцессорКомпоновкиДанных	= Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
	ПроцессорВывода	= Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
	
	ОтчетыСервер.Пронумеровать(ДокументРезультат);  
	
	СтандартнаяОбработка = Ложь;

КонецПроцедуры
Показать
NikiforovVA; Desnyanka; asg128; user1767032; user2027692; _LkMaksimka_; agentesecreto; +7 Ответить
Для отправки сообщения требуется регистрация/авторизация