К статье
Практический материал

Разработка и Конфигурация · 13 мин

Что такое свойство в 1С-программировании

Что такое свойство в 1С: разбираем свойства объектов метаданных, дополнительные свойства и реквизиты, примеры кода на встроенном языке и типичные ошибки разработчиков.

Свойство в 1С — это именованная характеристика объекта, которая хранит значение и доступна для чтения или изменения через встроенный язык. Когда разработчик пишет Справочники.Номенклатура.ПустаяСсылка() или обращается к Документ.Номер, он работает именно со свойствами: первое — свойство объекта метаданных, второе — свойство объекта данных. Понимание того, какие свойства существуют, где они задаются и как к ним обращаться, — базовый навык для любого, кто пишет код на платформе 1С:Предприятие.

Термин «свойство» в экосистеме 1С используется в трёх разных смыслах, и это часто путает новичков. Во-первых, это свойства объектов встроенного языка — поля структуры данных, доступные через точку. Во-вторых, это свойства объектов конфигурации, которые задаются в конфигураторе через палитру свойств. В-третьих, «Дополнительные свойства» — механизм БСП (библиотеки стандартных подсистем) и типовых конфигураций, позволяющий пользователю добавлять собственные характеристики к справочникам и документам без доработки конфигурации. Все три смысла разобраны ниже.

Свойства объектов встроенного языка

Каждый объект, с которым работает код на встроенном языке 1С, имеет набор свойств. У ссылки на документ это Номер, Дата, Проведен, ПометкаУдаления. У объекта документа дополнительно доступны табличные части и реквизиты, определённые в конфигурации. Обращение всегда идёт через точку: Объект.Свойство.

Часть свойств доступна только для чтения, часть — для чтения и записи. Например, у объекта Структура свойства создаются динамически и изменяются свободно, а у запроса свойство Текст можно читать и перезаписывать, но свойство Параметры возвращает коллекцию, которую нельзя заменить целиком — только менять её элементы. Попытка записи в свойство, доступное только для чтения, вызывает ошибку исполнения.

ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();

ДокументОбъект.Дата = ТекущаяДатаСеанса(); // запись в свойство

ДокументОбъект.Комментарий = "Изменён программно";

ДокументОбъект.Записать();

СтруктураДанных = Новый Структура;

СтруктураДанных.Вставить("Организация", Справочники.Организации.НайтиПоКоду("000000001"));

Сообщить(СтруктураДанных.Организация); // чтение свойства

Важно различать свойства и методы. Свойство — это данные, метод — действие. Ссылка.Пустая() — метод, возвращающий булево, а Запрос.Текст — свойство. Вызов метода без скобок или обращение к несуществующему свойству приводит к ошибке «Поле объекта не обнаружено», которая указывает точное имя, с которым возникла проблема.

Свойства объектов конфигурации и палитра свойств

Второй смысл термина — свойства объектов метаданных, которые разработчик задаёт в конфигураторе. Каждый справочник, документ, реквизит, форма или отчёт имеет набор настроек: синоним, длину кода, тип нумерации, периодичность, составные типы и десятки других параметров. Все они открываются через палитру свойств (контекстное меню объекта → «Свойства» или клавиши Alt+Enter).

Эти свойства определяют поведение объекта во всей системе. Например, свойство «Длина наименования» справочника ограничивает ввод пользователя, свойство «Проведение» документа включает или отключает механизм движений по регистрам, а свойство «Оперативное проведение» влияет на то, контролируются ли остатки на текущий момент. Ошибка в таких свойствах проявляется не как падение кода, а как неправильное поведение учёта, поэтому менять их в рабочей базе нужно осознанно.

Многие свойства конфигурации доступны и из кода через объект Метаданные. Так можно программно проверить, есть ли у документа табличная часть с нужным именем или какой тип у реквизита:

МетаданныеДокумента = Метаданные.Документы.РеализацияТоваровУслуг;

Если МетаданныеДокумента.ТабличныеЧасти.Найти("Товары") <> Неопределено Тогда

// табличная часть существует

КонецЕсли;

Дополнительные свойства и сведения в типовых конфигурациях

Третий смысл термина встречается в типовых решениях на базе БСП. Механизм «Дополнительные реквизиты и сведения» позволяет администратору добавить к справочнику или документу новое поле без доработки конфигурации. Например, к элементу справочника «Номенклатура» можно добавить свойство «Цвет» или «Материал», и оно появится на форме элемента, в отборах списка и в отчётах.

