Как получить значение по умолчанию из типа в 1С:Предприятие

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

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

Почему не стоит использовать конструктор Новый()

Начинающие разработчики часто пытаются использовать конструктор Новый(), передавая в него полученный тип данных. Например, попытка вызвать Новый(ТипЗнч(Переменная)) может привести к неожиданным результатам:

  1. Для примитивных типов, таких как Число или Булево, использование конструктора вызовет ошибку, так как они не имеют конструктора без параметров.
  2. Для некоторых объектов, таких как УникальныйИдентификатор, конструктор Новый() создаст новый (случайный) объект, а не пустое значение.
  3. Многие системные типы данных вообще не имеют публичного конструктора, что сделает ваш код неработоспособным в динамических условиях.

Универсальное решение: метод ПривестиЗначение()

Наиболее правильным, надежным и профессиональным способом является использование объекта ОписаниеТипов. Этот объект был специально создан платформой для описания ограничений и характеристик типов данных. Его метод ПривестиЗначение() при вызове без параметров возвращает «пустое» значение, соответствующее этому описанию.

Давайте рассмотрим, как это реализовать на практике. Основная идея заключается в создании ОписаниеТипов на основе имеющегося у вас типа данных.

Пример реализации для простых и сложных типов

Если мы хотим получить значение по умолчанию, имея тип данных (например, «Число» или «Строка»), мы можем сделать следующее:


// Создаем описание типа для Числа
ОпТипов = Новый ОписаниеТипов("Число");

// Получаем значение по умолчанию
ПустоеЧисло = ОпТипов.ПривестиЗначение();

Сообщить(ПустоеЧисло); // Выведет 0

Этот подход работает универсально. Если ваш тип был получен динамически через ТипЗнч(), схема действий остается такой же:


// Допустим, у нас есть какая-то переменная, тип которой мы не знаем
ТипЗначения = ТипЗнч(Значение);

// Формируем массив типов для создания ОписаниеТипов
МассивТипов = Новый Массив;
МассивТипов.Добавить(ТипЗначения);

// Создаем ОписаниеТипов
Описание = Новый ОписаниеТипов(МассивТипов);

// Получаем пустое значение
ПустоеЗначение = Описание.ПривестиЗначение();

Преимущества подхода с ОписаниеТипов

Использование ОписаниеТипов.ПривестиЗначение() дает нам несколько ключевых преимуществ:

Анализ особых случаев

Разберем поведение платформы в нестандартных ситуациях, чтобы лучше понимать работу механизма:

Типы без конструктора: Такие объекты как ФоновоеЗадание или ПараметрыДоступа не поддерживают оператор Новый(). Однако, обернув их в ОписаниеТипов, метод ПривестиЗначение() успешно вернет корректное незаполненное значение объекта.

Тип «Тип»: Даже если вы работаете с типом, который сам по себе описывает типы данных, ОписаниеТипов отработает корректно и вернет Неопределено как значение по умолчанию для этого мета-типа.

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

← На главную