Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как изменить отбор программно          
Vofka Подменю пользователя
сообщение 23.05.11, 18:57
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

Эта тема тоже достаточна распространена. Нюанс программного изменения отбора заключается в том, что коллекция:
КомпоновщикНастроек.Настройки.Отбор.Элементы


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

Приведу пример универсальной функции для изменения отбор компоновки данных:

//Ищет отбор в компоновщике настроек по параметрам, заданным через
//"СоответствиеПоискаОтбора", и заменяет
//на отбор с параметрами, указанными в "СоответствиеНовогоОтбора"
Процедура ИзменитьОтбор(ЭлементСтруктуры,
СоответствиеПоискаОтбора = Неопределено, СоответствиеНовогоОтбора) Экспорт

Если ТипЗнч(ЭлементСтруктуры) = Тип("КомпоновщикНастроекКомпоновкиДанных")
Тогда
    Отбор = ЭлементСтруктуры.Настройки.Отбор;
Иначе
    Отбор = ЭлементСтруктуры;
КонецЕсли;

Если ТипЗнч(СоответствиеНовогоОтбора["ЛевоеЗначение"]) = Тип("Строка")
Тогда
    нПоле = Новый ПолеКомпоновкиДанных(СоответствиеНовогоОтбора.ЛевоеЗначение);
Иначе
    нПоле = СоответствиеНовогоОтбора["ЛевоеЗначение"];
КонецЕсли;

Если СоответствиеНовогоОтбора.Получить("ВидСравнения") = Неопределено Тогда
    нВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Иначе
    нВидСравнения = СоответствиеНовогоОтбора["ВидСравнения"];
КонецЕсли;

Если СоответствиеНовогоОтбора.Получить("Использование") = Неопределено Тогда
    нИспользование = Истина;
Иначе
    нИспользование = СоответствиеНовогоОтбора["Использование"];
КонецЕсли;

нЗначение = СоответствиеНовогоОтбора["Значение"];

ТолькоПоЛевомуЗначению = Ложь;
Если СоответствиеПоискаОтбора = Неопределено Тогда
    ТолькоПоЛевомуЗначению = Истина;
КонецЕсли;

сЛевоеЗначение  =  СоответствиеПоискаОтбора.Получить("ЛевоеЗначение");
Если сЛевоеЗначение = Неопределено Тогда
    сЛевоеЗначение = нПоле;
КонецЕсли;

сВидСравнения  =  СоответствиеПоискаОтбора.Получить("ВидСравнения");
Если ВидСравнения = Неопределено Тогда
    сВидСравнения = ВидСравнения;
КонецЕсли;

сИспользование =  СоответствиеПоискаОтбора.Получить("Использование");
Если сИспользование = Неопределено Тогда
    сИспользование = нИспользование;
КонецЕсли;

Для каждого ЭлементОтбора Из Отбор.Элементы Цикл
    Если ТолькоПоЛевомуЗначению Тогда
        НайденныйОтбор = ЭлементОтбора;
        Прервать;
    Иначе
        Если (ЭлементОтбора.ЛевоеЗначение = сЛевоеЗначение)
            И (ЭлементОтбора.ВидСравнения = сВидСравнения)
            И (ЭлементОтбора.Использование = сИспользование) Тогда
            НайденныйОтбор = ЭлементОтбора;
            Прервать;
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

Если НайденныйОтбор <> Неопределено Тогда
    НайденныйОтбор.ЛевоеЗначение  = нПоле;
    НайденныйОтбор.Использование  = нИспользование;
    НайденныйОтбор.ВидСравнения   = нВидСравнения;
    НайденныйОтбор.ПравоеЗначение = нЗначение;
КонецЕсли;

КонецПроцедуры



Пример вызова процедуры:

    СоответствиеПоискаОтбора = Новый Соответствие;
    СоответствиеПоискаОтбора.Вставить("ЛевоеЗначение",Новый ПолеКомпоновкиДанных("Наименование"));
    СоответствиеПоискаОтбора.Вставить("ВидСравнения",ВидСравненияКомпоновкиДанных.Содержит);
    СоответствиеПоискаОтбора.Вставить("Использование",Истина);

    СоответствиеНовогоОтбора = Новый Соответствие;
    СоответствиеНовогоОтбора.Вставить("ЛевоеЗначение",Новый ПолеКомпоновкиДанных("Наименование"));
    СоответствиеНовогоОтбора.Вставить("ВидСравнения",ВидСравненияКомпоновкиДанных.Содержит);
    СоответствиеНовогоОтбора.Вставить("Использование",Истина);
    СоответствиеНовогоОтбора.Вставить("Значение","бла-бла-бла");

    ИзменитьОтбор(КомпоновщикНастроек,СоответствиеПоискаОтбора,СоответствиеНовогоОтбора);


[необходимо зарегистрироваться для просмотра ссылки]

Спасибо сказали: I_Stranger,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 16.04.24, 16:34
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!