Практически все тексты в окнах, любой расчет значений и обработчик шаблонов этикеток используют специальный синтаксис вычислимых выражений для вставки данных.
Вычислимым выражением является всё, помещенное в фигурные скобки. Синтаксис выражения следующий:
{путь к значению:формат}
Шаблон текста для отображения в окне может содержать любое количество таких выражений вперемешку с обычным текстом. Например, «Выбрано: {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/> подзаголовок |
Заголовок______________________ |