Имя: Пароль:
1C
1С v8
установить отбор при открытии ОСВ по 41сч Бухгалтерия 3.0
Ø (Новиков 02.08.2022 20:48)
,
0 Новый1сник2
 
01.08.22
13:15
Доброго дня!
подскажите как передать отбор по номенклатуре из реализации в ОСВ по 41 счету,
пробовал передавать массив и список значений, не получается.
код примерно такой:

СЗ = мОтчетПо41счНаСервере();
Отбор = Новый Структура;
Отбор.Вставить("Ссылка", СЗ);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Отбор);
ОткрытьФорму("Отчет.мОборотноСальдоваяВедомостьПоСчету41.Форма.ФормаОтчета", ПараметрыФормы);
1 Новый1сник2
 
01.08.22
13:59
пробовал так, тоже не получается

Массив  = мОтчетПо41счНаСервере();
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", Массив);
ПараметрыФормы = Новый Структура("Отбор, СформироватьПриОткрытии", Отбор, Истина);
ОткрытьФорму("Отчет.мОборотноСальдоваяВедомостьПоСчету41.Форма.ФормаОтчета", ПараметрыФормы);
2 Новый1сник2
 
01.08.22
14:00
подскажите хоть куда копать
3 6awkup_true
 
01.08.22
14:03
(2) отбор тебе нужно добавлять в отбор в схеме компоновки данных
4 Новый1сник2
 
01.08.22
14:06
(3) пример кода можно?
5 6awkup_true
 
01.08.22
14:09
НовыйЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
      
ПолеОтбора = Новый ПолеКомпоновкиДанных("ИмяПоляКомпановки");
      
НовыйЭлементОтбора.ЛевоеЗначение = ПолеОтбора;
      
НовыйЭлементОтбора.Использование = Истина;
      
НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
      
НовыйЭлементОтбора.ПравоеЗначение = Значение;
6 Новый1сник2
 
01.08.22
14:12
(5)в самом отчете ОсновнаяСхемаКомпоновкиДанных пустая, и куда добавлять этот код?
нужно из реализации массив значений передать в открываемую форму отчета
7 6awkup_true
 
01.08.22
14:15
(6) если схема пустая, то значит, что в ПриКомпоновке в модуле отчета с ней что то происходит(заполняется). нет по рукой бухни. найди момент, когда схема не будет пустой и вставь свой отбор. учти, что отбор по счету уже может существовать. поэтому в КомпоновщикНастроек.Настройки.Отбор.Элементы тебе его нужно будет найти по имени и установить у него значение и использование
8 Новый1сник2
 
01.08.22
14:42
(7) отчет типовой скопировал, в параметрах выбора счета, поставил Отбор.Код(ТоварыНаСкладах)
9 Новый1сник2
 
01.08.22
15:34
может еще варианты есть? поделитесь кодом
10 6awkup_true
 
01.08.22
15:55
&НаКлиенте
Процедура ОткрытьОтчетСКДСОтбором(Команда)

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


&НаСервере
Функция УстановитьПользовательскиеНастройкиОтчета(ТипОтчета,СтруктураПараметров)
    
    СтруктураНастроек = Новый Структура;
    ОтчетОбъект = Отчеты[ТипОтчета].Создать();
    
    //Получаешь схему.     
    СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    //заполняешь как в ПриКомпоновке отчета исходного. Дергаешь настройки

    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    ПользовательскиеНастройки = СхемаКомпоновкиДанных.КомпоновщикНастроек.ПользовательскиеНастройки;
    Для Каждого ЭлПараметр  Из СтруктураПараметров Цикл
        Для Каждого ПараметрСКД Из ПользовательскиеНастройки.Элементы Цикл
            Если ТипЗнч(ПараметрСКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда  
                Если строка(ПараметрСКД.Параметр) = ЭлПараметр.Ключ Тогда
                    ПараметрСКД.Значение = ЭлПараметр.Значение;
                    ПараметрСКД.Использование = Истина;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;    
    КонецЦикла;
        
    Возврат ПользовательскиеНастройки;
КонецФункции

отладить надо. могут быть ошибки
11 Новый1сник2
 
01.08.22
16:03
(10) благодарю, только не вижу как номенклатура передается
12 6awkup_true
 
01.08.22
16:04
(11) Отбор = Новый Структура;
    Отбор.Вставить("Организация", Объект.Организация);
    Отбор.Вставить("Номенклатура", ТвояНоменклатура);
13 Новый1сник2
 
01.08.22
16:05
(12) в ТвояНоменклатура можно массив передать ?
14 Новый1сник2
 
01.08.22
16:06
или в цикле сделать ?
Отбор.Вставить("Номенклатура", ТвояНоменклатура);
15 6awkup_true
 
01.08.22
16:07
(14) можно, только скорее всего будет нужно передавать фиксированный массив.

МассивНоменклатур = Новый массив;
МассивНоменклатур.Добавить(...);
.....
Отбор.Вставить("Номенклатура", Новый ФиксированныйМассив(МассивНоменклатур));
16 Новый1сник2
 
01.08.22
16:19
(15) ок, завтра попробую, благодарю
17 Новый1сник2
 
02.08.22
08:39
&НаСервере
Функция УстановитьПользовательскиеНастройкиОтчета(ТипОтчета,СтруктураПараметров)
    
    СтруктураНастроек = Новый Структура;
    ОтчетОбъект = Отчеты[ТипОтчета].Создать();
    
    //Получаешь схему.    
    
    СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    //заполняешь как в ПриКомпоновке отчета исходного. Дергаешь настройки
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    

    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    ПользовательскиеНастройки = СхемаКомпоновкиДанных.КомпоновщикНастроек.ПользовательскиеНастройки;
    Для Каждого ЭлПараметр  Из СтруктураПараметров Цикл
        Для Каждого ПараметрСКД Из ПользовательскиеНастройки.Элементы Цикл
            Если ТипЗнч(ПараметрСКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда  
                Если строка(ПараметрСКД.Параметр) = ЭлПараметр.Ключ Тогда
                    ПараметрСКД.Значение = ЭлПараметр.Значение;
                    ПараметрСКД.Использование = Истина;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;    
    КонецЦикла;
        
    Возврат ПользовательскиеНастройки;
КонецФункции
18 Новый1сник2
 
02.08.22
08:40
{Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары.Форма(3067,74)}: Переменная не определена (Настройки)
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, <<?>>Настройки, ДанныеРасшифровки); (Проверка: Сервер)
{Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары.Форма(3067,85)}: Переменная не определена (ДанныеРасшифровки)
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, <<?>>ДанныеРасшифровки); (Проверка: Сервер)
19 Новый1сник2
 
