Разработка и Конфигурация · 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) и массивов фиксированной длины используются универсальные коллекции: массивы, структуры, соответствия, таблицы значений.
Сходства и различия с популярными языками
Ближайшие «родственники»: процедурный стиль, словесные операторные скобки, простой синтаксис. Отличие — слабая типизация и отсутствие компиляции.
Встроенный язык запросов 1С основан на SQL, но с ограничениями: нет DDL, свои функции и конструкции вроде ВЫБОР КОГДА.
Сходство в событийной модели форм и работе с объектами по ссылке. Синтаксис при этом совершенно другой.
Сходства почти нет: в 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Установите учебную версию платформы и откройте конфигуратор на демонстрационной базе.
- 2Повторите базовый синтаксис: переменные, условия, циклы, процедуры и функции, конструкция Попытка/Исключение.
- 3Изучите универсальные коллекции: Массив, Структура, Соответствие, ТаблицаЗначений — они заменяют привычные структуры данных.
- 4Освойте язык запросов: начните с простых ВЫБРАТЬ ... ИЗ справочника, затем соединения и виртуальные таблицы регистров.
- 5Разберите событийную модель: обработчики формы и события объектов (ПередЗаписью, ОбработкаПроведения).
- 6Напишите прикладную задачу целиком: отчёт по данным регистра с отбором по параметру.
Проверка результата проста: если вы можете написать отчёт, который соединяет данные документа и регистра, отбирает их по параметру и выводит в табличный документ, — базовый уровень пройден. Дальше идут типовые механизмы: подсистемы БСП, обмены данными, расширения конфигурации.
С чего начать в зависимости от опыта
Типичные ошибки при сравнении языков
Первая ошибка — считать язык 1С «примитивным» из-за русского синтаксиса и простоты грамматики. Сложность 1С-разработки находится не в языке, а в предметной области: учётные механизмы, проведение документов, движения по регистрам требуют понимания бизнес-логики.
Вторая ошибка — искать прямые аналоги привычных конструкций. Попытка реализовать наследование через копирование кода между модулями или эмулировать многопоточность через циклы ожидания приводит к хрупким решениям. У платформы есть собственные механизмы: подписки на события, фоновые задания, расширения.
Третья ошибка — игнорировать язык запросов и выбирать данные перебором в цикле. Конструкция вида «обойти все документы и сложить суммы» работает на порядки медленнее одного запроса с группировкой и считается признаком непрофессионального кода.
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 — по событийной модели. Главная сложность освоения — не грамматика, а объектная модель платформы и учётная предметная область.