Встроенный язык 1С:Предприятия глазами практика: что на нём пишут и чем он отличается
Содержание
Язык 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С | Python | Java / C# |
|---|---|---|---|
| Типизация | Динамическая | Динамическая | Статическая |
| Где выполняется | Только в платформе 1С | Где угодно | JVM / .NET |
| Классы и наследование | Нет, вместо них объекты метаданных | Есть | Есть |
| Работа с БД | Встроенная, язык запросов | Через библиотеки и ORM | Через ORM/драйверы |
| Формы и интерфейс | Генерирует платформа | Отдельные фреймворки | Отдельные фреймворки |
| Порог входа в учётную задачу | Низкий | Высокий | Высокий |
| Применение вне учёта | Узкое | Очень широкое | Очень широкое |
Главное отличие — нет пользовательских классов. Нельзя объявить свой тип с наследованием, как в Java. Повторно используемая логика выносится в общие модули, а «объектами» служат справочники, документы и регистры, описанные в метаданных.
Второе отличие — привязка к платформе. Код 1С не запустится без «1С:Предприятия». Исключение — открытый проект OneScript: интерпретатор синтаксиса 1С для сценариев автоматизации (сборка, деплой, обработка файлов). Прикладные объекты конфигурации в нём недоступны.
Опыт в 1С плохо переносится в обратную сторону. Разработчику на 1С, который хочет перейти в Python или Java, придётся осваивать ООП, работу с СУБД напрямую и экосистему пакетов практически с нуля.
Какие задачи решает программист на языке 1С
Сферы применения языка 1С делятся на несколько направлений. Задачи в них отличаются сильно.
Доработка типовых конфигураций
Самая массовая работа. Клиенту нужна своя печатная форма, дополнительная проверка, новый реквизит в документе или отчёт под управленческий учёт.
Практический приём, без которого сейчас никуда, — расширения конфигурации
(появились в платформе 8.3.6). Доработка лежит отдельно от типовой конфигурации, поэтому базу можно обновлять, не снимая её с поддержки и не сравнивая конфигурации вручную. Расширение перехватывает обработчики типовой через аннотации &Перед, &После, &Вместо и &ИзменениеИКонтроль.
Разработка с нуля
Собственные отраслевые решения: учёт в автосервисе, клинике, на производстве. Здесь программист проектирует метаданные целиком и обычно опирается на БСП — Библиотеку стандартных подсистем, на которой построены типовые конфигурации (пользователи, права, печать, обновление версий, дополнительные отчёты).
Интеграции и обмены
Связка 1С с интернет-магазином, банком, маркетплейсом, ЭДО, WMS склада. Сюда же — обмены между базами (например, УТ и Бухгалтерия) на планах обмена или через «Конвертацию данных».
Отчёты и аналитика
Отчёты на СКД, выгрузки в BI-системы. Задача на стыке программирования и бухгалтерии: нужно понимать и язык запросов, и смысл счетов.
Производительность и сопровождение
Поиск медленных запросов, борьба с блокировками, оптимизация проведения. Это уровень опытного специалиста: здесь нужны знание устройства регистров, технологический журнал и понимание работы СУБД.
Отладка и тестирование кода 1С
Отладчик встроен и в Конфигуратор, и в EDT. Классический цикл в Конфигураторе:
- Поставьте точку останова на нужной строке модуля — клавиша
F9. - Запустите отладку: меню
Отладка → Начать отладкуилиF5, откроется клиентское приложение. - Выполните в нём действие, которое приводит к коду, — например, проведите документ.
- Когда выполнение остановится, смотрите значения переменных в табло и вычисляйте выражения прямо по ходу.
- Шагайте по коду:
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С.