Управление разметкой табличного документа
В «1С:Шине» реализована поддержка управления размером ячеек и размещением текста в них.
Форматирование строк
У каждой строки табличного документа есть формат, и по умолчанию он общий для всех строк. Чтобы создать область ячеек с новым форматом строк, воспользуйтесь методом СоздатьНовыйФорматСтрок()
типа ОбластьСтрок
.
Например, создадим область с новым форматом для строк 2, 3 и 4:
знч Документ = новый ТабличныйДокумент()
// Для колонки 1 установим ширину 10
Документ.ПолучитьОбласть(1, 1, 1, 1).УстановитьШиринуКолонки(10)
// Выделим отдельную область из строк 2, 3 и 4 и создадим для нее новый формат строк
знч ОтдельнаяОбласть = Документ.ПолучитьСтроки(2, 4)
ОтдельнаяОбласть.СоздатьНовыйФорматСтрок()
// Для колонки 1 отдельной области установим ширину 50
Документ.ПолучитьОбласть(2, 1, 2, 1).УстановитьШиринуКолонки(50)
Если изменить ширину колонок в этой области, то в строках, которые не входят в эту область, ширина колонок не изменится:
знч ШиринаКолонки = Документ.ПолучитьОбласть(1, 1, 1, 1).ПолучитьШиринуКолонки()
// ШиринаКолонки: 10
Описание формата строк табличного документа содержится в объекте типа ФорматСтрокТабличногоДокумента
. Объект этого типа возвращает метод ОбластьТабличногоДокумента.ПолучитьФорматСтрок()
. Затем его можно использовать, чтобы установить формат строк другой области табличного документа с помощью метода ОбластьТабличногоДокумента.УстановитьФорматСтрок()
:
метод СкопироватьФорматСтрок(ТабличныйДокумент: ТабличныйДокумент, НомерСтрокиОбразца: Число, НомерСтрокиНазначения: Число)
// Получаем формат строк области-образца
знч ОбластьОбразец = ТабличныйДокумент.ПолучитьСтроки(НомерСтрокиОбразца, НомерСтрокиОбразца)
знч ФорматСтрок = ОбластьОбразец.ПолучитьФорматСтрок()
// Получаем область назначения и устанавливаем для нее формат строк области-образца
знч ОбластьНазначения = ТабличныйДокумент.ПолучитьСтроки(НомерСтрокиНазначения, НомерСтрокиНазначения)
ОбластьНазначения.УстановитьФорматСтрок(ФорматСтрок)
;
Форматирование текста
Для форматирования текста в ячейках табличного документа используйте методы типа ОбластьТабличногоДокумента
. Например:
-
УстановитьПереносТекста()
Область.УстановитьПереносТекста(ПереносТекстаТабличногоДокумента.Переносить)
-
УстановитьВыравниваниеПоГоризонтали()
Область.УстановитьВыравниваниеПоГоризонтали(ВыравниваниеПоГоризонталиТаб личногоДокумента.Центр)
-
УстановитьВыравниваниеПоВертикали()
Область.УстановитьВыравниваниеПоВертикали(ВыравниваниеПоВертикалиТабличногоДокумента.Верх)
-
УстановитьЦветТекста()
Область.УстановитьЦветТекста(новый АбсолютныйЦвет(0, 0, 0))
-
УстановитьШрифтТекста()
Область.УстановитьШрифт(новый ШрифтОбластиТабличногоДокумента(новый АбсолютныйШрифт("Arial", 10, Истина)))
Работа с областями табличного документа
«1С:Шина» предоставляет следующие методы для работы с областями табличного документа:
ПолучитьИменованныеОбласти()
типаТабличныйДокумент
— возвращает все именованные области табличного документа;ПолучитьИменаПараметровИШаблонов()
типаОбластьТабличногоДокумента
— возвращает имена параметров и шаблонов, используемых в ячейках области табличного документа.
Рассмотрим следующие примеры.
Проверка наличия области подписи в табличном документе
метод ВМакетеЕстьОбластьПодписи(Макет: ТабличныйДокумент): Булево
// Получаем все именованные области макета
знч Области = Макет.ПолучитьИменованныеОбласти()
// Ищем область с именем "ОбластьПодписи"
для Область из Области
если Область.Имя == "ОбластьПодписи"
возврат Истина
;
;
// Возвращаем Ложь, если область подписи не найдена
возврат Ложь
;
Получение имен параметров области по заданному условию
метод ПолучитьИменаПараметровЭЦП(Область: ОбластьТабличногоДокумента): Массив<Строка>
// Получаем имена параметров и шаблонов заданной области
знч ИменаПараметров = Область.ПолучитьИменаПараметровИШаблонов()
знч Результат = новый Массив<Строка>()
// Ищем параметр, имя которого начинается с "ЭЦП_"
для ИмяПараметра из ИменаПараметров
если ИмяПараметра.НачинаетсяС("ЭЦП_")
Результат.До бавить(ИмяПараметра)
;
;
возврат Результат
;
Пример добавления штампа в табличный документ
В этом примере мы добавим штамп с инф ормацией об электронной цифровой подписи к произвольному пользовательскому документу, используя возможности форматирования строк табличного документа.
Штамп будет иметь размер 8 строк и 5 колонок, включая колонку перед штампом:
Параметры исходного заявления и штампа зададим с помощью структур:
структура Заявление
пер ЧислоСтрок: Число = 5
пер ЧислоКолонок: Число = 5
;
структура СтруктураШтампа
пер ЧислоСтрок: Число = 8
пер ЧислоКолонок: Число = 5
пер ШиринаКолонок: ЧитаемыйМассив<Число> = [1.25, 1.13, 10.88, 24.75, 1.88]
// Задаем высоту только для тех строк, для которых не подходит значение по умолчанию
пер ВысотаСтрок: ЧитаемоеСоответствие<Число, Число> = {1: 5, 3: 6, 8: 5}
// Левая верхняя ячейка штампа
обз пер ПерваяСтрока: Число
обз пер ПерваяКолонка: Число
// Номера строк штампа, в которых располагаются соответствующие записи
пер Содержимое: ЧитаемоеСоответствие<Строка, Число> = {
"Заголовок": 1,
"Владелец": 3,
"ИНН": 4,
"Сертификат": 5,
"Период": 6}
// Номера колонок, в которых располагается Название и Значение записи
пер КолонкаНазвание: Число = 2
пер КолонкаЗначение: Число = 3
;
В методе ШтампНаЗаявление()
установим ширину колонок и высоту строк штампа и выведем штамп:
метод ШтампНаЗаявление(Шаблон: Байты, ПутьКФайлу: Строка)
// Создадим структуру заявления со значениями по умолчанию
пер Заявление = новый Заявление()
// Считываем пользовательское заявление и выводим его в итоговый документ
знч Макет = ТабличныйДокумент.Прочитать(Шаблон)
знч ОбластьЗаявления = Макет.ПолучитьОбласть(1, 1, Заявление.ЧислоСтрок, Заявление.ЧислоКолонок)
знч Результат = новый ТабличныйДокумент()
Результат.Запись.ВывестиВертикально(ОбластьЗаявления)
// Создадим штамп
пер Штамп = новый СтруктураШтампа(ПерваяСтрока = Заявление.ЧислоСтрок + 1, ПерваяКолонка = 1)
// Создаем новый формат строк для области штампа
пер ОбластьЭЦП = Результат.ПолучитьСтроки(Штамп.ПерваяСтрока, Штамп.ПерваяСтрока + Штамп.ЧислоСтрок - 1)
ОбластьЭЦП.СоздатьНовыйФорматСтрок()
// Устанавливаем ширину колонок в штампе
для Колонка = 1 по Штамп.ЧислоКолонок
Результат.ПолучитьОбласть(Штамп.ПерваяСтрока, Колонка, Штамп.ПерваяСтрока, Колонка).УстановитьШиринуКолонки(Штамп.ШиринаКолонок[Колонка - 1])
;
// Устанавливаем высоту строк в штампе
для Строка из Штамп.ВысотаСтрок.Ключи()
Результат.ПолучитьСтроки(Штамп.ПерваяСтрока + Строка - 1, Штамп.ПерваяСтрока + Строка - 1).УстановитьВысотуСтроки(Штамп.ВысотаСтрок[Строка])
;
// Выводим штамп
ВывестиШтамп(Результат, Штамп)
// Записываем получившийся табличный документ в файл
Результат.Записать(ПутьКФайлу)
;
Метод для вывода штампа может выглядеть следующим образом:
метод ВывестиШтамп(Документ: ТабличныйДокумент, Штамп: СтруктураШтампа)
// Получаем область штампа и обводим ее
пер ГраницаРамки = новый ГраницаЯчейкиТабличногоДокумента(ВидГраницыЯчейкиТабличногоДокумента.Двойная, 1)
пер ОбластьШтампа = Документ.ПолучитьОбласть(
Штамп.ПерваяСтрока,
Штамп.ПерваяКолонка + 1,
Штамп.ПерваяСтрока + Штамп.ЧислоСтрок - 1,
Штамп.ПерваяКолонка + Штамп.ЧислоКолонок - 1
)
ОбластьШтампа.УстановитьЦветРамки(ПолучитьЦвет())
ОбластьШтампа.Обвести(ГраницаРамки, ГраницаРамки, ГраницаРамки, ГраницаРамки)
// Заполняем штамп
пер Заголовок = Документ.ПолучитьОбласть(
Штамп.ПерваяСтрока + Штамп.Содержимое["Заголовок"],
Штамп.ПерваяКолонка + Штамп.КолонкаНазвание,
Штамп.ПерваяСтрока + Штамп.Содержимое["Заголовок"],
Штамп.ПерваяКолонка + Штамп.КолонкаЗначение)
Заголовок.ОбъединитьЯчейки()
Заголовок.УстановитьТекст("Документ подписан" + Символы.НОВАЯ_СТРОКА + "электронной подписью")
Заголовок.УстановитьШрифт(
новый ШрифтОбластиТабличногоДокумента(новый АбсолютныйШрифт("Arial", 10, Истина))
)
Заголовок.УстановитьЦветТекста(ПолучитьЦвет())
Заголовок.УстановитьВыравниваниеПоГоризонтали(ВыравниваниеПоГоризонталиТабличногоДокумента.Центр)
ЗаписатьФорматированноеЗначение(Документ.ПолучитьОбласть("R%{Штамп.ПерваяСтрока + Штамп.Содержимое["Владелец"]}C%{Штамп.ПерваяКолонка + Штамп.КолонкаНазвание}"), "Владелец:")
ЗаписатьФорматированноеЗначение(Документ.ПолучитьОбласть("R%{Штамп.ПерваяСтрока + Штамп.Содержимое["Владелец"]}C%{Штамп.Первая Колонка + Штамп.КолонкаЗначение}"), "Иванов Иван Иванович")
ЗаписатьФорматированноеЗначение(Документ.ПолучитьОбласть("R%{Штамп.ПерваяСтрока + Штамп.Содержимое["ИНН"]}C%{Штамп.ПерваяКолонка + Штамп.КолонкаНазвание}"), "ИНН:")
ЗаписатьФорматированноеЗначение(Документ.ПолучитьОбласть("R%{Штамп.ПерваяСтрока + Штамп.Содержимое["ИНН"]}C%{Штамп.ПерваяКолонка + Штамп.КолонкаЗначение}"), "717880655582")
ЗаписатьФорматированноеЗначение(Документ.ПолучитьОбласть("R%{Штамп.ПерваяСтрока + Штамп.Содержимое["Сертификат"]}C%{Штамп.ПерваяКолонка + Штамп.КолонкаНазвание}"), "Сертификат:")
ЗаписатьФорматированноеЗначение(Документ.ПолучитьОбласть("R%{Штамп.ПерваяСтрока + Штамп.Содержимое["Сертификат"]}C%{Штамп.ПерваяКолонка + Штамп.КолонкаЗначение}"), "120998200991982888282")
ЗаписатьФорматированноеЗначение(Документ.ПолучитьОбласть("R%{Штамп.ПерваяСтрока + Штамп.Содержимое["Период"]}C%{Штамп.ПерваяКолонка + Штамп.КолонкаНазвание}"), "Период:")
ЗаписатьФорматированноеЗначение(Документ.ПолучитьОбласть("R%{Штамп.ПерваяСтрока + Штамп.Содержимое["Период"]}C%{Штамп.ПерваяКолонка + Штамп.КолонкаЗначение}"), "23.03.2023 - 22.03.2024")
;
метод ЗаписатьФорматированноеЗначение(Область: ОбластьТабличногоДокумента, Заголовок: Строка)
Область.УстановитьТекст(Заголовок)
Область.УстановитьЦветТекста(ПолучитьЦвет())
;
метод ПолучитьЦвет(): АбсолютныйЦвет
возврат новый АбсолютныйЦвет(83, 106, 194)
;
В результате получаем исходный документ пользователя со штампом: