← Назад к вопросам
Для каких случаев обращение через точку опасно?
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С системах, требующий постоянного внимания и осторожности при написании кода.