Разница между дополнительным реквизитом и дополнительным сведением принципиальна. Дополнительный реквизит хранится в табличной части самого объекта и доступен в запросах как обычное поле. Дополнительное сведение хранится в отдельном регистре сведений и используется для информации, которая не должна влиять на структуру объекта. В обоих случаях значения типизируются: можно задать строку, число, булево, дату или ссылку на другой объект.

Из кода к дополнительным свойствам обращаются через табличную часть ДополнительныеРеквизиты объекта или через регистр сведений ДополнительныеСведения. Прямого обращения через точку, как к обычному реквизиту, нет — это частая причина путаницы у начинающих разработчиков.

// Чтение дополнительного реквизита объекта

Для Каждого Строка Из Объект.ДополнительныеРеквизиты Цикл

Если Строка.Свойство = СвойствоЦвет Тогда

ЗначениеЦвета = Строка.Значение;

КонецЕсли;

КонецЦикла;

Какой механизм выбрать

Обычный реквизит конфигурации

Подходит для данных, участвующих в учётной логике, проведении и типовых запросах. Требует доработки конфигурации и обновления базы.

Дополнительный реквизит

Подходит для полей, которые нужны пользователям на формах и в отчётах без изменения конфигурации. Хранится в табличной части объекта.

Дополнительное сведение

Подходит для справочной информации, не влияющей на объект: примечания, классификации, внешние идентификаторы. Хранится в отдельном регистре сведений.

Как узнать состав свойств объекта

Универсальный способ увидеть все свойства объекта — синтакс-помощник конфигуратора. Откройте его через меню «Справка → Синтакс-помощник», найдите нужный тип объекта и раскройте ветку: свойства перечислены отдельно от методов, с указанием доступности (чтение/запись) и типа значения. Для объектов конфигурации состав свойств зависит от настроек конкретной конфигурации.

В отладчике состав свойств виден в окне «Вычислить выражение» (Shift+F9): достаточно ввести переменную, и отладчик покажет дерево её свойств с текущими значениями. Это самый быстрый способ понять, что реально содержит объект в конкретный момент выполнения кода.

Для структур и соответствий есть программная проверка существования свойства. У структуры используется метод Свойство(), который возвращает Истина, если ключ найден, и позволяет получить значение без ошибки:

Значение = Неопределено;

Если СтруктураДанных.Свойство("Склад", Значение) Тогда

// свойство есть, значение в переменной Значение

Иначе

// свойства нет — безопасная обработка

КонецЕсли;

Как добавить дополнительное свойство в типовой конфигурации
  1. 1
    Откройте раздел администрирования и включите опцию «Дополнительные реквизиты и сведения».
  2. 2
    Перейдите в список наборов дополнительных реквизитов для нужного объекта (например, «Номенклатура»).
  3. 3
    Создайте новое свойство: укажите заголовок и тип значения (строка, число, ссылка и т.д.).
  4. 4
    Откройте карточку элемента и убедитесь, что поле появилось на форме.
  5. 5
    Проверьте доступность свойства в отборах списка и в отчётах.

Типичные ошибки при работе со свойствами

Самая частая ошибка — обращение к свойству через точку, когда объект равен Неопределено. Например, метод НайтиПоКоду() возвращает пустую ссылку, а не Неопределено, но собственные функции могут вернуть Неопределено, и следующая строка с обращением к свойству упадёт. Всегда проверяйте результат перед обращением к его полям.

Вторая группа ошибок связана с регистром имён. Встроенный язык 1С нечувствителен к регистру, поэтому Объект.номер и Объект.Номер — одно и то же. Но при работе со структурами через строковые ключи легко запутаться в написании, а при сериализации данных во внешние форматы (JSON, XML) регистр имён становится значимым.

Третья типичная ситуация — путаница между свойством ссылки и свойством объекта. У ссылки доступен ограниченный набор полей (стандартные реквизиты), а обращение к произвольному реквизиту через ссылку выполняется неявным запросом к базе. Массовые обращения вида Ссылка.Реквизит в цикле порождают по запросу на каждую итерацию и резко снижают производительность — правильнее выбрать нужные поля одним запросом.

Типичные ошибки
01
Обращение к свойству без проверки на Неопределено — ошибка исполнения и остановка кода.
02
Чтение реквизитов через ссылку в цикле — по одному запросу к базе на каждую итерацию, деградация производительности.
03
Попытка записать значение в свойство, доступное только для чтения, — ошибка «Поле объекта недоступно для записи».
04
Поиск дополнительного реквизита по наименованию вместо ссылки на свойство — код ломается после переименования свойства пользователем.
05
Изменение свойств конфигурации (длина, тип) в рабочей базе без копии — риск потери или усечения данных.

