Область таблицы(печатной формы) и размер шрифта?

Автор MWW_Ruza, 08 июня 2024, 19:12

« назад - далее »

MWW_Ruza

Обнаружил у себя пробел в знаниях...
Ну, за все годы не приходилось ничего такого делать, а тут вдруг решил, и облом...  ???

Хотелка - в зависимости от длины строки в ячейке таблицы, менять размер шрифта.
Казалось бы - все есть, через Область...
Вот так попробовал:

ОблФирм = Таб.Область("R1C2:R1C2");
ОблФирм.РазмерШрифта(8);

И не работает так, как мне надо:

Без этого:


С этой добавкой:


В конфигураторе:


Не могу понять, что я не так делаю?

PS Нет, я конечно понимаю, что это можно сделать отдельными секциями, с разными размерами шрифта для разной длины строки... Но, лениво... Думал, так проще получится. А оно вон как >:(

Злоп

сделай отдельный макет
на макете установи строку (куда выводишь наименование) тоц высоты - макимальной фиксированной, какой она на твоей этикетке. Эта строка будет единственной секцией.
.
размеры "листа" вывода сделай ровно такими как эта секция. (большое поле на а; или аналогично на этикетку).
.
выводи эту секцию в черновик на этот "лист". Если количество страниц (метод есть!) =2 значит секция не влезла, уменьшай шрифт в секции и выводи повторно.
.
на ИС у меня есть разработка точо такая 

Злоп


Злоп

Все правильно делаешь
Обл = Таб.Область(...);
Обл.РазмерШрифта(РазмерШрифта);
.
только не "..в зависимости от длины строки в ячейке таблицы, менять размер шрифта.", а в зависимости от количества страниц того, что должно умещаться на одной странице

Злоп

"Не могу понять, что я не так делаю?"
-отсюда не видно почему у тебя без добавки и с добавкой - ширина колонки различная...

Злоп


MWW_Ruza

Хм... Странно все это... Сам вижу, что делаю вроде все правильно - там есть то "три сосны", "заблудиться" негде  >:(

Что касается определения "влезло/не влезло" не по длине строки, а через отдельный вывод "черновика и подсчета получившихся страниц", я понял, идея интересная, попробую.

Но, до этого у меня поки и не дошло - я для эксперимента, просто добавил в процедуру вывода ПФ две строчки, так, как не делал такого раньше, как-то не было необходимости... Просто захотел попробовать, как размер шрифта "рулится" программно. Размер в тексте модуля ставлю вручную - сейчас там 8, как задано в макете, пробовал 10, 11, 12 - пофик. В выводимой форме в этой области ничего не меняется, а в следующей за ней все ломается, и ширина меньше делается...
На скриншоте видно.
Попробую сделать отдельную обработку для проверки/демонстрации этого "эффекта"...

PS У меня уже "крамольная" мысль - может дллка, отвечающая за вывод мокселя, в платформе так отрабатывает?
У меня она там не совсем стандартная - я использую решение с инфостарта, которое позволяет "в одну строку" подменять сохранение ПФ вместо xls в xlsx, а вместо txt в pdf(интеракиивно, из меню "Сохранить как") - ???
У меня это давно и успешно везде работает, очень удобно, косяков не замечал...
Но, может "кривая" работа с областями, это побочный эффект этой доработки, просто областями ранее не пользовался и не видел такого?
 

MWW_Ruza

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

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

MWW_Ruza

Вот, исходная обработка, переделанная так, что-бы работала в любой конфе, даже пустой:
Ссылка на архив в облаке майл.ру
При открытии задает вопрос про размер шрифта. Если не трогать и оставить 0, то эти строчки не отрабатывают, работает штатно, без проблем.
Если ввести любое число, отличное от 0, то эффект, как на скриншотах в начале темы.

MWW_Ruza

Хм... Похоже, что-то не так делаю с определением области для изменения размера шрифта...
В исходной таблице(макете, в терминах снеговика), область R1C2, а при выводе на печать, почему-то на строку вниз "съезжает", и пустая строка первая добавляется:



Похоже, все-таки я что-то делаю не так :-\

Djelf

Ты указываешь координаты области и ее оформление до ее фактического вывода в таблицу в этом случае ширина колонок неопределена,  содержание области тоже неопределено, вылезает лишняя строка, остальные строки вслед за ней корёжатся по ширине.

MWW_Ruza

Понятно...

Да, перенес в:
            Таб.ПрисоединитьСекцию("Товар|Ценник");
           
            //    Отладка 09.06.2024
            Если ЗадаемРазмШрифта > 0 Тогда
                ОблФирм = Таб.Область("R1C2:R1C2");
                ОблФирм.РазмерШрифта(ЗадаемРазмШрифта);
            КонецЕсли;       


КонецПроцедуры // ДобавитьЦенник()

после добавления секции, все заработало.
Спасибо за подсказку, буду знать  :)

MWW_Ruza

В общем, Сергей, твой вариант определения критерия, по которому нужно менять размер шрифта, безусловно интересный, но имеет смысл, когда в ячейке включен перенос по слогам, т.е. в ячейке(и соответственно в области), многострочный текст...
В моем-же конкретном случае, строка точно одна - заголовок... Больше, просто не имеет смысла для этой задачи. И размеров  шрифтов для этого ценника больше двух не будет - 8 и 10...
Поэтому, не стал заморачиваться с вспомогательной таблицей, сделал по длине строки:
СтрЗаг			= СокрЛП(Строка(РабочаяДата()) + "            " + ПечФирма);
			ПечСтрЗаг		= СтрЗаг;
			Таб.ПрисоединитьСекцию("Товар|Ценник"); 
	 		//	Отладка 09.06.2024
	 		Если ТипЦенника = 2 Тогда
	 			ДлинаСтроки = СтрДлина(СтрЗаг);
	 			Если ДлинаСтроки - 6 >= 33 Тогда
	 				РазмШрифта 	= 8;
	 			Иначе
	 				РазмШрифта	= 10;
	 			КонецЕсли;
 				ДлОтступа 	= Мин(33 - СтрДлина(ПечФирма + РабочаяДата()), 12);
 				Отступ 		= "";
 				СчОтст		= 0;
 				Для СчОтст = 1 По Длотступа Цикл
 					Отступ	= Отступ + " ";
 				КонецЦикла;	               
 				СтрЗаг			= СокрЛП(Строка(РабочаяДата()) + Отступ + ПечФирма);	 			
	 			ПечСтрЗаг		= СтрЗаг;
				ОблФирм 		= Таб.Область("R1C2:R1C2");
				ОблФирм.РазмерШрифта(РазмШрифта);
				ОблФирм.Текст	= ПечСтрЗаг;
			КонецЕсли;
Конечно, не так универсально, как в твоем варианте, но, для конкретной задачи - вполне :)

Всем СПАСИБО! :)

MWW_Ruza

Там было вывод даты печати ценника и фирмы в одной ячейке, шаблоном... Делал не я, это было так в исходнике, на основе чего делал... Переделывать лень, оставил так, просто вместо шаблна формлу сделал и в модуле формирую строку печати, с необходимым отступом между частями этого заголовка(от 6 до 12, в зависимости от длины всей строки)...

MWW_Ruza

Вообще, в очередной раз убеждаюсь - семерка "неисчерпаема", никогда не пользовался областями печатных форм(когда например нужно было подкрасить красным что-то на печати, делал отдельную секцию с "раскрашенными" ячейками, которую выводил вместо основной по условию), а тут понял, что можно было и через области делать. И вообще, там у области куча всего...
Вот так, век живи, век учись, и все равно дураком подохнешь.