Почему не рассчитываются значения в вычисляемых полях СКД и как это исправить

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе с Системой компоновки данных (СКД), особенно в конфигурациях на обычных формах, таких как «Управление торговлей 10.3», разработчики часто сталкиваются с ситуацией, когда вычисляемое поле в отчете остается пустым или выводит нулевые значения. Это может происходить даже в тех случаях, когда формула кажется абсолютно логичной и верной. Проанализируем основные причины возникновения этой проблемы и разберем пошагово методы ее решения.

Причина 1. Поле не добавлено в закладку «Ресурсы»

Это самая распространенная ошибка. В СКД вычисляемые поля могут отображаться в двух контекстах: в детальных записях и в группировках (итогах). Если вы создали вычисляемое поле, например, Поле3, и хотите видеть его значение в строках по подразделениям или складам, система должна знать, как агрегировать эти данные. Без указания функции агрегации в колонках группировок будет пусто.

Рассмотрим порядок действий для исправления:

  1. Перейдем на закладку Ресурсы в схеме компоновки данных.
  2. Найдем наше Поле3 в списке доступных полей.
  3. Перенесем его в правую часть окна.
  4. В колонке Выражение укажем функцию агрегации, например: Сумма(Поле3).

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

Причина 2. Сравнение ссылки с текстовой строкой

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

Проанализируем правильные варианты написания таких условий:

Вариант А: Обращение к наименованию. Мы можем сравнивать строковый реквизит объекта со строкой:


ВЫБОР 
    КОГДА Подразделение.Наименование = "Минск" 
    ТОГДА Стоимость 
    ИНАЧЕ 0 
КОНЕЦ

Вариант Б: Использование параметров (наиболее правильный метод). Сравнение ссылок работает быстрее и надежнее. Создадим параметр &Минск и будем сравнивать с ним:


ВЫБОР 
    КОГДА Подразделение = &Минск 
    ТОГДА Стоимость 
    ИНАЧЕ 0 
КОНЕЦ

Чтобы параметр &Минск автоматически заполнялся нужной ссылкой, на закладке Параметры в поле Выражение можно прописать программный поиск (сойдет для быстрой настройки):

Справочники.Подразделения.НайтиПоНаименованию("Минск") или Справочники.Подразделения.НайтиПоКоду("00001").

Причина 3. Неявное приведение типов и отсутствие ветки ИНАЧЕ

В языке выражений СКД конструкция ВЫБОР должна возвращать значения одного типа во всех своих ветках. Если вы написали ВЫБОР КОГДА ... ТОГДА Стоимость КОНЕЦ, и условие не выполнилось, система вернет значение NULL (пустоту). Это часто приводит к тому, что все вычисляемое поле перестает считаться или сбрасывается в итоговых суммах.

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


ВЫБОР 
    КОГДА Подразделение.Наименование ПОДОБНО "%Минск%" 
    ТОГДА ЕстьNULL(Стоимость, 0) 
    ИНАЧЕ 0 
КОНЕЦ

Обратите внимание на использование функции ЕстьNULL внутри условия. Она гарантирует, что если в исходных данных поле Стоимость не заполнено, расчет подставит 0 вместо пустоты.

Причина 4. Проблемы с пробелами в наименованиях

Иногда визуально кажется, что в поле написано "Минск", но на самом деле там могут быть невидимые символы, лишние пробелы или переносы строк. В этом случае строгое равенство = "Минск" не сработает.

Посмотрим на решение через оператор ПОДОБНО:


ВЫБОР 
    КОГДА Подразделение.Наименование ПОДОБНО "%Минск%" 
    ТОГДА Стоимость 
    ИНАЧЕ 0 
КОНЕЦ

Символы процента % означают любое количество произвольных символов до и после искомого слова. Это позволяет «обойти» проблемы с лишними пробелами или невидимыми знаками форматирования.

Причина 5. Порядок выполнения расчетов и обращение к другим полям

Вычисляемые поля рассчитываются после выполнения основного запроса к базе данных. Если ваше Поле3 зависит от Поля1 и Поля2, убедитесь, что эти поля доступны в наборе данных.

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

Причина 6. Кэширование настроек в пользовательском режиме

Часто программист вносит изменения в конфигураторе, добавляет вычисляемое поле, настраивает ресурсы, но при запуске отчета в «1С:Управление торговлей 10.3» ничего не меняется. Это происходит из-за того, что система сохранила старые настройки варианта отчета в текущем сеансе пользователя.

Разберем, как принудительно обновить структуру отчета:

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

Рекомендации для проверки («Чек-лист» разработчика)

Если поле все еще не вычисляется, пройдите по следующим пунктам:

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

← На главную