Встроенный язык 1С:Предприятия: имя, синтаксис, объекты и инструменты разработчика
Содержание
Официально язык программирования 1С называется встроенный язык платформы «1С:Предприятие». Отдельного «брендового» имени у него нет: в документации фирмы 1С он так и фигурирует — «встроенный язык», а в разговоре программисты говорят просто «язык 1С» или «код на 1С». Называть его «1С++» или «1С-скрипт» неправильно: это либо шутки, либо названия сторонних проектов.
Язык существует только внутри платформы. На нём пишут логику конфигураций — Бухгалтерии, ЗУП, Управления торговлей, ERP — и всё, что дорабатывают под конкретную фирму.
Как называется язык 1С и откуда он появился
У языка нет версии в привычном смысле, как у Python 3.12. Его возможности определяет версия платформы: что умеет платформа 8.3.2x, то и доступно в коде.
Коротко об истории:
- 📅 1С:Предприятие 7.x (конец 1990-х) — у программы уже был встроенный язык с русскими ключевыми словами. Конфигурации писали в Конфигураторе, код жил в модулях.
- 📅 1С:Предприятие 8.0 (2003) — платформу переписали заново. Язык сохранил общий вид, но получил объектную модель, язык запросов нового поколения и разделение на клиент и сервер.
- 📅 8.2 — появились управляемые формы и тонкий клиент. Код формы стал делиться директивами на клиентскую и серверную части.
- 📅 8.3 — веб-клиент и мобильная платформа, расширения конфигурации (с 8.3.6), интерфейс «Такси», дальнейшее развитие асинхронных методов.
Код 7.7 и код 8.3 внешне похожи, но перенести модуль один в один нельзя: объекты, формы и запросы устроены иначе.
Если в вакансии пишут «программист 1С 8.3» — речь именно о встроенном языке плюс язык запросов плюс знание типовых конфигураций. Сам язык — только треть работы.
Какие ещё «языки» есть внутри 1С
Новичков путает, что в платформе несколько языков сразу. Их стоит различать:
| Язык | Для чего | Пример |
|---|---|---|
| Встроенный язык | логика: обработка документов, расчёты, формы | Если Сумма > 0 Тогда |
| Язык запросов | выборка данных из базы | ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура |
| Язык выражений СКД | поля и отборы в отчётах на схеме компоновки | Сумма(Количество) |
Когда говорят «язык 1С», обычно имеют в виду встроенный язык и язык запросов вместе.
Синтаксис языка 1С: что видно в первом же модуле
Главное отличие, которое бросается в глаза, — русские ключевые слова. При этом у каждого есть английский двойник, и оба варианта равноправны: Если и If, Процедура и Procedure, Пока и While. В одном модуле их можно смешивать, но так никто не делает: типовые конфигурации написаны по-русски.
Пример процедуры, которая считает сумму строк табличной части:
Функция СуммаДокумента(Товары) Экспорт
Итого = 0;
Для Каждого Строка Из Товары Цикл
Если Строка.Количество > 0 Тогда
Итого = Итого + Строка.Количество * Строка.Цена;
КонецЕсли;
КонецЦикла;
Возврат Итого;
КонецФункции
Что стоит заметить в этом фрагменте:
- 🔹 Блоки закрываются словами, а не скобками:
КонецЕсли,КонецЦикла,КонецФункции. - 🔹 Точка с запятой разделяет операторы.
- 🔹 Регистр не важен:
итогоиИтого— одна переменная. - 🔹 Типизация динамическая: тип переменной не объявляют, он определяется значением.
- 🔹 Комментарий начинается с
//, многострочных комментариев нет. - 🔹 Экспорт после имени делает процедуру или функцию доступной из других модулей.
Основные конструкции
| Конструкция | Русский вариант | Английский вариант |
|---|---|---|
| Условие | Если … Тогда … ИначеЕсли … Иначе … КонецЕсли | If … Then … ElsIf … Else … EndIf |
| Цикл по счётчику | Для Сч = 1 По 10 Цикл … КонецЦикла | For … To … Do … EndDo |
| Цикл по коллекции | Для Каждого Эл Из Список Цикл | For Each … In … Do |
| Цикл с условием | Пока Условие Цикл | While … Do |
| Обработка ошибок | Попытка … Исключение … КонецПопытки | Try … Except … EndTry |
| Тернарный оператор | ?(Условие, А, Б) | ?(…) |
Обработка исключений выглядит так:
Попытка
Результат = 100 / Делитель;
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Ошибка расчёта: " + ОписаниеОшибки();
Сообщение.Сообщить();
КонецПопытки;
Директивы компиляции
В управляемом приложении один и тот же модуль формы исполняется частично на компьютере пользователя, частично на сервере. Где именно — задают директивы перед процедурой:
&НаКлиенте— код выполняется в клиентском приложении;&НаСервере— на сервере, с доступом к данным формы;&НаСервереБезКонтекста— на сервере, без передачи формы (быстрее, меньше трафика);&НаКлиентеНаСервереБезКонтекста— можно вызывать и с клиента, и с сервера.
Именно здесь спотыкаются те, кто пришёл из других языков: на клиенте нельзя обратиться к базе напрямую, а лишний серверный вызов в цикле тормозит форму.
Обращение к реквизитам ссылки «через точку» на клиенте (Документ.Контрагент.ИНН) в управляемой форме не работает. Нужные значения получают серверным вызовом или запросом.
Объектная модель: справочники, документы, регистры и запросы
Сильная сторона языка 1С — он заранее «знает» про учётные сущности. Программист не создаёт таблицы в базе вручную: он добавляет в дерево конфигурации объект метаданных, а платформа сама строит таблицы, формы по умолчанию и программный интерфейс.
Основные прикладные объекты:
- 📁 Справочники — списки: номенклатура, контрагенты, сотрудники.
- 📄 Документы — события учёта: реализация, поступление, начисление зарплаты.
- 📊 Регистры сведений — данные с привязкой к измерениям и дате: курсы валют, цены.
- 📦 Регистры накопления — остатки и обороты: товары на складах, взаиморасчёты.
- 📒 Регистры бухгалтерии — проводки по плану счетов.
- 🧮 Регистры расчёта — начисления с периодами действия, основа ЗУП.
- 📋 Перечисления, планы видов характеристик, планы счетов, бизнес-процессы, задачи.
Ссылка, объект, менеджер
Работа с данными строится на трёх понятиях:
- Менеджер — точка входа к типу:
Справочники.Контрагенты,Документы.РеализацияТоваровУслуг. Через него ищут и создают элементы. - Ссылка — лёгкий указатель на запись. Через неё можно прочитать реквизиты, но нельзя записать.
- Объект — полная копия записи в памяти. Его меняют и записывают.
Ссылка = Справочники.Контрагенты.НайтиПоКоду("000000123");
Если Не Ссылка.Пустая() Тогда
Объект = Ссылка.ПолучитьОбъект();
Объект.Комментарий = "Проверен";
Объект.Записать();
КонецЕсли;
Реквизит Комментарий здесь для примера: состав реквизитов справочника зависит от конфигурации.
Язык запросов
Для выборки данных используют язык запросов, похожий на SQL, но тоже с русскими словами и обращением к объектам конфигурации, а не к физическим таблицам. Особенность — виртуальные таблицы регистров: остатки и обороты на дату получают одной строкой, без ручного суммирования движений.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад) КАК Остатки";
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Склад", Склад);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// обработка строки
КонецЦикла;
Имена регистров и реквизитов в примере условные: в каждой конфигурации они свои. Точные имена смотрят в дереве метаданных Конфигуратора.
Писать запрос руками не обязательно: в Конфигураторе есть конструктор запроса — его вызывают из контекстного меню в модуле. Он собирает текст по выбранным таблицам и полям.
Где писать и отлаживать код на 1С
Отдельный редактор или компилятор ставить не нужно. Код пишут в одной из двух сред.
Конфигуратор
Входит в платформу: тот же ярлык 1С, режим запуска «Конфигуратор». В нём дерево метаданных, редактор модулей с подсветкой и контекстной подсказкой, конструкторы запросов, форм и макетов, сравнение и объединение конфигураций, хранилище для командной работы.
Отладка из Конфигуратора:
- Поставьте точку останова на строке — клавиша
F9. - Запустите отладку —
F5. Откроется пользовательский режим. - Выполните действие, которое вызывает код. Выполнение остановится на точке.
- Шагайте:
F10— через процедуру,F11— с заходом внутрь. - Смотрите значения: наведите курсор на переменную или откройте «Вычислить выражение» (
Shift+F9).
Полезен и замер производительности: он показывает, сколько времени заняла каждая строка кода. С него начинают разбор медленных форм и отчётов.
1C:Enterprise Development Tools (EDT)
Среда на базе Eclipse, которую развивает фирма 1С. Хранит конфигурацию в виде файлов, поэтому удобно работает с Git, даёт рефакторинг, проверку кода на лету и навигацию по ссылкам. EDT требовательнее к ресурсам компьютера: на слабой машине с 8 ГБ памяти крупная конфигурация вроде ERP открывается тяжело.
| Критерий | Конфигуратор | EDT |
|---|---|---|
| Установка | вместе с платформой | отдельно |
| Командная работа | хранилище конфигурации | Git |
| Проверки кода | синтаксический контроль | постоянный анализ, предупреждения |
| Нагрузка на ПК | умеренная | высокая |
| Где чаще встречается | поддержка у клиентов, франчайзи | продуктовые команды, крупные проекты |
На практике многие держат обе среды: правят и отлаживают у клиента в Конфигураторе, а большие доработки ведут в EDT.
Как расширяют типовые конфигурации без правки исходников
Типовые решения фирма 1С регулярно обновляет. Если править их код напрямую, каждое обновление превращается в ручное сравнение и объединение. Поэтому доработки стараются выносить наружу.
Основные способы, от простого к сложному:
- 🧩 Внешние обработки (
.epf) и внешние отчёты (.erf) — отдельные файлы, которые подключают в пользовательском режиме. Подходят для печатных форм, загрузок, разовых операций. - 🧩 Расширения конфигурации (
.cfe) — появились в 8.3.6. В расширении можно добавить реквизиты, формы, команды и перехватить типовые процедуры аннотациями&Перед,&После,&Вместо. Основная конфигурация при этом остаётся на поддержке. - 🧩 Внешние компоненты — библиотеки на C++ (технология Native API) или COM-объекты. Нужны там, где встроенного языка не хватает: работа с оборудованием, нестандартные форматы, системные вызовы.
- 🧩 Интеграционные механизмы — HTTP-сервисы и веб-сервисы, которые публикуются на веб-сервере, стандартный интерфейс OData, COM-соединение с базой извне.
Пример перехвата в расширении — код выполнится после типовой процедуры записи:
&После("ПередЗаписью")
Процедура Расш_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если Не ЗначениеЗаполнено(Комментарий) Тогда
Комментарий = "Создан " + Формат(ТекущаяДатаСеанса(), "ДФ=dd.MM.yyyy");
КонецЕсли;
КонецПроцедуры
Расширение с перехватом &Вместо полностью заменяет типовую процедуру. После обновления конфигурации типовой код мог измениться — расширение стоит проверять на копии базы до установки обновления в рабочую.
Чем язык 1С отличается от Python, Java и C#
Встроенный язык — предметно-ориентированный. Он создан, чтобы быстро описывать учёт, и в этом сильнее универсальных языков. За пределами учёта он слабее.
| Признак | Язык 1С | Python / Java / C# |
|---|---|---|
| Где выполняется | только в платформе 1С:Предприятие | где угодно |
| Ключевые слова | русские и английские | английские |
| Типизация | динамическая | Python — динамическая, Java/C# — статическая |
| Классы и наследование | нет, есть готовые объекты метаданных | есть |
| Работа с базой | встроена: объекты, запросы, регистры | через ORM и драйверы |
| Формы и интерфейс | генерируются платформой | отдельные фреймворки |
| Лицензия | нужна лицензия платформы | обычно бесплатно |
| Библиотеки | БСП и типовые общие модули | огромные экосистемы пакетов |
Что непривычно программисту, пришедшему со стороны:
- ❌ Нет классов и собственных типов. Структуры данных строят из
Структура,Соответствие,ТаблицаЗначений,Массив. - ❌ Нет пакетного менеджера в привычном смысле. Повторно используемый код живёт в общих модулях и в Библиотеке стандартных подсистем (БСП), на которой построены типовые конфигурации.
- ✅ Нет нужды проектировать таблицы, транзакции и блокировки с нуля: платформа делает это за программиста при записи объектов и проведении документов.
- ✅ Интерфейс почти бесплатно: форма по умолчанию появляется сразу после создания объекта.
Вне платформы встроенный язык не исполняется. Есть независимый открытый проект OneScript, который запускает скрипты с похожим синтаксисом, — им пользуются для автоматизации сборок и администрирования, но это не продукт фирмы 1С и с базами напрямую он не работает .
Изучение языка 1С и куда он развивается
Порог входа невысокий: базовый синтаксис осваивают за пару недель. Сложность в другом — в объёме платформы и типовых конфигураций. Программист, который знает язык, но не понимает, как устроены проведение документа и регистры, на реальном проекте бесполезен.
Разумный порядок изучения:
- Учебная версия платформы — бесплатная, с ограничениями, для самостоятельной практики. Без лицензии рабочая платформа базу не запустит, поэтому начинать стоит с неё.
- Синтаксис и коллекции — условия, циклы,
Массив,Структура,ТаблицаЗначений. - Объекты метаданных — создайте учебную конфигурацию со справочником, документом и регистром накопления, научитесь проводить документ.
- Язык запросов — виртуальные таблицы остатков и оборотов, соединения, параметры.
- Управляемые формы и директивы — клиент-серверное взаимодействие.
- СКД — отчёты на схеме компоновки данных.
- Типовая конфигурация — разберите, как устроен, например, документ реализации в Бухгалтерии 3.0, и напишите к нему расширение.
Уровень подтверждают сертификаты фирмы 1С: «1С:Профессионал» — тест на знание платформы или конкретной конфигурации, и «1С:Специалист» — экзамен с практической задачей, который сдают очно. Работодатели во франчайзинговой сети часто смотрят именно на них.
Куда движется язык: в новых релизах 8.3 добавляются асинхронные методы с Асинх и Ждать — вместо старых модальных вызовов с обработчиками оповещения код читается последовательно. Растёт роль EDT и Git, а фирма 1С развивает отдельную технологию «1С:Предприятие.Элемент» со своим языком, ориентированным на веб-приложения. Для учётных систем на платформе 8.3 встроенный язык остаётся основным, и спрос на программистов 1С держится стабильно.