Разработка и Конфигурация · 13 мин
1С: куда писать код — полный разбор мест разработки
Разбираем, куда писать код в 1С: модули объектов, форм, общие модули, внешние обработки и расширения. Порядок действий, типичные ошибки и проверка результата.
Вопрос «куда писать код в 1С» возникает у каждого, кто впервые открывает конфигуратор: платформа предлагает десятки мест для размещения встроенного кода, и выбор неправильного места приводит к тому, что процедура не вызывается, обработчик не срабатывает, а доработку невозможно обновить. Встроенный язык 1С один и тот же везде, но контекст исполнения — клиент, сервер, объект, форма — определяет, какие данные и функции доступны в конкретной точке.
Практически весь код в 1С пишется в конфигураторе — отдельном режиме запуска, который открывается через ярлык «1С:Предприятие» с выбором режима «Конфигуратор» или через команду запуска с параметром DESIGNER. Внутри конфигуратора код размещается в модулях: модулях объектов, форм, общих модулях, модуле приложения, модуле сеанса и других. Дополнительно существуют внешние обработки и расширения конфигурации — способы добавить код без изменения основной конфигурации.
Ниже разобрано, какие виды модулей существуют, в каких ситуациях какой выбирать, как открыть модуль и проверить, что код работает, а также какие ошибки чаще всего мешают новичкам.
Где физически пишется код: конфигуратор и редактор модулей
Единственная штатная среда для написания кода встроенного языка — конфигуратор 1С. Чтобы попасть в него, в окне запуска выберите информационную базу и нажмите «Конфигуратор» вместо «1С:Предприятие». Для файловой базы достаточно прав на запуск; для серверной потребуется учётная запись с правами администратора или разработчика.
После входа откройте дерево конфигурации через меню «Конфигурация» → «Открыть конфигурацию». Если пункт неактивен, конфигурация уже открыта. В дереве объектов каждый элемент — справочник, документ, отчёт — содержит свои модули. Двойной клик по объекту открывает окно редактирования, а переход к коду выполняется через правый клик → «Открыть модуль объекта» или через вкладки в окне объекта.
Редактор модулей поддерживает подсветку синтаксиса, контекстную подсказку (Ctrl+Пробел), переход к определению процедуры (F12) и синтаксическую проверку. Код сохраняется только после обновления конфигурации базы данных (клавиша F7) — до этого момента изменения существуют лишь в памяти конфигуратора и в режиме предприятия не видны.
Модуль объекта и модуль менеджера: логика данных
Модуль объекта — основное место для кода, который описывает поведение прикладного объекта: документа, справочника, плана счетов. Здесь размещают обработчики событий ПриЗаписи, ОбработкаПроведения, ПередЗаписью, ПриКопировании и другие. Код модуля объекта исполняется на сервере и имеет прямой доступ к реквизитам объекта через контекст — можно писать ЭтотОбъект.Сумма или просто имя реквизита.
Типичный сценарий: при проведении документа «Реализация» нужно проверить остатки и сформировать движения по регистрам. Такой код пишется именно в обработчике ОбработкаПроведения модуля объекта документа, потому что только там платформа предоставляет коллекцию движений и механизм отказа от проведения.
Модуль менеджера объекта используется для операций, которые не привязаны к конкретному экземпляру: получение печатной формы, создание нового объекта с предустановленными значениями, обработка получения данных выбора. Например, процедуру формирования печатной формы счёта правильно размещать в модуле менеджера документа, а не в модуле формы.
Как открыть модуль объекта
В дереве конфигурации найдите нужный объект (например, «Документы» → «РеализацияТоваровУслуг»), щёлкните правой кнопкой и выберите «Открыть модуль объекта». Если пунктов несколько, убедитесь, что не перепутали модуль объекта с модулем формы или модулем менеджера — это частая причина «неработающего» кода.
Модуль формы: интерфейсная логика
Модуль формы содержит код, связанный с отображением: обработчики нажатий кнопок, изменения полей, события ПриОткрытии, ПриСозданииНаСервере, команды формы. Открывается он из редактора формы: правый клик по объекту → «Формы» → открыть нужную форму → вкладка «Модуль» внизу окна.
Ключевая особенность модуля формы — директивы компиляции. Каждая процедура помечается директивой &НаКлиенте, &НаСервере, &НаСервереБезКонтекста или &НаКлиентеНаСервереБезКонтекста. Клиентский код не имеет доступа к запросам и прямой работе с базой; серверные вызовы из клиента выполняются через процедуры с директивой &НаСервере.
Практическое правило: всё, что требует запросов к базе, чтения или записи данных, выносите в серверные процедуры, а на клиенте оставляйте только реакцию на действия пользователя и вызов сервера. Смешивание логики приводит либо к ошибкам компиляции, либо к лишним серверным вызовам, замедляющим форму.
&НаКлиенте
Процедура КнопкаРассчитать(Команда)
Сумма = РассчитатьСуммуНаСервере(Объект.Ссылка);
ПоказатьОповещениеПользователя("Сумма: " + Сумма);
КонецПроцедуры
&НаСервереБезКонтекста
Функция РассчитатьСуммуНаСервере(Ссылка)
Запрос = Новый Запрос("ВЫБРАТЬ СУММА(Т.Сумма) КАК Итог ИЗ Документ.Заказ.Товары КАК Т ГДЕ Т.Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Возврат ?(Выборка.Следующий(), Выборка.Итог, 0);
КонецФункцииОбщие модули: переиспользуемый код
Общие модули находятся в ветке «Общие» → «Общие модули» дерева конфигурации. Это библиотеки процедур и функций, доступные из любого места конфигурации. Вызов выполняется по имени модуля: ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Организация").
Свойства общего модуля определяют, где он исполняется. Флаг «Сервер» означает выполнение на сервере, «Клиент (управляемое приложение)» — на клиенте, «Вызов сервера» разрешает обращаться к серверному модулю из клиентского кода. Чтобы процедура была видна снаружи, в её объявлении должно стоять ключевое слово Экспорт.
Размещайте в общих модулях функции, которые нужны более чем в одном объекте: расчёт налогов, работа со строками, обмен данными, проверка прав. Дублирование одного и того же кода в модулях нескольких объектов — типичный признак того, что пора выделить общий модуль.
Модуль приложения, сеанса и внешнего соединения
Модуль приложения (в старых версиях — модуль управляемого приложения) открывается из корня дерева конфигурации: правый клик по самому верхнему элементу с названием конфигурации → «Открыть модуль управляемого приложения». Здесь размещают обработчики ПриНачалеРаботыСистемы, ПередЗавершениемРаботыСистемы, глобальные обработчики ожидания и оповещений.
Модуль сеанса содержит единственный обязательный обработчик — УстановкаПараметровСеанса. Он выполняется при каждом старте сеанса, поэтому тяжёлый код здесь напрямую замедляет вход всех пользователей. Правильный подход — инициализировать параметры лениво, только те, что реально запрошены.
Модуль внешнего соединения используется редко: он работает, когда к базе подключаются через COM-соединение извне. Если вы не строите интеграцию через COM, этот модуль можно не трогать.
Внешние обработки и расширения: код без изменения конфигурации
Внешняя обработка — файл с расширением .epf, который создаётся через «Файл» → «Новый» → «Внешняя обработка». Код пишется в модуле объекта и модулях форм обработки точно так же, как в конфигурации. Готовую обработку открывают в режиме предприятия через «Файл» → «Открыть» или подключают к справочнику «Дополнительные отчеты и обработки» в типовых конфигурациях.
Расширение конфигурации — механизм доработки без снятия с поддержки. Создаётся через «Конфигурация» → «Расширения конфигурации» → «Создать». В расширение заимствуются объекты и модули основной конфигурации, а код пишется в аннотациях &Перед, &После и &Вместо относительно типовых процедур. Это предпочтительный способ доработки типовых решений, которые регулярно обновляются.
Сравнение вариантов размещения кода
Полная свобода доработки, но усложняет обновление типовых решений; подходит для собственных конфигураций
Сохраняет поддержку и простое обновление; ограничения — нельзя менять некоторые объекты, роли и схемы данных
Не трогает конфигурацию вообще; подходит для разовых операций, печатных форм и сервисных утилит, но не для постоянной логики проведения
Порядок действий: от задачи до работающего кода
Алгоритм выбора места для кода сводится к простой цепочке вопросов. Сначала определите, к чему относится логика: к данным конкретного объекта, к интерфейсу, к запуску системы или это универсальная функция. Затем проверьте, можно ли менять конфигурацию, или нужно работать через расширение. После написания кода обязательно выполните синтаксическую проверку и обновление конфигурации базы данных.
- 1Сделайте резервную копию базы (выгрузку .dt) перед любыми доработками
- 2Определите тип логики: данные — модуль объекта, интерфейс — модуль формы, общая функция — общий модуль
- 3Проверьте, на поддержке ли конфигурация; если да — используйте расширение
- 4Откройте нужный модуль и напишите код с учётом контекста (клиент/сервер)
- 5Выполните синтаксическую проверку модуля (Ctrl+F7 или кнопка на панели)
- 6Обновите конфигурацию базы данных клавишей F7
- 7Протестируйте в режиме предприятия на копии документа, а не на боевых данных
Как проверить результат
Ошибок нет, предупреждения осмысленны
Сообщения о необъявленных переменных или недоступных методах — код не выполнится
Обработчик срабатывает, результат соответствует ожиданию
Код молча не выполняется — вероятно, он написан не в том модуле или директива компиляции не та
F7 проходит без ошибок, изменения видны пользователям
Ошибка реструктуризации — откатитесь на копию и разберитесь с изменением данных
Типичные ошибки новичков
Большинство проблем «код не работает» связаны не с самим кодом, а с местом его размещения и контекстом исполнения. Платформа не всегда сообщает об ошибке явно — обработчик просто не вызывается, и это сбивает с толку.
Как выбрать место для кода
Что важно запомнить
Код в 1С пишется в конфигураторе внутри модулей, и выбор модуля определяется контекстом: данные — модуль объекта, интерфейс — модуль формы, общая логика — общие модули. Для типовых конфигураций предпочтительны расширения, для разовых задач — внешние обработки. После написания кода обязательны синтаксическая проверка, обновление конфигурации БД и тестирование на копии.
Частые вопросы
Можно ли писать код 1С в стороннем редакторе, например VS Code?
Формально код модулей можно выгрузить в файлы и редактировать во внешнем редакторе, а для этого существуют инструменты выгрузки конфигурации в исходники. Однако штатный цикл разработки — написание и отладка в конфигураторе: только он обеспечивает проверку синтаксиса с учётом метаданных, отладку с точками останова и обновление базы. Внешние редакторы используют как дополнение, а не замену.
Почему мой обработчик не вызывается, хотя код написан правильно?
Чаще всего причина в неправильном месте размещения: обработчик записан в модуль формы вместо модуля объекта или наоборот. Вторая причина — не выполнено обновление конфигурации базы данных (F7), и в режиме предприятия работает старая версия. Третья — для события подписки на событие не указан источник или обработчик в свойствах.
Чем расширение лучше прямого изменения конфигурации?
Расширение хранит доработки отдельно от основной конфигурации, поэтому типовое обновление устанавливается штатно, а ваши изменения остаются. При прямом изменении каждое обновление требует сравнения и объединения модулей вручную, а при полной поддержке конфигурацию вообще нельзя редактировать без снятия с поддержки.
Где писать код для печатной формы документа?
Если конфигурация использует механизм дополнительных отчётов и обработок — создайте внешнюю печатную форму (.epf) и подключите её в соответствующем справочнике. Если дорабатывается собственная конфигурация, процедуру формирования табличного документа размещают в модуле менеджера документа, а команду печати — в модуле формы или в общем модуле печати.
Что делает директива &НаСервереБезКонтекста и когда её применять?
Эта директива означает, что процедура выполняется на сервере и не имеет доступа к данным формы (реквизитам формы, объекту формы). Её применяют для функций, которым достаточно переданных параметров — например, запрос к базе по ссылке. Такие процедуры работают быстрее, потому что не требуют сериализации всей формы при серверном вызове.
Можно ли отладить код без остановки работы пользователей?
В файловой базе отладка обычно безопасна, но точки останова остановят сеанс отлаживаемого пользователя. В серверной базе отладка настраивается на сервере 1С и позволяет отлаживать конкретный сеанс, не мешая остальным. В любом случае доработку и первичную проверку лучше выполнять на копии базы, а в рабочую переносить уже протестированный код.