Разработка и Конфигурация · 10 мин
1С-программирование: на каком языке пишут и как его освоить
На каком языке пишут в 1С: устройство встроенного языка, синтаксис, отличия от других языков, с чего начать обучение и типичные ошибки новичков.
1С-программирование ведётся на собственном встроенном языке платформы «1С:Предприятие». Это не C++, не Python и не Java — язык создан специально для описания бизнес-логики: проведения документов, расчёта остатков, формирования отчётов. Его ключевая особенность — двуязычный синтаксис: ключевые слова можно писать как по-русски («Если», «Тогда», «КонецЕсли»), так и по-английски («If», «Then», «EndIf»), причём оба варианта работают одинаково.
Язык тесно интегрирован с объектной моделью конфигурации: справочниками, документами, регистрами, отчётами. Разработчик не описывает структуру базы данных вручную — платформа сама создаёт таблицы на основе метаданных, а код оперирует готовыми объектами. Поэтому изучение языка 1С неотделимо от изучения самой платформы и её объектной модели.
Порог входа ниже, чем у универсальных языков, но это не значит, что язык «простой»: типичные ошибки новичков — незнание встроенного языка запросов, неправильная работа с транзакциями и игнорирование разницы между клиентским и серверным контекстом исполнения. Ниже разберём устройство языка, его возможности и порядок освоения.
Из чего состоит языковая среда 1С
Под «языком 1С» обычно понимают три связанных компонента. Первый — встроенный язык (его иногда называют «1С-script»): им описывают алгоритмы в модулях объектов, форм, общих модулях. Второй — язык запросов: декларативный язык выборки данных, синтаксически близкий к SQL, но адаптированный под объекты конфигурации. Третий — язык выражений системы компоновки данных (СКД), используемый в отчётах для вычисляемых полей и отборов.
Встроенный язык — высокоуровневый, с динамической типизацией. Переменные не требуют объявления типа, памятью управляет платформа. Основные типы данных: число, строка, дата, булево, а также ссылки на объекты базы (СправочникСсылка, ДокументСсылка) и универсальные коллекции — массив, структура, соответствие, таблица значений.
Как выглядит синтаксис: пример кода
Код пишется в конфигураторе внутри процедур и функций. Процедура не возвращает значение, функция — возвращает через оператор «Возврат». Инструкции заканчиваются точкой с запятой, блоки выделяются ключевыми словами, а не отступами или скобками.
Функция РассчитатьСуммуСНДС(СуммаБезНДС, СтавкаНДС)
Если СтавкаНДС = 0 Тогда
Возврат СуммаБезНДС;
КонецЕсли;
СуммаНДС = СуммаБезНДС * СтавкаНДС / 100;
Возврат СуммаБезНДС + СуммаНДС;
КонецФункции
Циклы записываются конструкциями «Для … Цикл … КонецЦикла» и «Пока … Цикл». Для обхода коллекций есть вариант «Для Каждого Элемент Из Коллекции Цикл». Комментарии начинаются с двойного слэша. Язык нечувствителен к регистру: «Сообщить» и «СООБЩИТЬ» — одно и то же.
Для Каждого СтрокаТовара Из Товары Цикл
Сообщить(СтрокаТовара.Номенклатура);
КонецЦикла;Язык запросов: выборка данных без перебора
Работа с данными в 1С строится через запросы, а не через перебор записей в цикле. Запрос описывается текстом: «ВЫБРАТЬ … ИЗ Справочник.Номенклатура ГДЕ …». Платформа транслирует его в SQL конкретной СУБД (MS SQL Server, PostgreSQL и др.), поэтому запросы выполняются на стороне сервера базы данных и работают быстро.
Типичная ошибка начинающих — получать выборку и внутри цикла обращаться к реквизитам через точку от ссылки. Каждое такое обращение — отдельный неявный запрос к базе, и на больших объёмах код «встаёт». Правильный подход — выбрать все нужные поля одним запросом с соединениями таблиц.
Клиент и сервер: где исполняется код
В управляемых формах код делится на клиентский и серверный. Директивы компиляции определяют контекст: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. На клиенте нельзя выполнять запросы к базе и обращаться к объектным данным — только вызывать серверные процедуры. Это принципиальное отличие от классических десктопных языков, где весь код выполняется в одном месте.
Минимизируйте количество серверных вызовов: каждый вызов — это сетевой обмен. Собирайте данные на клиенте и передавайте на сервер пакетом, а не по одному значению. Для времени выполнения серверных процедур полезно замерять код через встроенную оценку производительности или журнал регистрации.
Чем язык 1С отличается от универсальных языков
Сравнение помогает понять, что переносить из опыта других языков, а что придётся переучивать.
| Критерий | Встроенный язык 1С | Python / C# / Java |
|---|---|---|
| Назначение | Бизнес-логика внутри платформы | Универсальные задачи |
| Синтаксис | Русский и английский варианты | Только английский |
| Работа с БД | Объектная модель + язык запросов, таблицы создаёт платформа | SQL, ORM, ручное проектирование схемы |
| Среда разработки | Конфигуратор или EDT | Любая IDE |
| Исполнение | Внутри платформы 1С | Интерпретатор или виртуальная машина |
| ООП | Ограниченное: нет наследования и своих классов | Полноценное |
Главное отличие — язык существует только внутри экосистемы платформы. Нельзя написать на нём отдельное приложение, сайт или скрипт для операционной системы. Зато платформа даёт готовые механизмы: проведение документов, итоги по регистрам, права доступа, журнал регистрации — то, что на универсальном стеке пришлось бы строить месяцами.
Как начать изучение: порядок действий
Для старта достаточно учебной версии платформы и демонстрационной конфигурации. Учебная версия бесплатна и не требует лицензии, но имеет ограничения: не работает с COM-объектами и некоторыми механизмами, базы нельзя использовать в реальной работе.
- 1Установите учебную версию платформы и разверните демонстрационную базу
- 2Изучите базовый синтаксис: переменные, условия, циклы, процедуры и функции
- 3Разберитесь с объектной моделью: справочники, документы, регистры сведений и накопления
- 4Освойте язык запросов: выборки, соединения, группировки, временные таблицы
- 5Напишите простую обработку с управляемой формой и серверными вызовами
- 6Изучите отладчик: точки останова, табло, стек вызовов
- 7Сделайте учебный проект целиком: например, учёт складских остатков с отчётом на СКД
Эффективнее всего учиться на задачах, а не на чтении справки: поставьте цель «документ прихода товара должен увеличивать остаток на складе» и добивайтесь работающего результата. Так одновременно осваиваются синтаксис, метаданные и механизмы проведения.
Расширения и внешние компоненты: границы языка
Когда встроенного языка не хватает — например, нужна работа с оборудованием или сложная криптография — используются внешние компоненты по технологии Native API, написанные на C++. Для интеграций применяют HTTP-сервисы, веб-сервисы и файловый обмен, которые реализуются штатными средствами платформы без сторонних языков.
Для доработки типовых конфигураций правильный инструмент — расширения конфигурации. Код расширения пишется на том же встроенном языке, но хранится отдельно и не мешает обновлению типового решения. Прямое изменение типовых модулей оправдано только в исключительных случаях.
Как выбрать подход к доработке
Как проверить, что код работает правильно
Основной инструмент — встроенный отладчик конфигуратора. Точки останова ставятся клавишей F9, пошаговое выполнение — F10/F11, значения переменных смотрятся через табло (Shift+F9). Отладка работает и для серверного кода: нужно запустить конфигуратор в режиме отладки и подключиться к сеансу.
Для проверки запросов используйте консоль запросов — она позволяет отладить текст запроса отдельно от кода и посмотреть результат. Перед переносом доработки в рабочую базу обязательно тестируйте на копии: ошибка в коде проведения может повредить учётные данные, и восстановление потребует резервной копии.
Что важно запомнить
1С программируется на собственном встроенном языке с русским и английским синтаксисом, дополненном языком запросов. Освоение строится вокруг объектной модели платформы, а ключ к качественному коду — грамотные запросы и правильное разделение клиентского и серверного контекста.
Частые вопросы
Нужно ли знать другой язык программирования перед изучением 1С?
Нет, встроенный язык 1С вполне подходит как первый. Базовые концепции — переменные, условия, циклы, функции — универсальны. Знание SQL даст преимущество при изучении языка запросов, но не является обязательным.
Можно ли писать код 1С на английском синтаксисе?
Да, оба варианта полностью равнозначны и могут смешиваться в одном модуле. На практике в российских проектах преобладает русский синтаксис, английский чаще встречается в международных разработках и у программистов с опытом других языков.
Чем конфигуратор отличается от 1C:EDT?
Конфигуратор — классическая среда разработки, встроенная в платформу. EDT — среда на базе Eclipse с более удобным редактором, контролем версий через Git и проверками кода. Язык один и тот же, различается только инструментарий.
Подойдёт ли язык 1С для задач вне учётных систем?
Нет, код исполняется только внутри платформы «1С:Предприятие». Для скриптов, сайтов или мобильных приложений нужны другие языки; 1С в таких сценариях выступает источником данных через HTTP-сервисы и API.
Сколько времени занимает освоение языка с нуля?
Базовый синтаксис и простые доработки осваиваются за несколько недель регулярной практики. Уверенная работа с запросами, проведением документов и управляемыми формами обычно требует нескольких месяцев решения реальных задач.
Что такое расширение конфигурации и зачем оно нужно?
Это механизм доработки типовой конфигурации без изменения её модулей: код расширения хранится отдельно и подключается поверх. Так сохраняется возможность штатного обновления типового решения, а доработки не теряются при обновлении.