Документація/Формати даних

Адміністратору

Довідники та маршрути

Схеми товарів, клієнтів, індивідуальних цін і маршрутів та зв'язки між ними.

Довідники передають на пристрій товари, клієнтів і пов'язані з ними дані. Для кожної таблиці облікова система готує окремий XML-файл у outbox. Загальний формат описано на сторінці XML-таблиці.

Спільні поля довідників

ref_products і ref_customers мають такі обов'язкові поля:

ПолеТипПризначення
codeTEXT KEYСталий код товару, клієнта або групи. Унікальний у межах довідника.
nameTEXTНазва на екрані.
parentTEXT KEYКод батьківської групи; порожнє значення для верхнього рівня.
groupINTEGER0 — елемент, ненульове значення — група. У прикладах для груп використовується 1.

Код у parent має посилатися на групу того самого довідника. Не використовуйте 0 замість порожнього батьківського коду: це посилання на групу з кодом 0.

Товари — ref_products

До спільних полів потрібно додати packaging і хоча б одне поле ціни з префіксом price_.

ПолеТипПризначення
packagingREALКількість базових одиниць у фасовці. Для поштучного товару — 1.
price_…REALЦіна категорії, код якої стоїть після price_: наприклад, price_Retail.
restREALЗалишок товару. Додайте, якщо він має відображатися або використовуватися у фільтрі залишків.
measure_unitTEXTОдиниця виміру. Необов'язкове поле.
weightREALВага базової одиниці товару для розрахунку ваги замовлення. Необов'язкове поле.
colorINTEGERКолір тексту запису. Необов'язкове поле.

У прикладі є група G-001 та товар P-001 усередині неї:

<?xml version="1.0" encoding="utf-8"?>
<table name="ref_products">
  <schema>
    <field name="code" type="TEXT KEY"/>
    <field name="name" type="TEXT"/>
    <field name="parent" type="TEXT KEY"/>
    <field name="group" type="INTEGER"/>
    <field name="packaging" type="REAL"/>
    <field name="price_Retail" type="REAL"/>
    <field name="rest" type="REAL"/>
    <field name="measure_unit" type="TEXT"/>
  </schema>
  <data>
    <record>
      <f>G-001</f>
      <f>Напої</f>
      <f/>
      <f>1</f>
      <f>1</f>
      <f>0</f>
      <f>0</f>
      <f/>
    </record>
    <record>
      <f>P-001</f>
      <f>Вода 1 л</f>
      <f>G-001</f>
      <f>0</f>
      <f>6</f>
      <f>42.5</f>
      <f>120</f>
      <f>шт.</f>
    </record>
  </data>
</table>

У списку категорій цін для цього прикладу використовуйте value="Retail". Зберігайте однакові коди категорій у vl_cat_prices, полях price_… і налаштуваннях клієнтів.

Клієнти — ref_customers

Окрім спільних полів, можна передати:

ПолеТипПризначення
cat_priceTEXTДоступні клієнту коди категорій цін через кому: Retail,Wholesale.
debtREALЗагальна заборгованість клієнта.
expired_debtREALПрострочена заборгованість. Використовується, зокрема, для заборони нових замовлень.
photo_requiredINTEGER1 — для клієнта потрібне фото, 0 — ні. Перевірка вмикається в налаштуваннях застосунку.
colorINTEGERКолір тексту запису.
<?xml version="1.0" encoding="utf-8"?>
<table name="ref_customers">
  <schema>
    <field name="code" type="TEXT KEY"/>
    <field name="name" type="TEXT"/>
    <field name="parent" type="TEXT KEY"/>
    <field name="group" type="INTEGER"/>
    <field name="cat_price" type="TEXT"/>
    <field name="debt" type="REAL"/>
  </schema>
  <data>
    <record>
      <f>C-001</f>
      <f>ТОВ «Магазин»</f>
      <f/>
      <f>0</f>
      <f>Retail</f>
      <f>850</f>
    </record>
  </data>
</table>

Адресу, телефон та інші дані можна додавати окремими полями. Їхні назви й показ у таблиці можна налаштувати на пристрої в налаштуваннях колонок або через tables_columns.xml.

Індивідуальні ціни — customer_product_data

Таблиця задає індивідуальні ціни клієнтів на товари. Кожен запис пов'язує одного клієнта й один товар. Пара customer_code та product_code має бути унікальною.

ПолеТипПризначення
customer_codeTEXT KEYКод із ref_customers.code. Обов'язкове поле.
product_codeTEXT KEYКод із ref_products.code. Обов'язкове поле.
priceREALІндивідуальна ціна. Ненульове значення має пріоритет над ціною категорії.
price_multiplierREALМножник ціни категорії, якщо немає ненульової індивідуальної ціни. Наприклад, 0.95 для зменшення ціни на 5%.
order_countREALДовідкова кількість попереднього замовлення.
preorder_countREALДодаткове поле довідкової кількості, яке можна показати під час підбору.

Необов'язкові поля додавайте лише тоді, коли вони потрібні. Якщо індивідуальна ціна порожня або дорівнює 0, застосунок використовує ненульовий price_multiplier, а за його відсутності — ціну категорії. Значення 0 у цих полях не задає безкоштовний товар.

<?xml version="1.0" encoding="utf-8"?>
<table name="customer_product_data">
  <schema>
    <field name="customer_code" type="TEXT KEY"/>
    <field name="product_code" type="TEXT KEY"/>
    <field name="price" type="REAL"/>
    <field name="order_count" type="REAL"/>
  </schema>
  <data>
    <record>
      <f>C-001</f>
      <f>P-001</f>
      <f>40</f>
      <f>12</f>
    </record>
  </data>
</table>

Маршрути — routes

Один запис задає відвідування клієнта. Таблиця повинна містити customer_code та хоча б одне поле розкладу: date або week_day.

ПолеТипПризначення
customer_codeTEXT KEYКод із ref_customers.code.
dateTEXTКонкретна дата у форматі YYYY-MM-DD, наприклад 2026-11-05.
week_dayINTEGERДень тижня: 1 — понеділок, …, 7 — неділя.
trade_point_valueTEXTКод торгової точки з vl_trade_points.value. Необов'язкове поле.

Якщо у схемі є date, застосунок відбирає маршрут за ним; week_day у такому разі не використовується. Для щотижневого розкладу не додавайте поле date.

<?xml version="1.0" encoding="utf-8"?>
<table name="routes">
  <schema>
    <field name="customer_code" type="TEXT KEY"/>
    <field name="week_day" type="INTEGER"/>
    <field name="trade_point_value" type="TEXT"/>
  </schema>
  <data>
    <record>
      <f>C-001</f>
      <f>1</f>
      <f>TP-001</f>
    </record>
    <record>
      <f>C-001</f>
      <f>4</f>
      <f>TP-002</f>
    </record>
  </data>
</table>

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

Перевірка зв'язків

Після обміну перевірте журнал на пристрої, а потім дані:

  • групи відкриваються, а товари й клієнти розміщені на правильних рівнях;
  • категорія ціни клієнта відповідає наявному полю price_…;
  • індивідуальна ціна застосовується лише до потрібної пари клієнта й товару;
  • маршрут показує клієнтів на вибрану дату та їхні торгові точки.

Усі ці таблиці вже перелічені у профілі Завантажити дані стандартного exchange.xml.