К статье
Практический материал

Разработка и Конфигурация · 11 мин

Язык 1С: что это и как на нём программируют

Что такое встроенный язык 1С, чем он отличается от других языков, где используется и с чего начать изучение: синтаксис, примеры кода и типичные ошибки новичков.

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

Главная особенность языка — предметная ориентация. Вместо абстрактных конструкций разработчик работает с понятиями учёта: «Номенклатура», «Проводки», «Остатки». Это снижает порог входа для людей без классического программистского образования, но требует понимания учётных механизмов платформы.

Язык допускает написание кода как на русском, так и на английском синтаксисе, причём в одном модуле можно смешивать оба варианта. Имена переменных и процедур разработчик задаёт сам — чаще всего на русском, что делает типовой код 1С непривычным для программистов, пришедших из других экосистем.

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

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

Язык процедурный с элементами объектной модели, но без классического наследования и возможности создавать собственные классы. Разработчик оперирует готовыми объектами платформы: ДокументОбъект, СправочникМенеджер, Запрос, ТаблицаЗначений и другими. Собственные типы создать нельзя — можно лишь добавлять объекты метаданных в конфигурацию.

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

Где исполняется код: клиент и сервер

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

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

Директивы компиляции определяют контекст процедуры: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста, &НаКлиентеНаСервереБезКонтекста. Неверно выбранная директива — частая причина ошибок вида «Переменная не определена» или недоступности нужного объекта.

Основы синтаксиса на простых примерах

Синтаксис языка лаконичен. Операторы завершаются точкой с запятой, блоки ограничиваются ключевыми словами (Если ... Тогда ... КонецЕсли;), комментарии начинаются с двойного слэша. Регистр букв в ключевых словах и именах не имеет значения.

Типичный фрагмент кода выглядит так: объявление переменной, условие, цикл и вызов процедуры. Пример ниже демонстрирует базовые конструкции.

// Поиск элемента справочника и вывод сообщения

Процедура ПоказатьЦену(НаименованиеТовара) Экспорт

Ссылка = Справочники.Номенклатура.НайтиПоНаименованию(НаименованиеТовара);

Если Ссылка.Пустая() Тогда

Сообщить("Товар не найден");

Возврат;

КонецЕсли;

Сообщить("Найден товар: " + Ссылка.Наименование);

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

Обратите внимание: конкатенация строк выполняется оператором «+», а при сложении строки и числа платформа попытается привести типы автоматически — это удобно, но порождает трудноуловимые ошибки, когда вместо суммы получается склейка строк.

Язык запросов — вторая половина платформы

Помимо встроенного языка, разработчик 1С обязан владеть языком запросов — декларативным языком, похожим на SQL, для выборки данных из базы. Большинство операций чтения (остатки, обороты, подбор данных для отчёта) выполняется именно запросами, а не перебором объектов в цикле.

Ключевое отличие от SQL: запрос работает с объектами метаданных и виртуальными таблицами (Остатки, Обороты, СрезПоследних), а не с физическими таблицами СУБД. Платформа сама преобразует запрос в SQL для конкретной базы данных.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Остатки.Номенклатура КАК Товар,

| Остатки.КоличествоОстаток КАК Остаток

|ИЗ

| РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК Остатки";

Запрос.УстановитьПараметр("Период", ТекущаяДатаСеанса());

Результат = Запрос.Выполнить().Выгрузить();

Классическая ошибка производительности — обращение к базе внутри цикла: запрос или чтение объекта на каждой итерации. Правильный подход — один запрос с соединением таблиц, а обработка результата уже в памяти. На больших базах разница составляет секунды против минут.
ПЗ
Практическое замечание

С чего начать изучение языка 1С

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

Далее двигайтесь от простых объектов к сложным: справочник и форма списка, затем документ с проведением по регистру, затем отчёт на СКД (системе компоновки данных). Такой маршрут задействует все ключевые механизмы: модули, запросы, движения документов, построение отчётов.

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

Порядок действий для первого знакомства
  1. 1
    Установите учебную версию платформы и откройте конфигуратор
  2. 2
    Создайте пустую конфигурацию и добавьте справочник «Товары» с парой реквизитов
  3. 3
    Создайте документ «ПриходнаяНакладная» с табличной частью и напишите обработку проведения
  4. 4
    Добавьте регистр накопления и сформируйте движения документа по нему
  5. 5
    Постройте отчёт по остаткам через запрос и проверьте результат после проведения документов

Типичные ошибки начинающих разработчиков

Большинство проблем новичков связаны не с синтаксисом, а с непониманием модели исполнения платформы: контекстов, транзакций, разницы между ссылкой и объектом. Ниже — распространённые сценарии, которые стоит проверить в первую очередь.

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

Типичные ошибки
01
Смешение ссылки и объекта: Ссылка.Записать() вызывает ошибку — для изменения данных нужно получить объект методом ПолучитьОбъект()
02
Запрос в цикле вместо одного запроса с соединением — резкое падение производительности на больших объёмах
03
Игнорирование контекста: вызов серверной логики из клиентского модуля без директивы &НаСервере
04
Изменение типовой конфигурации без расширения — потеря изменений при обновлении
05
Отсутствие транзакций при записи нескольких связанных объектов — риск частично записанных данных при сбое

Ограничения языка и когда нужны альтернативы

Встроенный язык не предназначен для задач вне учётной логики: системного программирования, высоконагруженных вычислений, работы с графикой. Для интеграций с внешними сервисами платформа предоставляет HTTP-соединения и работу с JSON/XML, но сложную логику иногда выносят во внешние компоненты или отдельные сервисы.

Для расширения типовых конфигураций без их изменения существует механизм расширений — код пишется на том же языке, но накладывается на типовую конфигурацию и не теряется при обновлении. Это рекомендуемый способ доработок, если типовая конфигурация стоит на поддержке.

Способы доработки конфигурации

Изменение типовой конфигурации

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

Расширение конфигурации

Доработки сохраняются при обновлении; ограничение — не все объекты и механизмы можно переопределить

Внешние обработки и отчёты

Подходят для разовых операций и дополнительных отчётов без изменения конфигурации; нельзя менять структуру данных

Как проверить, что код работает правильно

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

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

Контрольные точки

Как проверить результат

Проведение документа
Норма

Документ проводится без сообщений об ошибках, движения появляются в регистрах

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

Сообщения об ошибках, документ проведён, но движений нет

Данные в регистре
Норма

Суммы и количества в движениях совпадают с табличной частью документа

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

Расхождения сумм, пустые измерения, дубли строк

Повторное проведение
Норма

Старые движения удаляются и заменяются новыми, итоги не задваиваются

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

Итоги удваиваются — признак того, что движения добавляются без очистки набора записей

Итог

Что важно запомнить

Язык 1С — встроенный язык платформы для описания учётной логики, тесно связанный с объектами метаданных и языком запросов. Эффективная разработка требует понимания клиент-серверной модели, работы с запросами вместо циклов и использования расширений вместо изменения типовых конфигураций.

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

1С — это язык программирования или программа?

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

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

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

Можно ли писать на 1С код на английском?

Да, все ключевые слова имеют английские аналоги (If, Then, EndIf, Procedure), и оба варианта можно смешивать в одном модуле. Однако имена объектов типовых конфигураций заданы на русском, поэтому полностью избежать русского языка в коде не получится.

Чем язык запросов 1С отличается от SQL?

Запрос 1С оперирует объектами метаданных и виртуальными таблицами, а платформа транслирует его в SQL конкретной СУБД. Прямой доступ к физическим таблицам отсутствует, зато доступны специальные конструкции: виртуальные таблицы остатков и оборотов, итоги по иерархии, представления ссылок.

Нужно ли знать другой язык программирования для работы с 1С?

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

Где выполняется код 1С — в браузере или на компьютере?

Код выполняется платформой: на сервере 1С и/или на клиентском приложении (толстый, тонкий клиент или веб-клиент). В браузере работает только веб-клиент, но и в нём код исполняется движком платформы, а не средствами JavaScript напрямую.