Встроенный язык 1С:Предприятия глазами практика: что на нём пишут и чем он отличается

· 9 мин

Содержание

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

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

Назначение языка 1С и архитектура платформы

Платформа и конфигурация в 1С разделены. Платформа — это исполняемая часть (1cv8.exe, сервер, веб-клиент). Конфигурация — описание конкретной программы: Бухгалтерия, ЗУП, УТ или своя разработка.

Конфигурация собирается из двух слоёв:

  • 🧱 Метаданные — объекты, которые создаются мышью в Конфигураторе: справочники, документы, регистры накопления и сведений, планы счетов, отчёты, обработки, роли.
  • 📝 Код на встроенном языке — процедуры и функции в модулях этих объектов.

Таблицы в базе данных платформа создаёт сама по метаданным. Разработчик не пишет CREATE TABLE и не думает, работает база в файловом режиме или на PostgreSQL / MS SQL — код один и тот же.

Где живёт код

МодульЧто в нём пишут
Модуль объекта (документа, справочника)Проверки при записи, обработку проведения, заполнение
Модуль менеджераПроцедуры, общие для всех объектов этого вида: печать, выборки
Модуль формыРеакцию на кнопки и поля, вызовы сервера
Общий модульПереиспользуемые функции для всей конфигурации
Модуль сеансаДействия при старте сеанса пользователя
Модуль приложенияСобытия запуска и завершения клиентского приложения

Клиент и сервер в одном языке

В управляемом приложении код делится по месту исполнения директивами компиляции. Их четыре основных:

  • &НаКлиенте — код выполняется на компьютере пользователя, работает с формой;
  • &НаСервере — на сервере, с доступом к данным формы;
  • &НаСервереБезКонтекста — на сервере, без передачи формы, поэтому быстрее;
  • &НаКлиентеНаСервереБезКонтекста — может вызываться и там и там.

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

Правило практиков: на сервер ходите один раз, собирайте всё нужное в одной функции и возвращайте простую структуру или массив, а не всю форму.

Возможности языка для автоматизации учёта

Язык 1С сильнее универсальных языков там, где нужен учёт. Готовые прикладные объекты закрывают задачи, на которые в Java или Python ушли бы недели.

Что даёт платформа из коробки:

  • 📊 Регистры накопления — остатки и обороты с автоматическими итогами. Остаток товара на дату получается одним запросом к виртуальной таблице.
  • 🧾 Регистры бухгалтерии — проводки по плану счетов с субконто.
  • 🔐 Роли и права — вплоть до ограничения доступа на уровне записей (RLS).
  • 🖨 Табличные документы — печатные формы по макету без сторонних генераторов.
  • 📈 Система компоновки данных (СКД) — отчёты с группировками, отборами и пользовательскими настройками.
  • 🔄 Планы обмена — регистрация изменений для обмена между базами.

Язык запросов

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

&НаКлиенте
Процедура ПроверитьКонтрагентов(Команда)
    Количество = КоличествоБезИННаСервере();
    Сообщить(СтрШаблон("Контрагентов без ИНН: %1", Количество));
КонецПроцедуры

