Почему на это переходят
В первый день у вас работающая ERP, и при этом право её менять. Коробочные продукты и большинство облачных сюитов эти две вещи вместе не продают.
Коробка, которую нельзя менять. Облако, которое нельзя расширить. Заказная разработка на два года. ZuloOne — учётная платформа, которая уже работает, и в которую всё равно можно добавить объект, которого нет ни у кого другого: без форка и без ожидания экрана от вендора.
Описали — оно есть.
Справочник или документ — это метаданные. Через секунды есть таблица, API, список и карточка. Никто не открывает заявку на экран. Никто не ждёт релиз ради колонки.
Один офис. Все контуры.
Продажи, склад, налог, зарплата и книга — один вход, одна лента, один тенант. Проведённая реализация пишет остаток и книгу в ту же секунду. Полевое приложение говорит с теми же API — это не второй продукт.
Настоящий учёт, не поле «статус».
Регистры держат остатки и датированные ставки. Следующий документ и отчёт читают ту же память. Второй базы «для аналитики» нет, и таблица Excel — не система учёта.
Ваш процесс — полноценный объект.
Поле, документ, команда или страновой пакет, которые нужны только вам, живут в вашем слое. Следующее обновление платформы их не забирает. Вы не сливаете форк и не сидите на прошлогодней версии.
Вы пишете
- Метаданные — объекты, поля, регистры, меню
- Бизнес-логику — проводки, проверки, команды, сервисы
- Формы и отчёты — в дизайнере или метаданными
Вы не пишете никогда
- SQL-миграции
- Классы сущностей
- Контроллеры и эндпоинты
- UI-компоненты
Итог: новый процесс — это новый объект на той же платформе, а не второй продукт, не год экранов и не форк, который потом придётся сливать.
Объекты метаданных
Бизнес-приложение в ZuloOne — метаданные плюс скрипты. Из них платформа генерирует таблицы, классы сущностей, REST API и весь интерфейс.
Ниже — виды объектов, которые вы описываете. Двенадцать модулей — комбинации этих объектов, а не отдельные программы. Если модуль вас не покрывает, вы добавляете тот же вид объекта, из которого модули сделаны, — и у него сразу есть список, карточка, API и место на ленте.
- Справочник
Каталог записей одного вида: номенклатура, контрагенты, склады, налоговые коды. Иерархический (группы номенклатуры) или плоский. Список и карточка. Ссылочные поля на других объектах указывают сюда — так записи связаны. Платформа нумерует ID, держит переводы подписи и собирает грид и форму из списка полей.

