Create your own awesome maps

Even on the go

with our free apps for iPhone, iPad and Android

Get Started

Already have an account?
Log In

Создание печатной формы МойСклад by Mind Map: Создание печатной формы
МойСклад
5.0 stars - 7 reviews range from 0 to 5

Создание печатной формы МойСклад

Отчеты

Циклы

${rows}

${formatter.loadOperations(rows)}, Список сущностей отчета (напр. CustomerOrder)

Итоги

$[SUM(G14)@0]

Перемещение

Выражения

Решения

Вывод позиций документов, Заказ покупателя, <jx:forEach items="${row.shipments}" var="shipment", Перемещение

Возможные ошибки

Формула в одну строку

Вспомогательные методы formatter'а

formatter - глобальный объект доступный во всех печатных формах. Содержит набор полезных вспомогательных методов.

countPlaces

Всего мест: ${formatter.printIf(formatter.countPlaces(o) > 0, formatter.printNumber(formatter.countPlaces(o)))}

currentUser

Доступ к данным текущего пользователя формирующего отчет ${formatter.currentUser.secondName + " " + formatter.currentUser.firstName + " (" + formatter.currentUser.uid + " )"}

uid

firstName

secondName

shortFIO

findAttribute

Вставка в печатную форму значений пользовательских полей - ${formatter.findAttribute(o.sourceAgentRequisite.agent, "Регион").valueString}

Наименование - Тип поля, Строка - valueString, Текст/Ссылка - valueText, Дата - timeValue, Флажок - booleanValue, Целое число - longValue, Дробное число - doubleValue, Селекторы (справочники), пользовательский - entityValue.name, сотрудники - employeeValue.name, контрагенты - agentValue.name, серии - consignmentValue.name, тоары - goodValue.name, склады - placeValue.name, проекты - projectValue.name, договоры - contractValue.name

getGoods

formatter.getGoods(o) - возвращает список товаров в документе formatter.getGoods(o).size() - кол-во товаров в документе

getServices

formatter.getServices(o) - возвращает список услуг в из документа

getCurrency

Всего отпущено на сумму ${formatter.printAmount(formatter.getCurrency(o), formatter.goodsAmount(o))}

goodsAmount

Всего отпущено на сумму ${formatter.printAmount(formatter.getCurrency(o), formatter.goodsAmount(o))}

generateList

Используется для создания печатной формы этикеток:

localize

Без комментариев ${formatter.localize("template." + row.type)} , где row.type тип документа

round

Округление значения (отбрасывает дробную часть) формула ${formatter.round(105/10)} выведет значение 10

printIf

${formatter.printIf(row.applicable, "Да")}

printIfElse

formatter.printIfElse(empty([...]), [true], [false]) - условный вывод

formatter.printIfElse(empty([...]), [true], [false])

printAgentName

Полное наименование контрагента по его идентификатору. ${formatter.printAgentName(id)}

printAmount

Всего отпущено на сумму ${formatter.printAmount(formatter.getCurrency(o), formatter.goodsAmount(o))}

printShortAmount(price)

Форматирует цену товара.

formatter.printShortAmount(goods[0].salePrices.findPrice(priceTypeId).priceValue)

printTags

Выводит список тегов контрагента ${formatter.printTags(row)}

splitByLines (text, maxLines, lineLength)

Разбивает строку text на несколько срок по lineLength символов. Выводятся только первые maxLines срок. Используется для вписывания длинного текста в ячейки Excel

${formatter.splitByLines(goods[1].name, 6, 5)}

splitGoodList (positions, N)

Используется для печати ценников из карточки товара. Разбивает список товаров positions на подгруппы по N элементов. Полезно для выведения данных в несколько колонок.

<jx:forEach items="${formatter.splitGoodList(positions, 3)}" var="goods">

imageAttribute

Добавление изображения в печатную форму из пользовательского поля типа "Файл" ${formatter.imageAttribute(formatter.loadAgent(o.sourceAgentRequisite.agent.id), "название поля", true)}

печать организации

Подгрузка сущности

Методы загружающие объект сущности справочника МойСклад по идентификатору. Например, позволяет загрузить объект контрагента, зная лишь идентификатор id контрагента.

loadAgent

loadGood

loadOperations

Время и дата

createDate

getExcelDate, Дата в отдельной ячейке

currentMoment

Форматирование данных

Дата

${formatter.format("%1$td.%1$tm.%1$tY %1tR", o.moment)}

Примеры

Документация, Java, Android

[поле_формата_дата].getTime()

