Где и как писать код в 1С: от Конфигуратора до внешних обработок

· 9 мин

Содержание

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

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

Режим Предприятие и режим Конфигуратор: где именно пишут код

При запуске базы 1С в окне выбора есть два основных режима:

  • 🟡 1С:Предприятие — рабочий режим. Здесь пользователь вводит документы, формирует отчёты. Своего кода тут не наберёшь.
  • 🔧 Конфигуратор — режим разработчика. Открывает дерево конфигурации и редактор встроенного языка. Весь код живёт здесь.

Третий вариант для крупных команд — 1С:EDT (среда на базе Eclipse). Язык тот же, но хранение в текстовом виде удобнее для совместной разработки и Git. Для разовой доработки типовой базы хватает Конфигуратора.

Если база — типовая (поставляется фирмой 1С), по умолчанию её модули закрыты для правки: поля редактора серые. Чтобы снять замок, зайдите в Конфигурация → Поддержка → Настройка поддержки и нажмите «Включить возможность изменения».

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

Дерево конфигурации: как найти нужный модуль

В Конфигураторе откройте дерево через Конфигурация → Открыть конфигурацию. Слева появится список всех объектов: справочники, документы, отчёты, обработки, общие модули.

Код в 1С распределён по разным модулям, и важно класть процедуру туда, где она сработает:

МодульГде лежитДля чего
Модуль формывнутри конкретной формыобработчики кнопок и полей, логика открытой формы
Модуль объектау справочника, документапроверка при записи, заполнение, проведение
Модуль менеджерау объекта метаданныхпроцедуры, не привязанные к конкретному экземпляру
Общий модульветка «Общие → Общие модули»повторно используемый код для всей конфигурации
Модуль приложения / сеансакорень конфигурациизапуск системы, начало сеанса

Чтобы открыть модуль объекта: правой кнопкой по объекту в дереве → «Открыть модуль объекта». Чтобы попасть в модуль формы — откройте форму и внизу редактора переключитесь на закладку «Модуль».

Если не помните, где раньше написали нужную процедуру, используйте глобальный поиск по текстам модулей (меню Правка). Он находит вызовы и объявления по всей конфигурации.

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

Встроенный язык 1С — русскоязычный (есть и английские синонимы команд). Код оформляется в процедуры и функции.

Процедура выполняет действия и ничего не возвращает. Функция возвращает значение через оператор Возврат:

Функция СуммаСНДС(Сумма, Ставка = 20) Экспорт
    Возврат Сумма + Сумма * Ставка / 100;
КонецФункции

Разберём элементы:

  • Экспорт — ключевое слово делает процедуру видимой из других модулей.
  • Ставка = 20 — параметр со значением по умолчанию: при вызове его можно не передавать.
  • Каждая строка заканчивается точкой с запятой ;.
  • Комментарий начинается с двух слэшей //.

Имена переменных, процедур и параметров пишут по-русски или латиницей — платформа принимает оба варианта. Чтобы не держать весь синтаксис в голове, вызывайте Синтакс-помощник (Справка → Синтакс-помощник) и контекстную подсказку клавишами Ctrl + Пробел прямо в редакторе — она подставит имена методов и свойств.

Обработчики событий: не пишите процедуру вручную

Чаще всего код в 1С вводят не в чистом виде, а как реакцию на событие: запись документа, открытие формы, нажатие кнопки. Для таких случаев есть правильный приём, который экономит от ошибок в сигнатуре процедуры.

Откройте палитру свойств нужного объекта или элемента формы и найдите раздел «События». Рядом с подходящим событием (например, ПередЗаписью, ПриОткрытии, ОбработкаПроведения) нажмите кнопку с лупой. Платформа сама создаст процедуру с верным именем, нужными параметрами и директивой компиляции и перенесёт вас в модуль — останется дописать логику внутри.

Так вы не ошибётесь в наборе параметров события и не поставите обработчик не в тот модуль: для проверок при записи документа это модуль объекта, для реакции элементов формы — модуль формы.

Клиент и сервер: где выполнится ваш код

Главная причина ошибок у новичков — непонимание, что в управляемом приложении код исполняется на двух сторонах. Над каждой процедурой в модуле формы ставится директива компиляции:

  • &НаКлиенте — код работает в приложении пользователя: диалоги, вопросы, реакция на нажатия.
  • &НаСервере — код работает на сервере: запросы к базе, чтение и запись объектов.
  • &НаСервереБезКонтекста — то же, но без передачи данных формы на сервер и обратно. Работает быстрее, когда данные открытой формы процедуре не нужны — например, когда она лишь читает справочник по переданному параметру.

Есть ещё &НаКлиентеНаСервереБезКонтекста — для процедур, которые должны быть доступны и на клиенте, и на сервере. В общих модулях сторону исполнения задают не директивой, а флажками в свойствах модуля: Клиент (управляемое приложение), Сервер, Вызов сервера. Они определяют, откуда процедуры этого модуля можно вызывать.

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

&НаКлиенте
Процедура ЗаполнитьКомментарий(Команда)
    ЗаполнитьКомментарийНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьКомментарийНаСервере()
    Объект.Комментарий = "Проверено, замечаний нет";
КонецПроцедуры

Каждый переход с клиента на сервер — это передача данных по сети. Не вызывайте сервер в цикле по одной записи; соберите данные и обработайте их за один серверный вызов.

Если обратиться к Объект формы из клиентской процедуры напрямую, платформа выдаст ошибку: на клиенте полного контекста объекта нет. Это и есть смысл директив — они заранее говорят, где компилировать процедуру.

Внешние обработки и консоль: код без правки конфигурации

Когда менять саму конфигурацию нельзя или не хочется, код оформляют во внешнюю обработку — отдельный файл с расширением .epf (внешний отчёт — .erf).

Создаётся обработка тоже в Конфигураторе: Файл → Новый → Внешняя обработка. Внутри у неё свои реквизиты, формы и модуль — всё как у встроенной, но хранится отдельным файлом.

Запустить готовую обработку в рабочей базе можно двумя путями:

  1. Разово — в режиме «Предприятие» через Файл → Открыть выбрать файл .epf.
  2. На постоянной основе — подключить через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки. Тогда она появится у пользователей в списке и будет храниться в базе.

Отдельный класс внешних обработок — консоли: консоль запросов, консоль кода. В них пишут и сразу выполняют фрагмент на встроенном языке или текст запроса, не трогая конфигурацию. Это удобно для разовых выборок и проверки гипотез.

Как выбрать способ ввода кода под задачу:

  • Разовая выборка данных, проверка идеи → консоль запросов или кода.
  • Инструмент, который нужен регулярно, но без изменения базы → внешняя обработка, подключённая к базе.
  • Доработка поведения типовой конфигурации с сохранением обновлений → расширение.
  • Глубокая переделка, которую не выразить расширением → правка самой конфигурации со снятием с поддержки (крайний случай).

Внешние обработки из непроверенных источников запускайте только в безопасном режиме и на копии базы: чужой код выполняется с вашими правами.

Расширения конфигурации: безопасный способ дорабатывать типовую

Расширения появились в платформе 8.3.6 и стали основным инструментом доработки типовых баз. Идея проста: ваши изменения лежат отдельно и накладываются поверх типовой конфигурации, а обновления от 1С при этом продолжают устанавливаться штатно.

Как добавить код через расширение:

  1. Откройте Конфигурация → Расширения конфигурации и создайте новое расширение.
  2. Откройте его дерево (оно пустое) и заимствуйте нужный объект типовой конфигурации — например, документ или форму.
  3. В заимствованном объекте добавьте свой обработчик или модуль.
  4. Примените изменения к базе (см. следующий раздел).

Через расширение удобно добавлять свои реквизиты, формы, печатные формы и обработчики событий. Для глубокой переделки типовых алгоритмов расширения подходят хуже: там, где нужно переписать заимствованный метод целиком, граница возможностей расширения заканчивается, и приходится возвращаться к правке самой конфигурации.

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

Типичные ошибки при вводе кода и как их ловить

Перед запуском проверьте модуль синтаксическим контролем — кнопка на панели или Ctrl + F7. Он найдёт опечатки и необъявленные переменные, не запуская саму базу.

Для разбора поведения в работе служит отладчик: запуск в режиме отладки (F5), точка останова (F9), пошаговое выполнение и окно «Табло» для просмотра значений переменных. Поставьте точку останова на нужной строке, запустите «Предприятие» в отладке и дойдите до неё — платформа остановится, и вы увидите состояние данных.

Когда отладчик разворачивать не хочется, помогает вывод промежуточных значений прямо из кода — вставьте временную строку с Сообщить(СтрокаЗначения) и посмотрите результат в окне сообщений. Это грубый, но быстрый способ понять, доходит ли выполнение до нужного места и что лежит в переменной. Главное — убрать такие строки перед тем, как сохранять код в рабочую базу.

Самые частые проблемы при вводе кода:

Диагностика: выберите симптом

Как сохранить код и применить изменения в базе

Сохранение в 1С — это два разных действия, и их часто путают.

Сохранить модуль (Ctrl + S) — записывает текст в конфигурацию. Но в рабочей базе код при этом ещё не действует: вы изменили «чертёж», а не само здание.

Обновить конфигурацию базы данных (F7) — переносит изменения из конфигурации в рабочую базу. Только после этого код начинает исполняться.

Как это проходит на практике:

  • Если вы меняли только код (добавили процедуру, обработчик), обновление чаще проходит динамически, без завершения сеансов — пользователи продолжают работать.
  • Если менялась структура (новый реквизит, изменение типа, новый объект), платформа потребует монопольный доступ: всех пользователей нужно вывести из базы.

Прежде чем требовать монопольный доступ в рабочей базе, предупредите пользователей и дождитесь, пока они завершат сеансы и сохранят документы. Иначе их незавершённая работа прервётся. Делайте это в технологическое окно, а перед структурными изменениями снимите резервную копию.

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

Частые вопросы

Можно ли писать код в режиме «Предприятие» или только в Конфигураторе?
Редактировать код конфигурации — только в Конфигураторе (или в 1С:EDT). В «Предприятии» код можно запускать через внешние обработки и консоли, но набирать и править сами модули базы там нельзя.
Нужно ли выгонять пользователей, чтобы добавить код?
Не всегда. Правки, которые меняют только текст процедур, обычно применяются динамически, без выхода пользователей. Монопольный доступ нужен, когда меняется структура данных — добавляется реквизит, меняется тип, появляется новый объект.
Чем 1С:EDT отличается от Конфигуратора для ввода кода?
Язык и логика те же. EDT построен на Eclipse, хранит конфигурацию в текстовом виде и удобнее для командной работы с системой контроля версий. Конфигуратор проще для одиночных и разовых доработок.
Как быстро найти, в каком модуле лежит нужная процедура?
Используйте глобальный поиск по текстам модулей в меню Правка Конфигуратора: он найдёт и объявление процедуры, и все места, откуда её вызывают, по всей конфигурации.