helpf.pro
Регистрация
 0 
Распечатать

Как программно установить отбор в СКД

Код 1C v 8.х
 

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


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


   СоответствиеНовогоОтбора.Вставить("Значение",Кампейны);


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


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


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


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


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


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


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


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


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


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


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


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


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


ПолеОтбора = Новый ПолеКомпоновкиДанных(нПоле);


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


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

Разместил:   Версии: | 8.x |  Дата:   Прочитано: 3261
 0 
Распечатать
Возможно, вас также заинтересует
Google maps : вывод точек на карту и режим панорамы 2
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С...
Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 0
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: ... по причине: Ошибка компоновки данных по причине: Ошибка...
Автоматизация обмена данных используя обработку "Универсальный обмен данными в формате XML" 3
Автоматизация обмена между базами используя обработку " Универсальный обмен данными в формате XML" В основу данной публикации положены найденные мною материалы по cозданию обмена между двумя базами с использованием ...
Быстрый отбор в справочнике по первой букве 0
В статье описан способ быстрой организации отбора в списке справочника по первой букве наименования. Механизм легко дотачивается под собственные нужды. https://helpf.pro/uploads/img/_1-T4ZDj6uNPX.png // ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ ...
Вертикальная автофиксация для СКД 0
В СКД очень не хватает возможности автофиксации строк. Обусловлено это невозможностью однозначно определить их количество в общем случае. Однако в большинстве случаев это можно сделать Обращаю ваше внимание, что...
Посмотреть все результаты поиска похожих
Комментарии
nookie
20.05.2015 16:24Комментарий: 1
nookie

Нет возможности отредактировать пост, исправьте пожалуйста строку:СоответствиеНовогоОтбора.Вставить("Значение",Кампейны); на СоответствиеНовогоОтбора.Вставить("Значение",%Нужный реквизит%);

Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.