![]() |
![]() |
![]() |
|
Как перенести программно элементы с формы элемента на панель? | ☑ | ||
---|---|---|---|---|
0
SNowflake
26.10.10
✎
16:00
|
Создаю программно панель и 2 страницы у этой панели. На форме документа уже есть табличная часть и командная панель. Как программно их перенести на панель?
|
|||
1
organizm
26.10.10
✎
16:02
|
может как-н. подругому сделать, например, скрывать панель с нужными элементами?..
|
|||
2
SNowflake
26.10.10
✎
16:04
|
(1) панели со страницами на форме еще нет. я их создаю програмно, потому как есть требование не менять форму руками. и ТЧ на эту панель надо перенести
|
|||
3
sergeante
26.10.10
✎
17:25
|
(0) сдаётся "легально" никак.
Кури Книга знаний: v8: Деструктивный анализ формы; http://infostart.ru/public/16262/ |
|||
4
le_
26.10.10
✎
17:27
|
(0) А сразу (не программно) создать панель и поместить на неё ТЧ и остальное из того, что нужно по каким причинам нельзя?..
|
|||
5
Aprobator
26.10.10
✎
17:30
|
во народ конструкторы форм на 1С изобретать любит - просто хлебом не корми.
|
|||
6
SNowflake
26.10.10
✎
17:31
|
(4) - нельзя менять форму, если что то нужно добавить - динамически! требование такое
|
|||
7
le_
26.10.10
✎
17:32
|
(6) Требование такое придумали, чтобы жизнь малиной не казалась? ) Смысл-то в чем такого требования?
|
|||
8
SNowflake
26.10.10
✎
17:33
|
(7) заказчик объясняет это усложнением обновления
|
|||
9
Mitriy
26.10.10
✎
17:33
|
(0) я так делал когда-то:
// //++ Митрий 20090805 Функция предназначена для "переноса" уже существующего элемента формы на другую панель //Параметры: // ЭлементыФормы - ЭлементыФормы, к которым добавляется элемент // ИмяЭлемента - Строка - Имя элемента // ЭлементПанель - Панель формы, на которую добавляется элемент // ИмяСтраницы - Строка - имя страницы панели // СдвигПоГоризонтали - Число - для сдвига элемента по горизонтали в случае надобности // СдвигПоВертикали - Число - для сдвига элемента по вертикали в случае надобности // // Возвращаемое значение: // Новый элемент формы или Неопределено // Функция СкопироватьЭлементФормы(ЭлементыФормы, ИмяЭлемента, ЭлементПанель, ИмяСтраницы = "", СдвигПоГоризонтали = 0, СдвигПоВертикали = 0) Экспорт //++ Митрий 20090804 ЭлементОбразец = ЭлементыФормы[ИмяЭлемента]; ЭлементОбразец.Имя = ИмяЭлемента + "_old"; Если ЗначениеЗаполнено(ИмяСтраницы) Тогда ЭлементПанель.ТекущаяСтраница = ЭлементПанель.Страницы[ИмяСтраницы]; КонецЕсли; Элемент = ЭлементыФормы.Добавить(ТипЗнч(ЭлементОбразец), ИмяЭлемента,, ЭлементПанель); Если ТипЗнч(Элемент) = Тип("РамкаГруппы") Или ТипЗнч(Элемент) = Тип("Панель") Тогда ПропуститьСвойства = "Имя, Данные"; ИначеЕсли ТипЗнч(Элемент) = Тип("Флажок") Тогда ПропуститьСвойства = "Значение, Имя, ТипЗначения"; Иначе ПропуститьСвойства = "Значение, Имя"; КонецЕсли; Попытка ЗаполнитьЗначенияСвойств(Элемент,ЭлементОбразец,,ПропуститьСвойства); ЭлементОбразец.Видимость = Ложь; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Если Элемент = Неопределено Тогда Сообщить("Не удалось добавить на форму элемент """ + ИмяЭлемента + ""); Отказ = Истина; Иначе Элемент.Верх = ЭлементОбразец.Верх + СдвигПоВертикали; Элемент.Лево = ЭлементОбразец.Лево + СдвигПоГоризонтали; Элемент.Ширина = ЭлементОбразец.Ширина; Элемент.Высота = ЭлементОбразец.Высота; СкопироватьПривязку(ЭлементыФормы, Элемент, ЭлементОбразец, ГраницаЭлементаУправления.Верх, ЭлементПанель); СкопироватьПривязку(ЭлементыФормы, Элемент, ЭлементОбразец, ГраницаЭлементаУправления.Лево, ЭлементПанель); СкопироватьПривязку(ЭлементыФормы, Элемент, ЭлементОбразец, ГраницаЭлементаУправления.Право, ЭлементПанель); СкопироватьПривязку(ЭлементыФормы, Элемент, ЭлементОбразец, ГраницаЭлементаУправления.Низ, ЭлементПанель); МассивСобытий = ПолучитьСписокСобытийЭлементаУправления(Элемент); Для Каждого Событие Из МассивСобытий Цикл Попытка Элемент.УстановитьДействие(Событие, ЭлементОбразец.ПолучитьДействие(Событие)); Исключение КОнецПопытки; КонецЦикла; КонецЕсли; Возврат Элемент; //-- Митрий 20090804 КонецФункции |
|||
10
SNowflake
26.10.10
✎
17:34
|
(9) спс, сейчас попробую
|
|||
11
Mitriy
26.10.10
✎
17:36
|
(10) вот еще используется:
// //++ Митрий 20090805 Функция предназначена для "переноса" уже существующего элемента формы на другую панель //Параметры: // ЭлементыФормы - ЭлементыФормы, к которым добавляется элемент // ИмяЭлемента - Строка - Имя элемента // ЭлементПанель - Панель формы, на которую добавляется элемент // ИмяСтраницы - Строка - имя страницы панели // СдвигПоГоризонтали - Число - для сдвига элемента по горизонтали в случае надобности // СдвигПоВертикали - Число - для сдвига элемента по вертикали в случае надобности // // Возвращаемое значение: // Новый элемент формы или Неопределено // Функция СкопироватьЭлементФормы(ЭлементыФормы, ИмяЭлемента, ЭлементПанель, ИмяСтраницы = "", СдвигПоГоризонтали = 0, СдвигПоВертикали = 0) Экспорт //++ Митрий 20090804 ЭлементОбразец = ЭлементыФормы[ИмяЭлемента]; ЭлементОбразец.Имя = ИмяЭлемента + "_old"; Если ЗначениеЗаполнено(ИмяСтраницы) Тогда ЭлементПанель.ТекущаяСтраница = ЭлементПанель.Страницы[ИмяСтраницы]; КонецЕсли; Элемент = ЭлементыФормы.Добавить(ТипЗнч(ЭлементОбразец), ИмяЭлемента,, ЭлементПанель); Если ТипЗнч(Элемент) = Тип("РамкаГруппы") Или ТипЗнч(Элемент) = Тип("Панель") Тогда ПропуститьСвойства = "Имя, Данные"; ИначеЕсли ТипЗнч(Элемент) = Тип("Флажок") Тогда ПропуститьСвойства = "Значение, Имя, ТипЗначения"; Иначе ПропуститьСвойства = "Значение, Имя"; КонецЕсли; Попытка ЗаполнитьЗначенияСвойств(Элемент,ЭлементОбразец,,ПропуститьСвойства); ЭлементОбразец.Видимость = Ложь; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Если Элемент = Неопределено Тогда Сообщить("Не удалось добавить на форму элемент """ + ИмяЭлемента + ""); Отказ = Истина; Иначе Элемент.Верх = ЭлементОбразец.Верх + СдвигПоВертикали; Элемент.Лево = ЭлементОбразец.Лево + СдвигПоГоризонтали; Элемент.Ширина = ЭлементОбразец.Ширина; Элемент.Высота = ЭлементОбразец.Высота; СкопироватьПривязку(ЭлементыФормы, Элемент, ЭлементОбразец, ГраницаЭлементаУправления.Верх, ЭлементПанель); СкопироватьПривязку(ЭлементыФормы, Элемент, ЭлементОбразец, ГраницаЭлементаУправления.Лево, ЭлементПанель); СкопироватьПривязку(ЭлементыФормы, Элемент, ЭлементОбразец, ГраницаЭлементаУправления.Право, ЭлементПанель); СкопироватьПривязку(ЭлементыФормы, Элемент, ЭлементОбразец, ГраницаЭлементаУправления.Низ, ЭлементПанель); МассивСобытий = ПолучитьСписокСобытийЭлементаУправления(Элемент); Для Каждого Событие Из МассивСобытий Цикл Попытка Элемент.УстановитьДействие(Событие, ЭлементОбразец.ПолучитьДействие(Событие)); Исключение КОнецПопытки; КонецЦикла; КонецЕсли; Возврат Элемент; //-- Митрий 20090804 КонецФункции |
|||
12
Mitriy
26.10.10
✎
17:37
|
мля...
Функция ПолучитьСписокСобытийЭлементаУправления(Элемент) Экспорт //++ Митрий 20090805 МассивСобытий = Новый Массив;; Если ТипЗнч(Элемент)=Тип("Кнопка") Тогда МассивСобытий.Добавить("Нажатие"); ИначеЕсли ТипЗнч(Элемент)=Тип("КоманднаяПанель") Тогда МассивСобытий.Добавить(""); ИначеЕсли ТипЗнч(Элемент)=Тип("Надпись") Тогда МассивСобытий.Добавить("Нажатие"); ИначеЕсли ТипЗнч(Элемент)=Тип("Панель") Тогда МассивСобытий.Добавить("ПриСменеСтраницы"); ИначеЕсли ТипЗнч(Элемент)=Тип("Переключатель") Тогда МассивСобытий.Добавить("ПриИзменении"); ИначеЕсли ТипЗнч(Элемент)=Тип("Флажок") Тогда МассивСобытий.Добавить("ПриИзменении"); ИначеЕсли ТипЗнч(Элемент)=Тип("ПолеВвода") Тогда МассивСобытий.Добавить("АвтоПодборТекста"); МассивСобытий.Добавить("НачалоВыбора"); МассивСобытий.Добавить("НачалоВыбораИзСписка"); МассивСобытий.Добавить("ОбработкаВыбора"); МассивСобытий.Добавить("ОкончаниеВводаТекста"); МассивСобытий.Добавить("Открытие"); МассивСобытий.Добавить("Очистка"); МассивСобытий.Добавить("ПриИзменении"); МассивСобытий.Добавить("Регулирование"); ИначеЕсли ТипЗнч(Элемент)=Тип("ПолеСписка") Тогда МассивСобытий.Добавить("Выбор,ПриАктивизацииСтроки,ПриИзмененииФлажка"); ИначеЕсли ТипЗнч(Элемент)=Тип("ПолеТабличногоДокумента") Тогда МассивСобытий.Добавить("Выбор"); МассивСобытий.Добавить("НачалоПеретаскивания"); МассивСобытий.Добавить("ОбработкаРасшифровки"); МассивСобытий.Добавить("ОкончаниеПеретаскивания"); МассивСобытий.Добавить("Перетаскивание"); МассивСобытий.Добавить("ПриАктивизацииОбласти"); МассивСобытий.Добавить("ПриИзмененииСодержимогоОбласти"); МассивСобытий.Добавить("ПроверкаПеретаскивания"); КонецЕсли; Возврат МассивСобытий; //-- Митрий 20090805 КонецФункции |
|||
13
le_
26.10.10
✎
17:40
|
(8) Снять галочку с формы при обновлении, конечно, сложнее, чем разработать код копирования элементов на панель...
А если у них через какое-то время еще что-то на форме потребуется поменять? Еще пару панелей добавить, например... |
|||
14
Mitriy
26.10.10
✎
17:44
|
(13) запросто...
|
|||
15
Aprobator
26.10.10
✎
17:46
|
(13) помнится в свое время Арбис (разработчики ЗУП бюджет, ЗиК бюджет позже появился) этим баловался. У них прям в коде было добавление элементов управления на форму.
|
|||
16
SNowflake
26.10.10
✎
17:46
|
(12), (13) уже не раз появлялись такие требования
|
|||
17
le_
26.10.10
✎
17:53
|
(16) Ну, если ты франч - тебе на радость. Больше наработаешь - больше заплатят.
(15) Пару элементов на форму добавить - может быть бывает нужно в каких-то особых случаях. А так, полностью формы программно создавать - извращение, имхо. Такое на этапе проектирования и разработки конфигурации имеет смыл делать в том случае, если имеется желание усложнить работу тем, кто это будет в последствии дорабатывать. |
|||
18
Mitriy
26.10.10
✎
17:54
|
(17) это имеет смысл, когда правишь типовую... при обновлении проблем на порядок меньше...
|
|||
19
SNowflake
26.10.10
✎
17:57
|
(17) - я не полностью создаю новую форму программно, я типовую правлю
|
|||
20
SNowflake
27.10.10
✎
10:36
|
получается что уже существующий на форме элемент формы нельзя перенести на вновь созданную панель... по крайней мере у меня не получилось... может тогда скрывать видимость элемента форма (уже существующего) и создавать новый элемент формы и помещать на панель? или это не верно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |