В классе Global метод con2Str
В стандарте, если в контейнере значения первых позиций будут пустыми строками, то метод их проигнорирует и не добавит после них разделитель. Из-за этого количество элементов в контейнере и в результирующей строке будет разным. Может быть в этом и была какая-то логика, если бы это работало со всеми пустыми элементами. Но вот "пустые" значения идущие после первого "не пустого" элемента контейнера уже будут обрамлены разделителем. Я считаю что это явно ошибка и в строке должны быть представлены все элементы контейнера и пустые и не пустые.
Причина ошибки и собственно исправление:
X++:
static str 1000 con2Str(container c, str 10 sep = ',')
{
int idx = 0;
int len = conlen(c);
str 100 tmp;
str 1000 retStr;
;
while (idx < len)
{
idx += 1;
// KSM fix empty string -->>
// if (retStr)
if (idx > 1)
// KSM fix empty string <<--
retStr += sep;
tmp = conpeek(c,idx);
retStr += tmp;
}
return retStr;
}
Здесь интересен ещё один момент. Как значения типа anytype преобразуется в строку? По каким правилам происходит такое преобразование?
Например дата:
X++:
static void TestAnytype2StrConvert(Args _args)
{
date t = today();
anyType a = t;
str 100 s = a;
;
info(s);
}