Что на самом деле пишут на встроенном языке 1С
Содержание
Язык 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С:Розница | Магазины и кассы | Подключение оборудования, бонусные программы |
Практик дорабатывает типовую почти всегда одним из трёх способов:
- Внешняя обработка или отчёт (файлы
.epfи.erf). Подключается через раздел дополнительных отчётов и обработок, конфигурацию не трогает. Подходит для печатных форм, загрузок, разовых операций. - Расширение конфигурации
(файл
.cfe, появились в платформе 8.3.6). Позволяет добавить реквизиты, переопределить процедуры типовой, не снимая её с поддержки. - Изменение основной конфигурации. Самый гибкий и самый дорогой путь: каждое обновление превращается в сравнение и объединение.
Правило, которое экономит бюджет на сопровождение: сначала ищите решение внешней обработкой, потом расширением, и только в последнюю очередь — правкой самой конфигурации.
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С по расписанию выгружает данные в отдельное хранилище, а дашборды строят 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С ещё и обвязку:
- Регистрацию изменений, чтобы не гонять весь справочник каждый раз.
- Сопоставление объектов по ИНН, артикулу или GUID, а не по наименованию.
- Журнал обмена с понятными сообщениями об ошибках.
- Повтор при сбое: если API не ответил, задание повторит отправку позже.
Пользовательские решения: от печатной формы до мобильного приложения
Самый короткий путь в язык 1С — мелкие доработки под конкретного пользователя. Самый длинный — собственная конфигурация с нуля.
Что пишут по нарастающей сложности:
- 🖨 Печатные формы — свой бланк счёта, накладной, договора с данными из документа.
- 📥 Обработки загрузки — прайсы поставщиков, реестры, выписки нестандартного формата.
- 📊 Свои отчёты — на СКД, под управленческий учёт компании.
- 🔁 Групповые операции — массовое изменение реквизитов, перепроведение по условиям.
- 🧱 Новые подсистемы в расширении — учёт заявок, рекламаций, сервисного обслуживания.
- 📱 Мобильные приложения — на мобильной платформе 1С под Android и iOS: приложение для торгового агента, складского учёта со сканером, курьерской доставки. Синхронизация с основной базой идёт через веб-сервисы или HTTP-сервисы.
- 🗂 Собственные конфигурации — когда типовые не подходят: учёт аренды, проката, нестандартного производства.
Для инструментов разработчика тоже есть выбор. Классика — Конфигуратор. Для командной работы с Git используют 1C:EDT — среду на базе Eclipse. Сценарное тестирование интерфейса делают открытым инструментом Vanessa Automation, а качество кода проверяют статическим анализом, например BSL Language Server.
Любую доработку, которая пишет данные (групповая обработка, загрузка, перепроведение), сначала запускайте на копии базы. Перед запуском в рабочей базе сделайте резервную копию — откатить массовое изменение без неё почти невозможно.