Отличить заполненность от допустимости нулевого количества

Учебные задачи

Ноль может быть правильным значением, хотя ЗначениеЗаполнено вернёт Ложь. Булево Ложь, напротив, считается заполненным.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Значения заданы в коде. Учебный контракт: Количество — целое число от 0, поэтому нулевой остаток допустим.

  2. Функция ЗначениеЗаполнено имеет специальные правила для Булево, строк, массивов, Null и Неопределено.


Сообщить(Не ЗначениеЗаполнено(Неопределено));
Сообщить(Не ЗначениеЗаполнено(Null));
Сообщить(Не ЗначениеЗаполнено("   "));
Сообщить(ЗначениеЗаполнено("Книга"));
Сообщить(Не ЗначениеЗаполнено(0));
Сообщить(ЗначениеЗаполнено(Ложь));
ПустойМассив = Новый Массив;
Сообщить(Не ЗначениеЗаполнено(ПустойМассив));
ПустойМассив.Добавить(0);
Сообщить(ЗначениеЗаполнено(ПустойМассив));
Количество = 0;
Если ТипЗнч(Количество) <> Тип("Число") Тогда
    ВызватьИсключение "Количество должно быть числом";
КонецЕсли;
Если Количество < 0 Или Количество <> Цел(Количество) Тогда
    ВызватьИсключение "Учебный контракт допускает целые количества от нуля";
КонецЕсли;
Сообщить("Количество 0 допустимо по учебному контракту");
Настройки = Новый Структура("Количество", Количество);
Если Не Настройки.Свойство("Количество", ЗначениеКоличества) Тогда
    ВызватьИсключение "Поле Количество отсутствует";
КонецЕсли;
Сообщить(ЗначениеКоличества = 0);

Разбор по шагам

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

  2. Для типа Булево функция всегда возвращает Истина, в том числе для Ложь.

  3. Массив из одного элемента 0 считается заполненным по наличию элемента, не по заполненности этого элемента.

  4. Для Структуры проверяем наличие ключа через Свойство, затем тип и ограничения значения; не вызываем ЗначениеЗаполнено на произвольном мутабельном объекте.

Как проверить результат

  1. Все контрольные сообщения Истина, а количество 0 явно признано допустимым.

  2. Замените Количество на -1 или 1.5: бизнес-проверка отклоняет его независимо от ЗначениеЗаполнено.

  3. Удалите ключ из структуры: Свойство возвращает Ложь, что отличается от существующего значения 0.

Ожидаемый результат

Разделены отсутствие поля, специальное правило заполненности и проверка учебного числового контракта.

На что обратить внимание

  1. Не проверяйте Булево на истинность через ЗначениеЗаполнено: для Ложь результат этой функции тоже Истина.

  2. Функция не поддерживает произвольные мутабельные значения и может вызвать исключение. Проверяйте конкретный API типа.

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

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.