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

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

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

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

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

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

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

Где пишется код: Конфигуратор и типы модулей

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

Код размещается в модулях, и понимание их типов — фундамент всей разработки. У каждого объекта может быть несколько модулей, у каждого — своё назначение и контекст исполнения: на сервере, на клиенте или в обоих местах.

Модуль объектаСобытия самого объекта

ОбработкаПроведения, ПередЗаписью, ПриЗаписи — исполняется на сервере

Модуль формыЛогика интерфейса

ПриОткрытии, обработчики кнопок; делится на клиентские и серверные процедуры

Общий модульПереиспользуемый код

Процедуры и функции, доступные из любого места конфигурации

Модуль менеджераРабота с коллекцией объектов

Например, создание печатных форм и обработка данных справочника в целом

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

Первый код: синтаксис встроенного языка

Базовая единица кода — процедура или функция. Функция возвращает значение через оператор «Возврат», процедура — нет. Переменные объявляются неявно при первом присваивании, типизация динамическая: одна и та же переменная может хранить число, строку или ссылку на объект.

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

&НаКлиенте

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

ИмяПользователя = "Иван";

Сообщить("Добрый день, " + ИмяПользователя + "!");

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

Пример функции с условием и возвратом значения, размещённой в общем модуле:

Функция РассчитатьСкидку(СуммаПокупки) Экспорт

Если СуммаПокупки >= 10000 Тогда

Возврат СуммаПокупки * 0.1;

ИначеЕсли СуммаПокупки >= 5000 Тогда

Возврат СуммаПокупки * 0.05;

Иначе

Возврат 0;

КонецЕсли;

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

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

Безопасная практика: внешние обработки вместо изменения конфигурации

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

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

Создание первой внешней обработки
  1. 1
    Откройте Конфигуратор и создайте новый файл типа «Внешняя обработка» через меню «Файл» → «Новый»
  2. 2
    Добавьте форму обработки: правый клик по объекту → «Добавить» → «Форма»
  3. 3
    Перетащите на форму кнопку и создайте для неё обработчик команды
  4. 4
    Напишите в обработчике простой код, например вывод сообщения или расчёт
  5. 5
    Сохраните файл с расширением .epf и откройте его в режиме «1С:Предприятие»
  6. 6
    Нажмите кнопку и убедитесь, что код выполняется как ожидалось

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

Работа с данными: объектная модель и запросы

Данные в 1С читаются и изменяются двумя способами. Первый — объектная модель: вы получаете ссылку на элемент справочника или документ, открываете его объект и меняете реквизиты. Это удобно для изменения одного объекта, потому что срабатывают все проверки и обработчики записи.

КонтрагентОбъект = СсылкаНаКонтрагента.ПолучитьОбъект();

КонтрагентОбъект.Комментарий = "Проверен";

КонтрагентОбъект.Записать();

Второй способ — язык запросов, похожий на SQL. Запросы незаменимы, когда нужно выбрать много записей, посчитать итоги или соединить данные нескольких таблиц. Для чтения больших объёмов запрос всегда быстрее перебора объектов в цикле.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка КАК Товар,

| Номенклатура.Наименование

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| НЕ Номенклатура.ПометкаУдаления";

Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() Цикл

Сообщить(Результат.Наименование);

КонецЦикла;

Текст запроса удобно собирать через конструктор запроса: правый клик в модуле → «Конструктор запроса». Он позволяет выбрать таблицы и поля мышкой, а платформа сама сформирует текст. Для учебных целей это лучший способ освоить синтаксис.

Объектная модель или запрос

Запрос

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

Объектная модель

Подходит для изменения отдельных объектов с вызовом всех проверок и обработчиков. Ограничение: медленно при массовой обработке

Запрос + обход объектов

Комбинированный вариант: запросом выбираются ссылки, затем каждый объект изменяется через ПолучитьОбъект(). Оптимально для массовых изменений

Отладка: как найти ошибку в коде

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

Когда выполнение остановлено, вы можете смотреть значения переменных: наведите курсор на переменную или добавьте её в табло («Отладка» → «Вычислить выражение», горячие клавиши Shift+F9). Движение по коду управляется стандартными командами: шаг через процедуру (F8), шаг с заходом внутрь (F11), продолжить выполнение (F5).

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

