Своя колонка в отчёте 1С: поле-выбор, поле-выражение и вычисляемые поля СКД
Содержание
Пользовательское поле добавляется в любой отчёт 1С 8.3 на системе компоновки данных (СКД) прямо в режиме «Предприятие»: откройте Ещё → Изменить вариант отчета, перейдите на вкладку «Пользовательские поля», нажмите «Добавить» и выберите «Новое поле-выражение» или «Новое поле-выбор». Затем отметьте новое поле в списке выбранных полей и сохраните вариант. Конфигуратор для этого не нужен.
Конфигуратор, расширение или код понадобятся, когда поле должно появиться у всех пользователей сразу или нужных данных нет в запросе отчёта. Ниже все четыре пути — от самого простого к самому трудоёмкому. Механизм общий для платформы, поэтому он одинаково работает в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других типовых конфигурациях, где отчёт построен на СКД.
Что можно вывести в отчет: проверка перед добавлением поля
Пользовательское поле не берёт данные из воздуха. Оно считается только из полей, которые уже есть в наборе данных отчёта. Поэтому сначала выясните, к какому случаю относится ваша задача.
| Задача | Решение | Кто делает |
|---|---|---|
| Посчитать новое значение из существующих колонок (наценка, доля, разница) | Поле-выражение | Пользователь |
| Разложить значения по своим группам («крупный / мелкий клиент») | Поле-выбор | Пользователь |
| Вывести реквизит связанного объекта (ИНН контрагента, артикул) | Добавить поле через точку в выбранных полях | Пользователь |
| Вывести данные, которых нет в запросе (другой регистр, сведения из другой таблицы) | Доработка схемы | Программист |
Как проверить, что поле доступно:
- Откройте отчёт и перейдите в
Ещё → Изменить вариант отчета. - На вкладке «Поля» нажмите «Добавить» — откроется список доступных полей.
- Раскройте плюсиком ссылочные поля: у «Контрагента» внутри есть его реквизиты, у «Номенклатуры» — свои.
Если нужное значение нашлось в этом дереве, программист не нужен. Если нет — переходите к разделу про конфигуратор.
В некоторых отчётах БП 3.0 своя форма настроек без команды «Изменить вариант отчета» (например, оборотно-сальдовая ведомость). Пользовательских полей там нет. Тогда используйте «Универсальный отчет» из раздела Отчеты — он построен на СКД и даёт полный редактор варианта.
Способ 1. Пользовательское поле в отчете без конфигуратора
Это главный способ для бухгалтера и аналитика. Поле живёт в настройках варианта отчёта и сохраняется вместе с ним. В конфигурацию ничего не вносится, обновления базы его не затрагивают.
Поле-выражение: формула из других колонок
Пример: в отчёте по продажам есть «Выручка» и «Себестоимость», нужна колонка «Валовая прибыль».
- В форме изменения варианта откройте вкладку «Пользовательские поля».
- Нажмите «Добавить» → «Новое поле-выражение».
- В поле «Заголовок» напишите
Валовая прибыль. - В «Выражении детальных записей» соберите формулу:
Выручка - Себестоимость. Поля удобнее переносить двойным щелчком из списка доступных — так не ошибётесь в имени. - В «Выражении итоговых записей» укажите
Сумма(Выручка) - Сумма(Себестоимость). - Нажмите «ОК», вернитесь на вкладку «Поля» и добавьте новое поле. Оно лежит в папке «Пользовательские поля».
- Сформируйте отчёт и проверьте итоги по группировкам.
Два выражения нужны потому, что детальная строка и итог считаются по-разному. Для разницы это неочевидно, а для процента — критично.
Наценка в процентах, детальное выражение:
ВЫБОР
КОГДА Себестоимость = 0 ТОГДА 0
ИНАЧЕ (Выручка - Себестоимость) / Себестоимость * 100
КОНЕЦ
Итоговое выражение:
ВЫБОР
КОГДА Сумма(Себестоимость) = 0 ТОГДА 0
ИНАЧЕ (Сумма(Выручка) - Сумма(Себестоимость)) / Сумма(Себестоимость) * 100
КОНЕЦ
Если итоговое выражение оставить пустым, в строке итога будет сумма процентов по строкам. Для трёх товаров с наценкой 20%, 30% и 40% получится 90% — бессмыслица.
Поле-выбор: свои группы значений
Поле-выбор присваивает строке значение по условию. Пример — разделить покупателей по объёму.
- «Добавить» → «Новое поле-выбор», заголовок
Категория клиента. - Добавьте вариант: значение
Крупный, отбор — «Выручка» больше или равно1 000 000. - Добавьте второй вариант:
Средний, отбор — «Выручка» больше или равно100 000. - Внизу заполните «Значение по умолчанию»:
Мелкий. - Добавьте поле в группировки на вкладке «Структура» — так отчёт сгруппирует клиентов по категориям.
Условия проверяются сверху вниз, срабатывает первое подходящее. Поэтому порядок строк важен: если поставить «Средний» первым, крупные клиенты тоже попадут в средние.
Как сохранить результат
Нажмите «Закрыть и сформировать», затем в отчёте Ещё → Сохранить вариант отчета. Дайте варианту своё имя. Если поле должно увидеть отдел, при сохранении отметьте доступность другим пользователям — в типовых конфигурациях такая галочка есть в форме сохранения.
Не правьте предопределённый вариант «под себя». Сохраните копию под своим именем: так поле не потеряется, если кто-то нажмёт «Стандартные настройки».
Способ 2. Добавление поля в схему отчета через конфигуратор
Нужен, когда данных нет в запросе или поле должно стать частью отчёта для всех. Работает только в доработанных или собственных отчётах: типовые лучше не трогать, иначе обновление конфигурации пройдёт через сравнение-объединение.
- Откройте отчёт в дереве конфигурации и запустите редактор основной схемы компоновки данных.
- На вкладке «Наборы данных» откройте запрос и добавьте поле в конструкторе запроса. Если нужна новая таблица — соедините её левым соединением по ссылке.
- Поле появится в списке полей набора. Задайте ему заголовок — его увидит пользователь.
- Для чисел, которые суммируются, перейдите на вкладку «Ресурсы» и добавьте поле с функцией
Сумма. - Если поле считается из других, используйте вкладку «Вычисляемые поля»: путь к данным, выражение, заголовок.
- На вкладке «Настройки» добавьте поле в выбранные поля нужного варианта.
- Сохраните конфигурацию и обновите конфигурацию базы данных.
Чем вычисляемое поле схемы отличается от пользовательского:
| Признак | Вычисляемое поле схемы | Пользовательское поле |
|---|---|---|
| Где задаётся | Конфигуратор | Режим «Предприятие» |
| Кто видит | Все пользователи отчёта | Те, кому доступен вариант |
| Переживает обновление | Только при доработанном отчёте | Да, это настройки |
| Можно использовать в отборе | Да | Да |
| Новые данные из базы | Нет, только из полей набора | Нет |
Ни то, ни другое не добавит данных, которых нет в запросе. Новые данные — только через изменение набора.
Способ 3. Расширение конфигурации вместо правки типового отчета
Расширения появились в платформе 8.3.6 и стали основным способом доработок без снятия типовой конфигурации с поддержки. Для отчётов практичны два варианта.
Свой отчёт в расширении. Создайте в расширении новый отчёт, скопируйте в него схему исходного отчёта и добавьте поля как в способе 2. Типовой отчёт остаётся нетронутым, а пользователи получают отдельный пункт в разделе.
Дополнение заимствованного отчёта кодом. Заимствуйте отчёт в расширение и в модуле объекта перехватите обработчик ПриКомпоновкеРезультата аннотацией &Перед. В нём добавьте вычисляемое поле в схему программно — пример в следующем разделе.
Порядок подключения расширения:
- В конфигураторе
Конфигурация → Расширения конфигурации, создайте расширение. - Заимствуйте отчёт или создайте новый, внесите изменения.
- Обновите конфигурацию базы данных расширения.
- Перезапустите сеанс «Предприятия» — изменения появятся только в новом сеансе.
Для готового расширения в виде файла .cfe загрузка и обновление конфигурации базы данных — два отдельных шага. Загрузили файл, но не обновили — расширение не заработает.
Сравнение способов:
| Способ | Когда выбирать | Риски |
|---|---|---|
| Пользовательское поле | Формула из имеющихся колонок | Почти нет, поле только в варианте |
| Конфигуратор | Свой или уже доработанный отчёт | Типовой отчёт снимается с поддержки |
| Расширение | Типовой отчёт, нужны новые данные | После обновления проверить совместимость |
| Код | Поле зависит от условий, ролей, параметров | Ошибка в коде ломает формирование отчёта |
Способ 4. Программное добавление полей в отчет на СКД
Код нужен, когда поле добавляется по условию: для определённой роли, организации или параметра. Работают две коллекции — вычисляемые поля схемы и пользовательские поля настроек.
Вычисляемое поле в схеме. Код для модуля отчёта или обработчика в расширении, где доступна переменная СхемаКомпоновкиДанных:
НовоеПоле = СхемаКомпоновкиДанных.ВычисляемыеПоля.Добавить();
НовоеПоле.ПутьКДанным = "ВаловаяПрибыль";
НовоеПоле.Выражение = "Выручка - Себестоимость";
НовоеПоле.Заголовок = "Валовая прибыль";
Ресурс = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
Ресурс.ПутьКДанным = "ВаловаяПрибыль";
Ресурс.Выражение = "Сумма(ВаловаяПрибыль)";
Пользовательское поле в настройках и вывод его в отчёт:
Настройки = КомпоновщикНастроек.Настройки;
ПолеВыр = Настройки.ПользовательскиеПоля.Элементы.Добавить(
Тип("ПользовательскоеПолеВыражениеКомпоновкиДанных"));
ПолеВыр.Заголовок = "Наценка, %";
ПолеВыр.УстановитьВыражениеДетальныхЗаписей(
"ВЫБОР КОГДА Себестоимость = 0 ТОГДА 0
|ИНАЧЕ (Выручка - Себестоимость) / Себестоимость * 100 КОНЕЦ");
ПолеВыр.УстановитьВыражениеИтоговыхЗаписей(
"ВЫБОР КОГДА Сумма(Себестоимость) = 0 ТОГДА 0
|ИНАЧЕ (Сумма(Выручка) - Сумма(Себестоимость)) / Сумма(Себестоимость) * 100 КОНЕЦ");
ВыбранноеПоле = Настройки.Выбор.Элементы.Добавить(
Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ПолеВыр.ПутьКДанным);
Путь к данным пользовательского поля платформа присваивает сама, поэтому в выбранные поля его передают через ПолеВыр.ПутьКДанным, а не строкой вручную.
Если код срабатывает при каждом формировании, проверяйте, не добавлено ли поле раньше. Иначе после третьего нажатия «Сформировать» в отчёте окажутся три одинаковые колонки.
Оформление пользовательских полей: формат, заголовок, цвет
Поле добавлено, но выводится как 12345,6789 и встаёт в конец таблицы. Исправляется в той же форме изменения варианта.
- 🔢 Формат числа. Вкладка «Условное оформление» → «Добавить», в оформлении выберите «Формат» и задайте две цифры после запятой. В полях оформления укажите только новое поле. Строка формата для того же результата —
ЧДЦ=2. - 📍 Порядок колонок. На вкладке «Поля» перетащите поле мышью или переместите стрелками.
- 🏷 Заголовок колонки. Задаётся в свойстве «Заголовок» самого поля. Короткий заголовок не растягивает таблицу.
- 🎨 Подсветка значений. Там же, в условном оформлении: условие «Наценка, % меньше 10» → цвет текста красный. Убыточные позиции видно сразу.
- 📊 Сортировка. По пользовательскому полю можно сортировать — добавьте его на вкладке «Сортировка», например по убыванию прибыли.
Почему поле пустое или считается неверно
Скорость отчета с дополнительными полями
Пользовательские и вычисляемые поля считаются после выполнения запроса, на стороне компоновки. Пара формул на скорость почти не влияет. Тормозит отчёт другое.
- 🐢 Поля через точку. Каждый реквизит связанного объекта (
Контрагент.ИНН,Номенклатура.Вид) добавляет соединение в запрос. Десяток таких полей на большой базе заметно замедляют формирование. - 🐢 Детальные записи. Вариант, где в структуре стоят «Детальные записи», выводит каждую строку движения. На периоде в год это десятки тысяч строк. Уберите детальные записи или сократите период.
- 🐢 Отбор по вычисляемому полю. Отбор по нему накладывается после получения данных, а не в запросе. Сначала сузьте отчёт отбором по обычному полю: организация, период, склад.
- 🐢 Лишние соединения в доработанной схеме. Если для одного поля в запрос добавили целую таблицу, проверьте, нужен ли там левый, а не полный набор данных.
Хорошая привычка: добавили поле — сформируйте отчёт за месяц, затем за год. Если разница в разы больше ожидаемой, ищите поле через точку или новое соединение.