Skip to content

Маркетплейс -- Каталоги Korfix

См. также: data-api.md · self-provisioning.md · db-views.md · catalog-settings.md Home

Korfix -- полноценная ERP-платформа. Все каталоги доступны из приложения через App.fetch('/db/{catalog}.json', ...) с правами текущего пользователя.


Доступные каталоги

Финансы (AG-модуль)

Каталог Описание
ag_cashflows Операции (ДДС)
ag_cashflows_prj Выплаты по проектам
ag_cashflows_clients Операции по контрагентам
ag_transactions Транзакции
ag_accountant Счета на оплату
ag_contracts Договоры
ag_clients Контрагенты
ag_companies Ваши юрлица
ag_projects Проекты
ag_products Продукты
ag_products_group Группы продуктов
ag_articles Статьи ДДС
ag_cat_articles Категории статей
ag_fonds Фонды
ag_fonds_percent Распределение по фондам
ag_flows Потоки
ag_settlement_accounts Расчётные счета
ag_dds ДДС (отчёт)
ag_bdr Бюджет доходов и расходов
ag_balans_report Баланс
ag_sales_report Отчёт по продажам
ag_workload_report Отчёт по занятости
ag_products_report ДДС по продуктам
ag_debt_credit_report Задолженности контрагентов
ag_sumcash Платёжный календарь по юрлицам
ag_fonds_calendar Платёжный календарь по фондам
ag_project_to_types Бюджет и рентабельность по продуктам
ag_p2t_plan Месячный план по продуктам
ag_article_plan Месячный план по статьям
ag_accounts Сотрудники (AG)
bank_exchanges Банковские выгрузки
currency_rate Курсы валют

B2B (торговля, заказы)

Каталог Описание
b2b_orders Заказы
b2b_basket Состав заказа
b2b_order_items Заказанная продукция
b2b_clients Клиенты
b2b_items Продукция
b2b_cat_items Группы продукции
b2b_nomenclature_group Категории продукции
b2b_discounts Скидки и цены
b2b_prices_items Особые цены на продукцию
b2b_delivery Адреса доставки
b2b_routes Маршруты
b2b_route_items Продукция по маршрутам
b2b_available_categories Доступные категории продуктов
b2b_production_schedule График производства
b2b_accounts Пользователи B2B
b2b_news Новости (B2B портал)
basket_connect Связь корзин

Производство (MD-модуль)

Каталог Описание
md_project Обработка заказов
md_production Производство
md_project_product Изделия в проекте
md_project_batch Партии в изделиях
md_batches Партии
md_sketches Эскизы
md_design 3D Модельер
md_wages Расчёт ЗП
md_wages_actual Зарплаты
md_min_wages Оклады
md_awards Премии и штрафы
md_coefficients Коэффициенты
md_contractors Подрядчики
md_clients Клиенты (MD)
md_basket Состав заказов (MD)
md_accounts Сотрудники (MD)
md_alloy Виды сплавов
md_articles Комментарии к отчёту
md_cat_articles Категории статей (MD)
md_reports Отчёты
md_production_report Отчёт производства
md_remarks Комментарии

Time Tracking (TT-модуль)

Каталог Описание
tt_tasks Задачи
tt_projects Проекты
tt_worklogs Рабочие журналы
tt_versions Версии
tt_wiki Wiki
tt_comments Комментарии

Склад (WH-модуль)

Каталог Описание
wh_items Товары
wh_cat_items Группы товаров
wh_stores Склады
wh_movements Движение товаров
wh_nomenclature_group Категории товаров
wh_warehouse_report Отчёт по складам

Выездные работы (VRN-модуль)

Каталог Описание
vrn_projects Работы
vrn_type_work Виды работ
vrn_tools Инструменты
vrn_equipment Техника и оборудование
vrn_materials Материалы

CRM

