Разработка и Конфигурация · 10 мин
1С — язык программирования какого уровня
Разбираем, к какому уровню относится встроенный язык 1С:Предприятие, чем он отличается от C++ и Python, где применяется и с чего начать изучение.
Встроенный язык платформы 1С:Предприятие относится к языкам высокого уровня. Это означает, что разработчик описывает бизнес-логику в терминах предметной области — документы, справочники, проводки, накопление — а платформа сама транслирует код в низкоуровневые операции: обращения к СУБД, управление памятью, работу с транзакциями. Программист не управляет указателями, не выделяет память вручную и не пишет SQL-запросы для типовых операций.
По классификации язык 1С ближе всего к предметно-ориентированным языкам (DSL) высокого уровня с элементами четвёртого поколения (4GL). Он существует только внутри платформы и не компилируется в машинный код напрямую: код исполняется виртуальной машиной платформы, которая сама написана на C/C++. Это важно понимать при оценке производительности и выборе инструментов.
Практический вывод из этого факта: язык 1С спроектирован так, чтобы специалист по учёту мог быстро освоить разработку, а опытный программист — решать прикладные задачи без погружения в системное программирование. Ниже разберём, что это значит на практике и где проходят границы применимости.
Что означает «уровень языка» и где находится 1С
Уровень языка программирования показывает степень абстракции от аппаратного обеспечения. Низкоуровневые языки (ассемблер, машинный код) оперируют регистрами процессора и адресами памяти. Языки среднего уровня (C, C++) дают контроль над памятью, но уже имеют структуры данных и функции. Высокоуровневые языки (Python, Java, C#, встроенный язык 1С) скрывают детали железа и операционной системы, предлагая разработчику готовые абстракции.
Язык 1С стоит в верхней части этой шкалы, причём выше многих «классических» высокоуровневых языков по степени абстракции от инфраструктуры. Например, чтобы записать документ и сформировать движения по регистрам, разработчик не пишет ни одного SQL-запроса — платформа сама строит запросы к СУБД, управляет транзакциями и блокировками.
Дополнительно язык 1С относят к четвёртому поколению языков (4GL), потому что он ориентирован на работу с данными и декларативное описание структуры прикладного решения: метаданные конфигурации (справочники, документы, регистры, отчёты) описываются в конфигураторе, а код лишь дополняет их поведением.
Как устроен встроенный язык 1С технически
Код на встроенном языке хранится в модулях конфигурации: модулях объектов, форм, общих модулях, модулях менеджеров. При запуске платформа компилирует модуль в промежуточный байт-код, который исполняется встроенной виртуальной машиной. Это похоже на модель Java или C#, но без возможности запуска кода вне платформы.
Язык поддерживает два синтаксиса — русский и английский, причём ключевые слова взаимозаменяемы: Если ... Тогда ... КонецЕсли; эквивалентно If ... Then ... EndIf;. Типизация динамическая: тип переменной определяется значением в момент присваивания. Сборка мусора и управление памятью полностью на стороне платформы.
Пример типичного кода, демонстрирующего высокий уровень абстракции:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Продажи.Номенклатура,
| СУММА(Продажи.Количество) КАК Количество
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|СГРУППИРОВАТЬ ПО
| Продажи.Номенклатура";
Результат = Запрос.Выполнить().Выгрузить();
Обратите внимание: запрос написан на собственном языке запросов 1С, который внешне похож на SQL, но оперирует объектами конфигурации, а не физическими таблицами. Платформа сама преобразует его в SQL конкретной СУБД — MS SQL Server, PostgreSQL, Oracle или IBM Db2.
Сравнение с другими языками по уровню абстракции
Чтобы точнее позиционировать язык 1С, полезно сопоставить его с распространёнными языками по ключевым признакам.
| Критерий | C / C++ | Python / C# | Встроенный язык 1С |
|---|---|---|---|
| Уровень | Низкий / средний | Высокий | Высокий (4GL, DSL) |
| Управление памятью | Ручное | Автоматическое | Автоматическое |
| Работа с БД | Через библиотеки и SQL | SQL или ORM | Встроенные объекты и язык запросов |
| Типизация | Статическая | Динамическая / статическая | Динамическая |
| Исполнение | Машинный код | ВМ / интерпретатор | Виртуальная машина платформы |
| Область применения | Универсальная | Универсальная | Только внутри платформы 1С |
Ключевое отличие: Python или C# — языки общего назначения, на них пишут что угодно. Язык 1С решает одну задачу — описание прикладной логики учётных систем — и делает это максимально коротким способом за счёт готовых абстракций платформы.
Сравнение вариантов
Подходит для любой логики внутри конфигурации: проведение, расчёты, обмены. Ограничение — работает только внутри платформы.
Нужны, когда требуется оборудование, криптография или производительность, недоступная платформе. Требуют навыков системного программирования.
Позволяют связать 1С с кодом на других языках через веб-сервисы, не смешивая стеки внутри одной системы.
Что высокий уровень языка даёт на практике
Первое следствие — скорость разработки. Типовые операции (запись объекта, проведение документа, построение отчёта через СКД) требуют минимального кода, потому что платформа берёт на себя формирование SQL, управление транзакциями, контроль прав доступа и блокировки. Задача, которая на «голом» SQL и C# заняла бы сотни строк, в 1С часто решается несколькими строками кода и настройками в метаданных.
Второе следствие — низкий порог входа. Специалисту не нужно знать устройство операционных систем, сетевые протоколы или системы управления памятью. Достаточно понимать предметную область (учёт, торговлю, зарплату) и объектную модель конфигурации. Именно поэтому многие 1С-разработчики приходят из бухгалтерии и экономики.
Третье следствие — ограничения. Высокоуровневость означает, что платформа «решает за вас»: нельзя напрямую управлять потоками на низком уровне, работать с указателями, писать драйверы или высоконагруженные сетевые сервисы. Если задача выходит за рамки учётной системы, язык 1С не подходит, и правильное решение — интеграция с внешним кодом.
Где язык 1С не подходит и что использовать вместо него
Есть классы задач, для которых встроенный язык не предназначен, и попытки решить их «в лоб» приводят к проблемам производительности или поддержки:
- Обработка больших объёмов данных в реальном времени — лучше выносить на сторону СУБД или внешние сервисы.
- Работа с оборудованием (сканеры, ККТ, весы) нестандартным способом — используются внешние компоненты по технологии Native API или COM.
- Математически интенсивные вычисления, машинное обучение, обработка изображений — выносятся в сервисы на Python, C# или C++ с обменом через HTTP.
- Веб-фронтенд и мобильные приложения общего назначения — разрабатываются на профильных технологиях, 1С выступает бэкендом учётных данных.
Признак того, что задача выходит за пределы платформы: код становится громоздким, работает медленно, и приходится «бороться» с платформой, а не использовать её механизмы. Это сигнал пересмотреть архитектуру, а не писать обходные костыли.
С чего начать изучение языка 1С
Оптимальный путь для новичка — идти от предметной области к синтаксису, а не наоборот. Сначала нужно понять, что такое справочник, документ, регистр накопления и регистр сведений, как документ формирует движения. Без этого знание операторов языка не даёт практической пользы.
Затем осваивается базовый синтаксис: переменные, условия, циклы, процедуры и функции, работа с коллекциями (массивы, структуры, соответствия, таблицы значений). Следующий шаг — язык запросов и система компоновки данных, потому что большая часть реальной разработки — это выборки данных и отчёты.
- 1Установите учебную версию платформы и откройте демонстрационную конфигурацию
- 2Изучите объекты метаданных: справочники, документы, регистры — и их связи
- 3Освойте базовый синтаксис: условия, циклы, процедуры, коллекции
- 4Научитесь писать запросы в конструкторе запросов и читать их текст
- 5Напишите простое проведение документа с движениями по регистру
- 6Проверьте результат: движения видны в регистре, отчёт по регистру показывает корректные итоги
Для проверки понимания полезно выполнить сквозное упражнение: создать справочник товаров, документ поступления, регистр остатков и отчёт по остаткам. Если вся цепочка работает и итоги сходятся — базовый уровень освоен.
Частые вопросы об уровне и возможностях языка 1С
1С — это язык высокого или низкого уровня?
Однозначно высокого. Разработчик не управляет памятью, не пишет SQL для типовых операций и не работает с системными вызовами. По степени абстракции язык 1С стоит даже выше Python или C#, потому что дополнительно скрывает слой работы с СУБД.
Относится ли язык 1С к 4GL?
Да, его принято относить к языкам четвёртого поколения: он ориентирован на работу с данными, декларативное описание структуры приложения через метаданные и минимизацию кода для типовых учётных операций.
Можно ли использовать язык 1С вне платформы?
Нет. Код исполняется только виртуальной машиной платформы 1С:Предприятие. Для задач вне платформы применяются другие языки, а связь с 1С организуется через веб-сервисы, HTTP-интерфейсы или внешние компоненты.
Сложно ли перейти на 1С программисту, знающему Python или C#?
Синтаксис осваивается быстро — язык проще большинства языков общего назначения. Основное время уходит на изучение объектной модели конфигурации, механизмов проведения, запросов и СКД, то есть предметной специфики платформы.
Почему код 1С иногда работает медленно, если язык высокоуровневый?
Почти всегда причина не в языке, а в архитектуре решения: запросы в циклах, отсутствие индексов по используемым полям, чтение лишних данных, неоптимальная структура регистров. Оптимизация начинается с анализа запросов и плана их выполнения на стороне СУБД.
Нужно ли знать SQL для разработки на 1С?
Для обычной разработки достаточно встроенного языка запросов 1С. Знание SQL полезно на уровне администрирования и диагностики производительности — чтобы читать планы запросов и понимать, как платформа транслирует запросы в конкретную СУБД.
Что важно запомнить
Встроенный язык 1С — высокоуровневый предметно-ориентированный язык (4GL), исполняемый платформой. Его сила — в скорости разработки учётной логики, его граница — задачи вне платформы. Эффективная работа строится на понимании метаданных, запросов и механизмов платформы, а не на системном программировании.