Имя: Пароль:
1C
1С v8
программно установить отбор в отчете СКД
,
0 Новый1сник2
 
16.05.23
11:54
Добрый день!

подскажите как программно установить отбор, (параметры передаются, а отбор почему то нет)

&НаКлиенте
Процедура мПрограммноЗаказаноПоставщикуОтчет(Номенклатура)
    
    Перем ФормаОтчёта, КомпоновщикНастроек, Период, ПараметрыФормы;
    
    
    Ном = мСЗПоНоменклатуреПолучитьНаСервере(Номенклатура);
    
    
    ФормаОтчёта = ПолучитьФорму("Отчет.мОтчетЗаказыПоставщику.Форма");
    КомпоновщикНастроек = ФормаОтчёта.Отчет.КомпоновщикНастроек;
    
    мУстановитьПользовательскийПараметрСКД(КомпоновщикНастроек, "ДатаОстатков", КонецДня(ТекущаяДата()));
    мУстановитьПользовательскийПараметрСКД(КомпоновщикНастроек, "Организация", Объект.Организация);
    
    мУстановитьПользовательскийОтборСКД(КомпоновщикНастроек, "Номенклатура", Ном, ВидСравнения = Неопределено);
    
    ПараметрыФормы = Новый Структура();
    ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
    ПараметрыФормы.Вставить("КлючВарианта", "Основной");
    ПараметрыФормы.Вставить("ПользовательскиеНастройки", КомпоновщикНастроек.ПользовательскиеНастройки);
    
    ОткрытьФорму("Отчет.мОтчетЗаказыПоставщику.Форма", ПараметрыФормы, ЭтаФорма);
    
КонецПроцедуры //  КомандаОткрытьОтчётСОтбором
1 Новый1сник2
 
16.05.23
11:54
&НаКлиенте
Процедура мУстановитьПользовательскийОтборСКД(КомпоновщикНастроек, ИмяОтбора, Значение, ВидСравнения = Неопределено)
    
    Перем    ПолеКД, Элем, ЭлементОтбора, Настройки,
            ПользовательскиеНастройки, ПользовательскийОтбор;
    
    Настройки = КомпоновщикНастроек.Настройки;
    
    ПолеКД = Новый ПолеКомпоновкиДанных(ИмяОтбора);
    
    
    Для Каждого Элем Из Настройки.Отбор.Элементы Цикл
        
        Если Элем.ЛевоеЗначение = ПолеКД Тогда
            ЭлементОтбора = Элем;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    Если ЭлементОтбора = Неопределено Тогда
        Возврат;        
    КонецЕсли;        
    
    Если ЗначениеЗаполнено(ЭлементОтбора.ИдентификаторПользовательскойНастройки) Тогда
        
        ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
        ПользовательскийОтбор = ПользовательскиеНастройки.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);
        ПользовательскийОтбор.Использование = (Значение <> Неопределено);
        ПользовательскийОтбор.ВидСравнения = ?(ВидСравнения <> Неопределено, ВидСравнения, ВидСравненияКомпоновкиДанных.Равно);
        ПользовательскийОтбор.ПравоеЗначение  = Значение;
    КонецЕсли;

КонецПроцедуры //  УстановитьПользовательскийОтборСКД
2 Новый1сник2
 
16.05.23
11:55
в отладчике

ЗначениеЗаполнено(ЭлементОтбора.ИдентификаторПользовательскойНастройки) почему то Ложь
3 Новый1сник2
 
16.05.23
12:15
пробовал так, тоже не получается

НовыйЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    
     ПолеОтбора = Новый ПолеКомпоновкиДанных("Номенклатура");
    
     НовыйЭлементОтбора.ЛевоеЗначение  = ПолеОтбора;
     НовыйЭлементОтбора.Использование  = Истина;
     НовыйЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
     НовыйЭлементОтбора.ПравоеЗначение = Ном;
4 vicof
 
16.05.23
12:19
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
5 Новый1сник2
 
16.05.23
12:20
(4) а где это прописать?
6 vicof
 
16.05.23
12:21
Вместо этого Настройки = КомпоновщикНастроек.Настройки;
7 Новый1сник2
 
16.05.23
12:25
(6) пишет
по причине:
Метод контекста недоступен
8 toypaul
 
гуру
16.05.23
12:25
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора

а последнем параметре заполнить (чем-нибудь)  ИдентификаторПользовательскойНастройки
9 Новый1сник2
 
16.05.23
12:30
(8) где заполнить ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора ?
можно пример
10 toypaul
 
гуру
16.05.23
12:35
(9) поисково-мозговую деятельность прошу произвести самостоятельно. так лучше усваивается
11 vicof
 
16.05.23
12:44
(6) Потому что на сервере надо делать
12 Новый1сник2
 
16.05.23
12:47
(11) на сервере тоже не работает отбор
13 Новый1сник2
 
16.05.23
14:47
такой код тоже не работает


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

КонецПроцедуры
14 Новый1сник2
 
16.05.23
14:48
Ошибка
{Документ.СчетНаОплатуПокупателю.Форма.ФормаДокумента.Форма(6000)}: Значение не является значением объектного типа (Элементы)
    ЭлементОтбораПользовательский =  ПользовательскийОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
15 Garykom
 
гуру
16.05.23
14:51
16 areaho0ray
 
16.05.23
15:01
(13) Посмотри, что у тебя возвращается в ПользовательскийОтбор - скорее всего не отбор. Проверяй, что там за идентификатор у тебя.
17 Новый1сник2
 
16.05.23
15:07
(16) по разному уже попробовал, отбор ни как не устанавливается
18 areaho0ray
 
16.05.23
15:23
(17) Посмотри в отладчике, что там у тебя вообще есть.
19 Новый1сник2
 
16.05.23
15:29
(18) в отладчике есть доступные поля отбора, и параметры тоже есть,
20 Новый1сник2
 
16.05.23
15:30
Если ЗначениеЗаполнено(ЭлементОтбора.ИдентификаторПользовательскойНастройки) Тогда
        
        ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
         ПользовательскийОтбор = ПользовательскиеНастройки.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);
        ПользовательскийОтбор.Использование = Истина;
        ПользовательскийОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ПользовательскийОтбор.ПравоеЗначение  = Значение;
    КонецЕсли;
21 Новый1сник2
 
16.05.23
15:30
ЭлементОтбора.ИдентификаторПользовательскойНастройки =""  в отладчике
22 Новый1сник2
 
17.05.23
10:08
благодарю за подсказки, разобрался сам
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.