Имя: Пароль:
1C
1С v8
Перенос текста по буквам в ячейке табличного документа
0 supervk
 
14.09.13
04:35
Как сделать перенос текста по буквам в ячейке табличного документа?

Есть этикетка (табличный документ), в которой область с названием. Это название размещается в ячейке с высотой в две строки. Названия длинные, надо, чтобы они разбивались на две строки по ширине ячейки, но не по словам, а по буквам. Без делений по слогам.

Т.е. например

Колбаса импортная вкусная

должно разделиться на две строки таким образом:

Колбаса импор|
тная вкусная |

Шрифт НЕ моноширинный, поэтому просчитать и заранее программно разбить на две строки через XX символов не удаётся (точнее, я не знаю как).
Как, всё-таки это сделать? Подскажите, пожалуйста.
1 mehfk
 
14.09.13
05:20
"Шрифт НЕ моноширинный, поэтому просчитать и заранее программно разбить на две строки через XX символов не удаётся (точнее, я не знаю как)."

Посчитай, сколько каджого символа твоего алфавита может войти в одну строку. И вычисли "коэффициент ширины", например к пробелу. Зная что в строку может уместиться n пробелов...
2 Мимохожий Однако
 
14.09.13
08:52
СтрДлина (StrLen)
Синтаксис:

СтрДлина(<Строка>)
Параметры:

<Строка> (обязательный)

Тип: Строка.
Исходная строка.
Возвращаемое значение:

Тип: Число.
Длина строки.
Описание:

Получает количество символов в строке.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Пример:

ДлинаНаименования = СтрДлина(Товар.Наименование);
3 Мимохожий Однако
 
14.09.13
08:52
В свойстве ячейки можно задать параметр Переносить...
4 supervk
 
14.09.13
09:12
(1) Ага, спасибо, mehfk, пока это единственный вариант.
(2) Только в сочетании с вариантом, предложенным mehfk (1), т.к. заранее неизвестно, сколько символов до конца края ячейки
(3) "Переносить" переносит по словам. А мне надо по буквам. т.е. чтобы целое слово разбивалось на две строки.
5 mistеr
 
14.09.13
09:51
(4) Можно написать ВК, которая будет рассчитывать точно с помощью функций WinAPI. Для конкретного текста, шрифта и разрешения принтера.
6 supervk
 
14.09.13
11:16
В общем, как я понял, простых решений (включить нужную галочку) не будет. Всем спасибо за помощь.
7 mehfk
 
14.09.13
17:45
(5) Вы уверны, что без ВК никак? Как-бэ текст переносит не ОС и не драйвер принтера. ПроверитьВывод и без ВК работает, не так ли? Просто это решение будет настолько тормозно, что автору лучше сделать так, как в (2) мысль дана.
8 mehfk
 
14.09.13
17:46
(7) + fix в (1)
9 МихаилМ
 
14.09.13
18:05
10 mistеr
 
15.09.13
01:34
(7) Я не утверждал, что никак. Я предложил как одно из решений.

(1) (2) способ не оптимальный. В худших случаях будет ошибаться, а значит придется брать запас по длине строки, часть места будет пропадать.
11 Torquader
 
15.09.13
16:23
Проще всего перейти на моноширинный шрифт или вообще печатать этикетку командами принтера - тогда ничего подгонять будет не надо - там сразу известно, сколько символов может быть в строке.
Перенос по буквам выглядит не очень. Сразу вспоминается:
Рассольник "Ленин
градский".
12 mistеr
 
15.09.13
17:23
(11) Моноширинным меньше влезет в две строки.
13 Torquader
 
15.09.13
18:20
(12) Зато гарантированно будут заполнены строки.
P.S. из файла ttf-шрифта можно узнать размеры символов, просто прочитав его силами самой 1С.
14 mistеr
 
15.09.13
18:57
(13) Или ВК.