
Зачем это всё?
Кто из нас не писал таск-трекер или домашнюю бухгалтерию на 1С? Как-то раз меня попросили показать самописный таск-трекер (там даже интеграция была с Jira), и в целом он был ничего… но когда я сказал, что нужно приобрести лицензии — про мою поделку быстро забыли.
Я много раз думал: а что если написать аналог 1С с открытым кодом? И заодно потренироваться в новом стеке — так сказать, привнести новый стек в мир 1С. Например, тут я когда-то всех зазывал учить Java и сам кучу времени на неё потратил — написал приложение для Android (есть акк разраба), в моём послужном списке есть дашборды для Android TV и ещё немало мелочей. Но останавливала меня всегда оценка трудозатрат на реализацию.
И вот пришла ИИ-революция. Модели научились писать код очень хорошо, а подписки оставались неизрасходованными (что всегда меня напрягало). Так я решил убить двух зайцев: закрыть гештальт и наконец-то потратить свои лимиты на GLM 5.1, а иногда и остатки от Opus и Sonnet (пусть вас не смущает автор коммитов «Opus 4.7» — под капотом там GLM).
Но были два серьёзных препятствия:
1. Лимиты подписок оставались тогда, когда не оставалось сил — ночью, после трудовой недели и т.п.
2. ИИ постоянно забывал контекст сессий, и тяжело было заниматься разработкой достаточно сложного проекта.
Победив первую проблему через promptPilot и разобравшись с забывчивостью агентов с помощью Claude Note, я взялся попробовать реализовать простую платформу: совместимую по языку и подходам с 1С, но открытую, кроссплатформенную и дорабатываемую. На которой можно было бы размещать свои пет-проекты, MVP — и не заботиться о лицензиях.
Думаю, что у меня получилось. Хотя решать как всегда вам.
Поехали.
Что такое OneBase в двух предложениях
OneBase — это одна папка с YAML-метаданными + один exe-файл на Go + SQLite или PostgreSQL в качестве хранилища. Запустил `onebase-gui.exe` — открылся лаунчер «Запуск 1С:Предприятие», только не от вендора, а ваш. Создал базу (SQLite — одним кликом, без PostgreSQL), накидал в YAML справочники/документы/регистры, добавил `.os`-файлы с проведением — и через 10 минут у вас работающая учётная система с веб-интерфейсом, проводкой документов, печатными формами и REST API.

На чём это всё крутится
Демонстрационная база развёрнута на Orange Pi (4 ГБ ОЗУ) с Armbian. Туда же я положил PostgreSQL и сайт проекта. Внешний доступ — через Cloudflare Tunnel (белый IP не понадобился, бесплатно, HTTPS из коробки). Дистрибутив собирается для arm64 — специально под одноплатники.
Системные требования OneBase — без преувеличения:
- Любой одноплатник от Raspberry Pi 3 / Orange Pi 3 и выше.
- Windows (приоритет) или Linux (CLI-режим и сервер работают отлично) или MAC. Всё что угодно )
- SQLite — ничего устанавливать не нужно, файловая база из коробки. PostgreSQL 14+ — для многопользовательских и серверных сценариев.
- Размер дистрибутива — около 20 МБ (один exe + лаунчер + примеры конфигураций).
Размер потребляемой памяти на холостом ходу — десятки мегабайт. На Orange Pi 4 ГБ можно спокойно держать 5–10 параллельных баз и сайт проекта в придачу.

