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

1С программное добавление полей и ресурсов в СКД — ВнешнийНаборДанных

1С программное добавление полей и ресурсов в СКД — НастройкаГруппировки
1С программное добавление полей и ресурсов в СКД — Итог
Скачать рассмотренный в статье пример: ПрограммноеДобавлениеПолей
Программное добавление полей и ресурсов в СКД : 5 комментариев
Интересный отчетик! А как сделать, чтобы кнопка «Настройки» заработала, а не писала:
«Не предусмотрено возможности настройки для этого варианта отчета»
+ Как сделать, чтобы при «Изменении варианта» были бы видны поля ТЗ и можно было бы по ним группировку делать (генератор при этом не нужен будет)
Леонид, вы нашли ответ на свой вопрос про возможность использовать при «Изменении варианта» программно созданные поля?? Спасибо
Задача
. достаточно простая. Нужно создать отчет на СКД, который выводит остатки по номенклатуре в разрезе складов. Рассмотрим два варианта решения.

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

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

Таким образом, без единой строчки кода, используя только стандартные возможности СКД, мы решили задачу с фиксацией колонки в отчете. Но что, если нам нужно зафиксировать не только первую колонку "Номенклатура", но и первую колонку склада (в нашем случае это "Главный склад"). Стандартные возможности СКД тут не помогут, пойдем другим путем.
Другой путь
Используя отчет из предыдущей части статьи зафиксируем первую колонку "Склад" в выводимом табличном документе. Для этого программно сформируем отчет в обработке "ПриКомпоновкеРезультата" модуля объекта отчета. Листинг этой процедуры-обработчика представлен на следующем листинге:
Чтобы провести фиксацию первой колонки выводимого склада, выполним вывод отчета в табличный документа. Затем установим фиксацию в табличном документе слева в значение 3 (3 ячейки).
Почему фиксация имеет значение именно 3? Обратимся к следующему скриншоту:

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

