Имя: Пароль:
1C
 
Как нарисовать форму програмно
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
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)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший