Имя: Пароль:
1C
1С v8
Установка параметров отбора в СКД при открытии
,
0 Кокос
 
09.11.16
21:16
Ставил приведенный код в присозданиинасервере и в приоткрытии. Параметры ставятся. отборы очищаются но новые отборы не применяются и не появляются в настройках. Может кто подскажет что сделал не так?
В отладке все работает без ошибок.

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

        ПараметрДатаКон = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода");
        ПараметрДатаКон.Использование = Ложь;

           Если Параметры.Свойство("ПоляДляОтбора") Тогда
        
            НастройкиДляОтбора = Отчет.КомпоновщикНастроек.Настройки;
            ОтборыПересчета = Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы;
            ОтборыПересчета.Очистить();    //очистка параметров - работает
            // дальше отборы не работают и не появляются на форме
            ТоварыДляОтбора = Параметры.ПоляДляОтбора;
            Для Каждого ТоварОтбора из ТоварыДляОтбора Цикл
                
                ГруппаОтбора = ОтборыПересчета.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
                ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
                ГруппаОтбора.Использование = Истина;
                
                ПервыйОтборГруппы = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
                ПервыйОтборГруппы.Использование = Истина;
                ПервыйОтборГруппы.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
                ПервыйОтборГруппы.ВидСравнения  = ВидСравненияКомпоновкиДанных.Равно;
                ПервыйОтборГруппы.ПравоеЗначение= ТоварОтбора.Номенклатура;
                
                ВторойОтборГруппы = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
                ВторойОтборГруппы.Использование = Истина;
                ВторойОтборГруппы.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Характеристика");
                ВторойОтборГруппы.ВидСравнения  = ВидСравненияКомпоновкиДанных.Равно;
                ВторойОтборГруппы.ПравоеЗначение= ТоварОтбора.Характеристика;
                
            КонецЦикла;
            
            СкладОтборГруппы = ОтборыПересчета.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
            СкладОтборГруппы.Использование = Истина;
            СкладОтборГруппы.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Склад");
            СкладОтборГруппы.ВидСравнения  = ВидСравненияКомпоновкиДанных.Равно;
            СкладОтборГруппы.ПравоеЗначение= Параметры.Документ.Склад;
        КонецЕсли;
    
    КонецЕсли;
1 mikecool
 
09.11.16
22:42
я не знаю, почему, но цикл по отборам заменил бы на "в списке" или как его там
2 vicof
 
10.11.16
00:13
Наверное, в компоновщик нужно загрузить настройки
3 vicof
 
10.11.16
00:13
Привет, Онотоле ;)
4 EvgeniuXP
 
10.11.16
01:33
Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПользовательскиеНастройки)
5 Кокос
 
10.11.16
09:56
(3) Ляксандер и (4)Евгений спасибо. Щас попробую )
6 Кокос
 
10.11.16
10:02
(1) я бы тоже. но задача состоит в том чтобы вывести только по тем комбицаниям обуви и размеров по которым есть расхождения.
7 Кокос
 
10.11.16
21:28
Если кому интересно. Сделал через глобальную команду.
Пришлось еще вариант добавлять в компоновщик. Но это всё.
Помогла конфа отсюда http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=617456&threadtype=0&partt617456=2


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ПоляДляОтбора = Новый Массив;
    Если ТипЗнч(ПараметрКоманды) = Тип("ДокументСсылка.ПересчетТоваров") Тогда
        Для Каждого Товар из ПараметрКоманды.Товары Цикл
            Если Товар.КоличествоУпаковок <> Товар.КоличествоУпаковокФакт Тогда
                ПоляДляОтбора.Добавить(Новый Структура("Номенклатура,Характеристика",Товар.Номенклатура,Товар.Характеристика));
            Конецесли;
        КонецЦикла;
    КонецЕсли;
    ОтборПоСкладу = Новый Массив;    
    ОтборПоСкладу.Добавить(Новый Структура("Склад",ПараметрКоманды.Склад));
        
    ПараметрыФормы = Новый Структура("Документ,ПоляДляОтбора,СформироватьПриОткрытии,ПользовательскиеНастройки",ПараметрКоманды,ПоляДляОтбора,Истина,
    ЗаполнитьПользовательскиеНастройкиОтчета("ВедомостьПоТоварамНаСкладах",Новый Структура("Отбор,ОтборПоСкладу",ПоляДляОтбора,ОтборПоСкладу),"_ПересчетыТоваров"));

    ОткрытьФорму("Отчет.ВедомостьПоТоварамНаСкладах.Форма",
            ПараметрыФормы,
            ПараметрыВыполненияКоманды.Источник,
            ПараметрыВыполненияКоманды.Уникальность,
            ПараметрыВыполненияКоманды.Окно,
            ПараметрыВыполненияКоманды.НавигационнаяСсылка);
            
КонецПроцедуры



Функция ЗаполнитьПользовательскиеНастройкиОтчета(ИмяОтчета,ПараметрыПользователя,ИмяВарианта) Экспорт    
    ОтчетОбъект=Отчеты[ИмяОтчета].Создать();
    КомпоновщикНастроек = ОтчетОбъект.КомпоновщикНастроек;    
    Если ИмяВарианта<>"" Тогда
        Варианты=ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек;
        НайденныйВариант=Варианты.Найти(ИмяВарианта);
        Если НайденныйВариант<>Неопределено Тогда
            Настройки=НайденныйВариант.Настройки;             
            ПоляОтбора = ПараметрыПользователя.Отбор;
            Настройки.Отбор.Элементы.Очистить();
            ГруппаОтбораТоваров = Настройки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
            ГруппаОтбораТоваров.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
            ГруппаОтбораТоваров.Использование = Истина;
    
            Для каждого ПараметрПользователя Из ПоляОтбора Цикл
                                
                    ГруппаОтбора = ГруппаОтбораТоваров.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
                    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
                    ГруппаОтбора.Использование = Истина;
                    
                    ПервыйОтборГруппы = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
                    ПервыйОтборГруппы.Использование = Истина;
                    ПервыйОтборГруппы.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
                    ПервыйОтборГруппы.ВидСравнения  = ВидСравненияКомпоновкиДанных.Равно;
                    ПервыйОтборГруппы.ПравоеЗначение= ПараметрПользователя.Номенклатура;
                    
                    ВторойОтборГруппы = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
                    ВторойОтборГруппы.Использование = Истина;
                    ВторойОтборГруппы.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Характеристика");
                    ВторойОтборГруппы.ВидСравнения  = ВидСравненияКомпоновкиДанных.Равно;
                    ВторойОтборГруппы.ПравоеЗначение= ПараметрПользователя.Характеристика;
                    
            КонецЦикла;
                        
            СкладОтборГруппы = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
            СкладОтборГруппы.Использование = Истина;
            СкладОтборГруппы.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Склад");
            СкладОтборГруппы.ВидСравнения  = ВидСравненияКомпоновкиДанных.Равно;
            СкладОтборГруппы.ПравоеЗначение= ПараметрыПользователя.ОтборПоСкладу[0].Склад;
        КонецЕсли;         
    Иначе            
        Настройки = КомпоновщикНастроек.ПолучитьНастройки();        
    КонецЕсли;
    
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
    
    Возврат КомпоновщикНастроек.ПользовательскиеНастройки;
    
КонецФункции