|
Как нарисовать форму програмно | ☑ | ||
---|---|---|---|---|
0
KeyKB
18.02.15
✎
16:29
|
Всем привет.
Задача следующая: Есть регистр сведений (хотя это не принципиально) в котором пользователь создает записи с полями "Наименование" и "Хранилище значений" (Хранилище содержит макет табличного документа). Есть форма, на которой есть панель с закладками. Я программно обхожу регистр и на каждую запись создаю закладку на этой панели. А на каждой закладке размещаю ПолеТабличногоДокумента с макетом в соответствиии с записью в регистре. Внимание вопрос: как мне подогнать размеры ПолеТабличногоДокумента под размеры закладки??? |
|||
1
vicof
18.02.15
✎
16:32
|
Использовать привязки
|
|||
2
KeyKB
18.02.15
✎
16:34
|
Не помогает. Точнее привязки работают, но первоначально надо создать ПолеТабличногоДокумента максимально заняв закладку. Если ошибаюсь с размером, по потом размеры изменяются пропорционально форме .т.е. привязки работают
|
|||
3
mikecool
18.02.15
✎
16:37
|
(2) не пробуй "максимально заняв закладку"
кидай полетабдокумента и указывай ему привязки - само развернется как скажешь |
|||
4
KeyKB
18.02.15
✎
16:38
|
(3) не работает, если не задать размеры, то поле вообще не видно (визуально), программно можно увидеть, что элемент формы существует, но он получается невидим.
|
|||
5
KeyKB
18.02.15
✎
16:40
|
Сразу расскажу "АвтоРазмер = Истина" тоже не помогает
|
|||
6
KeyKB
18.02.15
✎
16:42
|
up
|
|||
7
vicof
18.02.15
✎
16:43
|
растягиватьПоГоризонтали не?
|
|||
8
KeyKB
18.02.15
✎
16:44
|
(7) Подробнее, не уловил мысль???
|
|||
9
vicof
18.02.15
✎
16:44
|
Расширение поля формы для поля табличного документа.РастягиватьПоВертикали (Form field extension for a spreadsheet document field.VerticalStretch)
Расширение поля формы для поля табличного документа (Form field extension for a spreadsheet document field) РастягиватьПоВертикали (VerticalStretch) Использование: Чтение и запись. Описание: Тип: Булево. Указывает возможность растягивания по вертикали. Истина - растягивание разрешено. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент. Изменение свойства на клиенте требует обращения к серверу. |
|||
10
KeyKB
18.02.15
✎
16:49
|
(9) Во-первых у ЭлментаФормы такого свойства нет.
А во-вторых это свойство всего лишь дает возможность пользователю изменять размер, а не растягивает элемент. |
|||
11
KeyKB
18.02.15
✎
16:49
|
По-моему так.
|
|||
12
KeyKB
18.02.15
✎
16:54
|
Если поможет:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПанелиЗаказа.Наименование, | ПанелиЗаказа.Макет |ИЗ | РегистрСведений.ПанелиЗаказа КАК ПанелиЗаказа |ГДЕ | ПанелиЗаказа.Использовать = ИСТИНА"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл ИмяТабличногоДокумента = "ПТД_" + СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Выборка.Наименование," ",""),".",""),",",""),"-",""); ИмяПанели = "Страница_" + СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Выборка.Наименование," ",""),".",""),",",""),"-",""); Если ЭлементыФормы.ПанельЗаказа.Страницы.Найти(ИмяПанели) = Неопределено Тогда ЭлементыФормы.ПанельЗаказа.Страницы.Добавить(ИмяПанели,Выборка.Наименование); ЭлементыФормы.ПанельЗаказа.ТекущаяСтраница = ЭлементыФормы.ПанельЗаказа.Страницы[ИмяПанели]; ЭлементыФормы.Добавить(Тип("ПолеТабличногоДокумента"),ИмяТабличногоДокумента,Истина,ЭлементыФормы.ПанельЗаказа); //ЭлементыФормы[ИмяТабличногоДокумента].АвтоМасштаб = истина; //ЭлементыФормы.ПолеТабличногоДокумента1.ширина = 10; ЭлементыФормы[ИмяТабличногоДокумента].Лево = 6; ЭлементыФормы[ИмяТабличногоДокумента].Верх = 6; //ЭлементыФормы[ИмяТабличногоДокумента].Ширина = 1003; РастягиватьПоВертикали //ЭлементыФормы[ИмяТабличногоДокумента].Высота = 341; //ЭлементыФормы[ИмяТабличногоДокумента].РастягиватьПоВертикали ЭлементыФормы[ИмяТабличногоДокумента].УстановитьПривязку(ГраницаЭлементаУправления.Лево,ЭлементыФормы.ПанельЗаказа,ГраницаЭлементаУправления.Лево); ЭлементыФормы[ИмяТабличногоДокумента].УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлементыФормы.ПанельЗаказа,ГраницаЭлементаУправления.Право); ЭлементыФормы[ИмяТабличногоДокумента].УстановитьПривязку(ГраницаЭлементаУправления.Верх,ЭлементыФормы.ПанельЗаказа,ГраницаЭлементаУправления.Верх); ЭлементыФормы[ИмяТабличногоДокумента].УстановитьПривязку(ГраницаЭлементаУправления.Низ,ЭлементыФормы.ПанельЗаказа,ГраницаЭлементаУправления.Низ); //ЭлементыФормы["ТД"+СтрЗаменить(Выборка.Наименование," ","")]. КонецЕсли; КонецЦикла; |
|||
13
Крошка Ру
18.02.15
✎
16:55
|
ПолеРегистра = ЭлементыФормы.Добавить(Тип("ТабличноеПоле"),
СтрокаТаблицы.Имя, Истина, ЭлементыФормы.ОсновнаяПанель); ПолеРегистра.Данные = "ДокументОбъект.Движения." + СтрокаТаблицы.Имя; Если НЕ ЭтоНовый() Тогда ПолеРегистра.Значение.Прочитать(); КонецЕсли; ПолеРегистра.Верх = 30; ПолеРегистра.Лево = 6; ПолеРегистра.Ширина = ЭлементыФормы.ОсновнаяПанель.Ширина - 14; ПолеРегистра.Высота = ЭлементыФормы.ОсновнаяПанель.Высота - 56; |
|||
14
KeyKB
18.02.15
✎
16:59
|
(13) Размеры разные каждый раз...
Во-первых окно может открываться минимизированным Во-вторых, название закладок разное, т.е. размер наименования угадать невозможно, следовательно невозможно угадать сколько места эти закладки съедают от основной панели |
|||
15
KeyKB
18.02.15
✎
17:02
|
Смотри:
http://imhocloud.com/image/eGZ |
|||
16
Крошка Ру
18.02.15
✎
17:02
|
(14) Пусть открывается минимизированным, полосы прокрутки на что?
Не понял про "сколько места эти закладки съедают от основной панели". Каждая занимает всю панель, не? Ты просто переключаешься между ними |
|||
17
KeyKB
18.02.15
✎
17:03
|
(16) Смотри 15 пост.
Закладки могут занимать место по первую красную линию, а могут по вторую, следовательно и размер ПТД будет разным |
|||
18
Крошка Ру
18.02.15
✎
17:04
|
(15)Ааа
Так СтрДлина(<тут наименование закладки>) на что? |
|||
19
KeyKB
18.02.15
✎
17:05
|
(18) Вариант, но не очень хочется сидеть и переводить единицы измерений текста (т.е. количество символов) в пикселы, ну или в чём там меряется панель.
|
|||
20
KeyKB
18.02.15
✎
17:07
|
(18) Ещё момент, "Ш" - занимет например 3 у.е., а "I" - 1 у.е., но с точки зрения СтрДлина это будет 1.
|
|||
21
Крошка Ру
18.02.15
✎
17:08
|
(20) Что-то как-то запутанно...
Может закладки второго уровня тоже вверху сделать? |
|||
22
KeyKB
18.02.15
✎
17:13
|
(21) Согласен, что запутано, вчера мозг себе вывихнул. рассматривал вариант с переносом закладок, но тут тоже засада. Заказчик хочет видеть сразу все закладки, а следовательно подходит размещение закладок либо Сверху (в несколько строк, либо снизу, тоже в несколько строк. Но тут полегче будет. Т.к. Каждый ряд съедает от формы определенное количество пикселей, но количество этих рядов вычислить нельзя ))))
|
|||
23
vicof
18.02.15
✎
17:15
|
(22) Можно попробовать сначала не отображать закладки, растягивать элементы на всю ширину, потом показывать закладки
|
|||
24
KeyKB
18.02.15
✎
17:15
|
(23) Не уловил ход мысли???
|
|||
25
vicof
18.02.15
✎
17:20
|
Создаешь панель. Убираешь отображение закладок, создаешь поля табдоков, включаешь отображение закладок
|
|||
26
KeyKB
18.02.15
✎
17:24
|
(25) Я конечно подозревал, что не поможет, но всё-таки попробывал. Нет, не помогло. Ещё есть идеи????
|
|||
27
KeyKB
18.02.15
✎
17:25
|
Кстати через задние ворота можно подогнать ширину, только что придумал:
Сч = 50; Пока Сч - ЭлементыФормы[ИмяТабличногоДокумента].Ширина = 1 или Сч = 50 Цикл ЭлементыФормы[ИмяТабличногоДокумента].Ширина = Сч; Сч = Сч + 1; КонецЦикла; Но это не работает для высоты. |
|||
28
KeyKB
18.02.15
✎
17:30
|
вверх
|
|||
29
Крошка Ру
18.02.15
✎
17:35
|
Ну если зафиксировать шрифт, то можно сделать таблицу соответствия алфавита и ширины букв, по ней определять
|
|||
30
KeyKB
18.02.15
✎
18:01
|
(29) Ширину можно подбирать как я показал в (27) это проще. А вот высоту не подберёшь.
|
|||
31
KeyKB
18.02.15
✎
20:11
|
Если кому интересно...
Ну как всегда... ларчик просто открывался. Как я говорил можно ка в посте (27) , но ... ВНИМАНИЕ: ЭлементыФормы[ИмяТабличногоДокумента].Ширина = 99999; ЭлементыФормы[ИмяТабличногоДокумента].Высота = 99999; Он всё сам делает, только проблема в том, что у страницы появляются колесо прокрутки, пришлось после всего сделать так ЭлементыФормы[ИмяТабличногоДокумента].Ширина = ЭлементыФормы[ИмяТабличногоДокумента].Ширина-6; ЭлементыФормы[ИмяТабличногоДокумента].Высота = ЭлементыФормы[ИмяТабличногоДокумента].Высота-6; И ещё момент. Если выдерживать последовательность страница - ПТД - страница - ПТД - и т.д., то ПТд получаются разного размера, и на лицо форму перекашивает, поэтому, сначала создаются все страницы, а потом на них размещаются ПТД. Полный листинг кода далее Процедура ОбновитьПанельЗаказа() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПанелиЗаказа.Наименование, | ПанелиЗаказа.Макет, | ПанелиЗаказа.Код |ИЗ | РегистрСведений.ПанелиЗаказа КАК ПанелиЗаказа |ГДЕ | ПанелиЗаказа.Использовать = ИСТИНА"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл ИмяПанели = "Страница_" + Выборка.Код; Если ЭлементыФормы.ПанельЗаказа.Страницы.Найти(ИмяПанели) = Неопределено Тогда ЭлементыФормы.ПанельЗаказа.Страницы.Добавить(ИмяПанели,Выборка.Наименование); КонецЕсли; КонецЦикла; Выборка.Сбросить(); Пока Выборка.Следующий() Цикл ИмяТабличногоДокумента = "ПТД_" + Выборка.Код; ИмяПанели = "Страница_" + Выборка.Код; Если ЭлементыФормы.Найти(ИмяТабличногоДокумента) = Неопределено Тогда ЭлементыФормы.ПанельЗаказа.ТекущаяСтраница = ЭлементыФормы.ПанельЗаказа.Страницы[ИмяПанели]; ЭлементыФормы.Добавить(Тип("ПолеТабличногоДокумента"),ИмяТабличногоДокумента,Истина,ЭлементыФормы.ПанельЗаказа); ЭлементыФормы[ИмяТабличногоДокумента].ВертикальнаяПолосаПрокрутки = Ложь; ЭлементыФормы[ИмяТабличногоДокумента].ГоризонтальнаяПолосаПрокрутки = Ложь; ЭлементыФормы[ИмяТабличногоДокумента].Лево = 6; ЭлементыФормы[ИмяТабличногоДокумента].Верх = 6; ЭлементыФормы[ИмяТабличногоДокумента].Ширина = 99999; ЭлементыФормы[ИмяТабличногоДокумента].Высота = 99999; ЭлементыФормы[ИмяТабличногоДокумента].Ширина = ЭлементыФормы[ИмяТабличногоДокумента].Ширина-6; ЭлементыФормы[ИмяТабличногоДокумента].Высота = ЭлементыФормы[ИмяТабличногоДокумента].Высота-6; ЭлементыФормы[ИмяТабличногоДокумента].УстановитьПривязку(ГраницаЭлементаУправления.Лево,ЭлементыФормы.ПанельЗаказа,ГраницаЭлементаУправления.Лево); ЭлементыФормы[ИмяТабличногоДокумента].УстановитьПривязку(ГраницаЭлементаУправления.Право,ЭлементыФормы.ПанельЗаказа,ГраницаЭлементаУправления.Право); ЭлементыФормы[ИмяТабличногоДокумента].УстановитьПривязку(ГраницаЭлементаУправления.Верх,ЭлементыФормы.ПанельЗаказа,ГраницаЭлементаУправления.Верх); ЭлементыФормы[ИмяТабличногоДокумента].УстановитьПривязку(ГраницаЭлементаУправления.Низ,ЭлементыФормы.ПанельЗаказа,ГраницаЭлементаУправления.Низ); КонецЕсли; КонецЦикла; Если НЕ ЭлементыФормы.ПанельЗаказа.Страницы.Найти("ПустаяСтраница") = Неопределено Тогда ЭлементыФормы.ПанельЗаказа.Страницы.Удалить(ЭлементыФормы.ПанельЗаказа.Страницы.ПустаяСтраница); КонецЕсли; КонецПроцедуры Как всегда помогли думы в туалете. :-) |
|||
32
pescennius
18.02.15
✎
20:16
|
(0) Делаешь шаблон страницы, делаешь ее не видимой.
Потом копируешь и профит. |
|||
33
KeyKB
18.02.15
✎
20:20
|
(32) Неполучается, см (15) и (17)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |