Разработка и Конфигурация · 11 мин
Как добавить код в 1С: практическое руководство
Как добавить код в 1С: где пишут программный код, как открыть модуль, создать процедуру, обработчик события и проверить результат без ошибок.
Добавить код в 1С можно несколькими способами: через конфигуратор в модулях объектов, через внешние обработки, через механизм расширений или прямо в пользовательском режиме в справочнике дополнительных отчетов и обработок. Выбор зависит от задачи: разовый расчет удобнее выполнить внешней обработкой, а постоянное изменение логики — через расширение конфигурации, не трогая типовой код.
Весь программный код в 1С пишется на встроенном языке, синтаксис которого напоминает русскоязычный паскаль. Код размещается не в отдельных файлах, а в модулях — специальных контейнерах, привязанных к объектам конфигурации: справочникам, документам, формам, отчетам. Понимание того, какой модуль за что отвечает, — ключ к правильному размещению кода.
Прежде чем что-либо менять, сделайте резервную копию информационной базы. Ошибка в коде общего модуля может остановить работу всех пользователей, а восстановление без копии займет часы. Для файловой базы достаточно скопировать файл 1Cv8.1CD, для серверной — использовать выгрузку в dt через конфигуратор или средства СУБД.
Где в 1С хранится код: виды модулей
Конфигурация 1С состоит из объектов, и почти у каждого есть один или несколько модулей. Модуль объекта содержит код, который работает с данными объекта на сервере: проведение документа, заполнение реквизитов, проверки перед записью. Модуль формы отвечает за поведение интерфейса: реакцию на нажатие кнопок, изменение полей, видимость элементов.
Общие модули хранят процедуры и функции, доступные из любого места конфигурации. Модуль приложения и модуль сеанса выполняются при старте системы. Модуль менеджера объекта содержит серверные операции, не требующие открытия конкретного объекта, — например, печатные формы и обработчики заполнения.
Ошибка размещения кода — частая причина проблем. Если написать серверную логику в клиентском обработчике формы без вызова сервера, код либо не выполнится, либо выдаст ошибку о недоступности метода в данном контексте. Поэтому сначала определите, где должен работать код: на клиенте, на сервере или в обоих контекстах.
Как открыть конфигуратор и найти нужный объект
Конфигуратор — это среда разработки 1С. Запустите ярлык 1С:Предприятие, выберите базу в списке и нажмите кнопку «Конфигуратор». После входа откройте дерево конфигурации через меню «Конфигурация — Открыть конфигурацию». Если конфигурация закрыта, дерево объектов не отобразится.
В дереве найдите нужный объект: ветка «Документы» для документов, «Справочники» для справочников, «Общие — Общие модули» для общего кода. Двойной щелчок по объекту открывает его палитру свойств. Чтобы попасть в модуль, щелкните правой кнопкой по объекту и выберите нужный пункт: «Открыть модуль объекта», «Открыть модуль менеджера» или перейдите на форму и откройте её модуль.
- 1Запустите конфигуратор и войдите в базу под пользователем с правами разработчика
- 2Откройте дерево конфигурации: меню Конфигурация — Открыть конфигурацию
- 3Найдите объект, щелкните по нему правой кнопкой мыши
- 4Выберите нужный модуль: объекта, менеджера или откройте форму и её модуль
- 5Внесите код и нажмите F7 для проверки синтаксиса
Если конфигурация типовая и находится на поддержке, при попытке редактирования система предложит включить возможность изменения. Соглашайтесь осознанно: снятие объектов с поддержки усложнит будущие обновления. Альтернатива — расширение, о котором ниже.
Добавление процедуры или функции в модуль
Минимальная единица кода — процедура или функция. Процедура выполняет действия, функция дополнительно возвращает значение через оператор «Возврат». Каждая объявляется с ключевого слова и заканчивается словами «КонецПроцедуры» или «КонецФункции».
Процедура РассчитатьСкидку(СуммаДокумента) Экспорт
Если СуммаДокумента > 100000 Тогда
Скидка = СуммаДокумента * 0.05;
Иначе
Скидка = 0;
КонецЕсли;
Возврат;
КонецПроцедурыКлючевое слово «Экспорт» делает процедуру видимой из других модулей. Без него процедура доступна только внутри своего модуля. В общих модулях экспортные процедуры вызываются через имя модуля: ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Наименование").
После написания кода нажмите F7 или выберите «Конфигурация — Проверка конфигурации» для синтаксического контроля. Ошибки подсвечиваются в окне сообщений с указанием строки. Только после успешной проверки обновляйте конфигурацию базы данных клавишей F7 в меню «Конфигурация — Обновить конфигурацию базы данных» — без этого код не заработает в пользовательском режиме.
Обработчики событий: как привязать код к действиям
Чаще всего код добавляют не как отдельную процедуру, а как обработчик события — реакцию на действие пользователя или системы. У формы есть события «ПриОткрытии», «ПриИзменении» поля, «ПриНажатии» кнопки. У объекта — «ПередЗаписью», «ПриЗаписи», «ОбработкаПроведения».
Быстрый способ создать обработчик — через палитру свойств. Откройте форму, выделите элемент (например, кнопку), в палитре свойств найдите раздел «События» и нажмите кнопку с лупой напротив нужного события. Конфигуратор сам создаст заготовку процедуры в модуле формы с правильными параметрами.
&НаКлиенте
Процедура КнопкаРассчитатьНажатие(Элемент)
СуммаИтог = Объект.Товары.Итог("Сумма");
Объект.Скидка = СуммаИтог * 0.05;
КонецПроцедурыДирективы &НаКлиенте и &НаСервере определяют контекст выполнения. Работа с базой данных (запросы, запись объектов) возможна только на сервере. Если из клиентской процедуры нужны данные, создайте серверную процедуру без директивы «&НаСервереБезКонтекста» с вызовом из клиентской.
Внешние обработки: код без изменения конфигурации
Если задача разовая — массово изменить реквизиты, загрузить данные из Excel, проверить корректность учета — менять конфигурацию не обязательно. Создайте внешнюю обработку: в конфигураторе выберите «Файл — Новый — Внешняя обработка», добавьте форму и напишите код в её модуле.
Готовая обработка сохраняется как файл с расширением .epf и запускается в режиме 1С:Предприятие через «Файл — Открыть». В типовых конфигурациях внешние обработки подключаются через раздел «Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки», если эта функциональность включена.
Способы добавить код
Подходит для постоянной логики в собственной или снятой с поддержки базе. Минус: усложняет обновление типовых решений.
Оптимально для доработки типовой конфигурации: код хранится отдельно, обновления не ломаются. Ограничение: не все объекты и методы можно переопределить.
Лучший вариант для разовых задач и тестирования. Не требует прав на изменение конфигурации, но не может реагировать на события системы автоматически.
Расширения конфигурации: безопасная доработка типовых решений
Расширение — это надстройка над конфигурацией, которая позволяет добавлять свои объекты и переопределять типовые процедуры без изменения самой конфигурации. Создается через «Конфигурация — Расширения конфигурации — Создать». Далее заимствуйте нужный объект или форму и добавьте свой код с аннотациями «&ИзменениеИКонтроль», «&Вместо» или «&После».
Аннотация «&После» добавляет код после выполнения типовой процедуры, «&Вместо» полностью заменяет её, «&ИзменениеИКонтроль» позволяет встроиться внутрь с вызовом оригинала. Для устойчивости к обновлениям предпочтительнее «&После» и «&Перед»: при «&Вместо» любое изменение типового кода вендором останется незамеченным вашей доработкой.
Проверка и отладка добавленного кода
Отладчик запускается из конфигуратора: «Отладка — Начать отладку» или клавиша F5. Поставьте точку останова кликом по полю слева от строки кода — выполнение остановится, и вы увидите значения переменных в табло (Shift+F9) и сможете шагать по коду клавишами F10 и F11.
Для проверки результата без отладчика используйте «Сообщить()» — вывод в окно сообщений, или запись в журнал регистрации через «ЗаписьЖурналаРегистрации». В серверном коде «Сообщить» тоже работает, сообщения дойдут до клиента после завершения вызова.
Как проверить результат
Проверка F7 завершается без ошибок
В окне сообщений есть строки с указанием ошибок
Конфигурация базы данных обновлена, доработка видна в режиме Предприятие
Код написан, но в пользовательском режиме не выполняется
Действие пользователя вызывает код, результат соответствует ожиданию
Ничего не происходит или возникает ошибка выполнения
Смежные операции (запись, проведение, печать) работают как раньше
После доработки сломались соседние механизмы
Типичные ошибки при добавлении кода
Новички часто пишут код в неправильном контексте: пытаются выполнить запрос в клиентской процедуре формы или обратиться к элементу формы из модуля объекта, где формы просто не существует. Вторая группа ошибок — забытое обновление конфигурации базы данных: код есть, проверка проходит, но в режиме Предприятие работает старая версия.
Ещё одна ловушка — права доступа. Пользователь без роли «Администратор системы» или без права «Толстый клиент»/«Конфигуратор» просто не сможет открыть конфигуратор, а внешняя обработка может не запуститься из-за профиля безопасности. Проверяйте права до начала работы, а не после появления ошибок.
Что важно запомнить
Код в 1С размещается в модулях объектов, форм и общих модулях через конфигуратор. Для типовых конфигураций используйте расширения, для разовых задач — внешние обработки. Перед изменениями делайте копию базы, после написания кода проверяйте синтаксис и обновляйте конфигурацию базы данных, а результат тестируйте на копии.
Частые вопросы
Можно ли добавить код в 1С без конфигуратора?
Да, частично. Внешние обработки (.epf) и дополнительные отчеты подключаются прямо из режима 1С:Предприятие через раздел дополнительных отчетов и обработок. Также в некоторых конфигурациях есть встроенные механизмы пользовательских алгоритмов. Но полноценная разработка модулей объектов возможна только в конфигураторе.
Что делать, если после добавления кода документы не проводятся?
Откройте конфигуратор и посмотрите текст ошибки в окне сообщений — там указаны модуль и строка. Если ошибку быстро найти не удается, закомментируйте добавленный код символами // и обновите конфигурацию базы данных, чтобы восстановить работу. Затем исправляйте код на копии базы через отладчик.
Чем расширение лучше прямого изменения конфигурации?
Расширение хранит доработки отдельно от типового кода, поэтому обновления конфигурации поставщиком не затирают ваши изменения. Прямая правка снимает объекты с поддержки, и каждое обновление превращается в ручное сравнение и перенос доработок.
Почему процедура не видна из другого модуля?
Скорее всего, в объявлении процедуры отсутствует ключевое слово «Экспорт». Без него процедура доступна только внутри своего модуля. Также проверьте, что общий модуль имеет подходящие флаги контекста: например, модуль только с флагом «Сервер» нельзя вызвать из клиентской процедуры без серверного вызова.
Как безопасно протестировать код перед запуском в рабочей базе?
Создайте копию базы: для файловой — скопируйте каталог, для серверной — выгрузите dt и загрузите в новую базу. Выполните доработку и тестирование на копии, включая отладку реальных сценариев пользователей. Только после успешной проверки переносите изменения в рабочую базу, предварительно сделав её резервную копию.
Можно ли писать код на английском синтаксисе?
Да, встроенный язык 1С поддерживает оба варианта: можно писать «Procedure... EndProcedure» вместо «Процедура... КонецПроцедуры» и даже смешивать синтаксис в одном модуле. На практике в российских конфигурациях используется русский вариант, и смешение стилей затрудняет чтение кода.