Имя: Пароль:
1C
1С v8
Таблица значений в Управляемой форме
0 GirlProgram
 
11.01.12
21:07
Управляемая форма
В форме создла реквезит ПредварительныеДанные и присвоила ему тип Таблица значений, на форме создала таблицу ПредварительныеДанные, где путь указала на созданный реквезит.
В процессе выполнения различных операций получила Таблицу значений с данными ТЗнач, теперь данные из этой таблицы мне надо загрузить в ПредварительныеДанные, которые почему-то вместо типа Таблица Значений имеют теперь тип ДанныеФормыКоллекция.
На сервере выполняю такое действие:

ПредварительныеДанные.Загрузить(ТЗнач);

Но на форме в итоге в таблице отображается только первая колонка из ТЗнач. Как мне вывести все колонки из ТЗнач?
1 GROOVY
 
11.01.12
21:09
(0) На клиенте ТЗ конвертируется в данныеформы. Это нормально
Колонки система за тебя создавать не будет. Колонки на форме созданы?
2 Конфигуратор1с
 
11.01.12
21:09
(0) используйте выгрузить из реквизита формы и загрузить из реквизита формы
3 DrShad
 
11.01.12
21:10
вот что творит фото животворящее :)
4 GROOVY
 
11.01.12
21:10
(2) Зачем? Это полнейший бред.
5 GROOVY
 
11.01.12
21:11
6 andrewks
 
11.01.12
21:15
(0) если колонки у тебя заданы жёстко, и не меняются, то сделай структуру колонок у реквизита формы. если нет - то придётся тебе их создавать программно
7 GirlProgram
 
11.01.12
21:15
(5) спасибо за ссылку, только я тоже как-то не совсем поняла как мне создать эти самые колонки....
8 GirlProgram
 
11.01.12
21:16
мне нужно программно, у меня колонки всегда разные....как было просто в обычном приложении...
9 Конфигуратор1с
 
11.01.12
21:17
из ссылки в (5)
&НаСервере
Процедура ЗаполнитьТабЧастьНаФорме()
// Реквизит формы "ДанныеТаблицы" создан средствами интерфейса конфигуратора(можно и программно), программно создадим колонки

// Элемент формы "ДанныеТаблицыНаФорме" создан средствами интерфейса конфигуратора(можно и программно), программно создадим колонки

// СодержимоеТаблицы - таблица значений


// создаем реквизиты для РЕКВИЗИТА ФОРМЫ "ДанныеТаблицы" (тип Таблица Значений)

МассивДобавляемыхРеквизитов = Новый Массив;

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

// пакетное создание и удаление колонок в РЕКВИЗИТЕ ФОРМЫ "ДанныеТаблицы" (тип Таблица Значений)

ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

// создаем элементы

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

ЭтаФорма.ДанныеТаблицы.Загрузить(СодержимоеТаблицы);

КонецПроцедуры
10 andrewks
 
11.01.12
21:18
(8) лови мою ветку, у меня там в конце есть решение
11 andrewks
 
11.01.12
21:18
12 Конфигуратор1с
 
11.01.12
21:19
ТЗнач в (9) это СодержимоеТаблицы
13 GirlProgram
 
11.01.12
21:24
чем больше работаю с управляемыми формами, тем сильнее поражаюсь: Нафига весь этот бред?
14 Конфигуратор1с
 
11.01.12
21:25
(13)для веба.
15 Конфигуратор1с
 
11.01.12
21:27
(13) я могу заблуждаться, но с упр формами 1с чем то похожа на сайт, где вебстранички это наши упрформы, а сервер это пхпшный код. Хотя я в вебе совсем нулевой, да и в упр формах тоже.
16 GirlProgram
 
11.01.12
21:35
по (11) написала:

МассивДобавляемыхРеквизитов = Новый Массив;
   МассивУдаляемыхРеквизитов = Новый Массив;
   ИдКоллекции="Коллекция1";
   ИдТаблицы="Таблица1";
   КоллФормы=РеквизитФормыВЗначение(ИдКоллекции);

   Для каждого ТекКол из КоллФормы.Колонки Цикл
       МассивУдаляемыхРеквизитов.Добавить(ИдКоллекции+"."+ТекКол.Имя);
   КонецЦикла;
   
   Для каждого ТекКол из ТЗнач.Колонки Цикл
       МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ТекКол.Имя,ТекКол.ТипЗначения,ИдКоллекции));
   КонецЦикла;
   
   ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивУдаляемыхРеквизитов);
   ЗначениеВРеквизитФормы(ТЗнач,ИдКоллекции);
   
   // теперь динамически обновляем элементы формы

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

Ругается на РеквизитФормыВЗначение. Говорит, что ошибка при вызове метода контекста
17 Конфигуратор1с
 
11.01.12
21:37
(16)это на сервере?
18 zak555
 
11.01.12
21:37
УправляемаяФорма (ManagedForm)
РеквизитФормыВЗначение (FormAttributeToValue)
Синтаксис:

РеквизитФормыВЗначение(<ИмяРеквизита>, <Тип>)
Параметры:

<ИмяРеквизита> (обязательный)

Тип: Строка. Имя реквизита формы, который необходимо преобразовать.
Может быть указан реквизит данных формы (см. описание параметра <Объект> метода ДанныеФормыВЗначение).
<Тип> (необязательный)

Тип: Тип. Тип значения, получаемого из реквизита формы (данных формы). Если данный параметр не указан, то он также получается из реквизита формы. Если реквизит является составным типом и значение параметра не указано, генерируется исключение времени выполнения.
Возвращаемое значение:

Тип: Произвольный.
Описание:

Преобразует указанный реквизит формы в объект прикладного типа.

Доступность:

Сервер.
19 БибиГон
 
11.01.12
21:39
Доступность:

Сервер.
20 GirlProgram
 
11.01.12
21:39
(17) да
(18) читала...читала...читала, так и не поняла что в моем случае он должен сделать и почему не делает
21 zak555
 
11.01.12
21:40
(20) выполнить на сервере ?
22 GirlProgram
 
11.01.12
21:41
Коллекция1 и Таблица1, я так понимаю это произвольные наименования
23 Конфигуратор1с
 
11.01.12
21:41
КоллФормы=РеквизитФормыВЗначение("ПредварительныеДанные");
24 Конфигуратор1с
 
11.01.12
21:42
(22) нет это элемент формы
25 GROOVY
 
11.01.12
21:42
(18) нафига?!
26 Конфигуратор1с
 
11.01.12
21:42
тьху реквизит формы
27 andrewks
 
11.01.12
21:42
(16) у тебя, видимо код выполняется не на сервере

Коллекция1 - это реквизит формы
Таблица1 - это элемент формы
28 GirlProgram
 
11.01.12
21:43
а таблица это значит ТЗнач, таак, значит не туда повыставляла
29 Конфигуратор1с
 
11.01.12
21:44
&НаСервере
Процедура ЗаполнитьТабЧастьНаФорме()
// Реквизит формы "ДанныеТаблицы" создан средствами интерфейса конфигуратора(можно и программно), программно создадим колонки


// Элемент формы "ДанныеТаблицыНаФорме" создан средствами интерфейса конфигуратора(можно и программно), программно создадим колонки


// СодержимоеТаблицы - таблица значений



// создаем реквизиты для РЕКВИЗИТА ФОРМЫ "ДанныеТаблицы" (тип Таблица Значений)


МассивДобавляемыхРеквизитов = Новый Массив;

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

// пакетное создание и удаление колонок в РЕКВИЗИТЕ ФОРМЫ "ДанныеТаблицы" (тип Таблица Значений)


ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

// создаем элементы


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

ЭтаФорма.ПредварительныеДанные.Загрузить(ТЗнач);
30 Конфигуратор1с
 
11.01.12
21:44
(28) попробуй как в 29 если я  ничего не пропустил
31 GirlProgram
 
11.01.12
21:52
(30) пробовала ругается на
РеквизитФормы = Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ПредварительныеДанные", Колонка.Имя);

говорит, что ошибка при вызове контекста
32 GirlProgram
 
11.01.12
21:54
не контекста, а конструктора
33 andrewks
 
11.01.12
21:54
(31) показывай полный код
34 andrewks
 
11.01.12
21:54
(32) О_о
35 zak555
 
11.01.12
21:55
на сервере нет форм ?
36 andrewks
 
11.01.12
21:57
(35) есть. но не в виде окошка, а в виде контекста
37 GirlProgram
 
