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

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

Программирование в 1С: на какой язык похож встроенный язык платформы

Разбираем, на какой язык похож встроенный язык 1С: сравнение с Pascal, BASIC, SQL и JavaScript. Синтаксис, примеры кода и советы для перехода в 1С-разработку.

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

При этом язык 1С — не универсальный инструмент, а предметно-ориентированный. Его главная особенность — прямой доступ к объектам конфигурации: документам, справочникам, регистрам, запросам. Поэтому часть конструкций напоминает SQL (встроенный язык запросов), а работа с коллекциями и событиями отчасти похожа на JavaScript в модели DOM.

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

Как устроен встроенный язык 1С

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

Характерная черта — двуязычие синтаксиса. Ключевые слова можно писать и на русском, и на английском: Если и If, Цикл и Do работают одинаково. В корпоративной практике принят русский вариант, но платформа понимает оба.

Пример типичного фрагмента кода:

Функция ПолучитьСуммуДокумента(ДокументСсылка)

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

Запрос.Текст = "ВЫБРАТЬ СУММА(Товары.Сумма) КАК Итог

|ИЗ Документ.Реализация.Товары КАК Товары

|ГДЕ Товары.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);

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

Если Результат.Следующий() Тогда

Возврат Результат.Итог;

КонецЕсли;

Возврат 0;

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

Здесь видно сразу два «родственных» языка: процедурная обвязка в стиле Pascal и встроенный запрос в стиле SQL.

Сходство с Pascal и BASIC

Структурно язык 1С наследует традицию алголоподобных языков. Если вы знакомы с Pascal, узнаете почти всё: блоки ограничиваются словами, а не скобками; ветвления выглядят как Если ... Тогда ... Иначе ... КонецЕсли; циклы — Для ... Цикл ... КонецЦикла и Пока ... Цикл ... КонецЦикла.

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

Ключевые отличия от Pascal

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

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

Pascal / BASIC

Ближайшие «родственники»: процедурный стиль, словесные операторные скобки, простой синтаксис. Отличие — слабая типизация и отсутствие компиляции.

SQL

Встроенный язык запросов 1С основан на SQL, но с ограничениями: нет DDL, свои функции и конструкции вроде ВЫБОР КОГДА.

JavaScript

Сходство в событийной модели форм и работе с объектами по ссылке. Синтаксис при этом совершенно другой.

C# / Java

Сходства почти нет: в 1С нет классов, наследования и интерфейсов в привычном виде, нет статической типизации.

Встроенный язык запросов: близкий родственник SQL

Вторая половина программирования в 1С — язык запросов. Он сознательно построен на базе SQL: ВЫБРАТЬ ... ИЗ ... ГДЕ ... СГРУППИРОВАТЬ ПО ... УПОРЯДОЧИТЬ ПО — прямое соответствие SELECT, FROM, WHERE, GROUP BY, ORDER BY. Разработчик, знающий SQL, читает запросы 1С практически без перевода.

Различия принципиальны. Запросы 1С работают не с физическими таблицами базы данных, а с объектами метаданных: «Документ.Реализация», «Справочник.Номенклатура». Платформа сама транслирует запрос в диалект конкретной СУБД (MS SQL, PostgreSQL, Oracle, IBM Db2). Прямое обращение к таблицам базы в обход платформы считается нарушением методики и может привести к рассогласованию данных.

Есть и собственные расширения: виртуальные таблицы регистров (РегистрНакопления.Продажи.Обороты), конструкция ВЫБОР КОГДА ... ТОГДА ... КОНЕЦ (аналог CASE), функции работы с датами и иерархией справочников.

Событийная модель: что общего с JavaScript

Код в 1С редко запускается «сверху вниз» как скрипт. Он реагирует на события: запись документа, открытие формы, нажатие кнопки, проведение. Обработчики ПередЗаписью, ПриЗаписи, ОбработкаПроведения — это по сути подписка на события, концептуально похожая на обработчики событий в JavaScript.

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

Чего в языке 1С нет

Чтобы не строить неверных ожиданий, полезно перечислить отсутствующее: нет классов и наследования, нет анонимных функций и замыканий, нет обработки исключений в стиле try/catch с типизированными исключениями (есть единая конструкция Попытка ... Исключение ... КонецПопытки), нет многопоточности в пользовательском коде. Фоновые задачи существуют, но управляются платформой, а не потоками вручную.

Как перейти в 1С-разработку с другого языка

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

Порядок освоения языка 1С
  1. 1
    Установите учебную версию платформы и откройте конфигуратор на демонстрационной базе.
  2. 2
    Повторите базовый синтаксис: переменные, условия, циклы, процедуры и функции, конструкция Попытка/Исключение.
  3. 3
    Изучите универсальные коллекции: Массив, Структура, Соответствие, ТаблицаЗначений — они заменяют привычные структуры данных.
  4. 4
    Освойте язык запросов: начните с простых ВЫБРАТЬ ... ИЗ справочника, затем соединения и виртуальные таблицы регистров.
  5. 5
    Разберите событийную модель: обработчики формы и события объектов (ПередЗаписью, ОбработкаПроведения).
  6. 6
    Напишите прикладную задачу целиком: отчёт по данным регистра с отбором по параметру.

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

Маршрут решения

С чего начать в зависимости от опыта

Вы знаете SQL и работали с базами данныхНачните с языка запросов и схемы метаданных — это даст самый быстрый результат.
Вы программировали на Pascal, Delphi или BASICСинтаксис освоите за пару дней; сосредоточьтесь на объектной модели и событиях.
Ваш опыт — JavaScript или PythonПривыкайте к отсутствию классов и анонимных функций; изучайте общие модули и коллекции платформы.
Опыта программирования нетНачинайте с учебных курсов по конфигурированию, а не с синтаксиса: контекст важнее грамматики.

Типичные ошибки при сравнении языков

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

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

Третья ошибка — игнорировать язык запросов и выбирать данные перебором в цикле. Конструкция вида «обойти все документы и сложить суммы» работает на порядки медленнее одного запроса с группировкой и считается признаком непрофессионального кода.

Типичные ошибки перехода в 1С
01
Перебор данных в цикле вместо запроса — резкое падение производительности на больших базах.
02
Попытка перенести ООП-паттерны из C#/Java — громоздкий и неподдерживаемый код.
03
Изменение данных запросом напрямую в СУБД — нарушение целостности и отказ поддержки.
04
Игнорирование разделения клиент/сервер — ошибки 'Метод недоступен в данном контексте' и лишние серверные вызовы.

FAQ: частые вопросы о языке 1С

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

Да, платформа поддерживает английский вариант всех ключевых слов: If, Do, While, Function, Return и другие. Код будет работать идентично. Однако в большинстве российских команд принят русский синтаксис, и смешивать стили в одном модуле не рекомендуется.

Подойдёт ли знание SQL для работы с запросами в 1С?

Да, это самое полезное предварительное знание. Конструкции SELECT, JOIN, WHERE, GROUP BY переносятся почти напрямую. Потребуется лишь изучить специфику: виртуальные таблицы регистров, параметры через амперсанд и отсутствие команд изменения данных.

Есть ли в 1С объектно-ориентированное программирование?

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

Сложно ли перейти в 1С с Python или JavaScript?

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

Компилируется ли код 1С?

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

Что изучать после базового синтаксиса?

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

Итог

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

Язык 1С ближе всего к Pascal и BASIC по синтаксису, к SQL — по встроенному языку запросов, к JavaScript — по событийной модели. Главная сложность освоения — не грамматика, а объектная модель платформы и учётная предметная область.