Номера столбцов в СКД

1. kser87 2439 20.06.12 17:02 Сейчас в теме
Есть какой-то разумный способ вывести в отчете под заголовками столбцов их номера по порядку (см прикрепленный файл) БЕЗ использования предопределенных макетов
Прикрепленные файлы:
+
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
29. charivnick 45 28.06.12 13:20 Сейчас в теме
Да, пару деньков прошли,
а обещанное вознаграждение за решение данного вопроса так и осталось на совести автора этой темы форума.
madfox; +1
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. WiseSnake 1519 20.06.12 17:08 Сейчас в теме
Нарисовать свой макет шапки отчета (закладка "Макеты"). Т.к. такую шапку вы вряд ли все равно выведите без макета.
+
3. kser87 2439 20.06.12 17:11 Сейчас в теме
Без использования закладки "макеты"
+
4. WiseSnake 1519 20.06.12 17:15 Сейчас в теме
(3) почему? основания?
+
5. WiseSnake 1519 20.06.12 17:16 Сейчас в теме
(3) А шапку Вы уже смогли вывести без использования макетов?
+
6. kser87 2439 20.06.12 17:26 Сейчас в теме
Потому, что заказчик хочет иметь полностью настраиваемые макеты. Такие вот условия.
Такую шапку сделал конечно
+
7. WiseSnake 1519 20.06.12 17:44 Сейчас в теме
(6)тогда нужно понимание структуры отчета. Это таблица или набор группировок?
Колонки постоянное количество или переменное?
и т.д. и т.п.
Что мне видится из вариантов, это в самом запросе определять номер группировки и выводить в отчет, еще можно попробовать позвращаться с системными полями НомерПоПорядкуВГруппировке, НомерПоПорядку.
+
8. kser87 2439 20.06.12 17:47 Сейчас в теме
Это таблица.

Определять номер запросе не покатит. У нас же в запросе один порядок колонок, в макете другой. Они могут вообще скрыть какие-то колонки или добавить пользовательские.

Эти колонки не в запросе рисуются, а в процессоре вывода
+
9. koklobok 2 21.06.12 09:54 Сейчас в теме
Я вижу только единственный вариант: после вывода отчета программно редактировать таблицу добавив еще одну строку между шапкой и отчетом, нарисовав нужные колонки.
+
10. kser87 2439 21.06.12 10:30 Сейчас в теме
это выход. Но это значительно увеличит время формирования отчета
+
11. koklobok 2 21.06.12 11:21 Сейчас в теме
(10) Да нет, это займет несколько мс. Таким образом обычно объединяют шапку СКД в которой несколько одинаковых колонок, была публикация на инфостарте, уже не могу найти.
+
12. kser87 2439 21.06.12 12:41 Сейчас в теме
(11) koklobok, если найдете, то будет здорово
+
13. WiseSnake 1519 21.06.12 14:11 Сейчас в теме
(12) Вот тут на мой взгляд интересное решение http://kb.mista.ru/article.php?id=671
А вообще их очень много, с расчетом высоты шапки и т.д. и т.п.
Вот тут http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=544654 еще присмотритесь, но мне кажется для Вашего отчета не сработает.
+
14. kser87 2439 21.06.12 14:38 Сейчас в теме
(13) WiseSnake, Первый вариант попробую
+
15. koklobok 2 22.06.12 14:52 Сейчас в теме
(12) Все таки ошибся, не на инфостарте это было, поэтому и не нашел тогда. По аналогии с объединением колонок можете попробовать добавить дополнительную строку.
+
16. charivnick 45 22.06.12 17:29 Сейчас в теме
Всё просто! Стандартную Кнопку отчета Сформировать (меню действие сформировать) заменяете на свою,
пишите программный запуск отчета. На форме у вас табличный документ "Результат".
Компоновка данных вам выдает как результат некий табличный документ - он формируется изходя из настроек пользователя: КомпоновщикНастроек.настройки. После Заголовка вставляете в табличный документ строчку с номерами
- это несложно. И пишите: "ЭлементыФормы.Результат = МойТабличныйДокумент;". Пользователь будет думать, что он запускает обычный отчет 1с, в котором можно менять настройки. На самом деле так и есть. Только при программном выводе табличного документа не забудьте расшифровку данных сделать.
+
17. charivnick 45 22.06.12 19:45 Сейчас в теме
// Вот такой код нужно вставить в форму отчета
// для обработчика кнопки, которую вы поместите на форму отчета,
// и назовёте, например, сформировать
Процедура ДействияФормыСформировать(Кнопка)

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.Настройки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , , Истина);

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

ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);

КонецПроцедуры
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

ТабДокумент = ЭлементыФормы.Результат;

КоличествоСтрокШапки = ТабДокумент.ФиксацияСверху;
КоличествоКолонок = ТабДокумент.ШиринаТаблицы;