Установка за минуту
Windows
1. Скачать `onebase-windows-amd64.zip` со страницы Releases.
2. Распаковать в любую папку (например, `C:\onebase\`).
3. Двойной клик на `onebase-gui.exe`.
Всё. Никакого инсталлера, никакого реестра, никаких прав администратора. Полностью портативно, как «1С:Предприятие» из коробки — только без установки. Удалить — удалить папку.
Ну а если вы не доверяете всяким там exe из интернетов, то можете его сами из исходников собрать!
Внутри архива:
onebase-gui.exe двойной клик: лаунчер в нативном окне
onebase.exe CLI для терминала и сервера
examples/ готовые примеры: simple-erp, trade, accounting
При первом добавлении базы по умолчанию предлагается SQLite + файловая конфигурация — никакого PostgreSQL для старта не нужно. Переключиться на PostgreSQL можно позже в настройках.
Linux / Orange Pi (arm64)
tar xzf onebase-linux-arm64.tar.gz
sudo mv onebase /usr/local/bin/
onebase start

Архитектура: платформа / конфигурация / база
Понятийная модель полностью повторяет 1С — это сделано намеренно, чтобы 1С-разработчик не тратил время на адаптацию:
Два режима хранения конфигурации:
1. Файловый (`config_source: file`) — для разработки. Папка под git, `onebase dev` с hot reload (правишь YAML — конфигурация перечитывается без рестарта). Рекомендуется в паре с SQLite для быстрого старта.
Кодить можно как из своей любой IDE так и из встроенного конфигуратора

т.е. внимание! в этом режиме больше никаких сборок конфигурации из файлов, можно работать сразу.
и ещё внимание! в этом режиме с одной конфигурацией (это папка с файлам) могут работать несколько баз (не важно файловых SQLite или серверных PG )
# Файловый режим (разработка): одна папка — разные базы
onebase dev --project C:\Project\trade --db "postgres://.../trade_dev?sslmode=disable" --port 8080
onebase dev --project C:\Project\trade --db "postgres://.../trade_demo?sslmode=disable" --port 8081
# Деплой одной конфигурации в несколько боевых БД
onebase deploy --project C:\Project\trade --db "postgres://.../client_a"
onebase deploy --project C:\Project\trade --db "postgres://.../client_b"
Каждая база — независимый набор данных (свои документы, остатки, справочники), но метаданные общие. Обновил конфигурацию — передеплоил в каждую БД.
2. В базе данных (`config_source: database`) — для пользователей. Конфигурация лежит в таблице `_onebase_config`, редактируется через визуальный конфигуратор.
Два режима СУБД:
- SQLite — файл `.db` рядом с проектом. Идеально для одного пользователя, десктопа, разработки.
- PostgreSQL — для многопользовательских сценариев, сервера, больших объёмов данных.

Лаунчер информационных баз
`onebase-gui.exe` открывает лаунчер — веб-страницу в нативном окне (Edge WebView2 на Windows). Концептуально это «Запуск 1С:Предприятие», только всё в HTML:
- список зарегистрированных баз;
- кнопки «+ Добавить», «Предприятие», «Конфигуратор», «Удалить»;
- регистр баз хранится в `~/.onebase/ibases.yaml` — не в реестре, а в YAML, портативно.
При создании базы — поля: наименование, тип СУБД (SQLite / PostgreSQL), путь к файлу БД или строка подключения, тип конфигурации (файловый / в базе), порт HTTP-сервера. Для SQLite — кнопка «Выбрать файл» через нативный системный диалог ОС. Для папки с конфигурацией — кнопка «Выбрать папку». Никакого ручного копирования путей.

Конфигуратор: метаданные в браузере
Кнопка «Конфигуратор» открывает визуальный редактор конфигурации. Вход — под администратором (bcrypt + cookie-сессия, отдельная от пользовательского режима). Дерево метаданных слева — почти как в 1С, только без оранжевого. Реализованы:
- Конфигурация — имя и версия приложения.
- Главная страница — визуальный дашборд с виджетами (метрики, отчёты, ссылки, таблицы).
- Подсистемы — структурирование интерфейса (Закупки / Продажи / Склад) и прав доступа.
- Константы — имя, тип, подпись.
- Перечисления — список значений.
- Справочники / Документы — добавление, редактирование полей, табличные части.
- Журналы документов — объединённые ленты с фильтрами.
- Регистры накопления / сведений / бухгалтерии — измерения, ресурсы, реквизиты.
- Отчёты — параметры, текст запроса, код диаграммы.
- Обработки — параметры, точка входа.
- Печатные формы — редактор split-view: YAML слева, предпросмотр справа.
- Регламентные задания — расписание (cron), параметры, история.
- Роли — таблица прав на объекты конфигурации.
- Общие модули — функции для повторного использования.
- Виджеты — объекты метаданных для стартовой страницы (type: chart / metric / table / link).
В каждом редакторе модулей — кнопка «Проверить синтаксис»: парсит DSL и обходит AST в поисках вызовов несуществующих функций (раньше всегда возвращал «OK», теперь реально ловит ошибки, но это не точно).
Для коммитов в git — кнопка «Выгрузить»: конфигурация выгружается в `~/.onebase/workspace/<base-id>/`. Поправил, нажал «Загрузить» — изменения вернутся в базу.

Главная страница и дашборды
Стартовая страница пользовательского режима — не просто список меню. В конфигурации описывается набор виджетов, которые формируют живой дашборд:
# config/homepage.yaml
widgets:
- type: metric
title: Выручка сегодня
report_id: ВыручкаСегодня
value_field: Сумма
format: money
- type: chart
title: Продажи по дням
report_id: ПродажиПоДням
chart_type: bar
- type: table
title: Последние документы
report_id: ПоследниеДокументы
limit: 10
- type: link
title: Открыть склад
url: /ui/catalog/Номенклатура
Виджеты — это полноценные объекты метаданных (как справочники или отчёты): редактируются в конфигураторе через визуальный UI, хранятся в конфигурации, могут ссылаться на отчёты и запросы.
Типы виджетов:

Метаданные: справочники, документы, регистры
Всё описывается YAML-файлами в папке проекта.
Справочник
`catalogs/Номенклатура.yaml`:
name: Номенклатура
hierarchical: true # поддержка иерархии (групп)
fields:
- { name: Наименование, type: string }
- { name: Артикул, type: string }
- { name: Цена, type: number }
- { name: ВидТовара, type: enum:ВидТовара }
predefined:
- name: Услуги
fields: { Наименование: "Услуги" }
Типы полей: `string`, `number`, `date`, `bool`, `reference:X`, `enum:X`.
Поддерживается иерархия (древовидный справочник с раскрывающимися узлами) и предопределённые элементы — статические записи, доступные из DSL как `ПредопределённыеЗначения.Валюта.Рубль`.
Документ
`documents/РеализацияТоваров.yaml`:
name: РеализацияТоваров
posting: true # включить режим проведения
numerator: НумераторПродаж # автонумерация
fields:
- { name: Номер, type: string }
- { name: Дата, type: date }
- { name: Покупатель, type: reference:Контрагент }
tableparts:
- name: Товары
fields:
- { name: Номенклатура, type: reference:Номенклатура }
- { name: Количество, type: number }
- { name: Цена, type: number }
- { name: Сумма, type: number }
При `posting: true` у документа появляются кнопки «Провести», «Провести и закрыть», «Отменить проведение». Движения в регистры пишутся только через процедуру проведения — как в 1С.
Нумератор
`numerators/НумераторПродаж.yaml`:
name: НумераторПродаж
prefix: "ПРД-{YYYY}-"
pad: 5
period: year # счётчик сбрасывается каждый год
Маски `{YYYY}`, `{MM}`, `{DD}` дают итог вида `ПРД-2026-00001`.
Регистр накопления
`registers/ОстаткиТоваров.yaml`:
name: ОстаткиТоваров
dimensions:
- { name: Номенклатура, type: reference:Номенклатура }
- { name: Склад, type: reference:Склад }
resources:
- { name: Количество, type: number }
- { name: Сумма, type: number }
Регистр сведений (периодический)
`inforegs/ЦеныНоменклатуры.yaml`:
name: ЦеныНоменклатуры
periodic: true # включает поле period в первичный ключ
dimensions:
- { name: Номенклатура, type: reference:Номенклатура }
resources:
- { name: Цена, type: number }
DSL: язык бизнес-логики (1С-совместимый)
Скрипты лежат в `src/` с расширением `.os`. Синтаксис максимально близок к встроенному языку 1С.
Пример: проведение реализации
Процедура ОбработкаПроведения()
Движения.ОстаткиТоваров.Очистить();
Для Каждого Строка Из this.Товары Цикл
Дв = Движения.ОстаткиТоваров.Добавить();
Дв.ВидДвижения = "Расход";
Дв.Номенклатура = Строка.Номенклатура;
Дв.Склад = this.Склад;
Дв.Количество = Строка.Количество;
Дв.Сумма = Строка.Сумма;
КонецЦикла;
КонецПроцедуры

Кстати, админ прямо из документа по кнопке История может посмотреть выжимку из журнала изменений по этому объекту

Билингвальность
Все ключевые слова работают на русском и английском одновременно:
Идентификаторы и ключевые слова — полностью case-insensitive.
я не буду тут весь язык описывать (описываю в DEVELOPER.md), да и меняется он каждый день )
Отмечу лишь, что я убрал неявные запросы по точке (поставил точку в этом вопросе)
Но добавил глобальную функцию ЗначениеРеквизитаОбъекта(Ссылка, "Реквизит")
Если кто то хочет Номенклатура.СтавкаНДС.Процент то можете доработать (в своём форке)
это не сложно, но зачем закладывать бомбу замедленного действия...
Язык запросов и виртуальные таблицы
Запросы пишутся в стиле 1С на русском языке и транслируются в SQL прозрачно. Работает для обоих диалектов — SQLite и PostgreSQL.
ВЫБРАТЬ
Наименование,
Артикул,
Цена
ИЗ Справочник.Номенклатура
ГДЕ Цена > &МинЦена
УПОРЯДОЧИТЬ ПО Наименование
Виртуальные таблицы регистров
// Остатки на дату
ИЗ РегистрНакопления.ОстаткиТоваров.Остатки(&НаДату)
// Обороты за период
ИЗ РегистрНакопления.ОстаткиТоваров.Обороты(&Начало, &Конец)
// Срез последних регистра сведений
ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НаДату)
Внутри виртуальные таблицы — это planner functions PostgreSQL (и их SQLite-аналоги), а не материализованные представления. Вычисляются на лету, пересчёт не нужен.
Объект Запрос в DSL
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Наименование, Цена ИЗ Справочник.Номенклатура ГДЕ Цена > &МинЦена";
Запрос.УстановитьПараметр("МинЦена", 1000);
Результат = Запрос.Выполнить();
Для Каждого Строка Из Результат Цикл
Сообщить(Строка.Наименование + ": " + Строка(Строка.Цена));
КонецЦикла;
JOIN (ЛЕВОЕ / ВНУТРЕННЕЕ / ПРАВОЕ / ПОЛНОЕ)
ВЫБРАТЬ
Прод.Покупатель,
СУММА(Прод.Сумма) КАК Оборот,
Ост.КоличествоОстаток
ИЗ Документ.Реализация КАК Прод
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&НаДату) КАК Ост
ПО Прод.Покупатель = Ост.Номенклатура
СГРУППИРОВАТЬ ПО Прод.Покупатель, Ост.КоличествоОстаток
УПОРЯДОЧИТЬ ПО Оборот УБЫВ
Консоль кода и консоль запросов
Любимая фишка 1С-разработчика. Открыть из меню Система → Инструменты разработчика (доступно администратору).
Когданибудь я (или не я) запилю сюда то, что уже де факто стандарт (ИР от @tormozit)
Консоль кода — ввод DSL-выражения, моментальное выполнение, результат. Подходит, чтобы быстро прикинуть формулу, проверить функцию, дёрнуть процедуру общего модуля, посмотреть значение константы.
Сообщить(Окр(123.456, 2))
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Кол ИЗ Справочник.Контрагент";
Сообщить(Запрос.Выполнить()[0].Кол);

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

Конструктор запросов
Через контекстное меню в редакторе модулей: выделили текст запроса → ПКМ → «Конструктор запросов» → откроется заполненный конструктор. Выделили пустую строку — откроется пустой. Вышли с «Вставить» — текст подставится обратно на место выделения. Полностью повторяет UX 1С.
В конструкторе:
- Источники — все объекты конфигурации в одном выпадающем с группировкой: справочники, документы, регистры накопления, виртуальные таблицы (`.Остатки`, `.Обороты`, `.СрезПоследних`), регистры бухгалтерии.
- Поля (ВЫБРАТЬ) — список с галочками, агрегаты (`СУММА`, `КОЛИЧЕСТВО`, `МИН`, `МАКС`, `СРЕДНЕЕ`), псевдонимы `КАК`.
- Соединения (JOIN) — кнопка «+ Соединение», тип, источник, псевдоним, условие `ПО`.
- Условия (ГДЕ) — выбор поля / оператор / параметр.
- Группировки и сортировки — через выпадающие списки.
- Автообнаружение параметров `&Имя` — подхватываются автоматически.
- Две кнопки результата: «Текст запроса» (для YAML-отчёта) и «DSL-фрагмент» (объект `Новый Запрос` с подстановкой параметров и циклом — для вставки в `.os`).

Есть куда расти и развиваться, но пока так
Печатные формы
Декларативный YAML-шаблон (без программирования, бухгалтер может править сам) и программный `ТабличныйДокумент` (для сложных макетов с областями). В конфигураторе — split-view редактор: YAML слева, HTML-предпросмотр справа, обновляется в реальном времени.

YAML-вариант
name: Накладная
document: РеализацияТоваров
title: "Товарная накладная № {{Номер}} от {{Дата | date}}"
header: |
**Поставщик**: {{Константы.НашаОрганизация}}
**Покупатель**: {{Покупатель.Наименование}}
table:
source: Товары
columns:
- { field: "@row", label: "№", width: 40px }
- { field: Номенклатура.Наименование, label: Наименование }
- { field: Количество, label: Кол-во, align: right }
- { field: Сумма, label: Сумма, align: right, format: "number:2" }
totals:
- { field: Сумма, sum: true, label: "Итого" }
footer: |
Подпись: _________________________
ТабличныйДокумент в DSL
Программное формирование с областями, объединением ячеек, условным форматированием и группировками — как макет в 1С, только в `.os` файле.
Скачать в PDF
Рядом с «Печать» — кнопка «Скачать PDF». Чистый Go, без headless-браузера: `github.com/go-pdf/fpdf` рисует из той же структуры `PrintForm`, что и HTML-рендер.
GET /ui/documents/РеализацияТоваров/{id}/print/Накладная/pdf
U94; application/pdf
U94; Content-Disposition: attachment; filename="Накладная_ПРД-2026-00042.pdf"

Отчёты с диаграммами
Отчёты — YAML с параметрами + запрос. Опционально — процедура диаграммы в `src/<Отчёт>.rep.os`.
name: ВаловаяПрибыль
title: Валовая прибыль
params:
- { name: НаДату, type: date, label: На дату }
query: |
ВЫБРАТЬ Номенклатура,
СУММА(Выручка) КАК Выручка,
СУММА(Выручка) - СУММА(Себестоимость) КАК Прибыль
ИЗ РегистрНакопления.ВаловаяПрибыль
СГРУППИРОВАТЬ ПО Номенклатура
chart_proc: СформироватьДиаграмму
Процедура СформироватьДиаграмму()
Д = Новый Диаграмма;
Д.Заголовок = "Валовая прибыль по номенклатуре";
Д.Тип = "Гистограмма"; // Гистограмма / Линейная / Круговая
СерияВ = Д.Серии.Добавить(); СерияВ.Имя = "Выручка";
СерияП = Д.Серии.Добавить(); СерияП.Имя = "Прибыль";
Для Каждого Стр Из Результат Цикл
Т = Д.Точки.Добавить();
Т.Значение = Стр.Номенклатура;
СерияВ.УстановитьЗначение(Т, Стр.Выручка);
СерияП.УстановитьЗначение(Т, Стр.Прибыль);
КонецЦикла;
Возврат Д;
КонецПроцедуры
Под капотом — ECharts. Редактирование кода диаграммы — прямо в конфигураторе, с подсветкой.

Табло сообщений
Классический 1С-механизм: `Сообщить("текст")` из любого места кода (проведение, обработка, регламентное задание) → текст попадает в табло, которое выезжает снизу и хранит последние 200 сообщений на пользователя.
Процедура ОбработкаПроведения()
Если this.Сумма <= 0 Тогда
Сообщить("Сумма документа не заполнена");
Возврат;
КонецЕсли;
Сообщить("Документ проведён успешно");
КонецПроцедуры

Регламентные задания (cron в платформе)
name: ОбновлениеКурсов
title: Обновление курсов валют
schedule: "0 9 * * 1-5" # cron: будни 09:00
processor: ЗагрузкаКурсов
params:
Источник: "ЦБ РФ"
Дата: "{{today}}" # шаблон, разворачивается при запуске
enabled: true
В разделе Администрирование → Регламентные задания — список, кнопка ручного запуска, история запусков (длительность, текст ошибки, последние 50 запусков). Параметры-шаблоны `{{today | minus_days:7}}` разворачиваются в момент запуска.


Отладчик модулей
То, без чего разработка конфигурации превращается в страдание. В OneBase есть встроенный отладчик в стиле 1С — глобальный, на всю сессию, доступен прямо из конфигуратора.
Что умеет:
- Точки останова в любом `.os` (документ, обработка, общий модуль, регламентное задание).
- Шаги: «Шаг с заходом», «Шаг с обходом», «Шаг с выходом», «Продолжить», «Остановить».
- Стек вызовов — со скрытием системных кадров.
- Табло переменных — текущие значения в строкой иерархии (`Структура`, `Соответствие`, `Массив` раскрываются).
- Консоль выражений — ввести любое выражение в текущем контексте, получить значение.
- Monaco Editor — подсветка `.os`-синтаксиса, линейка с гуттером для брейкпоинтов.
- SSE-канал событий — UI обновляется в реальном времени без поллинга.
Архитектура: глобальный контроллер + хук `DebugHook` в интерпретаторе (nil-hook = нулевые накладные расходы). Точки останова синхронизируются по нормализованному пути файла, шагание управляется через каналы Go (pause/resume).

Честное признание: отладчик пока работает не идеально. Это в активной доработке — багов накопилось много, но базовый сценарий (поставил BP → запустил → дошли до BP → посмотрел переменные → пошёл дальше) уже работает.
Единственное - точку останова ставьте уже после запуска отладки (это важно)
Всеми любимое табло:

Таже есть список точек останова и можно перейти к точке

Журнал регистрации - куда ж без него
открывается и из конфигуратора и из предприятия (если вы админ)
В конфигураторе есть настройки его ведения

в пользовательском:

Пока кривоват, в планах доработать
Все функции - менюшечка чтоб не лазить по менюшечкам
с поиском - как в приличных домах

Регистрация пользователей и роли
Пользователи и роли управляются через Администрирование → Пользователи. Пока ни одного пользователя не создано — вход без пароля (удобно для разработки). Появился первый — обязательная авторизация.
Пользователи в режиме предприятия



На странице входа — быстрый выбор пользователя через `<datalist>`: поле логина с автодополнением по тем, у кого включён флаг «Показывать в списке». При этом вписать произвольный логин тоже можно — для скрытых учётных записей.
name: Менеджер
permissions:
catalogs:
Контрагент: [read, write]
Номенклатура: [read]
documents:
РеализацияТоваров: [read, write, post, unpost]
ПоступлениеТоваров: [read]
registers:
Взаиморасчеты: [read]
reports:
ОстаткиТоваров: [run]
Права: `read`, `write`, `post`, `unpost`, `run`. При попытке зайти в запрещённый раздел — красивая страница Forbidden с пояснением и кнопкой «Назад» (вместо голого 403).
Конфигуратор — отдельная авторизация. Только под администратором, независимая cookie-сессия (bcrypt), кнопка «Выйти» в меню. Пароль PostgreSQL в карточке базы скрыт — виден только в конфигураторе.
пользователи в конфигураторе:

Активные:

Флаг «Нельзя сменить пароль» — полезно для тестовых/демо-аккаунтов, чтобы пользователь не мог заблокировать себя.
Флаг «Показывать в списке» - ну вы поняли
Одна активная сессия на пользователя — повторный вход вытесняет предыдущую сессию.
Демо-режим
Для публичных демонстрационных баз реализован демо-режим: отдельная роль с запретом создания и удаления объектов, заметный баннер «Демо-доступ», автоматический сброс базы из резервной копии каждые 2 часа. Пользователь может смотреть, открывать, искать — но не ломать.
Поиск, фильтры и пагинация
В каждом списке справочника/документа:
- Поиск — поле над таблицей, `ILIKE` по всем строковым полям, дебаунс 320 мс (без Enter).
- Фильтры — `?filter[Статус]=Новая` через UI.
- Пагинация — серверная, 100 строк по умолчанию, до 1000 на страницу, с подсчётом общего количества.
- Сортировка — кликом по заголовку колонки.
- Excel ↓ — кнопка в каждом списке: выгрузка в `.xlsx` с заморозкой первой строки, жирными заголовками, выравниванием чисел.
GET /ui/catalog/Номенклатура/excel
GET /ui/report/Остатки/excel?НаДату=2026-05-15
GET /ui/journal/ВсеОперации/excel
Под капотом — `github.com/xuri/excelize/v2`.

Вложения к документам
На карточке любого документа или элемента справочника — секция «Вложения»:
- список файлов (имя, размер, скачать, удалить);
- кнопка «+ Прикрепить файл» — системный диалог, после выбора автоматическая отправка;
- ограничения настраиваются в `config/app.yaml`:
attachments:
max_file_size_mb: 50
allowed_types: [pdf, png, jpg, docx, xlsx]
Файлы — на диске (`~/.onebase/files/<база>/<объект>/<uuid>`), мета — в таблице `_attachments`.

HTTP-клиент в DSL
// Короткая форма
Ответ = HTTPПолучить("https://www.cbr-xml-daily.ru/latest.js");
данные = ПрочитатьJSON(Ответ.ПолучитьТелоКакСтроку());
Сообщить("USD: " + данные.Получить("Valute").Получить("USD").Получить("Value"));
// Расширенная — с заголовками
Соединение = Новый HTTPСоединение("api.example.com", 443, Истина);
Запрос = Новый HTTPЗапрос("/api/v1/orders");
Запрос.УстановитьЗаголовок("Authorization", "Bearer " + Константы.APIToken);
Запрос.УстановитьТелоИзСтроки(ЗаписатьJSON(данные));
Ответ = Соединение.ОтправитьДля(Запрос, "POST");
Поддерживаются GET / POST / PUT / DELETE / PATCH, таймауты, английские алиасы (`HTTPConnection`, `HTTPRequest`, `StatusCode`).
Типичный сценарий: регламентное задание раз в час забирает новые заказы с маркетплейса → создаёт документы → отправляет Telegram-уведомление через `HTTPОтправить("https://api.telegram.org/...")`.
Email-уведомления (SMTP)
email:
smtp_host: smtp.gmail.com
smtp_port: 587
smtp_user: noreply@company.ru
smtp_password: env:SMTP_PASSWORD
from_name: "Мой склад"
// Короткая форма
ОтправитьПисьмо("client@example.com", "Заказ принят",
"Ваш заказ №" + Строка(this.Номер) + " принят.");
// HTML
Письмо = Новый ПисьмоEmail;
Письмо.Кому = "client@example.com";
Письмо.Тема = "Заказ №" + Строка(this.Номер);
Письмо.HTMLТело = "<h2>Заказ принят</h2><p>Ваш заказ <b>№" + Строка(this.Номер) + "</b> передан в работу.</p>";
Письмо.Отправить();
STARTTLS / SSL, HTML + plain text в одном письме (multipart/alternative), пароли через `env:VAR_NAME`.
Шаблоны проектов (`onebase init --template`)
onebase init --list-templates # посмотреть список
onebase init --template warehouse ./my-wh # склад с проведением
onebase init --template tasks ./tasks # таск-трекер
onebase init --template crm ./crm # мини-CRM с проведением и взаиморасчётами
onebase init --template finance ./fin # домашние финансы
Каждый шаблон — готовая мини-конфигурация со справочниками, документами, регистрами, проведением и отчётами. Десять секунд от пустой папки до работающей учётной системы.
Не судите строго эти демо конфигурации написал минимакс за 5 минут в самом начале пути, не знаю что там, есть ли там жизнь. Я уже начал пилить более менее торговлю, скоро опубликую, если будет интерес к проекту.
Бэкап и восстановление
onebase backup --db "postgres://localhost/sklad" --out ./backups/
# U94; backups/backup_sklad_2026-05-15_18-30.sql.gz
onebase restore --db "postgres://localhost/sklad" --file backup_sklad_2026-05-15_18-30.sql.gz
Под капотом — `pg_dump --format=plain | gzip`. Файл читается обычным текстовым редактором. В UI конфигуратора — отдельная вкладка «Бэкапы» с автоименованием `backup_{name}_{YYYY-MM-DD_HH-MM}.sql.gz` и сортировкой по времени.
Полный бэкап `.obz` (аналог `.dt` в 1С) — БД + конфигурация в одном файле. Для восстановления требуется остановленная база (как в 1С:Предприятие — нельзя восстановить «на горячую»).

и есть АВТОБЭКАП!
REST API из коробки
На каждый объект конфигурации автоматически генерируется REST-эндпоинт. Никаких ручных контроллеров писать не надо:
GET /api/v1/catalogs/Номенклатура # список
GET /api/v1/catalogs/Номенклатура/{id} # элемент
POST /api/v1/catalogs/Номенклатура # создать
PUT /api/v1/catalogs/Номенклатура/{id} # обновить
DELETE /api/v1/catalogs/Номенклатура/{id} # удалить
POST /api/v1/documents/Реализация/{id}/post # провести
POST /api/v1/reports/Остатки # выполнить отчёт с параметрами
Авторизация — Bearer-токен или сессионная cookie.
Деплой на сервер
Пользователи подключаются через браузер — никакого толстого клиента нет.
[Браузер] ——HTTPS——> [nginx] ——HTTP——> [onebase :8080] ——> [PostgreSQL]
# 1. Задеплоить конфигурацию (с локальной машины или из CI)
onebase deploy --project ./myapp \
--db "postgres://onebase:pass@server-ip/mydb?sslmode=disable"
# 2. На сервере — установить как systemd-сервис
sudo onebase service install \
--db "postgres://onebase:pass@localhost/mydb?sslmode=disable" \
--port 8080 \
--name onebase-myapp \
--user onebase
# 3. Управление
systemctl status onebase-myapp
journalctl -u onebase-myapp -f
Демо в интернете — Orange Pi + Cloudflare Tunnel
Самая дешёвая и стабильная схема без белого IP:
[Браузер] ——HTTPS——> [Cloudflare] ——туннель——> [Orange Pi: cloudflared] ——> [onebase] ——> [PostgreSQL]
`cloudflared` устанавливается одной командой, привязывается к домену, поднимается как systemd-юнит. Бесплатно, HTTPS из коробки, порты на роутере открывать не нужно. Бинарник `onebase-arm64` собирается прямо из Windows через `GOARCH=arm64 GOARM=7 go build`.

Прошу не сильно агрится по поводу качества демобазы. я её завайбкодил на коленке минимаксом. Будет обязательно её улучшение.
Конвертер из 1С
onebase convert --dir ./1c-export --out ./my-onebase-project
Прототип конвертации выгрузки XML конфигурации 1С v8.3 → YAML OneBase. Покрывает простые справочники, документы, регистры и константы. Сложные случаи (управляемые формы, СКД, регистры расчёта) — пока нет.
Честно — конвертер пока работает примерно никак, и это в списке доработок ближайших недель. Но направление есть, базовая инфраструктура — тоже.
Чем OneBase не является
Чтобы избежать ложных ожиданий:
Это не клон 1С. Самостоятельная платформа, вдохновлённая 1С.
Нет толстого клиента и управляемых форм — только веб (списки/формы/отчёты автогенерируются по метаданным).
Нет СКД в полном объёме. Есть язык запросов с виртуальными таблицами и базовые отчёты с параметрами — но «компоновка данных» с настройками пользователем — нет.
Нет периодических расчётов (как регистры расчёта в 1С).
Нет RLS на уровне записей — права на уровне объектов (таблиц).
Нет официальной поддержки — open-source, GitHub Issues.
Нет промышленной готовности — баги есть, и их немало. Это pet-platform для pet-projects.
Где OneBase реально хороша:
Внутренние таск-трекеры, мини-CRM, домашний учёт расходов.
Автоматизации в маленьком бизнесе: склад, продажи, услуги (но это не точно).
Прототипирование 1С-логики: накидать архитектуру (документы, регистры, проведение), показать заказчику, потом перенести в полноценную 1С.
Обучение: студентам и джунам объяснить концепцию метаданных и регистров без покупки лицензии.
Пет-проекты — собрать «как было бы на 1С», но без 1С.
Сравнение с 1С:Предприятие
Как доработать саму платформу
То, ради чего стоит остаться. OneBase — это Go, GitHub, внятная модульная структура.
Что можно сделать самому, не дожидаясь вендора: да хоть что )
- Добавить тип поля (например, `phone` с валидацией) — `internal/metadata` + DDL в `internal/storage`.
- Добавить встроенную функцию в DSL — регистрация в одном месте: `internal/dsl/interpreter/builtins.go`.
- Добавить виртуальную таблицу регистра — шаблон в `internal/storage/registers.go` + `internal/query/query.go`.
- Поменять UI — Go-шаблоны + ванильный JS, без сборки фронта.
- Сделать свой коннектор — экспорт в Telegram-бота, импорт из 1С, обмен с API маркетплейса.
Это невозможно в 1С — там вы упираетесь в платформу как в данность.
Для сборки exe в репо есть build.bat он соберёт вам onebase.exe и onebase-gui.exe
Для линуксоидов build.sh

Я планирую развивать проект и буду рад помощи в любом виде (разработка платформы, разработка конфигураций, тестирование, баг репорты, пул реквесты)
Разрабатываю я её на остатках лимитов, представляете, что было бы будь у меня 100баксовая подписка антропиков )

Кстати, вайбкодятся конфигурации Onebase очень хорошо(из за очень понятной и простой структуры форм и языка). Достаточно дать агенту ссылку на гитхаб платформы и любой бухгалтер навайбкодит себе конфигурацию!
Демо и сайт проекта
Демо-база и сайт проекта развёрнуты на Orange Pi с публичным доступом через Cloudflare Tunnel. Демо сбрасывается автоматически каждые 2 часа — смотреть можно всё, сломать нельзя (наверно) . Прошу сильно не вандалить демобазу, функция перезаписи по расписанию из коробки в платформе есть но пока не дошли руки настроить и включить.
На апельсинке старая платформа и старая простенькая демо база, многие баги уже поправлены. обновлю как руки дойдут (наверно в выходные) иначе бы никогда не опубликовал...
- 🌐 Сайт проекта: onebase.ivantitov.tech
- 🚀 Демо-база (trade): demo.ivantitov.tech — логин `Пользователь` / пароль `12345`
- 📦 Releases: github.com/ivanarama/onebase/releases/latest
- 📖 Документация: `QUICKSTART.md` и `DEVELOPER.md` в репозитории
- 💡 Примеры: `examples/simple-erp`, `examples/trade`, `examples/accounting`
- 📦 Полная конфигурация Программа Управления Торговлей (ПУТ) (ожидается ещё ПУП и ПУЗ)
Если чтото не работает, но тут описано, то я это скорее всего сломал (я так часто делаю). создайте ишью. а пока скачайте более ранний релиз, там может быть не сломано.
Качать дистрибы под вашу ОС удобно на странице релизов

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

Но я делал это один, вечерами и в свободное время (а вы что делали в майские праздники ?)
Разве до эры ИИ такое вообще было возможно? вопрос риторический.
Такая картина по лимитам стала для меня привычной.
Антропик:

и даже GLM

Стоимость 0 рублей (т.к. использовал остатки лимитов двух подписок 18$ в квартал GLM + 20$ в месяц антропик)
Помогло то, что до конца июня можно пользоваться льготными лимитами GLM и наличие счастливых часов (об этом я писал тут) Когда кончались лимиты но не энергия, я открывал opencode c минимаксом, мерджил ветки, тестил, писал ТЗ для новых фич.
Дальнейшие планы
Ну во первых я рассчитываю на ваши пул реквесты и баг репорты, планирую их оперативно мерджить и фиксить. Надеюсь платформа будет развиваться!
Чтобы было о чём писать следующие статьи:
- Доделать конвертер из 1С — чтобы хотя бы простые конфигурации переезжали без слёз.
- Управляемые формы (наша версия) — JSON-описание формы → автогенерация UI поверх метаданных.
- СКД-лайт — настройки группировок/отборов/полей пользователем поверх запроса.
- Полнотекстовый поиск — глобальный поиск по всей базе (PostgreSQL `tsvector`, SQLite FTS5).
- Расширения — механизм, аналогичный 1С-расширениям, чтобы дорабатывать конфигурацию без её правки.
- Регистры расчёта — для зарплатных задач.
- Мобильный UI — адаптивные шаблоны под телефон.
Журнал документов в разработке (пока не смерджил)
В YAML описывается «общая лента» нескольких документов с дополнительными колонками:
name: ВсеОперации
documents: [Поступление, Реализация, Платёж]
columns:
- Документ
- Дата
- Контрагент
- Сумма
В UI — единый список со всеми событиями, фильтрами по дате, контрагенту и виду документа.
Вместо заключения
OneBase — не замена 1С на промышленных проектах, и я это честно проговариваю. Но в нише, где 1С слишком тяжёлая, дорогая и закрытая — у 1С-разработчиков теперь есть инструмент, в котором:
- знакомая модель (платформа / конфигурация / база),
- знакомый синтаксис (русский DSL, документы, регистры, проведение),
- открытый исходник на Go,
- портативность (один exe, SQLite без установок),
- git-friendly разработка (YAML + `.os`),
- и главное — возможность поправить ядро самому.
Если вы пишете на 1С каждый день и постоянно сталкиваетесь с задачами «надо бы автоматизацию, но 1С тут перебор» — попробуйте OneBase на одном пет-проекте. Багов поймаете много — но это шанс лично переписать кусок ядра на Go и присоединиться к проекту.
В комментариях готов разбирать конкретные сценарии: «как сделать X на OneBase» — пишите задачу, отвечу примером кода. Плюсы и подписки приветствуются — мотивируют доделать конвертер и написать выгрузку в БП 🙂 И обязательно смотрите мои видео!
Благодарности:
ИИ за то что он есть. Без него этой публикации не было бы точно!
Моей жене за то, что не выгнала меня из дома пока я писал это!
Фирме 1С за супер классный язык и платформу, за мою профессию и молодость
Ане, за остатки её лимитов клода!

P.S. Под капотом эту статью тоже помогал писал ИИ — (иначе я бы никогда не закончил). Это к вопросу о том, насколько изменился процесс разработки и документирования за последний год. Платформа OneBase — продукт того же подхода: человек ставит задачу и проверяет результат, ИИ пишет код. Лимиты подписок, наконец, тратятся с пользой.
Видео версия:
Ссылка ютуб на видеоверсию (можно скачать, если тут не открывается).
Предыдущие статьи про вайбкодинг:
Вайб-кодинг в 1С: как рефакторить код бесплатно с помощью VS Code и Roo Code
Вайб-кодинг в 1С: как заставить ИИ БЕСПЛАТНО писать новый код с помощью MCP-серверов
Вайб-кодинг в 1С: Подключаем локальные MCP-сервера к любой нейросети через MCP SuperAssistant
Вайб-кодинг в 1С: Создаём MCP для 1С 7.7 за вечер и пишем обмен с Бухгалтерией 3
Вайб-кодинг в 1С: Codex Desktop + GPT-5.4 пишет обработку САМ (Скайнет?)
Вайб-кодинг в 1С: Настраиваем эффективный workflow
Вайб-кодинг в 1С: Обходим лимиты поиска в Z AI и Claude: поднимаем свой поисковый движок через MCP
Вайб-кодинг в 1С: Бесплатное выполнение рутинных скиллов Claude Code
PromptPilot: менеджер задач для Claude Code, Codex и других CLI
Claude Note — каждая сессия с Claude Code становится знанием
Вайб-кодинг для 1С-ника: как я собрал персональный сайт за вечер с помощью ИИ
Запускаем OpenClaw на Orange Pi Zero 2 W
Спасибо за внимание!
Вступайте в нашу телеграмм-группу Инфостарт