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