Имя: Пароль:
1C
1С v8
Динамические поля ввода
0 Aleksey1989
 
12.04.12
09:07
Подскажите, пожалуйста, можно ли как-нибудь сделать так, чтобы поля ввода были динамическими, т.е. допустим, если текст, который вводится для них - помещается в одну строку, то ничего не надо делать, а если в несколько строк - то поля ввода должны увеличиваться по высоте, чтобы был виден весь текст (имеется ввиду, что свойство многострочный ввод у поля ввода установленно в "Истина")?
1 Андрюха
 
12.04.12
09:09
Никак.
2 Cube
 
12.04.12
09:09
УФ?
3 Cube
 
12.04.12
09:09
(1) Ну почему же...
4 Андрюха
 
12.04.12
09:11
Тогда тоже с интересом послушаю...
5 Aleksey1989
 
12.04.12
09:11
(2) да, УФ.
(1) Месяц назад я добивался этого эффекта, но была одна ошибка: при изменении высоты поля ввода текст, который был там введенн, удалялся.
М.б. можно использовать другие элементы в 1С?
6 Рэйв
 
12.04.12
09:18
(5)Перед изменением размера залить текст в буфер, после вернуть на место?
7 Aleksey1989
 
12.04.12
09:22
(6) Я насколько помню по такому принципу и делал, но почему-то у меня не получалось, т.е. в буфер ничего не сохранялось, м.б. потому что я делал это в событии "При изменении" поля ввода, а для того, чтобы текст оказался в буфере, надо закончить ввод.
8 Cube
 
12.04.12
09:33
(5) Ну я пробую так:

&НаКлиенте
Процедура Реквизит1АвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
   
   Элемент.Высота = Окр(СтрДлина(Текст) / 43, 0, РежимОкругления.Окр15как20);
   Реквизит1 = Текст;
   
КонецПроцедуры //Реквизит1АвтоПодбор()

Но пока такая проблема - текст съезжает вверх. То есть начало строки не видно при увеличении высоты поля ввода, чтобы его увидеть, нужно курсор сдвинуть в начало строки.
9 vmv
 
12.04.12
09:40
ну почему же никак - чо ви сдаетесь сразу

на УФ

я делаю так, допустим у меня есть реквизит данных "Показатель" на форме, кторый имеет тип "Характеристика".
Возможные типы этой характеристики "число(2,0), строка(20) фикс., строка неограниченная.

Я делаю так, создаю Группу страниц "СтраницыПоляВводаПоказатель" и
Страницы и элементы формы с данными "Показатель"
"СтраницаПолеВводаПоказателЧисло"      "ПоказательЧисло"
"СтраницаПолеВводаПоказателСтрокаФикс" "ПоказательСтрокаФикс"

"СтраницаПолеВводаПоказателСтрокаМакс" "ПоказательСтрокаМаск"

каорче как потом управлять типами и страница - это детский сад младшая группа, если решить проблему с размерами страниц, вообще мне надаоло жевать ету щнягу, пользуйтесь - все вазможно
10 vmv
 
12.04.12
09:41
(8) расстрелять
11 vmv
 
12.04.12
09:46
+(9) естественно у страниц не должно быть заголовков, закладок и прочей бойды, т.е. юзер видит привычную плоскую форму и что там числюшка в два символа или текст в 10 киломметров - это решает управляющий реквизит, например, тип показателя.

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

усе - идите работайте, кофейня закрывается
12 Cube
 
12.04.12
09:46
(9) Ты тему прочитай ещё раз, можно на два раза. Ему надо увеличить поле ввода в высоту, а не поменять тип.
13 Cube
 
12.04.12
09:48
(11) Ну и сколько ты страниц собираешься сделать на форме, чтобы и текст в одну строку и в 20 строк нормально отображались? А если таких реквизитов на форме больше одного? Мда...
14 vmv
 
12.04.12
09:48
(12) а ты почичай паять раз - тип тут для примера тока, но если тебя трудно понять логики предложенного мной решения задачи в (0), то на пересдачу готовся)
15 vmv
 
12.04.12
09:50
(13) сколько нужно столько и создам, но УФ - это просто и переключение страниц не юзает сервер, а вот программное изменение размеров элементов формы - это смертная казнь, ладно предлагаю повешение, расстрел это для саботажников)
16 Cube
 
12.04.12
09:52
(15) Давай пример обработки с двумя реквизитами на форме, неизвестно сколько символов будет в каждом. Базары базарить каждый может, да деле докажи свою точку зрения, экзаменатор фигов...
17 vmv
 
12.04.12
09:53
+(13) и есть свойства разворачивания для фикс. строки группу фиксируешь, для неораниченной принудительно развочиваешь и т.д., но на своих страницах.

Хотя зря я это написал, пока это слишком сложно для твоей закостенелой замшелой философии форм
18 vmv
 
12.04.12
09:54
(16) это платно) потрудись сам свять, я уже давно юзаю так динамику, да и тут примеры приводил

до чего народ ленивый пошел - дай г, да еще и ложку, мдя
19 Cube
 
12.04.12
09:55
(18) Балабол.
20 vmv
 
12.04.12
09:57
(19) тещься и пиши г-код, я не против - у каждого свое ДАО)
21 vmv
 
12.04.12
09:58
(8) классический образчик г-кода, я думал так токлько девочки пишут после школы)
22 Cube
 
12.04.12
09:58
(20) Фиксиным попахивает... Ты, случайно, не он?
23 Aleksey1989
 
13.04.12
09:01
Я почти закончил с формированием динамических полей ввод, попозже выложу код.
Сейчас мне надо знать, как в логике программы указать, появились ли полосы прокрутки у поля или нет? Т.е. условие будет таким: Если появились полосы прокрутки, то надо увеличить высоту поля на 1. Я не знаю, есть ли в 1С возможность такой проверки.
24 vmv
 
13.04.12
09:12
(23) делаешь программный скрин экрана и отправляешь файл скрина в графический анализатор и там получаешь результат да/нет)
25 orefkov
 
13.04.12
09:14
vmv всегда много трещит, чужой код всегда называет гкодом, своего кода не показывает, собеседника гнобит, при прижатии к стенке - сливается.
26 Aleksey1989
 
13.04.12
09:14
(24) А если серьезно - то никак.
27 Aleksey1989
 
13.04.12
09:31
Вот набросок кода, но в нем есть ошибка для переменной СчетчикДлины, никак не могу понять, почему она появляется, ведь она объявлена до использования, ей назначено значение, а все равно появляется ошибка: "Переменная не определена (СчетчикДлины)Если СтрДлина(Текст)><<?>>СчетчикДлины тогда (Проверка: Тонкий клиент)"
Сам код:
Перем СчетчикДлины;


&НаКлиенте
Процедура ПриОткрытии(Отказ)
   СчетчикДлины = 100;
КонецПроцедуры


&НаКлиенте
Процедура Реквизит1АвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
   
   Если СтрДлина(Текст)>СчетчикДлины тогда
       ЭтаФорма.Элементы.Реквизит1.Высота = ЭтаФорма.Элементы.Реквизит1.Высота+1;
       СчетчикДлины = СчетчикДлины + 100;
   КонецЕсли;

   Реквизит1 = Текст;
   
   
КонецПроцедуры
28 Aleksey1989
 
13.04.12
09:38
(27) Проблему решил вводом реквизита формы. Но все равно интересно, почему возникала ошибка.
29 orefkov
 
13.04.12
10:06
(27)
В модулях УФ на переменные модуля тоже действуют директивы &НаСервере, &НаКлиенте и т.п.
По умолчанию, если ничего не указано - &НаСервере.
Попробуй

&НаКлиенте
Перем СчетчикДлины;
30 Cube
 
13.04.12
14:30
(27) Зачем тебе вообще переменная? Сделай так:

&НаКлиенте
Процедура Реквизит1АвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
   
   Элемент.Высота = Окр(СтрДлина(Текст) / 100);
   Реквизит1 = Текст;
   
КонецПроцедуры //Реквизит1АвтоПодбор()
31 Aleksey1989
 
13.04.12
14:48
(30) Так тоже можно, но мне пока не очень понятно, каким образом считается высота: допустим, длина строки 200 символов, делим на 100 - получаем 2, т.е. высота будет равна 2-м. А если в поле ввода в одну строку помещается 300 символов (к примеру), то, получается, строка вовсе не нужна.

И еще: почему-то курсор постоянно возвращается в начало строки.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.