&НаСервереБезКонтекста
Функция КоличествоБезИННаСервере()
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |    КОЛИЧЕСТВО(Контрагенты.Ссылка) КАК Количество
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |    Контрагенты.ИНН = """"
    |    И НЕ Контрагенты.ЭтоГруппа");
    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();
    Возврат Выборка.Количество;
КонецФункции

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

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

Обработчик проведения — самый узнаваемый фрагмент кода 1С. Ниже пример для собственной конфигурации, где есть документ с табличной частью «Товары» и регистр накопления «ОстаткиТоваров» (имена условные). Код живёт в модуле объекта документа.

Процедура ОбработкаПроведения(Отказ, Режим)
    Движения.ОстаткиТоваров.Записывать = Истина;
    Для Каждого Строка Из Товары Цикл
        Движение = Движения.ОстаткиТоваров.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Номенклатура = Строка.Номенклатура;
        Движение.Количество = Строка.Количество;
    КонецЦикла;
КонецПроцедуры

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

Интеграции

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

  • HTTP-запросы к REST API (объекты HTTPСоединение, HTTPЗапрос);
  • собственные HTTP-сервисы и веб-сервисы, опубликованные на веб-сервере;
  • чтение и запись JSON и XML;
  • работу с файлами, почтой, внешними компонентами.

Плюс стандартный интерфейс OData, через который внешняя система читает данные базы без единой строки кода.

Чем язык 1С отличается от Python, Java и C#

Язык 1С синтаксически ближе всего к Basic и Pascal: блоки Если … Тогда … КонецЕсли, Для Каждого … Цикл … КонецЦикла. У каждого ключевого слова есть английский вариант (If, Procedure, Query), но в типовых конфигурациях код пишут по-русски.

ПризнакЯзык 1СPythonJava / C#
ТипизацияДинамическаяДинамическаяСтатическая
Где выполняетсяТолько в платформе 1СГде угодноJVM / .NET
Классы и наследованиеНет, вместо них объекты метаданныхЕстьЕсть
Работа с БДВстроенная, язык запросовЧерез библиотеки и ORMЧерез ORM/драйверы
Формы и интерфейсГенерирует платформаОтдельные фреймворкиОтдельные фреймворки
Порог входа в учётную задачуНизкийВысокийВысокий
Применение вне учётаУзкоеОчень широкоеОчень широкое

Главное отличие — нет пользовательских классов. Нельзя объявить свой тип с наследованием, как в Java. Повторно используемая логика выносится в общие модули, а «объектами» служат справочники, документы и регистры, описанные в метаданных.

Второе отличие — привязка к платформе. Код 1С не запустится без «1С:Предприятия». Исключение — открытый проект OneScript: интерпретатор синтаксиса 1С для сценариев автоматизации (сборка, деплой, обработка файлов). Прикладные объекты конфигурации в нём недоступны.

Опыт в 1С плохо переносится в обратную сторону. Разработчику на 1С, который хочет перейти в Python или Java, придётся осваивать ООП, работу с СУБД напрямую и экосистему пакетов практически с нуля.

Какие задачи решает программист на языке 1С

Сферы применения языка 1С делятся на несколько направлений. Задачи в них отличаются сильно.

Доработка типовых конфигураций

Самая массовая работа. Клиенту нужна своя печатная форма, дополнительная проверка, новый реквизит в документе или отчёт под управленческий учёт.

Практический приём, без которого сейчас никуда, — расширения конфигурации (появились в платформе 8.3.6). Доработка лежит отдельно от типовой конфигурации, поэтому базу можно обновлять, не снимая её с поддержки и не сравнивая конфигурации вручную. Расширение перехватывает обработчики типовой через аннотации &Перед, &После, &Вместо и &ИзменениеИКонтроль.

Разработка с нуля

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

Интеграции и обмены

Связка 1С с интернет-магазином, банком, маркетплейсом, ЭДО, WMS склада. Сюда же — обмены между базами (например, УТ и Бухгалтерия) на планах обмена или через «Конвертацию данных».

Отчёты и аналитика

Отчёты на СКД, выгрузки в BI-системы. Задача на стыке программирования и бухгалтерии: нужно понимать и язык запросов, и смысл счетов.

Производительность и сопровождение

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

Проверьте себя
Где можно выполнить запрос к базе данных?
Как доработать типовую конфигурацию, не снимая её с поддержки?
Чего нет во встроенном языке 1С?

Отладка и тестирование кода 1С

Отладчик встроен и в Конфигуратор, и в EDT. Классический цикл в Конфигураторе:

  1. Поставьте точку останова на нужной строке модуля — клавиша F9.
  2. Запустите отладку: меню Отладка → Начать отладку или F5, откроется клиентское приложение.
  3. Выполните в нём действие, которое приводит к коду, — например, проведите документ.
  4. Когда выполнение остановится, смотрите значения переменных в табло и вычисляйте выражения прямо по ходу.
  5. Шагайте по коду: F10 — без захода в процедуру, F11 — с заходом.

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

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

Замер производительности

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

Автотесты

Тестирование в мире 1С долго было ручным, сейчас это меняется:

  • 🧪 Vanessa-Automation — открытый инструмент для сценарных тестов на языке Gherkin («Дано… Когда… Тогда…»). Тест проходит по интерфейсу как пользователь.
  • 🔬 YAxUnit — модульные тесты для проектов в EDT: проверка отдельных функций общих модулей.
  • 🤖 Тест-клиент платформы — режим, в котором один сеанс 1С управляет другим. На нём построены сценарные инструменты.

Инструменты, экосистема и перспективы языка 1С

Экосистема вокруг языка заметно выросла за последние годы.

Среды разработки:

  • Конфигуратор — классическая среда, встроенная в платформу. Групповая работа идёт через хранилище конфигурации.
  • 1C:Enterprise Development Tools (EDT) — среда на базе Eclipse. Хранит конфигурацию в виде файлов, поэтому проект ведут в Git, делают ревью кода и непрерывную интеграцию.

Контроль качества:

  • проверка кода по стандартам разработки 1С (в EDT встроена, для Конфигуратора есть внешние анализаторы);
  • SonarQube с плагином для языка 1С — статический анализ в CI;
  • форматтеры и линтеры для редакторов, включая подсветку синтаксиса BSL в VS Code.

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

Куда движется язык

  • 🌐 Веб-клиент и мобильная платформа: тот же язык работает в браузере и в мобильных приложениях на «1С:Мобильная платформа».
  • 🧩 Ставка на расширения вместо правки типовых — фирма 1С последовательно развивает механизм расширений в новых версиях платформы.
  • ☁️ Облачные сервисы и «1С:Фреш» — код тот же, меняется только способ доставки.
  • 🆕 Отдельная технология «1С:Предприятие.Элемент» со своим языком, ближе к современным языкам со статической типизацией. Она развивается параллельно и не заменяет платформу 8.3, на которой работают типовые конфигурации.

Спрос на язык 1С держится, пока на платформе работает основная масса учёта в малом и среднем бизнесе. Каждый новый закон, форма отчёта или требование маркировки — это доработки, а значит, работа для программиста 1С.

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

Можно ли выучить язык 1С без опыта программирования?
Да. Синтаксис простой, а платформа скрывает работу с базой и интерфейсом. Сложнее даётся не язык, а предметная область: регистры, проведение, бухгалтерский смысл данных.
Нужно ли знать бухгалтерию программисту 1С?
Для доработки Бухгалтерии и ЗУП — на уровне понимания счетов, проводок и расчёта зарплаты. Глубоко — не обязательно, но без базовых знаний трудно понять, чего хочет заказчик.
Где попрактиковаться бесплатно?
У фирмы 1С есть учебная версия платформы для изучения программирования. Ограничение — небольшой объём данных и один пользователь, но для освоения языка и Конфигуратора этого достаточно.
Код 1С компилируется в exe-файл?
Нет. Код хранится в конфигурации и выполняется платформой «1С:Предприятие». Отдельной программы без платформы получить нельзя.
Чем английский синтаксис 1С отличается от русского?
Только ключевыми словами и именами встроенных объектов. Логика и возможности одинаковые, оба варианта можно смешивать в одном модуле, но в типовых конфигурациях принят русский.