Что на самом деле пишут на встроенном языке 1С

· 10 мин

Содержание

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

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

Язык 1С в типовых конфигурациях: бухгалтерия, зарплата, торговля

Где лежит код и как он исполняется

Встроенный язык — это код модулей конфигурации. Он исполняется внутри платформы: на сервере 1С или на клиенте (тонком, толстом, веб-клиенте, мобильном). Синтаксис есть в двух вариантах — русском и английском, работают оба.

К языку прилагается язык запросов — диалект, похожий на SQL. Он читает данные из справочников, документов и регистров. Платформа сама переводит такой запрос в SQL под конкретную СУБД: файловую, MS SQL Server, PostgreSQL и другие поддерживаемые.

Где именно лежит код:

  • 📦 модули объектов и менеджеров — логика справочников, документов, регистров;
  • 🧾 модули форм — поведение экранов, кнопок, полей;
  • 🧩 общие модули — переиспользуемые процедуры;
  • ⏰ регламентные задания — фоновые операции по расписанию;
  • 🌐 модули HTTP- и веб-сервисов — точки входа для внешних систем.

Простейший пример — выборка товаров без пометки удаления:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	Номенклатура.Наименование КАК Наименование
|ИЗ
|	Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|	НЕ Номенклатура.ПометкаУдаления";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	Сообщить(Выборка.Наименование);
КонецЦикла;

Есть и жизнь за пределами платформы. OneScript — независимая открытая реализация языка 1С для скриптов. На нём пишут утилиты для администраторов: выгрузку баз по расписанию, сборку релизов, автоматизацию CI. Платформа 1С для запуска таких скриптов не нужна.

Какие типовые решения дорабатывают

Самая массовая сфера применения — типовые решения фирмы 1С. Код в них открыт: любой программист видит его в Конфигураторе или 1C:EDT и может дорабатывать.

КонфигурацияЧто автоматизируетТипичные доработки на языке 1С
1С:Бухгалтерия 3.0Учёт, налоги, отчётностьПечатные формы, загрузка выписок и реестров, свои отчёты
1С:ЗУП 3.1Зарплата, кадры, отпускаЗагрузка табеля из СКУД, нестандартные начисления
1С:Управление торговлей 11Продажи, закупки, складЦенообразование, правила резерва, обмен с сайтом
1С:УНФМалый бизнес целикомПод конкретный процесс: заказы, производство, CRM
1С:РозницаМагазины и кассыПодключение оборудования, бонусные программы

Практик дорабатывает типовую почти всегда одним из трёх способов:

  1. Внешняя обработка или отчёт (файлы .epf и .erf). Подключается через раздел дополнительных отчётов и обработок, конфигурацию не трогает. Подходит для печатных форм, загрузок, разовых операций.
  2. Расширение конфигурации (файл .cfe, появились в платформе 8.3.6). Позволяет добавить реквизиты, переопределить процедуры типовой, не снимая её с поддержки.
  3. Изменение основной конфигурации. Самый гибкий и самый дорогой путь: каждое обновление превращается в сравнение и объединение.

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

ERP и комплексная автоматизация предприятия

В крупных решениях — 1С:ERP Управление предприятием 2 и 1С:Комплексная автоматизация 2 — язык 1С описывает уже не отдельный учёт, а сквозные процессы: от заказа клиента до производства, закупки материалов и казначейства.

Здесь программист чаще решает такие задачи:

  • 🏭 планирование и производство — правила расчёта потребностей, маршрутные листы, нестандартные схемы выпуска;
  • 💰 бюджетирование — свои статьи, правила заполнения, проверки лимитов;
  • 🔐 права доступа — ограничения на уровне записей (RLS), чтобы менеджер видел только своих клиентов;
  • ⚙️ производительность — переписывание тяжёлых запросов, разнесение расчётов в фоновые задания.

Главное отличие ERP-проектов — объём кода и нагрузка. В базе работают сотни пользователей одновременно, поэтому код пишут с оглядкой на блокировки и время транзакций. Типичный приём — управляемые блокировки и короткие транзакции: всё, что можно вычислить заранее, считают до начала записи.