ИсходнаяОбласть = ТабДокумент.Область(КоличествоСтрокШапки,,КоличествоСтрокШапки);
ОбластьПриемник = ТабДокумент.Область(КоличествоСтрокШапки+1,,КоличествоСтрокШапки+1);

ТабДокумент.ВставитьОбласть(ИсходнаяОбласть,ОбластьПриемник,ТипСмещенияТабличногоДокумента.ПоГоризонтали,Ложь);
Для Ном = 1 По КоличествоКолонок Цикл
ТекОбласть = ТабДокумент.Область(КоличествоСтрокШапки+1,Ном);
ТекОбласть.Текст = ""+Ном;
ТекОбласть.ЦветФона = ЦветаСтиля.ЦветФонаШапкиОтчета;
Шрифт = Новый Шрифт("Arial",10,Ложь,Ложь,Ложь,Ложь);
ТекОбласть.Шрифт = Шрифт;
ТекОбласть.ЦветТекста = Новый Цвет;
ТекОбласть.ЦветРамки = ЦветаСтиля.ЦветЛинииОтчета;
Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,1);
ТекОбласть.Обвести(Линия, Линия, Линия, Линия);
ТекОбласть.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
ТекОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
КонецЦикла;
strelec13; ye_s; troubleshooter; +3
18. charivnick 45 22.06.12 19:48 Сейчас в теме
Счтаю, что тема закрыта.

Обещанное вознаграждение за решение данного вопроса на совести автора этой темы форума.
+
21. kser87 2439 25.06.12 10:29 Сейчас в теме
(18) charivnick, В принципе Вы заслужили свое вознаграждение. Самый полный и точный ответ. Но подожду еще пару деньков. Вдруг что-нибудь еще придумают.
+
19. charivnick 45 22.06.12 19:53 Сейчас в теме
//Добавил расшифровку,о которой писал

Процедура ДействияФормыСформировать(Кнопка)


КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.Настройки,ДанныеРасшифровки);


ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки,Истина);

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

ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

ТабДокумент = ЭлементыФормы.Результат;

КоличествоСтрокШапки = ТабДокумент.ФиксацияСверху;
КоличествоКолонок = ТабДокумент.ШиринаТаблицы;

ИсходнаяОбласть = ТабДокумент.Область(КоличествоСтрокШапки,,КоличествоСтрокШапки);
ОбластьПриемник = ТабДокумент.Область(КоличествоСтрокШапки+1,,КоличествоСтрокШапки+1);

ТабДокумент.ВставитьОбласть(ИсходнаяОбласть,ОбластьПриемник,ТипСмещенияТабличногоДокумента.ПоГоризонтали,Ложь);
Для Ном = 1 По КоличествоКолонок Цикл
ТекОбласть = ТабДокумент.Область(КоличествоСтрокШапки+1,Ном);
ТекОбласть.Текст = ""+Ном;
ТекОбласть.ЦветФона = ЦветаСтиля.ЦветФонаШапкиОтчета;
Шрифт = Новый Шрифт("Arial",10,Ложь,Ложь,Ложь,Ложь);
ТекОбласть.Шрифт = Шрифт;
ТекОбласть.ЦветТекста = Новый Цвет;
ТекОбласть.ЦветРамки = ЦветаСтиля.ЦветЛинииОтчета;
Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,1);
ТекОбласть.Обвести(Линия, Линия, Линия, Линия);
ТекОбласть.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
ТекОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
КонецЦикла;

КонецПроцедуры()
+
20. charivnick 45 22.06.12 20:19 Сейчас в теме
Если хотите поиграться с цветам,
то можно так

ТекОбласть.ЦветФона = Новый Цвет(192,192,192);
ТекОбласть.ЦветТекста = Новый Цвет(255,255,255);
ТекОбласть.ЦветРамки = Новый Цвет(0,0,0);

Это соответствует картинке "Выборпериода.png"

Хотя лично мне, больше нравятся стилизованные цвета.
В вышеупомянутом примере они как раз и используются. Отчет выглядит в компоновке данных очень красиво!
+
22. charivnick 45 26.06.12 18:15 Сейчас в теме
//Если вы вдруг захотите использовать экзотические макеты оформления схемы компоновки данных, тогда
//нужно немного модифицировать код обработки

Процедура ДействияФормыСформировать(Кнопка)


КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.Настройки,ДанныеРасшифровки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки,Истина);

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

ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

// Проверяем, установлен ли пользовательский макет оформления компоновки данных
// и, если он установлен, то берем значения элементов оформления из него,
// иначе - из основного.
МакетОформления = Новый МакетОформленияКомпоновкиДанных;

