Встроенный язык 1С:Предприятия: от проводок до REST-интеграций

· 10 мин

Содержание

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

Частое заблуждение — считать встроенный язык 1С «языком для бухгалтерских проводок». На деле проводки — малая часть. Большая часть кода в типовых конфигурациях отвечает за интерфейс, обмены, права доступа и обработку данных, а вся БП 3.0 или ЗУП 3.1 написана на том же языке, что доступен любому программисту в Конфигураторе.

Как устроен язык 1С и где выполняется код

Встроенный язык — не самостоятельный язык общего назначения, как Python или C#. Он опирается на объекты платформы: справочники, документы, регистры. Программист не создаёт таблицы в СУБД вручную — он описывает объект метаданных, а платформа сама строит под него таблицы в файловой базе, MS SQL Server или PostgreSQL.

Из чего складывается разработка:

  • 🧱 Метаданные — дерево объектов конфигурации: справочники, документы, регистры, планы счетов, обработки, отчёты.
  • 📝 Модули — код, привязанный к объекту (модуль объекта, менеджера, формы) или общий (общие модули).
  • 🔎 Язык запросов — SQL-подобный, для выборки данных. Пишется внутри кода как строка.
  • 🖼 Формы и макеты — внешний вид и печатные формы.
  • 🔐 Роли — права пользователей на объекты и записи.

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

Язык двуязычный: каждое ключевое слово имеет английский аналог (Если — If, Процедура — Procedure). Типовые конфигурации написаны по-русски, но смешивать оба варианта в одном модуле платформа позволяет.

ИнструментГде пишут кодДля чего
Конфигураторвстроен в платформуосновная разработка, обновление конфигураций
1С:EDTотдельная среда на базе Eclipseкомандная разработка, работа с Git
Внешние обработки и отчёты (.epf, .erf)файл вне базыдоработки без изменения конфигурации
Расширения (.cfe)подключаются к базедоработка типовой без снятия с поддержки

Для доработки типовой БП 3.0 или ЗУП 3.1 сначала рассматривают расширение конфигурации (механизм есть с платформы 8.3.6). Типовая остаётся на поддержке, обновления ставятся без ручного сравнения и объединения.

Автоматизация учёта и документооборота на языке 1С

Ядро любой конфигурации — связка «документ → регистр». Документ фиксирует факт: продажу, приход, начисление зарплаты. При проведении код модуля документа записывает движения в регистры. Отчёты потом читают уже регистры, а не документы.

Какие объекты есть в распоряжении программиста:

  • 📚 Справочники — номенклатура, контрагенты, сотрудники.
  • 📄 Документы — первичка с проведением и нумерацией.
  • 📊 Регистры сведений — данные с историей: цены, курсы, ставки.
  • 📦 Регистры накопления — остатки и обороты: склад, взаиморасчёты.
  • 🧾 Регистры бухгалтерии вместе с планом счетов — проводки Дт/Кт с субконто.
  • 💰 Регистры расчёта и планы видов расчёта — зарплата с перерасчётами и периодами действия.
  • 🔄 Бизнес-процессы и задачи — маршруты согласования: кто утверждает счёт, кому уходит задача после.

На встроенном языке пишут обработчики событий этих объектов. Самые ходовые:

  1. ОбработкаПроведения — формирует движения документа.
  2. ПередЗаписью — проверка и заполнение данных до записи.
  3. ОбработкаПроверкиЗаполнения — контроль обязательных реквизитов.
  4. ОбработкаЗаполнения — заполнение нового документа на основании другого.

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

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

Отчёты и анализ данных: запросы и СКД

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

Язык запросов похож на SQL, но знает объекты 1С. У регистров есть виртуальные таблицы — Остатки, Обороты, ОстаткиИОбороты, — которые сразу отдают итог на дату или за период без ручного суммирования.

Пример: обороты по условному регистру накопления «Продажи» за период с сортировкой по сумме.

&НаСервере
Функция ПродажиЗаПериод(ДатаНачала, ДатаОкончания)

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ПродажиОбороты.Номенклатура КАК Номенклатура,
	|	ПродажиОбороты.СуммаОборот КАК Сумма
	|ИЗ
	|	РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, , ) КАК ПродажиОбороты
	|УПОРЯДОЧИТЬ ПО
	|	Сумма УБЫВ";
	Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
	Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);

	Возврат Запрос.Выполнить().Выгрузить();

КонецФункции

Функция вернёт ТаблицаЗначений — коллекцию строк в памяти, с которой дальше можно делать что угодно: свернуть, отфильтровать, выгрузить в файл.

Что ещё доступно для аналитики:

  • 📈 Диаграммы — круговые, гистограммы, графики, диаграммы Ганта.
  • 🧮 Сводные таблицы — через группировки СКД по строкам и колонкам.
  • 🖨 Табличный документ — печатные формы по макету: счёт, накладная, акт. Сохраняется в PDF, XLSX, DOCX.
  • 🧩 Внешние отчёты — подключаются к базе без изменения конфигурации, удобны для разовых задач.

Отчёт на СКД почти всегда лучше «ручного» вывода в табличный документ: пользователь сам добавит колонку или отбор, а программиста не придётся звать ради каждой мелочи.

Интеграция 1С с внешними системами и сервисами

Обмен данными — вторая по объёму задача после учёта. Встроенный язык умеет и отправлять запросы во внешние сервисы, и сам публиковать API, к которому обращаются сайт, мобильное приложение или другая база.

МеханизмНаправлениеТипичная задача
HTTPСоединение1С → сервисREST API банка, маркетплейса, Telegram-бота
HTTP-сервисысервис → 1Ссвой REST API для сайта или приложения
Web-сервисы (SOAP)в обе стороныинтеграции с корпоративными системами
Стандартный интерфейс ODataсервис → 1Счтение и запись объектов без программирования API
COM-соединение (V83.COMConnector)Windows-программа → 1Собращение из Excel, другой базы 1С
Файлы: XML, JSON, CSV, DBFв обе сторонывыгрузка в банк, загрузка прайсов
Внешние источники данных1С → чужая СУБДчтение таблиц другой системы как своих
Планы обмена1С ↔ 1Ссинхронизация баз, распределённая база

Для работы с форматами есть встроенные объекты: ЧтениеJSON и ЗаписьJSON, ЧтениеXML и ЗаписьXML, фабрика XDTO для XML по схеме. Почта отправляется через ИнтернетПочта, файлы на FTP — через FTPСоединение.

Пример запроса к REST-сервису с разбором JSON-ответа (адрес условный):

&НаСервереБезКонтекста
Функция ПолучитьДанныеСервиса()

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

	Ответ = Соединение.Получить(Запрос);
	Если Ответ.КодСостояния <> 200 Тогда
		ВызватьИсключение СтрШаблон("Сервис вернул код %1", Ответ.КодСостояния);
	КонецЕсли;

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

	Возврат Данные;

КонецФункции

ПрочитатьJSON по умолчанию превращает объект JSON в Структура, массив — в Массив. Таймаут 30 секунд задан явно: без него зависший сервис подвесит и сеанс пользователя.

Обмен между типовыми конфигурациями (БП ↔ УТ, БП ↔ ЗУП) уже написан фирмой 1С на формате EnterpriseData. Свои правила для нетиповых обменов пишут в «Конвертации данных».

Формы и интерфейс пользователя

Интерфейс в 8.3 строится на управляемых формах. Программист не рисует окно по пикселям: он описывает реквизиты формы, элементы и команды, а платформа сама раскладывает их для тонкого клиента , веб-клиента и мобильного устройства.

Что задаётся кодом и настройками формы:

  • 🖱 Команды — кнопки и пункты меню с обработчиками.
  • 🔁 События элементов — ПриИзменении, НачалоВыбора, Нажатие: пересчёт суммы при изменении количества, подбор из списка.
  • 👁 Видимость и доступность — скрыть поле для одной организации, запретить правку после закрытия периода.
  • 🎨 Условное оформление — подсветить просроченные заказы красным без единой строки кода.
  • 📱 Мобильная платформа — те же формы и язык для приложения под Android и iOS.

Главная техническая тонкость — граница клиента и сервера. Каждый вызов &НаСервере из клиентской процедуры — это обращение по сети с передачей данных формы. Десять серверных вызовов в цикле дают заметную задержку в веб-клиенте и при работе через интернет . Опытный программист собирает работу в один серверный вызов и, где форма не нужна, использует &НаСервереБезКонтекста.

Диалоги на клиенте пишут асинхронно: ПоказатьВопрос, ПоказатьПредупреждение с ОписаниеОповещения или, в новых версиях платформы, через Асинх и Ждать. В современных конфигурациях свойство «Режим использования модальности» выключено, и старый код с Вопрос() вызывает ошибку.

Работа с оборудованием и периферией

Напрямую с COM-портом или USB встроенный язык не работает . Связь с железом идёт через внешние компоненты — библиотеки, написанные на C++ по технологии Native API или как COM-объекты. Код 1С подключает компоненту и вызывает её методы так же, как методы обычного объекта.

