Решение задач 1С:Предприятие 8 на примерах

Выражения и макеты СКД в 1С: вычисляемые поля и условное оформление

Отчёты и СКДОпубликовано

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

Задача: показывать в отчёте не сырые данные, а понятный результат

Отчёт по остаткам вернул числа, но пользователю нужны «Дефицит» и «В наличии», доля каждого товара в итоге, красные отрицательные значения и заголовок вида «Остатки на 31.10.2026». Всё это решается выражениями и оформлением, не затрагивая запрос. Выражения работают в нескольких местах схемы компоновки данных, и у каждого места свои правила.

Вычисляемые поля

Вычисляемое поле добавляют на закладке «Вычисляемые поля» схемы: указывают путь к данным (имя, по которому поле будет видно в настройках), выражение и заголовок. Выражение записывают на языке выражений СКД — он похож на язык запросов, а не на встроенный язык 1С.

// Путь к данным: Статус
Выбор
    Когда КоличествоОстаток < 0 Тогда "Дефицит"
    Когда КоличествоОстаток = 0 Тогда "Нет в наличии"
    Иначе "В наличии"
Конец

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

ВычисляемоеПоле = СхемаКомпоновкиДанных.ВычисляемыеПоля.Добавить();
ВычисляемоеПоле.ПутьКДанным = "Статус";
ВычисляемоеПоле.Заголовок = "Статус";
ВычисляемоеПоле.Выражение = "Выбор Когда КоличествоОстаток < 0 Тогда ""Дефицит"" Иначе ""В наличии"" Конец";

Важное свойство: вычисляемое поле считается для каждой записи набора данных, до группировки. Поэтому в нём удобно вычислять статус, склеивать строки, форматировать числа и даты, но не считать итоги по группе — для этого есть ресурсы. Если после изменения схемы из кода список полей в компоновщике не обновился, заново выполните Инициализировать() с источником доступных настроек, построенным по изменённой схеме.

Функции языка выражений СКД

Наиболее часто нужны следующие функции:

  • Выбор Когда … Тогда … Иначе … Конец — условие; вариантов Когда может быть несколько.
  • ЕстьNULL(Поле, 0) — подстановка значения вместо NULL после левого соединения в запросе.
  • Формат(Значение, "ЧДЦ=2; ЧГ=") и Формат(Дата, "ДФ='dd.MM.yyyy'") — форматная строка как в обычном Формат() встроенного языка.
  • Представление(Поле) — строковое представление ссылки; ЗначениеЗаполнено(Поле) — проверка непустого значения.
  • Подстрока(), СокрЛП(), ДлинаСтроки(), Год(), Месяц(), НачалоПериода(), КонецПериода(), ДобавитьКДате(), РазностьДат() — работа со строками и датами.
  • ВычислитьВыражение() — вычисление выражения в другом контексте: по всему отчёту, по родителю, по предыдущей записи.

Пример форматирования для текстового поля: "Остаток: " + Формат(КоличествоОстаток, "ЧДЦ=0") + " шт.". Условный текст внутри строки собирается так же, как в запросе, с помощью Выбор. Обратите внимание на отличие от встроенного языка: оператор «неравно» записывается как <>, а логические операции — И, ИЛИ, НЕ; тернарный оператор ?() встроенного языка в выражениях СКД не используется — вместо него служит Выбор.

Выражения в ресурсах

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

// Ресурс ДоляПроцент
Выбор
    Когда ВычислитьВыражение("Сумма(Сумма)", , "ОбщийИтог") = 0 Тогда 0
    Иначе Сумма(Сумма) * 100 / ВычислитьВыражение("Сумма(Сумма)", , "ОбщийИтог")
Конец

Проверка деления на ноль нужна, иначе пустой отчёт покажет ошибку или пустое значение. Для одного ресурса можно задать разные выражения по разным группировкам: в строке ресурса указывают имя группировки в колонке «Рассчитывать по…» и своё выражение. Так делают средневзвешенную цену на верхних уровнях и простую сумму на нижних.

Пользовательские поля

Если схему менять нельзя, а поле нужно, пользователь создаёт его прямо в настройках варианта в режиме «1С:Предприятие». Доступны два вида: поле-выражение (выражение на языке СКД над доступными полями отчёта) и поле-выбор (список условий и значений без написания синтаксиса). Такие поля сохраняются в настройках варианта пользователя и не попадают в конфигурацию. Это удобный способ дать аналитику свой расчёт, не привлекая программиста.

Условное оформление

Условное оформление находится в настройках варианта. Элемент состоит из трёх частей: список полей, к которым применяется оформление, условие (отбор) и параметры оформления — цвет текста, цвет фона, шрифт, формат, текст. Через интерфейс его добавляют на закладке «Условное оформление». Программно:

ЭлементОформления = Компоновщик.Настройки.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Использование = Истина;

ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("КоличествоОстаток");
ПолеОформления.Использование = Истина;

ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("КоличествоОстаток");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбора.ПравоеЗначение = 0;
ЭлементОтбора.Использование = Истина;

ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(200, 0, 0));

Если список полей оставить пустым, оформление применяется ко всей строке. Условное оформление работает только при выводе в табличный документ; при выводе в таблицу значений оно не имеет смысла.

Макеты в СКД и вывод заголовков

