Вход | Регистрация
 

Программное создание кнопок на форме

Программное создание кнопок на форме
Я
   Varlant1n
 
18.01.21 - 09:21
Есть документ ЗаданиеВодителя. У этого документа есть табличная часть в которой хранятся ссылки на документ ЗаказКлиента. Мне надо в другой форме (ФормаВыборДокумента) сделать программное создание кнопок того же количества, что и строк в табличной части.

П.С. заголовки кнопок тоже должны программно меняться и соответсвовать заказку клиента.

На данный момент. Я сделал следующее:
1. Создал на форме вертикальную группу (ГруппаДокументов), в ней и будут храниться кнопки.
2. Создал на форме реквизит ТаблицаЗначений. С колонками, как в запросе. И типы им задал как в самом документе ЗаданиеВодителя.
3. Прописал запрос к табличной части ЗаданиеВодителя. Полученные данные загрузил в ТЗ. И через процедуру Для каждого решил перебрать данные и для каждой строки создать кнопку, но это все почему-то не работает. И отладчик не дает никакой инфы. Код :

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если ТипЗнч(Параметры) = Тип("Структура") Тогда
        Если Параметры.Свойство("СсылкаНаДокумент") Тогда
            Запрос = Новый Запрос;
            Запрос.Текст =
            "ВЫБРАТЬ
            |    ЗаданиеВодителяДокументы.Документ КАК Документ,
            |    ЗаданиеВодителяДокументы.Документ.Номер КАК Номер,
            |    ЗаданиеВодителяДокументы.Документ.Контрагент КАК Контрагент
            |ИЗ
            |    Документ.ЗаданиеВодителя.Документы КАК ЗаданиеВодителяДокументы
            |ГДЕ
            |    ЗаданиеВодителяДокументы.Ссылка = &ЗаданиеВодителя";
            Запрос.УстановитьПараметр("ЗаданиеВодителя", Параметры.СсылкаНаДокумент);
            РезультатЗапроса = Запрос.Выполнить();
            ТаблицаЗначений = РезультатЗапроса.Выгрузить();
            
            Для каждого Строка Из ТаблицаЗначений Цикл
                ЭлементГруппы = Элементы.ГруппаДокументов;
                НоваяКнопка = Элементы.Добавить("Кн", Тип("КнопкаФормы"),ЭлементГруппы);
                НоваяКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
                НоваяКнопка.Высота = 3;
                НоваяКнопка.РастягиватьПоГоризонтали = Истина;
                НоваяКнопка.ИмяКоманды = "НажатиеКнопки";
                //НоваяКнопка.Заголовок = Строка(Номер);
                НоваяКнопка.Шрифт = ШрифтыСтиля.ОченьКрупныйШрифтТекста;
                НоваяКнопка.Доступность = Истина;
            КонецЦикла;
        КонецЕсли;    
    КонецЕсли;
КонецПроцедуры
   ДенисЧ
 
1 - 18.01.21 - 09:24
А видимость поставить?
   Varlant1n
 
2 - 18.01.21 - 09:29
(1) Не понял( Можете, пожалуйста написать подробнее? Я буду Вам очень благодарен. И еще правильно ли я написал остальное? Запрос уверен, что правильно, а вот сама эта часть:

Для каждого Строка Из ТаблицаЗначений Цикл
                ЭлементГруппы = Элементы.ГруппаДокументов;
                НоваяКнопка = Элементы.Добавить("Кн", Тип("КнопкаФормы"),ЭлементГруппы);
                НоваяКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
                НоваяКнопка.Высота = 3;
                НоваяКнопка.РастягиватьПоГоризонтали = Истина;
                НоваяКнопка.ИмяКоманды = "НажатиеКнопки";
                //НоваяКнопка.Заголовок = Строка(Номер);

                НоваяКнопка.Шрифт = ШрифтыСтиля.ОченьКрупныйШрифтТекста;
                НоваяКнопка.Доступность = Истина;
            КонецЦикла;
   ДенисЧ
 
3 - 18.01.21 - 09:30
НоваяКнопка.Видимость = Истина;

Ну это так, в порядке бреда.
   Varlant1n
 
4 - 18.01.21 - 09:31
(3) Извините, еще раз. А я правильно в коде определил группу в которой должны появляться эти кнопки?
   ДенисЧ
 
5 - 18.01.21 - 09:33
(4) Мне отсюда не видно )))
Если группа, в которую должны добавляться кнопки, называется ГруппаДокументов, то правильно...
   Varlant1n
 
6 - 18.01.21 - 09:34
(5) Да, ГруппаДокументов
   acht
 
7 - 18.01.21 - 09:35
(0) > но это все почему-то не работает.
Как именно оно не работает?
   acht
 
8 - 18.01.21 - 09:35
Там минимум две ошибки
   acht
 
9 - 18.01.21 - 09:36
> Создал на форме реквизит ТаблицаЗначений. С колонками,
и позже
> ТаблицаЗначений = РезультатЗапроса.Выгрузить(); 

И
> НоваяКнопка = Элементы.Добавить("Кн", Тип("КнопкаФормы"),ЭлементГруппы); 
В цикле
   Varlant1n
 
10 - 18.01.21 - 09:39
(9) А как мне это исправить?
   Varlant1n
 
11 - 18.01.21 - 09:41
(9) Первое понял:

ТаблицаЗначений.Загрузить(РезультатЗапроса);
   Varlant1n
 
12 - 18.01.21 - 09:43
(11) Но и так не работает
   Varlant1n
 
13 - 18.01.21 - 09:49
(9) Сделал даже так:

ТаблицаЗначенийДокументы = РеквизитФормыВЗначение("ТаблицаЗначений");
ТаблицаЗначенийДокументы = Запрос.Выполнить().Выгрузить();
ЗначениеВРеквизитФормы(ТаблицаЗначенийДокументы, "ТаблицаЗначений");            
            
Для каждого Строка Из ТаблицаЗначений Цикл
    ЭлементГруппы = Элементы.ГруппаДокументов;
    НоваяКнопка = Элементы.Добавить("Кн", Тип("КнопкаФормы"),ЭлементГруппы);
    НоваяКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
    НоваяКнопка.Высота = 3;
    НоваяКнопка.РастягиватьПоГоризонтали = Истина;
    НоваяКнопка.ИмяКоманды = "НажатиеКнопки";
    НоваяКнопка.Заголовок = Строка(Номер);
    НоваяКнопка.Шрифт = ШрифтыСтиля.ОченьКрупныйШрифтТекста;
    НоваяКнопка.Видимость = Истина;
    НоваяКнопка.Доступность = Истина;
КонецЦикла;
   acht
 
14 - 18.01.21 - 09:51
(13) Почему ты так упорно не хочешь рассказать о выдаваемых сообщениях об ошибках? Если у твоего виска держат пистолет - отправь в ответ строку из точек.
   Varlant1n
 
15 - 18.01.21 - 09:52
(14) Так в том то и дело, что ошибок никаких не выдает и отладчик не дает никакой инфы. Просто не срабатывает. В этом и вся проблема. Я даже не могу понять, что не так
   acht
 
16 - 18.01.21 - 10:17
(15) > и отладчик не дает никакой инфы. Просто не срабатывает.

Надо сделать над собой усилие и все-таки в отладчике по шагам пройти по коду, анализируя в какую ветку оно попадает и почему.
   Varlant1n
 
17 - 18.01.21 - 10:30
(16) Отладчик в принципе даже не проходит по запросу
   Guk
 
18 - 18.01.21 - 10:36
(17) наверное надо включить отладку на сервере...
   SiAl-chel
 
19 - 18.01.21 - 10:37
(13)
НоваяКнопка = Элементы.Добавить("Кн", Тип("КнопкаФормы"),ЭлементГруппы);

Ты тут создаешь каждый раз элемент формы с одним и тем же именем. А это уже ошибка, начиная со второй строки твоей ТаблицаЗначений.
   Varlant1n
 
20 - 18.01.21 - 13:48
(19) Я исправил таким образом. Но теперь проблема в том, что документов у меня два, то есть и кнопок должно быть два, но создается всего лишь одна кнопка

ИД = 0;
Для каждого Строка Из ТаблицаЗначений Цикл
    ЭлементГруппы = Элементы.ГруппаДокументов;
    НоваяКнопка = Элементы.Добавить("Кн" + Строка(ИД), Тип("КнопкаФормы"),ЭлементГруппы);
    НоваяКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
    НоваяКнопка.Высота = 3;
    НоваяКнопка.РастягиватьПоГоризонтали = Истина;
    НоваяКнопка.ИмяКоманды = "НажатиеКнопки";
    НоваяКнопка.Заголовок = Строка(Строка.Номер) + " " + Строка(Строка.Контрагент);
    НоваяКнопка.Шрифт = ШрифтыСтиля.ОченьКрупныйШрифтТекста;
    НоваяКнопка.Видимость = Истина;
    НоваяКнопка.Доступность = Истина;
    ИД = ИД + 1;
КонецЦикла;
   ДенисЧ
 
21 - 18.01.21 - 13:50
Сколько раз выполняется цикл?
   Varlant1n
 
22 - 18.01.21 - 13:56
(21) Один. И процедура заканчивается.

И, кстати, выше проблема с отладкой и вообще с тем, что у меня не работал код в событии формы, заключалось в условии :

Если ТипЗнч(Параметры) = Тип("Структура") Тогда
КонецЕсли;

Потому что, как я понял "Параметры" - это не структура.
   Varlant1n
 
23 - 18.01.21 - 14:03
(22) Все получилось, тема закрыта
   SiAl-chel
 
24 - 18.01.21 - 14:41
(22) Поэтому в процедурах и функциях я всегда ставлю точку остановки на первом операторе.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.