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

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

Что такое язык 1С и для чего он нужен

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

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

Главная особенность языка — предметная ориентация. Вместо абстрактных таблиц и строк разработчик оперирует понятиями учёта: «Документ.РеализацияТоваров», «Справочник.Номенклатура», «РегистрНакопления.ОстаткиТоваров». Благодаря этому код читается почти как описание хозяйственной операции, а порог входа для специалистов без классического программистского образования заметно ниже, чем у языков общего назначения.

Вторая особенность — двуязычие. Синтаксис существует в русском и английском вариантах, причём их можно смешивать в одном модуле. В российских конфигурациях традиционно используется русский вариант, поэтому код выглядит как «Если … Тогда … КонецЕсли;», а не «If … Then … EndIf».

Где именно пишется код на языке 1С

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

Открыть код можно в конфигураторе: выделите объект в дереве конфигурации, нажмите правую кнопку мыши и выберите «Открыть модуль» либо перейдите в форму и откройте её модуль. Процедуры и функции внутри модуля вызываются платформой при наступлении событий — например, «ПриЗаписи» документа или «ПриОткрытии» формы.

Из чего состоит язык: базовые конструкции

Синтаксис минималистичен и включает стандартный набор: переменные, условные операторы «Если…Тогда…Иначе…КонецЕсли», циклы «Для…Цикл» и «Пока…Цикл», процедуры и функции, обработку ошибок через «Попытка…Исключение…КонецПопытки». Каждая инструкция завершается точкой с запятой, регистр букв значения не имеет.

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

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

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

Возврат 10;

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

Возврат 5;

Иначе

Возврат 0;

КонецЕсли;

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

Ключевое слово «Экспорт» делает процедуру или функцию видимой за пределами модуля. Без него метод остаётся приватным и доступен только внутри своего модуля — это основной способ инкапсуляции логики в 1С.

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

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

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

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

"ВЫБРАТЬ

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

|ИЗ

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

|ГДЕ

| Номенклатура.ПометкаУдаления = ЛОЖЬ";

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

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

Сообщить(Выборка.Товар);

КонецЦикла;

Для изменения данных используется объектная модель: получаете объект методом «ПолучитьОбъект()», меняете реквизиты и вызываете «Записать()». Важно понимать разницу: ссылка — это лишь указатель на объект базы, а чтение и запись реквизитов идёт через объект. Частое чтение реквизитов «через точку» от ссылки порождает множество мелких обращений к базе и замедляет систему.

Клиент и сервер: где выполняется код

В управляемом приложении код делится на клиентский и серверный. Директивы компиляции «&НаКлиенте» и «&НаСервере» перед процедурой указывают, где она выполняется. На клиенте доступны форма, диалоги и файловая система пользователя; на сервере — запросы к базе и объектная модель данных.

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

Как написать и проверить первую процедуру
  1. 1
    Откройте конфигуратор и создайте общий модуль или откройте модуль формы
  2. 2
    Напишите функцию с простой логикой, например расчёт скидки по сумме
  3. 3
    Вызовите её из обработчика события, например при нажатии кнопки формы
  4. 4
    Запустите отладку (F5), поставьте точку останова (F9) и проверьте значения переменных
  5. 5
    Убедитесь, что результат выводится пользователю или записывается в данные

Чем язык 1С отличается от других языков программирования

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

КритерийЯзык 1СЯзыки общего назначения (C#, Java)
Среда выполненияТолько платформа 1С:ПредприятиеОС, браузер, серверы, встраиваемые системы
Предметная областьУчёт, документы, бизнес-процессыЛюбая
СинтаксисРусский и/или английскийАнглийский
Работа с БДВстроенный язык запросов и объектная модельВнешние библиотеки и ORM
ТипизацияДинамическаяЧаще статическая

Для интеграций язык умеет работать с HTTP-запросами, веб-сервисами, файлами XML и JSON, COM-объектами. Этого достаточно для обмена с сайтами, банками и складскими системами, хотя сложную внешнюю логику иногда выносят во внешние компоненты или отдельные сервисы.

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

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

Из ограничений стоит знать: язык не поддерживает классы и наследование в привычном ООП-смысле, многопоточность внутри сеанса недоступна, а работа с памятью и низкоуровневыми структурами скрыта платформой. Для учётных задач это редко мешает, но переносить приёмы из других языков «один в один» не получится.

Типичные ошибки
01
Правка типовой конфигурации вместо расширения — обновления становятся ручными и рискованными
02
Запросы внутри цикла — резкое падение производительности при росте данных
03
Чтение реквизитов через точку от ссылки в цикле — лишние обращения к базе
04
Игнорирование директив &НаКлиенте/&НаСервере — ошибки вызова методов не в том контексте
05
Отсутствие обработки исключений при обменах — необработанная ошибка обрывает всю выгрузку

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

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

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

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

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

Синтаксис модуля
Норма

Проверка конфигурации проходит без ошибок

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

Красные сообщения в окне служебных сообщений

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

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

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

Прерывание с ошибкой или пустые значения в ключевых переменных

Изменение данных
Норма

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

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

Записей нет, либо суммы/количества не совпадают с расчётом

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

Операция на реальном объёме данных выполняется за приемлемое время

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

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

Частые вопросы о языке 1С

Сложно ли выучить язык 1С без опыта программирования?

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

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

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

Чем язык запросов 1С отличается от SQL?

Он построен поверх SQL-подобного синтаксиса, но оперирует объектами конфигурации, а не физическими таблицами. Поддерживаются специфические возможности: виртуальные таблицы регистров, итоги, иерархия справочников. Вложенные запросы и временные таблицы тоже доступны.

Где выполняется код фоновых заданий?

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

Что такое расширение конфигурации и зачем оно нужно?

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

Подходит ли язык 1С для интеграции с внешними системами?

Да, в языке есть объекты для HTTP-запросов, работы с JSON, XML, текстовыми файлами и веб-сервисами. Этого хватает для обмена с сайтами, банками, маркетплейсами и складским оборудованием. Для нестандартных протоколов используют внешние компоненты.

Итог

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

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