Где и как писать код в 1С: от Конфигуратора до внешних обработок
Содержание
Код в 1С пишут в режиме «Конфигуратор», на встроенном языке, внутри модулей объектов конфигурации. В пользовательском режиме «Предприятие» набрать и запустить код напрямую нельзя — там работают уже готовые механизмы. Исключение — внешние обработки и консоли: они код выполняют, но сами тоже создаются в Конфигураторе. Всё ниже — про платформу 8.3 с интерфейсом «Такси»; порядок действий общий для любой конфигурации.
Задача обычно звучит так: типовую базу надо чуть доработать — добавить проверку при проведении документа, свою печатную форму или кнопку. Чтобы ввести код правильно, нужно понимать три вещи: где открывается редактор, в каком модуле разместить процедуру и на какой стороне — клиента или сервера — она выполнится. Пойдём по этому порядку.
Режим Предприятие и режим Конфигуратор: где именно пишут код
При запуске базы 1С в окне выбора есть два основных режима:
- 🟡 1С:Предприятие — рабочий режим. Здесь пользователь вводит документы, формирует отчёты. Своего кода тут не наберёшь.
- 🔧 Конфигуратор — режим разработчика. Открывает дерево конфигурации и редактор встроенного языка. Весь код живёт здесь.
Третий вариант для крупных команд — 1С:EDT (среда на базе Eclipse). Язык тот же, но хранение в текстовом виде удобнее для совместной разработки и Git. Для разовой доработки типовой базы хватает Конфигуратора.
Если база — типовая (поставляется фирмой 1С), по умолчанию её модули закрыты для правки: поля редактора серые. Чтобы снять замок, зайдите в Конфигурация → Поддержка → Настройка поддержки и нажмите «Включить возможность изменения».
После снятия с поддержки обновления типовой конфигурации придётся накатывать вручную и сверять изменения. Поэтому для доработок чаще используют расширения — о них ниже в отдельном разделе.
Дерево конфигурации: как найти нужный модуль
В Конфигураторе откройте дерево через Конфигурация → Открыть конфигурацию. Слева появится список всех объектов: справочники, документы, отчёты, обработки, общие модули.
Код в 1С распределён по разным модулям, и важно класть процедуру туда, где она сработает:
| Модуль | Где лежит | Для чего |
|---|---|---|
| Модуль формы | внутри конкретной формы | обработчики кнопок и полей, логика открытой формы |
| Модуль объекта | у справочника, документа | проверка при записи, заполнение, проведение |
| Модуль менеджера | у объекта метаданных | процедуры, не привязанные к конкретному экземпляру |
| Общий модуль | ветка «Общие → Общие модули» | повторно используемый код для всей конфигурации |
| Модуль приложения / сеанса | корень конфигурации | запуск системы, начало сеанса |
Чтобы открыть модуль объекта: правой кнопкой по объекту в дереве → «Открыть модуль объекта». Чтобы попасть в модуль формы — откройте форму и внизу редактора переключитесь на закладку «Модуль».
Если не помните, где раньше написали нужную процедуру, используйте глобальный поиск по текстам модулей (меню Правка). Он находит вызовы и объявления по всей конфигурации.
Процедуры и функции: как устроен код во встроенном языке
Встроенный язык 1С — русскоязычный (есть и английские синонимы команд). Код оформляется в процедуры и функции.
Процедура выполняет действия и ничего не возвращает. Функция возвращает значение через оператор Возврат:
Функция СуммаСНДС(Сумма, Ставка = 20) Экспорт
Возврат Сумма + Сумма * Ставка / 100;
КонецФункции
Разберём элементы:
Экспорт— ключевое слово делает процедуру видимой из других модулей.Ставка = 20— параметр со значением по умолчанию: при вызове его можно не передавать.- Каждая строка заканчивается точкой с запятой
;. - Комментарий начинается с двух слэшей
//.
Имена переменных, процедур и параметров пишут по-русски или латиницей — платформа принимает оба варианта. Чтобы не держать весь синтаксис в голове, вызывайте Синтакс-помощник (Справка → Синтакс-помощник) и контекстную подсказку клавишами Ctrl + Пробел прямо в редакторе — она подставит имена методов и свойств.
Обработчики событий: не пишите процедуру вручную
Чаще всего код в 1С вводят не в чистом виде, а как реакцию на событие: запись документа, открытие формы, нажатие кнопки. Для таких случаев есть правильный приём, который экономит от ошибок в сигнатуре процедуры.
Откройте палитру свойств нужного объекта или элемента формы и найдите раздел «События». Рядом с подходящим событием (например, ПередЗаписью, ПриОткрытии, ОбработкаПроведения) нажмите кнопку с лупой. Платформа сама создаст процедуру с верным именем, нужными параметрами и директивой компиляции и перенесёт вас в модуль — останется дописать логику внутри.
Так вы не ошибётесь в наборе параметров события и не поставите обработчик не в тот модуль: для проверок при записи документа это модуль объекта, для реакции элементов формы — модуль формы.
Клиент и сервер: где выполнится ваш код
Главная причина ошибок у новичков — непонимание, что в управляемом приложении код исполняется на двух сторонах. Над каждой процедурой в модуле формы ставится директива компиляции:
&НаКлиенте— код работает в приложении пользователя: диалоги, вопросы, реакция на нажатия.&НаСервере— код работает на сервере: запросы к базе, чтение и запись объектов.&НаСервереБезКонтекста— то же, но без передачи данных формы на сервер и обратно. Работает быстрее, когда данные открытой формы процедуре не нужны — например, когда она лишь читает справочник по переданному параметру.
Есть ещё &НаКлиентеНаСервереБезКонтекста — для процедур, которые должны быть доступны и на клиенте, и на сервере. В общих модулях сторону исполнения задают не директивой, а флажками в свойствах модуля: Клиент (управляемое приложение), Сервер, Вызов сервера. Они определяют, откуда процедуры этого модуля можно вызывать.
Прочитать и записать данные базы можно только на сервере. Показать пользователю сообщение или открыть форму — только на клиенте. Поэтому типичная связка: клиентская процедура реагирует на кнопку и вызывает серверную, которая делает работу с базой.
&НаКлиенте
Процедура ЗаполнитьКомментарий(Команда)
ЗаполнитьКомментарийНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьКомментарийНаСервере()
Объект.Комментарий = "Проверено, замечаний нет";
КонецПроцедуры
Каждый переход с клиента на сервер — это передача данных по сети. Не вызывайте сервер в цикле по одной записи; соберите данные и обработайте их за один серверный вызов.
Если обратиться к Объект формы из клиентской процедуры напрямую, платформа выдаст ошибку: на клиенте полного контекста объекта нет. Это и есть смысл директив — они заранее говорят, где компилировать процедуру.
Внешние обработки и консоль: код без правки конфигурации
Когда менять саму конфигурацию нельзя или не хочется, код оформляют во внешнюю обработку
— отдельный файл с расширением .epf (внешний отчёт — .erf).
Создаётся обработка тоже в Конфигураторе: Файл → Новый → Внешняя обработка. Внутри у неё свои реквизиты, формы и модуль — всё как у встроенной, но хранится отдельным файлом.
Запустить готовую обработку в рабочей базе можно двумя путями:
- Разово — в режиме «Предприятие» через
Файл → Открытьвыбрать файл.epf. - На постоянной основе — подключить через
Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки. Тогда она появится у пользователей в списке и будет храниться в базе.
Отдельный класс внешних обработок — консоли: консоль запросов, консоль кода. В них пишут и сразу выполняют фрагмент на встроенном языке или текст запроса, не трогая конфигурацию. Это удобно для разовых выборок и проверки гипотез.
Как выбрать способ ввода кода под задачу:
- Разовая выборка данных, проверка идеи → консоль запросов или кода.
- Инструмент, который нужен регулярно, но без изменения базы → внешняя обработка, подключённая к базе.
- Доработка поведения типовой конфигурации с сохранением обновлений → расширение.
- Глубокая переделка, которую не выразить расширением → правка самой конфигурации со снятием с поддержки (крайний случай).
Внешние обработки из непроверенных источников запускайте только в безопасном режиме и на копии базы: чужой код выполняется с вашими правами.
Расширения конфигурации: безопасный способ дорабатывать типовую
Расширения появились в платформе 8.3.6 и стали основным инструментом доработки типовых баз. Идея проста: ваши изменения лежат отдельно и накладываются поверх типовой конфигурации, а обновления от 1С при этом продолжают устанавливаться штатно.
Как добавить код через расширение:
- Откройте
Конфигурация → Расширения конфигурациии создайте новое расширение. - Откройте его дерево (оно пустое) и заимствуйте нужный объект типовой конфигурации — например, документ или форму.
- В заимствованном объекте добавьте свой обработчик или модуль.
- Примените изменения к базе (см. следующий раздел).
Через расширение удобно добавлять свои реквизиты, формы, печатные формы и обработчики событий. Для глубокой переделки типовых алгоритмов расширения подходят хуже: там, где нужно переписать заимствованный метод целиком, граница возможностей расширения заканчивается, и приходится возвращаться к правке самой конфигурации.
Расширение можно сохранить в файл .cfe и перенести в другую базу. Важно: загрузка файла .cfe и обновление конфигурации
базы данных — это два разных шага, второй обязателен, иначе код не заработает.
Типичные ошибки при вводе кода и как их ловить
Перед запуском проверьте модуль синтаксическим контролем — кнопка на панели или Ctrl + F7. Он найдёт опечатки и необъявленные переменные, не запуская саму базу.
Для разбора поведения в работе служит отладчик: запуск в режиме отладки (F5), точка останова (F9), пошаговое выполнение и окно «Табло» для просмотра значений переменных. Поставьте точку останова на нужной строке, запустите «Предприятие» в отладке и дойдите до неё — платформа остановится, и вы увидите состояние данных.
Когда отладчик разворачивать не хочется, помогает вывод промежуточных значений прямо из кода — вставьте временную строку с Сообщить(СтрокаЗначения) и посмотрите результат в окне сообщений. Это грубый, но быстрый способ понять, доходит ли выполнение до нужного места и что лежит в переменной. Главное — убрать такие строки перед тем, как сохранять код в рабочую базу.
Самые частые проблемы при вводе кода:
Как сохранить код и применить изменения в базе
Сохранение в 1С — это два разных действия, и их часто путают.
Сохранить модуль (Ctrl + S) — записывает текст в конфигурацию. Но в рабочей базе код при этом ещё не действует: вы изменили «чертёж», а не само здание.
Обновить конфигурацию базы данных (F7) — переносит изменения из конфигурации в рабочую базу. Только после этого код начинает исполняться.
Как это проходит на практике:
- Если вы меняли только код (добавили процедуру, обработчик), обновление чаще проходит динамически, без завершения сеансов — пользователи продолжают работать.
- Если менялась структура (новый реквизит, изменение типа, новый объект), платформа потребует монопольный доступ: всех пользователей нужно вывести из базы.
Прежде чем требовать монопольный доступ в рабочей базе, предупредите пользователей и дождитесь, пока они завершат сеансы и сохранят документы. Иначе их незавершённая работа прервётся. Делайте это в технологическое окно, а перед структурными изменениями снимите резервную копию.
Для расширений порядок тот же: сохранили — обновили конфигурацию базы данных. Проверять итог лучше на копии базы, а уже потом повторять в рабочей.
Частые вопросы
Можно ли писать код в режиме «Предприятие» или только в Конфигураторе?
Нужно ли выгонять пользователей, чтобы добавить код?
Чем 1С:EDT отличается от Конфигуратора для ввода кода?
Как быстро найти, в каком модуле лежит нужная процедура?
Правка Конфигуратора: он найдёт и объявление процедуры, и все места, откуда её вызывают, по всей конфигурации.