Как вывести сообщение пользователю при незаполненном параметре в отчете СКД?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Способ 1. Использование стандартных свойств СКД (Low-code подход)

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

Рассмотрим пошагово, как это настроить:

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

Что это дает: При попытке нажать кнопку «Сформировать», если поле параметра осталось пустым, платформа автоматически выделит это поле красным пунктиром и выведет стандартное системное сообщение. Процесс формирования отчета при этом даже не начнется, что экономит ресурсы сервера.

Способ 2. Программная проверка в процедуре ПриКомпоновкеРезультата

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

Для этого используется обработчик ПриКомпоновкеРезультата. Давайте изучим пример кода, который позволяет это реализовать:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

    // Получаем значение параметра из текущих настроек компоновщика
    ЭлементПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КурсДокумента");
    
    Если ЭлементПараметра <> Неопределено Тогда
        ЗначениеПараметра = ЭлементПараметра.Значение;
        
        // Проверяем на заполненность (для числа это 0, для ссылок - ПустаяСсылка)
        Если НЕ ЗначениеЗаполнено(ЗначениеПараметра) Тогда
            
            // Формируем сообщение пользователю
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Поле 'Курс документа' не заполнено. Формирование отчета невозможно.";
            // Можно привязать сообщение к конкретному полю на форме, если известен путь
            Сообщение.Сообщить();
            
            // Отменяем стандартную обработку, чтобы отчет не формировался
            СтандартнаяОбработка = Ложь;
            Возврат;
            
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры

В данном примере мы используем объект КомпоновщикНастроек, чтобы добраться до актуальных значений, которые ввел пользователь. Установка параметра СтандартнаяОбработка = Ложь является ключевым моментом: она говорит системе, что мы берем управление на себя и стандартный механизм построения отчета запускать не нужно.

Способ 3. Обработка проверки заполнения в модуле отчета

Существует еще один методически верный способ, который часто применяется, если параметр СКД связан с реквизитом самого отчета. В модуле объекта можно использовать стандартное событие ОбработкаПроверкиЗаполнения.

Выясним, как работает этот механизм. Платформа вызывает его при попытке записи объекта или при вызове метода ПроверитьЗаполнение(). Для отчетов это актуально, когда параметры вынесены в реквизиты объекта для более сложной логики.

Посмотрим на пример реализации:


Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

    // Если мы хотим добавить программную проверку параметра СКД
    ПараметрКурс = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Курс");
    
    Если ПараметрКурс <> Неопределено И НЕ ЗначениеЗаполнено(ПараметрКурс.Значение) Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Необходимо заполнить курс для корректного расчета!";
        Сообщение.Поле = "КомпоновщикНастроек.Настройки.ПараметрыДанных.Курс"; // Путь к полю
        Сообщение.Сообщить();
        
        Отказ = Истина; // Прерываем дальнейшие действия
    КонецЕсли;

КонецПроцедуры

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

Способ 4. Визуальное оформление и «Быстрые настройки»

Проанализируем ситуацию с точки зрения удобства пользователя (UX). Чтобы минимизировать количество ошибок, поле должно быть заметным. Для этого рекомендуется использовать механизм «Быстрых настроек».

Разберем, как это сделать:

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

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

Дополнительные рекомендации

При работе в современных конфигурациях на базе БСП (Библиотеки стандартных подсистем), таких как ERP или Управление торговлей, проверка заполнения часто интегрирована в общие механизмы формирования. В таких случаях рекомендуется также обращать внимание на процедуру ПриОпределенииНастроек в модуле объекта отчета, где можно задать специфические настройки поведения отчета в рамках подсистемы «Варианты отчетов».

Также стоит помнить о параметре «Использование» в настройках параметров СКД. Если вы программно устанавливаете значение параметра, убедитесь, что свойство Использование установлено в Истина, иначе компоновщик может проигнорировать ваше значение при построении финального макета запроса.

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

← На главную