Каталог Описание
crm_contacts Клиенты
crm_orders Заказы
crm_delivery Доставка
crm_stores Склады
crm_items Товары
crm_basket Состав заказов
crm_feedback Обращения

Системные / служебные

Каталог Описание
accounts Сотрудники (основной)
users Пользователи платформы
contacts Контакты
project_types Типы проектов
activity Лог активности пользователей
eventlogs События интеграций
integrations Интеграции
notifications Уведомления
dashboard_widgets Виджеты дашборда
dashboards Рабочие столы
saved_filters Сохранённые фильтры
apps_storage KV-хранилище приложений
installed_apps Установленные приложения
marketplace Маркетплейс
todo ToDo
remarks Замечания
bookmarks Закладки
favorites_menu Избранное меню
profile_company Профиль компании
coredb_spravochnik Справочник
new_elements Новые элементы
trash Корзина
docs Документы (doctxt)
catalog_rules Правила каталогов (afterSave/beforeSave)

Рассылки и коммуникации

Каталог Описание
send_partners_notifications Рассылки партнёрам
send_segments Сегменты рассылки
send_tpl_emails Шаблоны писем
mail_notifications_queue Очередь писем
telegram_notifications Очередь Telegram сообщений
tpl_emails_orders Шаблоны писем по заказам
tpl_emails_persons Шаблоны писем партнёрам

AI и логи

Каталог Описание
deepseek_request Запросы к DeepSeek
log_deepseek Логи DeepSeek
log_bad_authorize Логи неудачных авторизаций
log_billings Логи биллинга
api API-токены

Примеры запросов из приложения

Получить заказы B2B

App.fetch('/db/b2b_orders.json').then(resp => {
    console.log(resp.data); // массив заказов
});

// С фильтром по статусу
App.fetch('/db/b2b_orders.json?form[status]=new').then(resp => { ... });

Состав конкретного заказа

App.getRequestParams().then(resp => {
    const orderId = resp.data.itemId;
    App.fetchAll(`/db/b2b_basket.json?form[order_id]=${orderId}`).then(resp => {
        console.log(resp.data); // все позиции заказа
    });
});

Создать задачу в TT

App.fetch('/db/tt_tasks/add?edit&ajax=1', {
    method: 'POST',
    body: {
        'form[name]': 'Задача из приложения',
        'form[project_id]': projectAlias,
        submit: 1
    }
});

Отправить запрос в DeepSeek

App.fetch('/db/deepseek_request/add?edit&ajax=1', {
    method: 'POST',
    body: {
        'form[prompt]': 'Проанализируй заказ',
        'form[context]': JSON.stringify(orderData),
        submit: 1
    }
});

Добавить уведомление в Telegram

App.fetch('/db/telegram_notifications/add?edit&ajax=1', {
    method: 'POST',
    body: {
        'form[message]': 'Новый заказ #' + orderId,
        'form[chat_id]': chatId,
        submit: 1
    }
});

Прочитать историю активности

App.fetch('/db/activity.json?form[catalog]=b2b_orders&form[item_id]=ORDER_ALIAS')
    .then(resp => {
        resp.data.forEach(event => {
            console.log(event.user, event.action, event.date);
        });
    });

Сценарии сквозной автоматизации

Korfix -- ERP с единой базой, поэтому приложение может строить сквозные сценарии через несколько модулей без переключения контекста.

B2B Заказ → Производство → Счёт

App.getRequestParams().then(async resp => {
    const orderId = resp.data.itemId;

    // 1. Читаем заказ
    const order = await App.fetch(`/db/b2b_orders/${orderId}`);

    // 2. Создаём производственный проект
    const mdProject = await App.fetch('/db/md_project/add?edit&ajax=1', {
        method: 'POST',
        body: {
            'form[name]': 'Производство ' + order.data.name,
            'form[b2b_order_id]': orderId,
            submit: 1
        }
    });

    // 3. Создаём счёт на оплату
    await App.fetch('/db/ag_accountant/add?edit&ajax=1', {
        method: 'POST',
        body: {
            'form[name]': 'Счёт по заказу ' + order.data.name,
            'form[amount]': order.data.total,
            'form[client_id]': order.data.client_id,
            submit: 1
        }
    });

    App.alert('Проект и счёт созданы', 'Готово');
    App.reload();
});

