Имя: Пароль:
1C
1С v8
Программное добавление командной панели на неуправляемую форму
, ,
0 trustisk
 
08.12.13
10:52
Добрый день, коллеги. Может кто подскажет, где я ошибаюсь. Проблема в следующем: есть документ, в нем добавил таблицу. Нужно программно вывести таблицу и командную панель. Заранее спасибо. Вот код

    ТекущаяФорма = ЭтаФорма;
    
    ОсновнаяПанель = ТекущаяФорма.ЭлементыФормы.Найти("ОсновнаяПанель");
    
    Если ОсновнаяПанель = Неопределено Тогда
        Сообщить("В форме не определен элемент ""ОсновнаяПанель"".
        |Добавление табличной части ""Серийные номера"" остановлено.");
        Возврат;
    КонецЕсли;
    
    СтраницаСерийныеНомера = ОсновнаяПанель.Страницы.Добавить("СерийныеНомера","Серийные номера");
    
    ШиринаЭлементовУправления = ОсновнаяПанель.Ширина-12-2;
    Лево = 6;
    
    ОсновнаяПанель.ТекущаяСтраница = СтраницаСерийныеНомера;
    
    // рамка группы "Серийные номера"
    РамкаГруппыТЧ = ЭлементыФормы.Добавить(Тип("РамкаГруппы"), "бит_РамкаГруппыСерийныеНомераТЧ", Истина, ОсновнаяПанель);
    РамкаГруппыТЧ.Лево      = Лево;
    РамкаГруппыТЧ.Верх      = 2;
    РамкаГруппыТЧ.Высота    = 16;
    РамкаГруппыТЧ.Ширина    = ШиринаЭлементовУправления;
    РамкаГруппыТЧ.Видимость = Истина;
    РамкаГруппыТЧ.Заголовок = "Серийные номера";
    РамкаГруппыТЧ.Рамка     = Новый Рамка(ТипРамкиЭлементаУправления.Подчеркивание);
    
    // поле серийных номеров табличной части
    ПолеТЧ = ЭлементыФормы.Добавить(Тип("ТабличноеПоле"), "СерийныеНомераТЧ", Истина, ОсновнаяПанель);
        
    ПолеТЧ.Данные = "mgf_СерийныеНомера";    
                
    НоваяКолонка = ПолеТЧ.Колонки.Добавить("НомерСтроки");
    НоваяКолонка.Данные           = "НомерСтроки";
    НоваяКолонка.ТекстШапки       = "№";
    НоваяКолонка.Ширина           = 4;
    НоваяКолонка.ИзменениеРазмера = ИзменениеРазмераКолонки.НеИзменять;
    
    НоваяКолонка = ПолеТЧ.Колонки.Добавить("Номенклатура");
    НоваяКолонка.Данные = "Номенклатура";
    НоваяКолонка.ТекстШапки = "Номенклатура";
    НоваяКолонка.УстановитьЭлементУправления(Тип("ПолеВвода"));    
    НоваяКолонка.ЭлементУправления.ТолькоПросмотр = Истина;        
    НоваяКолонка.ЭлементУправления.КнопкаОткрытия = Истина;
    
    НоваяКолонка = ПолеТЧ.Колонки.Добавить("СерийныйНомер");
    НоваяКолонка.Данные = "СерийныйНомер";
    НоваяКолонка.ТекстШапки = "Серийный номер";
    НоваяКолонка.УстановитьЭлементУправления(Тип("ПолеВвода"));    
    НоваяКолонка.ЭлементУправления.КнопкаОткрытия = Истина;
    НоваяКолонка.ЭлементУправления.КнопкаОчистки  = Истина;
    НоваяКолонка.ЭлементУправления.КнопкаВыбора   = Истина;

    // создадим командную панель поля серийные номера
    КоманднаяПанельТЧ = ЭлементыФормы.Добавить(Тип("КоманднаяПанель"),"бит_КоманднаяПанельСерийныеНомераТЧ",Истина,ОсновнаяПанель);
    КоманднаяПанельТЧ.ИсточникДействий = ЭлементыФормы.СерийныеНомераТЧ;
    КоманднаяПанельТЧ.Автозаполнение   = Истина;
    
    ВысотаПанель = 29;
    КоманднаяПанельТЧ.Верх   = РамкаГруппыТЧ.Верх+РамкаГруппыТЧ.Высота;
    КоманднаяПанельТЧ.Лево   = Лево;
    КоманднаяПанельТЧ.Высота = ВысотаПанель;
    КоманднаяПанельТЧ.Ширина = ШиринаЭлементовУправления;
    КоманднаяПанельТЧ.Видимость = Истина;
    КоманднаяПанельТЧ.Доступность = Истина;
    
    ВерхПолеТЧ = КоманднаяПанельТЧ.Верх+КоманднаяПанельТЧ.Высота+2;
    ЛевоПолеТЧ = 6;
    ВысотаПолеТЧ = ОсновнаяПанель.Высота - КоманднаяПанельТЧ.Верх-КоманднаяПанельТЧ.Высота - 12 - 20;
        
    ПолеТЧ.ТолькоПросмотр = ложь;
    ПолеТЧ.Верх   = ВерхПолеТЧ;
    ПолеТЧ.Лево   = ЛевоПолеТЧ;
    ПолеТЧ.Высота = ВысотаПолеТЧ;
    ПолеТЧ.Ширина = ШиринаЭлементовУправления;
    ПолеТЧ.Видимость = Истина;

    
    РамкаГруппыТЧ.УстановитьПривязку(ГраницаЭлементаУправления.Право,ОсновнаяПанель,ГраницаЭлементаУправления.Право);
    КоманднаяПанельТЧ.УстановитьПривязку(ГраницаЭлементаУправления.Право,ОсновнаяПанель,ГраницаЭлементаУправления.Право);        
    ПолеТЧ.УстановитьПривязку(ГраницаЭлементаУправления.Право,ОсновнаяПанель,ГраницаЭлементаУправления.Право);
    ПолеТЧ.УстановитьПривязку(ГраницаЭлементаУправления.Низ,ОсновнаяПанель,ГраницаЭлементаУправления.Низ);
1 trustisk
 
08.12.13
10:53
Важный момент. Рамка и таблица выводиться с правильными привязками. Командная панель - нет.
2 wertyu
 
08.12.13
11:00
эСтраницы = Элементы.Найти("ГруппаСтраница" + Строка(НЛ));
        Если Не эСтраницы = Неопределено Тогда
            Элементы.Удалить(эСтраницы);
        КонецЕсли;
        эСтраница = Элементы.Добавить("ГруппаСтраница" + Строка(НЛ), Тип("ГруппаФормы"), Элементы.ГруппаСтраниц);
        эСтраница.Вид = ВидГруппыФормы.Страница;
        эСтраница.Заголовок = НазваниеЛиста;
        
        эТаблица = Элементы.Найти(идТаблицы);
        Если Не эТаблица = Неопределено Тогда
            Элементы.Удалить(эТаблица);
        КонецЕсли;
        эТаблица = Элементы.Добавить(идТаблицы, Тип("ТаблицаФормы"), эСтраница);
        эТаблица.ПутьКДанным = идКоллекции;
        эТаблица.Отображение = ОтображениеТаблицы.Список;
        НК = 0;
        Для Каждого ТекущаяКололонка из Лист.Колонки Цикл
            эКолонка = Элементы.Добавить(идТаблицы + ТекущаяКололонка.Имя, Тип("ПолеФормы"), эТаблица);
            эКолонка.Вид = ВидПоляФормы.ПолеВвода;
            эКолонка.ПутьКДанным = идКоллекции + "." + ТекущаяКололонка.Имя;
            эКолонка.ОграничениеТипа = Новый ОписаниеТипов("Строка");
            Если ТекущаяКололонка.Имя = "НомерСтроки" Тогда
                эКолонка.Заголовок = "№";
                эКолонка.Ширина = 7;
            Иначе
                НК = НК + 1;
                эКолонка.Заголовок = ТекущаяКололонка.Имя + " (" + Строка(НК) + ")";
            КонецЕсли;
        КонецЦикла;
3 wertyu
 
08.12.13
11:00
НЛ - это количество листов
4 wertyu
 
08.12.13
11:03
идКоллекции и идТаблицы можешь любые строки присваивать
5 wertyu
 
08.12.13
11:04
Лист - это таблица значений
6 trustisk
 
08.12.13
11:15
(2) Спасибо, но ... Этот код для более новой версии Элементы и Отображение - это для управляемых форм.
Второе: я не вижу кода добавления командной панели. Она автоматически добавляется?
7 trustisk
 
08.12.13
11:22
Разобрался. Строка
КоманднаяПанельТЧ.Автозаполнение   = Истина;
Должна быть после строки
    ПолеТЧ.ТолькоПросмотр = ложь;
Иначе командная панель ничем не заполняется
8 wertyu
 
08.12.13
11:24
извиняюсь, обычно когда расшифровывают, то для управляемых )
9 wertyu
 
08.12.13
11:26
надо зделать элемент формы типа табполе, присвоить данные = ТЗ, и чтобы вывело - ЭлементыФормы.табполе.СоздатьКолонки()
10 wertyu
 
08.12.13
11:27
ну а дальше колонкам разные признаки