Разработка и Конфигурация · 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).
- Обращение к реквизиту через точку от ссылки в цикле — каждое обращение
Ссылка.Реквизит.Свойствогенерирует отдельный запрос к базе. Получайте данные одним запросом. - Изменение данных без транзакции — если обработка записывает несколько связанных объектов и падает посередине, база остаётся в несогласованном состоянии. Используйте
НачатьТранзакцию()/ЗафиксироватьТранзакцию()/ОтменитьТранзакцию(). - Код на клиенте, требующий серверных данных — в тонком клиенте прямой запрос к базе из
&НаКлиентеневозможен. Выносите работу с данными в серверные процедуры. - Сравнение с Неопределено через равно — для проверки заполненности ссылки используйте
Ссылка.Пустая()или функциюЗначениеЗаполнено().
Порядок освоения: с чего начать и как практиковаться
Эффективный путь изучения выглядит так: сначала синтаксис и простые процедуры на учебной базе, затем работа со справочниками, далее — документы и проведение, после этого — запросы и отчёты на СКД. Перепрыгивание через этапы (например, попытка сразу писать сложный отчёт) приводит к непониманию базовых механизмов.
Практические упражнения для закрепления, от простого к сложному:
- Напишите обработку, которая выводит список всех контрагентов через запрос.
- Добавьте в справочник новый реквизит и обработку его массового заполнения.
- Создайте документ с табличной частью и напишите проведение по регистру накопления.
- Сделайте отчёт на СКД по данным этого регистра.
- Напишите внешнюю печатную форму для документа.
Для изучения типового кода открывайте модули стандартных конфигураций (если есть доступ) и смотрите, как устроены обработчики проведения и общие модули. Синтакс-помощник (Ctrl+F1 на любом ключевом слове) — встроенная документация по всем методам платформы, используйте его постоянно вместо поиска по форумам.
- 1Сделайте выгрузку информационной базы и разверните копию для экспериментов
- 2Откройте конфигуратор, найдите нужный объект и определите, в каком модуле писать код
- 3Напишите процедуру, проверьте модуль синтаксической проверкой (Ctrl+F7)
- 4Обновите конфигурацию базы данных (F7) и запустите отладку на копии
- 5Проверьте результат в пользовательском режиме: данные, движения, отсутствие ошибок
- 6Только после успешной проверки переносите изменение в рабочую базу
Часто задаваемые вопросы
Нужно ли знать другой язык программирования, чтобы писать код 1С?
Нет. Встроенный язык 1С самодостаточен, и многие разработчики начинают с него как с первого языка. Знание основ SQL помогает быстрее освоить язык запросов, а общее понимание алгоритмов (условия, циклы, функции) переносится из любого языка, но предварительные требования отсутствуют.
Можно ли писать код 1С на английском?
Да, платформа поддерживает английский вариант синтаксиса, и оба варианта можно смешивать в одном модуле. На практике в русскоязычных проектах пишут на русском — так код понятнее аналитикам и пользователям, а типовые конфигурации почти полностью русскоязычные.
Чем внешняя обработка отличается от доработки конфигурации?
Внешняя обработка — отдельный файл .epf, который открывается в режиме предприятия и не меняет конфигурацию. Это безопасный способ добавить функциональность без снятия конфигурации с поддержки. Доработка конфигурации меняет саму структуру и код, требует обновления базы и усложняет будущие обновления. Всё, что можно сделать внешней обработкой или расширением, лучше делать именно так.
Что такое расширение конфигурации и когда его использовать?
Расширение — механизм доработки типовой конфигурации без изменения её кода: добавляются свои процедуры, формы, реквизиты и обработчики поверх типовых. Расширения не мешают автоматическому обновлению конфигурации. Используйте их вместо прямой правки типового кода всегда, когда задача позволяет.
Почему код работает в отладке, но не работает у пользователя?
Чаще всего причины три: различие прав доступа (у разработчика полные права, у пользователя — ограниченные), выполнение кода на сервере с отключённой отладкой, либо разные данные — код проверялся на тестовом документе, а у пользователя другая ситуация. Проверяйте доработки под учётной записью с правами реального пользователя.
Как быстро найти, где в типовой конфигурации выполняется нужное действие?
Используйте глобальный поиск по конфигурации (Ctrl+Shift+F) по ключевым словам сообщения об ошибке или названию операции. Альтернатива — отладчик: поставьте остановку по ошибке или точку в известном обработчике и изучите стек вызовов. Замер производительности (Отладка → Замер производительности) покажет, какие процедуры реально выполняются при операции.
Что важно запомнить
Код 1С пишется в модулях объектов через конфигуратор: бизнес-логика — в модуле объекта и общих модулях, интерфейс — в форме. Освойте синтаксис, язык запросов и отладчик на учебной базе. Данные читайте запросами, массовые операции оборачивайте в транзакции, а любые доработки сначала проверяйте на копии базы с выгрузкой на случай отката.