Деньги

Примеры, на сумму ${formatter.format("%.2f", o.sum.sum / 100)} руб, 3 руб. 00 коп., ${formatter.format("%1$4.0f руб. %2$02.0f коп.", [сумма] / 100, [сумма] % 100)}

***

Объектная модель печатных форм (не закончено!)

Общие моменты Не законченная ветка карты (много неточностей)

не разобрано

position, tail, shipped

operation, project

Отчеты, Глобальные объекты со значениями фильтра отчета

Характеристики товара

Good, ${goods[0].salePrices.findPrice(priceTypeId).currencyRef.name}

Отчеты

BaseLegendTO, {name, description, externalCode, id}, Документ, sourceAgentRef, targetAgentRef, stateRef, sumTO, Заказ покупателя [CustomerOrder], demands[], invoicedSum, payedSum, shippedSum, reservedSum, Отгрузка [Demand], shipments[ ], good, consignment, good, code, basePrice, sum, discount, price, sum, targetAgentRequisite.agent.code, invoiceOut, Agent, contactPersons, .getCompanyType(), companyType, name

Документы

Формулы

Теги

jx:forEach, groupBy, Aggregate functions, ${Function_Name(field):collection}, Сложности, select, Пример фильтрации по строке, varStatus

jx:outline

jx:if

Запись формул Excel

Формирование формул Excel на стороне сервера Для вставки в печатную форму формулы Excel используются квадратные скобки $[формула] Написание формулы соответствует англоязычному аналогу формул Excel. Например: Excel - СУММ(A1) Печатная форма - $[SUM(A1)] Excel - СУММ(A1;B2) Печатная форма - $[SUM(A1,B2)] Excel - СУММ(A3:D10) Печатная форма - $[SUM(A3:D10)]

Соответствие англоязычных и русскоязычных формул в Excel, ВПР - VLOOKUP, Excel файл с соответствием формул RU-ENG

Ошибки, Формула не проходит

Полезные формулы

Последнее событие

Округление вверх

Отбрасывание копеек

Вставка гиперссылки, пример

Работа со строками, Склеивание строк - concat, Выделение части строки - substring

Функции

bool empty( ... )

.size( )

Свойства

[entity].type

Разъяснить

Необходимо разобраться в формулах

Акт сверки D11

Вопросы

Если нужно дополнить схему или дать более подробные пояснения - обращайтесь, постараюсь помочь.

Официальная документация

Skype: w.makeev

w.makeev@gmail.com

Полезные печатные формы

Готовые печатные формы для разных целей

Официальная документация

Подключение дополнительных шаблонов

Штрих-коды / ценники / этикетки

Генерация штрих-кода (на стороне сервера)

barcode4j.generateCode, Примеры формирования штрих-кода, шаблон, Подбор качества штрих-кода (dpi), Описание модуля на сайте разработчика

Шаблоны для печати этикеток, Описание (справка МойСклад), Пример этикетки 46x25, Макет шаблона для печати этикеток из отчета "Остатки"

Генерация штрих-кода (на стороне Excel)

Штрих-коды можно генерировать непосредственно в Excel Есть три варианта:   Использовать внешнюю компоненту (к примеру http://strokescribe.com/). Недостатки: Компоненту необходимо устанавливать на каждый компьютер. Требует настройку разрешений в Excel. Сложно настроить генерацию большого кол-ва штрих-кодов. Использовать макрос и специальный штрифт Недостатки: Необходимость использовать макросы, требует настройку разрешений в Excel, чтобы форма могла сработать. Необходимо устанавливать специальный штрифт. Использовать специальный штрифт и формулу Excel Недостатки: Необходимо устанавливать специальный штрифт. Формулы для генерации штрих-кода не самые простые. В ветке представлено описание третьего варианта, как, с моей точки зрения, наименее проблемного.  

шрифт штрих-кода EAN13

пример использования

Ограничения Excel

В Excel максимальное кол-во разрывов страниц - 1026. Поэтому, при печати большого кол-ва наклеек/этикеток (больше 1026), где используются разрывы страниц, итоговая печатная форма в Excel корректно открываться не будет.

Работа с ценами

Доступ к типам цен из документа, ${position.good.salePrices.priceList[1].currency.name}, ${position.good.salePrices.first().priceType.name}, ${position.good.salePrices.findPrice("Цена продажи!").value}

Формула из карточки товара (ценники), ${formatter.printShortAmount(posrow[0].salePrices.findPrice(priceTypeId).priceValue)}