02.08.22
09:51
даже просто отбор не работает, делаю как в https://its.1c.ru/db/metod8dev/content/4143/hdoc

Отбор = Новый Структура;
Отбор.Вставить("Организация", Объект.Организация);  
Отбор.Вставить("Склады", Объект.Склад);  
ПараметрыФормы = Новый Структура("Отбор, СформироватьПриОткрытии", Отбор, Истина);
ОткрытьФорму("Отчет.мОборотноСальдоваяВедомостьПоСчету41.Форма.ФормаОтчета", ПараметрыФормы);
20 Новый1сник2
 
02.08.22
12:01
вот нашел модуль, только отбор не работает, подскажите как установить отбор

&НаКлиенте
Процедура ПрограммноОСВ41(Команда)

    СписокНоменклатуры = мСЗПоНоменклатуреПолучитьНаСервере();

    ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;    
    ДополнительныеСвойства = ПользовательскиеНастройки.ДополнительныеСвойства;
    ДополнительныеСвойства.Вставить("НачалоПериода",    КонецДня(Объект.Дата));
    ДополнительныеСвойства.Вставить("КонецПериода",     КонецДня(Объект.Дата));
    ДополнительныеСвойства.Вставить("Счет",             ПредопределенноеЗначение("ПланСчетов.Хозрасчетный.Товары"));    
    ДополнительныеСвойства.Вставить("Организация",      Объект.Организация);
    ДополнительныеСвойства.Вставить("ПоСубсчетам",      Ложь);
    ДополнительныеСвойства.Вставить("Склады",      Ложь);
    
    Отбор = ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
    Отбор.ИдентификаторПользовательскойНастройки = "Отбор";
    
    //
    //ЗаполнитьЭлементОтбораКомпоновкиДанных(Отбор,Истина,ВидСравненияКомпоновкиДанных.ВСписке,"Субконто1", СписокНоменклатуры);
    //ЗаполнитьЭлементОтбораКомпоновкиДанных(Отбор,Истина,ВидСравненияКомпоновкиДанных.Равно,"Субконто2", Объект.Склад);
    //
    ДополнительныеСвойства.Вставить("Отбор", Отбор);
    
    ПараметрыФормы = Новый Структура();
    ПараметрыФормы.Вставить("РежимРасшифровки",         Ложь);
    ПараметрыФормы.Вставить("ВидРасшифровки",             2);
    ПараметрыФормы.Вставить("ПользовательскиеНастройки",     ПользовательскиеНастройки);
    ПараметрыФормы.Вставить("ЗаполняемыеНастройки",         Новый Структура("Показатели, Отбор, Группировка", Истина, Истина, Истина));
    ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);    
    
    ФормаОтчета = ОткрытьФорму("Отчет.ОборотноСальдоваяВедомостьПоСчету.Форма", ПараметрыФормы, ЭтаФорма, Истина);
    ФормаОтчета.Элементы.Счет.Доступность = Ложь;
КонецПроцедуры
21 Новый1сник2
 
02.08.22
15:52
разобрался, тему можно закрывать
22 Новиков
 
02.08.22
16:20
(21) Код в (20) рабочий?
23 Новый1сник2
 
02.08.22
16:23
(22) без отбора рабочий
24 Новиков
 
02.08.22
16:39
(21) >>разобрался, тему можно закрывать

Если не сложно, приведите код целиком, для будущих ответов на подобные вопросы. После этого закроем тему, как и просили.
25 Новый1сник2
 
02.08.22
16:40
вот тут нашел решение https://infostart.ru/1c/articles/345249/