Як вивести макет табличного документа, зберігши при цьому угруповання колонок
Зіткнувся допіру з проблемою: є друкована форма з макетом табличного документа (далі макет), з якого збирається результуючий ТабДок (далі результат). У макеті задана складна ієрархія угруповань колонок, при цьому кількість колонок результату не збільшується, тобто результат росте тільки в довжину (наприклад, додаються рядки табличній частини), а ширина обмежена шириною заздалегідь намальованого макета. У зв'язку з цим варто логічне запитання про те, як вивести в результат задані в макеті угруповання. Напевно багато хто знає, що якщо просто виводити області макета в результат, то угруповання, будуть губитися. А програмно прописувати рівні для кожної колонки і виводити їх окремо в циклі, в даному випадку абсолютно позбавлене необхідності.
Значить, прийшов час струшувати пил з бубна і якимось чином задобрювати богів 1С.
Не знайшовши відповіді в СП у колег і у яндекса. довелося попотіти і методом наукового тику знайти-таки заповітне рішення.
Процедура КнопкаВиполнітьНажатіе (Кнопка)
Макет = ПолучітьМакет ( "Макет");
ОбластьШапка = Макет. ПолучітьОбласть ( "Шапка");
ТабДок = новий ТаблічнийДокумент;
// Після виведення в ТабДок макета з угрупованнями, в ТабДоке встановлюються всі угруповання макета
// Якщо висновок не макет, а область макета, то угруповання не переносяться
//Т.е. при застосуванні методу "ПолучітьОбласть" угруповання в даній області не враховуються, як ніби їх не було
// Угруповання колонок в новому табличному документі встановлюються ПЕРШИМ виведеним в нього табдоком.
// в якому є хоча б один рядок, тому виводити макет з угрупуваннями обов'язково потрібно на самому початку
// і в макеті крім самого угруповання повинні бути рядки
ТабДок. Вивести (ПолучітьМакет ( "СохраненниеГрупіровкіКолонок"));
ТабДок. Вивести (ОбластьШапка);
// видалимо рядки макета "СохраненниеГрупіровкіКолонок", тому що вони нам потрібні були тільки для того,
// щоб встановити в новому табдоке потрібну нам угруповання колонок
// Важливо! - якщо після видалення рядків з документа видалити всі рядки, то угруповання колонок теж очиститься,
// тому видаляємо "зайві" рядки, тільки після того, як вивели в табдок. хоча б одну «не зайву" рядок
// обов'язково вказуємо тип зміщення відмінний від "БезСмещенія" інакше очищена від тексту область залишиться в нашому табдоке
ТабДок. УдалітьОбласть (ТабДок. Область (1. 1,), ТіпСмещеніяТаблічногоДокумента. ПоГорізонталі);
// про всяк випадок перевіримо що з угрупованням рядків теж все в порядку
ТабДок. Вивести (Макет. ПолучітьОбласть ( "Рядок"), 0);
ТабДок. Вивести (Макет. ПолучітьОбласть ( "Рядок"), 1);