Разработка и Конфигурация · 10 мин
Поле объекта в 1С: что это и как с ним работать
Что такое поле объекта в 1С: реквизиты, табличные части, стандартные поля. Как обращаться к полям в коде, форме и запросах, типичные ошибки и ответы на вопросы.
Поле объекта в 1С — это именованная ячейка данных, которая принадлежит конкретному объекту конфигурации: справочнику, документу, регистру, обработке. Когда бухгалтер заполняет «Контрагента» в счёте, а программист пишет Документ.Контрагент, оба работают с одним и тем же — с полем объекта, только на разных уровнях: пользователь видит поле на форме, разработчик обращается к реквизиту через встроенный язык.
Понимание того, какие поля бывают, где они хранятся и как к ним обращаться, нужно и при доработке конфигурации, и при написании отчётов, и при обмене данными. Ошибка в обращении к полю — например, попытка прочитать несуществующий реквизит или обратиться к полю табличной части как к шапке — одна из самых частых причин падения кода в 1С.
Ниже разобраны виды полей, способы обращения к ним в модуле, на форме и в запросе, а также типичные ошибки и способы их проверки.
Что именно называют полем объекта
В терминологии 1С «поле» — бытовое слово, которое объединяет несколько технических сущностей. На уровне конфигуратора поле объекта чаще всего означает реквизит — элемент данных, описанный в дереве метаданных. У справочника «Номенклатура» реквизитами могут быть «Артикул», «СтавкаНДС», «Поставщик». Каждый реквизит имеет имя, тип данных и свойства (обязательность, длину, проверку заполнения).
Кроме реквизитов, заданных разработчиком, у каждого объекта есть стандартные реквизиты: Ссылка, Код, Наименование, ПометкаУдаления у справочников; Номер, Дата, Проведен у документов. Они создаются платформой автоматически и не требуют описания в конфигураторе, но к ним обращаются так же — по имени.
Отдельный случай — поля табличных частей. Табличная часть документа «Товары» содержит колонки «Номенклатура», «Количество», «Цена». Каждая колонка — тоже поле, но обратиться к нему нельзя напрямую через объект: сначала нужно получить строку табличной части.
Виды полей по типам объектов
Набор полей зависит от типа объекта метаданных. У справочников и документов это реквизиты и табличные части. У регистров сведений и накопления структура другая: измерения (по каким разрезам хранятся данные), ресурсы (какие числовые или иные значения учитываются) и реквизиты (дополнительная информация, не участвующая в итогах). Все три категории при обращении в запросе выглядят как поля.
У планов счетов есть признаки учёта и виды субконто, у планов видов расчёта — базовые виды расчёта. У внешних обработок и отчётов реквизиты описываются так же, как у справочников, но хранятся только в памяти, пока объект открыт.
| Объект | Основные виды полей | Примеры |
|---|---|---|
| Справочник | Стандартные реквизиты, реквизиты, табличные части | Код, Наименование, Артикул |
| Документ | Стандартные реквизиты, реквизиты, табличные части | Номер, Дата, Контрагент, Товары.Количество |
| Регистр сведений | Измерения, ресурсы, реквизиты | Период, Номенклатура, Цена |
| Регистр накопления | Измерения, ресурсы, реквизиты | Склад, Номенклатура, Количество |
Как обратиться к полю в коде
Основной способ — через точку от переменной, содержащей объект. Если есть переменная Док со ссылкой на документ, то Док.Контрагент вернёт значение реквизита «Контрагент». Важно понимать различие: у ссылки доступны поля объекта «на чтение» через механизм разыменования, а объект (полученный методом ПолучитьОбъект()) позволяет и читать, и изменять поля с последующей записью.
Обращение к полю табличной части идёт в два шага: сначала строка, потом колонка. Типичный цикл выглядит так: перебираем Док.Товары, внутри цикла работаем со СтрокаТовары.Количество. Попытка написать Док.Товары.Количество приведёт к ошибке, потому что табличная часть — это коллекция, а не одна строка.
ДокОбъект = СсылкаНаДокумент.ПолучитьОбъект();
ДокОбъект.Комментарий = "Проверено";
Для Каждого СтрокаТовары Из ДокОбъект.Товары Цикл
СтрокаТовары.Сумма = СтрокаТовары.Количество * СтрокаТовары.Цена;
КонецЦикла;
ДокОбъект.Записать();Если имя поля заранее неизвестно (например, приходит параметром), используют обращение через квадратные скобки: Объект[ИмяРеквизита]. Это медленнее и не проверяется на этапе компиляции, поэтому применяется только там, где имя действительно динамическое.
Поля на форме и в запросах
На управляемой форме поле ввода — это элемент формы, связанный с реквизитом данных через свойство ПутьКДанным. Один и тот же реквизит объекта может быть выведен на форму несколькими элементами (например, наименование в шапке и в надписи), а может не выводиться вообще — тогда пользователь его не видит, но в базе оно хранится. Обратное тоже верно: элемент формы может отображать вычисляемое значение, не связанное ни с одним полем объекта.
В запросах поля указываются через точку от имени таблицы: ВЫБРАТЬ Док.Контрагент, Док.Сумма ИЗ Документ.РеализацияТоваровУслуг КАК Док. Табличные части в запросе — отдельные виртуальные таблицы, которые соединяются с шапкой по ссылке. Обращение к несуществующему полю в запросе вызывает ошибку схемы запроса ещё до выполнения.
Как добавить своё поле к объекту
Новый реквизит добавляется в конфигураторе: откройте объект метаданных, перейдите на закладку «Данные» и добавьте реквизит, указав имя, тип и свойства. Для документа дополнительно настройте проведение — будет ли новое поле участвовать в движениях по регистрам. После обновления конфигурации базы данных платформа создаст соответствующую колонку в таблице СУБД.
Если изменять типовую конфигурацию нельзя (она на поддержке), используют дополнительные реквизиты и сведения — механизм, доступный в режиме «Предприятие» через «Администрирование → Общие настройки → Дополнительные реквизиты и сведения». Такое поле хранится в отдельной табличной части или регистре и не требует доработки конфигурации, но обращаться к нему в коде сложнее — через набор свойств, а не через точку.
- 1Откройте объект в конфигураторе, закладка «Данные»
- 2Добавьте реквизит, задайте имя, синоним и тип данных
- 3Настройте проверку заполнения и участие в движениях (для документов)
- 4Добавьте поле на форму объекта через конструктор формы
- 5Обновите конфигурацию базы данных и проверьте заполнение в режиме «Предприятие»
Типичные ошибки при работе с полями
Самая частая ошибка — «Поле объекта не обнаружено». Она возникает, когда имя реквизита написано с опечаткой, когда код обращается к реквизиту, который есть в одном виде документа, но отсутствует в другом, или когда обработка запускается в конфигурации, где этот реквизит не добавлен. Перед обращением к необязательному полю полезно проверять его наличие через метаданные.
Вторая группа ошибок — работа с полями через ссылку вместо объекта. Присвоение Ссылка.Комментарий = "текст" не сохранит данные: у ссылки поля доступны только для чтения. Нужен ПолучитьОбъект(), изменение и Записать(). Третья группа — обращение к полям незаписанного объекта после его удаления или к полям объекта, полученного в другом сеансе.
Как проверить результат
Модуль проходит синтаксическую проверку, значение читается и записывается
Ошибка «Поле объекта не обнаружено» или значение не сохраняется после записи
Поле видно, редактируется, значение сохраняется после «Записать и закрыть»
Поле есть в данных, но не выведено на форму, либо сбрасывается при записи
Запрос выполняется, в результате есть ожидаемая колонка
Ошибка схемы запроса «Поле не найдено»
FAQ
Чем поле отличается от реквизита в 1С?
По сути это одно и то же на разных уровнях: «реквизит» — термин конфигуратора (метаданные), «поле» — то, как этот реквизит виден на форме, в запросе или в таблице базы данных. В обычной речи слова взаимозаменяемы.
Как узнать список всех полей объекта программно?
Через метаданные: Метаданные.Справочники.Номенклатура.Реквизиты вернёт коллекцию реквизитов, а стандартные реквизиты доступны через свойство СтандартныеРеквизиты. Для объекта в переменной имя метаданных получают методом Метаданные().
Почему возникает ошибка «Поле объекта не обнаружено»?
Чаще всего — опечатка в имени, обращение к реквизиту, которого нет у данного вида объекта, или запуск кода в конфигурации, где реквизит не добавлен. Проверьте имя в конфигураторе и убедитесь, что обращаетесь к объекту правильного типа.
Можно ли добавить поле без доработки конфигурации?
Да, через механизм дополнительных реквизитов и сведений в режиме «Предприятие». Поле появится на форме объекта и в отчётах, но в коде к нему обращаются через коллекцию дополнительных свойств, а не через точку.
Чем измерение регистра отличается от ресурса?
Измерение задаёт разрез хранения (склад, номенклатура, организация), а ресурс — учитываемое значение (количество, сумма). В запросах и коде оба выглядят как поля, но итоги рассчитываются только по ресурсам в разрезе измерений.
Почему изменение поля через ссылку не сохраняется?
Ссылка предназначена только для чтения данных. Чтобы изменить поле, получите объект методом ПолучитьОбъект(), измените реквизит и вызовите Записать(). Без вызова записи изменения останутся только в памяти.
Что важно запомнить
Поле объекта в 1С — это реквизит, стандартный реквизит, колонка табличной части или измерение/ресурс регистра. В коде к полю обращаются через точку от объекта, на форме — через путь к данным, в запросе — по имени. Изменять поля можно только у объекта, а не у ссылки, а изменение типа существующего реквизита требует резервной копии базы.