Веб-разработка и интеграция с сайтами

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

Варианты, которые встречаются на практике:

СпособКак работаетКогда выбирать
Обмен по CommerceMLТиповой механизм обмена с сайтом в торговых конфигурациях, XML-файлы каталога и заказовСайт на популярной CMS с готовым модулем обмена
HTTP-сервис в 1СВы сами описываете адреса и методы, сайт ходит в 1С по RESTНужен онлайн-ответ: остаток, статус заказа, цена клиента
Стандартный интерфейс ODataПлатформа сама публикует объекты конфигурации по протоколу ODataБыстро отдать данные внешнему сервису без своего кода
Исходящие запросы из 1С1С сама обращается к API сайта или маркетплейсаВыгрузка заказов, загрузка отзывов и статусов

HTTP-сервис публикуется на веб-сервере (Apache или IIS) вместе с базой. Обработчик метода выглядит так:

Функция ЗаказыGET(Запрос)
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
	Ответ.УстановитьТелоИзСтроки("{""status"":""ok""}");
	Возврат Ответ;
КонецФункции

Обратное направление — 1С забирает данные из чужого API и разбирает JSON:

Соединение = Новый HTTPСоединение("api.example.ru", , , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/orders?status=new");
Запрос.Заголовки.Вставить("Accept", "application/json");

Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
	Данные = ПрочитатьJSON(Чтение);
	Чтение.Закрыть();
КонецЕсли;

Публикуя базу в интернет, не открывайте наружу всю публикацию. Отдавайте только нужные HTTP-сервисы, заведите для обмена отдельного пользователя с минимальными правами и закройте доступ по HTTPS.

Отчёты, аналитика и большие объёмы данных

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

Что делают на СКД и языке запросов:

  • 📊 управленческие отчёты: валовая прибыль по менеджерам, оборачиваемость запасов, ABC/XYZ-анализ;
  • 📈 сводные таблицы с детализацией до документа;
  • 🧮 расчётные показатели через вычисляемые поля и ресурсы;
  • 📬 рассылку отчётов по расписанию на почту.

Отдельный вопрос — большие данные. 1С хорошо держит учётные базы в сотни гигабайт и выше на MS SQL или PostgreSQL, но это транзакционная система, а не аналитическое хранилище. Когда история продаж за годы считается в отчёте минутами, практики идут двумя путями:

  1. Оптимизируют внутри 1С: временные таблицы в пакетных запросах, отборы по индексированным полям, запрос к таблицам итогов регистров вместо движений.
  2. Выносят аналитику наружу: 1С по расписанию выгружает данные в отдельное хранилище, а дашборды строят BI-системы. Язык 1С здесь отвечает за выгрузку и её полноту.

Если отчёт тормозит, первым делом проверьте, не обращаются ли к реквизитам через точку внутри цикла. Перенос этих данных в сам запрос часто ускоряет отчёт в разы.

Документооборот, согласования и электронный архив

Язык 1С используется и там, где учёта денег нет вовсе. Решение 1С:Документооборот целиком построено на той же платформе: карточки документов, маршруты согласования, поручения, контроль сроков.

Типичные задачи разработчика в этой сфере:

  • ✍️ маршруты согласования — договор уходит юристу, затем финансисту, а при сумме выше порога — директору;
  • 📎 присоединённые файлы — хранение сканов в базе или в томах на диске, поиск по реквизитам;
  • 🔗 связь с учётной системой — договор, согласованный в документообороте, появляется в бухгалтерии без ручного ввода;
  • 📨 электронный документооборот с контрагентами — встроенные механизмы ЭДО в типовых конфигурациях дорабатывают под свои правила: автоматическое сопоставление номенклатуры, обработку входящих УПД.

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

Отраслевые решения: неочевидные сферы применения

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

Примеры сфер, где язык 1С работает за пределами «бухгалтерии»:

  • 🏥 медицина — запись пациентов, электронные медкарты, расчёты со страховыми (линейка 1С:Медицина);
  • 🍽 общепит — технологические карты, калькуляция блюд, списание продуктов по рецептуре;
  • 🚜 сельское хозяйство — учёт полей, урожая, поголовья;
  • 🏗 строительство — сметы, учёт материалов на объектах, акты выполненных работ;
  • 🎓 образование — учёт студентов, расписание, платные услуги;
  • 🏛 бюджетная сфера — учёт в госучреждениях по своим планам счетов.

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

1С как центр обмена данными

Во многих компаниях учётная база — узел, к которому подключено всё остальное: склад, сайт, банк, онлайн-кассы, CRM. Язык 1С здесь обслуживает обмены.

Основные механизмы интеграции:

МеханизмДля чего
Планы обменаРегистрация изменений и обмен между базами 1С, в том числе распределённые базы филиалов
Конвертация данных и формат EnterpriseDataОбмен между разными конфигурациями: например, УТ → Бухгалтерия
COM-соединение (V83.COMConnector)Доступ к базе 1С из внешней программы под Windows
Веб-сервисы (SOAP) и HTTP-сервисы (REST)Обмен с любыми внешними системами по сети
Внешние компонентыРабота с оборудованием и библиотеками, которых нет в платформе
Файлы XML, JSON, CSV, ExcelПростые загрузки и выгрузки по расписанию

Хорошо сделанный обмен — это не только передача данных. Программист пишет на языке 1С ещё и обвязку:

  1. Регистрацию изменений, чтобы не гонять весь справочник каждый раз.
  2. Сопоставление объектов по ИНН, артикулу или GUID, а не по наименованию.
  3. Журнал обмена с понятными сообщениями об ошибках.
  4. Повтор при сбое: если API не ответил, задание повторит отправку позже.
Какая задача обмена у вас?

Пользовательские решения: от печатной формы до мобильного приложения

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

Что пишут по нарастающей сложности:

  1. 🖨 Печатные формы — свой бланк счёта, накладной, договора с данными из документа.
  2. 📥 Обработки загрузки — прайсы поставщиков, реестры, выписки нестандартного формата.
  3. 📊 Свои отчёты — на СКД, под управленческий учёт компании.
  4. 🔁 Групповые операции — массовое изменение реквизитов, перепроведение по условиям.
  5. 🧱 Новые подсистемы в расширении — учёт заявок, рекламаций, сервисного обслуживания.
  6. 📱 Мобильные приложения — на мобильной платформе 1С под Android и iOS: приложение для торгового агента, складского учёта со сканером, курьерской доставки. Синхронизация с основной базой идёт через веб-сервисы или HTTP-сервисы.
  7. 🗂 Собственные конфигурации — когда типовые не подходят: учёт аренды, проката, нестандартного производства.

Для инструментов разработчика тоже есть выбор. Классика — Конфигуратор. Для командной работы с Git используют 1C:EDT — среду на базе Eclipse. Сценарное тестирование интерфейса делают открытым инструментом Vanessa Automation, а качество кода проверяют статическим анализом, например BSL Language Server.

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

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

Можно ли на языке 1С писать программы, не связанные с учётом?
Технически да: мобильные приложения, сервисы, утилиты на OneScript. Но сильная сторона языка — объекты учёта, запросы и формы, поэтому вне бизнес-автоматизации его выбирают редко.
Язык 1С похож на какой-то другой язык?
Синтаксис ближе всего к Visual Basic и Pascal: Процедура/КонецПроцедуры, Если/КонецЕсли, Для/Цикл. Язык запросов напоминает SQL, но работает с объектами конфигурации, а не с таблицами СУБД напрямую.
Нужно ли знать бухгалтерию, чтобы программировать на 1С?
Для доработки Бухгалтерии и ЗУП — да, хотя бы основы: счета, проводки, налоги, начисления. Для интеграций, мобильных приложений и администрирования хватает знания платформы.
Можно ли писать код на английском синтаксисе?
Да, платформа понимает оба варианта, а в свойствах конфигурации задаётся вариант встроенного языка. Типовые конфигурации написаны на русском, поэтому для доработок принято писать так же.
Чем расширение лучше правки типовой конфигурации?
Расширение не снимает конфигурацию с поддержки, и обновления ставятся проще. Изменения лежат отдельно, их легко найти, отключить или перенести в другую базу.