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

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

Как писать код 1С: практическое руководство для начинающих

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

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

Главный инструмент разработчика — конфигуратор. Именно в нём создаются модули, пишется код, настраиваются формы и запускается отладка. Чтобы начать писать код 1С, достаточно установленной платформы, учебной базы и базового понимания синтаксиса: переменные, условия, циклы, процедуры и функции.

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

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

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

У каждого объекта есть несколько модулей, и важно понимать, где какой код выполняется:

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

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

Базовый синтаксис: переменные, условия, циклы

Синтаксис встроенного языка 1С напоминает смесь Pascal и BASIC с русскими ключевыми словами. Переменные объявляются неявно при первом присваивании или через Перем, тип определяется значением. Точка с запятой обязательна в конце каждого оператора.

Процедура РассчитатьСкидку(СуммаЗаказа) Экспорт

Перем ПроцентСкидки;

Если СуммаЗаказа >= 100000 Тогда

ПроцентСкидки = 10;

ИначеЕсли СуммаЗаказа >= 50000 Тогда

ПроцентСкидки = 5;

Иначе

ПроцентСкидки = 0;

КонецЕсли;

СуммаСкидки = СуммаЗаказа * ПроцентСкидки / 100;

Сообщить("Скидка: " + СуммаСкидки);

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

Основные конструкции, которые нужно знать на старте:

  • Если ... Тогда ... ИначеЕсли ... Иначе ... КонецЕсли; — ветвления.
  • Для Каждого Строка Из Коллекция Цикл ... КонецЦикла; — перебор табличных частей и выборок.
  • Для Сч = 1 По 10 Цикл ... КонецЦикла; — счётный цикл.
  • Пока Условие Цикл ... КонецЦикла; — цикл с условием.
  • Попытка ... Исключение ... КонецПопытки; — обработка ошибок.

Ключевое слово Экспорт после заголовка процедуры делает её видимой из других модулей. Без него процедура доступна только внутри своего модуля. Строки в 1С пишутся в двойных кавычках, даты — в одинарных: '20260115'. Булевы значения — Истина и Ложь, пустое значение — Неопределено.

Работа с объектами: справочники и документы

Большая часть кода 1С — это чтение и запись объектов базы данных. Работа идёт через менеджеры объектов и ссылки. Типичный сценарий — найти элемент справочника и изменить его:

Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");

Если Не Контрагент.Пустая() Тогда

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

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

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

Иначе

Сообщить("Контрагент не найден");

КонецЕсли;

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

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

Язык запросов: читаем данные правильно

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

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

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

"ВЫБРАТЬ

| Продажи.Номенклатура КАК Номенклатура,

| СУММА(Продажи.СуммаОборот) КАК Сумма

|ИЗ

| РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи

|СГРУППИРОВАТЬ ПО

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

Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));

Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекущаяДата()));

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить(Выборка.Номенклатура.Наименование + ": " + Выборка.Сумма);

КонецЦикла;

Ключевые правила работы с запросами:

  • Параметры передаются через &ИмяПараметра и УстановитьПараметр() — никогда не склеивайте значения в текст запроса строкой.
  • Для сложных выборок используйте конструктор запроса (правый клик в модуле → «Конструктор запроса») — он соберёт синтаксис автоматически.
  • Результат Выполнить() можно обойти через Выбрать() (построчно) или Выгрузить() (в таблицу значений для дальнейшей обработки).
  • Виртуальные таблицы регистров (Обороты, Остатки) требуют указания периода — без него запрос будет сканировать всю таблицу.
Если обработка «висит» на больших объёмах, в девяти случаях из десяти причина — запрос внутри цикла. Вынесите запрос наружу, получите все данные одним обращением к базе и соединяйте их в памяти через соответствие или таблицу значений.
ПЗ
Практическое замечание

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

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

Полезные приёмы отладки:

  • Табло (Shift+F9) — вычисляет любое выражение на лету: значение переменной, результат функции, свойство объекта.
  • Шаг с заходом (F11) — заходит внутрь вызываемых процедур; шаг через (F10) — выполняет строку без захода.
  • Стек вызовов — показывает цепочку вызовов, приведшую к текущей строке. Незаменим, когда обработчик вызывается из неожиданного места.
  • Остановка по ошибке — «Отладка → Остановка по ошибке» прерывает выполнение в момент исключения, показывая точную строку сбоя.

