Единый семинар «1С» для бухгалтеров и руководителей

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

Программирование - Инструментарий

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

Проблема была решена использованием измененного шрифта (шрифт и демо обработка для управляемых форм во вложении). Часть ненужных символов в кириллице была заменена на жирные. Сам шрифт Liberation Serif является бесплатным (GNU GPLv2). Ниже приведен код из приложенной обработки для вывода части текста жирным. Тестировалось на платформе 1С:Предприятие 8.3 (8.3.10.2561) в конфигурации 1С:ERP Управление предприятием 2 (2.4.1.189).


&НаСервере
Функция ВывестиТабДокНаСервере()
	ТабДок=Новый ТабличныйДокумент;
	Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
	Область=Макет.ПолучитьОбласть("Шапка");	
	Область.Параметры.Текст="Демонстрация части текста "+СделатьЖирным("жирным")+" в табличном документе";
	ТабДок.Вывести(Область);
	Возврат ТабДок;
КонецФункции

&НаСервере
Функция СделатьЖирным(ИсходнаяСтрока)
	СтрокаПодмены="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿāĂĄąĆćĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġ";
	СтрокаПоиска="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдужзийклмнопрстнфхцчшщъыьэюяё!#$%&()*+,-./0123456789:;<=>№";
	НоваяСтрока="";
	Для  х=1 по СтрДлина(ИсходнаяСтрока) Цикл
		 ТекСимвол=Сред(ИсходнаяСтрока,х,1);
		 Если СтрНайти(СтрокаПоиска,ТекСимвол)>0 Тогда
			НоваяСтрока=НоваяСтрока+Сред(СтрокаПодмены,СтрНайти(СтрокаПоиска,ТекСимвол),1); 
		 Иначе
			НоваяСтрока=НоваяСтрока+ТекСимвол; 
			КонецЕсли;
		КонецЦикла;	
		Возврат НоваяСтрока;
КонецФункции

&НаКлиенте
Процедура ВывестиТабДок(Команда)
	ВывестиТабДокНаСервере().Показать("Демо");
КонецПроцедуры

Правда, у этого метода есть и недостаток (помимо необходимостьи установки шрифта на клиенте и/или сервере). 1С в табличном документе не выравнивает шрифты по ширине, кроме нескольких стандартных (Arial, Tahoma, New York Times...). Надеюсь, этот недостаток будет в ближайшее время все же исправлен разработчиком.

Скачать файлы

Наименование Файл Версия Размер
Шрифт и демо обработка для управляемых форм
.zip 203,80Kb
26.09.17
3
.zip 203,80Kb 3 Скачать

См. также

Комментарии
1. DUH Technolover (DJDUH) 17 27.09.17 11:00 Сейчас в теме
Костиль по-проще - это "Текст" но тогда нужно играть в тетрис блд)
6. Игорь Пашутин (Alien_job) 134 29.09.17 14:18 Сейчас в теме
(1) Можете пояснить? непонятно что за "Текст", блд)
7. DUH Technolover (DJDUH) 17 30.09.17 07:10 Сейчас в теме
(6)ну шейпами. Фигурами с текстом
2. Валерий Дяченко (davealone) 27.09.17 11:12 Сейчас в теме
Лучше уж на ячейки разбить и оформление поменять. Ну или макет в Word.
Если я захочу потом выделить жирный текст и погуглить его?
user600603_v.soldatova; Orlando Skibraves; NazarovV; 1Cuser38; h00k; kraynev-navi; mrDSide; Darklight; sasha777666; +9 1 Ответить
3. kiruha Д (kiruha) 363 28.09.17 19:14 Сейчас в теме
Плюс за интересную идею, но как только кому то пошлют накладную...
krosaf4eg; shard; JohnyDeath; +3 Ответить
4. Андрей К (h00k) 45 28.09.17 20:37 Сейчас в теме
(0)
New York Times

Что за чудо шрифт такой?!
5. Андрей Суханцов (&rew) 7 29.09.17 07:38 Сейчас в теме
(4) О, это такой же как знаменитый шрифт Komsomolskaya pravda, только наклонен чуть в сторону запада.
WellMaster; Vlad_2008; hornet_X; shard; BiTwaR; JohnyDeath; NazarovV; rujiy_kot; h00k; Muzik92; корум; mrXoxot; +12 Ответить
8. Uladzimir - (nvv1970) 05.10.17 14:05 Сейчас в теме
&НаСервере
Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет")
Где-то умер один хороший 1с-ник.
И, да,... нужно БОЛЬШЕ контекстных вызовов!
10. Fomix (fomix) 24 10.10.17 18:44 Сейчас в теме
(8) Это упрёк или так... занудство? Что тут крамольного "Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет")"?!
11. Uladzimir - (nvv1970) 10.10.17 21:36 Сейчас в теме
(10) Если вы все еще считаете, что бесполезное создание объекта - это норма, тогда упрек.
РеквизитФормыВЗначение("Объект") это стало почти рудиментом и используется совместимости с "обычноформенными" программистами. В программировании уже почти не встречается, только в очень особых случаях.
Здесь: почему бы макет не получить из менеджера и БЕЗ контекстного вызова?
Контекстные вызовы - основная проблема производительности УФ.

АП: И туда же, в копилку антипроизводительности, передача ТабличногоДокумента с сервера на клиент. Уж не знаю, почему 1с не оптимизировала это действие на уровне платформы, да еще и в типовых так же делает. Но большой таблдок может передаваться пару минут (даже на одном хосте), а если через временное хранилище - пролазит даже по сетке за секунду.
12. Fomix (fomix) 24 11.10.17 10:09 Сейчас в теме
(11) [IS-QUOTE] >> Здесь: почему бы макет не получить из менеджера и БЕЗ контекстного вызова? <<
Из менеджера конечно можно, а если это внешняя печатная форма или обработка, тогда как?! Ваше решение?

>>И туда же, в копилку антипроизводительности, передача ТабличногоДокумента с сервера на клиент<<
Аналогично. Ваше решение для ВПФ...
9. Артем Иванов (artemusII) 07.10.17 20:12 Сейчас в теме
В аду есть котел специально для таких упырей, которые не соблюдают форматирование и херачат все в одну строку без пробелов и разделителей. Блевать хочется при чтении такого кода.
Оставьте свое сообщение