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

· 9 мин

Содержание

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

Если вы бухгалтер и хотите понять, что именно делает программист 1С, или разработчик, который присматривается к нише, — ниже конкретика: где пишут код, какие задачи на нём решают, чем он похож и не похож на Python или Java и сколько примерно платят.

Что такое встроенный язык 1С и как он устроен

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

Главные черты языка:

  • 🇷🇺 Двойной синтаксис. Ключевые слова есть на русском и английском: Если ... Тогда и If ... Then. В типовых конфигурациях фирмы 1С пишут по-русски.
  • 🔤 Динамическая типизация. Тип переменной не объявляют, он определяется значением. Переменная может сначала хранить число, потом строку.
  • 🧩 Прикладные типы из коробки. СправочникСсылка.Контрагенты, ДокументОбъект.РеализацияТоваровУслуг, ТаблицаЗначений, Структура, Соответствие — с ними работают без подключения библиотек.
  • 🗄️ Свой язык запросов. Похож на SQL (ВЫБРАТЬ ... ИЗ ... ГДЕ), но обращается к объектам конфигурации, а не к таблицам СУБД. Один и тот же запрос работает на файловой базе, MS SQL Server и PostgreSQL.
  • 🖥️ Директивы компиляции. Каждая процедура формы помечается, где её выполнять: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста.
  • ⚠️ Обработка исключений через Попытка ... Исключение ... КонецПопытки и ВызватьИсключение.

Небольшой пример — функция, которая ищет контрагентов по ИНН. Так выглядит типичный серверный код:

Функция КонтрагентыПоИНН(ИНН) Экспорт

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

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

	Возврат Результат;

КонецФункции

Тот же фрагмент на английском синтаксисе начинался бы с Function ... Export и Query = New Query;. Платформа понимает оба варианта, даже вперемешку, но в команде так не пишут.

Синхронный и асинхронный код

Веб-клиент и браузеры не любят модальные окна, которые блокируют страницу. Поэтому вопросы пользователю и диалоги выбора файлов в современных конфигурациях работают асинхронно.

  • Старый способ — обработчики оповещения: Новый ОписаниеОповещения("ИмяПроцедуры", ЭтотОбъект) и отдельная процедура, которую платформа вызовет после ответа пользователя.
  • Новый способ — ключевые слова Асинх и Ждать, появились в платформе 8.3.18. Код с ними читается сверху вниз, как обычный: Ответ = Ждать ВопросАсинх("Удалить строку?", РежимДиалогаВопрос.ДаНет);.

Если вы читаете чужой код и видите оба подхода в одной базе — это нормально: типовые конфигурации переходят на новый синтаксис постепенно.

Где пишут код

ИнструментДля чегоКому подходит
КонфигураторКлассическая среда, входит в платформу. Метаданные, модули, формы, отладкаВсем, особенно для поддержки типовых баз
1С:Enterprise Development Tools (EDT)Среда на базе Eclipse, хранит конфигурацию в файлах, дружит с GitКомандам, крупным проектам
Внешние обработки и отчёты (.epf, .erf)Код вне конфигурации, подключается к базе без её измененияРазовым задачам, печатным формам

Какие задачи решают на языке 1С

Почти всё, что пользователь видит в 1С:Бухгалтерии, ЗУП или УТ, написано на этом языке. Программист 1С обычно занимается не «программированием вообще», а конкретными учётными задачами.

Типичные заказы в рабочей базе

  1. 🧾 Логика проведения документов. Какие движения по регистрам формирует документ, что контролировать при проведении: остатки, лимиты, заполненность реквизитов.
  2. 📊 Отчёты. Через систему компоновки данных (СКД): запрос плюс настройки группировок, отборов и оформления. Пользователь потом сам меняет вариант отчёта, не трогая код.
  3. 🖨️ Печатные формы. Счета, акты, этикетки по макету заказчика. Часто делаются внешней обработкой или в расширении.
  4. 📥 Загрузка данных. Из Excel, XML, JSON: прайсы, остатки при старте учёта, выписки нестандартного формата.
  5. ⚙️ Регламентные задания. Код, который сервер запускает по расписанию: ночной пересчёт, выгрузка на сайт, рассылка.
  6. 🔐 Права и роли. Ограничение доступа на уровне записей (RLS): менеджер видит только своих клиентов.

