При разработке на платформе 1С:Предприятие начинающие разработчики часто сталкиваются с логической ошибкой при попытке проверить, содержит ли переменная значение Неопределено. Разберем, в чем заключается причина этой проблемы и как писать условия правильно, чтобы код работал предсказуемо.
Часто в коде можно встретить конструкцию вида Если ТипЗнч(Переменная) = Неопределено Тогда. Давайте выясним, почему она не работает.
Ошибка кроется в разнице между значением и типом:
Неопределено — это специальное системное значение. Оно говорит нам о том, что переменная пуста или не содержит данных.Тип("Неопределено") — это объект, описывающий сам тип данных.Когда вы используете ТипЗнч(Переменная), вы получаете тип данных, который хранится в переменной. Сравнивать полученный тип со значением — это попытка сопоставить «чертеж» с «готовым изделием». Они никогда не будут равны. Именно поэтому интерпретатор 1С всегда уходит в ветку Иначе.
Самый простой, быстрый и эффективный способ проверить переменную — сравнить её напрямую со значением Неопределено. Это именно то, что нужно в большинстве прикладных задач.
Рассмотрим пример правильного написания условия:
Если МассивЗн3 = Неопределено Или МассивЗн6 = Неопределено Тогда
// Обработка случая, когда переменные не заполнены
СтрокаСправочника.ДатаСозданияЗадачи = МассивЗн3;
СтрокаСправочника.ДатаЗакрытияЗадачи = МассивЗн6;
Иначе
// Ваша логика обработки заполненных значений
КонецЕсли;
При таком подходе платформа корректно определяет, что переменная не инициализирована, и выполняет нужный блок кода.
Если ваша задача — не просто отловить Неопределено, а проверить, «пуста» ли переменная в широком смысле слова (например, может ли там оказаться пустая строка или нулевая дата), лучше всего использовать встроенную функцию ЗначениеЗаполнено().
Эта функция универсальна: она вернет Ложь, если в переменной находится:
НеопределеноNullИспользование этого метода делает ваш код гораздо чище и избавляет от необходимости прописывать длинные цепочки из ИЛИ. Посмотрим, как это выглядит на практике:
Если НЕ ЗначениеЗаполнено(МассивЗн3) Или НЕ ЗначениеЗаполнено(МассивЗн6) Тогда
// Выполняем действия для пустых значений
Иначе
// Выполняем действия для заполненных значений
КонецЕсли;
Давайте систематизируем полученные знания для эффективной работы:
Неопределено — это «пустота» (значение), а Тип("Неопределено") — это описание типа данных.Неопределено. Если вы хотите убедиться, что переменная содержит полезную информацию — используйте ЗначениеЗаполнено().ТипЗнч() с константами значений обычно приводят к ошибкам и усложнению логики, поэтому прибегайте к этому методу только в продвинутых задачах метапрограммирования.Следуя этим простым рекомендациям, вы сделаете свой код более надежным, читаемым и устойчивым к ошибкам. Практикуйтесь, и работа с типами данных в 1С станет для вас привычной и понятной задачей!