Как в 1С настроить проверку числовых реквизитов на нулевое значение?

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

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

Особенности проверки чисел платформой и функция ЗначениеЗаполнено()

Проанализируем базовую логику платформы «1С:Предприятие». Для числового типа данных значение по умолчанию (пустое значение) равно 0. Встроенная функция ЗначениеЗаполнено() работает следующим образом:

  1. Если в функцию передается число 0, она возвращает Ложь.
  2. Если передано любое ненулевое число (как положительное, так и отрицательное), функция возвращает Истина.

Именно благодаря этой особенности все стандартные механизмы валидации платформы воспринимают ноль как незаполненное поле.

Способ 1. Использование стандартного свойства реквизита «Проверка заполнения»

Рассмотрим самый простой декларативный способ, не требующий написания программного кода. В дереве метаданных конфигуратора выберем нужный реквизит и настроим его свойства:

  1. В палитре свойств реквизита найдем пункт Проверка заполнения.
  2. Установим значение в Выдавать ошибку (или Выдавать предупреждение в зависимости от требований задачи).

При такой настройке стандартный платформенный механизм при интерактивной записи или проведении объекта проверит реквизит с помощью функции ЗначениеЗаполнено(). Если значение реквизита равно 0, запись будет заблокирована, а пользователю выдано сообщение о необходимости заполнить реквизит.

Обратите внимание: для документов, у которых разрешено проведение, стандартная проверка заполнения по умолчанию выполняется только в момент проведения, не блокируя обычную запись черновика.

Способ 2. Ограничение через свойство «Минимальное значение»

Если по условиям бизнес-логики числовой реквизит должен принимать строго положительные значения (отрицательные числа недопустимы), рассмотрим настройку диапазона:

  1. В свойствах реквизита или элемента формы найдем свойство МинимальноеЗначение.
  2. Установим минимальную допустимую границу, например 0.01 или 1.

Важное ограничение: если в вашей прикладной задаче допустимы как положительные, так и отрицательные числа, а запрещен исключительно ноль, свойство МинимальноеЗначение использовать нельзя, так как оно отсекает весь непрерывный диапазон чисел ниже указанного порога.

Способ 3. Программный контроль в событии «ОбработкаПроверкиЗаполнения»

Когда требуется реализовать сложную условную проверку (например, поле должно быть ненулевым только при определенном виде операции или для конкретного типа контрагента), переместим логику в модуль объекта.

Разберем пример реализации в обработчике ОбработкаПроверкиЗаполнения:


Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    
    // Если требуется проверить реквизит по сложному условию:
    Если ВидОперации = Перечисления.ВидыОпераций.БезналичныйРасчет Тогда
        Если РеквизитСумма = 0 Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Сумма операции не может быть нулевой!";
            Сообщение.Поле = "РеквизитСумма";
            Сообщение.УстановитьДанные(ЭтотОбъект);
            Сообщение.Сообщить();
            
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Метод УстановитьДанные() объекта СообщениеПользователю в связке со свойством Поле позволяет привязать текст ошибки непосредственно к элементу на управляемой форме и подсветить его красным цветом.

Способ 4. Валидация на уровне элементов управляемой формы

Если необходимо предупредить пользователя об ошибке еще до момента сохранения объекта, реализуем проверку в интерфейсе:

  1. Свойство элемента формы АвтоОтметкаНезаполненного: при включении этого свойства платформа автоматически выделяет поле красным пунктиром, пока в нем содержится 0.
  2. Событие ПриИзменении элемента формы: позволяет выполнить мгновенную валидацию сразу после ввода значения пользователем.

Посмотрим на пример обработки события элемента формы:


&НаКлиенте
Процедура СуммаПриИзменении(Элемент)
    
    Если Объект.Сумма = 0 Тогда
        ПоказатьПредупреждение(, "Значение суммы должно быть отличным от нуля!");
    КонецЕсли;
    
КонецПроцедуры

Таким образом, для базовой проверки на 0 достаточно стандартного свойства Проверка заполнения = Выдавать ошибку, а для более сложных бизнес-сценариев оптимально комбинировать обработчик ОбработкаПроверкиЗаполнения модуля объекта и события формы.

← На главную