Показать сообщение отдельно
Старый 01.03.2010, 18:28   #17  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Деления? Например, у меня здесь: Пользовательский генератор строк-перечислений...- 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, только заточено уже под автономное использование.

Последний раз редактировалось Gustav; 01.03.2010 в 18:38.