Список справочника. Поиск, фильтры и сортируемые колонки — один рисунок на любом каталоге: его не пишут отдельно под объект. - Документ
Операция, которая изменит учёт: заказ, приход, отгрузка, начисление зарплаты. Шапка плюс табличные части. Живёт в подтипе — черновик, подтверждён, проведён, оплачен. Подтип — конечный автомат; скрипты целевого подтипа пишут регистры.
Сохранить пишет запись. Склад, дебиторка и книга от этого не двигаются. После сохранения селект подтипа на карточке заморожен. Следующий подтип ставит только команда — кнопка, которая может проверить остаток, строки и открытый период. Если бы состояние было выпадающим списком, каждая из этих проверок была бы в одном клике от пропуска.
Целевой подтип запускает проводки: движения по регистрам. Одна реализация может снять товар с полки, признать выручку, начислить дебиторку и положить всё это в главную книгу. У подтипа может быть несколько транзакционных скриптов — по учётной задаче: склад, себестоимость, налог, GL — а не один скрипт «на всё».
Сторно — тоже команда, на проведённом подтипе. Движения снимаются; править их руками нельзя и не нужно.
Проводки берут дату документа, а не момент нажатия кнопки. Документ задним числом попадает в период своей даты.
Что Что это Где Граница проведения Одна отсечка на весь тенант: раньше не провести и не сторнировать. Это не календарь учётных месяцев. Администратор Фискальные периоды Календарь учётных периодов, у каждого свой статус. Книга выбирает период по дате документа; закрытый месяц здесь — не то же самое, что граница проведения. Учёт 
Каждое поле на этой карточке — из метаданных документа. Форма — рабочее место этого объекта, а не экран, нарисованный вручную. - Форма
Экран справочника или документа, собранный из полей объекта. Раскладку всё равно можно менять: поля тягаются, собираются в карточки и вкладки, меняются подписи и ширины. Раскладка личная, общая (права разработчика) или автоматическая. Общая едет вместе с моделью. Enter ходит по полям, Ctrl+S сохраняет, Ctrl+K ищет объекты и записи.
- Команда
Кнопка на форме или в списке: провести, подтвердить, пересчитать, сторнировать, преобразовать. Может сначала проверить условия, затем сменить подтип, вызвать сервис или записать регистр. Подтип со скриптами проведения без команды перехода из UI провести нельзя — так задумано.
- Меню
Как объекты появляются на ленте. У модели своё дерево: группы справочников, документов, итогов, отчётов, затем пункты. Свою ветку можно привить в группу модели нижнего слоя. Права прячут вкладку: нет вкладки — нет права, а не нет функции.
- EDT и номерные серии
Поле типизируется EDT: строка, число, дата, булево или ссылка на справочник. Перечисления — целые. Номерная серия ставит человекочитаемый ID новой записи; если свою не объявить, платформа заведёт. Это тоже объекты метаданных — не колонки, которые вы придумываете в SQL.
- Сервис
Логика, которая нужна больше чем одному скрипту: цена, подбор, генерация следующего документа, налоговый движок. Тела скриптов тонкие: проверить, вызвать сервис, вернуть результат. Несколько моделей могут обернуть один контракт сервиса через Chain of Command.
Регистры: память компании
Регистр — не таблица, которую заполняют руками. Это учётная память: остатки, движения и датированные факты. Документы пишут, отчёты и другие документы читают.
Поэтому не покупают отдельно склад, отдельно дебиторку и отдельно «аналитику». Товар, деньги и налог живут здесь. Следующий документ видит то, что провёл предыдущий.
- Регистр накопления
- Измерения (номенклатура, склад, партия…) и ресурсы (количество, сумма). Проведение пишет движение, движок держит остаток. Склад, дебиторка, кредиторка, слои себестоимости, налоговые обороты — это регистры накопления. Двойная запись, FIFO и виртуальные итоги живут на этом объекте. Строку в него никто не набивает.
- Регистр сведений
- Значение, которое было верно в момент времени: ставка налога на дату, класс в журнале ABC, настройка с историей. Одна строка на комбинацию измерений в Period. Более поздний Period закрывает предыдущий. SliceLast / SliceFirst отвечают «что действовало на эту дату». Это не интервал с–по и не остаток.
Что это даёт
Отчёт по итогам — начало, приход, расход, конец, в разрезе аналитик регистра — без отдельного аналитического склада. Следующий документ читает тот же остаток или ту же ставку, что записал предыдущий. Пересчёт и сторно — это движения, а не правки строк. Граница проведения действует и здесь: Period за отсечкой отклоняется.
Рабочее место итогов — этот регистр со списком и фильтром, а не отдельный продукт. Виртуальный итог — сохранённый срез того же регистра: группировка, подпись, нулевое входящее — тот же движок.
Рабочие места
Офис — одно сгенерированное рабочее место. Лента, списки, карточки и рабочий стол берутся из объектов выше, поэтому каждый модуль выглядит как один продукт — потому что это один продукт.
Пользователи учат один офис. У документа, который вы добавили утром, уже есть список и карточка. Второй UI на контур не поставляется, и людей не переучивают на новый продукт каждый раз, когда бизнес растёт.
- Лента
- Вкладки-области с командами и переходами. Типичные: Рабочая область, Разработчик, Администратор. Набор — это права, а не другое приложение.
- Списки
- У каждого справочника и каждого вида документа есть грид: поиск, фильтры, сортируемые колонки, команды на строках. Несколько списков вкладками — обычный способ работы.
- Карточки
- Форма записи. Шапка и табличные части на своих вкладках. Несколько карточек могут быть открыты сразу. Ассистент стыкуется рядом и сужает карточку, а не накрывает рабочее место.
- Раскладки
- На карточке есть кнопка раскладки. Поля тягаются, собираются в карточки и вкладки, меняются подписи и ширины. Личная, общая или сброс к автоматической. Общие раскладки едут с моделью между средами.
- Виджеты рабочего стола
- Плитки на домашнем рабочем месте: счётчики, итоги, короткий список, график, скриптовая плитка. Они читают те же справочники, документы и регистры. Field Desk руководителя — виджет, а не второй продукт.

Слои и расширения
Приложение — стопка моделей. У каждой модели слой. Нижний слой верхний не видит. Поэтому обновление общей части не затирает работу заказчика — и можно оставаться на текущей версии, не замораживая кастомизацию.
System → Base → Solution → Customization → User
Модель видит всё ниже себя и может расширять. Чужой объект на месте не правит. Новое поле на справочнике нижнего слоя объявляется в вашей модели — платформа заворачивает его в расширение. Пункт меню можно привить в чужую группу. Кастомизация живёт в модели верхнего слоя и едет с этой моделью между средами.
Как работает расширение
На одном справочнике, документе или сервисе живут несколько обработчиков: владелец в модели самого объекта, затем каждый слой выше. Это Chain of Command — луковица, не список подписок. Верхний слой стартует первым, зовёт next() / nextAsync() вниз, а работа после next() видит, что уже записали склад и книга.
Владелец next не зовёт. Расширение чужого объекта обязано объявить себя и звать next из каждого override — иначе цепочка рвётся. Replace глотает остаток цепочки специально. Несколько транзакционных скриптов на одном подтипе — горизонтальный список (склад, потом себестоимость), не эта луковица.
Страна — слой, не форк
Саудовский НДС, ZATCA, украинский НДС живут в своих моделях поверх Tax, Sales и книги. Они добавляют ставки, отчёты и исходящие каналы. Общие объекты они не копируют. Добавление страны ничего не меняет для остальных.
Двенадцать модулей. Остальное добавляете вы.
Модуль — справочники, документы и регистры на платформе плюс скрипты, которые их проводят. Его ставят, расширяют своей моделью или не ставят. Это не отдельная программа и не отдельная база.
Один проведённый документ может писать регистры нескольких модулей. Если двенадцать модулей процесс не покрывают, этот процесс всё равно объект того же вида — не проект в другой системе. Контур от начала до конца — в темах документации (ABC/XYZ и дальше).
| Модуль | Роль в бизнесе | Слой |
|---|---|---|
| Common | Общие строительные блоки: единицы измерения, деньги, география, базовые справочники, на которые ссылается всё остальное | Base |
| Organization | Юрлица и оргструктура — компании, подразделения, площадки | Base |
| Accounting | План счетов, фискальные периоды, журнал проводок и главная книга | Base |
| Tax | Налоговый движок: коды, датированные ставки, правила определения, налоговый леджер | Base |
| Inventory | Номенклатура, склады, зоны и ячейки, регистр остатков, складские перемещения | Solution |
| Purchasing | Заказы поставщикам, приход на склад, признание кредиторской задолженности | Solution |
| Sales | Заказы и реализация, резерв, налоговый контекст, признание выручки | Solution |
| Production | Спецификации (BOM) и производственные заказы — списание сырья и выпуск | Solution |
| HR | Должности, сотрудники, начисление и выплата ФОТ | Solution |
| CRM | Лояльность, лиды и коммерческие предложения поверх заказа покупателя | Solution |
| Costing | Оценка запасов и себестоимость выбытия, FIFO или средняя — настраивается | Solution |
Страновые локализации
Страна — отдельная модель поверх общего ядра. Она добавляет статутарные ставки, отчётность и госинтеграции, не правя ничего снизу.
- LocalizationSaudiArabia
Саудовская Аравия: НДС 15%, электронные счета ZATCA/FATOORA с подписанием и клирингом
- LocalizationUkraine
Украина: НДС на продажах и соответствующий регистр обязательств
Принцип
Бизнес-функция — глобальная. Страновой комплаенс — локализация. UI — из метаданных. Цена — договор и правила, с объяснением.
Продажи, склад, закупки, налоговый движок, книга и ценообразование живут в общих слоях. Новая страна — это новая модель поверх них, а не форк и не switch по стране. Поэтому её добавление ничего не меняет для всех остальных.
SaaS — стенд, который ваш
ZuloOne продаётся как software-as-a-service. Вы не покупаете лицензию, чтобы ставить её в пятницу вечером. Вы подписываетесь на стенд: свой поддомен, свой контейнер, своя база — уже запущенные.
- Что входит в подписку
- Хостинг, обновления, резервные копии и люди, которые отвечают, когда что-то ломается. Одна цена за стенд, а не стопка лицензий на базу, сервер приложений и мониторинг. Планы и места — на странице цен.
- Не строка в общей базе
- У каждого тенанта свой контейнер и своя база за общим прокси. Нагрузка соседа — не ваш простой. Ваши данные ни с чьими не смешаны.
- Обновление, которое можно откатить
- Сначала снимается снапшот, можно вернуться на прежний образ. Неудачный релиз — минута простоя, а не восстановление из копии и не выходные с вендором на площадке.
- Ничто не заперто в инстансе
- Кастомизация — формы, правила, отчёты — это метаданные, они едут с моделью между средами. Данные и конфигурацию можно выгрузить в любой момент. Enterprise по договорённости ставится и на вашу инфраструктуру.
Начинаете на нашем хостинге. Право уйти с моделью и данными остаётся за вами. Это разница между SaaS, который арендуют, и платформой, которой владеют.
ЦеныПосмотрите своими руками
Двадцать четыре часа, настоящий тенант, демо-данные компании уже загружены. Если это та платформа — следующий шаг стенд, а не ещё год выбора между продуктами.