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

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

Методы 1С: что это такое и как их использовать

Методы 1С: что это такое, чем отличаются процедуры и функции, какие бывают методы объектов и глобального контекста, примеры кода и типичные ошибки новичков.

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

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

Встроенный язык 1С близок по логике к другим языкам программирования, но имеет особенности: код можно писать на русском или английском языке, методы жёстко привязаны к контексту исполнения (клиент, сервер, форма, объект), а часть методов доступна только в определённых модулях. Разберём всё это по порядку с примерами.

Что такое метод в 1С простыми словами

Метод — это подпрограмма: набор инструкций, объединённых под одним именем. Вместо того чтобы повторять один и тот же код в десяти местах, разработчик описывает его один раз и вызывает по имени там, где нужно. Это сокращает объём кода, упрощает исправление ошибок и делает логику программы читаемой.

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

Отличие метода от свойства (реквизита) принципиально: свойство хранит данные, а метод выполняет действие. Например, у объекта справочника Наименование — это свойство со строкой текста, а Записать() — метод, который выполняет запись в информационную базу. Методы всегда вызываются со скобками, даже если параметров нет.

Процедуры и функции: два вида методов разработчика

Процедура — метод, который просто выполняет действия и ничего не возвращает. Функция — метод, который вычисляет результат и возвращает его через оператор Возврат. Выбор между ними простой: если вызывающему коду нужен результат вычисления — пишите функцию, если нужно только выполнить действие — процедуру.

// Процедура — выполняет действие

Процедура ВывестиПриветствие(ИмяПользователя)

Сообщить("Здравствуйте, " + ИмяПользователя + "!");

КонецПроцедуры

// Функция — возвращает значение

Функция РассчитатьСуммуСНДС(Сумма, СтавкаНДС)

Возврат Сумма + Сумма * СтавкаНДС / 100;

КонецФункции

Объявленные методы вызываются по имени: Итог = РассчитатьСуммуСНДС(10000, 20);. Параметры передаются в скобках через запятую в том порядке, в котором они объявлены. Если параметр объявлен со значением по умолчанию (Процедура Тест(Парам = 0)), его можно не передавать при вызове — тогда используется значение по умолчанию.

Экспортные методы и область видимости

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

Функция ПолучитьКурсВалюты(Валюта, Дата) Экспорт

// доступна из любого модуля конфигурации

КонецФункции

Встроенные методы объектов платформы

У каждого прикладного объекта 1С есть набор предопределённых методов. У справочников — НайтиПоКоду(), НайтиПоНаименованию(), Выбрать(). У документов — НайтиПоНомеру(), Провести(), Записать(). У запросов — Выполнить(), УстановитьПараметр(). Полный список методов конкретного объекта смотрите в синтакс-помощнике конфигуратора (вызывается по Ctrl+F1 или через меню).

Важно различать, к какому объекту применяется метод. Менеджер объекта (например, Справочники.Номенклатура) умеет искать и создавать элементы, а объект конкретного элемента (СправочникОбъект) умеет записывать и удалять себя. Частая ошибка новичка — попытаться вызвать Записать() у менеджера или НайтиПоКоду() у объекта элемента: платформа выдаст ошибку «Метод объекта не обнаружен».

Кто какие методы предоставляет

Менеджер (Справочники.Номенклатура)

Поиск, создание, выборка: НайтиПоКоду(), СоздатьЭлемент(), Выбрать(). Не работает с данными конкретного элемента.

Объект (СправочникОбъект)

Изменение и запись конкретного элемента: Записать(), Удалить(), Заполнить(). Получается через СоздатьЭлемент() или ПолучитьОбъект().

Ссылка (СправочникСсылка)

Лёгкий указатель на элемент. Методов почти нет — через ссылку читают реквизиты, но для изменения нужен объект.

Отдельная группа — методы глобального контекста, доступные везде без указания объекта: Сообщить(), ТекущаяДата(), СтрНайти(), Формат(), ЗначениеЗаполнено(). Их легко узнать — они вызываются напрямую по имени, без точки перед ними.

Контекст исполнения: где какие методы доступны

Одна из ключевых особенностей 1С — разделение кода по контексту. Директивы &НаКлиенте, &НаСервере, &НаСервереБезКонтекста определяют, где выполняется метод формы. Метод, помеченный &НаКлиенте, не может напрямую выполнить запрос к базе — для этого нужно вызвать серверный метод.

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

Как написать и вызвать свой метод: пошагово

