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

· 10 мин

Содержание

В 1С:Предприятие программы пишут на собственном языке платформы — он так и называется: «встроенный язык 1С:Предприятия». Это не Basic, не Pascal и не диалект SQL. У языка русские ключевые слова (Если, Пока, Процедура) и полный английский эквивалент (If, While, Procedure), так что один и тот же код можно написать двумя способами.

Сама платформа написана на C++, но прикладному разработчику это не нужно знать: бухгалтерия, ЗУП, торговля и любые доработки делаются на встроенном языке. Рядом с ним живёт ещё один язык — язык запросов, похожий на SQL. Для бизнес-пользователя вывод простой: чтобы доработать 1С, нужен программист 1С, а не просто «программист на C# или Python».

Встроенный язык платформы 1С: что это за язык

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

Почему его путают с Basic? Синтаксис действительно напоминает Visual Basic и Pascal:

  • 🔤 блоки закрываются словами, а не скобками: КонецЕсли, КонецЦикла, КонецПроцедуры;
  • 📝 переменные не нужно объявлять с типом;
  • 🔁 циклы Для, Для Каждого, Пока читаются почти как обычная речь.

Но сходство внешнее. В Basic нет типов «ДокументОбъект», «РегистрСведенийМенеджер» или «ТаблицаЗначений», нет директив клиент-серверного выполнения. Язык живёт только внутри платформы 1С и без неё не запускается.

Ключевые свойства языка:

СвойствоКак устроено в 1С
ТипизацияДинамическая: тип переменной определяется значением
ВыполнениеКод компилируется платформой при выполнении, отдельного файла .exe нет
Регистр буквНе важен: сообщить() и Сообщить() — одно и то же
Ключевые словаРусские или английские, можно смешивать
ПарадигмаПроцедурная, с объектной моделью платформы; своих классов создать нельзя
Где работаетТолько в среде 1С:Предприятие 8.3

Отсутствие собственных классов — главное, что удивляет программистов из Java и C#. Роль классов играют объекты метаданных: справочник «Контрагенты» — это и есть «класс», а его модуль объекта — «методы».

Синтаксис языка 1С на примерах

Ниже — базовые конструкции, без которых не обходится ни одна конфигурация. Каждый оператор завершается точкой с запятой, комментарии начинаются с //.

Переменные, условия и процедуры

Процедура ПроверитьСумму(Сумма)

    Лимит = 100000;

    Если Сумма > Лимит Тогда
        Сообщить("Сумма превышает лимит: " + Формат(Сумма, "ЧГ=0"));
    ИначеЕсли Сумма = 0 Тогда
        Сообщить("Сумма не заполнена");
    Иначе
        Сообщить("Сумма в пределах лимита");
    КонецЕсли;

КонецПроцедуры

Функция отличается от процедуры тем, что возвращает значение через Возврат:

Функция СуммаСНДС(Сумма, Ставка = 20)
    Возврат Сумма + Сумма * Ставка / 100;
КонецФункции

Для 1000 рублей и ставки по умолчанию функция вернёт 1200.

Циклы и коллекции

Массив = Новый Массив;
Массив.Добавить("Склад 1");
Массив.Добавить("Склад 2");

Для Каждого Элемент Из Массив Цикл
    Сообщить(Элемент);
КонецЦикла;

Для Сч = 1 По 3 Цикл
    Сообщить("Проход № " + Сч);
КонецЦикла;

Самые ходовые универсальные коллекции: Массив, Структура (ключ — значение), Соответствие, ТаблицаЗначений, СписокЗначений.

Тот же код на английском

Procedure CheckAmount(Amount)
    If Amount > 100000 Then
        Message("Limit exceeded");
    EndIf;
EndProcedure

Платформа выполнит оба варианта одинаково. На практике типовые конфигурации написаны по-русски, и почти все команды разработчиков пишут на русском.

Обработка исключений

Попытка
    Результат = 10 / Делитель;
Исключение
    Сообщить("Ошибка: " + ОписаниеОшибки());
КонецПопытки;

Где работает код на языке 1С: модули и задачи

Код в 1С не лежит в одном файле. Он разнесён по модулям, и у каждого своя роль. Модули открываются в Конфигураторе или в 1C:Enterprise Development Tools (EDT).

Основные виды модулей:

  • 📄 модуль объекта — логика конкретного документа или справочника: проверка заполнения, обработка проведения, действия при записи;
  • 🗂 модуль менеджера — процедуры для всего вида объектов, например формирование печатной формы;
  • 🖥 модуль формы — реакция на нажатия кнопок и изменение полей;
  • 🧰 общие модули — библиотека процедур, которые вызываются из любого места;
  • 🚀 модуль сеанса и модуль управляемого приложения — действия при запуске программы;
  • 🔗 модуль внешнего соединения — код, который выполняется при подключении к базе через COM.

