Имя: Пароль:
1C
1С v8
Разбить строку на несколько
0 Креатив
 
22.03.12
10:34
Есть печатная форма. В ней не умещается значение строки в одну строку. Может кто видел или у кого-нибудь есть готовый алгоритм для разбивки по количеству символов. А то так ломает писать.
1 DrShad
 
22.03.12
10:35
а что там писать?
2 Reset
 
22.03.12
10:35
По количеству в общем случае недостаточно, т.к. ширина символов разная. Разве что моноширинный шрифт использовать
3 Креатив
 
22.03.12
10:39
(2)Количество можно завсегда занизить.
(1)Строк 10, а то и 15.
4 xard
 
22.03.12
10:40
(0) автоперенос отменили?
5 lxs
 
22.03.12
10:40
(4) +100500
6 Креатив
 
22.03.12
10:42
(4)Ты про тот, что в ячейках? Так он строку-то одну делает с разбухшим самомнением.
7 Reset
 
22.03.12
10:42
(3) Понятно, что _придется_ занижать. Т.е. в _большинстве_ случаев строка будет заполнена на 2/3
8 lxs
 
22.03.12
10:43
(7) у тебя пробела нет? или ты извращенец?
9 Reset
 
22.03.12
10:44
(7) Если на это пофиг, то проблема непонятна. Простейший цикл. +1 к (1)
10 Ненавижу 1С
 
гуру
22.03.12
10:44
РазмещениеТекста = Переносить
11 Reset
 
22.03.12
10:44
(8) У меня тэга <u> нет
12 lxs
 
22.03.12
10:46
(11) какого тега, ты о чем?
13 lxs
 
22.03.12
10:48
по теме, тебя чем не устраивает свойство ячейки "переносить"? Ты хочешь "лишний" текст в нижнюю ячейку писать?
14 Креатив
 
22.03.12
10:49
(13)Ага.
15 lxs
 
22.03.12
10:50
в таком случае для начала надо область добавить для строк, и потому тупо в цикле считать количество символов, но с учетом (2).
16 comp2006
 
22.03.12
10:51
Функция РазбитьСтрокуНаДвеЧасти(СтрокаДляРазбивки, Разделитель, КолСимволовДляПервойЧасти)
   СтруктураРазбитыхСтрок = Новый Структура;
   МассивЧастейСтроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаДляРазбивки, Разделитель);
   Строка1 = "";
   Строка2 = "";
   КонтрСтрока = "";
   Если МассивЧастейСтроки.Количество() > 0 Тогда
       Для Каждого Значение Из МассивЧастейСтроки Цикл
           КонтрСтрока = КонтрСтрока + " "+Значение;
           Если СтрДлина(КонтрСтрока)< КолСимволовДляПервойЧасти Тогда
               Строка1 = Строка1 + " "+Значение;
           Иначе
               Строка2 = Строка2 + " "+Значение;
           КонецЕсли;
       КонецЦикла;    
   КонецЕсли;
   
   СтруктураРазбитыхСтрок.Вставить("Строка1", СокрЛП(Строка1));
   СтруктураРазбитыхСтрок.Вставить("Строка2", СокрЛП(Строка2));
   Возврат СтруктураРазбитыхСтрок;
   
КонецФункции
17 Reset
 
22.03.12
10:51
(12) У тебя цель докопаться или ты не проснулся? Я хотел подчеркиванием выделить слова.
18 Креатив
 
22.03.12
10:52
(16)Интересно, но не совсем то.
19 lxs
 
22.03.12
10:53
(17) закрыли тему) все ок
20 comp2006
 
22.03.12
10:54
(18) Понимаю! Это просто заготовка.
21 Креатив
 
22.03.12
11:00
Ладно, всем спасибо. Лень удалось забороть. Сейчас наваяю.
22 Йохохо
 
22.03.12
11:21
(0) ширина столбца = 1.25*Количество символов
по памяти с ИТС, не проверял, мб 1.15, где то в стандартах разработки интерфейса
23 Креатив
 
22.03.12
11:47
Если кому интересно. стр - исходная строка, ТЗ - две колонки, предел - число символов в строке, строка - полученный обрезок
Процедура РазбитьНаСтроки(стр, ТЗ)
   стр1 = СокрЛП(стр);
   Для Каждого стрк Из ТЗ Цикл
       Если СтрДлина(стр1) = 0 Тогда
           Прервать;
       КонецЕсли;
       предел = стрк.предел;
       длн = 0;
       пп = Найти(стр1, " ");
       Если пп = 0 Тогда
           пп = СтрДлина(стр1);
       КонецЕсли;
       Пока (длн + пп < предел) и (СтрДлина(стр1) > 0) Цикл
           стрк.строка = "" + стрк.строка + Лев(стр1, пп);
           стр1 = Сред(стр1, пп + 1);
           длн = длн + пп;
           пп = Найти(стр1, " ");
           Если пп = 0 Тогда
               пп = СтрДлина(стр1);
           КонецЕсли
       КонецЦикла
   КонецЦикла
КонецПроцедуры
24 Йохохо
 
22.03.12
14:24
открой тайну предела )
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.