Вебхук на новые заказы → Telegram

// Регистрируем один раз при установке приложения
App.storage.set(
    'event.hook.activity.b2b_orders.добавил.json',
    'https://myapp.example.com/api/new-order-hook'
);

На стороне бэкенда приложение получает POST с данными события и шлёт сообщение в Telegram через telegram_notifications или напрямую.


Включённые фичи платформы (conf.phtml)

Эти возможности активны в Korfix -- приложения могут на них опираться:

Фича Значение
marketplace ✓ маркетплейс
core_events ✓ система событий (afteradd, beforesave, activity)
access_db ✓ row-level права на каталоги
access_statuses ✓ права на статусы
custom_dbfields ✓ кастомные поля в каталогах
saved_filters ✓ сохранённые фильтры
currency_rate ✓ курсы валют
json_response ✓ всё возвращает JSON
cataccess ✓ права на уровне строк
partners ✓ авторизация B2B-клиентов
yookassa ✓ платёжная система
bitrix24 ✓ синхронизация с Bitrix24
smtp ✓ отправка email
multiauth ✓ несколько ролей у пользователя
catalog_rules ✓ декларативные правила afterSave/beforeSave

Связи между каталогами (FK)

Связи определены через поля типа select_from_table в схемах. При запросе через API связанные значения подставляются автоматически (поле {name}_value в ответе).

Типы ограничений (WHERE)

Большинство связей ограничены условиями видимости:

Паттерн Описание
from_group = SESSION_GROUP Только записи своей группы (тенант-изоляция)
$_ACCESS->get_where() Полная проверка прав через систему доступа
from_group = ... OR from_group = '0' Свои + общие (шаблонные) записи
from_auth = SESSION_ID OR from_auth = 0 Свои + публичные (напр. дашборды)
hidden < 1 OR hidden IS NULL Не удалённые
account_type = N Фильтр по роли пользователя

Финансы (AG)

ag_cashflows
  ├─ project_id    → ag_projects.id
  ├─ expense_type_id → ag_articles.id      (статья ДДС)
  ├─ client_id     → ag_clients.id
  ├─ companies_id  → ag_companies.id       (наше юрлицо)
  ├─ settlement_account_id → ag_settlement_accounts.id
  ├─ from_auth     → auth_pers.author_id
  └─ members_id    → auth_pers.author_id[] (мульти)

ag_contracts
  ├─ client_id     → ag_clients.id
  ├─ companies_id  → ag_companies.id
  ├─ project_id    → ag_projects.id[]      (мульти)
  └─ members_id    → auth_pers.author_id[]

ag_articles
  ├─ category      → ag_cat_articles.id
  ├─ flows_id      → ag_flows.id
  ├─ products      → ag_products.id[]      (мульти)
  └─ members_id    → auth_pers.author_id[]

ag_accountant (Счета)
  ├─ client_id     → ag_clients.id
  ├─ companies_id  → ag_companies.id
  └─ members_id    → auth_pers.author_id[]

ag_projects
  ├─ type_project_id → ag_products.id      (тип проекта)
  ├─ contact_id    → ag_clients.id
  ├─ client_id     → ag_clients.id
  ├─ companies_id  → ag_companies.id
  └─ members_id    → auth_pers.author_id[]

ag_products
  └─ group_id      → ag_products_group.id

ag_fonds_percent
  ├─ expense_types_id → ag_articles.id
  └─ fond_id       → ag_fonds.id

ag_clients / ag_companies
  └─ country_id    → country.alias

B2B (Торговля)

b2b_orders
  ├─ client_id     → b2b_clients.id
  ├─ delivery_id   → b2b_delivery.id
  └─ members_id    → auth_pers.author_id[]

b2b_basket (Состав заказа)
  ├─ order_id      → b2b_orders.id
  └─ item_id       → b2b_items.id

b2b_items (Продукция)
  ├─ nomenclature_group → b2b_cat_items.id (категория)
  └─ members_id    → auth_pers.author_id[]

b2b_delivery
  └─ route_id      → b2b_routes.id (JOIN с b2b_production_schedule)

b2b_discounts
  └─ client_group  → b2b_clients.id

Задачи (TT)

tt_tasks
  ├─ person_id     → auth_pers.author_id   (исполнитель)
  ├─ version_id    → tt_versions.id
  ├─ project_id    → tt_projects.id
  ├─ parent_id     → tt_tasks.id           (родительская задача)
  └─ members_id    → auth_pers.author_id[]

tt_worklogs
  ├─ person_id     → auth_pers.author_id
  ├─ task_id       → tt_tasks.id
  └─ members_id    → auth_pers.author_id[]

tt_wiki
  ├─ project_id    → tt_projects.id
  └─ members_id    → auth_pers.author_id[]

tt_comments
  ├─ task_id       → tt_tasks.id
  └─ from_auth     → auth_pers.author_id

Производство (MD)

md_project
  ├─ client_id     → ag_clients.id
  ├─ contract_id   → ag_contracts.id
  └─ members_id    → auth_pers.author_id[]

md_production
  └─ project_id    → md_project.id

md_project_batch
  └─ project_id    → md_project.id

md_project_product
  └─ project_id    → md_project.id

Склад (WH)

wh_movements
  ├─ store_id      → wh_stores.id
  ├─ item_id       → wh_items.id
  └─ members_id    → auth_pers.author_id[]

wh_items
  ├─ category_id   → wh_categories.id
  └─ members_id    → auth_pers.author_id[]

Выездные работы (VRN)

vrn_projects
  ├─ type_work_id  → vrn_type_work.id
  └─ members_id    → auth_pers.author_id[]

CRM

crm_orders
  ├─ contact_id    → crm_contacts.id
  └─ members_id    → auth_pers.author_id[]

crm_basket
  ├─ order_id      → crm_orders.id
  └─ item_id       → crm_items.id

Дашборды

dashboard_widgets
  ├─ board_id      → dashboards.id
  │    WHERE: (from_auth = SESSION_ID OR from_auth = 0) AND (hidden IS NULL OR hidden < 1)
  └─ from_auth     → auth_pers.author_id

Системные

installed_apps
  └─ app_id        → marketplace.id

apps_storage
  └─ app_id        → installed_apps.id

custom_dbfields
  ├─ scheme        → custom_dbtables.dbname (каталог, к которому привязано поле)
  └─ from_auth     → auth_pers.author_id

custom_dbview
  ├─ catalog1      → (любой каталог)
  ├─ catalog2      → (любой каталог)
  ├─ catalog1_field → (поле catalog1)
  └─ catalog2_field → (поле catalog2)

Общий паттерн members_id

Почти все бизнес-каталоги имеют поле members_id (multiselect_from_table → auth_pers). Это участники/наблюдатели записи. WHERE ограничение: from_group = SESSION_GROUP AND hidden < 1.

Использование связей в миниапах

// API возвращает связанные значения если load_values=1
const resp = await App.fetch('/api/db/ag_cashflows?limit=10&load_values=1');
// resp.data[0].client_id = "5"
// resp.data[0].client_id_value = "ООО Ромашка"

// Или загрузить схему для получения вариантов select
const schema = await App.fetch('/db/ag_cashflows/sheme.json');
// schema.data.client_id.arr = {5: "ООО Ромашка", 12: "ИП Иванов"}

Каталоги: /modules/db/ в panel.korfix.ru

Home