Встроенный язык 1С:Предприятия: имя, синтаксис, объекты и инструменты разработчика

· 11 мин

Содержание

Официально язык программирования 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С — он заранее «знает» про учётные сущности. Программист не создаёт таблицы в базе вручную: он добавляет в дерево конфигурации объект метаданных, а платформа сама строит таблицы, формы по умолчанию и программный интерфейс.

Основные прикладные объекты:

  • 📁 Справочники — списки: номенклатура, контрагенты, сотрудники.
  • 📄 Документы — события учёта: реализация, поступление, начисление зарплаты.
  • 📊 Регистры сведений — данные с привязкой к измерениям и дате: курсы валют, цены.
  • 📦 Регистры накопления — остатки и обороты: товары на складах, взаиморасчёты.
  • 📒 Регистры бухгалтерии — проводки по плану счетов.
  • 🧮 Регистры расчёта — начисления с периодами действия, основа ЗУП.
  • 📋 Перечисления, планы видов характеристик, планы счетов, бизнес-процессы, задачи.

Ссылка, объект, менеджер

Работа с данными строится на трёх понятиях:

  1. Менеджер — точка входа к типу: Справочники.Контрагенты, Документы.РеализацияТоваровУслуг. Через него ищут и создают элементы.
  2. Ссылка — лёгкий указатель на запись. Через неё можно прочитать реквизиты, но нельзя записать.
  3. Объект — полная копия записи в памяти. Его меняют и записывают.
Ссылка = Справочники.Контрагенты.НайтиПоКоду("000000123");
Если Не Ссылка.Пустая() Тогда
	Объект = Ссылка.ПолучитьОбъект();
	Объект.Комментарий = "Проверен";
	Объект.Записать();
КонецЕсли;

Реквизит Комментарий здесь для примера: состав реквизитов справочника зависит от конфигурации.

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

Для выборки данных используют язык запросов, похожий на SQL, но тоже с русскими словами и обращением к объектам конфигурации, а не к физическим таблицам. Особенность — виртуальные таблицы регистров: остатки и обороты на дату получают одной строкой, без ручного суммирования движений.

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

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

Имена регистров и реквизитов в примере условные: в каждой конфигурации они свои. Точные имена смотрят в дереве метаданных Конфигуратора.

Писать запрос руками не обязательно: в Конфигураторе есть конструктор запроса — его вызывают из контекстного меню в модуле. Он собирает текст по выбранным таблицам и полям.

Где писать и отлаживать код на 1С

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

Конфигуратор

Входит в платформу: тот же ярлык 1С, режим запуска «Конфигуратор». В нём дерево метаданных, редактор модулей с подсветкой и контекстной подсказкой, конструкторы запросов, форм и макетов, сравнение и объединение конфигураций, хранилище для командной работы.

Отладка из Конфигуратора:

  1. Поставьте точку останова на строке — клавиша F9.
  2. Запустите отладку — F5. Откроется пользовательский режим.
  3. Выполните действие, которое вызывает код. Выполнение остановится на точке.
  4. Шагайте: F10 — через процедуру, F11 — с заходом внутрь.
  5. Смотрите значения: наведите курсор на переменную или откройте «Вычислить выражение» (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С и куда он развивается

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

Разумный порядок изучения:

  1. Учебная версия платформы — бесплатная, с ограничениями, для самостоятельной практики. Без лицензии рабочая платформа базу не запустит, поэтому начинать стоит с неё.
  2. Синтаксис и коллекции — условия, циклы, Массив, Структура, ТаблицаЗначений.
  3. Объекты метаданных — создайте учебную конфигурацию со справочником, документом и регистром накопления, научитесь проводить документ.
  4. Язык запросов — виртуальные таблицы остатков и оборотов, соединения, параметры.
  5. Управляемые формы и директивы — клиент-серверное взаимодействие.
  6. СКД — отчёты на схеме компоновки данных.
  7. Типовая конфигурация — разберите, как устроен, например, документ реализации в Бухгалтерии 3.0, и напишите к нему расширение.
Что уметь, прежде чем браться за доработку у клиента
Выполнено: 0 / 6

Уровень подтверждают сертификаты фирмы 1С: «1С:Профессионал» — тест на знание платформы или конкретной конфигурации, и «1С:Специалист» — экзамен с практической задачей, который сдают очно. Работодатели во франчайзинговой сети часто смотрят именно на них.

Куда движется язык: в новых релизах 8.3 добавляются асинхронные методы с Асинх и Ждать — вместо старых модальных вызовов с обработчиками оповещения код читается последовательно. Растёт роль EDT и Git, а фирма 1С развивает отдельную технологию «1С:Предприятие.Элемент» со своим языком, ориентированным на веб-приложения. Для учётных систем на платформе 8.3 встроенный язык остаётся основным, и спрос на программистов 1С держится стабильно.

Частые вопросы о языке 1С

Можно ли писать код 1С на английском?
Да. У каждого ключевого слова, объекта и метода есть английское имя, а в свойствах конфигурации можно выбрать английский вариант встроенного языка. Типовые конфигурации написаны на русском, поэтому на практике пишут по-русски.
Это компилируемый язык или интерпретируемый?
Модули платформа переводит в промежуточный байт-код и исполняет его своей виртуальной машиной. Отдельного компилятора в исполняемый файл нет: код всегда работает внутри платформы.
Можно ли сделать на 1С программу, не связанную с учётом?
Технически можно — есть HTTP-сервисы, работа с файлами, мобильная платформа. Но каждому пользователю нужна лицензия платформы, поэтому для задач вне учёта обычно выбирают универсальные языки.
Чем «БСП» отличается от языка?
БСП — Библиотека стандартных подсистем, набор готовых модулей фирмы 1С: пользователи и права, печать, файлы, обновление. Это не часть языка, а библиотека, написанная на нём. Её знание сильно ускоряет работу с типовыми конфигурациями.
Сколько нужно, чтобы начать работать программистом 1С?
Чтобы писать простые обработки и отчёты, хватает двух-трёх месяцев регулярной практики. Самостоятельная работа с типовыми конфигурациями обычно приходит после года на реальных задачах.