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