Разработка и Конфигурация · 10 мин
Как выглядит язык 1С: разбор синтаксиса с примерами
Как выглядит встроенный язык 1С: структура кода, операторы, процедуры, запросы и примеры. Разбираем синтаксис и объясняем, с чего начать изучение.
Встроенный язык 1С:Предприятие — это предметно-ориентированный язык программирования, заточенный под автоматизацию учёта и бизнес-процессов. Внешне он напоминает смесь классических языков вроде Pascal и BASIC: код пишется русскими ключевыми словами, операторы завершаются точкой с запятой, а логика строится вокруг процедур и функций. Главная особенность — язык тесно связан с объектами конфигурации: документами, справочниками, регистрами, поэтому большая часть кода выглядит как работа с прикладными данными, а не абстрактные алгоритмы.
Для тех, кто видит код 1С впервые, непривычно выглядит русская лексика: «Если», «Тогда», «КонецЕсли», «Для Каждого». При этом допустим и английский синтаксис — платформа поддерживает оба варианта, и их можно смешивать, хотя на практике так делать не принято. Ниже разберём, как устроен код изнутри, и покажем характерные конструкции на реальных фрагментах.
Из чего состоит код: модули, процедуры и функции
Код в 1С не живёт в отдельных файлах-скриптах — он размещается в модулях. У каждого объекта конфигурации (справочника, документа, отчёта) есть модуль объекта, у формы — модуль формы, плюс существуют общие модули для переиспользуемой логики. Открыв конфигуратор, вы увидите дерево метаданных, и код доступен через контекстное меню объекта.
Базовая единица кода — процедура или функция. Функция возвращает значение через ключевое слово «Возврат», процедура просто выполняет действия. Типичный фрагмент выглядит так:
Функция РассчитатьСуммуСНДС(Сумма, СтавкаНДС)
СуммаНДС = Сумма * СтавкаНДС / 100;
Возврат Сумма + СуммаНДС;
КонецФункции
Обратите внимание на характерные детали: каждый оператор заканчивается точкой с запятой, отступы делаются табуляцией, имена переменных пишутся по-русски в «верблюжьем» стиле. Регистр букв в ключевых словах значения не имеет, но принято писать «Если», а не «если».
Как выглядят переменные, условия и циклы
Переменные в 1С объявлять заранее не обязательно — тип определяется в момент присваивания. Язык слабо типизирован: одна и та же переменная может сначала хранить число, а потом строку, хотя злоупотреблять этим не стоит. Явное объявление через ключевое слово «Перем» используется для переменных уровня модуля.
Условные конструкции и циклы выглядят так:
Если СуммаДокумента > 100000 Тогда
ТребуетсяСогласование = Истина;
ИначеЕсли СуммаДокумента > 0 Тогда
ТребуетсяСогласование = Ложь;
Иначе
ВызватьИсключение "Сумма документа не может быть отрицательной";
КонецЕсли;
Для Каждого СтрокаТовара Из Товары Цикл
СтрокаТовара.Сумма = СтрокаТовара.Цена * СтрокаТовара.Количество;
КонецЦикла;
Логические значения — «Истина» и «Ложь», пустое значение обозначается как «Неопределено». Операторы сравнения привычные: =, <>, >, <, а логические связки пишутся словами: «И», «ИЛИ», «НЕ».
Обращение к объектам: справочники, документы, регистры
Больше всего код 1С отличается от других языков именно работой с прикладными объектами. Обращение идёт через менеджеры объектов, и типичный код читается почти как обычный текст:
НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтрагент.Наименование = "ООО Ромашка";
НовыйКонтрагент.ИНН = "7701234567";
НовыйКонтрагент.Записать();
Поиск данных тоже выглядит декларативно. Например, получить ссылку на элемент можно методом «НайтиПоКоду» или «НайтиПоНаименованию», а проверка «ПустаяСсылка()» покажет, найден ли объект. Эта особенность — причина, почему код 1С часто понятен даже непрограммистам: он оперирует терминами предметной области.
Язык запросов: вторая половина кода
Отдельная часть экосистемы — язык запросов 1С, внешне похожий на SQL, но с русскими ключевыми словами. Текст запроса хранится в коде как строка и выполняется через объект «Запрос»:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Продажи.Номенклатура КАК Номенклатура,
| СУММА(Продажи.СуммаОборот) КАК Сумма
|ИЗ
| РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи
|СГРУППИРОВАТЬ ПО
| Продажи.Номенклатура";
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДатаСеанса()));
Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекущаяДатаСеанса()));
Результат = Запрос.Выполнить().Выгрузить();
Параметры запроса обозначаются амперсандом (&), виртуальные таблицы регистров — вроде «Обороты» — позволяют получать агрегированные данные без ручных вычислений. Освоение языка запросов обязательно: большая часть производительного кода в 1С строится именно на запросах, а не на переборе объектов.
Директивы компиляции и клиент-серверная специфика
Открыв модуль формы, вы сразу увидите строки вроде «&НаКлиенте» и «&НаСервере» перед процедурами. Это директивы компиляции: они указывают, где выполняется код — на клиенте (тонкий клиент, веб-клиент) или на сервере. Такого разделения нет в большинстве других языков, и это первая сложность для новичков.
&НаКлиенте
Процедура РассчитатьИтог(Команда)
РассчитатьИтогНаСервере();
КонецПроцедуры
&НаСервере
Процедура РассчитатьИтогНаСервере()
// Здесь доступны запросы и объекты данных
КонецПроцедуры
Правило простое: всё, что требует обращения к базе данных, выполняется на сервере; работа с интерфейсом и предупреждения пользователю — на клиенте. Нарушение этого правила приводит либо к ошибкам компиляции, либо к лишним серверным вызовам и «тормозам» формы.
Комментарии, переносы строк и оформление кода
Комментарии начинаются с двойного слэша «//» и действуют до конца строки — блочных комментариев в языке нет. Длинные строковые литералы переносятся через вертикальную черту «|», что видно в примере с запросом выше. Дата в коде записывается литералом в одинарных кавычках: '20260115'.
Строки заключаются в двойные кавычки, а кавычка внутри строки удваивается: "Поле ""Наименование"" не заполнено". Это нестандартное для многих языков правило экранирования часто становится источником ошибок при формировании текстов сообщений.
- 1Установите учебную версию платформы 1С:Предприятие и откройте конфигуратор любой демонстрационной базы
- 2В дереве конфигурации найдите документ, откройте контекстное меню и выберите «Открыть модуль объекта»
- 3Найдите процедуру «ОбработкаПроведения» — это типичный пример прикладного кода
- 4Откройте модуль любой формы и посмотрите директивы «&НаКлиенте» и «&НаСервере»
- 5Попробуйте изменить простое условие и проверьте результат через «Конфигурация — Проверка конфигурации»
Чем язык 1С отличается от других языков программирования
Если сравнивать с универсальными языками, встроенный язык 1С проще по синтаксису, но уже по возможностям. В нём нет классов и наследования в привычном ООП-смысле, нет работы с памятью, файлами на низком уровне или многопоточности в ручном режиме. Зато есть встроенные механизмы проведения документов, итогов по регистрам и прав доступа — то, что в других стеках пришлось бы писать руками.
Язык 1С и другие языки
Оптимален для учётных задач: документы, регистры, проведение встроены в платформу. Ограничение — работает только внутри платформы 1С
Универсальные языки с богатой экосистемой. Для учётных задач потребуют внешних фреймворков и СУБД, зато подходят для любых приложений
Язык запросов 1С похож на SQL, но оперирует объектами конфигурации и виртуальными таблицами вместо физических таблиц базы
Из этого следует практический вывод: изучать язык 1С имеет смысл в связке с платформой и типовыми механизмами. Сам по себе синтаксис осваивается быстро — основное время уходит на понимание объектной модели: чем документ отличается от регистра, как работает проведение, зачем нужны виртуальные таблицы.
Что важно запомнить
Язык 1С — это структурированный код с русскими ключевыми словами, размещённый в модулях объектов и форм. Основа кода — процедуры, функции, условия, циклы и запросы к данным. Ключевые особенности: директивы «&НаКлиенте»/«&НаСервере», работа через менеджеры объектов и встроенный язык запросов, похожий на SQL.
Частые вопросы
Можно ли писать код 1С на английском языке?
Да, платформа поддерживает английский вариант синтаксиса: If…Then…EndIf, For Each…Do и так далее. Варианты можно даже смешивать, однако в российской практике стандартом является русский синтаксис, и в типовых конфигурациях используется именно он.
Нужно ли знать другой язык программирования перед изучением 1С?
Нет, встроенный язык 1С вполне подходит как первый: синтаксис простой, а результат виден сразу в прикладной задаче. Знание основ любого языка (переменные, циклы, условия) ускорит обучение, но не является обязательным.
Где именно хранится и редактируется код?
Код хранится внутри конфигурации базы данных, а не в отдельных файлах. Редактируется он в конфигураторе через встроенный редактор модулей. При использовании EDT (среды разработки на базе Eclipse) код выгружается в файлы проекта и работа ведётся в привычной IDE.
Что такое «&НаКлиенте» и почему без этого не обойтись?
Это директива компиляции, указывающая, что процедура выполняется на стороне клиента. Платформа 1С — клиент-серверная, и код формы явно разделяется между клиентом и сервером. Директивы обязательны в модулях форм; без правильного разделения код либо не скомпилируется, либо будет генерировать лишние серверные вызовы.
Проверяет ли платформа ошибки в коде до запуска?
Да, конфигуратор выполняет синтаксический контроль модуля, а команда «Проверка конфигурации» выявляет ошибки по всей конфигурации сразу. Однако часть ошибок — например, обращение к несуществующему реквизиту через точку у переменной неопределённого типа — проявляется только в момент выполнения.
Сложно ли изучить язык запросов 1С, если я знаю SQL?
Несложно: базовые конструкции (ВЫБРАТЬ, ИЗ, ГДЕ, СГРУППИРОВАТЬ ПО, соединения) соответствуют SQL. Главные отличия — работа с виртуальными таблицами регистров, параметры через амперсанд и отсутствие прямого доступа к физическим таблицам базы данных.