Клиент и сервер

Главная особенность языка 1С — директивы компиляции. Перед процедурой в модуле формы указывают, где её выполнять:

&НаКлиенте
Процедура Рассчитать(Команда)
    ПосчитатьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПосчитатьНаСервере()
    // здесь доступна база данных и объекты
КонецПроцедуры

Есть ещё &НаСервереБезКонтекста (сервер без передачи данных формы) и &НаКлиентеНаСервереБезКонтекста. На клиенте нельзя читать базу напрямую — только через вызов сервера.

Что пишут на языке 1С в реальных проектах

  1. Доработки типовых конфигураций через расширения (появились в платформе 8.3.6) — без снятия с поддержки.
  2. Внешние печатные формы и обработки — файлы .epf, которые подключаются без изменения конфигурации.
  3. Отчёты на системе компоновки данных (СКД).
  4. Обмены между базами и с внешними системами.
  5. Регламентные задания: ночная загрузка курсов, выгрузка остатков на сайт.
  6. Новые конфигурации «с нуля» под задачу компании.

Язык запросов и другие «языки» внутри платформы

Когда спрашивают, какой язык используется в 1С, часто забывают про второй — язык запросов. Через него читают данные из базы. Он похож на SQL, но работает с объектами метаданных, а не с таблицами СУБД. Изменять данные запросом нельзя: только читать.

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Контрагенты.Ссылка,
|    Контрагенты.ИНН
|ИЗ
|    Справочник.Контрагенты КАК Контрагенты
|ГДЕ
|    НЕ Контрагенты.ПометкаУдаления";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.ИНН);
КонецЦикла;

Отличия от SQL, которые важно знать:

  • 🔑 обращение через точку к реквизитам ссылки: Документ.Контрагент.ИНН — платформа сама сделает соединение;
  • 📊 виртуальные таблицы регистров: Остатки, Обороты, СрезПоследних с параметрами периода;
  • 🌐 одна и та же конструкция работает на файловой базе, MS SQL Server и PostgreSQL — платформа переводит запрос в SQL нужной СУБД.

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

Можно ли подключить к 1С другие языки программирования

Написать конфигурацию 1С на Python, C# или Java нельзя. Но связать 1С с программой на любом языке — можно. Способов несколько.

СпособНаправлениеКогда выбирают
COM-соединение (V83.COMConnector)Внешняя программа → 1ССкрипты на Python, VBScript, C# под Windows
HTTP-сервисыЛюбая система → 1ССвой REST API для сайта или мобильного приложения
Веб-сервисы (SOAP)В обе стороныОбмен с корпоративными системами
Стандартный интерфейс ODataВнешняя система → 1СЧтение и запись данных без программирования на стороне 1С
Внешние компоненты (Native API)1С → библиотекаРабота с оборудованием, криптография, быстрые вычисления на C++
Запуск внешней программы1С → программаВызов готового скрипта или утилиты из кода 1С

COM-соединение работает только в Windows и требует регистрации компоненты comcntr.dll той же разрядности, что и вызывающая программа. Для серверов на Linux выбирайте HTTP-сервисы или OData.

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

Сильные и слабые стороны языка 1С для разработки

Язык хорош там, где под него проектировали, и неудобен вне этой ниши.

Сильные стороны:

  • ✅ бизнес-логика пишется быстро: документ с проведением и печатной формой — дело часов, а не недель;
  • ✅ не нужно думать о СУБД, сети, интерфейсе — платформа берёт это на себя;
  • ✅ код читает даже бухгалтер: Если Остаток < 0 Тогда понятен без перевода;
  • ✅ большой рынок работы: почти каждая российская компания ведёт учёт в 1С;
  • ✅ встроенный Синтакс-помощник с описанием всех типов и методов.

Слабые стороны:

  • ❌ нет собственных классов, наследования, интерфейсов;
  • ❌ знания плохо переносятся: язык работает только внутри 1С;
  • ❌ мало современных библиотек, внешние пакеты подключить нельзя;
  • ❌ динамическая типизация: ошибку типа часто видно только при выполнении;
  • ❌ русские ключевые слова неудобны с латинской раскладкой — приходится постоянно переключаться.

Часть недостатков закрывает EDT: там есть статический анализ, подсказки по типам и работа с Git. Многие команды переходят на неё с классического Конфигуратора.

