Как исправить ошибку #Знач в бюджетном отчете 1С:ERP и настроить ширину колонок

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

При настройке план-фактного анализа в подсистеме бюджетирования 1С:ERP Управление предприятием (начиная с версий 2.4 и выше) пользователи и аналитики часто сталкиваются с неприятным поведением отчетов. В ячейках, где рассчитывается процент выполнения плана или отклонение, вместо ожидаемого нуля или прочерка выводится системная ошибка #Знач. Это не только портит внешний вид управленческой отчетности, но и ломает механизмы условного оформления — система не может раскрасить строки, так как вместо числа получает ошибочное строковое значение.

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

Почему возникает ошибка #Знач (анализ внутреннего механизма 1С)

Давайте проанализируем ситуацию, которую описал автор темы. Для расчета процента выполнения плана используется производный показатель с классической математической формулой:

?([План;;Сумма]=0, 0.0, [Факт;;Сумма]/[План;;Сумма]*100)

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

Проблема кроется в том, как именно внутренний парсер (вычислительный движок) бюджетирования 1С:ERP обрабатывает формулы производных показателей перед выполнением расчета. Он работает методом прямой текстовой подстановки. Вместо идентификаторов ячеек (таких как [Факт;;Сумма]) подставляются их реальные числовые значения.

Если фактических данных в базе нет, то вместо числа система подставляет... **абсолютную пустоту** (ничего). В результате формула вычисления трансформируется в некорректное математическое выражение:

?(639713.5=0, 0, /639713.5*100)

Обратите внимание на фрагмент /639713.5*100. Перед знаком деления отсутствует числитель. Математический интерпретатор платформы 1С обнаруживает грубую синтаксическую ошибку в выражении и аварийно завершает расчет для данной ячейки, возвращая пользователю текстовую заглушку #Знач.

Попытки применить стандартное условное оформление по правилу "Значение не заполнено" или "Равно 0" не дают никакого результата. Платформа видит в ячейке не пустоту и не число, а именно ошибочный статус, к которому невозможно применить стандартные числовые отборы оформления.

---

Способ 1. Исправление формулы с помощью функции ЗначениеЗаполнено()

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

Для этого в конструкторе формул бюджетирования 1С:ERP предусмотрена встроенная логическая функция ЗначениеЗаполнено(). Она проверяет, содержит ли операнд реальное значение, и возвращает истину или ложь. Мы можем обернуть наш потенциально пустой «Факт» в проверку:

?(ЗначениеЗаполнено([Факт;;Сумма]), [Факт;;Сумма], 0)

Теперь соберем итоговую безопасную формулу для расчета процента выполнения плана. Нам нужно сначала проверить, не равен ли нулю «План» (чтобы избежать деления на ноль), а затем безопасно обработать «Факт»:


?([План;;Сумма] = 0, 0, ?(ЗначениеЗаполнено([Факт;;Сумма]), [Факт;;Сумма], 0) / [План;;Сумма] * 100)

Давайте разберем по шагам, как отработает эта формула, если плана настроено на 500 000 рублей, а факта нет:

  1. Система проверяет первое условие: равен ли план нулю? 500000 = 0 — Ложь. Переходим к ветке "иначе".
  2. Вычисляется числитель дроби: ЗначениеЗаполнено([Факт;;Сумма]). Поскольку факта нет (NULL), функция возвращает Ложь.
  3. Внутреннее условие возвращает альтернативное значение — 0.
  4. Формируется итоговое выражение для расчета: 0 / 500000 * 100.
  5. Результат успешно рассчитывается и равен 0 %. Ошибка #Знач больше не появляется!

---

Способ 2. Использование механизма «Формулы по группе»

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

Для реализации этого метода выполним следующие шаги:

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

---

Способ 3. Переход на расчет по связанным ячейкам

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

  1. Вместо типа ячейки «Производный показатель» укажите тип «Ячейка со статьей бюджета» или обычный показатель.
  2. В настройках заполнения ячейки выберите вариант «Расчет по связанным ячейкам».
  3. Свяжите рассчитываемую ячейку с ячейками-источниками (Планом и Фактом). При таком подходе система строит более строгие SQL-запросы к СУБД, автоматически обрабатывая соединения таблиц (LEFT JOIN) и подставляя ISNULL(Fact, 0) на уровне базы данных, что полностью исключает передачу пустых строк в расчетный модуль.

---

Управление шириной колонок в бюджетных отчетах

Второй частый вопрос, который озвучил автор темы — как управлять шириной колонок, ведь при формировании бюджетных отчетов стандартными средствами настроенная пользователем ширина постоянно сбрасывается. Рассмотрим три эффективных метода решения этой задачи.

Метод А. Фиксация ширины в макете «Вида бюджета» (навсегда)

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

  1. Перейдите в раздел Бюджетирование и планирование -> Настройки и справочники -> Виды бюджетов.
  2. Откройте нужный вид бюджета и перейдите на вкладку «Структура бюджета».
  3. В верхней панели управления структурой нажмите кнопку «Посмотреть вид отчета». Перед вами откроется интерактивный макет в формате табличного документа.
  4. Найдите нужные колонки и с помощью мыши отрегулируйте их ширину (раздвиньте или сузьте границы колонок).
  5. Закройте форму просмотра и **сохраните** изменения в Виде бюджета. Заданные размеры запишутся непосредственно в метаданные шаблона и будут жестко применяться при каждом формировании отчета всеми пользователями.

Метод Б. Использование условного оформления в настройках отчета (через СКД)

Если вам нужно настроить ширину колонок индивидуально под себя, не меняя общий шаблон для всех пользователей, воспользуемся возможностями Системы компоновки данных (СКД) в режиме предприятия:

  1. В окне сформированного бюджетного отчета нажмите кнопку «Настройки...».
  2. Внизу формы переключите вид настроек в режим «Расширенный».
  3. Перейдите на вкладку «Оформление».
  4. Добавьте новый элемент оформления. В списке свойств найдите параметры «Максимальная ширина» и «Минимальная ширина». Задайте им одинаковое значение в символах (например, 18 или 22).
  5. Перейдите на вкладку «Оформляемые поля» и выберите только те колонки/показатели, ширину которых вы хотите зафиксировать. Если этого не сделать, оформление применится ко всему отчету сразу.
  6. Нажмите «Закрыть и сформировать».
  7. Чтобы настройки не пропали при следующем открытии отчета, обязательно сохраните его вариант: нажмите Варианты отчета -> Сохранить вариант... и укажите понятное имя.

Метод В. Быстрая автоподстройка («Лайфхак для пользователей»)

Если колонок очень много, они содержат разные объемы цифр, и вам нужно мгновенно привести отчет в читаемый вид на экране без захода в сложные настройки, используйте горячие клавиши платформы 1С:

  1. Сделайте активным окно сформированного бюджетного отчета.
  2. Нажмите комбинацию клавиш Ctrl + A (выделить всю таблицу отчета).
  3. Зажмите и удерживайте клавишу Ctrl на клавиатуре.
  4. Дважды щелкните левой кнопкой мыши по правой границе заголовка любой из колонок.
  5. Платформа проанализирует содержимое всех строк отчета и автоматически сожмет или расширит каждую колонку под ее фактическое содержимое (функция «Автоширина по выделенному»).

Применяя данные подходы, мы сможем создавать красивые, производительные и безошибочные план-фактные отчеты в 1С:ERP, которые будут радовать руководство компании корректными расчетами и аккуратным внешним видом.

← На главную