Разработка и Конфигурация · 11 мин
Чем отличается метод от свойства в 1С
Разбираем разницу между методом и свойством в 1С: синтаксис, примеры кода, типичные ошибки новичков и правила выбора при разработке и доработке конфигураций.
Во встроенном языке 1С объекты — документы, справочники, регистры, элементы форм — описываются двумя видами членов: свойствами и методами. Путаница между ними — одна из самых частых причин ошибок у начинающих разработчиков: код вроде бы написан логично, но система выдаёт «Поле объекта не обнаружено» или «Процедура или функция с указанным именем не определена».
Свойство — это характеристика объекта, данные, которые он хранит: номер документа, дата, наименование контрагента. Метод — это действие, которое объект умеет выполнять: записать, провести, найти по коду, открыть форму. Свойство отвечает на вопрос «что у объекта есть», метод — «что объект может сделать».
Понимание этой разницы важно не только для написания кода. От неё зависит, где искать нужную возможность в синтакс-помощнике, почему нельзя присвоить значение методу и почему вызов свойства со скобками приводит к ошибке. Ниже разберём отличия на конкретных примерах из типовой практики.
Как отличить метод от свойства по синтаксису
Самый быстрый визуальный признак — скобки. Метод всегда вызывается с круглыми скобками, даже если у него нет параметров: ДокументОбъект.Записать(). Свойство используется без скобок: ДокументОбъект.Дата. Если написать ДокументОбъект.Дата(), система выдаст ошибку, потому что попытается вызвать значение даты как процедуру.
Второй признак — поведение в операции присваивания. Свойство обычно можно прочитать и записать: Контрагент = Справочники.Контрагенты.НайтиПоКоду("0000001"); Наименование = Контрагент.Наименование;. Методу присвоить значение нельзя — конструкция вида Объект.Записать() = Истина бессмысленна и вызовет ошибку компиляции.
Третий признак — место в синтакс-помощнике. В дереве объекта свойства и методы расположены в разных ветках, и это не случайность: платформа явно разделяет «состояние» и «поведение». Если вы ищете, как получить данные объекта — смотрите ветку «Свойства», если как выполнить операцию — ветку «Методы».
Примеры свойств и методов на реальных объектах
Рассмотрим объект «ДокументОбъект». Его типичные свойства: Номер, Дата, Проведен, Организация, табличная часть Товары. Всё это данные, которые можно прочитать, а до записи — изменить. Например: ДокументОбъект.Дата = ТекущаяДатаСеанса();.
Методы того же объекта: Записать(), УстановитьНовыйНомер(), ПроверитьЗаполнение(), ПолучитьФорму(). Каждый из них выполняет действие, а некоторые возвращают значение. Например, ПроверитьЗаполнение() возвращает булево — и его удобно использовать в условии:
Если НЕ ДокументОбъект.ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Обратите внимание: Проведен — свойство, а проведение выполняется методом Записать() с параметром режима. Нельзя «провести» документ присваиванием ДокументОбъект.Проведен = Истина — свойство доступно только для чтения, и попытка записи вызовет ошибку.
// Свойства: читаем и пишем данные
Объект.Дата = ТекущаяДатаСеанса();
СуммаДокумента = Объект.Товары.Итог("Сумма");
// Методы: выполняем действия
Если Объект.ПроверитьЗаполнение() Тогда
Объект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;Что умеют методы: параметры и возвращаемые значения
Методы принимают параметры, которые управляют их работой. У Записать() — режим записи и режим проведения, у НайтиПоНаименованию() — строка поиска и флаг точного соответствия. Параметры указываются в скобках через запятую, необязательные можно опускать.
Многие методы возвращают значение, которое нужно либо использовать, либо осознанно игнорировать. НайтиПоКоду() возвращает ссылку или пустую ссылку, если ничего не найдено. Частая ошибка — вызвать метод поиска и не проверить результат, после чего обратиться к свойству пустой ссылки и получить ошибку или некорректные данные.
Отдельно стоит запомнить, что метод может изменять состояние объекта — то есть его свойства. После вызова УстановитьНовыйНомер() изменится свойство Номер. После Записать() у нового объекта появится заполненная ссылка. Это ещё одно практическое отличие: чтение свойства объект не меняет, а вызов метода — может.
Особенности свойств: чтение, запись и вычисляемые значения
Не все свойства доступны на запись. Платформа делит их на читаемые и изменяемые, и это указано в синтакс-помощнике. Например, у ссылки на документ свойство Проведен доступно только для чтения — изменить его можно только через запись объекта. У элемента формы большинство свойств (заголовок, видимость, доступность) изменяемы в любой момент.
Часть свойств — вычисляемые: физически они не хранятся, а формируются при обращении. К ним относятся, например, представления и некоторые служебные характеристики. Это важно для производительности: обращение к таким свойствам в цикле по тысячам строк может заметно замедлить код, особенно если за обращением стоит запрос к базе данных.
Табличные части и коллекции — тоже свойства, но со своими методами. ДокументОбъект.Товары — свойство, возвращающее коллекцию строк, а Добавить(), Итог(), Найти() — уже методы этой коллекции. Такая вложенность «свойство возвращает объект, у которого есть свои свойства и методы» — нормальная модель платформы.
Типичные ошибки при работе со свойствами и методами
Ошибка «Поле объекта не обнаружено» чаще всего означает, что вы обратились к несуществующему свойству: опечатка в имени, обращение к реквизиту, которого нет у данного вида документа, или попытка прочитать реквизит у пустой ссылки. Проверьте имя по конфигуратору и убедитесь, что объект инициализирован.
Ошибка «Процедура или функция с указанным именем не определена» возникает при вызове несуществующего метода — например, при попытке вызвать Записать() у ссылки, а не у объекта. Ссылка хранит только идентификатор и реквизиты для чтения; чтобы изменять и записывать, нужно получить объект методом ПолучитьОбъект().
Ещё одна группа ошибок — путаница между одноимёнными свойствами и методами в разных контекстах. Например, у формы есть метод Прочитать(), а у объекта — свойства, которые уже содержат данные. Новички вызывают лишние чтения и теряют изменения, внесённые пользователем на форме.
Как быстро определить, что перед вами: свойство или метод
Первый способ — синтакс-помощник. Откройте его (Ctrl+Shift+F1), найдите нужный тип объекта и посмотрите, в какой ветке находится интересующий член: «Свойства» или «Методы». Там же указаны параметры, тип возвращаемого значения и доступность на чтение/запись.
Второй способ — контекстная подсказка конфигуратора. При наборе точки после имени переменной платформа показывает список доступных членов с пиктограммами: свойства и методы визуально различаются. Если подсказка не появляется — тип переменной системе неизвестен, и стоит проверить, чем она инициализирована.
Третий способ — отладчик. Поставьте точку останова, остановитесь после создания объекта и посмотрите его в табло (Shift+F9). Значения свойств видны сразу, а методы в списке значений не отображаются — их можно только вызвать. Это наглядно показывает разницу: свойства — это то, что уже есть у объекта, методы — то, что можно с ним сделать.
- 1Откройте синтакс-помощник и найдите тип объекта
- 2Проверьте, в ветке «Свойства» или «Методы» находится нужное имя
- 3Для метода уточните обязательные параметры и тип возвращаемого значения
- 4Для свойства проверьте, доступно ли оно на запись
- 5Проверьте код в отладчике на тестовой копии базы
Когда свойство, а когда метод: правила выбора в своём коде
Когда вы расширяете конфигурацию собственными процедурами и функциями в модулях объектов и форм, действует та же логика. Если нужно хранить данные — используйте реквизиты объекта или переменные модуля. Если нужно выполнить действие — создавайте процедуру (без возврата) или функцию (с возвратом значения).
Практическое правило именования помогает не путаться: свойства и реквизиты называют существительными (Сумма, Контрагент, ДатаОплаты), а методы — глаголами (РассчитатьСумму, ЗаполнитьПоОснованию, ПроверитьКонтрагента). Если вы читаете чужой код и видите глагол — почти наверняка это метод, который что-то делает, а не просто отдаёт значение.
В запросах разделение тоже сохраняется, но в другой форме: поля запроса соответствуют свойствам (реквизитам), а действия недоступны вовсе — запрос только читает данные. Поэтому провести документ или изменить объект из запроса нельзя: для действий всегда нужен объект и его методы.
Свойство или метод
Нужно прочитать или задать данные объекта: дату, номер, реквизит, видимость элемента формы. Ограничение: часть свойств доступна только для чтения
Нужно выполнить действие: записать, провести, найти, открыть форму. Ограничение: вызывается со скобками, может требовать объект вместо ссылки
Нужно массово прочитать свойства многих объектов без обращений к базе в цикле. Ограничение: только чтение, изменения выполняются методами объектов
FAQ: частые вопросы о свойствах и методах в 1С
Почему нельзя написать Документ.Записать без скобок?
Без скобок система ищет свойство с именем «Записать», а его не существует — это метод. Скобки сообщают платформе, что нужно выполнить действие. Даже если параметров нет, пустые скобки обязательны.
Может ли метод не возвращать значение?
Да. Методы-действия вроде Записать() или УстановитьНовыйНомер() ничего не возвращают — их аналог в собственном коде называется процедурой. Методы-функции, например ПроверитьЗаполнение() или НайтиПоКоду(), возвращают значение, которое можно использовать в условиях и присваиваниях.
Чем свойство отличается от реквизита?
Реквизит — это свойство, описанное в конфигураторе у конкретного объекта (документа, справочника). Кроме реквизитов у объекта есть системные свойства платформы: Ссылка, Проведен, ПометкаУдаления. Все вместе они образуют набор свойств объекта.
Почему обращение Ссылка.Наименование иногда работает медленно?
Каждое обращение к свойству через точку от ссылки выполняет неявный запрос к базе данных. В цикле по тысяче ссылок это даёт тысячу отдельных запросов. Правильное решение — один запрос с выборкой всех нужных полей и обход его результата.
Как узнать, доступно ли свойство для записи?
Откройте описание свойства в синтакс-помощнике: там явно указано «Чтение и запись» или «Только чтение». Попытка записать значение в свойство «только чтение» приведёт к ошибке исполнения, поэтому проверять стоит до написания кода.
Есть ли свойства и методы у элементов формы?
Да. У поля формы, например, есть свойства Видимость, Доступность, Заголовок и методы вроде УстановитьГраницыВыделения(). Логика та же: свойства описывают состояние элемента, методы выполняют действия с ним.
Что важно запомнить
Свойство хранит данные объекта и используется без скобок, метод выполняет действие и вызывается со скобками. Свойства бывают доступны только для чтения, методы могут требовать объект вместо ссылки и возвращать результат, который нужно проверять. Синтакс-помощник и отладчик — основные инструменты, чтобы быстро определить, с чем вы работаете.