Как проверить, что код работает правильно

Результат выполнения
Норма

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

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

Код выполнился без ошибок, но данные не изменились — вероятно, не вызван метод Записать()

Поведение на граничных значениях
Норма

Пустые поля, нулевые суммы и отсутствующие ссылки обрабатываются без падения

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

При пустом реквизите возникает «Ошибка при вызове метода контекста»

Производительность
Норма

Обработка тысячи записей занимает секунды

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

Форма зависает — признак запросов в цикле или лишних серверных вызовов

Если конфигурация файловая, отладка работает сразу. Для клиент-серверных баз может потребоваться включить отладку на сервере — это делается в параметрах запуска службы агента сервера 1С, и обычно требует прав администратора.

Типичные ошибки начинающих и как их избежать

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

Типичные ошибки
01
Изменение реквизитов объекта без вызова метода Записать() — изменения теряются без всяких предупреждений
02
Запрос к базе внутри цикла обхода данных — время выполнения растёт в разы; выносите запрос наружу и используйте соединения таблиц
03
Обращение к серверным данным из клиентской процедуры формы — ошибка компиляции или лавина серверных вызовов
04
Изменение типовых модулей вместо использования расширений — конфигурация снимается с поддержки, обновления становятся ручными
05
Отсутствие проверки на пустую ссылку перед ПолучитьОбъект() — падение кода на незаполненных данных
06
Тестирование нового кода сразу на рабочей базе — риск испортить реальные учётные данные

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

Как развивать навык дальше

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

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

Маршрут решения

Что изучать в зависимости от задачи

Нужно автоматически заполнять или проверять документыИзучите события модуля объекта: ПередЗаписью, ОбработкаЗаполнения, ОбработкаПроверкиЗаполнения
Нужен нестандартный отчёт по учётным даннымОсвойте язык запросов и СКД — большинство отчётов делается без программного вывода
Нужно изменить поведение типовой формыИспользуйте расширение конфигурации с аннотациями &ИзменениеИКонтроль или &После
Нужна интеграция с внешними системамиИзучите HTTP-соединения, работу с JSON и механизм веб-сервисов платформы

Держите под рукой синтакс-помощник — встроенную справку по языку, которая открывается из Конфигуратора по Ctrl+F1 или через меню «Справка». В нём описаны все методы платформы с примерами. Умение быстро находить нужный метод в синтакс-помощнике экономит больше времени, чем заучивание языка наизусть.

Итог

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

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

Частые вопросы о написании кода в 1С

Нужно ли знать другой язык программирования, чтобы начать писать в 1С?

Нет, встроенный язык 1С вполне подходит как первый язык: у него простой синтаксис, русские ключевые слова и снисходительная динамическая типизация. Знание любого другого языка ускорит обучение, потому что базовые концепции — переменные, условия, циклы, функции — везде одинаковы, но обязательным это не является.

Можно ли писать код в 1С на английском языке?

Да, платформа поддерживает английский вариант синтаксиса: If вместо Если, Procedure вместо Процедура и так далее. Однако в российской практике и во всех типовых конфигурациях используется русский синтаксис, поэтому для работы с чужим кодом и примерами из документации русский вариант знать всё равно придётся.

Чем расширение конфигурации лучше прямого изменения модулей?

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

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

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

Как научиться писать запросы, если я не знаю SQL?

Начните с конструктора запроса: он строит текст запроса визуально, а вы постепенно запоминаете синтаксис, глядя на результат. Язык запросов 1С проще SQL — в нём нет команд изменения данных, а обращение к полям идёт через понятные имена объектов конфигурации. После освоения выборок с условиями переходите к соединениям таблиц и группировкам с итогами.

Где безопасно практиковаться, если нет отдельной учебной базы?

Установите учебную версию платформы или создайте пустую файловую базу на своём компьютере — для этого не нужны лицензии на конфигурацию. Альтернатива — копия рабочей базы, полученная через выгрузку в файл .dt из Конфигуратора. Главное правило: в учебной базе не должно быть реальных учётных данных, которые жалко потерять.