Шаблоны текстов и математических выражений в Mobile SMARTS


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

Вычислимым выражением является всё, помещенное в фигурные скобки. Синтаксис выражения следующий:

{путь к значению:формат}

Шаблон текста для отображения в окне может содержать любое количество таких выражений вперемешку с обычным текстом. Например, «Выбрано: {ScanedBarcode} — {SelectedProduct}». Такая строка позволит выводить на экран сообщения вида «Выбрано: 2345069545 – картофель мороженый (пачка)», где ScanedBarcode и SelectedProduct заменяются соответствующими значениями, хранящимися в сессии.

Всё до первого двоеточия является указанием на то, что выводить, всё после – форматом вывода значения в строку. Формат зависит от типа значения – строка это, число, дата или что-то другое. Для правильного использования формата нужно знать, каков будет тип значения. Двоеточия может и не быть, т.е. часть с форматом необязательная – если формат не указан, то используется формат по умолчанию для соответствующего типа значений.

И синтаксис пути к значению, и синтаксис формата, взяты из языка C# и спецификаций библиотеки Microsoft .NET. В .NET и, соответственно, в Mobile SMARTS всё является объектами – и строки, и числа, и более сложные вещи, такие как номенклатура, штрихкоды или складские документы. Источником данных для выражений является сессия исполнения документа, которая представляет собой просто набор переменных. Системные переменные и все переменные, заведенные разработчиком операции, складываются в одну кучу – сессию. В сессии лежит и сам обрабатываемый документ.

Поля в объекте, такие как номер документа или набор его строк, в .NET называются свойствами объекта. У каждого такого свойства есть своё имя. Зная имя свойства можно получить значение этого свойства у конкретного объекта. Это значение также будет являться объектом, у которого есть свои свойства и т.д., при этом одно имя свойства отделяется от другого точкой. Кроме свойств у объектов есть методы – это функции, значение которых вычисляет сам объект. Синтаксис вызова метода – имя метода с круглыми скобками «()», в которых указываются передаваемые параметры. Таким образом можно строить цепочки из обращения к свойствам и методам, чтобы получить из объекта нужные данные.

Соответственно, самый простой пример пути к значению – строка из имен свойств и методов со скобками, разделенных точками. Кроме того выражения могут содержать арифметические операции, т.е. не просто значение свойства или вызов метода, но и сумма значений двух свойств или произведение результата вызова метода на число + sin(10).

Следует всегда иметь в виду, что результатом обработки шаблона является текст. Поэтому, если a = 7 и b = 1, например, то не стоит путать следующие шаблоны:

  • «{a} – {b}» даст в результате «7 — 1», и только шаблон

  • «{a – b}» даст «6».

Другой из примеров пути к значению – указание специального объекта «global::», после которого идет указание на вызов статического метода или взятие значения статического свойства (.NET), а далее можно указать путь от полученного результата.

В том случае, если система не может вычислить значения или оно равно (null), ничего выведено не будет.

При задании шаблона можно указывать шаблон вывода значения. Например, «{SelectedProduct.ExpireDate: Срок годности – (0)}» отобразит что-то вроде «Срок годности – 01 мая 2009». А «{SelectedProduct.ExpireDate: Срок годности – (0:MM$$yyyy)}» отобразит что-то вроде «Срок годности – 05$$2009».

Если срок годности не задан (т.е. если поле не существует или равно null), то не будет выведено ничего: ни даты, ни текста «Срок годности – ». Это очень удобно для условного вывода значений. Можно указать целую страницу шаблонов для вывода различных возможных свойств номенклатуры, например, а на экране получить строки только для тех свойств, которые реально присутствуют. Не существующие или не проставленные свойства, а также их «окаймление» в виде разных подписей и пояснений, просто не будут отображены.

Вот несколько примеров с пояснениями:

Текст в шаблоне Пример результата и описание
 Накладная №{Document.Id}  Накладная №1742
Выражение {Document.Id} было заменено на значение
свойства с именем {Id} текущего документа, лежащего в
сессии под именем «Document».
 Длина номера: {Document.Id.Length} цифр  Длина номера: 4 цифр
