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