← Назад к вопросам
Что происходит, когда мы обращаемся к объекту через точку?
2.0 Middle🔥 161 комментариев
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Суть операции
Когда мы пишем Объект.Свойство, 1С выполняет серию действий на уровне виртуальной машины (ВМ) для доступа к данному свойству или методу.
Этапы обращения
1. Разрешение имени (Name Resolution)
Документ.Номер // Что это? Свойство? Метод? Параметр?
1С должна определить, что представляет собой Номер:
- Реквизит документа
- Табличная часть
- Метод (функция модуля)
- Встроенное свойство (как
Пустая()илиСсылка) - Локальная переменная
Порядок поиска:
- Локальные переменные текущего контекста
- Параметры функции
- Реквизиты (свойства объекта)
- Методы объекта
- Встроенные методы типа
2. Получение значения свойства
Для справочников, документов и регистров:
Справочник.Контрагенты.ПолучитьОбъект(Ссылка); // Загружает из БД
Объект.Наименование; // Возвращает значение из памяти
Из БД или из памяти?
- Если объект уже в памяти (загружен ранее) → из памяти (быстро)
- Если объект новый/изменённый → из памяти (правильно)
- Если это
Ссылкана объект без загрузки → 1С обращается к БД
3. Валидация типа (Type Checking)
1С проверяет, правомерно ли обращение:
// ✅ Корректно
Число = 5;
Число + 3; // Сумма целых чисел
// ❌ Ошибка типа
Строка = "текст";
Строка + 3; // Невозможно: строку нельзя складывать с числом
При строгой типизации:
Функция ДобавитьЧисло(Число: Число) -> Число
Возврат Число + 1;
КонецФункции
Обращение к встроенным свойствам
Встроенные методы вызываются на уровне ВМ:
Таблица.Количество(); // Встроенный метод (быстро)
Таблица.Найти(Значение); // Встроенный поиск (оптимизирован)
Пользовательские свойства:
Функция МойМетод()
Возврат "результат";
КонецФункции
Результат = Объект.МойМетод(); // Выполняет код функции
Обращение к реквизитам документа
Документ = Документы.ПриходТоваров.ПолучитьОбъект(Ссылка);
Документ.Номер; // Как это работает?
Схема доступа:
- 1С ищет в метаданных конфигурации определение документа
- Проверяет есть ли реквизит
Номерв структуреПриходТоваров - Возвращает значение из переменной объекта в памяти
- Если объект не загружен → ленивая загрузка при первом обращении
Обращение к табличным частям
Документ.Товары.Добавить(); // Добавить строку
Документ.Товары[0].Номенклатура = ...; // Доступ к колонке
Внутренний процесс:
Документ.Товары→ возвращает объект типаТабличнаяЧасть.Добавить()→ встроенный метод ТЗ[0]→ возвращает строку (индексация в памяти).Номенклатура→ доступ к ячейке
Кэширование и оптимизация
// ❌ Неэффективно: многократный доступ
Для Индекс = 1 По 1000 Цикл
Сумма = Сумма + Документ.Товары[Индекс].Цена;
КонецЦикла;
// ✅ Эффективно: один раз в переменную
Товары = Документ.Товары;
Для Индекс = 1 По Товары.Количество() Цикл
Сумма = Сумма + Товары[Индекс].Цена;
КонецЦикла;
Обращение через динамические имена
ИмяСвойства = "Номер";
Значение = Документ[ИмяСвойства]; // Динамический доступ
Как это работает:
- 1С в runtime интерпретирует строку
- Ищет свойство с этим именем в объекте
- Если не найдено → исключение
- Медленнее чем прямой доступ
Практический пример производительности
// ❌ Медленно: обращение 1000 раз
Начало = ТекущееВремя();
Сумма = 0;
Для Индекс = 1 По Документ.Товары.Количество() Цикл
Сумма = Сумма + Документ.Товары[Индекс].Цена * Документ.Товары[Индекс].Количество;
КонецЦикла;
// ✅ Быстро: кэширование
Начало = ТекущееВремя();
Сумма = 0;
Товары = Документ.Товары;
КолВо = Товары.Количество();
Для Индекс = 1 По КолВо Цикл
СтрокаТовара = Товары[Индекс];
Сумма = Сумма + СтрокаТовара.Цена * СтрокаТовара.Количество;
КонецЦикла; // На 30% быстрее
Итоговая схема
Исходный код: Объект.Свойство
↓
Лексический анализ
↓
Синтаксический анализ (AST)
↓
Разрешение имён
↓
Проверка типов
↓
Генерация bytecode
↓
Выполнение на ВМ
↓
Результат
Понимание этих механик критично для оптимизации производительности в 1С.
Похожие вопросы
- Какие есть виртуальные таблицы у регистра расчётов?
- Что такое контекст формы в 1С?
- Как расследуешь ошибки принимаемых запросов?
- Какие стандарты 1С по организации проведения документа вы знаете?
- Как организовать обмен данными между 1С и другими системами?
- Что такое транзакция в 1С? Есть ли вложенные транзакции?
- В чем разница между хранением информации в регистре сведений и в табличной части?
- Может ли быть таблица итогов у регистра сведений?
- Какие знаешь способы пользоваться запросом?
- Как организовать контроль остатков при проведении документа?
- Значения каких типов можно передавать в параметр "период" виртуальной таблицы регистра накоплений?
- Зачем использовать конструкцию ВЫРАЗИТЬ?
- В каком случае используешь индексы в запросах?
- Что такое COM-соединение в 1С и когда его использовать?
- Что такое индекс в 1С и какие виды индексов бывают?
- В чем разница между справочником и планом видов характеристик?
- Что такое NULL, Неопределено, ПустаяСсылка и БитаяСсылка в 1С? Чем они отличаются?
- Чем отличается подход к доработке типовых и нетиповых конфигураций?
- Что сделать чтобы можно было производить отладку кода программы, которая выполняется в фоновом задании?
- Какие есть типы блокировок при проведении?