Имя: Пароль:
1C
1С v8
УФ СКД Заполнить пользовательские параметры и сформировать отчет
0 olegves
 
11.09.14
11:24
Имеем. Отчет на СКД. Выполняется как отдельно, так и из другой формы с передачей параметров. Если отдельно ни разу не выполнялся (не сохранены пользовательские Параметры), то никак не хочет выполнять отчет, открытый из другой формы с переданными параметрами. Кнопка нажимается, а отчет не формируется.
Заполнение Параметров решил так:
НаСервере
Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Настройки)
    Если НЕ ЗначениеЗаполнено(Параметры.ВариантОтчета) Тогда
        Возврат;
    КонецЕсли;
    
    Для каждого эо из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
        Если эо.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Рабочий") Тогда
            ИДРабочий = эо.ИдентификаторПользовательскойНастройки;
        ИначеЕсли эо.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект") Тогда
            ИДОбъект = эо.ИдентификаторПользовательскойНастройки;
        КонецЕсли;
    КонецЦикла;
    
    Для каждого эл из Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
    //Для каждого эл из Настройки.Элементы Цикл
        Если ТипЗнч(эл) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
            Если эл.Параметр = Новый ПараметрКомпоновкиДанных("Период") Тогда
                эл.Значение = Параметры.Период;
            ИначеЕсли эл.Параметр = Новый ПараметрКомпоновкиДанных("ВариантОтчета") Тогда
                эл.Значение = Параметры.ВариантОтчета;
            ИначеЕсли эл.Параметр = Новый ПараметрКомпоновкиДанных("ДокументКорректировка") Тогда
                эл.Использование = Ложь;
            КонецЕсли;
        ИначеЕсли эл.ИдентификаторПользовательскойНастройки = ИДРабочий Тогда
            эл.Использование = Истина;
            эл.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
            эл.ПравоеЗначение = Новый СписокЗначений;
            эл.ПравоеЗначение.ЗагрузитьЗначения(Параметры.Рабочий);
        ИначеЕсли эл.ИдентификаторПользовательскойНастройки = ИДОбъект Тогда
            эл.Использование = Ложь;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Если Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Значение=Неопределено Тогда
        ПриЗагрузкеПользовательскихНастроекНаСервере(Неопределено);
        Если НЕ ВладелецФормы = Неопределено Тогда
            Модифицированность = Истина;
            ОбновитьОтображениеДанных();
            Scr = NEW COMОбъект("WScript.Shell");
            Scr.SendKeys("{TAB}");
            Scr.SendKeys("{TAB}");
            Scr.SendKeys("{TAB}");
            Scr.SendKeys("{ENTER}");
            Scr = Неопределено;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Вопрос: Кто-нить решил такую траблу?
1 vicof
 
11.09.14
11:30
"Scr = NEW COMОбъект("WScript.Shell");
Scr.SendKeys("{TAB}");
Scr.SendKeys("{TAB}");
Scr.SendKeys("{TAB}");
Scr.SendKeys("{ENTER}");
Scr = Неопределено;"

гыгы. А если кто-нить порядок следования элементов поменяет? Или еще один добавит?
2 olegves
 
11.09.14
11:34
(1) а ты попробуй, а потом мне отпиши :)
Как только добавишь, этот код уже не сработает
3 vicof
 
11.09.14
11:46
(2) Собстна, я об этом и говорю, мне и пробовать не надо, все и так очевидно.
4 olegves
 
11.09.14
12:18
Нашел решение - помогла Хрусталева (Разр-ка сложных отчетов)

ПриОткрытии - убрать


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