Деления? Например, у меня здесь:
Пользовательский генератор строк-перечислений...- 2: Доп.вкладка для SysQueryForm
P.S. Еще вот такую "статику" у себя отыскал:
X++:
// Created on 01 Сен 2008 at 15:04:08 by KKU
static Set choppedQueryRanges( Set _conditions = new Set(Types::String),
str _separator = '||' )
{
// "Нашинкованные диапазоны критериев"
// на входе - множество условий (каждая строка существенно короче EDT Range)
// на выходе - множество диапазонов (каждый максимально впихнут в длину EDT Range)
// примеры элементов множества условий (_conditions):
// (CenterId=="09000") или (RequestTable.ReasonId=="ВЫБ_Ф")
Set setRanges = new Set(Types::String);
SetEnumerator enumerator;
str curr;
str currElem;
str currCrit = '';
str prevCrit = '';
int edtRangeSize =
new DictField( tableNum(TmpSysQuery),
fieldNum(TmpSysQuery, RangeValue) ).stringLen();
;
enumerator = _conditions.getEnumerator();
while (enumerator.moveNext())
{
curr = enumerator.current();
currElem = strLTrim( strRTrim (strFmt(curr)));
if (currElem)
{
currCrit = prevCrit + currElem + _separator;
if ( strLen(currCrit) > (edtRangeSize + strLen(_separator)) )
{
setRanges.add( subStr(prevCrit, 1, strLen(prevCrit)-strLen(_separator)) );
prevCrit = currElem + _separator;
}
else
{
prevCrit = currCrit;
}
}
}
if (prevCrit)
{
setRanges.add( subStr(prevCrit, 1, strLen(prevCrit)-strLen(_separator)) );
}
return setRanges;
}
Каждый элемент выходного Set - содержимое одной клеточки range. Этот метод в принципе то же самое, что в генераторе содержится в методе doProcessButton, только заточено уже под автономное использование.