Что делают реже, но дороже

  • Разработка отраслевых решений с нуля на платформе — склад, производство, медицина, автосервис.
  • Оптимизация медленных запросов и блокировок на больших базах.
  • Переход с нетиповой доработанной конфигурации на свежую типовую.

Бухгалтеру полезно знать границу: настройка учётной политики, счетов и видов операций делается в пользовательском режиме и программиста не требует. Код нужен, когда типового поведения не хватает.

Чем язык 1С отличается от Python, Java и C#

Язык 1С часто ругают за «несерьёзность», но сравнивать его с языками общего назначения напрямую не совсем честно. Это предметно-ориентированный язык: он заточен под учёт и платит за это универсальностью.

КритерийВстроенный язык 1СPython / Java / C#
Где выполняетсяТолько внутри платформы 1С:ПредприятиеГде угодно: сервер, десктоп, мобильные, встраиваемые системы
Работа с БДОбъекты и язык запросов встроены, СУБД скрытаЧерез драйверы, ORM, ручной SQL
ИнтерфейсФормы описываются декларативно, платформа сама рисует их в тонком клиенте и браузереНужен фреймворк
ООПНет классов и наследования; есть прикладные объекты и их модулиПолноценные классы, интерфейсы, наследование
БиблиотекиТиповая библиотека — БСП (Библиотека стандартных подсистем)Огромные экосистемы пакетов
Порог входаНизкий для первых доработок, высокий для архитектурыЗависит от языка и задачи
РынокВ основном Россия и страны СНГМировой

Что из этого следует на практике:

  • ✅ Справочник с формой списка, формой элемента и правами доступа на 1С собирается за час. На Java для того же нужен каркас приложения, слой БД и веб-интерфейс.
  • ❌ Написать на 1С игру, драйвер или нейросеть нельзя. Тяжёлые вычисления выносят во внешние сервисы.
  • ⚠️ Код почти всегда разделён на клиентский и серверный. Начинающие спотыкаются о то, что на клиенте нельзя выполнить запрос к базе — нужен серверный вызов.

Клиент и сервер: самая частая ловушка

&НаКлиенте
Процедура ЗаполнитьКомандой(Команда)
	ЗаполнитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервере()
	// здесь доступны запросы и объекты базы
	Объект.Комментарий = "Заполнено " + Формат(ТекущаяДатаСеанса(), "ДФ=dd.MM.yyyy");
КонецПроцедуры

Каждый такой вызов — поход клиента на сервер. Если дёргать его в цикле по строкам табличной части, форма начнёт тормозить даже на хорошем железе. Опытный разработчик собирает данные и делает один серверный вызов.

Расширения и доработки без снятия с поддержки

Раньше любую доработку типовой конфигурации вносили прямо в неё. Конфигурацию «снимали с поддержки» или включали возможность изменения, и каждое обновление превращалось в ручное сравнение-объединение.

С версии платформы 8.3.6 появились расширения конфигурации (файлы .cfe). Это главный приём, без которого современная доработка не обходится.

Как работают расширения

  • 🧩 Расширение хранится отдельно от основной конфигурации и подключается к ней.
  • 🔁 В расширение заимствуют нужные объекты и меняют поведение через аннотации &Перед, &После, &Вместо и &ИзменениеИКонтроль.
  • 📦 Можно добавить свои реквизиты, формы, отчёты, роли.
  • ⬆️ Типовая конфигурация обновляется штатно, а расширение остаётся. После обновления его надо проверить: если изменился заимствованный объект, платформа предупредит.

Пример: нужно запретить проведение реализации без договора. В расширении заимствуют модуль объекта документа и добавляют обработчик с аннотацией &После("ОбработкаПроверкиЗаполнения"). Типовой код не тронут.

Расширение не универсальная таблетка. Сложная переделка механизма проведения через десятки перехватов становится такой же хрупкой, как правка типовой. И любое расширение сначала проверяйте на копии базы, а не в рабочей.

Когда что выбрать

Какая доработка вам нужна?

Интеграция с внешними системами

Учётная база редко живёт в изоляции. Банк, сайт, маркетплейс, ЭДО, складской терминал — всё это стыкуют с 1С кодом на встроенном языке.

Основные способы обмена

МеханизмЧто делаетПример задачи
HTTPСоединение1С сама обращается к внешнему REST APIЗагрузить курсы, заказы с маркетплейса
HTTP-сервисыВнешняя система обращается к 1С по RESTСайт отправляет заказ в базу
Web-сервисы (SOAP)Обмен по WSDLИнтеграция со старыми корпоративными системами
Стандартный интерфейс ODataАвтоматический REST-доступ к объектам базыВыгрузка данных в BI-систему
Планы обменаРегистрация изменений и синхронизация базСвязка УТ и Бухгалтерии, распределённая база филиалов
COM-соединениеПодключение к базе из другой программы на WindowsСкрипт, который читает базу из Excel или другой 1С
Внешние компонентыПодключение библиотек на C++Работа с торговым оборудованием

Обмен между типовыми конфигурациями идёт через формат EnterpriseData, а правила для нестандартных обменов готовят в конфигурации «Конвертация данных ».

Так выглядит запрос к внешнему API:

&НаСервереБезКонтекста
Функция ПолучитьДанныеСервиса()

	ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
	Соединение = Новый HTTPСоединение("api.example.ru", 443, , , , 30, ЗащищенноеСоединение);
	Запрос = Новый HTTPЗапрос("/v1/rates");
	Ответ = Соединение.Получить(Запрос);

	Если Ответ.КодСостояния <> 200 Тогда
		ВызватьИсключение "Сервис вернул код " + Формат(Ответ.КодСостояния, "ЧГ=0");
	КонецЕсли;

	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
	Данные = ПрочитатьJSON(Чтение);
	Чтение.Закрыть();

	Возврат Данные;

КонецФункции

Адрес api.example.ru условный. Последний параметр конструктора включает HTTPS, а 30 — таймаут в секундах: без него зависший сервис подвесит и сеанс пользователя.

Логины, пароли и токены внешних сервисов не пишите в код. В типовых конфигурациях для этого есть безопасное хранилище данных, а в своих разработках — константы или отдельный регистр с ограниченным доступом.

Востребованность программистов 1С и как войти в профессию

Почти каждая российская компания ведёт учёт в 1С, а значит, кто-то эти базы сопровождает, обновляет и дорабатывает. Работодатели — франчайзи 1С, внутренние ИТ-отделы и интеграторы, а также фриланс.

Уровни и ориентировочные доходы

Цифры примерные, по открытым вакансиям в крупных городах; в регионах ниже, в Москве выше.

УровеньЧто умеетОриентир, тыс. ₽ в месяц
Стажёр / младшийОтчёты на СКД, печатные формы, мелкие правки60–110
СреднийРасширения, обмены, доработка проведения150–250
Старший / ведущийАрхитектура, оптимизация, крупные внедрения250–400 и выше
Архитектор, эксперт по производительностиВысоконагруженные базы, кластеры серверовпо договорённости

Что даёт преимущество

  • 📚 Знание учёта. Программист, понимающий, что такое закрытие месяца и НДС, ценится выше «чистого» кодера.
  • 🏅 Сертификаты фирмы 1С. «1С:Специалист» по платформе и конфигурациям подтверждает уровень; франчайзи их требуют, потому что от числа сертифицированных сотрудников зависит их статус.
  • 🛠️ Инструменты. EDT, Git, автотесты, стандарты разработки 1С — признаки зрелой команды.
  • 🗂️ БСП. Умение использовать типовые подсистемы вместо самописных велосипедов.

С чего начать

Первые шаги в 1С-разработке
Выполнено: 0 / 6

Учебная версия бесплатна и предназначена для обучения. Для работы с реальными данными компании она не подходит: у неё есть ограничения, и использовать её в коммерческом учёте нельзя.

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

Можно ли писать на 1С программы вне платформы 1С:Предприятие?
Нет. Код исполняет только платформа: тонкий, толстый или веб-клиент, сервер 1С или мобильная платформа. Отдельного компилятора в исполняемый файл нет.
На каком языке написана сама платформа 1С?
Ядро платформы написано на C++. Встроенный язык — это уровень над ней, на котором пишут конфигурации.
Есть ли в 1С объектно-ориентированное программирование?
Классов и наследования нет. Есть прикладные объекты (справочники, документы) со своими модулями и методами, а повторное использование кода решается общими модулями.
Для мобильных приложений язык 1С подходит?
Да, через мобильную платформу 1С: приложение собирается из конфигурации и работает на Android и iOS. Обычно это мобильные рабочие места для торговых агентов или склада, синхронизированные с основной базой.
Чем язык запросов 1С отличается от обычного SQL?
Запрос пишут к объектам конфигурации, а не к таблицам СУБД; есть разыменование ссылок через точку и виртуальные таблицы регистров (остатки, обороты). Изменять данные запросом нельзя — только читать.