Имя: Пароль:
1C
1С v8
Динамическое добавление колонки в ТЗ
0 rosveta
 
03.10.14
15:16
Добрый день. У меня есть внешняя обработка. В Этой обработке есть реквизит объекта Табличная часть "Товары". Управляемое приложение. В эту табличную часть я программно пытаюсь добавить колонку.
Для каждого Склад Из МассивСкладов Цикл
//Элементы.Добавить("Склад", Тип("ПолеФормы"), Элементы.Товары);
ДобавляемыеКолонки.Добавить(Новый РеквизитФормы("Склад", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(50)), "Товары", Склад,Истина) );
ИзменитьРеквизиты(ДобавляемыеКолонки);
КонецЦикла;

При исполнении кода ИзменитьРеквизиты, возникает ошибка.
{Форма.Форма.Форма(215)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)
            ИзменитьРеквизиты(ДобавляемыеКолонки);
по причине:
Недопустимый путь к реквизиту. Путь: "Товары"

Вместо "Товары", пробовала Элементы.Товары, Объект.Товары, ТаблицаТовары. В ообщем я не знаю, как еще можно задать путь реквизиту.
1 Ymryn
 
03.10.14
15:31
(0) а массив переопределяется или он каждый шаг цикла весь набор добавить пытается?
2 butterbean
 
03.10.14
15:36
в таб часть нельзя добавить колонки ни в упр ни в обычном приложении
3 anatoly
 
03.10.14
15:41
(2) +1
сделай обычный реквизит типа ТЗ и его вручную загружай в табличное поле. не забыть СоздатьКолонки().
4 rosveta
 
03.10.14
15:45
В массиве содержится некоторое количество строк с типом строка. Сколько там строк, столько колонок и нужно добавить в табличную часть.
5 Адский плющ
 
03.10.14
15:52
(4) Попробуй путь к реквизиту задать  "Объект.Товары"

Новый РеквизитФормы("Склад", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(50)), "Объект.Товары", Склад,Истина)

Ну и да, ИзменитьРеквизиты вынеси из цикла.


p/s коментаторы-вредители, блин
6 rosveta
 
03.10.14
15:53
Я понимаю, что на данном этапе я пытаюсь создать одинаковые реквизиты. Потом "Склад", нужно заменить на просто Склад.. Просто тогда возникает ошибка, что неверный параметр номер 1.
7 Адский плющ
 
03.10.14
15:54
(6) Отладчиком смотри. Скорее всего у тебя посылается строка с пробелами и т.д.
8 Ymryn
 
03.10.14
16:01
(5) поддерживаю. Через Объект.Товары все должно успешно добавляться. Скорее всего, причина в том, что ИзменитьРеквизиты в цикле, и ты пытаешься добавить на второй интерации цикла реквизит с именем, которое уже есть. Поэтому он и ругается, что по этому пути его добавлять нельзя.
9 Ymryn
 
03.10.14
16:02
(6) как бы создать 2 и более одинаковых реквизитов нельзя.
10 rosveta
 
03.10.14
16:06
Если я убираю путь , просто пропускаю этот параметр, то тогда да, у меня ругается на одинаковые реквизиты. с этим я согласна.
//Для каждого Склад Из МассивСкладов Цикл
//ИмяРеквизита = СтрЗаменить(Склад," ","");
ДобавляемыеКолонки.Добавить(Новый РеквизитФормы("Колонка1", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(50)),Объект.Товары, МассивСкладов[0],Истина) );
            ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеКолонки);
//КонецЦикла;

тоже ругается на путь
11 Ymryn
 
03.10.14
16:08
Объект.Товары в кавычки заключи. Там должна быть строка, как у тебя в (0).
12 Адский плющ
 
03.10.14
16:08
Объект.Товары в кавычки Пушкин брать будет?
13 фобка
 
03.10.14
16:15
Эл=форма.элементы.добавить("колонка1", тип("полеформы"),форма.элементы.имятвоеготабполянаформе);
Эл.вид=видполяформы.полеввода;
Эл.путькданным = ...
14 Ymryn
 
03.10.14
16:17
(13) а это уже создание элемента формы, а не реквизита формы. Не путайте автора, пожалуйста.
15 фобка
 
03.10.14
16:17
Это касается только формы. Создать новый реквизит таб части - фиг, это ж изменение объекта метаданных
16 фобка
 
03.10.14
16:18
Если это обработка то:
17 Ymryn
 
03.10.14
16:18
(15) что значит фиг? Прекрасно добавляются в управляемых формах. Для этого даже такую гадость как реквизит формы придумали.
18 rosveta
 
03.10.14
16:46
С кавычками ошибки про путь нет. Правда пока этот реквизит в тч не появляется. Но это видимо уже другой вопрос. Спасибо за помощь.
19 Ymryn
 
03.10.14
17:28
(18) чтобы он в ТЧ появился воспользуйтесь уже (13). Ибо пока что только добавлено в реквизиты формы, потом надо создать элементы формы и связать их через путь к данным с реквизитами.
20 User_Agronom
 
03.10.14
17:31
(0) Фотка, рецепт? Иначе не взлетит.
21 rosveta
 
06.10.14
10:47
Для каждого Склад Из МассивСкладов Цикл
ИмяРеквизита = СтрЗаменить(Склад," ","");
ИмяРеквизита = СтрЗаменить(ИмяРеквизита,"№","");
ИмяРеквизита = СтрЗаменить(ИмяРеквизита,"(","");
ИмяРеквизита = СтрЗаменить(ИмяРеквизита,")","");
ДобавляемыеКолонки.Добавить(Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(50)),"Объект.Товары",Склад,Истина) );
            ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеКолонки);
КонецЦикла;
        
Для каждого Колонка Из ДобавляемыеКолонки Цикл
НовыйЭлемент = Элементы.Добавить(Колонка.Имя,Тип("ПолеФормы"),Элементы.Товары);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "Объект.Товары."+Колонка.Имя;
НовыйЭлемент.ТолькоПросмотр = Истина;
КонецЦикла;

Рабочий код. Все работает, добавляется и отображается.
22 Лодырь
 
06.10.14
10:59
(21) Можно было сразу открыть типовую УТ11 скажем и посмотреть на реализацию подобного в документе "установка цен". И даже упереть оттуда пару полезных процедур )

P.S. "ИзменитьРеквизиты" в цикле - это сильно.
23 rosveta
 
07.10.14
12:54
(21), Спасибо. Вынесу за пределы Цикла.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.