Проверьте себя
На каком языке написаны типовые конфигурации 1С 8.3?
Можно ли изменить данные в базе через язык запросов 1С?
Где выполняется процедура с директивой &НаСервере?

Как начать изучать язык программирования 1С

Начинать с чтения синтаксиса бесполезно. Язык учат вместе с платформой: объекты метаданных, регистры, формы. Рабочий маршрут выглядит так.

  1. Поставьте учебную версию платформы. Она распространяется для обучения бесплатно или вместе с учебными книгами, работает с ограничениями по объёму данных и подходит для отработки примеров.
  2. Создайте пустую конфигурацию и сделайте сквозной пример: справочник «Товары», документ «Приход», регистр остатков, отчёт по остаткам.
  3. Пройдите книгу-практикум. Классика жанра — «1С:Предприятие 8.3. Практическое пособие разработчика» М. Радченко и Е. Хрусталёвой: в ней строится такая учебная конфигурация шаг за шагом.
  4. Изучите язык запросов отдельно. Виртуальные таблицы и временные таблицы — то, на чём спотыкаются почти все.
  5. Разберите типовую конфигурацию . Откройте Бухгалтерию в Конфигураторе и посмотрите, как устроен модуль проведения документа «Реализация».
  6. Научитесь пользоваться отладчиком . Точки останова и вычисление выражений сэкономят больше времени, чем любая книга.
  7. Сдайте экзамен «1С:Профессионал» по платформе — это стандартный фильтр на собеседованиях.

Сколько времени уходит

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

Что должен уметь начинающий разработчик 1С
Выполнено: 0 / 6

Типичные ошибки начинающих программистов 1С

Эти промахи встречаются в коде новичков чаще всего и потом долго «тормозят» базу.

  • 🐢 Запрос в цикле. Для каждой строки документа отдельно читают цену или остаток. На 500 строках это 500 обращений к базе. Правильно — один запрос сразу по всем товарам.
  • 🔗 Обращение через точку в цикле. Строка.Номенклатура.Родитель.Наименование в цикле каждый раз читает объект из базы. Нужные поля лучше получить запросом.
  • 🖥 Серверные объекты на клиенте. Попытка обратиться к Справочники.Контрагенты из процедуры &НаКлиенте даёт ошибку. Чтение данных — только на сервере.
  • 📡 Лишние серверные вызовы. Каждый вызов &НаСервере из формы передаёт данные формы по сети. Если контекст формы не нужен, используйте &НаСервереБезКонтекста.
  • ✏️ Правка типовой конфигурации напрямую. После снятия с поддержки обновления превращаются в ручное сравнение и объединение. Доработки лучше делать в расширении.
  • 🔢 Склейка строки с числом без форматирования. "Сумма " + 1500000 выведет число с разделителями групп разрядов, которые потом ломают выгрузки. Используйте Формат(Число, "ЧГ=0") или СтрШаблон.
  • 🙈 Пустой блок Исключение. Ошибка «проглатывается», и никто не знает, почему обмен не прошёл. Пишите в журнал регистрации через ЗаписьЖурналаРегистрации.

Отлаживайте доработки только на копии базы. Ошибка в обработке проведения в рабочей базе может испортить движения сразу по сотням документов.

Частые вопросы

Язык 1С — это настоящий язык программирования?
Да. В нём есть переменные, условия, циклы, функции, исключения и работа с коллекциями. Он предметно-ориентированный и работает только внутри платформы, но для учётных задач полноценен.
Можно ли писать в 1С на английском?
Да. У каждого ключевого слова и метода есть английский вариант, платформа понимает оба. В свойствах конфигурации есть настройка варианта встроенного языка — она влияет на подсказки и шаблоны в редакторе. Типовые решения написаны по-русски.
На каком языке написана сама платформа 1С:Предприятие?
Ядро платформы написано на C++. Прикладные конфигурации — Бухгалтерия, ЗУП, УТ — написаны на встроенном языке 1С.
Чем язык 1С 8.3 отличается от языка 1С 7.7?
Основы синтаксиса похожи, но в 8.3 появились клиент-серверные директивы, управляемые формы, расширения, другая объектная модель и язык запросов, близкий к SQL. Код из 7.7 напрямую в 8.3 не переносится.
Как называется расширение файлов с кодом 1С?
В Конфигураторе код хранится внутри конфигурации, отдельных файлов нет. При выгрузке в файлы и в EDT модули сохраняются с расширением .bsl — по английскому названию языка 1C:Enterprise script.