Для тонкой настройки внешнего вида есть закладка «Макеты» схемы. Основные виды — макеты полей (как выводится значение или заголовок отдельного поля) и макеты группировок (заголовок и подвал группировки, в том числе общих итогов). Каждый макет — небольшая табличная область с ячейками. Текст ячейки может содержать параметр макета: ему на этой же закладке задают выражение, например "Склад: " + Склад для макета заголовка группировки по складу, и при выводе параметр подставится значением. Макеты применяют, когда стандартного вывода недостаточно: нужна «шапка» группировки с несколькими строками, дополнительные итоги в подвале или нестандартные рамки.

Заголовок отчёта и другие параметры вывода задают без макетов — через параметры вывода настроек:

ПараметрыВывода = Компоновщик.Настройки.ПараметрыВывода;
ПараметрыВывода.УстановитьЗначениеПараметра("Заголовок", "Остатки товаров на складе");
ПараметрыВывода.УстановитьЗначениеПараметра("ВыводитьОтбор", ТипВыводаТекстаКомпоновкиДанных.НеВыводить);

Выражения в параметрах схемы

Выражения можно задавать и параметрам на закладке «Параметры». Так получают вычисляемую дату сравнения, не заставляя пользователя вводить её вручную: значение параметра ДатаСравнения строится из другого параметра выражением ДобавитьКДате(&КонецПериода, "Месяц", -1). Параметр, который вычисляется по выражению, обычно скрывают от пользователя флажком «Ограничение доступности» — иначе при ручном вводе выражение будет перебито значением. Циклические ссылки параметров друг на друга недопустимы.

Типичные ошибки

  • Ресурс без агрегатной функции. Выражение Сумма нужно писать явно: Сумма(Сумма), а не просто Сумма. Без функции выражение не пройдёт проверку либо итоги окажутся пустыми.
  • Поле не доступно в настройках. Проверьте ограничения использования поля в наборе данных (поле, условие, группировка, порядок) и роль поля. Для вычисляемого поля — что оно есть на закладке «Вычисляемые поля» и его путь к данным уникален.
  • Агрегатная функция в вычисляемом поле. Поле считается построчно; итоги по группе выносят в ресурс.
  • Деление без проверки на ноль в выражениях долей и средних значений.
  • Выражение встроенного языка вместо языка СКД: ?(), методы объектов и обращения к свойствам через точку не работают, условия записывают через Выбор.
  • NULL в арифметике. После левого соединения в запросе поля могут быть NULL; оберните их в ЕстьNULL().
  • Условное оформление не срабатывает, когда имя поля в элементе отбора не совпадает с именем в наборе или оформление задано для поля, которое не выводится.

Где какое выражение уместно

МестоКогда считаетсяАгрегатные функцииТипичное применение
Вычисляемое полеДля каждой записи набораНе используютсяСтатусы, форматирование, склейка строк
РесурсПосле группировкиОбязательныИтоги, доли, средние
Пользовательское полеДля записей, как вычисляемоеНе используютсяРасчёт, добавленный пользователем
Условное оформлениеПри выводе строкиНе используютсяПодсветка значений
Параметр макетаПри выводе макетаДопустимы для итоговЗаголовки и подвалы группировок

Актуальность для новых версий

Язык выражений СКД и перечисленные функции доступны во всех версиях платформы 8.3. Пользовательские поля и расширенные настройки варианта в режиме «1С:Предприятие» появились раньше 8.3.10, но интерфейс окна настроек менялся от релиза к релизу, поэтому названия кнопок и закладок в вашей версии могут отличаться. Программный интерфейс условного оформления и параметров вывода остаётся прежним в версиях 8.3.2x. Макеты оформления отчётов в типовых конфигурациях могут быть заменены собственными макетами БСП.

Частые вопросы

Чем вычисляемое поле отличается от ресурса в СКД?

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

Как в СКД сделать условие, аналог Если Тогда?

Используйте конструкцию Выбор Когда Условие Тогда Значение Иначе Другое Конец. Выражение можно вложить в вычисляемое поле, ресурс или пользовательское поле-выражение.

Почему поле не появляется в настройках отчёта?

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

Как подсветить строки в отчёте СКД?

Добавьте элемент условного оформления в настройки варианта: укажите поля, условие отбора и параметр оформления — цвет текста или фона. Программно это делается через Настройки.УсловноеОформление.Элементы.Добавить().

СКД в 1С: система компоновки данных и программное формирование отчёта

Отчёты и СКД

Объяснение системы компоновки данных 1С: из чего состоит схема компоновки, как работают наборы данных, ресурсы, параметры и настройки, и как сформировать отчёт из кода — в табличный документ или в таблицу значений.

Работа с датой в 1С программно: текущая дата, начало месяца, формат и разность

Алгоритмы

Все основные приёмы работы с датой в коде 1С: создание и преобразование, текущая дата, границы периодов, сдвиг и разность дат, форматирование, пустая дата и часовые пояса.

Соединения в запросах 1С: левое, внутреннее, полное и ОБЪЕДИНИТЬ ВСЕ

Запросы

Виды соединений языка запросов 1С с наглядным результатом, соединение с виртуальными и временными таблицами, отличие ОБЪЕДИНИТЬ от ОБЪЕДИНИТЬ ВСЕ и приёмы, которые защищают от размножения строк и медленных запросов.

Обновление конфигурации 1С: типовой, платформы и сервера

Алгоритмы

Как обновить типовую конфигурацию 1С с доработками и без, что делать с поддержкой, как обновить базу данных, платформу и сервер 1С без потери данных.