Свойства формы и элементов формы

Отдельная область — свойства управляемых форм и их элементов. У формы есть реквизиты (данные) и свойства самой формы: Заголовок, ТолькоПросмотр, Модифицированность. У элементов формы — Видимость, Доступность, ЦветФона и другие. Программное изменение этих свойств — стандартный способ динамически управлять интерфейсом.

Обращение к элементу формы идёт через коллекцию Элементы или ЭлементыФормы (в обычных формах): Элементы.КнопкаЗаписать.Доступность = Ложь;. Например, обращение к данным объекта возможно только на сервере или через преобразование в объект.

Как проверить результат работы со свойствами

После записи значения в свойство убедитесь, что изменение сохранилось. Для объектов базы данных запись в свойство не сохраняет данные автоматически — нужен вызов метода Записать(). Без него все изменения свойств останутся только в памяти и пропадут при завершении кода.

Для дополнительных свойств проверка выполняется через интерфейс: откройте карточку элемента, найдите добавленное поле, заполните и перезапишите объект. Затем проверьте, что значение доступно в отборе списка и в отчёте. Если поле видно, но не сохраняется — чаще всего проблема в правах доступа или в том, что свойство добавлено не в тот набор.

Контрольные точки

Как проверить результат

Запись свойства объекта
Норма

После Записать() значение читается из базы повторным запросом

Тревожный признак

Значение есть в отладчике, но в базе не сохраняется — пропущен Записать()

Дополнительное свойство на форме
Норма

Поле видно в карточке, сохраняется и участвует в отборах

Тревожный признак

Поле не отображается — проверьте набор свойств и права пользователя

Обращение к свойству в коде
Норма

Код выполняется без ошибок в отладчике

Тревожный признак

Ошибка «Поле объекта не обнаружено» — имя свойства или тип объекта неверны

Частые вопросы о свойствах в 1С

Чем свойство отличается от реквизита?

Реквизит — это поле объекта конфигурации, которое разработчик добавил в конфигураторе (например, реквизит «Склад» у документа). Свойство — более широкое понятие: оно включает реквизиты, стандартные поля (Номер, Дата, Ссылка) и служебные характеристики объекта встроенного языка. В коде и то, и другое доступно через точку одинаково.

Как обратиться к свойству, если его имя хранится в переменной?

Через точку такое обращение невозможно. Для структур используйте квадратные скобки: Структура[ИмяСвойства]. Для реквизитов объектов данных универсального механизма нет — обычно применяют запрос с динамически формируемым текстом или метод Вычислить() с осторожностью, так как он выполняет произвольный код.

Почему возникает ошибка «Поле объекта не обнаружено»?

Ошибка означает, что у объекта нет свойства с указанным именем. Причины: опечатка в имени, обращение к реквизиту через ссылку, когда он недоступен, объект имеет другой тип, чем ожидалось, или переменная содержит Неопределено. Откройте отладчик и посмотрите фактический тип и состав свойств переменной в момент ошибки.

Можно ли добавить свойство объекту программно?

Для структур — да, методом Вставить(). Для объектов базы данных (справочников, документов) — нет: состав реквизитов фиксируется конфигурацией. Обходные пути — дополнительные реквизиты и сведения БСП либо хранение произвольных данных в реквизите типа «ХранилищеЗначения».

Что такое стандартные свойства (реквизиты) объекта?

Это поля, которые платформа создаёт автоматически для каждого объекта конфигурации: Ссылка, Код, Наименование у справочников; Номер, Дата, Проведен, ПометкаУдаления у документов. Их состав зависит от настроек объекта — например, если длина наименования равна нулю, реквизит Наименование отсутствует.

Влияет ли регистр букв в имени свойства на выполнение кода?

Во встроенном языке 1С — нет: имена свойств, методов и переменных регистронезависимы. Регистр становится важен при обмене с внешними системами (JSON, XML, веб-сервисы), где имена полей чувствительны к регистру, и при работе со строковыми ключами структур через квадратные скобки.

Итог

Что важно запомнить

Свойство в 1С — это именованная характеристика объекта, доступная через точку. Различайте три контекста: свойства объектов встроенного языка, свойства объектов конфигурации в палитре свойств и дополнительные свойства БСП. Проверяйте объект на Неопределено перед обращением к свойствам, не читайте реквизиты через ссылку в циклах и не меняйте свойства конфигурации в рабочей базе без резервной копии.