Выражение {Document.Id.Length} было заменено на
значение свойства «Length» объекта (текстовой строки в
данном случае), полученного как значение свойства с
именем «Id» у документа.
 Итого строк: {Document.CurrentItems.Count}   Итого строк: 16
Выражение {Document.CurrentItems.Count} было
заменено на значение свойства «Count» табличной части
фактических строк документа.
 {Document.CurrentItems.Count:Итого строк: (0)}  Итого строк: 16
То же самое. Первое двоеточие – отделяет путь от
формата. Второе – просто двоеточие. «(0)» в формате
было заменено на результат выражения.
 Результат: {Document.abcdefgh()} строк  Результат: строк
У документа не существует метода abcdefgh, поэтому
результатом выражения будет пустая строка.
 {Document.abcdefgh():Результат: (0) строк} У документа не существует метода abcdefgh, поэтому
результатом всего выражения в скобках будет пустая
строка.
 Дата: {global::System.DateTime.Today}  Дата: 20.04.2009
У класса System.DateTime (дата и время) есть
статическое свойство Today, которое всегда возвращает
текущую дату (сегодняшнюю дату, которая сегодня).
 {global::System.DateTime.Today.Day} !  4 !
У класса System.DateTime (дата и время) есть
статическое свойство Today, которое всегда возвращает
текущую дату. У текущей даты взято значение свойства
Day (номер дня), а потом ко всему этому прибавились
пробел и восклицательный знак.

 

Если при разборе строки из имен свойств и методов будет обнаружено, что таких свойств или методов нет или нет объектов, у которых их следует брать, в качестве результата выражения ничего не будет отображено.

Форматы для вывода чисел

В таблице приведены только наиболее практичные форматы из спецификации .NET, плюс специальные форматы, существующие только в Mobile SMARTS. Некоторые форматы используют числовые параметры – в тех местах, где можно вставить число, в таблице ниже используется *.

Формат Описание Примеры
N* или n* Дробное число с ограничением на число знаков
после запятой. Если ограничение не указано, то
используется 2 знака после запятой.
{1000:N3} = 1000,000
{12.519:N} = {12.519:N2} = 12,52
{7:N} = {7:N2} = 7,00
C или c Сумма в рублях {100:c} = 100,00р.
{1200.12:c} = 1 200,12р.
Набор из
«0#.,»
Фиксированный формат вывода числа.
«0» – обязательная цифра,
«#» – необязательная цифра,
«.» – десятичная точка,
«,» – разделитель числовых разрядов.
Все остальные символы ничего не означают и
просто копируются в результат.
Можно задать до трех секций формата,
разделенных точкой с запятой. Первая секция –
для положительных чисел, вторая – для
отрицательных, третья – для ноля.
{2.5:0.00} = 2,50
{2.5:0.0#} = 2,5
{2.527:0.0#} = 2,53
{2.49:0.0;<red>-0.0</red>;ноль} = 2,5
{-2.49:0.0;<red>-0.0</red>;ноль} = -2,5
{0:0.0;<red>-0.0</red>;ноль} = ноль
{17:0.#} = 17
{17.2:0.#} = 17,2
{17.2:000.00} = 017,20
{17.2:###.##} = 17,2
{10000:00,00.00} = 1 00 00,00
W или w Количество прописью. W – с большой буквы, w
– с маленькой
{2:W} = Два
{100.24:w} = сто
{1341:W} = Одна тысяча триста сорок один
Wf или wf Количество прописью женского рода.
W – с большой буквы, w – с маленькой
{2:W} = Две
{100.24:w} = сто
90
{1341:W} = Одна тысяча триста сорок одна
WRUR
или
wRUR
Сумма в рублях прописью. Если ноль копеек, то
копейки не выводятся. W – с большой буквы, w
– с маленькой
{2:WRUR} = Два рубля
{100.247:wRUR} = сто рублей 25 копеек
{1341:WRUR} = Одна тысяча триста сорок
один рубль
Wrur или
wrur
Сумма в рублях прописью с копейками. W – с
большой буквы, w – с маленькой
{2:Wrur} = Два рубля 00 копеек
{100.207:wrur} = сто рублей 21 копейка
{1341:Wrur} = Одна тысяча триста сорок
один рубль 00 копеек
WUSD,
wUSD,
Wusd или
wusd
То же самое, что и с рублями RUR, но для
долларов.
{2:WUSD} = Два доллара
{100.207:wUSD} = сто долларов 21 цент
{1341:Wusd} = Одна тысяча триста сорок
один доллар 00 центов
RURc Количество копеек (не округленно, а обрезано)  {100.207:RURc} = 20
USDc Количество центов (не округленно, а обрезано) {100.207:USDc} = 20

 

Форматы для вывода строк

В спецификации .NET у строк нет форматов вывода, но они есть в «Легком складе 3». Форматы используют числовые параметры – в тех местах, где можно вставить число, в таблице ниже используется *.

Формат Описание Примеры
T* Обрезает строку до * символов {«ABCD»:T3} = ABC
{«ABCD»:T8} = ABC
E* Обрезает строку до * символов и добавляет
троеточие (…)
{«ABCD»:E3} = ABC…
{«ABCD»:E8} = ABC

 

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

В .NET не существует отдельного типа «дата» и отдельного типа «время». Есть один общий тип «дата и время», поэтому везде, где упоминается дата, на самом деле имеется в виду дата и время, даже для даты документа. В таблице приведены наиболее практичные форматы из спецификации .NET.

Формат Описание Примеры
d Короткий формат даты {дата:d} = 20.04.2009
D Длинный формат даты {дата:D} = Понедельник, 20 Апреля 2009
ddd День недели {дата:ddd} = Понедельник
g Короткий формат даты + короткий времени {дата:g} = 20.04.2009 10:07
t Короткий формат времени {дата:t} = 10:07
T Полный формат времени (с секундами) {дата:T} = 10:07:12

Набор из

«mMhHys»

Конкретный формат вывода даты и времени,
составленный из следующих специальных
обозначений и любых других символов:«y» – последняя цифра года,

«yy» – последние две цифры года,

«yyy» или «yyyy» – все цифры года,

«M» – месяц прописью и день,

«MM» –две цифры месяца,

«MMM» – месяц прописью сокращенно,

«MMMM» – месяц прописью,

«dd» – две цифры дня,

«ddd» – день прописью сокращенно,

«dddd» – день прописью,

«m», «mm», «mmm» и т.д. – минуты,

«s», «ss», «sss» и т.д. – секунды,

«f», «ff», «fff» и т.д. – миллисекунды,

Используя эти обозначения можно составлять
любые нужные форматы отображения.

 

 

 

{дата:y абв} = 9 абв

{дата:(0:yy)} = 09,

{дата:yyyy} = 2009

{дата:M} = апрель 20

{дата:MM} = 04

{дата:MMM} = апр

{дата:MMMM} = Апрель

{дата:dd} = 20

{дата:ddd} = Пн

{дата:ddd} = Понедельник

{дата:m} = {дата:mm} = 07

{дата:s} = {дата:ss} = 12

{дата:f} = 9, {дата:ff} = 91, {дата:fff} = 912

{дата:MM dd} = 04 19

{дата:dd-MM-yy} = 19-04-09

 

Форматирование текста тегами псевдо-HTML

Тексты в окнах на терминале можно форматировать при помощи тегов псевдо-HTML. Вот примеры форматирования и того, как это будет выглядеть на экране:

Формат Результат
<Green>Зеленый текст</Green>  Зеленый текст
<Green>Зелено-<Red>красный</Red> текст</Green> текст  Зелено-красный текст текст
<Green><b>Жирный зеленый текст</b></Green>  Жирный зеленый текст
<b color=»Green»>Жирный зеленый текст</b>  Жирный зеленый текст
<Red>Красный <i>наклонный</i></Red>  Красный наклонный
<Red size=»16″>Большой красный</Red>

 Большой красный

<r color=»#0000FF»>Синий <i>наклонный</i> <r
size=»16″>большой</r></r>
 Синий наклонный большой
<i>наклонный <r>обычный</r> наклонный</i>  наклонный обычный наклонный
первая строка
вторая строка
 первая строка
вторая строка
первая строка <br/> вторая строка  первая строка
вторая строка
<b size=»16″>Заголовок</b> <hr/> подзаголовок

Заголовок

______________________
Подзаголовок