В типовых конфигурациях для этого есть Библиотека подключаемого оборудования (БПО). Через неё подключают:

  • 🧾 онлайн-кассы (ККТ) по 54-ФЗ — через драйверы производителей;
  • 🔫 сканеры штрихкодов и 2D-сканеры для маркировки;
  • ⚖️ весы, в том числе с печатью этикеток;
  • 📟 терминалы сбора данных для инвентаризации;
  • 💳 эквайринговые терминалы;
  • 🏷 принтеры этикеток и чеков.

Простой случай — сканер в режиме эмуляции клавиатуры: он «печатает» штрихкод в поле формы, и драйвер не нужен. Но так теряются символы-разделители кода маркировки, поэтому для «Честного знака» сканер настраивают через драйвер в режиме COM-порта или HID.

Подключение оборудования в БП 3.0 и УТ 11 делается без программирования: в разделе Администрирование есть настройки подключаемого оборудования, где выбирают тип устройства и драйвер. Код нужен только для нестандартного устройства.

Администрирование, фоновые задачи и производительность

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

Регламентные задания — процедуры, которые сервер запускает по расписанию: загрузка курсов валют, обмен с сайтом в 3 часа ночи, отправка рассылок. Расписание задаётся в Конфигураторе или программно. В файловой базе они выполняются только пока открыт сеанс, в клиент-серверной — силами кластера.

Фоновые задания — запуск долгой операции отдельно от формы. Пользователь продолжает работать, а расчёт идёт параллельно:

Параметры = Новый Массив;
Параметры.Добавить(ДатаНачала);
ФоновыеЗадания.Выполнить("РасчетыСервер.ПересчитатьОстатки", Параметры, , "Пересчёт остатков");

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

Другие инструменты администратора и программиста:

  • 🔐 Роли и RLS — права на объекты и ограничение доступа на уровне записей: менеджер видит только своих контрагентов.
  • 🔒 Управляемые блокировки — объект БлокировкаДанных защищает остатки от двойного списания при одновременном проведении.
  • 📜 Журнал регистрации — запись событий кодом через ЗаписьЖурналаРегистрации.
  • ⏱ Замер производительности в отладчике — показывает, какая строка кода тормозит.
  • 🧰 Транзакции — НачатьТранзакцию, ЗафиксироватьТранзакцию, ОтменитьТранзакцию для атомарной записи набора объектов.

Регламентные и фоновые задания, которые меняют данные, сначала запускают на копии базы — ошибка в них повторяется автоматически при каждом запуске.

Чего не умеет встроенный язык и как это обходят

У языка есть границы. Их полезно знать до того, как обещать заказчику доработку.

ОграничениеКак обходят
Нет классов и наследованияобщие модули, модули менеджеров, структуры данных
Нет прямого доступа к железу и WinAPIвнешние компоненты Native API
Нет потоков внутри одного сеансафоновые задания
Код работает только внутри платформыHTTP-сервисы, COM, OData для внешних программ
Нет своего движка СУБДплатформа использует файловую базу, MS SQL Server, PostgreSQL, Oracle, IBM Db2

Типичные ошибки начинающих:

  • ❌ Запрос в цикле. Сотня запросов по одной строке медленнее одного запроса с пакетной выборкой в десятки раз.
  • ❌ Доработка типовой «по живому». Правка модулей конфигурации на поддержке превращает каждое обновление в ручное сравнение. Расширение решает ту же задачу без этой цены.
  • ❌ Обращение через точку в цикле. Документ.Контрагент.ИНН в цикле по тысяче документов — тысяча скрытых чтений из базы. Нужные поля берут одним запросом.
  • ❌ Склейка числа со строкой без Формат — в тексте появятся неразрывные пробелы между разрядами, и сравнение строк сломается.

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

Можно ли на языке 1С написать программу, не связанную с учётом?
Да. Платформа подходит для CRM, учёта заявок, складских и производственных систем, внутренних порталов. Условие одно — программа работает внутри 1С:Предприятия и требует его лицензий.
Сложно ли выучить язык 1С с нуля?
Синтаксис простой и русскоязычный, его осваивают за несколько недель. Основное время уходит на объектную модель: регистры, проведение, клиент-серверное взаимодействие. Для освоения есть учебная версия платформы.
Можно ли писать на 1С через Git и в команде?
Да. Среда 1С:EDT хранит конфигурацию в виде файлов и работает с Git. В Конфигураторе для командной работы есть хранилище конфигурации.
Чем внешняя обработка отличается от расширения?
Внешняя обработка — отдельный файл с формой и кодом, который открывают вручную или подключают как дополнительную. Расширение встраивается в конфигурацию: меняет формы, добавляет реквизиты и перехватывает процедуры типовых модулей.
Может ли 1С работать как веб-сервер для сайта?
Сама база через веб-сервер Apache или IIS публикует HTTP-сервисы, OData и веб-клиент. Сайт обращается к этим адресам за остатками, ценами и заказами.