1с скд заголовок отчета программно

Обновлено: 06.07.2024

Иногда в качестве заголовка отчета требуется задать что-нибудь сложное, вроде:
«Отчет за период с» + ДатаНачала + » по» + ДатаКонца
Задать его таким образом в настройках не получится. Придется сделать это программно следующим образом:
Код 1C v 8.х
also

Разместил: E_Migachev  Версии: | 8.x | 8.2 УП |  Дата: 21.07.2010   Прочитано: 18896

Распечатать

Похожие FAQ

17 правил для составления оптимального ЗАПРОСа к данным базы 1С  42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C медленно работает по сети с базой на SQL Server  20
Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П 1C: Enterprise Development Tools  50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем Google maps, поиск оптимального маршрута  5
В данном посте хочу коснуться основных аспектов построения оптимального маршрута с использованием API Google maps. Исходные данные для построения маршрута: * Географические координаты объектов, которые хранятся в базе; * Координаты начальной и коне Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению  1
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени Посмотреть все результаты поиска похожих

Пример приведем на отчете для УТ 11, в котором выводится вид цены, номенклатура и цена номенклатуры. Вид цены пользователь должен обязательно задать, а заголовок именно для цены нужно сформировать в соответствии с валютой вида цены, которую выбрал пользователь.

Отчет из измененным заголовком поля СКД

Пример запроса приводить не стану. Приведу код, который был написан в модуле отчета, а именно код функции ПриКомпоновкеРезультата.

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

// Получаем основную валюту вида цены
ПараметрВидЦены = ПолучитьЗначениеПараметра ( "ВидЦены" );
ВалютаВидыЦены = ПараметрВидЦены. ВалютаЦены ;

// Програмная установка заголовка нужных полей СКД
ПолеЦена = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Найти ( "Цена" );
Если ПолеЦена <> Неопределено Тогда
ПолеЦена.Заголовок = "Цена, " + Строка ( ВалютаВидыЦены ) + "" ;
КонецЕсли;


// Програмный вывод СКД
НастройкиОтчета = КомпоновщикНастроек . ПолучитьНастройки ();

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

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

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

//Обозначим начало вывода
ПроцессорВывода . НачатьВывод ();
ТаблицаЗафиксирована = Ложь;

ДокументРезультат.ФиксацияСверху = 0 ;
//Основной цикл вывода отчета
Пока Истина Цикл
//Получим следующий элемент результата компоновки
ЭлементРезультата = ПроцессорКомпоновки . Следующий ();

Если ЭлементРезультата = Неопределено Тогда

//Следующий элемент не получен - заканчиваем цикл вывода

Иначе
// Зафиксируем шапку
Если Не ТаблицаЗафиксирована
И ЭлементРезультата.ЗначенияПараметров.Количество () > 0
И ТипЗнч ( КомпоновщикНастроек.Настройки.Структура [ 0 ]) <> Тип ( "ДиаграммаКомпоновкиДанных" ) Тогда

ТаблицаЗафиксирована = Истина;
ДокументРезультат . ФиксацияСверху = ДокументРезультат.ВысотаТаблицы ;

//Элемент получен - выведем его при помощи процессора вывода
ПроцессорВывода.ВывестиЭлемент ( ЭлементРезультата );
КонецЕсли;
КонецЦикла;

Функция ПолучитьЗначениеПараметра ( ИмяПараметра )

ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти ( ИмяПараметра );
Если ПараметрДанных <> Неопределено Тогда
ПараметрПользовательскойНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти ( ПараметрДанных.ИдентификаторПользовательскойНастройки );
Если ПараметрПользовательскойНастройки <> Неопределено Тогда
Возврат ПараметрПользовательскойНастройки.Значение ;
Иначе
Возврат ПараметрДанных.Значение ;
КонецЕсли;
КонецЕсли;

Сначала мы получаем вид цены из параметром, которые задал пользователь, а далее из вид цены можно получить сам вид цены.

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

Делал недавно отчет с неопределенным количеством колонок. Возиться с кодом было неохота, решил сделать на СКД. С этим проблема не возникла, необходимо было натянуть результат на произвольный макет (свой заголовок + период). Покажу на примере по шагам, с чем столкнулся и как решил.

title

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

title

Теперь добавляем новое поле группировки, поля группировок не выбираем (Детальные записи), удаляем поле "Авто", переносим наш параметр.

title

Переходим на вкладку "Макет", рисуем шапку. Добавляем Заголовок группировки. Мы можем использовать Имя группировки, если заранее задали его в схеме компоновки, или выбрать из доступных полей. После этого определяем область в табличном документе. Далее, прописываем наш параметр на макете, потом необходимо будет установить в свойствах этой ячейки свойство "Заполнение" - "Параметр". И в окне параметров макета связать наш параметр с параметром СКД.

Теперь немного кода. Создаем форму отчета. Отключаем видимость у Основной Командной Панели и Компоновщика Настроек. Создаем нашу команду "Сформировать", реквизит формы "Дата", перетаскиваем все это на форму. Пишем код в модуле формы:

