Разработка и Конфигурация · 13 мин
Как писать код в 1С: с чего начать и как устроена разработка
Как писать код в 1С: встроенный язык, конфигуратор, модули, запросы и отладка. Пошаговые примеры, типичные ошибки и советы для начинающих разработчиков.
Программирование в 1С отличается от классической разработки: код пишется на встроенном языке платформы, который синтаксически напоминает смесь Pascal и BASIC, а писать его можно как на русском, так и на английском. Вся работа ведётся в Конфигураторе — специальной среде разработки, где код привязывается к объектам конфигурации: документам, справочникам, отчётам и обработкам.
Главная особенность 1С — код не существует сам по себе. Он всегда размещается в модулях конкретных объектов и вызывается в ответ на события: открытие формы, запись документа, нажатие кнопки. Поэтому научиться писать код в 1С — значит понять, где какой код живёт, какие события бывают и как обращаться к данным через запросы и объектную модель.
Этот материал рассчитан на тех, кто только начинает: вы узнаете, как устроена среда разработки, как написать и отладить первую процедуру, как работать с данными и каких ошибок стоит избегать. Опытные пользователи найдут здесь систематизацию подходов и контрольные точки для проверки качества кода.
Где пишется код: Конфигуратор и типы модулей
Конфигуратор запускается из ярлыка 1С: при выборе информационной базы нужно нажать кнопку «Конфигуратор» вместо «1С:Предприятие». После открытия конфигурации (меню «Конфигурация» → «Открыть конфигурацию») слева появляется дерево объектов: справочники, документы, регистры, отчёты, обработки и другие.
Код размещается в модулях, и понимание их типов — фундамент всей разработки. У каждого объекта может быть несколько модулей, у каждого — своё назначение и контекст исполнения: на сервере, на клиенте или в обоих местах.
ОбработкаПроведения, ПередЗаписью, ПриЗаписи — исполняется на сервере
ПриОткрытии, обработчики кнопок; делится на клиентские и серверные процедуры
Процедуры и функции, доступные из любого места конфигурации
Например, создание печатных форм и обработка данных справочника в целом
Самая частая ошибка новичка — писать серверную логику (запросы к базе, обращение к данным) в клиентской процедуре формы. Платформа либо выдаст ошибку, либо код будет работать медленно из-за множества серверных вызовов. Поэтому перед написанием процедуры решите, где она должна исполняться, и используйте директивы компиляции.
Первый код: синтаксис встроенного языка
Базовая единица кода — процедура или функция. Функция возвращает значение через оператор «Возврат», процедура — нет. Переменные объявляются неявно при первом присваивании, типизация динамическая: одна и та же переменная может хранить число, строку или ссылку на объект.
Вот минимальный пример процедуры, которая выводит сообщение пользователю:
&НаКлиенте
Процедура Приветствие(Команда)
ИмяПользователя = "Иван";
Сообщить("Добрый день, " + ИмяПользователя + "!");
КонецПроцедуры
Пример функции с условием и возвратом значения, размещённой в общем модуле:
Функция РассчитатьСкидку(СуммаПокупки) Экспорт
Если СуммаПокупки >= 10000 Тогда
Возврат СуммаПокупки * 0.1;
ИначеЕсли СуммаПокупки >= 5000 Тогда
Возврат СуммаПокупки * 0.05;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Обратите внимание на ключевые элементы синтаксиса: каждый оператор завершается точкой с запятой, блоки «Если…Тогда…КонецЕсли» и «Процедура…КонецПроцедуры» обязательно закрываются, ключевое слово «Экспорт» делает функцию видимой из других модулей. Комментарии пишутся после двойного слэша «//» — используйте их для неочевидных мест, а не для пересказа кода.
Безопасная практика: внешние обработки вместо изменения конфигурации
Пока вы учитесь, не трогайте типовую конфигурацию рабочей базы. Любое изменение объектов снимает их с полной поддержки, усложняет обновления и может привести к потере данных при ошибке. Правильный учебный полигон — внешняя обработка: отдельный файл с расширением .epf, который открывается в режиме «1С:Предприятие» через меню «Файл» → «Открыть».
Внешняя обработка создаётся в Конфигураторе: «Файл» → «Новый» → «Внешняя обработка». В ней можно добавить форму с кнопками, написать код в модуле формы или объекта и отлаживать его точно так же, как код конфигурации. При этом база остаётся нетронутой.
- 1Откройте Конфигуратор и создайте новый файл типа «Внешняя обработка» через меню «Файл» → «Новый»
- 2Добавьте форму обработки: правый клик по объекту → «Добавить» → «Форма»
- 3Перетащите на форму кнопку и создайте для неё обработчик команды
- 4Напишите в обработчике простой код, например вывод сообщения или расчёт
- 5Сохраните файл с расширением .epf и откройте его в режиме «1С:Предприятие»
- 6Нажмите кнопку и убедитесь, что код выполняется как ожидалось
Когда обработка отработана и протестирована, её логику можно переносить в конфигурацию — если задача действительно этого требует. Многие задачи (загрузка данных, групповые изменения, специальные отчёты) так и остаются внешними обработками, и это нормальная практика.
Работа с данными: объектная модель и запросы
Данные в 1С читаются и изменяются двумя способами. Первый — объектная модель: вы получаете ссылку на элемент справочника или документ, открываете его объект и меняете реквизиты. Это удобно для изменения одного объекта, потому что срабатывают все проверки и обработчики записи.
КонтрагентОбъект = СсылкаНаКонтрагента.ПолучитьОбъект();
КонтрагентОбъект.Комментарий = "Проверен";
КонтрагентОбъект.Записать();
Второй способ — язык запросов, похожий на SQL. Запросы незаменимы, когда нужно выбрать много записей, посчитать итоги или соединить данные нескольких таблиц. Для чтения больших объёмов запрос всегда быстрее перебора объектов в цикле.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Товар,
| Номенклатура.Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления";
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Сообщить(Результат.Наименование);
КонецЦикла;
Текст запроса удобно собирать через конструктор запроса: правый клик в модуле → «Конструктор запроса». Он позволяет выбрать таблицы и поля мышкой, а платформа сама сформирует текст. Для учебных целей это лучший способ освоить синтаксис.
Объектная модель или запрос
Подходит для чтения множества записей, итогов и соединений таблиц. Ограничение: через запрос нельзя изменять данные, только читать
Подходит для изменения отдельных объектов с вызовом всех проверок и обработчиков. Ограничение: медленно при массовой обработке
Комбинированный вариант: запросом выбираются ссылки, затем каждый объект изменяется через ПолучитьОбъект(). Оптимально для массовых изменений
Отладка: как найти ошибку в коде
Отладчик встроен в Конфигуратор и включается через меню «Отладка» → «Начать отладку». Платформа запустит сеанс «1С:Предприятие» в отладочном режиме, и выполнение остановится на точках останова — красных метках, которые ставятся кликом по полю слева от строки кода или клавишей F9.
Когда выполнение остановлено, вы можете смотреть значения переменных: наведите курсор на переменную или добавьте её в табло («Отладка» → «Вычислить выражение», горячие клавиши Shift+F9). Движение по коду управляется стандартными командами: шаг через процедуру (F8), шаг с заходом внутрь (F11), продолжить выполнение (F5).
Как проверить, что код работает правильно
Данные изменились ожидаемым образом, сообщения выводятся корректно
Код выполнился без ошибок, но данные не изменились — вероятно, не вызван метод Записать()
Пустые поля, нулевые суммы и отсутствующие ссылки обрабатываются без падения
При пустом реквизите возникает «Ошибка при вызове метода контекста»
Обработка тысячи записей занимает секунды
Форма зависает — признак запросов в цикле или лишних серверных вызовов
Если конфигурация файловая, отладка работает сразу. Для клиент-серверных баз может потребоваться включить отладку на сервере — это делается в параметрах запуска службы агента сервера 1С, и обычно требует прав администратора.
Типичные ошибки начинающих и как их избежать
Большинство проблем новичков связано не с синтаксисом, а с непониманием контекста исполнения и жизненного цикла объектов. Ниже собраны ошибки, которые встречаются практически у каждого начинающего разработчика.
Отдельно стоит упомянуть расширения конфигурации — механизм, который позволяет добавлять и переопределять код, не меняя типовые модули. Если ваша задача — дополнить поведение типового документа или формы, сначала проверьте, решается ли она расширением. Это сохранит возможность автоматического обновления конфигурации.
Как развивать навык дальше
После освоения базового синтаксиса двигайтесь от простого к сложному: сначала обработки табличных частей, затем работа с регистрами и движениями документов, потом печатные формы и отчёты на СКД (система компоновки данных). СКД — отдельная большая тема: она позволяет строить отчёты почти без кода, и владение ей сильно расширяет возможности разработчика.
Полезная практика — чтение кода типовых конфигураций. Откройте модуль проведения любого документа в демонстрационной базе и разберите, как он устроен: как формируются движения, как проверяются заполненные реквизиты, как обрабатываются ошибки. Типовой код написан по стандартам разработки 1С и служит хорошим образцом.
Что изучать в зависимости от задачи
Держите под рукой синтакс-помощник — встроенную справку по языку, которая открывается из Конфигуратора по Ctrl+F1 или через меню «Справка». В нём описаны все методы платформы с примерами. Умение быстро находить нужный метод в синтакс-помощнике экономит больше времени, чем заучивание языка наизусть.
Что важно запомнить
Код в 1С пишется в Конфигураторе и привязан к модулям объектов. Начинайте с внешних обработок на копии базы, используйте запросы для чтения данных и объектную модель для изменений, отлаживайте через точки останова, а типовую конфигурацию дорабатывайте расширениями, а не прямым изменением модулей.
Частые вопросы о написании кода в 1С
Нужно ли знать другой язык программирования, чтобы начать писать в 1С?
Нет, встроенный язык 1С вполне подходит как первый язык: у него простой синтаксис, русские ключевые слова и снисходительная динамическая типизация. Знание любого другого языка ускорит обучение, потому что базовые концепции — переменные, условия, циклы, функции — везде одинаковы, но обязательным это не является.
Можно ли писать код в 1С на английском языке?
Да, платформа поддерживает английский вариант синтаксиса: If вместо Если, Procedure вместо Процедура и так далее. Однако в российской практике и во всех типовых конфигурациях используется русский синтаксис, поэтому для работы с чужим кодом и примерами из документации русский вариант знать всё равно придётся.
Чем расширение конфигурации лучше прямого изменения модулей?
Расширение хранит ваши доработки отдельно от типового кода, поэтому конфигурация остаётся на поддержке и обновляется автоматически. При прямом изменении модулей каждое обновление превращается в ручное сравнение и перенос ваших правок. Ограничение расширений — они не позволяют менять абсолютно всё, но для большинства прикладных доработок их возможностей достаточно.
Почему код выполняется без ошибок, но данные не меняются?
Чаще всего причина в том, что после изменения реквизитов объекта не вызван метод Записать() — изменения существуют только в памяти и теряются при завершении процедуры. Вторая частая причина — код работает с копией данных, а не с самим объектом, либо запись блокируется проверками в обработчиках, а исключение перехватывается и гасится конструкцией Попытка...Исключение.
Как научиться писать запросы, если я не знаю SQL?
Начните с конструктора запроса: он строит текст запроса визуально, а вы постепенно запоминаете синтаксис, глядя на результат. Язык запросов 1С проще SQL — в нём нет команд изменения данных, а обращение к полям идёт через понятные имена объектов конфигурации. После освоения выборок с условиями переходите к соединениям таблиц и группировкам с итогами.
Где безопасно практиковаться, если нет отдельной учебной базы?
Установите учебную версию платформы или создайте пустую файловую базу на своём компьютере — для этого не нужны лицензии на конфигурацию. Альтернатива — копия рабочей базы, полученная через выгрузку в файл .dt из Конфигуратора. Главное правило: в учебной базе не должно быть реальных учётных данных, которые жалко потерять.