|
Программное создание элементов формы (3 вложенные таблицы) | ☑ | ||
---|---|---|---|---|
0
freelancer83
20.10.15
✎
12:00
|
Доброго времени суток. Помогите разобраться с ошибкой.
Есть задача программно добавить реквизиты и элементы формы Проблема в том, что реквизиты - это 3 вложенные таблицы, для примера: есть таблица классы школы Таблица2, к ней привязана таблица учеников класса Таблица22, а к таблице учеников в свою очередь привязана таблица предметов с оценками учеников Таблица223. С помощью конструктора можно разместить реквизиты и соответствующие элементы на форме (таблицы формы), но при программном формировании (добавление элемента "Т223") появляется ошибка {Форма.Форма.Форма(87)}: Ошибка при установке значения атрибута контекста (ПутьКДанным) НовЭл.ПутьКДанным = "Элементы.Т22.ТекущиеДанные.Таблица223"; по причине: Недопустимое значение Код процедуры &НаСервере Процедура Команда2НаСервере() //ДобавляемыеРеквизиты=Новый Массив; //СуществующиеРеквизиты = Новый Массив; //ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(ЭтаФорма, СуществующиеРеквизиты); //СуществующиеРеквизиты.Удалить(СуществующиеРеквизиты.Найти("Реквизит777")); //СуществующиеРеквизиты.Удалить(СуществующиеРеквизиты.Найти("Объект")); //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Реквизит1",Новый ОписаниеТипов("Дата"),,"Реквизит1")); //Массив=Новый Массив; //Массив.Добавить(Тип("ТаблицаЗначений")); //ОписаниеТиповТаблицаЗначений = Новый ОписаниеТипов(Массив); //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Таблица2",ОписаниеТиповТаблицаЗначений,,"Таблица2")); //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Столбец21",Новый ОписаниеТипов("Строка"),"Таблица2" ,"Столбец21")); //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Таблица22",ОписаниеТиповТаблицаЗначений,"Таблица2" ,"Таблица22")); //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Столбец221",Новый ОписаниеТипов("Строка"),"Таблица2.Таблица22","Столбец221")); //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Столбец222",Новый ОписаниеТипов("Строка"),"Таблица2.Таблица22","Столбец222")); //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Таблица223",ОписаниеТиповТаблицаЗначений,"Таблица2.Таблица22","Таблица223")); //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Столбец2231",Новый ОписаниеТипов("Строка"),"Таблица2.Таблица22.Таблица223","Столбец2231")); ////СформироватьРеквизитыФормы(Дерево.Строки,ДобавляемыеРеквизиты); //ИзменитьРеквизиты(ДобавляемыеРеквизиты,СуществующиеРеквизиты); ЗарплатаКадры.УдалитьПодчиненныеЭлементыГруппы(ЭтаФорма,Элементы.ГруппаПрограммныеЭлементы); НовЭл=Элементы.Добавить("Реквизит1",Тип("ПолеФормы"),Элементы.ГруппаПрограммныеЭлементы); НовЭл.Вид = ВидПоляФормы.ПолеВвода; НовЭл.ПутьКДанным = "Реквизит1"; НовЭл=Элементы.Добавить("Т2",Тип("ТаблицаФормы"),Элементы.ГруппаПрограммныеЭлементы); //НовЭл.Вид = ВидПоляФормы.ПолеВвода; НовЭл.ПутьКДанным = "Таблица2"; //ЭлТаблица22=НовЭл; НовЭл=Элементы.Добавить("Столбец21",Тип("ПолеФормы"),НовЭл); НовЭл.Вид = ВидПоляФормы.ПолеВвода; НовЭл.ПутьКДанным = "Таблица2.Столбец21"; НовЭл=Элементы.Добавить("Т22",Тип("ТаблицаФормы"),Элементы.ГруппаПрограммныеЭлементы); НовЭл.ПутьКДанным = "Элементы.Т2.ТекущиеДанные.Таблица22"; ЭлТаблица22=НовЭл; НовЭл=Элементы.Добавить("Столбец221",Тип("ПолеФормы"),ЭлТаблица22); НовЭл.Вид = ВидПоляФормы.ПолеВвода; НовЭл.ПутьКДанным = "Элементы.Т2.ТекущиеДанные.Таблица22.Столбец221"; НовЭл=Элементы.Добавить("Столбец222",Тип("ПолеФормы"),ЭлТаблица22); НовЭл.Вид = ВидПоляФормы.ПолеВвода; НовЭл.ПутьКДанным = "Элементы.Т2.ТекущиеДанные.Таблица22.Столбец222"; НовЭл=Элементы.Добавить("Т223",Тип("ТаблицаФормы"),Элементы.ГруппаПрограммныеЭлементы); //////////////////////////////////////////////////////////////////////////////////////////// НовЭл.ПутьКДанным = "Элементы.Т22.ТекущиеДанные.Таблица223";//ЗДЕСЬ ошибка //////////////////////////////////////////////////////////////////////////////////////////// //................................ КонецПроцедуры Управляемые формы, тестировал обработку в БП (3.0.40.36) на платформах 1С:Предприятие 8.3 (8.3.6.2237) и 1С:Предприятие 8.3 (8.3.6.2332) Реквизиты формы (3 вложенные таблицы) создаются без проблем, для упрощения в конфигураторе на форму обработки вручную уже добавлен реквизит Таблица2 и закоментирован рабочий код программного добавления реквизита формы вложенных таблиц. Прошу помочь разобраться: это ошибка платформы или неправильно привязываю элемент формы к реквизиту. Как привязать программно созданный элемент формы ТаблицаФормы к вложенной таблице 3-го уровня, с учетом того, что для 1-го и 2-го уровней все нормально работает. Если добавить вручную 3 таблицы на форме (можно наверно и 4 и 5 ) и вручную связать, то никаких проблем не возникает. скриншот реквизитов формы в конфигураторе https://drive.google.com/file/d/0ByV6nmoaKkjFdDZRd1lOUGVlcG8/view?usp=sharing Тестовая обработка находится по адресу https://drive.google.com/file/d/0ByV6nmoaKkjFdHZ5MU5zVHdVeWM/view?usp=sharing |
|||
1
БатКор
20.10.15
✎
12:10
|
Кто поставил тебе такую задачу? не проще ли открывать форму списка с необходимым отбором?
|
|||
2
freelancer83
20.10.15
✎
12:15
|
К сожалению, без создания таблиц нельзя, вложенность данных может быть произвольной, дерево тоже не подходит, состав таблиц (количество и типы столбцов) на разных уровнях может отличаться. Требуется интерактивность на форме. При активизации строки таблицы на любом уровне нужно на этой же форме отображать данные связанных таблиц
|
|||
3
Горогуля
20.10.15
✎
12:19
|
вот тут спроси: Программное создание элементов формы (3 вложенные таблицы)
|
|||
4
aleks_default
20.10.15
✎
12:26
|
(2) Не убедил в необходимости программного создания реквизитов.
(0) НовЭл.ПутьКДанным = "Элементы.Т22.ТекущиеДанные.Таблица223"; это путь к реквизиту формы, а не к элементу формы. Должно быить "НовЭл.ПутьКДанным = "Таблица223". |
|||
5
freelancer83
20.10.15
✎
12:39
|
(4) Структура реквизитов формы и, соответственно, элементов формы неизвестна заранее (структура становится известной при создании формы, это дерево где строка описывает реквизит формы или таблицу формы), приведенный пример Классы - Ученики - Оценки просто иллюстрирует проблему, это может быть и 4-уровневая таблица, и может быть одна таблица. На форме без дополнительных нажатий нужно видеть данные вложенных таблиц.
"НовЭл.ПутьКДанным = "Таблица223" недопустимое значение |
|||
6
hhhh
20.10.15
✎
12:42
|
а реквизит Таблица223 уже добавил?
|
|||
7
aleks_default
20.10.15
✎
12:43
|
(6)Не, не добавил. Я код глянул в (0). Он закоментил добавление рекизитов.
|
|||
8
aleks_default
20.10.15
✎
12:45
|
(5) ты просто пока не понимаешь какой геморой на свою задницу сочиняешь программно создавая структуру формы...
|
|||
9
aleks_default
20.10.15
✎
12:47
|
лучше пока не поздно переформулировать задачу
|
|||
10
freelancer83
20.10.15
✎
12:49
|
(8) Согласен, но может кто-нибудь с такой проблемой сталкивался, перепробовал много вариантов, постоянно попадаю на эту ошибку. Мистяне, помогите, пожалуйста, все время у вас читаю решения и ответы на разные проблемы.
|
|||
11
aleks_default
20.10.15
✎
12:52
|
(10) Тебе сказали уже. Перед созданием элеменов формы нужно сначала создавать реквизиты формы, которые и будут указываться как путь к данным элемента формы
|
|||
12
freelancer83
20.10.15
✎
12:55
|
(9) Если не смогу решить проблему создания 3-го уровня, тогда придется полностью отказаться от программного формирования реквизитов, чего очень не хотелось бы.
Но почему на втором уровне такой проблемы нет? элемент формы (ТаблицаФормы) на 2-м уровне программно создается без проблем. Для 3 уровня используется тот же принцип. |
|||
13
freelancer83
20.10.15
✎
12:59
|
(11) "для упрощения в конфигураторе на форму обработки вручную уже добавлен реквизит Таблица2"
На форму обработки в режиме конфигуратора уже добавлена Таблица2 (Реквизит формы) со всеми вложенными таблицами в т.ч. и Таблица223 У меня не получается даже не добавить, а всего-то связать Элемент формы "Т223" с существующей таблицей "Таблица223" |
|||
14
freelancer83
20.10.15
✎
13:09
|
Процедуру можно сократить до безобразия
&НаСервере Процедура Команда2НаСервере() ЗарплатаКадры.УдалитьПодчиненныеЭлементыГруппы(ЭтаФорма,Элементы.ГруппаПрограммныеЭлементы); НовЭл=Элементы.Добавить("Т2",Тип("ТаблицаФормы"),Элементы.ГруппаПрограммныеЭлементы); НовЭл.ПутьКДанным = "Таблица2"; НовЭл=Элементы.Добавить("Т22",Тип("ТаблицаФормы"),Элементы.ГруппаПрограммныеЭлементы); НовЭл.ПутьКДанным = "Элементы.Т2.ТекущиеДанные.Таблица22"; НовЭл=Элементы.Добавить("Т223",Тип("ТаблицаФормы"),Элементы.ГруппаПрограммныеЭлементы); НовЭл.ПутьКДанным = "Элементы.Т22.ТекущиеДанные.Таблица223"; КонецПроцедуры и все равно ошибка на последней строке процедуры {Форма.Форма.Форма(124)}: Ошибка при установке значения атрибута контекста (ПутьКДанным) НовЭл.ПутьКДанным = "Элементы.Т22.ТекущиеДанные.Таблица223"; по причине: Недопустимое значение |
|||
15
hhhh
20.10.15
✎
15:02
|
(14) ну таблица 223 где у вас тут создается?? , вы увиливаете от вопроса.
|
|||
16
freelancer83
20.10.15
✎
15:15
|
(15) ни в коем случае не увиливаю, выше уже написал, чтобы уменьшить вероятность ошибки, чтобы предельно упростить условия задачи, реквизит Таблица223 добавил вручную. Он уже есть в реквизитах формы. Или вы считате, что я не могу программно создать элемент формы для созданного в конфигураторе реквизита формы? Также я писал, что код создания реквизитов формы до 3-го уровня (наверно и для любых уровней) срабатывает без проблем. Даже если удалить с формы все реквизиты и раскомментировать код создания реквизитов это ничего не дает, проверял, появляется та же ошибка
|
|||
17
hhhh
20.10.15
✎
15:26
|
(16) ну значит он добавлен не как колонка Таблицы 22.
|
|||
18
hhhh
20.10.15
✎
15:29
|
(16) может просто создать 3 закладки Таблица 1, Таблица 2 и Таблица 3, и при переключении в них устанавливать отбор соответствующий? Нафига вы через задний проход делаете? В колонку Таблицу вставляете?
|
|||
19
freelancer83
20.10.15
✎
15:39
|
(18) В этом что-то есть, спасибо, я попробую, но вопрос остается актуальным. Самое главное, почему для 2-х уровней работает, а на 3-м ошибка. Еще я заметил в отладчике, что для элементов формы Т2 и Т22 есть свойство "ОтборСтрок" а у созданного элемента Т223 такого свойства нет
|
|||
20
freelancer83
20.10.15
✎
15:42
|
УПС, извините, "ОтборСтрок" появляется по установки свойства "ПутьКДанным", значит у Т223 это свойство появится после удачного связывания с Таблица223
|
|||
21
aleks_default
20.10.15
✎
15:49
|
В КОЛОНКУ ТАБЛИЦУ вставляет? О, господи...
|
|||
22
БатКор
20.10.15
✎
18:40
|
Да лучше создавать ТЗ и СЗ и при необходимость впихивать в ТЧ, лучше думаю так будет
|
|||
23
БатКор
20.10.15
✎
18:41
|
Сорян за тавтологию
|
|||
24
Mort
20.10.15
✎
20:03
|
Программное создание элементов в 1с сделано на "отстаньте". Условное оформление формы игнорится, пути к данным не ставятся, платформенные команды не назначаются.
|
|||
25
freelancer83
20.10.15
✎
20:47
|
Написал в отдел тех. поддержки "1С" уже неделю как. Пока тишина. Наверно не дождусь от них ответа.
|
|||
26
Мимохожий Однако
20.10.15
✎
21:30
|
(0) Почему именно программно? Очень интересно. Программно можно создать только элементы формы, но не реквизиты.
|
|||
27
EvgeniuXP
20.10.15
✎
21:41
|
открой ГруппаКонтактнаяИнформация в БСП и посмотри как программно добавляют табличку :)
|
|||
28
EvgeniuXP
20.10.15
✎
21:42
|
(26) кто это сказал, что нельзя?
|
|||
29
БатКор
20.10.15
✎
21:42
|
постановка задачи не корректная. "все говорят о мухе, а ты про слона да про слона". Однако, здравствуйте!!!)
|
|||
30
Мимохожий Однако
20.10.15
✎
21:50
|
(28)Ну, так помоги страдальцу. И я поучусь.
|
|||
31
hhhh
20.10.15
✎
21:56
|
(26) можно создать и реквизиты.
|
|||
32
Мимохожий Однако
20.10.15
✎
22:13
|
Набросились )) Ну, спровоцировал маленько...Может кто и поможет ТС.
Однако мне действительно не понятна причина рождения столь чудного технического задания. |
|||
33
Мимохожий Однако
20.10.15
✎
22:15
|
В УТ11 есть примеры создания реквизитов формы в виде таблиц в общих модулях "Планирование", "Анкетирование"...
|
|||
34
freelancer83
20.10.15
✎
22:19
|
(33) Спасибо, посмотрю
|
|||
35
EvgeniuXP
20.10.15
✎
22:58
|
(34) там ничего сложного, процедуру ИзменитьРеквизиты ищи.
|
|||
36
freelancer83
21.10.15
✎
18:54
|
(18) Спасибо большое за наводку. Используя Свойство элемента формы (тип ТаблицаФормы) ОтборСтрок удалось связать таблицы 3, 4 уровней вложенности, без использования колонки таблицы тип ТаблицаЗначений
Получается, что при использовании вложенности таблиц больше 2 (только программное добавление) нужно использовать свойство ТаблицаФормы - ОтборСтрок. Программно, используя свойство ТаблицаФормы - ПутьКДанным невозможно связать таблицы 3-го и более уровней вложенности |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |