Разработка и Конфигурация · 13 мин
Что такое свойство в 1С-программировании
Что такое свойство в 1С: разбираем свойства объектов метаданных, дополнительные свойства и реквизиты, примеры кода на встроенном языке и типичные ошибки разработчиков.
Свойство в 1С — это именованная характеристика объекта, которая хранит значение и доступна для чтения или изменения через встроенный язык. Когда разработчик пишет Справочники.Номенклатура.ПустаяСсылка() или обращается к Документ.Номер, он работает именно со свойствами: первое — свойство объекта метаданных, второе — свойство объекта данных. Понимание того, какие свойства существуют, где они задаются и как к ним обращаться, — базовый навык для любого, кто пишет код на платформе 1С:Предприятие.
Термин «свойство» в экосистеме 1С используется в трёх разных смыслах, и это часто путает новичков. Во-первых, это свойства объектов встроенного языка — поля структуры данных, доступные через точку. Во-вторых, это свойства объектов конфигурации, которые задаются в конфигураторе через палитру свойств. В-третьих, «Дополнительные свойства» — механизм БСП (библиотеки стандартных подсистем) и типовых конфигураций, позволяющий пользователю добавлять собственные характеристики к справочникам и документам без доработки конфигурации. Все три смысла разобраны ниже.
Свойства объектов встроенного языка
Каждый объект, с которым работает код на встроенном языке 1С, имеет набор свойств. У ссылки на документ это Номер, Дата, Проведен, ПометкаУдаления. У объекта документа дополнительно доступны табличные части и реквизиты, определённые в конфигурации. Обращение всегда идёт через точку: Объект.Свойство.
Часть свойств доступна только для чтения, часть — для чтения и записи. Например, у объекта Структура свойства создаются динамически и изменяются свободно, а у запроса свойство Текст можно читать и перезаписывать, но свойство Параметры возвращает коллекцию, которую нельзя заменить целиком — только менять её элементы. Попытка записи в свойство, доступное только для чтения, вызывает ошибку исполнения.
ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
ДокументОбъект.Дата = ТекущаяДатаСеанса(); // запись в свойство
ДокументОбъект.Комментарий = "Изменён программно";
ДокументОбъект.Записать();
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("Организация", Справочники.Организации.НайтиПоКоду("000000001"));
Сообщить(СтруктураДанных.Организация); // чтение свойства
Важно различать свойства и методы. Свойство — это данные, метод — действие. Ссылка.Пустая() — метод, возвращающий булево, а Запрос.Текст — свойство. Вызов метода без скобок или обращение к несуществующему свойству приводит к ошибке «Поле объекта не обнаружено», которая указывает точное имя, с которым возникла проблема.
Свойства объектов конфигурации и палитра свойств
Второй смысл термина — свойства объектов метаданных, которые разработчик задаёт в конфигураторе. Каждый справочник, документ, реквизит, форма или отчёт имеет набор настроек: синоним, длину кода, тип нумерации, периодичность, составные типы и десятки других параметров. Все они открываются через палитру свойств (контекстное меню объекта → «Свойства» или клавиши Alt+Enter).
Эти свойства определяют поведение объекта во всей системе. Например, свойство «Длина наименования» справочника ограничивает ввод пользователя, свойство «Проведение» документа включает или отключает механизм движений по регистрам, а свойство «Оперативное проведение» влияет на то, контролируются ли остатки на текущий момент. Ошибка в таких свойствах проявляется не как падение кода, а как неправильное поведение учёта, поэтому менять их в рабочей базе нужно осознанно.
Многие свойства конфигурации доступны и из кода через объект Метаданные. Так можно программно проверить, есть ли у документа табличная часть с нужным именем или какой тип у реквизита:
МетаданныеДокумента = Метаданные.Документы.РеализацияТоваровУслуг;
Если МетаданныеДокумента.ТабличныеЧасти.Найти("Товары") <> Неопределено Тогда
// табличная часть существует
КонецЕсли;
Дополнительные свойства и сведения в типовых конфигурациях
Третий смысл термина встречается в типовых решениях на базе БСП. Механизм «Дополнительные реквизиты и сведения» позволяет администратору добавить к справочнику или документу новое поле без доработки конфигурации. Например, к элементу справочника «Номенклатура» можно добавить свойство «Цвет» или «Материал», и оно появится на форме элемента, в отборах списка и в отчётах.
Разница между дополнительным реквизитом и дополнительным сведением принципиальна. Дополнительный реквизит хранится в табличной части самого объекта и доступен в запросах как обычное поле. Дополнительное сведение хранится в отдельном регистре сведений и используется для информации, которая не должна влиять на структуру объекта. В обоих случаях значения типизируются: можно задать строку, число, булево, дату или ссылку на другой объект.
Из кода к дополнительным свойствам обращаются через табличную часть ДополнительныеРеквизиты объекта или через регистр сведений ДополнительныеСведения. Прямого обращения через точку, как к обычному реквизиту, нет — это частая причина путаницы у начинающих разработчиков.
// Чтение дополнительного реквизита объекта
Для Каждого Строка Из Объект.ДополнительныеРеквизиты Цикл
Если Строка.Свойство = СвойствоЦвет Тогда
ЗначениеЦвета = Строка.Значение;
КонецЕсли;
КонецЦикла;
Какой механизм выбрать
Подходит для данных, участвующих в учётной логике, проведении и типовых запросах. Требует доработки конфигурации и обновления базы.
Подходит для полей, которые нужны пользователям на формах и в отчётах без изменения конфигурации. Хранится в табличной части объекта.
Подходит для справочной информации, не влияющей на объект: примечания, классификации, внешние идентификаторы. Хранится в отдельном регистре сведений.
Как узнать состав свойств объекта
Универсальный способ увидеть все свойства объекта — синтакс-помощник конфигуратора. Откройте его через меню «Справка → Синтакс-помощник», найдите нужный тип объекта и раскройте ветку: свойства перечислены отдельно от методов, с указанием доступности (чтение/запись) и типа значения. Для объектов конфигурации состав свойств зависит от настроек конкретной конфигурации.
В отладчике состав свойств виден в окне «Вычислить выражение» (Shift+F9): достаточно ввести переменную, и отладчик покажет дерево её свойств с текущими значениями. Это самый быстрый способ понять, что реально содержит объект в конкретный момент выполнения кода.
Для структур и соответствий есть программная проверка существования свойства. У структуры используется метод Свойство(), который возвращает Истина, если ключ найден, и позволяет получить значение без ошибки:
Значение = Неопределено;
Если СтруктураДанных.Свойство("Склад", Значение) Тогда
// свойство есть, значение в переменной Значение
Иначе
// свойства нет — безопасная обработка
КонецЕсли;
- 1Откройте раздел администрирования и включите опцию «Дополнительные реквизиты и сведения».
- 2Перейдите в список наборов дополнительных реквизитов для нужного объекта (например, «Номенклатура»).
- 3Создайте новое свойство: укажите заголовок и тип значения (строка, число, ссылка и т.д.).
- 4Откройте карточку элемента и убедитесь, что поле появилось на форме.
- 5Проверьте доступность свойства в отборах списка и в отчётах.
Типичные ошибки при работе со свойствами
Самая частая ошибка — обращение к свойству через точку, когда объект равен Неопределено. Например, метод НайтиПоКоду() возвращает пустую ссылку, а не Неопределено, но собственные функции могут вернуть Неопределено, и следующая строка с обращением к свойству упадёт. Всегда проверяйте результат перед обращением к его полям.
Вторая группа ошибок связана с регистром имён. Встроенный язык 1С нечувствителен к регистру, поэтому Объект.номер и Объект.Номер — одно и то же. Но при работе со структурами через строковые ключи легко запутаться в написании, а при сериализации данных во внешние форматы (JSON, XML) регистр имён становится значимым.
Третья типичная ситуация — путаница между свойством ссылки и свойством объекта. У ссылки доступен ограниченный набор полей (стандартные реквизиты), а обращение к произвольному реквизиту через ссылку выполняется неявным запросом к базе. Массовые обращения вида Ссылка.Реквизит в цикле порождают по запросу на каждую итерацию и резко снижают производительность — правильнее выбрать нужные поля одним запросом.
Свойства формы и элементов формы
Отдельная область — свойства управляемых форм и их элементов. У формы есть реквизиты (данные) и свойства самой формы: Заголовок, ТолькоПросмотр, Модифицированность. У элементов формы — Видимость, Доступность, ЦветФона и другие. Программное изменение этих свойств — стандартный способ динамически управлять интерфейсом.
Обращение к элементу формы идёт через коллекцию Элементы или ЭлементыФормы (в обычных формах): Элементы.КнопкаЗаписать.Доступность = Ложь;. Например, обращение к данным объекта возможно только на сервере или через преобразование в объект.
Как проверить результат работы со свойствами
После записи значения в свойство убедитесь, что изменение сохранилось. Для объектов базы данных запись в свойство не сохраняет данные автоматически — нужен вызов метода Записать(). Без него все изменения свойств останутся только в памяти и пропадут при завершении кода.
Для дополнительных свойств проверка выполняется через интерфейс: откройте карточку элемента, найдите добавленное поле, заполните и перезапишите объект. Затем проверьте, что значение доступно в отборе списка и в отчёте. Если поле видно, но не сохраняется — чаще всего проблема в правах доступа или в том, что свойство добавлено не в тот набор.
Как проверить результат
После Записать() значение читается из базы повторным запросом
Значение есть в отладчике, но в базе не сохраняется — пропущен Записать()
Поле видно в карточке, сохраняется и участвует в отборах
Поле не отображается — проверьте набор свойств и права пользователя
Код выполняется без ошибок в отладчике
Ошибка «Поле объекта не обнаружено» — имя свойства или тип объекта неверны
Частые вопросы о свойствах в 1С
Чем свойство отличается от реквизита?
Реквизит — это поле объекта конфигурации, которое разработчик добавил в конфигураторе (например, реквизит «Склад» у документа). Свойство — более широкое понятие: оно включает реквизиты, стандартные поля (Номер, Дата, Ссылка) и служебные характеристики объекта встроенного языка. В коде и то, и другое доступно через точку одинаково.
Как обратиться к свойству, если его имя хранится в переменной?
Через точку такое обращение невозможно. Для структур используйте квадратные скобки: Структура[ИмяСвойства]. Для реквизитов объектов данных универсального механизма нет — обычно применяют запрос с динамически формируемым текстом или метод Вычислить() с осторожностью, так как он выполняет произвольный код.
Почему возникает ошибка «Поле объекта не обнаружено»?
Ошибка означает, что у объекта нет свойства с указанным именем. Причины: опечатка в имени, обращение к реквизиту через ссылку, когда он недоступен, объект имеет другой тип, чем ожидалось, или переменная содержит Неопределено. Откройте отладчик и посмотрите фактический тип и состав свойств переменной в момент ошибки.
Можно ли добавить свойство объекту программно?
Для структур — да, методом Вставить(). Для объектов базы данных (справочников, документов) — нет: состав реквизитов фиксируется конфигурацией. Обходные пути — дополнительные реквизиты и сведения БСП либо хранение произвольных данных в реквизите типа «ХранилищеЗначения».
Что такое стандартные свойства (реквизиты) объекта?
Это поля, которые платформа создаёт автоматически для каждого объекта конфигурации: Ссылка, Код, Наименование у справочников; Номер, Дата, Проведен, ПометкаУдаления у документов. Их состав зависит от настроек объекта — например, если длина наименования равна нулю, реквизит Наименование отсутствует.
Влияет ли регистр букв в имени свойства на выполнение кода?
Во встроенном языке 1С — нет: имена свойств, методов и переменных регистронезависимы. Регистр становится важен при обмене с внешними системами (JSON, XML, веб-сервисы), где имена полей чувствительны к регистру, и при работе со строковыми ключами структур через квадратные скобки.
Что важно запомнить
Свойство в 1С — это именованная характеристика объекта, доступная через точку. Различайте три контекста: свойства объектов встроенного языка, свойства объектов конфигурации в палитре свойств и дополнительные свойства БСП. Проверяйте объект на Неопределено перед обращением к свойствам, не читайте реквизиты через ссылку в циклах и не меняйте свойства конфигурации в рабочей базе без резервной копии.