Разработка и Конфигурация · 10 мин
Что такое язык 1С и для чего он нужен
Встроенный язык 1С:Предприятие простыми словами: для чего нужен, где пишется код, основные конструкции, примеры и типичные ошибки начинающих разработчиков.
Язык 1С — это встроенный язык программирования платформы «1С:Предприятие», на котором описывается вся бизнес-логика прикладных решений: проведение документов, расчёт зарплаты, формирование отчётов, обмен данными. Он не существует отдельно от платформы: код выполняется только внутри среды 1С и работает с её объектами — справочниками, документами, регистрами, запросами.
Главная особенность языка — предметная ориентация. Вместо абстрактных таблиц и строк разработчик оперирует понятиями учёта: «Документ.РеализацияТоваров», «Справочник.Номенклатура», «РегистрНакопления.ОстаткиТоваров». Благодаря этому код читается почти как описание хозяйственной операции, а порог входа для специалистов без классического программистского образования заметно ниже, чем у языков общего назначения.
Вторая особенность — двуязычие. Синтаксис существует в русском и английском вариантах, причём их можно смешивать в одном модуле. В российских конфигурациях традиционно используется русский вариант, поэтому код выглядит как «Если … Тогда … КонецЕсли;», а не «If … Then … EndIf».
Где именно пишется код на языке 1С
Код не хранится в отдельных файлах проекта, а размещается в модулях — специальных контейнерах внутри конфигурации. Каждый тип модуля отвечает за свою область: модуль объекта описывает поведение конкретного справочника или документа, модуль формы — логику экранной формы, общий модуль — процедуры, доступные из разных мест системы.
Открыть код можно в конфигураторе: выделите объект в дереве конфигурации, нажмите правую кнопку мыши и выберите «Открыть модуль» либо перейдите в форму и откройте её модуль. Процедуры и функции внутри модуля вызываются платформой при наступлении событий — например, «ПриЗаписи» документа или «ПриОткрытии» формы.
Из чего состоит язык: базовые конструкции
Синтаксис минималистичен и включает стандартный набор: переменные, условные операторы «Если…Тогда…Иначе…КонецЕсли», циклы «Для…Цикл» и «Пока…Цикл», процедуры и функции, обработку ошибок через «Попытка…Исключение…КонецПопытки». Каждая инструкция завершается точкой с запятой, регистр букв значения не имеет.
Типизация динамическая: тип переменной определяется присвоенным значением, а не объявлением. Одна и та же переменная может сначала хранить число, а затем строку — платформа это допустит, хотя такой стиль считается плохой практикой и усложняет поиск ошибок.
Функция РассчитатьСкидку(СуммаПокупки) Экспорт
Если СуммаПокупки >= 100000 Тогда
Возврат 10;
ИначеЕсли СуммаПокупки >= 50000 Тогда
Возврат 5;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Ключевое слово «Экспорт» делает процедуру или функцию видимой за пределами модуля. Без него метод остаётся приватным и доступен только внутри своего модуля — это основной способ инкапсуляции логики в 1С.
Работа с данными: запросы и объекты
Для чтения больших выборок данных язык 1С использует не последовательный перебор, а встроенный язык запросов, похожий на SQL. Запрос создаётся как объект, текст пишется в отдельном синтаксисе, результат обходится выборкой. Это быстрее и безопаснее, чем обход объектов в цикле, потому что выборка выполняется на стороне сервера базы данных.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Товар
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ПометкаУдаления = ЛОЖЬ";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Товар);
КонецЦикла;
Для изменения данных используется объектная модель: получаете объект методом «ПолучитьОбъект()», меняете реквизиты и вызываете «Записать()». Важно понимать разницу: ссылка — это лишь указатель на объект базы, а чтение и запись реквизитов идёт через объект. Частое чтение реквизитов «через точку» от ссылки порождает множество мелких обращений к базе и замедляет систему.
Клиент и сервер: где выполняется код
В управляемом приложении код делится на клиентский и серверный. Директивы компиляции «&НаКлиенте» и «&НаСервере» перед процедурой указывают, где она выполняется. На клиенте доступны форма, диалоги и файловая система пользователя; на сервере — запросы к базе и объектная модель данных.
Прямой вызов объектных методов (например, «ПолучитьОбъект()») с клиента невозможен — платформа выдаст ошибку. Поэтому типовая схема такая: клиентская процедура собирает данные формы и вызывает серверную, серверная выполняет работу с базой и возвращает результат. Чем меньше таких вызовов, тем отзывчивее интерфейс: десять мелких серверных вызовов заметно медленнее одного укрупнённого.
- 1Откройте конфигуратор и создайте общий модуль или откройте модуль формы
- 2Напишите функцию с простой логикой, например расчёт скидки по сумме
- 3Вызовите её из обработчика события, например при нажатии кнопки формы
- 4Запустите отладку (F5), поставьте точку останова (F9) и проверьте значения переменных
- 5Убедитесь, что результат выводится пользователю или записывается в данные
Чем язык 1С отличается от других языков программирования
Это не язык общего назначения: на нём нельзя написать драйвер, игру или веб-сайт вне платформы. Зато внутри своей области он даёт готовые механизмы, которые в других средах пришлось бы строить вручную: транзакции с базой, журналы событий, права доступа, блокировки, отчёты на СКД.
| Критерий | Язык 1С | Языки общего назначения (C#, Java) |
|---|---|---|
| Среда выполнения | Только платформа 1С:Предприятие | ОС, браузер, серверы, встраиваемые системы |
| Предметная область | Учёт, документы, бизнес-процессы | Любая |
| Синтаксис | Русский и/или английский | Английский |
| Работа с БД | Встроенный язык запросов и объектная модель | Внешние библиотеки и ORM |
| Типизация | Динамическая | Чаще статическая |
Для интеграций язык умеет работать с HTTP-запросами, веб-сервисами, файлами XML и JSON, COM-объектами. Этого достаточно для обмена с сайтами, банками и складскими системами, хотя сложную внешнюю логику иногда выносят во внешние компоненты или отдельные сервисы.
Типичные ошибки начинающих и ограничения языка
Самая частая ошибка — изменение типовой конфигурации напрямую вместо использования расширений. Такая доработка усложняет обновления: при каждом обновлении изменения придётся сопоставлять вручную. Второй типовой просчёт — запросы в цикле: обращение к базе на каждой итерации вместо одного запроса с соединением таблиц.
Из ограничений стоит знать: язык не поддерживает классы и наследование в привычном ООП-смысле, многопоточность внутри сеанса недоступна, а работа с памятью и низкоуровневыми структурами скрыта платформой. Для учётных задач это редко мешает, но переносить приёмы из других языков «один в один» не получится.
Как проверить, что код работает правильно
Основной инструмент — встроенный отладчик конфигуратора. Точки останова, пошаговое выполнение, табло значений переменных и стек вызовов позволяют увидеть, что реально происходит в коде. Для отладки серверного кода убедитесь, что сервер запущен в отладочном режиме, иначе точки останова на сервере не сработают.
Для проверки запросов используйте консоль запросов — она показывает результат до того, как вы встроите запрос в код. Для регламентных операций полезен журнал регистрации: туда попадают ошибки фоновых заданий, которые в интерфейсе не видны.
Как проверить результат
Проверка конфигурации проходит без ошибок
Красные сообщения в окне служебных сообщений
Отладчик проходит все ветки, переменные содержат ожидаемые значения
Прерывание с ошибкой или пустые значения в ключевых переменных
Документ проведён, движения в регистрах соответствуют логике
Записей нет, либо суммы/количества не совпадают с расчётом
Операция на реальном объёме данных выполняется за приемлемое время
Время растёт непропорционально объёму — вероятны запросы в цикле
Частые вопросы о языке 1С
Сложно ли выучить язык 1С без опыта программирования?
Базовый синтаксис осваивается быстро благодаря русским ключевым словам и предметной логике. Основная сложность не в языке, а в понимании платформы: объектной модели, регистров, механизмов проведения. Реалистичный путь — начать с простых обработок и отчётов, параллельно изучая устройство типовой конфигурации.
Можно ли писать код 1С на английском?
Да, платформа поддерживает английский вариант синтаксиса, и оба варианта можно смешивать в одном модуле. На практике в российских проектах принят русский синтаксис, а английский чаще встречается в международных разработках и примерах документации.
Чем язык запросов 1С отличается от SQL?
Он построен поверх SQL-подобного синтаксиса, но оперирует объектами конфигурации, а не физическими таблицами. Поддерживаются специфические возможности: виртуальные таблицы регистров, итоги, иерархия справочников. Вложенные запросы и временные таблицы тоже доступны.
Где выполняется код фоновых заданий?
Фоновые задания выполняются на сервере в отдельном сеансе. В них доступна вся серверная логика, но нет интерактивных возможностей: нельзя открыть форму, задать вопрос пользователю или показать предупреждение. Ошибки фоновых заданий смотрят в журнале регистрации.
Что такое расширение конфигурации и зачем оно нужно?
Расширение — это механизм доработки типовой конфигурации без изменения её кода: свои процедуры, формы и объекты добавляются отдельным слоем. При обновлении типовой конфигурации расширение сохраняется, что резко упрощает сопровождение. Это рекомендуемый способ любых доработок.
Подходит ли язык 1С для интеграции с внешними системами?
Да, в языке есть объекты для HTTP-запросов, работы с JSON, XML, текстовыми файлами и веб-сервисами. Этого хватает для обмена с сайтами, банками, маркетплейсами и складским оборудованием. Для нестандартных протоколов используют внешние компоненты.
Что важно запомнить
Язык 1С — встроенный язык платформы для описания учётной логики: модули, запросы, объектная модель, разделение клиент/сервер. Освойте отладчик, избегайте запросов в цикле, дорабатывайте типовые решения через расширения и тестируйте изменяющий данные код только на копии базы.