← Назад к вопросам

Для каких случаев обращение через точку опасно?

2.2 Middle🔥 181 комментариев
#Запросы и оптимизация#Стандарты разработки

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Для каких случаев обращение через точку опасно

Обращение через точку в 1С к свойствам объектов является источником множества скрытых ошибок и потенциальных падений приложения.

1. Обращение к свойствам несуществующих объектов

Если объект содержит значение Неопределено:

// ОПАСНО
Если Документ.Контрагент.Наименование = "ОООРога и Копыта" Тогда
    // Если Контрагент пустой, возникнет ошибка!
КонецЕсли;

// ПРАВИЛЬНО
Если Документ.Контрагент <> Неопределено
    И Документ.Контрагент.Наименование = "ОООРога и Копыта" Тогда
    // Теперь безопасно
КонецЕсли;

2. Обращение к свойствам пустых ссылок

Пустая ссылка на справочник может вызвать ошибку:

// ОПАСНО - ссылка может быть пустой
Товар = Документ.Товар; // Может быть пустой ссылкой
Если Товар.Наименование = "Нужный товар" Тогда
    // Ошибка если ссылка пустая
КонецЕсли;

// ПРАВИЛЬНО
Товар = Документ.Товар;
Если НЕ Товар.Пустая() И Товар.Наименование = "Нужный товар" Тогда
    // Безопасно
КонецЕсли;

3. Обращение к свойствам удалённых объектов

Если объект был удалён после получения ссылки:

// ОПАСНО - объект может быть удалён параллельно
Ссылка = Справочник.Товары.ПолучитьСсылку(УИД);
// ... в это время объект был удалён другим пользователем ...
Наименование = Ссылка.Наименование; // Может быть ошибка!

4. Изменения в конфигурации

Если в новой версии конфигурации удалить или переименовать поле:

// Версия 1 конфигурации
Цена = Товар.ЦенаОптом; // работает

// Версия 2: поле переименовано в ОптоваяЦена
Цена = Товар.ЦенаОптом; // ОШИБКА! поля нет

// Должно быть
Цена = Товар.ОптоваяЦена; // правильно

5. Обращение к несуществующим элементам коллекций

// ОПАСНО - может быть меньше строк
Количество = Документ.Товары[5].Количество; // Индекс вне границ!

// ПРАВИЛЬНО
Если Документ.Товары.Количество() > 5 Тогда
    Количество = Документ.Товары[5].Количество;
КонецЕсли;

6. Цепочки точек (вложенные обращения)

Если на любом уровне значение пустое:

// ОПАСНО - ошибка на любом уровне цепи
Название = Документ.Контрагент.ГлавнаяОрганизация.ЮридическоеЛицо.Наименование;
// Ошибка если Контрагент пустой ИЛИ ГлавнаяОрганизация пустая ИЛИ ЮридическоеЛицо пустое

// ПРАВИЛЬНО - проверять каждый уровень
Название = "";
Если Документ.Контрагент <> Неопределено Тогда
    Если Документ.Контрагент.ГлавнаяОрганизация <> Неопределено Тогда
        Если Документ.Контрагент.ГлавнаяОрганизация.ЮридическоеЛицо <> Неопределено Тогда
            Название = Документ.Контрагент.ГлавнаяОрганизация.ЮридическоеЛицо.Наименование;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

7. Обращение к методам несуществующих объектов

Если объект не существует, нельзя вызвать его методы:

// ОПАСНО
Документ.Товар.ПроверитьДоступность(); // Может быть пустой!

// ПРАВИЛЬНО
Если НЕ Документ.Товар.Пустая() Тогда
    Документ.Товар.ПроверитьДоступность();
КонецЕсли;

Таблица опасных ситуаций

СитуацияПричина ошибкиПроверка
Неопределено значениеОбращение к свойствам null-объекта<> Неопределено
Пустая ссылкаСсылка без данных.Пустая()
Удалённый объектПараллельное удалениеПеречитать объект
Индекс вне границМассив меньше чем нужноПроверить количество
Переименованное полеИзменение конфигурацииОбновить код
Несуществующее полеЕго никогда не былоПроверить наличие

Правило безопасности

Никогда не обращайтесь напрямую через точку, не проверив существование!

// Шаблон безопасного кода
Переменная = ЗначениеПоУмолчанию;
Если ОбъектА <> Неопределено
    И ОбъектА.ОбъектБ <> Неопределено
    И НЕ ОбъектА.ОбъектБ.ОбъектВ.Пустая() Тогда
    Переменная = ОбъектА.ОбъектБ.ОбъектВ.СвойствоДанные;
КонецЕсли;

Это основной источник bagов и критических ошибок в 1С системах, требующий постоянного внимания и осторожности при написании кода.