title

После этого, если все правильно сделали, результат отчета должен выглядеть вот так:

Теперь попробуем сделать полностью свой произвольный макет на СКД .
Здесь самое главное понять структуру областей макета в СКД. Разберем пример с неопределенным количеством колонок.

title

Заготовка для отчета выглядит так:

title

Пример результата:

Теперь создаем свой макет:

title

1. Добавляем шапку по аналогии с прошлым примером. Устанавливаем макет оформления "Без оформления". Итоги по номенклатуре выводить не будем, поэтому ставим у таблицы настройку "Расположение общих итогов по горизонтали" - "Нет".

title

2. Теперь создаем макет, прописываем параметры, настраиваем дополнительные свойства ячеек. Например, для номенклатуры можно выставить в свойстве "Размещение текста" значение "Переносить" вместо "Авто", а так же указать параметры расшифровки.

title

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

title

Начинаем создавать области, параметры при этом будут автоматически сопоставляться по именам. В итоге должно получиться следующее:

title

Проверяем отчет, должно получиться следующее:

4. Пишем код по аналогии с прошлым примером:
Код 1C v 8.2 УП

title

В итоге у нас получается следующее:

title

Кстати, при последующем открытии отчета, вы увидите, что компоновка перестроила макет по-своему.

Это вполне нормально, не стоит беспокоиться.

В этой статье разберем довольно популярный вопрос, с которым можно столкнуться не только в реальной работе, но и при устройстве на работу.

Чтобы было понятно, о чем далее пойдет речь, посмотрим на проблему глазами пользователя. Есть простейший отчет, построенный при помощи СКД, вид которого представлен на рис.1:

Исходный демонстрационный отчет


Рис. 1. Исходный демонстрационный отчет

Нам нужно, чтобы отчет имел заголовок «Отчет по продажам» с параметрами, которые бы заполнялись на основе произвольных данных. Для простоты, в нашем случае эти параметры заголовка будем заполнять из параметров самого отчета (Рис. 2):

Требуемый вид отчета


Рис. 2. Требуемый вид отчета

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

Вопрос

Тестирую разные варианты вывода заголовка в отчет на СКД, не могу понять логику.1 вариант

отрабатывает так, как надо.

В общем, комбинации строк дают разные результаты:

вообще ведет к ошибке , компоновка не происходит.

Я запутался в разных сущностях с одинаковыми именами и типами. Результата я добиваюсь, но нет чувства, что разобрался полностью. Не проясните?

Ответ

Здесь дело в двух моментах: значении параметра СтандартнаяОбработка (Истина или Ложь) и в значениях переменных, связанных с настройками компоновки.

СтандартнаяОбработка в коде не изменяется, значит, система будет формировать отчет автоматически. Нам нужно только обеспечить, чтобы в компоновщике содержались корректные настройки. Далее система самостоятельно получит эти настройки из компоновщика, выполнит все действия по компоновке отчета.

Поэтому работать надо именно с компоновщиком настроек:

Вы именно так и делаете, всё получается правильно.

СтандартнаяОбработка в коде установлена в значение Ложь. Значит, все действия по компоновке отчета нужно выполнить вручную (создать макет компоновки по схеме и настройкам компоновки, поработать с процессором компоновки и с процессором вывода результата компоновки данных в табличный документ).

У вас получается следующий код (не самые важные строки я отбросил):

Вы получили из компоновщика настройки. Они хранятся в переменной Настройки. Затем в компоновщике устанавливаете новый заголовок, но в переменной Настройки всё осталось без изменений. Это фактически две разные переменные – Настройки (без заголовка) и КомпоновщикНастроек.Настройки (с новым заголовком).

А макет компоновки вы получаете на основании переменной Настройки, где заголовок не установлен. Поэтому на выходе этот заголовок не выводится в отчете.

Попробуйте еще для закрепления поменять порядок строк:

В этом случае заголовок в отчете уже будет выводиться.

Таким образом, можно сделать следующие выводы:

  1. При использовании метода ПолучитьНастройки к “обычным” настройкам применяются пользовательские и фиксированные настройки из этого же компоновщика. В результате выполнения этого метода получаем переменную типа НастройкиКомпоновкиДанных. Это именно те настройки, с которыми и будет компоноваться отчет.
  2. Если нужно установить один параметр в настройках, то нет смысла отключать стандартную обработку. Если же необходимо отчет скомпоновать полностью вручную (например, предварительно подготовить таблицу с внешними данными, обработать ее, вывести ее в виде отчета), то тогда отключаем стандартную обработку и вручную прописываем все шаги формирования отчета.

Этим, пожалуй, и завершим разбор сегодняшнего вопроса. Как видите, казалось бы, такая простая задача, как вывод заголовка, которая по сути своей является вспомогательной при решении билетов, при должном рассмотрении является не такой и простой. Но мы надеемся, что после знакомства с нашим материалом у вас немного “просветлело” :)

Завтра разберем новый вопрос, в котором внимательная слушательница чуть не подловила нашего тренера, поэтому не переключайтесь!

Читайте также: