Встроенный язык 1С: на чём пишут конфигурации и как с ним работать
Содержание
В 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С в реальных проектах
- Доработки типовых конфигураций через расширения (появились в платформе 8.3.6) — без снятия с поддержки.
- Внешние печатные формы и обработки — файлы
.epf, которые подключаются без изменения конфигурации. - Отчёты на системе компоновки данных (СКД).
- Обмены между базами и с внешними системами.
- Регламентные задания: ночная загрузка курсов, выгрузка остатков на сайт.
- Новые конфигурации «с нуля» под задачу компании.
Язык запросов и другие «языки» внутри платформы
Когда спрашивают, какой язык используется в 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С
Начинать с чтения синтаксиса бесполезно. Язык учат вместе с платформой: объекты метаданных, регистры, формы. Рабочий маршрут выглядит так.
- Поставьте учебную версию платформы. Она распространяется для обучения бесплатно или вместе с учебными книгами, работает с ограничениями по объёму данных и подходит для отработки примеров.
- Создайте пустую конфигурацию и сделайте сквозной пример: справочник «Товары», документ «Приход», регистр остатков, отчёт по остаткам.
- Пройдите книгу-практикум. Классика жанра — «1С:Предприятие 8.3. Практическое пособие разработчика» М. Радченко и Е. Хрусталёвой: в ней строится такая учебная конфигурация шаг за шагом.
- Изучите язык запросов отдельно. Виртуальные таблицы и временные таблицы — то, на чём спотыкаются почти все.
- Разберите типовую конфигурацию . Откройте Бухгалтерию в Конфигураторе и посмотрите, как устроен модуль проведения документа «Реализация».
- Научитесь пользоваться отладчиком . Точки останова и вычисление выражений сэкономят больше времени, чем любая книга.
- Сдайте экзамен «1С:Профессионал» по платформе — это стандартный фильтр на собеседованиях.
Сколько времени уходит
По опыту, человеку с базовыми навыками программирования на первые рабочие доработки (внешний отчёт, печатная форма) нужно 2–3 месяца регулярной практики. Бухгалтеру без опыта программирования — дольше, зато он сразу понимает, зачем нужны регистры и проводки.
Типичные ошибки начинающих программистов 1С
Эти промахи встречаются в коде новичков чаще всего и потом долго «тормозят» базу.
- 🐢 Запрос в цикле. Для каждой строки документа отдельно читают цену или остаток. На 500 строках это 500 обращений к базе. Правильно — один запрос сразу по всем товарам.
- 🔗 Обращение через точку в цикле.
Строка.Номенклатура.Родитель.Наименованиев цикле каждый раз читает объект из базы. Нужные поля лучше получить запросом. - 🖥 Серверные объекты на клиенте. Попытка обратиться к
Справочники.Контрагентыиз процедуры&НаКлиентедаёт ошибку. Чтение данных — только на сервере. - 📡 Лишние серверные вызовы. Каждый вызов
&НаСервереиз формы передаёт данные формы по сети. Если контекст формы не нужен, используйте&НаСервереБезКонтекста. - ✏️ Правка типовой конфигурации напрямую. После снятия с поддержки обновления превращаются в ручное сравнение и объединение. Доработки лучше делать в расширении.
- 🔢 Склейка строки с числом без форматирования.
"Сумма " + 1500000выведет число с разделителями групп разрядов, которые потом ломают выгрузки. ИспользуйтеФормат(Число, "ЧГ=0")илиСтрШаблон. - 🙈 Пустой блок
Исключение. Ошибка «проглатывается», и никто не знает, почему обмен не прошёл. Пишите в журнал регистрации черезЗаписьЖурналаРегистрации.
Отлаживайте доработки только на копии базы. Ошибка в обработке проведения в рабочей базе может испортить движения сразу по сотням документов.
Частые вопросы
Язык 1С — это настоящий язык программирования?
Можно ли писать в 1С на английском?
На каком языке написана сама платформа 1С:Предприятие?
Чем язык 1С 8.3 отличается от языка 1С 7.7?
Как называется расширение файлов с кодом 1С?
.bsl — по английскому названию языка 1C:Enterprise script.