Есть какой-то разумный способ вывести в отчете под заголовками столбцов их номера по порядку (см прикрепленный файл) БЕЗ использования предопределенных макетов
(6)тогда нужно понимание структуры отчета. Это таблица или набор группировок?
Колонки постоянное количество или переменное?
и т.д. и т.п.
Что мне видится из вариантов, это в самом запросе определять номер группировки и выводить в отчет, еще можно попробовать позвращаться с системными полями НомерПоПорядкуВГруппировке, НомерПоПорядку.
Определять номер запросе не покатит. У нас же в запросе один порядок колонок, в макете другой. Они могут вообще скрыть какие-то колонки или добавить пользовательские.
Эти колонки не в запросе рисуются, а в процессоре вывода
Я вижу только единственный вариант: после вывода отчета программно редактировать таблицу добавив еще одну строку между шапкой и отчетом, нарисовав нужные колонки.
(10) Да нет, это займет несколько мс. Таким образом обычно объединяют шапку СКД в которой несколько одинаковых колонок, была публикация на инфостарте, уже не могу найти.
(12) Все таки ошибся, не на инфостарте это было, поэтому и не нашел тогда. По аналогии с объединением колонок можете попробовать добавить дополнительную строку.
Всё просто! Стандартную Кнопку отчета Сформировать (меню действие сформировать) заменяете на свою,
пишите программный запуск отчета. На форме у вас табличный документ "Результат".
Компоновка данных вам выдает как результат некий табличный документ - он формируется изходя из настроек пользователя: КомпоновщикНастроек.настройки. После Заголовка вставляете в табличный документ строчку с номерами
- это несложно. И пишите: "ЭлементыФормы.Результат = МойТабличныйДокумент;". Пользователь будет думать, что он запускает обычный отчет 1с, в котором можно менять настройки. На самом деле так и есть. Только при программном выводе табличного документа не забудьте расшифровку данных сделать.
// Вот такой код нужно вставить в форму отчета
// для обработчика кнопки, которую вы поместите на форму отчета,
// и назовёте, например, сформировать
Процедура ДействияФормыСформировать(Кнопка)
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.Настройки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , , Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
(18) charivnick, В принципе Вы заслужили свое вознаграждение. Самый полный и точный ответ. Но подожду еще пару деньков. Вдруг что-нибудь еще придумают.
ТекОбласть.ЦветФона = Новый Цвет(192,192,192);
ТекОбласть.ЦветТекста = Новый Цвет(255,255,255);
ТекОбласть.ЦветРамки = Новый Цвет(0,0,0);
Это соответствует картинке "Выборпериода.png"
Хотя лично мне, больше нравятся стилизованные цвета.
В вышеупомянутом примере они как раз и используются. Отчет выглядит в компоновке данных очень красиво!
// Проверяем, установлен ли пользовательский макет оформления компоновки данных
// и, если он установлен, то берем значения элементов оформления из него,
// иначе - из основного.
МакетОформления = Новый МакетОформленияКомпоновкиДанных;
ПараметрМакетаОформления = КомпоновщикНастроек.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("МакетОформления"));
Если ПараметрМакетаОформления.Использование Тогда
МакетОформления = БиблиотекаМакетовОформленияКомпоновкиДанных[ПараметрМакетаОформления.Значение].ПолучитьМакет();
Иначе
МакетОформления = БиблиотекаМакетовОформленияКомпоновкиДанных["Основной"].ПолучитьМакет();
КонецЕсли;
// Протестировал самый неэкзотический случай, когда макет оформления "Безоформления", нашёл небольшую ошибку,
// теперь со всеми макетами работает
Процедура ДействияФормыСформировать(Кнопка)
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.Настройки,ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки,Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
// Проверяем, установлен ли пользовательский макет оформления компоновки данных
// и, если он установлен, то берем значения элементов оформления из него,
// иначе - из основного.
МакетОформления = Новый МакетОформленияКомпоновкиДанных;
ПараметрМакетаОформления = КомпоновщикНастроек.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("МакетОформления"));
Если ПараметрМакетаОформления.Использование Тогда
МакетОформления = БиблиотекаМакетовОформленияКомпоновкиДанных[ПараметрМакетаОформления.Значение].ПолучитьМакет();
Иначе
МакетОформления = БиблиотекаМакетовОформленияКомпоновкиДанных["Основной"].ПолучитьМакет();
КонецЕсли;
ОформлениеЗаголовкаТаблицы = МакетОформления.Элементы.Найти("ЗаголовокТаблицы").Значение;
Если ОформлениеЗаголовкаТаблицы = Неопределено Тогда
ЦветФона = Новый Цвет(255,255,255);
ЦветРамки = Новый Цвет(0,0,0);
ЦветТекста = Новый Цвет(0,0,0);
Шрифт = Новый Шрифт("Arial",10,Ложь,Ложь,Ложь,Ложь);
Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,0);
Иначе
ЦветФона = ОформлениеЗаголовкаТаблицы[0].Оформление.Элементы.Найти("ЦветФона").Значение;
ЦветРамки = ОформлениеЗаголовкаТаблицы[0].Оформление.Элементы.Найти("ЦветГраницы").Значение;
ЦветТекста = ОформлениеЗаголовкаТаблицы[0].Оформление.Элементы.Найти("ЦветТекста").Значение;
Шрифт = ОформлениеЗаголовкаТаблицы[0].Оформление.Элементы.Найти("Шрифт").Значение;
Линия = ОформлениеЗаголовкаТаблицы[0].Оформление.Элементы.Найти("СтильГраницы").Значение;
КонецЕсли;
// Вставляем область нумерации колонок и выводим результат
ТабДокумент = ЭлементыФормы.Результат;
Что касается количества когда, то это немного, по сравнени с тем, что используется в зарпосе ЗУП для
получения табеля учета рабочего времени (около 20 стр текста или 50 страниц в ворде).
Предложенный вам вариант универсальный, он подстраиватеся под отчет, учитывет ширину колонок, шрифт, цвет текста, цвет фона, формат границы. Если брать внешний макет с заголовком и пытаться его наложить имеющийся отчет, то он может не "срастись"!
_СоСтрокиЧитать=0;
_ОбщЧисло = 0;
Для с=1 По 20 Цикл
_СоСтрокиЧитать=_СоСтрокиЧитать+1;
_ТекстПоля = ЭлементыФормы.Результат.Область(с,1).Текст;
Попытка
_ЧислоНомерПП = Число(_ТекстПоля);
_ОбщЧисло = _ОбщЧисло + _ЧислоНомерПП;
Исключение КонецПОпытки;
Если _ОбщЧисло=3 Тогда
_СоСтрокиЧитать = _СоСтрокиЧитать - 1;
Прервать;
КонецЕсли;
КонецЦикла;
СтрокаНомераКолонок=ЭлементыФормы.Результат.Область("R"+_СоСтрокиЧитать);
ЭлементыФормы.Результат.ВставитьОбласть(СтрокаНомераКолонок,СтрокаНомераКолонок,ТипСмещенияТабличногоДокумента.ПоВертикали);
номСтроки=1;
Пока Истина Цикл
ОбработкаПрерыванияПользователя();
печ_номСтроки=Формат(номСтроки,"ЧГ=0");
_Область=ЭлементыФормы.Результат.Область("R"+_СоСтрокиЧитать+"C"+печ_номСтроки);
Если СокрЛП(_Область.ЦветРамки)="Авто" Тогда
Прервать;
КонецЕсли;
_Область.Текст = номСтроки;
_Область.ГоризонтальноеПоложение=ГоризонтальноеПоложение.Центр;
//_Область.Шрифт=Новый Шрифт(_Область.Шрифт,,,Истина);//Это если хочется шрифт полужирный
_Область.ЦветФона=ЦветаСтиля.ЦветФонаШапкиОтчета;//Если используете стандартный макет, а так можно вписать свой цвет
номСтроки=номСтроки+1;
Если номСтроки>30 Тогда
Прервать;
КонецЕсли;
КонецЦикла;