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

Столкнулся с такой проблемой: нужно было сделать некий отчет с компановкой, а в нем - когда два раза кликаем по заданному столбцу, в котором содержится представление документа "Заявка..." должно выпадать меню, включающее два нестандартных пункта: "Произвести корректировку бюджета", "Снять корректировку бюджета". Когда пользователь выбирает эти пункты, необходимо отобрать этот самый документ "Заявка" и сделать с ним некое действие

 

1)На форме располагается табличный документ с именем "Результат" 

2)Отчет формируется после нажатя на кнопку "Сформировать" с именем "Сформировать"

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

Процедура ДействияФормыСформировать(Кнопка)
 ВывестиОтчет();
КонецПроцедуры

 Процедура ВывестиРезультатВТабличныйДокумент(ПроцессорКомпоновкиДанных, ТабличныйДокумент) Экспорт

 // Создадим и инициализируем процессор вывода результата
 ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
 ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);

 // Обозначим начало вывода
 ПроцессорВывода.НачатьВывод();

 // Основной цикл вывода отчета
 Пока Истина Цикл

  // Получим следующий элемент результата компоновки
  ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий();

  Если ЭлементРезультата = Неопределено Тогда
  // Следующий элемент не получен - заканчиваем цикл вывода
  Прервать;

  Иначе
  // Элемент получен - выведем его при помощи процессора вывода
  ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);

  КонецЕсли;

 КонецЦикла;

 ПроцессорВывода.ЗакончитьВывод();

КонецПроцедуры

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