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