Открытая бизнес-платформа со знакомым DSL для учётных задач, написанная на Go.
Одна «информационная база» = конфигурация (справочники, документы, регистры, отчёты) + данные в PostgreSQL + пользователи. Управляется через лаунчер — окно запуска информационных баз.
1С, 1С:Предприятие — товарные знаки ООО «1С». Проект OneBase разрабатывается независимо и не аффилирован с ООО «1С».
- Скачать архив со страницы Releases:
onebase-windows-amd64.zip - Распаковать в любую папку, например
C:\onebase\ - Двойной клик на
onebase-gui.exe— откроется лаунчер в браузере
Что в архиве:
onebase-gui.exe ← двойной клик — запускает лаунчер в браузере
onebase.exe ← CLI-инструмент (для терминала и сервера)
examples/ ← примеры конфигураций (6 штук)
irm https://raw.githubusercontent.com/ivanarama/onebase/main/install.ps1 | iexКладёт onebase.exe в %USERPROFILE%\.onebase\bin\ и добавляет в PATH.
tar xzf onebase-linux-amd64.tar.gz
sudo mv onebase-linux-amd64/onebase /usr/local/bin/
onebase start- PostgreSQL 14+ (локально или сетевой)
- Windows 10/11 с Edge (для нативного окна) — или любой браузер
Запустить.vbs ← двойной клик в проводнике
или из терминала:
onebase start
В лаунчере нажать «+ Добавить»:
| Поле | Пример |
|---|---|
| Наименование | Склад |
| Тип конфигурации | В базе данных (рекомендуется) |
| Строка подключения | postgres://localhost/sklad?sslmode=disable |
| Порт | 8080 |
| Создать с нуля | ✓ |
Нажать «Добавить» — база зарегистрирована, конфигурация создана автоматически.
Выбрать базу в списке → «Предприятие» — откроется веб-интерфейс базы.
Один сервер базы обслуживает много пользователей. Кнопка «Новое окно» открывает дополнительное окно с изолированным браузерным профилем (Edge/Chrome/Chromium) — в нём можно войти под другим пользователем, не задевая остальные окна; профиль помнит вход. Несколько сессий одного пользователя разрешены; администратор может завершать их по отдельности в «Администрирование → Активные пользователи». Кнопки «Остановить»/«Стоп всё» останавливают сервер базы, но не закрывают внешние окна — они покажут «сервер недоступен».
Закрытие лаунчера не останавливает запущенные базы (как в 1С: окно запуска — не владелец сеансов): открытые окна продолжают работать, а следующий запуск лаунчера подхватит живые базы и покажет их как работающие. Остановить всё разом — кнопка «Стоп всё».
В веб-интерфейсе базы: Администрирование → Пользователи → + Добавить.
Пока пользователей нет — вход без пароля. Первый пользователь должен быть
администратором; после его создания вход только авторизовавшись.
| Команда | Описание |
|---|---|
onebase start |
Открыть лаунчер информационных баз |
onebase ibases list |
Список зарегистрированных баз |
onebase ibases add --name ... --db ... --port ... |
Зарегистрировать базу |
onebase ibases remove --id ... |
Удалить регистрацию |
onebase dev --project ./my-app --db ... |
Dev-сервер с hot reload (файловый режим) |
onebase run --project ./my-app --db ... |
Production-сервер (файловый режим) |
onebase migrate --project ./my-app --db ... |
Применить схему БД |
onebase init [dir] |
Создать заготовку нового проекта |
Структура повторяет привычную учётным разработчикам модель:
| Уровень | onebase | Физически |
|---|---|---|
| Платформа | onebase.exe |
Go-бинарник: рантайм, DSL, REST API, лаунчер |
| Конфигурация | Папка (catalogs/, documents/, ...) или строки в БД |
YAML + .os скрипты |
| Информационная база | PostgreSQL | Прикладные таблицы + _users + _onebase_config |
Файловый (config_source: file) — для разработки:
- Конфигурация в папке на диске под git
onebase dev --project ./my-app --db ...с hot reload
В базе данных (config_source: database) — для пользователей:
- Конфигурация хранится в таблице
_onebase_configв PostgreSQL - Редактирование через «Конфигуратор» в лаунчере (Выгрузка → правка → Загрузка)
- Путь к папке скрыт, база — самодостаточная сущность
Требуется Go 1.26.5 (версия зафиксирована в .go-version).
# Консольная версия (без CGo)
go build -o onebase ./cmd/onebase
# GUI-версия с нативным окном (требует CGo и WebView2 на Windows)
go build -tags webview -ldflags="-H windowsgui" -o onebase-gui ./cmd/onebase# Тесты
go test ./...
# Интеграционные тесты (требуется PostgreSQL)
export TEST_DATABASE_URL=postgres://localhost/onebase_test
# Наборы используют общую тестовую БД, поэтому запускаются последовательно.
go test -count=1 -tags=integration .
go test -count=1 -tags=integration ./internal/auth
go test -count=1 -tags=integration ./internal/storage
go test -count=1 -tags=integration ./internal/configdbВ папке examples/ — 6 готовых конфигураций для разных задач:
| Папка | Назначение | Объекты |
|---|---|---|
minimal/ |
Учебный шаблон — минимальный набор для понимания структуры | 1 справочник, 3 документа, 1 регистр, 2 отчёта, роль |
trade/ |
Флагманский пример — торговля и склад с FIFO | 7 справочников, 9 документов, 6 регистров, 11 отчётов, 8 обработок, 4 роли |
accounting/ |
Бухгалтерский учёт — двойная запись, план счетов | 1 план счетов, 1 бух. регистр, 2 документа |
tasks/ |
Управление задачами — Agile-спринты, тайм-трекинг | 4 справочника, 4 документа, 2 регистра, 6 отчётов, перечисления |
crm/ |
CRM — воронка продаж, сделки, контакты | 7 справочников, 6 документов, 4 регистра, 10 отчётов |
finance/ |
Домашние финансы — доходы, расходы, цели | 6 справочников, 5 документов, 3 регистра, 10 отчётов |
# Запуск любого примера
onebase dev --project ./examples/trade --db "postgres://localhost/trade_dev?sslmode=disable"
# → http://localhost:8080/uiOnebase DSL — язык для написания бизнес-логики, синтаксис знаком разработчикам учётных систем. Файлы .os в папке src/.
// Проведение документа — FIFO списание партий
Процедура ОбработкаПроведения()
Движения.ПартииТоваров.Очистить();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ДатаПоставки, КоличествоОстаток, СуммаОстаток
ИЗ РегистрНакопления.ПартииТоваров.Остатки()
ГДЕ Номенклатура = &Ном И КоличествоОстаток > 0
УПОРЯДОЧИТЬ ПО ДатаПоставки";
Запрос.УстановитьПараметр("Ном", Строка.Номенклатура);
Партии = Запрос.Выполнить();
Для Каждого Партия Из Партии Цикл
Если Остаток <= 0 Тогда
Прервать;
КонецЕсли;
Дв = Движения.ПартииТоваров.Добавить();
Дв.ВидДвижения = "Расход";
Дв.Количество = КолВоИзПартии;
КонецЦикла;
КонецПроцедуры| Конструкция | Пример |
|---|---|
| Переменные | Сумма = 0; |
| Условия | Если Сумма > 0 Тогда ... КонецЕсли; |
| Циклы | Для Каждого Э Из Массив Цикл ... КонецЦикла; |
| Прерывание цикла | Прервать; |
| Пропуск итерации | Продолжить; |
| Попытка/Исключение | Попытка ... Исключение ... КонецПопытки; |
| Запросы | Запрос = Новый Запрос; Запрос.Выполнить(); |
| Транзакции | НачатьТранзакцию(); ЗафиксироватьТранзакцию(); |
| Коллекции | Новый Массив, Новый Структура, Новый Соответствие |
| Печатные формы | Новый ТабличныйДокумент |
| HTTP-запросы | HTTPЗапрос("GET", "https://...") |
Отчёты поддерживают графики через ECharts. Диаграмма создаётся программно в DSL.
YAML отчёта — добавьте chart_proc:
name: ВаловаяПрибыль
query: |
ВЫБРАТЬ Номенклатура, СУММА(Выручка) КАК Выручка,
СУММА(Выручка) - СУММА(Себестоимость) КАК ВаловаяПрибыль
ИЗ РегистрНакопления.ВаловаяПрибыль
СГРУППИРОВАТЬ ПО Номенклатура
chart_proc: СформироватьДиаграммуРедактирование в конфигураторе — откройте отчёт в дереве метаданных → поле «Процедура диаграммы» → редактор «Код диаграммы (.rep.os)». Код сохраняется в src/ИмяОтчёта.rep.os автоматически.
DSL-процедура — файл src/ВаловаяПрибыль.rep.os:
Процедура СформироватьДиаграмму()
Д = Новый Диаграмма;
Д.Заголовок = "Валовая прибыль по номенклатуре";
Д.Тип = "Гистограмма"; // Гистограмма / Линейная / Круговая
СерияВ = Д.Серии.Добавить();
СерияВ.Имя = "Выручка";
СерияП = Д.Серии.Добавить();
СерияП.Имя = "Прибыль";
Для Каждого Стр Из Результат Цикл
Т = Д.Точки.Добавить();
Т.Значение = Стр.Номенклатура;
СерияВ.УстановитьЗначение(Т, Стр.Выручка);
СерияП.УстановитьЗначение(Т, Стр.ВаловаяПрибыль);
КонецЦикла;
Возврат Д;
КонецПроцедурыДанные запроса доступны через переменную Результат (Массив из Структура).
- Типы диаграмм:
Гистограмма(bar),Линейная(line),Круговая(pie) - Свойства:
Заголовок,Тип,Легенда,Подписи,Подсказки
Проект развивается в свободное время. Если OneBase оказался полезным — буду рад поддержке:
| Способ | Реквизиты |
|---|---|
| TON / USDT | UQDmhcdNyqut5nE8K7yJCvXwNST2qMIBk5gRgFInpO7eBO-x |
| ЮMoney (карта РФ) | yoomoney.ru/to/41001428157040 |
Этот репозиторий использован в статье на Инфостарт
Платформа OneBase — © 2026 Иван Титов. Код написан Иваном Титовым, в том числе
с использованием инструментов разработки на базе ИИ (Claude Code). Согласно
позиции разработчиков таких инструментов и применимому законодательству
(в РФ — ст. 1257 ГК РФ), ИИ-ассистент является инструментом, а права на
созданный по заданиям человека код принадлежат автору задания. Пометки вида
Generated-with в истории git — указание на использованный инструмент, а не
передача авторских прав.
Авторство и лицензия конкретной конфигурации задаются в её свойствах
(config/app.yaml: author / copyright / license) и видны в
пользовательском режиме на экране «О программе».
MIT © 2026 Иван Титов
1С, 1С:Предприятие — товарные знаки ООО «1С». OneBase разрабатывается независимо, не аффилирован с ООО «1С» и не является его продуктом.
Конвертеры onebase convert (импорт XML-выгрузки конфигурации) и
onebase forms convert-from-1c / convert-to-1c (двусторонний обмен
управляемыми формами) работают только с публичными текстовыми форматами
выгрузки конфигурации (XML и BSL), которые открыты по спецификации EDT
и используются сторонними инструментами (OScript, EDT-плагины).
Все маппинги типов реквизитов, событий и элементов форм реализованы как
собственные таблицы соответствий по общедоступной документации.
Лексер Module.bsl — минимальный токенизатор без построения синтаксического
дерева; тела процедур копируются как цитаты для интероперабельности,
без реверс-инжиниринга исполнения.
Имена ссылочных типов (CatalogRef.X, DocumentRef.X) — общеупотребительные
термины русскоязычного бизнес-софта, не охраняемые товарные знаки.
Упоминания 1С:Предприятие в репозитории — исключительно для описания
совместимости при импорте/экспорте данных.