Изменение полей объекта из результата формирования отчета на СКД

Программирование - Практика программирования

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

Задача:

После реализации отчета были поставлены несколько небольших задач на улучшение:
1. Убрать стандартное меню расшифровки и сделать так, чтобы двойным кликом открывалось значение из ячейки
2. При двойном клике на ячейку колонки комментарий, нужно разрешить ее редактировать и результат редактирования записывать в поле документа комментарий.

Решение:

1. Создадим форму отчета. 

2. У табличного поля Результат создадим два обработчика событий: РезультатОбработкаРасшифровки, РезультатПриИзмененииСодержимогоОбласти

2.1. РезультатОбработкаРасшифровки

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

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

2.2. РезультатПриИзмененииСодержимогоОбласти

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

На этом все.

См. также

Автор запретил комментарии