Открыть сервис

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

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

История

Разработка встроенного языка началась в конце 1980-х годов в московской компании «1С», основанной Борисом Нуралиевым. Первая версия платформы «1С:Предприятие» (версия 6.0) была выпущена в 1996 году. Язык изначально создавался как средство для настройки бухгалтерских и складских конфигураций и имел ограниченные возможности по сравнению с универсальными языками программирования.

В 2002 году вышла платформа версии 7.7, которая стала массово использоваться в России и странах СНГ. Встроенный язык этой версии был процедурным, не поддерживал объектно-ориентированные конструкции и имел ограниченный набор типов данных. Основным способом разработки было написание модулей на встроенном языке в среде «Конфигуратор».

Кардинальные изменения произошли в 2008 году с выходом платформы «1С:Предприятие 8.0» (позже — версии 8.1, 8.2, 8.3). Встроенный язык был существенно переработан: появилась поддержка объектной модели, управляемые формы, система типов стала более строгой и расширенной. Версия 8.3 (2012 год) добавила возможность использования управляемых блокировок, работу с веб-сервисами и поддержку языка запросов (SQL-подобный язык для работы с данными).

На 2025 год актуальной является платформа версии 8.3, которая продолжает развиваться. Встроенный язык остаётся закрытым и проприетарным — его реализация является коммерческой тайной фирмы «1С».

Синтаксис и семантика

Встроенный язык 1С является интерпретируемым (компиляция в байт-код производится на этапе разработки или при первом запуске). Он сочетает черты процедурного, объектно-ориентированного и декларативного (через язык запросов) программирования.

Основные элементы

  • Переменные: объявляются оператором Перем (глобальные) или автоматически при присваивании (локальные). Тип переменной динамический, определяется значением.
  • Типы данных: Число, Строка, Дата, Булево, Неопределено, NULL, а также ссылочные типы (справочники, документы, регистры и т. д.). Поддерживаются массивы, структуры, соответствия, таблицы значений.
  • Операторы: условный оператор Если...Тогда...Иначе...КонецЕсли, циклы Для...По...Цикл, Пока...Цикл, Для каждого...Из...Цикл.
  • Процедуры и функции: объявляются ключевыми словами Процедура и Функция. Поддерживаются рекурсия, передача параметров по значению и по ссылке.
  • Объектная модель: объекты создаются через конструкторы (например, Новый СправочникОбъект.Контрагенты). Поддерживаются наследование (через механизм расширений), полиморфизм и инкапсуляция на уровне модулей.

Отличительные особенности

  • Русскоязычный синтаксис: все ключевые слова, имена встроенных функций и типов пишутся на русском языке (например, Сообщить("Привет") вместо print). Это сделано для снижения порога входа для бухгалтеров и экономистов, не знакомых с английским.
  • Отсутствие указателей и прямой работы с памятью.
  • Автоматическое управление памятью (сборка мусора).
  • Интеграция с метаданными: язык напрямую работает с объектами конфигурации (справочники, документы, регистры), что упрощает разработку учётных систем.

Типы данных и структуры

Примитивные типы

  • Число — 64-разрядное вещественное число (двойная точность). Поддерживаются целые и дробные значения.
  • Строка — последовательность символов в кодировке Unicode (UTF-16). Длина ограничена памятью.
  • Дата — хранит дату и время с точностью до секунды.
  • Булево — логические значения Истина и Ложь.
  • Неопределено — аналог null в других языках, обозначает отсутствие значения.
  • NULL — значение, используемое в запросах к базе данных.

Коллекции

  • Массив — упорядоченный набор элементов произвольных типов.
  • Структура — набор пар «ключ-значение» с фиксированным набором ключей.
  • Соответствие — аналог словаря (ключ — произвольный тип).
  • ТаблицаЗначений — таблица с колонками и строками, используется для хранения и обработки наборов данных.
  • ДеревоЗначенийиерархическая структура.

Ссылочные типы

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

Модули и контекст выполнения

Код на встроенном языке размещается в модулях, которые привязаны к определённым объектам конфигурации или к глобальному контексту.

Типы модулей

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

Контекст выполнения

Код выполняется в одном из двух контекстов:

  • Толстый клиент — на стороне пользовательского компьютера (Windows).
  • Тонкий клиент и веб-клиент — на стороне сервера (в платформе версии 8.2+).
  • Серверный контекст — выполнение на сервере 1С:Предприятия (требуется явное указание директив &НаСервере, &НаКлиенте).

