Имя: Пароль:
1C
1С v8
Загрузить таблицу значений в табличную часть формы обработки
,
0 Kleopatra2803
 
08.10.14
10:38
Доброе утро!
Мне нужно из модуля формы внешней обработки открыть другую форму этой же обработки. У обработки есть реквизит табличная часть, который размещен на второй форме обработки. При открытии этой формы в таблице должна располагаться таблица значений, которую я туда передам.
Проблема такая: форма открывается, но с пустой табличной частью. Реализую так:

&НаКлиенте
Процедура ОтметитьНоменклатуруНеДляПродажи()
    ТЗНеПродаем = ПолучитьНоменклатуруНеДляПродажи();
    ЗагрузитьВТЧНеДляПродажи(ТЗНеПродаем);
    Форма = ПолучитьФорму("ВнешняяОбработка.ЗагрузкаСправочникаНоменклатураУТ11.Форма.ВыбратьНепродаваемуюНоменклатуру");
                  
    Форма.ОткрытьМодально();
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьВТЧНеДляПродажи(ТЗНеПродаем)
    Объект.НоменклатураБезПродажи.Загрузить(ТЗНеПродаем);    
КонецПроцедуры


ТЗНеПродаем - таблица значений, которую нужно загрузить в табличную часть второй формы. В реквизит объекта таблица загружается, но на форме не появляется
1 Ёпрст
 
08.10.14
10:40
(0) а как она там должна появится, если вы её в открытую форму ну никак не передали ?
2 Ёпрст
 
08.10.14
10:41
вы получили форму, открыли её модально и.. всё.. и ничего с этой формой не сделали..ничего!
3 программистище
 
08.10.14
10:43
(0) ПолучитьФорму - получает форму, но форма ничего не знает про экземпляр объекта, из которого Вы открываете
туда нужно что-то передать
4 Kleopatra2803
 
08.10.14
10:48
(1), (2), (3) я понимаю, но как это сделать? метод загрузить на клиенте не работает. По идее, реквизит формы - табличная часть берет данные из реквизита обработки
5 Kleopatra2803
 
08.10.14
10:52
поэтому я загружаю тз в объект. если загружать тз на форму, и вместо Объект.НоменклатураБезПродажи.Загрузить(ТЗНеПродаем) писать Форма.Объект.НоменклатураБезПродажи.Загрузить(ТЗНеПродаем), причем в эту процедуру кроме тз передавать форму, то выходит ошибка передачи данных между клиентом и сервером, что логично, потому что вряд ли можно форму передать в качестве параметра
6 программистище
 
08.10.14
11:00
вот не помню, раньше работало
ПоместитьВоВременноеХранилище(<Данные>, <Адрес>)

помещаешь данные на сервер в хранилище
передаешь адрес
а в форме присозданиинасервере получаешь
либо тз конвертить в массив соответсвий
лет 5 не пользовался уже этим
7 Kleopatra2803
 
08.10.14
11:11
(6) а можно поподробнее? пыталась как-то разобраться с этим методом, но так и не смогла
8 Krolik Bezobraznik
 
08.10.14
11:18
Лучше ТЗ передай в качестве параметра формы в новую форму. А в новой форме п процедуре ПриСозданииНаСервере передай ТЗ в табличную часть.
9 Krolik Bezobraznik
 
08.10.14
11:24
Вот пример:

В первичной форме так:

ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Паллета", Паллета);
ФормаИнфо = ПолучитьФорму("ОбщаяФорма.ФормаИнфоОПаллете", ПараметрыФормы);
ОтветФормы = ФормаИнфо.ОткрытьМодально();

В открываемой форме так:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("Паллета") Тогда
ШКПаллеты = Параметры.Паллета.ШтрихКодУчета;
ЯчейкаХранения = Параметры.Паллета.ЯчейкаХранения;
СтатусПаллеты = Параметры.Паллета.СтатусПаллеты;
КонецЕсли;
КонецПроцедуры
10 Krolik Bezobraznik
 
08.10.14
11:24
Там правда не ТЗ а Структура, но и с ТЗ должно сработать.
11 программистище
 
08.10.14
11:34
(10) с тз так не прокатит
12 Kleopatra2803
 
08.10.14
11:45
(9) Как передать ТЗ во вторую форму в процедуру присозданиина сервере? Она у меня формируется в первой форме
13 Kleopatra2803
 
08.10.14
11:48
блин туплю, она же у меня уже в реквизите обработки лежит)
14 Krolik Bezobraznik
 
08.10.14
11:59
(0) К слову сказать у меня есть чувство, что в процедуре ОтметитьНоменклатуруНеДляПродажи у вас в переменной ТЗНеПродаем вовсе не таблица значений. Проверьте в отладчике.
15 Kleopatra2803
 
08.10.14
12:01
(14) Получилось!!! Сделала так:
в модуле первой формы:
&НаКлиенте
Процедура ОтметитьНоменклатуруНеДляПродажи()
    ТЗНеПродаем = ПолучитьНоменклатуруНеДляПродажи();
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("НоменклатураБезПродажи", ТЗНеПродаем);
        Форма = ПолучитьФорму("ВнешняяОбработка.ЗагрузкаСправочникаНоменклатураУТ11.Форма.ВыбратьНепродаваемуюНоменклатуру", ПараметрыФормы);
    Форма.ОткрытьМодально();
КонецПроцедуры

в модуле второй формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("НоменклатураБезПродажи") Тогда
        Объект.НоменклатураБезПродажи.Загрузить(Параметры.НоменклатураБезПродажи);
    КонецЕсли;
    
КонецПроцедуры

Спасибо большое - пребольшое!!!
16 Krolik Bezobraznik
 
08.10.14
12:04
(15) Незачто =) Но все же интересно какого типа у вас переменная ТЗНеПродаем в процедуре ОтметитьНоменклатуруНеДляПродажи. У меня чисто спортивный интерес.
17 программистище
 
08.10.14
12:15
(15) ТЗ на клиенте? хм...
18 Kleopatra2803
 
08.10.14
12:22
(16) таблица значений
19 Kleopatra2803
 
08.10.14
12:23
(17) он создавать тз не дает на клиенте, а работать с ней можно)
20 Krolik Bezobraznik
 
08.10.14
12:29
(19)
1. ТЗНеПродаем это реквизит в обработке или переменная создаваемая в процедуре на клиенте?
2. Процедура ПолучитьНоменклатуруНеДляПродажи у вас выполняется на сервере или на клиенте?
21 Kleopatra2803
 
08.10.14
12:38
(20)
1) это переменная, создаваемая в процедуре на сервере, которая вызывается в процедуре на клиенте;
2) НаСервере. Как раз та, в которой создается программно тз
22 программистище
 
08.10.14
13:02
тогда не должно работать )))
23 Krolik Bezobraznik
 
08.10.14
13:40
Согласен. Не должно так работать. Чудеса прям.
24 Maniac
 
08.10.14
13:42
Через хранилище все надо делать.
25 Kleopatra2803
 
08.10.14
13:45
(22), (23) но работает же)
26 Maniac
 
08.10.14
13:45
АдресПередаваемыхПараметров = ПоместитьДанныеВоВременноеХранилище(); СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("Адрес",АдресПередаваемыхПараметров);
27 Kleopatra2803
 
08.10.14
13:45
я уже с этими управляемыми формами ничему не удивляюсь)
28 Fish
 
08.10.14
13:47
(25) Работает только потому, что это не переменная а реквизит обработки. Сам же написал в (13).
29 Krolik Bezobraznik
 
08.10.14
13:56
(26) Зачем так усложнять?
30 программистище
 
08.10.14
14:05
(28)если бы реквизит формы тогда бы работало
но опять же с сервера на клиент не передашь
а тем более нужно не просто загрузить
ТЧ.загрузить(Реквизитформы.Выгрузить())
31 Krolik Bezobraznik
 
08.10.14
14:08
Если это реквизит обработки, то ему так просто не присвоить
Объект.ТЗ = СоздатьТЗ(); на клиенте. А у нее тем более вообще ТЗ = СоздатьТЗ(), да еще и на клиенте. Клеопатра, вы что то утаиваете от нас.
32 Maniac
 
08.10.14
14:23
(29) чем усложнять? никто ничего не усложняет. именно так и есть правильный вариант.