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