Язык запросов

Отдельной, но неотъемлемой частью встроенного языка является язык запросов (SQL-подобный декларативный язык). Он используется для выборки данных из базы (как правило, на СУБД Microsoft SQL Server, PostgreSQL или собственном формате файлов .1CD). Запросы пишутся в текстовом виде и выполняются через объект Запрос.

Пример запроса: ``1c Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Контрагенты.Наименование, | Контрагенты.ИНН |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.ЭтоГруппа = Ложь"; Результат = Запрос.Выполнить(); ``

Язык запросов поддерживает соединения, группировки, агрегатные функции, вложенные запросы, временные таблицы и работу с регистрами.

Применение

Встроенный язык 1С используется для разработки и модификации конфигураций, которые решают задачи:

  • Бухгалтерский и налоговый учёт (типовые конфигурации «Бухгалтерия предприятия», «Управление торговлей»).
  • Управление персоналом и расчёт зарплаты («Зарплата и управление персоналом»).
  • Документооборот («1С:Документооборот»).
  • Производственный учёт («Управление производственным предприятием», «ERP Управление холдингом»).
  • Интеграция с внешними системами (через COM-соединение, веб-сервисы, HTTP-запросы, обмен файлами XML/JSON).
  • Разработка веб-приложений (с использованием управляемых форм и публикации на веб-сервере).

По данным аналитиков, на 2024 год доля платформы «1С:Предприятие» на рынке автоматизации учёта в России составляет более 60% (среди коммерческих решений). Встроенный язык является основным инструментом для тысяч разработчиков (по оценкам, от 200 до 400 тысяч специалистов в России и СНГ).

Инструменты разработки

Основной средой разработки является Конфигуратор — встроенное приложение платформы, которое предоставляет редактор кода, отладчик, метаданные и средства администрирования. С 2018 года фирма «1С» развивает альтернативную среду — EDT (1С:Enterprise Development Tools) на базе Eclipse, которая поддерживает подсветку синтаксиса, автодополнение, рефакторинг и интеграцию с системами контроля версий (Git).

Ограничения и критика

Встроенный язык 1С подвергается критике по ряду причин:

  • Закрытость и проприетарность — невозможно использовать язык вне платформы «1С:Предприятие». Нет открытой спецификации или независимой реализации.
  • Отсутствие современных парадигм — язык не поддерживает функциональное программирование, лямбда-выражения (до версии 8.3.10, где появились анонимные процедуры), асинхронность, многопоточность (выполнение однопоточное).
  • Производительность — интерпретируемый характер и работа с метаданными через рефлексию приводят к снижению скорости по сравнению с компилируемыми языками.
  • Русскоязычный синтаксис — хотя это упрощает обучение для русскоязычных пользователей, он затрудняет использование языка за пределами русскоязычного мира и интеграцию с международными стандартами.
  • Сложность отладки — отладчик Конфигуратора считается менее удобным по сравнению с современными IDE (например, Visual Studio или IntelliJ IDEA).

Тем не менее, встроенный язык остаётся доминирующим в своей нише благодаря глубокой интеграции с платформой, обширной библиотеке типовых конфигураций и широкому распространению продуктов «1С» в России.

Интересные факты

  • Встроенный язык 1С является одним из немногих промышленных языков программирования, где ключевые слова пишутся на русском языке (наряду с некоторыми диалектами Pascal и учебными языками).
  • В платформе версии 7.7 язык поддерживал только 32-разрядные числа и не имел встроенной работы с датами (дата хранилась как число).
  • С 2022 года в связи с уходом из России ряда западных вендоров (Oracle, SAP, Microsoft) спрос на разработчиков 1С значительно вырос, что привело к росту числа вакансий и зарплат в этой сфере.
  • Существуют проекты по трансляции кода 1С в другие языки (например, OneScript — попытка создать независимый интерпретатор, совместимый с синтаксисом 1С), однако они не получили официальной поддержки фирмы «1С».

Источники

  • Официальная документация фирмы «1С»: «1С:Предприятие 8.3. Руководство разработчика».
  • Нуралиев Б. Г. «1С:Предприятие 8.0. Описание встроенного языка». — М.: 1С-Паблишинг, 2008.
  • Аналитические отчёты TAdviser и CNews по рынку ERP-систем в России (2023–2024).
  • Статьи на портале «Инфостарт» (сообщество разработчиков 1С).
  • Материалы конференций «1С:Профессионал» (2019–2024).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →