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

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

Как поставить код в 1С: где писать и как проверить результат

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

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

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

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

Где вообще живёт код в 1С: карта модулей

Прежде чем что-то «ставить», определите, к какому событию должен привязываться код. Если логика должна срабатывать при записи документа — это модуль объекта документа, обработчик «ПередЗаписью» или «ПриЗаписи». Если нужно реагировать на действия пользователя в форме — модуль формы. Если код используется в нескольких местах — общий модуль.

Основные места размещения кода:

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

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

Подготовка: доступ к конфигуратору и резервная копия

Для работы с кодом нужен запуск базы в режиме «Конфигуратор» и права на изменение конфигурации (роль «Администратор» или полные права). В файловых базах достаточно открыть конфигуратор, в клиент-серверных убедитесь, что у вас есть доступ к серверу 1С и СУБД.

Перед любыми изменениями сделайте резервную копию. Для файловой базы — это выгрузка через «Администрирование → Выгрузить информационную базу» в файл .dt. Для клиент-серверной — штатный бэкап средствами СУБД. Изменение кода может привести к ошибкам, которые проявятся только у пользователей, и откат без копии будет болезненным.

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

Сценарий 1: добавить код в модуль объекта или формы

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

Порядок действий
  1. 1
    Откройте конфигуратор и найдите нужный объект в дереве конфигурации (например, Документы → РеализацияТоваров).
  2. 2
    Правый клик по объекту → «Открыть модуль объекта» или откройте форму и перейдите на вкладку «Модуль».
  3. 3
    Добавьте свою процедуру или функцию, либо впишите код в существующий обработчик события.
  4. 4
    Проверьте синтаксис: кнопка «Проверка синтаксиса» (Ctrl+F7) или «Конфигурация → Проверка конфигурации».
  5. 5
    Обновите конфигурацию базы данных (F7) и протестируйте в режиме «Предприятие».

Пример простого кода в модуле объекта документа — автоматическая проверка заполнения табличной части перед записью:

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

Если Товары.Количество() = 0 Тогда

Сообщить("Документ без товаров не может быть записан.");

Отказ = Истина;

КонецЕсли;

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

Обратите внимание на параметр «Отказ»: установка его в «Истина» отменяет стандартное действие (в данном случае запись). Это типовой механизм перехвата событий в 1С, и забыть про него — одна из самых частых ошибок.

Код в модуле формы

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

&НаКлиенте

Процедура КомандаПроверить(Команда)

ПроверитьНаСервере();

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

&НаСервере

Процедура ПроверитьНаСервере()

// запрос к данным базы

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

Сценарий 2: общий модуль для переиспользуемого кода

Если одна и та же функция нужна в нескольких объектах, не копируйте её — создайте общий модуль. В дереве конфигурации: «Общие → Общие модули → Добавить». Задайте имя, например «РаботаСДокументами», и напишите экспортные процедуры:

Функция ПолучитьСуммуДокумента(ДокументСсылка) Экспорт

Возврат ДокументСсылка.Товары.Итог("Сумма");

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

Слово «Экспорт» делает процедуру видимой извне. После этого функцию можно вызывать из любого модуля: РаботаСДокументами.ПолучитьСуммуДокумента(Ссылка).

Для серверной логики в управляемых формах обычно ставят флаги «Сервер» и «Вызов сервера» — тогда модуль можно вызывать из клиентского кода формы, и платформа сама организует серверный вызов.

Сценарий 3: расширение конфигурации — безопасный способ для типовых баз

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

Порядок создания: «Конфигурация → Расширения конфигурации → Создать». Задайте имя и префикс (он добавится к именам ваших объектов, чтобы не было конфликтов). Затем в дереве расширения добавьте нужный объект «в расширение» — например, форму документа — и напишите код в заимствованном модуле.

В расширении доступны специальные аннотации для перехвата типовых обработчиков:

&После("ПередЗаписью")

Процедура Расш_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

// ваш код выполнится после типового обработчика

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

Аннотации «&Перед», «&После» и «&Вместо» определяют, когда сработает ваш код относительно типового. «&Вместо» полностью подменяет типовую процедуру — используйте её осторожно, потому что при обновлении типовой обработчик может измениться, а ваш код продолжит работать со старой логикой.

Способы добавить код

Прямая правка конфигурации

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

Расширение конфигурации

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

Внешняя обработка

Подходит для разовых операций: загрузка данных, групповые изменения, тестирование. Не может перехватывать события объектов.

Сценарий 4: внешняя обработка с готовым кодом

Если вам передали готовый файл .epf (внешняя обработка) или .erf (внешний отчёт), «поставить код» означает просто открыть его. В режиме «Предприятие»: «Файл → Открыть» и выбрать файл. Обработка запустится сразу, без изменения конфигурации.

Для постоянного использования обработку регистрируют в справочнике «Дополнительные отчеты и обработки» (в типовых конфигурациях: «Администрирование → Печатные формы, отчеты и обработки»). Там же настраивается, в каких разделах она будет видна пользователям.

Писать собственную внешнюю обработку можно в конфигураторе: «Файл → Новый → Внешняя обработка». У неё есть модуль объекта и формы — структура кода такая же, как у встроенных объектов. Это удобный способ отладить алгоритм, не трогая основную базу.

Проверка, отладка и типичные ошибки

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

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

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

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

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

Проверка (Ctrl+F7) завершается без сообщений об ошибках

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

Ошибки компиляции: не найдена процедура, несоответствие типов

Работа в режиме «Предприятие»
Норма

Действие выполняется, код срабатывает, данные меняются как ожидалось

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

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

Обновление типовой конфигурации
Норма

Расширение применяется, типовые механизмы работают

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

Конфликты при обновлении из-за прямых правок типового кода

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

Как выбрать способ

Конфигурация типовая и обновляетсяИспользуйте расширение конфигурации
Конфигурация самописная или снята с поддержкиПравьте модули напрямую через конфигуратор
Нужна разовая операция над даннымиНапишите или откройте внешнюю обработку
Нет доступа к конфигураторуРаботайте только через внешние обработки и механизм дополнительных отчетов и обработок

Итоговый ориентир прост: чем ближе база к «боевой» и чем чаще она обновляется, тем дальше ваш код должен быть от типовых модулей. Расширения и внешние обработки — это страховка, которая стоит минимум усилий, но спасает при каждом обновлении.

Итог

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

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

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

Можно ли добавить код в 1С без конфигуратора?

Да, но с ограничениями. Через режим «Предприятие» можно открывать внешние обработки (.epf), регистрировать их в «Дополнительных отчетах и обработках» и подключать готовые расширения (.cfe) через «Администрирование → Печатные формы, отчеты и обработки → Расширения». Написать код с нуля без конфигуратора нельзя.

Почему мой код не выполняется, хотя ошибок нет?

Чаще всего конфигурация базы данных не обновлена после изменений (нужно нажать F7 в конфигураторе). Также проверьте, что код находится в правильном обработчике события и что директива контекста (&НаКлиенте/&НаСервере) соответствует тому, откуда он вызывается.

Что лучше: расширение или доработка конфигурации?

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

Как добавить кнопку с кодом на форму документа?

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

Опасно ли открывать внешние обработки из непроверенных источников?

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

Как откатить изменения, если код сломал работу базы?

Если была выгрузка .dt — загрузите её через «Администрирование → Загрузить информационную базу». Если правки делались в расширении — просто отключите или удалите расширение, типовая конфигурация останется нетронутой. Поэтому расширения и считаются самым безопасным способом доработок.