Заключение
В предыдущих статьях мы не раз изменяли табличный документ после работы процессора вывода компоновки данных. Этот пример еще раз показывает, что, работая с программным формированием отчета на СКД, мы можем создать отчет практически любой сложности, с любым внешним видом.
Войдите как ученик, чтобы получить доступ к материалам школы
Система компоновки данных 1С 8.3 для начинающих: считаем итоги (ресурсы)
Автор уроков и преподаватель школы: Владимир Милькин
Ставим цель
Целью этого урока будет:
-
Написать отчёт, который выводит список продуктов (справочник Еда), их калорийность и вкус. Сделать группировку продуктов по их цвету. Познакомиться с возможностью подведения итогов (ресурсы) и вычисляемыми полями.
Создаём новый отчёт
Как и на предыдущих уроках открываем базу "Гастроном" в конфигураторе и создаём новый отчёт через меню "Файл"->"Новый. ":
Вид документа — внешний отчёт:
В форме настройки отчёта пишем имя "Урок3" и нажимаем кнопку "Открыть схему компоновки данных":
Оставляем имя схемы по умолчанию и нажимаем кнопку "Готово":
Добавляем запрос через конструктор
На закладке "Набор данных" нажимаем зелёный плюсик и выбираем пункт "Добавить набор данных — запрос":
Вместо того, чтобы писать текст запроса вручную, вновь запускаем конструктор запроса:
На вкладке "Таблицы" перетягиваем таблицу "Еда" из первой колонки во вторую:
Выбираем из таблицы "Еда" поля, которые будем запрашивать. Для этого перетаскиваем поля "Наименование", "Вкус", "Цвет" и "Калорийность" из второй колонки в третью:
Получилось вот так:
Нажимаем кнопку "ОК" — текст запроса сформировался автоматически:
Формируем настройки представления отчёта
Переходим на закладку "Настройки" и нажимаем на волшебную палочку, чтобы вызвать конструктор настроек:
Выбираем вид отчета "Список. " и нажимаем кнопку "Далее":
Перетаскиваем из левой колонки в правую поля, которые будут отображаться в списке и нажимаем "Далее":
Перетаскиваем из левой колонки в правую поле "Цвет" — по нему будет происходить группировка строк в отчёте. Нажимаем "ОК":
А вот и результат работы конструктора. Иерархия нашего отчёта:
-
отчёт в целом группировка "Цвет" детальные записи — строки с названиями еды
Сохраним отчёт (кнопка дискета) и не закрывая конфигуратора тут же откроем его в режиме пользователя. Получилось вот так:
Меняем порядок колонок
Но давайте поменяем порядок колонок (стрелки вверх-вниз), чтобы он был таким как на рисунке ниже:
Сохраним отчёт и вновь откроем в режиме пользователя:
Отлично, так гораздо лучше.
Подводим итог (сумму) по калорийности
Было бы неплохо выводить итог калорийности продуктов по группам. Чтобы видеть сумму калорийности всех продуктов, скажем, белого или жёлтого цвета. Или узнать общую калорийность вообще всех продуктов в базе.
Для этого существует механизм вычисления ресурсов.
Переходим на вкладку "Ресурсы" и перетаскиваем поле "Калорийность" (мы же по нему собираемся итог подводить) из левой колонки в правую.
При этом в поле выражение выбираем из выпадающего списка "Сумма(Калорийность)", так как итогом будет являться сумма всех входящих в итог элементов:
Сохраняем и формируем отчёт:
У нас появились итоги по каждой из групп и по отчёту в целом.
Подводим итог (среднее) по калорийности
Теперь давайте сделаем так, чтобы в ещё одной колонке выводилась средняя калорийность продуктов по группам и в целом по отчёту.
Трогать уже имеющуюся колонку "Калорийность" нельзя — в неё уже выводится итог-сумма, поэтому заведём ещё одно поле, которое будет являться точной копией поля "Калорийность".
Чтобы завести такое "виртуальное" поле воспользуемся механизмом вычисляемых полей.
Переходим на закладку "Вычисляемые поля" и нажимаем зелёный плюсик:
В колонке "Путь к данным" пишем имя нового поля (слитно, без пробелов). Пусть оно будет называться "СредняяКалорийность", а в колонке "Выражение" пишем имя уже существующего поля, на основании которого будет рассчитываться новое поле. Пишем туда "Калорийность". Колонка "Заголовок" заполнится автоматически.
Мы добавили новое поле ("СредняяКалорийность"), но в отчёте оно само по себе не появится — нужно или вновь вызывать конструктор настроек ("волшебная палочка") или добавить это поле вручную.
Поступим вторым способом. Для этого переходим на закладку "Настройки", выбираем "Отчет" (ведь мы хотим добавить поле в целом к отчёту), выбираем внизу закладку "Выбранные поля" и перетаскиваем поле "СредняяКалорийность" из левой колонки в правую:
Получилось вот так:
Сохраняем и формируем отчет:
Поле появилось и мы видим, что его значениями являются значения поля "Калорийность". Отлично!
Но мы помним, что конечная цель — посчитать среднюю калорийность по группам и в целом по отчёту.
Для этого вновь воспользуемся уже знакомым нам механизмом ресурсов (подведение итогов). Переходим на закладку "Ресурсы" и перетаскиваем поле "СредняяКалорийность" из левой колонки в правую:
При этом в колонке "Выражение" выбираем "Среднее(СредняяКалорийность)":
Сохраняем и формируем отчёт:
Видим, что по группам, то есть по каждому цвету, и по отчёту в целом совершенно верно посчиталось среднее значение. Но присутствуют лишние записи по отдельным продуктам (не по группам), которые хотелось бы убрать из отчёта.
Знаете почему они появились (значения не по группам)? Потому что, когда мы добавляли поле "СредняяКалорийность" в настройки отчёта, на втором шаге мы выделили весь отчёт в целом и это новое поле попало в элемент "Детальные записи".
Исправим ошибку. Для этого вернёмся на закладку "Настройки", выберем "Детальные записи" сначала сверху (шаг 2), а затем "Детальные записи" снизу (шаг 3), перейдём на закладку "Выбранные поля" и увидим в её правой колонке элемент "Авто".
Элемент "Авто" — это не одно поле. Это несколько полей, которые попадают сюда автоматически на основании вышестоящих настроек.
Чтобы увидеть, что это за поля — нажмём на элемент "Авто" правой кнопкой и выберем пункт "Развернуть":
Элемент "Авто" раскрылся в следующие поля:
А вот и наше поле "СредняяКалорийность", которое попало сюда из пункта "Отчет", когда мы его туда перетаскивали. Просто снимем галку рядом с этим полем, чтобы убрать его вывода:
Сохраним и сформируем отчёт:
То, что надо! Значения "СредняяКалорийность" остались только в группах (цвет) и в итоге по отчёту в целом.
Подводим итог (количество) по вкусам
Ну и напоследок, чтобы закрепить умение подводить итоги, сделаем вывод количества различных вкусов для продуктов каждого цвета.
Ну, например, для белого цвета, это значение будет равно 2 (всего два вкуса "Кислый" и "Сладкий"), а для жёлтого 3 ("Сладкий", "Солёный" и "Кислый").
Переходим на закладку "Ресурсы" и перетаскиваем поле "Вкус" из левой колонки в правую:
В качестве выражения выбираем "Количество(Различные Вкус)":
Сохраняем и формируем отчёт:
Войдите на сайт как ученик
Авторизуйтесь, чтобы получить доступ ко всем материалам школы
Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.
На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .
Программное добавление полей и ресурсов в СКД
В данном примере будет показано, как осуществить программное добавление полей и ресурсов в СКД отчет, а так же, как передать таблицу значений в качества источника данных. Для примера реализации программного добавления полей в систему компоновки данных, будет использоваться таблица значений с неизвестным количеством колонок, которые нужно вывести в отчет СКД.
Для начала необходимо создать внешний отчет, в модуле объекта которого добавить процедуру ПриКомпоновкеРезультата:
1С программное добавление полей и ресурсов в СКД — СозданиеОтчета
После необходимо создать основную схему компоновки данных, как показано на изображении:

1С программное добавление полей и ресурсов в СКД — ВнешнийНаборДанных

1С программное добавление полей и ресурсов в СКД — НастройкаГруппировки
1С 8.3 : Произвольный макет в СКД
Делал недавно отчет с неопределенным количеством колонок. Возиться с кодом было неохота, решил сделать на СКД. С этим проблема не возникла, необходимо было натянуть результат на произвольный макет (свой заголовок + период). Покажу на примере по шагам, с чем столкнулся и как решил.
Первоначальную настройку схемы СКД описывать не буду, начнем с того, что мне надо было сделать произвольный заголовок. В нашем случае, формируем представление периода отчета.
Добавляем новый параметр "ПредставлениеПериода", тип Строка. 
Теперь добавляем новое поле группировки, поля группировок не выбираем (Детальные записи), удаляем поле "Авто", переносим наш параметр. 
Переходим на вкладку "Макет", рисуем шапку. Добавляем Заголовок группировки. Мы можем использовать Имя группировки, если заранее задали его в схеме компоновки, или выбрать из доступных полей. После этого определяем область в табличном документе. Далее, прописываем наш параметр на макете, потом необходимо будет установить в свойствах этой ячейки свойство "Заполнение" — "Параметр". И в окне параметров макета связать наш параметр с параметром СКД. 
Теперь немного кода. Создаем форму отчета. Отключаем видимость у Основной Командной Панели и Компоновщика Настроек. Создаем нашу команду "Сформировать", реквизит формы "Дата", перетаскиваем все это на форму. Пишем код в модуле формы:
После этого, если все правильно сделали, результат отчета должен выглядеть вот так: 
Теперь попробуем сделать полностью свой произвольный макет на СКД .
Здесь самое главное понять структуру областей макета в СКД. Разберем пример с неопределенным количеством колонок.
Заготовка для отчета выглядит так: 
Пример результата: 
Теперь создаем свой макет:
1. Добавляем шапку по аналогии с прошлым примером. Устанавливаем макет оформления "Без оформления". Итоги по номенклатуре выводить не будем, поэтому ставим у таблицы настройку "Расположение общих итогов по горизонтали" — "Нет". 
2. Теперь создаем макет, прописываем параметры, настраиваем дополнительные свойства ячеек. Например, для номенклатуры можно выставить в свойстве "Размещение текста" значение "Переносить" вместо "Авто", а так же указать параметры расшифровки. 
3. Теперь самое интересное, назначаем области. Структура областей будет выглядеть таким образом: 
Начинаем создавать области, параметры при этом будут автоматически сопоставляться по именам. В итоге должно получиться следующее: 
Проверяем отчет, должно получиться следующее: 
4. Пишем код по аналогии с прошлым примером:
Код 1C v 8.2 УП
В итоге у нас получается следующее: 
Кстати, при последующем открытии отчета, вы увидите, что компоновка перестроила макет по-своему.
Это вполне нормально, не стоит беспокоиться.
Особенности создания отчетов (1Cv8)
Особенности создания отчетов в 1С v8 в режиме толстого клиента
Как сделать выбор варианта?
- На панель отчета помещаем кнопку «ВыбратьВариант»
- На форму помещаем поле «НаДату»
Особенности создания отчетов через СКД
Поэтапное создание отчета
- Создать Отчет в узле Отчетов
- Создать Макет в отчете, тип которого — Схема компоновки данных
- В свойствах отчета установить: Основная схема компоновки данных = Созданный Макет
- В свойствах отчета установите подсистему, которой он принадлежит (отчет в Предприятии будет выведен в верхней навигационной панели)
- Создать запрос в Макете (пункт: Добавить набор данных — Запрос)
- В закладке Параметры у Макета необходимо убрать галочки у всех строк в колонке ОграничениеДоступности — т.е. все параметры будут доступны для редактирования пользователю
- В закладке Настройки у Макета необходимо в окне, где выводится узел Отчет, создать новую группировку без указания поля группировки — будет создана детальная строка
- В закладке Настройки у Макета, в окне где выводится дополнительный набор закладок, выбрать доп. закладку Параметры — пометить все параметры галочкой и на каждом параметре нажать кнопку Свойства элемента пользовательских настроек, откроется окно настройки параметра, где необходимо поставить галочку — Включать параметр в пользовательские настройки
- В закладке Настройки у Макета, в окне где выводится дополнительный набор закладок, выбрать доп. закладку ВыбранныеПоля — там необходимо добавить колонки которые будут выводиться в отчете
- Запускайте Предприятие, открывайте отчет, устанавливайте значения параметров, Сформировать (проверьте что выбран Основной вариант формирования отчета)
Как добавить нередактируемый пользователем параметр?
Например, нам нужно установить параметр запроса «Информационная база»
- В форме макета компоновки на закладке Параметры у нужного параметра снять флаги «Включать в доступные поля» и «Ограничение доступности»
- В форме макета компоновки на закладке Настройка на подзакладке (внизу) Параметры у нужного параметра снять флаг, открыть свойства (кнопка с гаечным ключом), на этой форме:
- Снять флаг «Включать в пользовательские настройки»
- Режим редактирования установить «Недоступный»
- В модуле формы отчета в обработчике события «ПриЗагрузкеВариантаНаСервере» (можно и ПриОткрытии, но НЕ ПриСозданииНаСервере, т.к. она выполняется ДО загрузки настроек отчета и настройки будут перезаписаны) программно установить параметр:
Как задать варианты отчета?
- В форме макета компоновки на закладке Настройки в поле слева можно создать необходимые варианты отчета
Как задать группировки?
- В форме макета компоновки на закладке Настройки в поле справа вверху можно создать необходимые группировки
Как программно вывести отчет?
Как тестировать отчет?
- Сформировать ситуацию в клиентском тесте — удобнее всего через таблицу ситуации
- получить форму отчета — форма = ПолучитьФорму(«Отчет.ДвижениеПроцесов.Форма.ФормаОтчета»);
- загрузить нужный вариант отчета — установить параметр расширения формы отчета «КлючВарианта» (имя настройки в макете компоновки данных)
- загрузить нужные настройки отчета - ? заполнить параметр расширения формы отчета «ПользовательскиеНастройки» (тип «ПользовательскиеНастройкиКомпоновкиДанных «) так не получилось, все сложно, см. ниже.
- открыть форму — форма.Открыть()
- выполнить формирование — форма.СкомпоноватьРезультат();
- проверить содержимое табличного документа форма.Результат — хорошо бы иметь функции сравнения с эталонной mxl
- закрыть форму — форма.Закрыть(); — а может быть, можно и не открывать, надо проверить
- описание: меню Справка/Синтакс-помощник/закладка Содержание/Интерфейсные объекты управляемого приложения/Расширения управляемой формы/Расширение управляемой формы для отчета/Параметры формы
При сложных запросах СКД гораздо удобнее тестировать сам запрос отдельно, в серверных тестах, и только после отладки переносить в макет СКД.
- проще создавать тестовую ситуацию
- проще проверять результат
- быстрее
Но хотя бы один простейший клиентский smoke-тест все равно нужен.
Как загрузить нужные настройки отчета?
В документации описано, что есть такой параметр расширения формы отчета «ПользовательскиеНастройки» типа «ПользовательскиеНастройкиКомпоновкиДанных», но там очень сложная объектная структура, не удалось её использовать.
Реально работающая схема:
1. Создаём в отчете параметры
- Период типа СтандартныйПериод
- Отбор типа СписокЗначений (лучше было бы Структура, но её нет в списке типов параметров, как и произвольного типа)
2. В процедуру ПолучитьФорму передаем нужные параметры:
3. В обработчиках событий формы устанавливаем параметры
- Есть ПараметрыДанных, то есть то что устанавливается в параметры запроса СКД
- Некоторые из них назначаются в настройке варианта в ПользовательскиеНастройки (в свойтсвах параметра есть флаг «Включить в пользовательские настройки»
- Даже если при загрузке на сервере в параметры данных загрузить нужные значения, потом открывается форма, в которую автоматически загружаются сохраненные в прошлый раз настройки. Эти настноки при формировании отчета «перебивают» настройки данных
- В обработчике ПриЗагрузкеПользовательскихНастроекНаСервере передаваемый объект Настройки является копией реальных настроек, поэтому чтобы изменить настройки, которые появятся на форме, надо заполнять объект Отчет.КомпоновщикНастроек.ПользовательскиеНастройки
Как сделать множественные (списком) параметры запроса в СКД?
В запросе нужно использовать выражение «В (&ИмяПараметра)» (см. Логические выражения в языке запросов 1Cv8)
В настройке макета схемы СКД на закладке «Параметры» для этого параметра надо поставить галочку в колонке «Доступен список значений». В этом случае при выборе параметра СКД выдает форму редактирования списка, в которой можно добавить любое значение параметров.
Как сделать отключаемые параметры запроса в СКД?
В запросе СКД надо использовать конструкции, окруженные фигурными скобками «<>«.
Если галочка в форме отчета (панель быстрой настройки) у соответствующего параметра снята, то эта конструкция убирается из запроса.
Подробнее см. Расширение языка запросов для системы компоновки данных (1Cv8)
Как сделать отчет с разворотом по колонкам?
Для этого в настройке варианта отчета (редактирование макета компоновки данных, закладка «Настройка», поле справа вверху), нужно в качестве первой группировки добавить «Таблица».
После этого в узле «Таблица» появляются ветки «Строки» и «Колонки», куда и добавляются нужные группировки.
Как настроить формат вывода полей?
В редакторе макета компоновки данных на закладке «Наборы данных» в правой верхней области есть список полей отчёта.
Есть две возможности:
- Настроить значение колонки «Выражение представления»
- здесь можно ввести выражение языка, выдающее нужную строку
- с полям ресурсов это не работает
- Настроить значение колонки «Оформление»
- в оформлении есть свойство «Формат» — это значение, аналогичное параметру функции языка «Формат», можно задать нужный вид
- преобразование типов здесь не сделать
Для полей ресурсов можно задавать выражения вычисления (закладка «Ресурсы») — например,
для перевода из секунд в часы.
Нужную точность можно задать через «Оформление» поля на закладке «Наборы данных».
Особенности установки параметров системы компоновки данных
Существуют и требуют различной обработки по крайней мере ТРИ вида параметров:
ПараметрыДанных
ПараметрыДанных определяются в запросе (источнике данных) СКД.
Параметры данных передаются в запрос источника данных и определяют извлекаемые данные.
В объекта КомпоновщикНастроек есть специальное свойство для работы с параметрами данных КомпоновщикНастроек.Настройки.ПараметрыДанных
Можно установить вызовом вида
Отбор
Отборы накладываются на полученные данные после извлечения из источника данных.
В объекта КомпоновщикНастроек есть специальное свойство для работы с отборами КомпоновщикНастроек.Настройки.Отбор.
ПользовательскиеНастройки
Пользовательские настройки определяют данные, которые пользователь может настроить на форме.
Пользовательские настройки могут отображаются на форме в специальной таблице и могут быть вызваны по кнопке «Настройки» и из меню «Все действия».
Пользовательские настройки связаны с параметрами данных и отборами каким-то достаточно сложным образом, эту связь можно настраивать визуально, но программно с ними работать как-то очень неудобно.
Пока не нашлось ничего лучшего, как устанавливать значения существующей коллекции по индексу, что само собой может отъехать при изменении макета СКД в визуальном редакторе.
Кроме того, если какой-то параметр данных объявлен пользовательским, то программной установки параметра данных (см.выше) недостаточно, восстанавливаемое значение пользовательской настройки перебивает установку параметра данных. Поэтому для таких параметров нет смысла устанавливать параметр данных, нужно сразу устанавливать пользовательскую настройку.
Удобное место для установки нужных значений — обработчик события «ПриЗагрузкеПользовательскихНастроекНаСервере» расширения формы отчёта.
Использование источника данных в виде объекта
Для использования набора данных типа объект нужно передать внешний источник данных методу Инициализировать объекта «Процессор компоновки данных».
Простой пример приложен (для работы примера необходимо наличие справочников «Контрагенты» и «Договоры контрагентов»).
Источник: http://partners.v8.1c.ru/forum/thread.jsp?id=496129#496129
Язык выражений системы компоновки данных
Использование нестандартных макетов оформления отчета СКД
Кое-как удалось заставить СКД формировать заголовки группировок.
Непонятная на первый взгляд фишка — то, что в настройках группировок нужно задать «Имя» группировки (через контекстное меню — «Установить имя»), а кроме того это имя группировки надо добавлять в «Детальные записи» а не в групприровки..
В общем, темный лес, не для средних умов..
Вывод разрыва страницы при печати через СКД
Просто вставить в макет разрыв страницы ничего не дало — в результат он не попадает.
Поиск дал информацию что это проблема СКД
Лейбович Максим (1С, Москва)
09.02.2009 09:13 Отвечает на: »»»»
653075 Re: разрыв страницы при выводе отчета средствами сиситемы компоновки данных
Такой возможности нет. Аналогичные пожелания зарегистрированы.
Источник: http://partners.v8.1c.ru/forum/thread.jsp?id=642887#642887
Рекомендуют выводить программно через ВывестиГоризонтальныйРазделительСтраниц.
В новой версии 8.2 в модуле объекта отчета есть обработчик события ПриКомпоновкеРезультата. (Приятная особенность — пример в документации 8.2 написан с ошибками и вообще не работает:)