Собственные колонтитулы в табличном документе

05.05.25

Разработка - Работа с интерфейсом

Доброго времени суток! Представляю вашему вниманию очередной продукт моей жизнедеятельности. На этот раз — о проблеме, с которой я столкнулся: в колонтитулах табличного документа нельзя задать цвет фона, шрифта, добавить изображения, да и в целом типовой механизм недостаточно гибкий для "внимательных к деталям" заказчиков. Сразу уточню: на Инфостарте уже есть несколько решений, но, на мой взгляд, они немного усложнены. Ниже — мой вариант реализации. Он не претендует на топ 10 статей Инфостарт, и его точно можно оптимизировать, но я постарался изложить максимально понятно, чтобы смог адаптировать под свои задачи. P.S. жмякни «+»

Логика следующая:

1) в цикле разбиваем большую область "тело" на подобласти, через символ перенос строки.

2) если полученная подстрока умещается на страницу вместе с колонтитулом,- то выводим эту подстроку.

3) если не помещается заполняем свободное место пустой строкой, выводим колонтитул и разрыв страницы.

4) берем следующую область, например "тело2" и делаем вышеперечисленные операции.

//Получаем макет, всё как обычно.
Табдок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет"); 

ОбластьКолонтитулВерх = Макет.ПолучитьОбласть("ВерхнийКолонтитул");
ОбластьКолонтитулНиз = Макет.ПолучитьОбласть("НижнийКолонтитул");

//Получаем область текст и она же будет у нас пустая область.
//Для сдвига нижнего колонтитула в самый конец страницы при необходимости.
ОбластьПустая = Макет.ПолучитьОбласть("Текст"); 
ОбластьТекст = Макет.ПолучитьОбласть("Текст"); 
ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); //Заполнение - шаблон. 
ОбластьТело = Макет.ПолучитьОбласть("Тело"); //Заполнение - шаблон или текст по желанию, у меня текст. 

//В макете не видно этой области (реквизиты сторон).
ОбластьРеквизиты = Макет.ПолучитьОбласть("Реквизиты");   

//Заполняем и выводим все как обычно, эти области у нас точно влезут.
Табдок.Вывести(ОбластьКолонтитулВерх);
ОбластьШапка.Параметры.Заполнить(Выборка);
Табдок.Вывести(ОбластьШапка);  

//Из области тело получаем непосредственно ячейку с нашим текстом.
ТелоТела = ОбластьТело.Области.Тело;

//Открываем цикл от начала текста до окончания.
//Поскольку ячейка у нас по всей ширине области второй цикл по горизонтали нам не нужен.
//При необходимости открой второй цикл по горизонтали.
Для СчВерт = ТелоТела.Верх По ТелоТела.Низ Цикл  
	
	//Получили ячейку и текст из неё.
	Ячейка = ОбластьТело.Область(СчВерт,0,СчВерт,0);
	Текст = Ячейка.Текст;        
		
	Если ЗначениеЗаполнено(Текст) Тогда  
		
		//РЗ - это результат запроса выборки в которой хранятся данные для заполнения параметров.
		//Подменяем текст ячейки заполняя параметры в квадратных скобках данными из выборки.
		Для Каждого Колонка Из РЗ.Колонки Цикл
			Текст = СтрЗаменить(Текст,"[" + Колонка.Имя + "]",Выборка[Колонка.Имя])                                 
		КонецЦикла; 
		
		//Разделяем текст в массив подстрок, в моем случае через перенос строки.
		//Так мы разобьем большую ячейку с длинным текстом на более мелкие составляющие.
		Масс = СтрРазделить(Текст, Символы.ПС, Ложь);
		
		//Идем циклом по полученному массиву подстрок.
		Для Каждого Стр Из Масс Цикл 
			
			//Присваиваем подстроку в параметр области текст.
			//Изменяем шрифт на случай заголовков (по необходимости и другие свойства ячейки).
			ОбластьТекст.Параметры.Текст = Стр;
			ОбластьТекст.Области.Текст.Шрифт = Ячейка.Шрифт;  
			
			//Добавляем подстроку и нижний колонтитул в массив чтобы проверить влазят ли они на страницу. 
			Массив = Новый Массив;
			Массив.Добавить(ОбластьТекст);
			Массив.Добавить(ОбластьКолонтитулНиз);
			
			//Если влазят, выводим ТОЛЬКО ПОДСТРОКУ на страницу
			Если Табдок.ПроверитьВывод(Массив) Тогда
				Табдок.Вывести(ОбластьТекст);
			Иначе
				
				//Если не влазят проверяем нужно ли сдвигать нижний колонтитул ниже по странице (в самый конец).  
				//Для этого проверяем умещаются ли пустая область и нижний колонтитул. 
				//Можно вынести в отдельную процедуру.
				Массив = Новый Массив;
				Массив.Добавить(ОбластьПустая);
				Массив.Добавить(ОбластьКолонтитулНиз);
				Пока Табдок.ПроверитьВывод(Массив) Цикл
					
					//В циклы добавляем пустую область до тех пор пока она влазит вместе с нижним колонтитулом
					Табдок.Вывести(ОбластьПустая);
				КонецЦикла;              
				
				//После выводим нижний колонтитул, разделитель страниц, верхний колонтитул, и оставшуюся подстроку. 
				Табдок.Вывести(ОбластьКолонтитулНиз);
				Табдок.ВывестиГоризонтальныйРазделительСтраниц();
				Табдок.Вывести(ОбластьКолонтитулВерх);
				Табдок.Вывести(ОбластьТекст);
			КонецЕсли;
		КонецЦикла; 
	Иначе 
		
		//Если попалась область без текста (разделитель параграфов) просто её выводим.
		ОбластьТекст.Параметры.Текст = ""; 
		Табдок.Вывести(ОбластьТекст);
	КонецЕсли;    
КонецЦикла;           

//Заполняем следующие области параметрами, и при необходимости повторяем выше изложенный цикл.  
ЗаполнитьЗначенияСвойств(ОбластьРеквизиты.Параметры,Выборка);

Если Табдок.ПроверитьВывод(ОбластьРеквизиты) Тогда
	Табдок.Вывести(ОбластьРеквизиты);
Иначе
	//...
КонецЕсли;

 

произвольные колонтитулы свои колонтитулы табличный документ колонтитулы колонтитул

См. также

Работа с интерфейсом Анализ учета Мониторинг Платформа 1С v8.3 8.3.14 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью подсистемы "Инфоборды". Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Подсистема реализована в форме расширения 1С.

27.03.2025    1105    3    developer118    5    

8

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

6000 руб.

14.01.2016    56481    19    25    

45

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Универсальный редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью рисовать на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    64686    45    60    

83

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    20539    30    6    

46

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    28606    mrXoxot    44    

133

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    15297    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    19345    1252    elcoan    53    

128

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

3 стартмани

10.04.2023    13631    173    acces969    31    

130
Оставьте свое сообщение