Скд как вывести номер по порядку

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

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

Эти колонки не в запросе рисуются, а в процессоре вывода

// Вот такой код нужно вставить в форму отчета
// для обработчика кнопки, которую вы поместите на форму отчета,
// и назовёте, например, сформировать
Процедура ДействияФормыСформировать(Кнопка)

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

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

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

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

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

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

Счтаю, что тема закрыта.

Обещанное вознаграждение за решение данного вопроса на совести автора этой темы форума.

//Добавил расшифровку,о которой писал

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

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

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

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

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

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

Если хотите поиграться с цветам,
то можно так

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

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

Хотя лично мне, больше нравятся стилизованные цвета.
В вышеупомянутом примере они как раз и используются. Отчет выглядит в компоновке данных очень красиво!

//Если вы вдруг захотите использовать экзотические макеты оформления схемы компоновки данных, тогда
//нужно немного модифицировать код обработки

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

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

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

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

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

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

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

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

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

Для Ном = 1 По КоличествоКолонок Цикл
ТекОбласть = ТабДокумент.Область(КоличествоСтрокШапки+1,Ном);
ТекОбласть.Шрифт = Шрифт;
ТекОбласть.Текст = «»+Ном;
ТекОбласть.ЦветФона = ЦветФона;
ТекОбласть.ЦветТекста = ЦветТекста;
ТекОбласть.ЦветРамки = ЦветРамки;
ТекОбласть.Обвести(Линия, Линия, Линия, Линия);
ТекОбласть.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
ТекОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
КонецЦикла;
КонецПроцедуры

А то, как-то не по фэн-шую получается.

// Протестировал самый неэкзотический случай, когда макет оформления «Безоформления», нашёл небольшую ошибку,
// теперь со всеми макетами работает
Процедура ДействияФормыСформировать(Кнопка)

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

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

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

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

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

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

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

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

Для Ном = 1 По КоличествоКолонок Цикл
ТекОбласть = ТабДокумент.Область(КоличествоСтрокШапки+1,Ном);
ТекОбласть.Шрифт = Шрифт;
ТекОбласть.Текст = «»+Ном;
ТекОбласть.ЦветФона = ЦветФона;
ТекОбласть.ЦветТекста = ЦветТекста;
ТекОбласть.ЦветРамки = ЦветРамки;
ТекОбласть.Обвести(Линия, Линия, Линия, Линия);
ТекОбласть.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
ТекОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
КонецЦикла;
КонецПроцедуры

Источник

Многоуровневая нумерация в отчете СКД (программный вывод)

Задача: нередко при разработке отчетов возникает необходимость многоуровневой нумерации элементов отчета в соответствии с его структурой. Система компоновки данных не предоставляет средств для решения этой задачи. Проблема усугубляется в случае отчетов с иерархической группировкой где количество уровней вложенности произвольно и заранее неизвестно.

Попытки решения данной задачи только средствами СКД успехом не увенчались. Поиск существующих решений желаемых результатов не принес:

    вариант Ильи Васильева (swimdog) имеет ограничение по уровням вложенности и требует анализа выходного табличного документа для определения размещения номера;

вариант Алексея А (Isonic) с произвольной иерархией представляется неудобным в реализации так как вложенность заранее неизвестна и при изменении группировок придется переопределять значение поля иерархической нумерации;

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

Фрагмент кода формирования иерархического номера:

Код функции ПолучитьМногоуровневыйНомерПоИерархии:

Также вам потребуется функция «ПолучитьИменаПараметровВМакетеКомпоновкиПоИмениПоля» которую можно взять из статьи о установке собственных значений полей при программном выводе отчета СКД либо скачать пример отчета в котором «все включено».

P.S. Алгоритм разработан для иерархической нумерации по строкам отчета, но работает и при наличии группировок колонок. Вывод номера по колонкам не предусмотрен.

Огромная благодарность Денису Урянскому (dhurricane) за вдумчивое тестирование и подсказки.

Внешний отчет с примером иерархической нумерации тестировался на платформе 8.3.13.1644.

Обновление 16.01.2020: Перезагружен файл с примером. Просьба скачавшим связаться с автором для получения новой версии, либо самостоятельно обновить код функции ПолучитьИменаПараметровВМакетеКомпоновкиПоИмениПоля() из текста статьи про нее. В прежней реализации возможен несистематический пропуск параметров.

Источник

Иерархическая нумерация в отчете СКД с помощью макета поля

