Столкнулся с такой проблемой: нужно было сделать некий отчет с компоновкой, а в нем — когда два раза кликаем по заданному столбцу, в котором содержится представление документа «Заявка…» должно выпадать меню, включающее два нестандартных пункта: «Произвести корректировку бюджета», «Снять корректировку бюджета». Когда пользователь выбирает эти пункты, необходимо отобрать этот самый документ «Заявка» и сделать с ним некое действие
1)На форме располагается табличный документ с именем «Результат»
2)Отчет формируется после нажатя на кнопку «Сформировать» с именем «Сформировать»
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
Процедура ВывестиОтчет() СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); //Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; Настройки = КомпоновщикНастроек.Настройки; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки); //Нужно учесть расшифровки ДокументРезультат = ЭлементыФормы.Результат; ДокументРезультат.Очистить(); ВывестиРезультатВТабличныйДокумент(ПроцессорКомпоновки, ДокументРезультат); ДокументРезультат.ОтображатьСетку = Ложь; ДокументРезультат.ОтображатьЗаголовки = Ложь; КонецПроцедуры Процедура ДействияФормыСформировать(Кнопка) ВывестиОтчет(); КонецПроцедуры Процедура ВывестиРезультатВТабличныйДокумент(ПроцессорКомпоновкиДанных, ТабличныйДокумент) Экспорт // Создадим и инициализируем процессор вывода результата ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент); // Обозначим начало вывода ПроцессорВывода.НачатьВывод(); // Основной цикл вывода отчета Пока Истина Цикл // Получим следующий элемент результата компоновки ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий(); Если ЭлементРезультата = Неопределено Тогда // Следующий элемент не получен - заканчиваем цикл вывода Прервать; Иначе // Элемент получен - выведем его при помощи процессора вывода ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); КонецЕсли; КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); КонецПроцедуры Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) Перем ВыполненноеДействие; ТекстРасшифровки = Элемент.ТекущаяОбласть.Текст; ИспользоватьДопПунктыМеню = Ложь; Если Найти(ТекстРасшифровки, "Заявка на платеж") Тогда ИспользоватьДопПунктыМеню = Истина; КонецЕсли; СтандартнаяОбработка = Ложь; ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); Если ИспользоватьДопПунктыМеню Тогда ДополнительныеДействия = Новый СписокЗначений; ДополнительныеДействия.Добавить("Произвести корректировку бюджета"); ДополнительныеДействия.Добавить("Снять корректировку бюджета"); НастройкиРасшифровки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие,,ДополнительныеДействия); Иначе НастройкиРасшифровки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие); КонецЕсли; мПроведенаКорректировкаБюджета = Истина; мКорректироватьДокумент = Ложь; Если ВыполненноеДействие = "Произвести корректировку бюджета" Тогда мКорректироватьДокумент=Истина; мПроведенаКорректировкаБюджета = Истина; ИначеЕсли ВыполненноеДействие = "Снять корректировку бюджета" Тогда мКорректироватьДокумент=Истина; мПроведенаКорректировкаБюджета = Ложь; КонецЕсли; Если мКорректироватьДокумент Тогда Попытка Если ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьРодителей()[0].ПолучитьПоля().Найти("Ссылка")<>Неопределено Тогда //ТипЗнч(ДанныеРасшифровки.Элементы[Расшифровка]) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") ДокументСсылка = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьРодителей()[0].ПолучитьПоля().Найти("Ссылка").Значение; ДокументОбъект = ДокументСсылка.ПолучитьОбъект(); ДокументОбъект.ПроведенаКорректировкаБюджета = мПроведенаКорректировкаБюджета; Попытка ДокументОбъект.Записать(); Сообщить(" В документе "+Строка(ДокументОбъект)+" поставлен признак ""Проведена корректировка бюджета"""); Исключение Сообщить(" Документ "+Строка(ДокументОбъект)+" не скорректирован", СтатусСообщения.Важное); КонецПопытки; КонецЕсли; Исключение Если ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля().Найти("Ссылка")<>Неопределено Тогда ДокументСсылка = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля().Найти("Ссылка").Значение; ДокументОбъект = ДокументСсылка.ПолучитьОбъект(); ДокументОбъект.ПроведенаКорректировкаБюджета = мПроведенаКорректировкаБюджета; Попытка ДокументОбъект.Записать(); Сообщить(" В документе "+Строка(ДокументОбъект)+" поставлен признак ""Проведена корректировка бюджета"""); Исключение Сообщить(" Документ "+Строка(ДокументОбъект)+" не скорректирован", СтатусСообщения.Важное); КонецПопытки; КонецЕсли; КонецПопытки КонецЕсли; КонецПроцедуры |
Источник: http://www.1c1c1c.ru/