Имя: Пароль:
1C
 
Как перенести программно элементы с формы элемента на панель?
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
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
получается что уже существующий на форме элемент формы нельзя перенести на вновь созданную панель... по крайней мере у меня не получилось... может тогда скрывать видимость элемента форма (уже существующего) и создавать новый элемент формы и помещать на панель? или это не верно