СКД — очень мощная и удобная штука. Но зачастую, для решения некоторых вопросов, приходится изобретать что-то немыслимое. Вот и в данной публикации один из примеров.

Задача состоит в том, чтобы в иерархическом отчете на СКД, вывести нумерацию строк по иерархии. Например:

Мне не хотелось заниматься нумерацией программно, как представлено в некоторых публикациях на инфостарте, а сделать это средствами СКД.

Так вот решение данного вопроса лежит в макете , точнее в оформлении поля, где можно в выражении писать что угодно.

Текст выражения выглядит так:

В примере представлен вариант для 3-х уровней отчета, собственно если отчет имеет больше уровней, то нужно будет дописать выражение по аналогии. В итоге получаем отчет вот такого вида.

Отчет разрабатывался на платформе 8.3.13.1644.

Скачать файлы

Специальные предложения

(1) Добавил еще 1 скриншот с настройками, чтобы не было дезинформации.

Обновление 28.06.19 12:00

См. также

Шпаргалка разработчика для работы с формами Промо

Сборник помогает быстро освоить встроенный язык и средства конфигурирования при разработке обычных и управляемых форм.

31.10.2018 18463 87 ELAM 3

K-SOFT: Улучшенная форма отчета

Если вы любитель добавлять много отборов на форму отчета, и вас раздражает, что отборы занимают большую часть отчета, и их никак не убрать, то вам сюда. Простая доработка, что позволит скрыть отборы на время анализа отчета.

19.05.2021 6172 6 karpik666 18

1С Специалист ЗУП 3

Решение билетов по 1С Специалист ЗУП 3. Решения подготовлены на Зарплата и Управление Персоналом 3.1.12.144

16.04.2020 4688 25 MoiseevSN 11

СКД. Объединение ячеек на примере «Справка инвентаризации расчетов с покупателями и поставщиками по форме ИНВ-17»

Шпаргалка. Объединение ячеек в отчете на СКД с произвольным макетом.

11.03.2020 10501 1 boobzx 7

Каталог игр с приставок из моего детства Промо

Каталог игр Dendy, Sega, Nintendo из нашего детства.

06.02.2018 17432 70 user621724_Dimav1979 37

СКД: красивые надписи в заголовках колонок

Необходимо немного исправить вывод надписей в заголовках колонок, сделать более читаемый вариант. Как это сделать?

27.02.2020 13157 8 wowik 36

Самое полное решение задач для подготовки к Специалисту по ЗУП 3.1

Недавно успешно сдал экзамен на специалиста по ЗУП и делюсь материалами для подготовки.

20.02.2020 14760 116 Axel_F 19

Прорыв и провал 3D графики в 1С

Здравствуйте, уважаемые. Эта статья опоздала, хотя я спешил как мог. В любом случае, речь тут пойдет про WebGL и технологии работы с 3D в 1C. Сразу оговорюсь, что всё это работало до последнего времени и на тонком, толстом, вэб клиентах, платформах 8.3 и на 8.2. Единственное, что изменило ситуацию, это WebKit, внедренный в 1С начиная с релиза 8.3.14.1565.

11.02.2020 9720 14 dinopopyys 29

Расширение возможностей печати: Вывод произвольного нижнего и верхнего колонтитула Промо

Расширяем функционал вывода нижнего / верхнего колонтитула. Стандартно 1С имеет достаточно ограничений по выводу и наполнению колонтитулов содержимым, взять хотя бы такие, как вывод только текста и отсутствие ограничения на номер конечной страницы. А при разработке кода сталкиваешься с тем, что свой блок с нижним колонтитулом нужно прижимать к низу страницы. Казалось бы быстро решаемый вопрос, но и в нем есть нюансы. Сейчас я расскажу о том, как решалась эта задача. UPD 15.02.2018. Добавлен вывод верхнего колонтитула; Вывод колонтитулов на первой и последней странице управляется параметрами; Научился считать страницы: Добавлено заполнение переменных аналогичных стандартным из колонтитулов; Задаются форматы даты и времени. Ограничения прежние: 1. Повторно сформировать табличный документ после смены параметров страницы интерактивно.; 2. Передавать данные для более плотной печати как можно более мелко нарезанными кусками.

29.12.2017 54365 38 agent00mouse 0

Источник

Читайте также:  Чем чистить зубы чихуа
Оцените статью
Наименование Файл Версия Размер