ПараметрМакетаОформления = КомпоновщикНастроек.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("МакетОформления"));
Если ПараметрМакетаОформления.Использование Тогда
МакетОформления = БиблиотекаМакетовОформленияКомпоновкиДанных[ПараметрМакетаОформления.Значение].ПолучитьМакет();
Иначе
МакетОформления = БиблиотекаМакетовОформленияКомпоновкиДанных["Основной"].ПолучитьМакет();
КонецЕсли;

ОформлениеЗаголовкаТаблицы = МакетОформления.Элементы.Найти("ЗаголовокТаблицы").Значение[0].Оформление;
ЦветФона = ОформлениеЗаголовкаТаблицы.Элементы.Найти("ЦветФона").Значение;
ЦветРамки = ОформлениеЗаголовкаТаблицы.Элементы.Найти("ЦветГраницы").Значение;
ЦветТекста = ОформлениеЗаголовкаТаблицы.Элементы.Найти("ЦветТекста").Значение;
Шрифт = ОформлениеЗаголовкаТаблицы.Элементы.Найти("Шрифт").Значение;
Линия = ОформлениеЗаголовкаТаблицы.Элементы.Найти("СтильГраницы").Значение;

// Вставляем область нумерации колонок и выводим результат
ТабДокумент = ЭлементыФормы.Результат;

КоличествоСтрокШапки = ТабДокумент.ФиксацияСверху;
КоличествоКолонок = ТабДокумент.ШиринаТаблицы;

ИсходнаяОбласть = ТабДокумент.Область(КоличествоСтрокШапки,,КоличествоСтрокШапки);
ОбластьПриемник = ТабДокумент.Область(КоличествоСтрокШапки+1,,КоличествоСтрокШапки+1);

ТабДокумент.ВставитьОбласть(ИсходнаяОбласть,ОбластьПриемник,ТипСмещенияТабличногоДокумента.ПоГоризонтали,Ложь);

Для Ном = 1 По КоличествоКолонок Цикл
ТекОбласть = ТабДокумент.Область(КоличествоСтрокШапки+1,Ном);
ТекОбласть.Шрифт = Шрифт;
ТекОбласть.Текст = ""+Ном;
ТекОбласть.ЦветФона = ЦветФона;
ТекОбласть.ЦветТекста = ЦветТекста;
ТекОбласть.ЦветРамки = ЦветРамки;
ТекОбласть.Обвести(Линия, Линия, Линия, Линия);
ТекОбласть.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
ТекОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
КонецЦикла;
КонецПроцедуры
Wersia; +1
23. charivnick 45 26.06.12 18:19 Сейчас в теме
А то, как-то не по фэн-шую получается.

Удачи:))
+
24. charivnick 45 26.06.12 18:37 Сейчас в теме
// Протестировал самый неэкзотический случай, когда макет оформления "Безоформления", нашёл небольшую ошибку,
// теперь со всеми макетами работает
Процедура ДействияФормыСформировать(Кнопка)


КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.Настройки,ДанныеРасшифровки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки,Истина);

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

ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

// Проверяем, установлен ли пользовательский макет оформления компоновки данных
// и, если он установлен, то берем значения элементов оформления из него,
// иначе - из основного.
МакетОформления = Новый МакетОформленияКомпоновкиДанных;

ПараметрМакетаОформления = КомпоновщикНастроек.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("МакетОформления"));
Если ПараметрМакетаОформления.Использование Тогда
МакетОформления = БиблиотекаМакетовОформленияКомпоновкиДанных[ПараметрМакетаОформления.Значение].ПолучитьМакет();
Иначе
МакетОформления = БиблиотекаМакетовОформленияКомпоновкиДанных["Основной"].ПолучитьМакет();
КонецЕсли;

ОформлениеЗаголовкаТаблицы = МакетОформления.Элементы.Найти("ЗаголовокТаблицы").Значение;
Если ОформлениеЗаголовкаТаблицы = Неопределено Тогда
ЦветФона = Новый Цвет(255,255,255);
ЦветРамки = Новый Цвет(0,0,0);
ЦветТекста = Новый Цвет(0,0,0);
Шрифт = Новый Шрифт("Arial",10,Ложь,Ложь,Ложь,Ложь);
Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,0);
Иначе
ЦветФона = ОформлениеЗаголовкаТаблицы[0].Оформление.Элементы.Найти("ЦветФона").Значение;
ЦветРамки = ОформлениеЗаголовкаТаблицы[0].Оформление.Элементы.Найти("ЦветГраницы").Значение;
ЦветТекста = ОформлениеЗаголовкаТаблицы[0].Оформление.Элементы.Найти("ЦветТекста").Значение;
Шрифт = ОформлениеЗаголовкаТаблицы[0].Оформление.Элементы.Найти("Шрифт").Значение;
Линия = ОформлениеЗаголовкаТаблицы[0].Оформление.Элементы.Найти("СтильГраницы").Значение;
КонецЕсли;
// Вставляем область нумерации колонок и выводим результат
ТабДокумент = ЭлементыФормы.Результат;

КоличествоСтрокШапки = ТабДокумент.ФиксацияСверху;
КоличествоКолонок = ТабДокумент.ШиринаТаблицы;

ИсходнаяОбласть = ТабДокумент.Область(КоличествоСтрокШапки,,КоличествоСтрокШапки);
ОбластьПриемник = ТабДокумент.Область(КоличествоСтрокШапки+1,,КоличествоСтрокШапки+1);

ТабДокумент.ВставитьОбласть(ИсходнаяОбласть,ОбластьПриемник,ТипСмещенияТабличногоДокумента.ПоГоризонтали,Ложь);

Для Ном = 1 По КоличествоКолонок Цикл
ТекОбласть = ТабДокумент.Область(КоличествоСтрокШапки+1,Ном);
ТекОбласть.Шрифт = Шрифт;
ТекОбласть.Текст = ""+Ном;
ТекОбласть.ЦветФона = ЦветФона;
ТекОбласть.ЦветТекста = ЦветТекста;
ТекОбласть.ЦветРамки = ЦветРамки;
ТекОбласть.Обвести(Линия, Линия, Линия, Линия);
ТекОбласть.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
ТекОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
КонецЦикла;
КонецПроцедуры
mangy; nagimo; Sasha_31rus; +3
25. kser87 2439 26.06.12 18:50 Сейчас в теме
(24) charivnick, Вопрос не связан с этим. Можно не писать кучу лишнего кода
+
30. gadjik 17.02.14 19:01 Сейчас в теме
(24) charivnick, Спасибо, воспользовался вашим методом
+
26. charivnick 45 26.06.12 20:00 Сейчас в теме
Согласен, для меня важно, чтобы не было ошибок.

Что касается количества когда, то это немного, по сравнени с тем, что используется в зарпосе ЗУП для
получения табеля учета рабочего времени (около 20 стр текста или 50 страниц в ворде).

В данном примере, максимум 50. Это не о чём.
+
27. charivnick 45 26.06.12 20:03 Сейчас в теме
P.S.
Точнее 1441 строчка ( в ЗУП), у меня всего 50 строк
+
28. charivnick 45 26.06.12 20:06 Сейчас в теме
Предложенный вам вариант универсальный, он подстраиватеся под отчет, учитывет ширину колонок, шрифт, цвет текста, цвет фона, формат границы. Если брать внешний макет с заголовком и пытаться его наложить имеющийся отчет, то он может не "срастись"!
+
29. charivnick 45 28.06.12 13:20 Сейчас в теме
Да, пару деньков прошли,
а обещанное вознаграждение за решение данного вопроса так и осталось на совести автора этой темы форума.
madfox; +1
31. iones 195 03.03.20 16:23 Сейчас в теме
_СоСтрокиЧитать=0;
_ОбщЧисло = 0;
Для с=1 По 20 Цикл
		_СоСтрокиЧитать=_СоСтрокиЧитать+1;
		_ТекстПоля = ЭлементыФормы.Результат.Область(с,1).Текст;
		Попытка
			_ЧислоНомерПП = Число(_ТекстПоля);
			_ОбщЧисло = _ОбщЧисло + _ЧислоНомерПП;
		Исключение КонецПОпытки;
		Если _ОбщЧисло=3 Тогда
			_СоСтрокиЧитать = _СоСтрокиЧитать - 1;
			Прервать;
		КонецЕсли;	
	КонецЦикла;
	СтрокаНомераКолонок=ЭлементыФормы.Результат.Область("R"+_СоСтрокиЧитать);
	ЭлементыФормы.Результат.ВставитьОбласть(СтрокаНомераКолонок,СтрокаНомераКолонок,ТипСмещенияТабличногоДокумента.ПоВертикали);
	номСтроки=1;
	Пока Истина Цикл
		ОбработкаПрерыванияПользователя();
		печ_номСтроки=Формат(номСтроки,"ЧГ=0");
		_Область=ЭлементыФормы.Результат.Область("R"+_СоСтрокиЧитать+"C"+печ_номСтроки);
		Если СокрЛП(_Область.ЦветРамки)="Авто" Тогда
			Прервать;
		КонецЕсли;	
		_Область.Текст = номСтроки;
		_Область.ГоризонтальноеПоложение=ГоризонтальноеПоложение.Центр;
		//_Область.Шрифт=Новый Шрифт(_Область.Шрифт,,,Истина);//Это если хочется шрифт полужирный
		_Область.ЦветФона=ЦветаСтиля.ЦветФонаШапкиОтчета;//Если используете стандартный макет, а так можно вписать свой цвет
		номСтроки=номСтроки+1;
		Если номСтроки>30 Тогда
			Прервать;
		КонецЕсли;
	КонецЦикла;
Показать
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот