|
Программное создание кнопок на форме | ☑ | ||
---|---|---|---|---|
0
Varlant1n
18.01.21
✎
09:21
|
Есть документ ЗаданиеВодителя. У этого документа есть табличная часть в которой хранятся ссылки на документ ЗаказКлиента. Мне надо в другой форме (ФормаВыборДокумента) сделать программное создание кнопок того же количества, что и строк в табличной части.
П.С. заголовки кнопок тоже должны программно меняться и соответсвовать заказку клиента. На данный момент. Я сделал следующее: 1. Создал на форме вертикальную группу (ГруппаДокументов), в ней и будут храниться кнопки. 2. Создал на форме реквизит ТаблицаЗначений. С колонками, как в запросе. И типы им задал как в самом документе ЗаданиеВодителя. 3. Прописал запрос к табличной части ЗаданиеВодителя. Полученные данные загрузил в ТЗ. И через процедуру Для каждого решил перебрать данные и для каждой строки создать кнопку, но это все почему-то не работает. И отладчик не дает никакой инфы. Код : Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если ТипЗнч(Параметры) = Тип("Структура") Тогда Если Параметры.Свойство("СсылкаНаДокумент") Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаданиеВодителяДокументы.Документ КАК Документ, | ЗаданиеВодителяДокументы.Документ.Номер КАК Номер, | ЗаданиеВодителяДокументы.Документ.Контрагент КАК Контрагент |ИЗ | Документ.ЗаданиеВодителя.Документы КАК ЗаданиеВодителяДокументы |ГДЕ | ЗаданиеВодителяДокументы.Ссылка = &ЗаданиеВодителя"; Запрос.УстановитьПараметр("ЗаданиеВодителя", Параметры.СсылкаНаДокумент); РезультатЗапроса = Запрос.Выполнить(); ТаблицаЗначений = РезультатЗапроса.Выгрузить(); Для каждого Строка Из ТаблицаЗначений Цикл ЭлементГруппы = Элементы.ГруппаДокументов; НоваяКнопка = Элементы.Добавить("Кн", Тип("КнопкаФормы"),ЭлементГруппы); НоваяКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка; НоваяКнопка.Высота = 3; НоваяКнопка.РастягиватьПоГоризонтали = Истина; НоваяКнопка.ИмяКоманды = "НажатиеКнопки"; //НоваяКнопка.Заголовок = Строка(Номер); НоваяКнопка.Шрифт = ШрифтыСтиля.ОченьКрупныйШрифтТекста; НоваяКнопка.Доступность = Истина; КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
1
ДенисЧ
18.01.21
✎
09:24
|
А видимость поставить?
|
|||
2
Varlant1n
18.01.21
✎
09:29
|
(1) Не понял( Можете, пожалуйста написать подробнее? Я буду Вам очень благодарен. И еще правильно ли я написал остальное? Запрос уверен, что правильно, а вот сама эта часть:
Для каждого Строка Из ТаблицаЗначений Цикл ЭлементГруппы = Элементы.ГруппаДокументов; НоваяКнопка = Элементы.Добавить("Кн", Тип("КнопкаФормы"),ЭлементГруппы); НоваяКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка; НоваяКнопка.Высота = 3; НоваяКнопка.РастягиватьПоГоризонтали = Истина; НоваяКнопка.ИмяКоманды = "НажатиеКнопки"; //НоваяКнопка.Заголовок = Строка(Номер); НоваяКнопка.Шрифт = ШрифтыСтиля.ОченьКрупныйШрифтТекста; НоваяКнопка.Доступность = Истина; КонецЦикла; |
|||
3
ДенисЧ
18.01.21
✎
09:30
|
НоваяКнопка.Видимость = Истина;
Ну это так, в порядке бреда. |
|||
4
Varlant1n
18.01.21
✎
09:31
|
(3) Извините, еще раз. А я правильно в коде определил группу в которой должны появляться эти кнопки?
|
|||
5
ДенисЧ
18.01.21
✎
09:33
|
(4) Мне отсюда не видно )))
Если группа, в которую должны добавляться кнопки, называется ГруппаДокументов, то правильно... |
|||
6
Varlant1n
18.01.21
✎
09:34
|
(5) Да, ГруппаДокументов
|
|||
7
acht
18.01.21
✎
09:35
|
(0) > но это все почему-то не работает.
Как именно оно не работает? |
|||
8
acht
18.01.21
✎
09:35
|
Там минимум две ошибки
|
|||
9
acht
18.01.21
✎
09:36
|
> Создал на форме реквизит ТаблицаЗначений. С колонками,
и позже > ТаблицаЗначений = РезультатЗапроса.Выгрузить(); И > НоваяКнопка = Элементы.Добавить("Кн", Тип("КнопкаФормы"),ЭлементГруппы); В цикле |
|||
10
Varlant1n
18.01.21
✎
09:39
|
(9) А как мне это исправить?
|
|||
11
Varlant1n
18.01.21
✎
09:41
|
(9) Первое понял:
ТаблицаЗначений.Загрузить(РезультатЗапроса); |
|||
12
Varlant1n
18.01.21
✎
09:43
|
(11) Но и так не работает
|
|||
13
Varlant1n
18.01.21
✎
09:49
|
(9) Сделал даже так:
ТаблицаЗначенийДокументы = РеквизитФормыВЗначение("ТаблицаЗначений"); ТаблицаЗначенийДокументы = Запрос.Выполнить().Выгрузить(); ЗначениеВРеквизитФормы(ТаблицаЗначенийДокументы, "ТаблицаЗначений"); Для каждого Строка Из ТаблицаЗначений Цикл ЭлементГруппы = Элементы.ГруппаДокументов; НоваяКнопка = Элементы.Добавить("Кн", Тип("КнопкаФормы"),ЭлементГруппы); НоваяКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка; НоваяКнопка.Высота = 3; НоваяКнопка.РастягиватьПоГоризонтали = Истина; НоваяКнопка.ИмяКоманды = "НажатиеКнопки"; НоваяКнопка.Заголовок = Строка(Номер); НоваяКнопка.Шрифт = ШрифтыСтиля.ОченьКрупныйШрифтТекста; НоваяКнопка.Видимость = Истина; НоваяКнопка.Доступность = Истина; КонецЦикла; |
|||
14
acht
18.01.21
✎
09:51
|
(13) Почему ты так упорно не хочешь рассказать о выдаваемых сообщениях об ошибках? Если у твоего виска держат пистолет - отправь в ответ строку из точек.
|
|||
15
Varlant1n
18.01.21
✎
09:52
|
(14) Так в том то и дело, что ошибок никаких не выдает и отладчик не дает никакой инфы. Просто не срабатывает. В этом и вся проблема. Я даже не могу понять, что не так
|
|||
16
acht
18.01.21
✎
10:17
|
(15) > и отладчик не дает никакой инфы. Просто не срабатывает.
Надо сделать над собой усилие и все-таки в отладчике по шагам пройти по коду, анализируя в какую ветку оно попадает и почему. |
|||
17
Varlant1n
18.01.21
✎
10:30
|
(16) Отладчик в принципе даже не проходит по запросу
|
|||
18
Guk
18.01.21
✎
10:36
|
(17) наверное надо включить отладку на сервере...
|
|||
19
SiAl-chel
18.01.21
✎
10:37
|
(13)
Ты тут создаешь каждый раз элемент формы с одним и тем же именем. А это уже ошибка, начиная со второй строки твоей ТаблицаЗначений. |
|||
20
Varlant1n
18.01.21
✎
13:48
|
(19) Я исправил таким образом. Но теперь проблема в том, что документов у меня два, то есть и кнопок должно быть два, но создается всего лишь одна кнопка
ИД = 0; Для каждого Строка Из ТаблицаЗначений Цикл ЭлементГруппы = Элементы.ГруппаДокументов; НоваяКнопка = Элементы.Добавить("Кн" + Строка(ИД), Тип("КнопкаФормы"),ЭлементГруппы); НоваяКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка; НоваяКнопка.Высота = 3; НоваяКнопка.РастягиватьПоГоризонтали = Истина; НоваяКнопка.ИмяКоманды = "НажатиеКнопки"; НоваяКнопка.Заголовок = Строка(Строка.Номер) + " " + Строка(Строка.Контрагент); НоваяКнопка.Шрифт = ШрифтыСтиля.ОченьКрупныйШрифтТекста; НоваяКнопка.Видимость = Истина; НоваяКнопка.Доступность = Истина; ИД = ИД + 1; КонецЦикла; |
|||
21
ДенисЧ
18.01.21
✎
13:50
|
Сколько раз выполняется цикл?
|
|||
22
Varlant1n
18.01.21
✎
13:56
|
(21) Один. И процедура заканчивается.
И, кстати, выше проблема с отладкой и вообще с тем, что у меня не работал код в событии формы, заключалось в условии : Если ТипЗнч(Параметры) = Тип("Структура") Тогда КонецЕсли; Потому что, как я понял "Параметры" - это не структура. |
|||
23
Varlant1n
18.01.21
✎
14:03
|
(22) Все получилось, тема закрыта
|
|||
24
SiAl-chel
18.01.21
✎
14:41
|
(22) Поэтому в процедурах и функциях я всегда ставлю точку остановки на первом операторе.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |