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

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

1С-программирование: на каком языке пишут и как его освоить

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

1С-программирование ведётся на собственном встроенном языке платформы «1С:Предприятие». Это не C++, не Python и не Java — язык создан специально для описания бизнес-логики: проведения документов, расчёта остатков, формирования отчётов. Его ключевая особенность — двуязычный синтаксис: ключевые слова можно писать как по-русски («Если», «Тогда», «КонецЕсли»), так и по-английски («If», «Then», «EndIf»), причём оба варианта работают одинаково.

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

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

Из чего состоит языковая среда 1С

Под «языком 1С» обычно понимают три связанных компонента. Первый — встроенный язык (его иногда называют «1С-script»): им описывают алгоритмы в модулях объектов, форм, общих модулях. Второй — язык запросов: декларативный язык выборки данных, синтаксически близкий к SQL, но адаптированный под объекты конфигурации. Третий — язык выражений системы компоновки данных (СКД), используемый в отчётах для вычисляемых полей и отборов.

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

Как выглядит синтаксис: пример кода

Код пишется в конфигураторе внутри процедур и функций. Процедура не возвращает значение, функция — возвращает через оператор «Возврат». Инструкции заканчиваются точкой с запятой, блоки выделяются ключевыми словами, а не отступами или скобками.

Функция РассчитатьСуммуСНДС(СуммаБезНДС, СтавкаНДС)

Если СтавкаНДС = 0 Тогда

Возврат СуммаБезНДС;

КонецЕсли;

СуммаНДС = СуммаБезНДС * СтавкаНДС / 100;

Возврат СуммаБезНДС + СуммаНДС;

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

Циклы записываются конструкциями «Для … Цикл … КонецЦикла» и «Пока … Цикл». Для обхода коллекций есть вариант «Для Каждого Элемент Из Коллекции Цикл». Комментарии начинаются с двойного слэша. Язык нечувствителен к регистру: «Сообщить» и «СООБЩИТЬ» — одно и то же.

bsl
Для Каждого СтрокаТовара Из Товары Цикл
	Сообщить(СтрокаТовара.Номенклатура);
КонецЦикла;

Язык запросов: выборка данных без перебора

Работа с данными в 1С строится через запросы, а не через перебор записей в цикле. Запрос описывается текстом: «ВЫБРАТЬ … ИЗ Справочник.Номенклатура ГДЕ …». Платформа транслирует его в SQL конкретной СУБД (MS SQL Server, PostgreSQL и др.), поэтому запросы выполняются на стороне сервера базы данных и работают быстро.

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

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

В управляемых формах код делится на клиентский и серверный. Директивы компиляции определяют контекст: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. На клиенте нельзя выполнять запросы к базе и обращаться к объектным данным — только вызывать серверные процедуры. Это принципиальное отличие от классических десктопных языков, где весь код выполняется в одном месте.

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

Чем язык 1С отличается от универсальных языков

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

КритерийВстроенный язык 1СPython / C# / Java
НазначениеБизнес-логика внутри платформыУниверсальные задачи
СинтаксисРусский и английский вариантыТолько английский
Работа с БДОбъектная модель + язык запросов, таблицы создаёт платформаSQL, ORM, ручное проектирование схемы
Среда разработкиКонфигуратор или EDTЛюбая IDE
ИсполнениеВнутри платформы 1СИнтерпретатор или виртуальная машина
ООПОграниченное: нет наследования и своих классовПолноценное

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

Как начать изучение: порядок действий

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

Порядок освоения языка
  1. 1
    Установите учебную версию платформы и разверните демонстрационную базу
  2. 2
    Изучите базовый синтаксис: переменные, условия, циклы, процедуры и функции
  3. 3
    Разберитесь с объектной моделью: справочники, документы, регистры сведений и накопления
  4. 4
    Освойте язык запросов: выборки, соединения, группировки, временные таблицы
  5. 5
    Напишите простую обработку с управляемой формой и серверными вызовами
  6. 6
    Изучите отладчик: точки останова, табло, стек вызовов
  7. 7
    Сделайте учебный проект целиком: например, учёт складских остатков с отчётом на СКД

Эффективнее всего учиться на задачах, а не на чтении справки: поставьте цель «документ прихода товара должен увеличивать остаток на складе» и добивайтесь работающего результата. Так одновременно осваиваются синтаксис, метаданные и механизмы проведения.

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

Расширения и внешние компоненты: границы языка

Когда встроенного языка не хватает — например, нужна работа с оборудованием или сложная криптография — используются внешние компоненты по технологии Native API, написанные на C++. Для интеграций применяют HTTP-сервисы, веб-сервисы и файловый обмен, которые реализуются штатными средствами платформы без сторонних языков.

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

Маршрут решения

Как выбрать подход к доработке

Нужно добавить печатную форму, отчёт или обработкуИспользуйте внешнюю обработку или расширение — конфигурация не меняется
Нужно изменить поведение типового документаСоздайте расширение с аннотациями &Перед, &После или &Вместо
Требуется функция, которой нет в платформе (драйвер, шифрование)Рассмотрите внешнюю компоненту Native API или интеграцию через HTTP
Доработка масштабная и затрагивает ядро логикиСнимайте конфигурацию с полной поддержки осознанно и документируйте изменения

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

Основной инструмент — встроенный отладчик конфигуратора. Точки останова ставятся клавишей F9, пошаговое выполнение — F10/F11, значения переменных смотрятся через табло (Shift+F9). Отладка работает и для серверного кода: нужно запустить конфигуратор в режиме отладки и подключиться к сеансу.

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

Итог

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

1С программируется на собственном встроенном языке с русским и английским синтаксисом, дополненном языком запросов. Освоение строится вокруг объектной модели платформы, а ключ к качественному коду — грамотные запросы и правильное разделение клиентского и серверного контекста.

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

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

Нет, встроенный язык 1С вполне подходит как первый. Базовые концепции — переменные, условия, циклы, функции — универсальны. Знание SQL даст преимущество при изучении языка запросов, но не является обязательным.

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

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

Чем конфигуратор отличается от 1C:EDT?

Конфигуратор — классическая среда разработки, встроенная в платформу. EDT — среда на базе Eclipse с более удобным редактором, контролем версий через Git и проверками кода. Язык один и тот же, различается только инструментарий.

Подойдёт ли язык 1С для задач вне учётных систем?

Нет, код исполняется только внутри платформы «1С:Предприятие». Для скриптов, сайтов или мобильных приложений нужны другие языки; 1С в таких сценариях выступает источником данных через HTTP-сервисы и API.

Сколько времени занимает освоение языка с нуля?

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

Что такое расширение конфигурации и зачем оно нужно?

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