Для отладки серверного кода в клиент-серверном режиме нужно, чтобы отладка была разрешена на сервере (параметр -debug в свойствах кластера). В файловой базе это работает по умолчанию. Если точка останова «не ловится», проверьте: код выполняется на сервере, а отладка сервера выключена, либо процедура вызывается в фоновом задании — тогда её нужно отлаживать через подключение к сеансу фонового задания.

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

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

Выполнение процедуры
Норма

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

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

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

Проведение документа
Норма

Движения по регистрам соответствуют суммам документа, остатки не уходят в минус

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

Движения дублируются, отсутствуют или нарушают остатки

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

Обработка типового объёма данных занимает секунды или минуты

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

Выполнение растёт непропорционально объёму — признак запросов в цикле

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

Большинство проблем в коде 1С повторяются у всех новичков. Знание этого списка экономит часы отладки:

  • Забытая точка с запятой — синтаксическая ошибка, которую конфигуратор подсветит при проверке модуля (Ctrl+F7).
  • Обращение к реквизиту через точку от ссылки в цикле — каждое обращение Ссылка.Реквизит.Свойство генерирует отдельный запрос к базе. Получайте данные одним запросом.
  • Изменение данных без транзакции — если обработка записывает несколько связанных объектов и падает посередине, база остаётся в несогласованном состоянии. Используйте НачатьТранзакцию() / ЗафиксироватьТранзакцию() / ОтменитьТранзакцию().
  • Код на клиенте, требующий серверных данных — в тонком клиенте прямой запрос к базе из &НаКлиенте невозможен. Выносите работу с данными в серверные процедуры.
  • Сравнение с Неопределено через равно — для проверки заполненности ссылки используйте Ссылка.Пустая() или функцию ЗначениеЗаполнено().
Типичные ошибки
01
Правка кода в рабочей базе без копии — при ошибке откатить изменения нечем
02
Вся логика в модуле формы — при программном вызове объекта код не выполняется
03
Запрос внутри цикла — обработка на больших данных работает часами
04
Склейка параметров в текст запроса строкой — риск ошибок и нечитаемый код
05
Игнорирование исключений пустым блоком Попытка/Исключение — ошибки скрываются и диагностируются вдвое дольше

Порядок освоения: с чего начать и как практиковаться

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

Практические упражнения для закрепления, от простого к сложному:

  1. Напишите обработку, которая выводит список всех контрагентов через запрос.
  2. Добавьте в справочник новый реквизит и обработку его массового заполнения.
  3. Создайте документ с табличной частью и напишите проведение по регистру накопления.
  4. Сделайте отчёт на СКД по данным этого регистра.
  5. Напишите внешнюю печатную форму для документа.

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

Порядок действий для первой доработки
  1. 1
    Сделайте выгрузку информационной базы и разверните копию для экспериментов
  2. 2
    Откройте конфигуратор, найдите нужный объект и определите, в каком модуле писать код
  3. 3
    Напишите процедуру, проверьте модуль синтаксической проверкой (Ctrl+F7)
  4. 4
    Обновите конфигурацию базы данных (F7) и запустите отладку на копии
  5. 5
    Проверьте результат в пользовательском режиме: данные, движения, отсутствие ошибок
  6. 6
    Только после успешной проверки переносите изменение в рабочую базу

Часто задаваемые вопросы

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

Нет. Встроенный язык 1С самодостаточен, и многие разработчики начинают с него как с первого языка. Знание основ SQL помогает быстрее освоить язык запросов, а общее понимание алгоритмов (условия, циклы, функции) переносится из любого языка, но предварительные требования отсутствуют.

Можно ли писать код 1С на английском?

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

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

Внешняя обработка — отдельный файл .epf, который открывается в режиме предприятия и не меняет конфигурацию. Это безопасный способ добавить функциональность без снятия конфигурации с поддержки. Доработка конфигурации меняет саму структуру и код, требует обновления базы и усложняет будущие обновления. Всё, что можно сделать внешней обработкой или расширением, лучше делать именно так.

Что такое расширение конфигурации и когда его использовать?

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

Почему код работает в отладке, но не работает у пользователя?

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

Как быстро найти, где в типовой конфигурации выполняется нужное действие?

Используйте глобальный поиск по конфигурации (Ctrl+Shift+F) по ключевым словам сообщения об ошибке или названию операции. Альтернатива — отладчик: поставьте остановку по ошибке или точку в известном обработчике и изучите стек вызовов. Замер производительности (Отладка → Замер производительности) покажет, какие процедуры реально выполняются при операции.

Итог

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

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