11.01.12
21:57
переписала (16), но тоже ругается на РеквизитФормы

МассивДобавляемыхРеквизитов = Новый Массив;
   МассивУдаляемыхРеквизитов = Новый Массив;
   ИдКоллекции="ПредварительныеДанные";
   ИдТаблицы="ТЗнач";
   КоллФормы=РеквизитФормыВЗначение(ИдКоллекции);

   Для каждого ТекКол из КоллФормы.Колонки Цикл
      МассивУдаляемыхРеквизитов.Добавить(ИдКоллекции+"."+ТекКол.Имя);
   КонецЦикла;
   
  Для каждого ТекКол из ТЗнач.Колонки Цикл
       МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ТекКол.Имя,ТекКол.ТипЗначения,ИдКоллекции));
   КонецЦикла;
   
   ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивУдаляемыхРеквизитов);
   ЗначениеВРеквизитФормы(ТЗнач,ИдКоллекции);
   
   // теперь динамически обновляем элементы формы

   ЭлТаб=Элементы.Найти(ИдТаблицы);
   Если ЭлТаб<>Неопределено Тогда
       Элементы.Удалить(ЭлТаб);
   КонецЕсли;
   ЭлТаб=Элементы.Добавить(ИдТаблицы,Тип("ТаблицаФормы"));
   ЭлТаб.ПутьКДанным=ИдКоллекции;
   ЭлТаб.Отображение=ОтображениеТаблицы.Список;
   Для каждого ТекКол из ТЗнач.Колонки Цикл
       ЭлКол=Элементы.Добавить(ИдТаблицы+ТекКол.Имя,Тип("ПолеФормы"),ЭлТаб);
       ЭлКол.Вид=ВидПоляФормы.ПолеВвода;
       ЭлКол.ПутьКДанным=ИдКоллекции+"."+ТекКол.Имя;
   КонецЦикла;
38 zak555
 
11.01.12
21:58
(36) "эмуляция" ?
39 GirlProgram
 
11.01.12
21:59
вот весь код данной процедуры с моими экспериментами

&НаСервере
Процедура ЗагрузкаДанныхВТабЗнач(КоличествоСтрок, КоличествоКолонок,КоличествоДанныхПредПросмотра,КоличествоСтрокПредпросмотра,КомМассив)
   ТЗнач = Новый ТаблицаЗначений;
   Для х = 1 по КоличествоКолонок Цикл
       Если ТЗнач.Колонки.Количество()<КоличествоКолонок Тогда
           ТЗнач.Колонки.Добавить();
       КонецЕсли;
   КонецЦикла;
   
   // добавляем строки предпросмотра
   для х = 1 по КоличествоСтрокПредпросмотра цикл
       Строка = ТЗнач.Добавить();
       Для у = 1 по КоличествоКолонок цикл
           Строка.Установить( у-1, КомМассив[у-1][х-1]);
       КонецЦикла;
   КонецЦикла;    

   //МассивДобавляемыхРеквизитов = Новый Массив;

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

   //// пакетное создание и удаление колонок в РЕКВИЗИТЕ ФОРМЫ "ДанныеТаблицы" (тип Таблица Значений)
   //
   //
   //
   //ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

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

   //ЭтаФорма.ПредварительныеДанные1.Загрузить(ТЗнач);
   
   МассивДобавляемыхРеквизитов = Новый Массив;
   МассивУдаляемыхРеквизитов = Новый Массив;
   ИдКоллекции="ПредварительныеДанные";
   ИдТаблицы="ТЗнач";
   КоллФормы=РеквизитФормыВЗначение(ИдКоллекции);

   Для каждого ТекКол из КоллФормы.Колонки Цикл
      МассивУдаляемыхРеквизитов.Добавить(ИдКоллекции+"."+ТекКол.Имя);
   КонецЦикла;
   
  Для каждого ТекКол из ТЗнач.Колонки Цикл
       МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ТекКол.Имя,ТекКол.ТипЗначения,ИдКоллекции));
   КонецЦикла;
   
   ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивУдаляемыхРеквизитов);
   ЗначениеВРеквизитФормы(ТЗнач,ИдКоллекции);
   
   // теперь динамически обновляем элементы формы

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


   
   
   //ПредварительныеДанные.СоздатьКолонки();
   //Колонки = ПредварительныеДанные.Колонки;    
   //для х=0 по Колонки.Количество()-1 цикл
   //    Колонки.Получить(х).Ширина = 10;
   //КонецЦикла;    
