Имя: Пароль:
1C
1С v8
Фильтрация в отчете СКД
0 NewBieOneS
 
09.11.14
18:47
Здравствуйте!

Имеется отчет на СКД, в котором по двойному клику на ячейку добавлена своя команда. Она успешно отрабатывает, но есть одна неприятность. Стандартная команда, которая вызывается в меню "Отфильтровать" не передает параметры отчета (начало периода и конец периода) в новую форму. Приходится их вводить заново в новой форме вручную и формировать отчет. Как сделать так, чтобы параметры передавались в новую форму и отчет формировался автоматически?

Привожу код модуля формы отчета СКД:

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

&НаСервере
Функция ПолучитьСписокДокументов(Номенклатура, НачалоПериода, КонецПериода)
    // Здесь получаем список ссылок на документы    
КонецФункции

&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    Перем ВыбранноеДействие;
    Перем ПараметрыВыбранногоДействия;
    
    Номенклатура = ПолучитьРасшифровку(Расшифровка);
    Если Номенклатура = Неопределено Тогда
        Возврат; // Выбрано ненужное поле - оставляем стандартную обработку
    КонецЕсли;
        
    СтандартнаяОбработка = Ложь;
    ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,
        Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет));
    
    ДополнительныеДействия = Новый СписокЗначений;
    ДополнительныеДействия.Добавить("Открыть список загрузочных листов");
    
    // Осуществим выбор действия расшифровки пользователем
    ОбработкаРасшифровки.ВыбратьДействие(Расшифровка, ВыбранноеДействие,
        ПараметрыВыбранногоДействия, , ДополнительныеДействия);
            
    Если ПараметрыВыбранногоДействия <> Неопределено Тогда // Если заполнено - значит выполнено типовое действие
        Если ВыбранноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
            ОткрытьЗначение(ПараметрыВыбранногоДействия);
        Иначе    
            НоваяРасшифрока = Новый ОписаниеОбработкиРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,
                Расшифровка, ПараметрыВыбранногоДействия);
            
            ПараметрыФормы = Новый Структура;    
            ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
            ПараметрыФормы.Вставить("Расшифровка", НоваяРасшифрока);
            ОткрытьФорму("Отчет.ОтчетПоОстаткам.Форма", ПараметрыФормы, , Истина);
        КонецЕсли;
    Иначе // Либо нетиповое действие, либо отмена
        Если ВыбранноеДействие <> ДействиеОбработкиРасшифровкиКомпоновкиДанных.Нет Тогда // Если НЕ отмена            
            ПользовательскиеНастройки = ЭтаФорма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
            ПараметрыДанных = ЭтаФорма.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы;
            
            ИдентификаторНачалоПериода = ПараметрыДанных.Найти("НачалоПериода").ИдентификаторПользовательскойНастройки;
            ИдентификаторКонецПериода = ПараметрыДанных.Найти("КонецПериода").ИдентификаторПользовательскойНастройки;
            
            НачалоПериода = ПользовательскиеНастройки.Найти(ИдентификаторНачалоПериода).Значение.Дата;
            КонецПериода = ПользовательскиеНастройки.Найти(ИдентификаторКонецПериода).Значение.Дата;
            
            СписокЗагрузочныхЛистов = ПолучитьСписокЗагрузочныхЛистов(Номенклатура, НачалоПериода, КонецПериода);
            Если СписокЗагрузочныхЛистов.Количество() > 0 Тогда
                ВыбранныйЗагрузочныйЛист = СписокЗагрузочныхЛистов.ВыбратьЭлемент("Загрузочные листы");
                Если ВыбранныйЗагрузочныйЛист <> Неопределено Тогда
                    ОткрытьЗначение(ВыбранныйЗагрузочныйЛист.Значение);
                КонецЕсли;
            Иначе
                Предупреждение("Загрузочные листы не найдены!");
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;    
КонецПроцедуры
1 NewBieOneS
 
09.11.14
18:50
Функция "ПолучитьСписокДокументов()" на самом деле называется "ПолучитьСписокЗагрузочныхЛистов()". Перепутал.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший