Описание API модуля вьюверов 2.0
C чего начать
- Создать инди метафайл, в котором необходимо прописать URI требуемого вьювера и конфигурацию (см. раздел "Метафайл")
- Создать (при необходимости) js-модули (см. примеры) с реализацией кастомных колонок или хэдеров и положить их в каталог extensions/modules или extensions/libs
Список доступных пространств имен:
- viewers2 - глобально доступные утилитарные методы и данные
- data - доступные посредством обращения к одноименному объекту данные документа
- headers - применяемые для расчета хэдеров типы, переменные и методы
- defaultHeaders - список встроенных хэдеров
- rows - применяемые для расчета колонок типы, переменные и методы
- defaultColumns - список встроенных колонок
Метафайл
В поле конфигурации метафайла ("config") для настройки вьюверов доступны следующие поля:
// Может быть массивом объектов, например, для документа Заказ+Мерч
"documentType": {
"name": "order", // "merch", "movement", "order", "request", "return", "sale"
"skus": "D" // "D", "CO", "COD"
},
// Опциональные параметры подключаемых файлов с кастомными атрибутами/реквизитами и колонками (тоже может быть массивом).
// Поиск файлов ведется в подкаталоге modules или libs
"customHeadersFile": "customheaders.js",
"customColumnsFile": "customcolumns.js",
// Опциональный параметр, содержащий заглушку, подставляемую вместу пустого значения
"customEmptyValue": "<ПУСТО>",
// Список необходимых хэдеров; встроенные (весь список ниже) или кастомные
// Если документов несколько, то массив массивов
"requiredHeaders": [
"agreement", // Договор
"baseDocument", // Документ-основание
"buyer", // Владелец
"comment", // Комментарий к документу
"counteragent", // Контрагент
"deliveryDate", // Дата доставки
"distributor", // Дистрибьютор
"exchangeState", // Стадия обмена
"isRetail", // Розница
"overdue", // Просрочка
"outletAddress", // Адрес торговой точки
"outletName", // Название торговой точки
"payType", // Тип оплаты
"priceType", // Тип цены
"provider", // Поставщик
"receiver", // Получатель
"relatedDocs", // Связанные документы
"responsible", // Ответственный
"store", // Склад
"storeReceiver", // Склад-получатель
"storeSender" // Склад-отправитель
],
// Список необходимых колонок; встроенные (весь список ниже) или кастомные
// Если документов несколько, то массив массивов
"requiredColumns": [
"amount", // Сумма
"baseDocument", // Документ-основание
"discount", // Скидка
"discountPromo", // Бонус-скидка
"facing", // Фейсинг
"price", // Цена
"quantity", // Количество / Остаток в торговой точке
"salePrice", // Цена отгрузки
"saleQuantity", // Отгруженное количество
"skuName", // Наименование товара
"VAT", // НДС
"weight" // Вес
]
Особенности
- Чтобы заменить стандартную хэдер или колонку просто создайте кастомную с таким же именем
- Столбцы или хэдеры выводятся в порядке, указанном в метафайле
- Возвращать явно emptyValue не требуется, если из функции получения значения вернется приводимое к false значение, emptyValue заменит его автоматически
- check вызывается для каждой колонки один раз для первой строки, в дальнейшем, если check вернул false, value данной колонки вычисляться не будет
Примеры
Структура хэдера
function doCheck() {
return !+false%1;
}
headerName: {
// Обязательно:
name: function (index, data, utils) { // Передаются индекс текущего хэдера, данные документа и функции-утилиты
return "Header name";
},
value: function (index, data, utils) { // Передаются индекс текущего хэдера, данные документа и функции-утилиты
return "значение";
},
// Опционально:
check: doCheck, // если false - не отобразится, в функцию передается индекс текущего хэдера, данные документа и функции-утилиты
type: "header" // "header", "attribute"
}
Структура колонки
function doCheck() {
return +(!!+"0"==0);
}
columnName: {
// Обязательно:
name: function (row, index, data) { // Передаются текущая строка, ее индекс и данные документа.
return "Column name";
},
// Методы получения сырого значения (используется для подсчета подытогов) и конвертированного, для вывода.
// В методы передаются текущая строка, ее индекс и данные документа.
rawValue: function (row, index, data) {
return "сырое_значение";
},
value: function (row, index, data) {
return "<h1>" + this.rawValue(row, index, data) + "</h1>";
},
// Опционально:
check: doCheck, // если false - не отобразится, передаются текущая строка, ее индекс и данные документа
total: { // Методы для подсчета и форматирования итогов
count: function (total, next) {
return prev + next;
},
format: function (total) {
return prev + next;
}
}
}
Содержимого файла (модуля) с кастомными хэдерами
module.exports = {
customHeaders: {
customHeader: {
name: function () {
return "ID документа"
},
value: api.context.docId,
check: function () {
return api.context.docId != "0";
}
},
anotherCustomHeader: {
name: function () {
return "Текущая дата"
},
value: function getNewDate() {
return new Date();
},
type: "attribute"
}
}
}
Содержимого файла (модуля) с кастомными колонками
module.exports = {
customColumns: {
customCoulmn: {
name: function() {
return "Номер строки"
},
rawValue: function(row, index) {
return index;
},
value: function(row, index) {
return "№" + index;
},
check: function (row, index, data) {
return data.rows.length != 1;
},
total: {
count: function (total, next) {
return total + next;
},
format: function (total) {
return total + " строк";
}
}
}
}
}
Структура строк документа
"documentRows": [
{
"groupName": "Актуальный » Чёрный чай » Бренд 5",
"appendix": "(1 поз)",
"rows": [
{
"main": [
"R Royal Earl Grey 100п",
"<span class='w-s'>5 шт <img class='matched-sku-row rotate' style='display:none;'src='qrc:/themes/material/icons/menu_top.svg'></span>",
" — ",
"201,24",
"1 006,20 Р",
" — "
],
"additional": [
[
"R Royal Earl Grey 100п",
"<span class='w-s'>5 шт </span>",
"5 шт",
"201,24",
" — ",
" — "
],
[
"R Royal Earl Grey 10x10п",
"<span class='w-s'>5 шт </span>",
"5 шт",
"201,24",
" — ",
" — "
]
]
}
],
"totals": {
"raw": [
1,
null,
null,
null,
1006.2,
0
],
"formatted": [
"1 поз",
null,
null,
null,
"1 006,20 Р",
"0,000"
]
}
}
]