Разберём практический сценарий: нужно в общем модуле создать функцию, которая проверяет, заполнен ли ИНН контрагента, и вызвать её из формы документа.

Порядок действий
  1. 1
    Откройте конфигуратор и создайте общий модуль, например «РаботаСКонтрагентами», с признаками «Сервер» и «Вызов сервера».
  2. 2
    Добавьте в модуль функцию с Экспорт: Функция ИННЗаполнен(Контрагент) Экспорт ... Возврат ЗначениеЗаполнено(Контрагент.ИНН); КонецФункции.
  3. 3
    В модуле формы документа вызовите метод: Если РаботаСКонтрагентами.ИННЗаполнен(Объект.Контрагент) Тогда ... КонецЕсли.
  4. 4
    Сохраните конфигурацию (F7) и проверьте синтаксис модуля через меню «Конфигурация — Проверка конфигурации».
  5. 5
    Запустите режим предприятия и убедитесь, что проверка срабатывает на реальных данных.

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

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

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

Отдельно стоит сказать о параметре Знач. По умолчанию параметры передаются по ссылке: изменения внутри метода видны вызывающему коду. Если указать Процедура Обработать(Знач Данные), метод получит копию, и исходная переменная не изменится. Это защищает от случайных побочных эффектов, но для больших таблиц значений создаёт лишнее копирование.

Как проверить, что метод работает правильно

Самый простой способ проверки — отладчик конфигуратора. Поставьте точку останова (F9) на строке вызова метода, запустите отладку (F5) и пошагово пройдите код клавишами F10 (обойти) и F11 (зайти внутрь метода). В табло (Alt+F9) можно посмотреть значения переменных и результатов функций.

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

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

Синтаксис модуля
Норма

Проверка конфигурации завершается без ошибок в вашем модуле

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

Ошибки «Процедура или функция не определена» — проверьте Экспорт и имя модуля

Возвращаемое значение
Норма

В отладчике функция доходит до Возврат с ожидаемым значением

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

Функция завершается, минуя Возврат, — результат Неопределено

Контекст вызова
Норма

Клиентский код вызывает только клиентские и серверные-экспортные методы

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

Ошибка при выполнении о недоступности метода в данном контексте

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

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

Чем метод отличается от функции и процедуры?

«Метод» — общий термин для любой вызываемой подпрограммы. Процедура и функция — конкретные виды методов, которые создаёт разработчик: процедура только выполняет действия, функция дополнительно возвращает значение через оператор Возврат. Встроенные команды объектов платформы тоже называются методами.

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

Причина почти всегда одна из трёх: опечатка в имени метода, вызов метода у объекта неподходящего типа (например, НайтиПоКоду у объекта элемента вместо менеджера справочника) или обращение к методу, недоступному в текущем контексте (клиент/сервер). Проверьте имя в синтакс-помощнике и тип переменной в отладчике.

Можно ли писать методы на английском языке?

Да, встроенный язык 1С имеет английский синтаксис: Procedure/EndProcedure, Function/Return, If/Then/EndIf. Встроенные методы объектов также имеют английские аналоги (Write вместо Записать). Смешивать языки в одном модуле технически возможно, но на практике придерживаются одного стиля, принятого в проекте.

Что такое методы-обработчики событий?

Это методы с зарезервированными именами, которые платформа вызывает автоматически при наступлении события: ПриСозданииНаСервере у формы, ПередЗаписью и ПриПроведении у документа, ПриНачалеРаботыСистемы у приложения. Разработчик только заполняет их кодом, а вызывает их сама платформа.

Сколько параметров может быть у метода?

Жёсткого практического ограничения для обычной работы нет, но методы с большим числом параметров трудно читать и поддерживать. Принятая практика — если параметров больше трёх-четырёх, группировать их в структуру и передавать одним параметром.

Где посмотреть список всех методов объекта?

В конфигураторе откройте синтакс-помощник (меню «Справка — Синтакс-помощник» или Ctrl+Shift+F1) и найдите нужный тип объекта в дереве — там перечислены все его методы, свойства и события с описаниями. Также список методов подсказывает контекстная подсказка при вводе точки после имени переменной.

Итог

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

Методы 1С — это процедуры, функции и встроенные команды объектов платформы. Функция возвращает значение, процедура выполняет действие. Следите за контекстом исполнения, различайте ссылку, объект и менеджер, вызывайте методы со скобками и проверяйте код отладчиком на копии базы.