КонецПроцедуры
40 GROOVY
 
11.01.12
22:00
(35) Как утверждает 1С как раз наоборот. "Форма конструируется на сервере и ее __проекция__ отображается у клиента".
41 Конфигуратор1с
 
11.01.12
22:03
(39)а у тз тип колонки определен?
42 GirlProgram
 
11.01.12
22:06
(41) у чего конкретно?
43 GirlProgram
 
11.01.12
22:08
Колонка.ТипЗначения   - пусто
44 Конфигуратор1с
 
11.01.12
22:12
(43) а тип у конструктора обязательно указывать
45 andrewks
 
11.01.12
22:15
(39)

&НаСервере
Процедура ЗагрузкаДанныхВТабЗнач(КоличествоСтрок, КоличествоКолонок,КоличествоДанныхПредПросмотра,КоличествоСтрокПредпросмотра,КомМассив)
   ТЗнач = Новый ТаблицаЗначений;
   Для х = 1 по КоличествоКолонок Цикл
           ТЗнач.Колонки.Добавить("Колонка"+Формат(х,"ЧГ = 0"));
   КонецЦикла;
   
   // добавляем строки предпросмотра

   для х = 1 по КоличествоСтрокПредпросмотра цикл
       Строка = ТЗнач.Добавить();
       Для у = 1 по КоличествоКолонок цикл
           Строка.Установить( у-1, КомМассив[у-1][х-1]);
       КонецЦикла;
   КонецЦикла;    

   
   МассивДобавляемыхРеквизитов = Новый Массив;
   МассивУдаляемыхРеквизитов = Новый Массив;
   ИдКоллекции="ПредварительныеДанные";
   ИдТаблицы="ТабПолеПредвДанных";
   КоллФормы=РеквизитФормыВЗначение(ИдКоллекции);

   Для каждого ТекКол из КоллФормы.Колонки Цикл
       МассивУдаляемыхРеквизитов.Добавить(ИдКоллекции+"."+ТекКол.Имя);
   КонецЦикла;
   
  Для каждого ТекКол из ТЗнач.Колонки Цикл
       МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ТекКол.Имя,ТекКол.ТипЗначения,ИдКоллекции));
   КонецЦикла;
   
   ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивУдаляемыхРеквизитов);
   ЗначениеВРеквизитФормы(ТЗнач,ИдКоллекции);
   
   // теперь динамически обновляем элементы формы


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

КонецПроцедуры
46 GirlProgram
 
11.01.12
22:21
(45) я влюбилась!!!! Спасибо, спасибо, спасибо!!!!! Блин, теперь это все надо как-то в приходку теперь подгрузить.... :)
47 GirlProgram
 
11.01.12
22:33
А как мне обратиться к нужной теперь колонке в созданной таблице?
48 andrewks
 
11.01.12
23:19
(47) что хочешь сделать?
49 zak555
 
11.01.12
23:21
(48) она уже сделала
смотри  в (46) =)
50 GirlProgram
 
11.01.12
23:35
(48) (47) отпадает пока, хочу сделать так: Объект.ЗаполняемыйДокумент.ПолучитьОбъект().Товары.Очистить();
Только под управляемой не работает...
51 zak555
 
11.01.12
23:49
(50) так надо на форме очистить ТЧ Товары ?
52 GirlProgram
 
12.01.12
06:22
(51)Объект.ЗаполняемыйДокумент это у меня реквезит, в который выбирается документ поступления, теперь хочу обратиться к этому документу, очистить его таб часть и заполнить своими данными.
53 GirlProgram
 
12.01.12
07:08
Все, поняла, это возможно на сервере сделать
54 GirlProgram
 
12.01.12
08:38
делаю на сервере Объект.ЗаполняемыйДокумент.ПолучитьОбъект().Товары.Очистить();
но таблица почему-то не очищается....
55 GirlProgram
 
12.01.12
08:50
сделала так:
ОбъектНов = Объект.ЗаполняемыйДокумент.ПолучитьОбъект();
ОбъектНов.Товары.Очистить();
и все очистилось :)