При работе с Системой компоновки данных (СКД), особенно в конфигурациях на обычных формах, таких как «Управление торговлей 10.3», разработчики часто сталкиваются с ситуацией, когда вычисляемое поле в отчете остается пустым или выводит нулевые значения. Это может происходить даже в тех случаях, когда формула кажется абсолютно логичной и верной. Проанализируем основные причины возникновения этой проблемы и разберем пошагово методы ее решения.
Это самая распространенная ошибка. В СКД вычисляемые поля могут отображаться в двух контекстах: в детальных записях и в группировках (итогах). Если вы создали вычисляемое поле, например, Поле3, и хотите видеть его значение в строках по подразделениям или складам, система должна знать, как агрегировать эти данные. Без указания функции агрегации в колонках группировок будет пусто.
Рассмотрим порядок действий для исправления:
Поле3 в списке доступных полей.Сумма(Поле3).Важно помнить, что если поле является числовым и должно участвовать в итогах, расчет без добавления в ресурсы просто не будет произведен для итоговых строк отчета.
Часто в вычисляемых полях пытаются использовать условия типа Подразделение = "Минск". С точки зрения системы 1С, это логическая ошибка: поле Подразделение является ссылкой на объект (типа СправочникСсылка.Подразделения), а "Минск" — это обычная строка. Такое сравнение всегда будет возвращать «Ложь».
Проанализируем правильные варианты написания таких условий:
Вариант А: Обращение к наименованию. Мы можем сравнивать строковый реквизит объекта со строкой:
ВЫБОР
КОГДА Подразделение.Наименование = "Минск"
ТОГДА Стоимость
ИНАЧЕ 0
КОНЕЦ
Вариант Б: Использование параметров (наиболее правильный метод). Сравнение ссылок работает быстрее и надежнее. Создадим параметр &Минск и будем сравнивать с ним:
ВЫБОР
КОГДА Подразделение = &Минск
ТОГДА Стоимость
ИНАЧЕ 0
КОНЕЦ
Чтобы параметр &Минск автоматически заполнялся нужной ссылкой, на закладке Параметры в поле Выражение можно прописать программный поиск (сойдет для быстрой настройки):
Справочники.Подразделения.НайтиПоНаименованию("Минск") или Справочники.Подразделения.НайтиПоКоду("00001").
В языке выражений СКД конструкция ВЫБОР должна возвращать значения одного типа во всех своих ветках. Если вы написали ВЫБОР КОГДА ... ТОГДА Стоимость КОНЕЦ, и условие не выполнилось, система вернет значение NULL (пустоту). Это часто приводит к тому, что все вычисляемое поле перестает считаться или сбрасывается в итоговых суммах.
Выясним причину на примере. Если мы складываем Число + NULL, результатом всегда будет NULL. Чтобы этого избежать, всегда явно указывайте значение по умолчанию:
ВЫБОР
КОГДА Подразделение.Наименование ПОДОБНО "%Минск%"
ТОГДА ЕстьNULL(Стоимость, 0)
ИНАЧЕ 0
КОНЕЦ
Обратите внимание на использование функции ЕстьNULL внутри условия. Она гарантирует, что если в исходных данных поле Стоимость не заполнено, расчет подставит 0 вместо пустоты.
Иногда визуально кажется, что в поле написано "Минск", но на самом деле там могут быть невидимые символы, лишние пробелы или переносы строк. В этом случае строгое равенство = "Минск" не сработает.
Посмотрим на решение через оператор ПОДОБНО:
ВЫБОР
КОГДА Подразделение.Наименование ПОДОБНО "%Минск%"
ТОГДА Стоимость
ИНАЧЕ 0
КОНЕЦ
Символы процента % означают любое количество произвольных символов до и после искомого слова. Это позволяет «обойти» проблемы с лишними пробелами или невидимыми знаками форматирования.
Вычисляемые поля рассчитываются после выполнения основного запроса к базе данных. Если ваше Поле3 зависит от Поля1 и Поля2, убедитесь, что эти поля доступны в наборе данных.
Проанализируем ситуацию: если вы пытаетесь в выражении одного вычисляемого поля обратиться к имени другого вычисляемого поля, это может не сработать, если СКД еще не успела его инициализировать. В таких случаях лучше дублировать формулу первого поля внутри второго или использовать функции компоновки, такие как ВычислитьВыражение(), хотя это требуется только для очень сложных расчетов (например, долей или накопительных итогов).
Часто программист вносит изменения в конфигураторе, добавляет вычисляемое поле, настраивает ресурсы, но при запуске отчета в «1С:Управление торговлей 10.3» ничего не меняется. Это происходит из-за того, что система сохранила старые настройки варианта отчета в текущем сеансе пользователя.
Разберем, как принудительно обновить структуру отчета:
Если поле все еще не вычисляется, пройдите по следующим пунктам:
Стоимость), имеют числовой тип в наборе данных.ЕстьNULL(ИмяПоля, 0).Сумма.Наименование подразделения), из-за чего условия в ВЫБОР всегда будут ложными.Использование этих методов позволит вам диагностировать и исправить большинство проблем с вычисляемыми полями в СКД, обеспечив корректный вывод данных в ваших отчетах.