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

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

Как выглядит язык 1С: разбор синтаксиса с примерами

Как выглядит встроенный язык 1С: структура кода, операторы, процедуры, запросы и примеры. Разбираем синтаксис и объясняем, с чего начать изучение.

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

Для тех, кто видит код 1С впервые, непривычно выглядит русская лексика: «Если», «Тогда», «КонецЕсли», «Для Каждого». При этом допустим и английский синтаксис — платформа поддерживает оба варианта, и их можно смешивать, хотя на практике так делать не принято. Ниже разберём, как устроен код изнутри, и покажем характерные конструкции на реальных фрагментах.

Из чего состоит код: модули, процедуры и функции

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

Базовая единица кода — процедура или функция. Функция возвращает значение через ключевое слово «Возврат», процедура просто выполняет действия. Типичный фрагмент выглядит так:

Функция РассчитатьСуммуСНДС(Сумма, СтавкаНДС)

СуммаНДС = Сумма * СтавкаНДС / 100;

Возврат Сумма + СуммаНДС;

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

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

Как выглядят переменные, условия и циклы

Переменные в 1С объявлять заранее не обязательно — тип определяется в момент присваивания. Язык слабо типизирован: одна и та же переменная может сначала хранить число, а потом строку, хотя злоупотреблять этим не стоит. Явное объявление через ключевое слово «Перем» используется для переменных уровня модуля.

Условные конструкции и циклы выглядят так:

Если СуммаДокумента > 100000 Тогда

ТребуетсяСогласование = Истина;

ИначеЕсли СуммаДокумента > 0 Тогда

ТребуетсяСогласование = Ложь;

Иначе

ВызватьИсключение "Сумма документа не может быть отрицательной";

КонецЕсли;

Для Каждого СтрокаТовара Из Товары Цикл

СтрокаТовара.Сумма = СтрокаТовара.Цена * СтрокаТовара.Количество;

КонецЦикла;

Логические значения — «Истина» и «Ложь», пустое значение обозначается как «Неопределено». Операторы сравнения привычные: =, <>, >, <, а логические связки пишутся словами: «И», «ИЛИ», «НЕ».

Обращение к объектам: справочники, документы, регистры

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

НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();

НовыйКонтрагент.Наименование = "ООО Ромашка";

НовыйКонтрагент.ИНН = "7701234567";

НовыйКонтрагент.Записать();

Поиск данных тоже выглядит декларативно. Например, получить ссылку на элемент можно методом «НайтиПоКоду» или «НайтиПоНаименованию», а проверка «ПустаяСсылка()» покажет, найден ли объект. Эта особенность — причина, почему код 1С часто понятен даже непрограммистам: он оперирует терминами предметной области.

Язык запросов: вторая половина кода

Отдельная часть экосистемы — язык запросов 1С, внешне похожий на SQL, но с русскими ключевыми словами. Текст запроса хранится в коде как строка и выполняется через объект «Запрос»:

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

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

"ВЫБРАТЬ

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

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

|ИЗ

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

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

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

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

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

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

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

Директивы компиляции и клиент-серверная специфика

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

&НаКлиенте

Процедура РассчитатьИтог(Команда)

РассчитатьИтогНаСервере();

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

&НаСервере

Процедура РассчитатьИтогНаСервере()

// Здесь доступны запросы и объекты данных

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

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

Типичные ошибки новичков
01
Забытая точка с запятой в конце оператора — самая частая синтаксическая ошибка при переходе с других языков
02
Обращение к базе данных из клиентской процедуры — код не скомпилируется или будет работать медленно
03
Перебор объектов в цикле вместо запроса — резкое падение производительности на больших объёмах данных
04
Смешивание русского и английского синтаксиса в одном модуле — код трудно читать и поддерживать

Комментарии, переносы строк и оформление кода

Комментарии начинаются с двойного слэша «//» и действуют до конца строки — блочных комментариев в языке нет. Длинные строковые литералы переносятся через вертикальную черту «|», что видно в примере с запросом выше. Дата в коде записывается литералом в одинарных кавычках: '20260115'.

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

Как увидеть язык 1С своими глазами
  1. 1
    Установите учебную версию платформы 1С:Предприятие и откройте конфигуратор любой демонстрационной базы
  2. 2
    В дереве конфигурации найдите документ, откройте контекстное меню и выберите «Открыть модуль объекта»
  3. 3
    Найдите процедуру «ОбработкаПроведения» — это типичный пример прикладного кода
  4. 4
    Откройте модуль любой формы и посмотрите директивы «&НаКлиенте» и «&НаСервере»
  5. 5
    Попробуйте изменить простое условие и проверьте результат через «Конфигурация — Проверка конфигурации»

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

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

Язык 1С и другие языки

Встроенный язык 1С

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

Python / C# / Java

Универсальные языки с богатой экосистемой. Для учётных задач потребуют внешних фреймворков и СУБД, зато подходят для любых приложений

SQL

Язык запросов 1С похож на SQL, но оперирует объектами конфигурации и виртуальными таблицами вместо физических таблиц базы

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

Итог

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

Язык 1С — это структурированный код с русскими ключевыми словами, размещённый в модулях объектов и форм. Основа кода — процедуры, функции, условия, циклы и запросы к данным. Ключевые особенности: директивы «&НаКлиенте»/«&НаСервере», работа через менеджеры объектов и встроенный язык запросов, похожий на SQL.

Частые вопросы

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

Да, платформа поддерживает английский вариант синтаксиса: If…Then…EndIf, For Each…Do и так далее. Варианты можно даже смешивать, однако в российской практике стандартом является русский синтаксис, и в типовых конфигурациях используется именно он.

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

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

Где именно хранится и редактируется код?

Код хранится внутри конфигурации базы данных, а не в отдельных файлах. Редактируется он в конфигураторе через встроенный редактор модулей. При использовании EDT (среды разработки на базе Eclipse) код выгружается в файлы проекта и работа ведётся в привычной IDE.

Что такое «&НаКлиенте» и почему без этого не обойтись?

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

Проверяет ли платформа ошибки в коде до запуска?

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

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

Несложно: базовые конструкции (ВЫБРАТЬ, ИЗ, ГДЕ, СГРУППИРОВАТЬ ПО, соединения) соответствуют SQL. Главные отличия — работа с виртуальными таблицами регистров, параметры через амперсанд и отсутствие прямого доступа к физическим таблицам базы данных.