Функция ПолучитьМакетНаСервере()
ОбъектОтчета = РеквизитФормыВЗначение(«Отчет»);
Макет = ОбъектОтчета.ПолучитьМакет(«Макет»);
Возврат Макет;
КонецФункции
Разработка, внедрение, консультирование и сопровождение программ на базе 1Сv8. Москва. Тел: +7-985-416-24-49, Почта info@disk1c.ru
Функция ПолучитьМакетНаСервере()
ОбъектОтчета = РеквизитФормыВЗначение(«Отчет»);
Макет = ОбъектОтчета.ПолучитьМакет(«Макет»);
Возврат Макет;
КонецФункции
Программное изменение внешнего вида табличного документа позволяет изменить границу ячейки или области (на примере — пунктирная граница):
ГраницаПунктир = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.РедкийПунктир,1);
ОбластьМакета = Макет.ПолучитьОбласть(«СтрокаТаблицы»);
ОбластьМакета.Область(«R1C4:R1C7»).ГраницаСнизу = ГраницаПунктир;
ОбластьМакета.Область(«R2C4:R2C7»).ГраницаСверху = ГраницаПунктир;
ОбластьМакета.Область(«R1C4:R1C7»).ГраницаСлева = ГраницаПунктир;
ОбластьМакета.Область(«R1C4:R1C7»).ГраницаСправа = ГраницаПунктир;
Так же можно программно объединять ячейки в табличном документе:
ТабДок.Область(«R1C1:R1C4»).Объединить();
При использовании запросов с оператором ИЕРАРХИЯ и последующей выгрузке в дерево есть проблема, с которой знакомы большинство программистов — наличие дублей в иерархии, на справочника номенклатуры:
Запрос и результат:
Чтобы убрать дубли после получения дерева значений из результата запроса можно воспользоваться функциями ниже. Поле ключа — поле иерархии (Номенклатура).
Функция УдалитьДублирующиесяУзлыДерева(Дерево, _ПоляКлюча) Экспорт
ПоляКлюча = СтрРазделить(_ПоляКлюча, «,»);
Дерево2 = новый ДеревоЗначений;
для каждого колонка из Дерево.Колонки цикл
Дерево2.Колонки.Добавить(колонка.Имя, колонка.ТипЗначения);
КонецЦикла;
для каждого СтрКорня из Дерево.Строки цикл
НС = Дерево2.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НС, СтрКорня);
СкопироватьРекурсивно(НС, СтрКорня, ПоляКлюча);
КонецЦикла;
Возврат Дерево2;
КонецФункции
Процедура СкопироватьРекурсивно(СтрокаКопия, СтрДерева, ПоляКлюча)
для каждого СтрПотомка из СтрДерева.Строки цикл
ЕстьРазличия = ложь;
для каждого ПолеКлюча из ПоляКлюча цикл
Если СтрПотомка[ПолеКлюча] <> СтрДерева[ПолеКлюча] тогда
ЕстьРазличия = истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьРазличия тогда
НС = СтрокаКопия.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НС, СтрПотомка);
СкопироватьРекурсивно(НС, СтрПотомка, ПоляКлюча);
Иначе
СкопироватьРекурсивно(СтрокаКопия, СтрПотомка, ПоляКлюча);
КонецЕсли;
КонецЦикла;
КонецПроцедуры