1С 8.x Управляемое приложение 1С 7.7. Бухучет Статьи Ссылки
1С 8.x arrow 1С 8.x arrow Узелки на память arrow Какая группировка была выбрана и как получить значения ресурсов при обработке расшифровки
Какая группировка была выбрана и как получить значения ресурсов при обработке расшифровки Печать

Какая группировка была выбрана и как получить значения ресурсов при обработке расшифровки (взято с ItLand).

Адрес оригинального текста: http://www.itland.ru/forum/lofiversion/index.php/t22951.html

 

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

 

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
   
  Перем ВыполненноеДействие;

  // Запретим стандартную обработку расшифровки
  СтандартнаяОбработка = Ложь;

  // Создадим и инициализируем обработчик расшифровки
  ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
   
  СписокДействий = Новый СписокЗначений;
  СписокДействий.Добавить("ВедомостьПросроченныеВзаиморасчетыСКонтрагентами", "Ведомость по просроченным взаиморасчетам с контрагентами");
  СписокДействий.Добавить("ВедомостьВзаиморасчетыСКонтрагентами", "Ведомость по взаиморасчетам с контрагентами");
   
  ДоступныеДействия = Новый Массив();
  ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
  ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить);
   
  ИндексРасшифровки = Число(Расшифровка) + 1;
  Если ДанныеРасшифровки.Элементы.Количество() > ИндексРасшифровки И ТипЗнч(ДанныеРасшифровки.Элементы[ИндексРасшифровки]) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
  ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);
  КонецЕсли;
   
  // Осуществим выбор действия расшифровки пользователем
  Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие, ДоступныеДействия, СписокДействий);
   
  Если Настройки <> Неопределено Тогда
  // Пользователь выбрал действие, для которого нужно менять настройки

  Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить Тогда
   
  // Если требется упорядочить - упорядочим в текущем отчете
  КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
  ДействияФормыСформировать(Неопределено);

  Иначе
   
  // При других действиях - создадим новый отчет, откроем форму, сформируем отчет в ней
  Отчет = Отчеты[Метаданные().Имя].Создать();
  Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
  Форма = Отчет.ПолучитьФорму();
  Форма.ДействияФормыСформировать(Неопределено);
  Форма.Открыть();

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