ZuloOne
Русский
Войти

Почему на это переходят

В первый день у вас работающая 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 руководителя — виджет, а не второй продукт.
Дашборд ZuloOne с лончером модулей
Живой тенант. Плитки — модули, лента — хром рабочего места. Этот экран никто не рисовал: так выглядит то, что дают метаданные.

Слои и расширения

Приложение — стопка моделей. У каждой модели слой. Нижний слой верхний не видит. Поэтому обновление общей части не затирает работу заказчика — и можно оставаться на текущей версии, не замораживая кастомизацию.

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, который арендуют, и платформой, которой владеют.

Цены

Посмотрите своими руками

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

Документация для разработчиков →