Довідка

Довідник формул і коду

Посібник для новачків, блоки, код формул і повний скрипт. Картки довідника генеруються з registry.

Mom · Help

Ласкаво просимо. Тут описано логіку калькулятора в блоках, коді формули та повному скрипті — усе редагує одне дерево формули.

Що таке цей калькулятор?

Калькулятор — це конфігурація (CalculatorConfig): поля вводу, константи, опційні макроси, проміжні розрахунки (calc) і фінальні результати (output). У кожного calc/output одна формула у вигляді дерева (AST). Білдер дозволяє редагувати дерево блоками або текстом — обидва види читають і пишуть одне й те саме дерево, тож дві незалежні формули не потрібні.

На екрані калькулятора користувач вводить кількості та властивості; застосунок обходить граф залежностей і обчислює формули в правильному порядку.

Частини конфігурації

ЧастинаБачить користувач?Роль
Input (field_*)Так — qty + властивостіТе, що вводить користувач
Constant (const_*)НіФіксовані числа в формулах
Macro (macro_*)НіПовторюваний фрагмент; перетягується як змінна
Calculation (calc_*)Ні (проміжний)Прихований крок для інших формул
Output (output_*)Так — після РозрахуватиПідсумок для користувача

Авто-розрахунки (бейдж «Auto») з’являються при «кількість × властивість» на полі. Вони в read-only вкладці скрипта і в палитрі як посилання на calc.

Одна формула — три види

CalculatorConfig.expression (JSON AST)   єдине джерело правди в БД
         parse (registry)      format (registry)
   текст коду формули         UI блоків
  • Блоки — workspace у стилі Scratch.
  • Код — та сама мова в formula { … } або в повному скрипті.
  • Preview («Читається як» / breakdown) — текст з AST.

Новий оператор додається один раз у lib/formula/nodes/primitives/*.node.ts і з’являється в блоках, коді, autocomplete та цій довідці.

Редактор блоків — покроково

  1. Відкрийте розрахунок або результат і розгорніть Логіку розрахунку.
  2. Оберіть вид Блоки або Код + блоки.
  3. Натисніть у слоті або перетягніть з палитри.
  4. Палитра → Блоки: поля, константи, макроси, інші calc/output.
  5. Палитра → Дії: + − × ÷, порівняння, ( ), SUM, IF, ROUND, агрегати по рядках.
  6. — перетягнути блок; вкладення в SUM / IF / дужки.
  7. Читається як — текст формули, синхронний з блоками.

IF і ROUND — кольорові дужки з підписаними слотами. SUM — аргументи через кому всередині дужки.

Код формули — покроково

  1. У тій же панелі — Код або Код + блоки.
  2. Приклад:
formula {
  local subtotal = field_item.qty * field_item.var_cost
  return ROUND(subtotal * const_markup, 2)
}
  1. local лише перед return. Імена — lowercase.
  2. Посилання: field_id.qty, field_id.var_cost, const_id, calc_id, output_id, macro_id.
  3. Порівняння → 1 або 0. IF(умова, так, ні) — умова істинна, якщо ≠ 0.
  4. Невалідний код не потрапляє в блоки, поки парсер не прийме текст.
  5. Ctrl/Cmd+S у sheet — застосувати весь проєкт.

Autocomplete (Ctrl+Space) — поля, функції, ключові слова скрипта.

Синхронізація блоків і коду

  • Блоки → код оновлюється одразу (format з registry).
  • Код → блоки після паузи, коли текст парситься.
  • Код у тулбарі — повний скрипт по вкладках. Застосувати → той самий CalculatorConfig, що й UI блоків.
  • Зміни в білдері без правок у sheet — авто-перезавантаження скрипта.
  • Якщо sheet редагували — банер Перезавантажити з білдера.

У БД лишається один JSON — sheet лише текстове відображення.

Повний скрипт (вкладка Код)

Кнопка Код у білдері відкриває всі декларації:

ВкладкаЗміст
inputs.calcinput field_… { … }
constants.calcconstant const_… { … }
macros.calcmacro macro_… { … }
calculations.calccalc calc_… { … }
outputs.calcoutput output_… { … }
auto-calculations.calcread-only авто-підсумки

Директиви: #include, #use (шаблон). Деталі — вкладка Скрипт калькулятора нижче.

У репозиторії: docs/calculator-script.md.

Як обчислюються значення

  1. Збираються qty і рядки таблиць.
  2. Авто-calc і calc — у порядку залежностей (цикли виявляються).
  3. Кожна формула — через registry.
  4. Потім outputs.
  5. local лише всередині одного output.

Ділення на 0 → 0 і попередження в логах. ROUND(x, n) — n від 0 до 10.

Поради новачкам

  • Почніть з пресету (типографія, салон, друкарня).
  • Довгі кроки — у calc, короткі — у output.
  • Макроси — для повторюваних виразів.
  • Таблиці рядків: SUM_ROWS(…) у коді або SUM rows у блоках.
  • ? на блоках палитри та Довідка в шапці — ця сторінка.
  • Тести: npx vitest run tests/formula.