Имя: Пароль:
1C
 
ОткрытьФорму("Документ.") и Таблица Значений
0 Pro1001C
 
13.08.18
20:21
Подскажите такой момент.

Есть конструкция вида:

ПараметрыЗаполнения=ПолучитьИзВременногоХранилища(Объект.АдресХранилища);
        //ПараметрыЗаполнения.Вставить("Товары",ВремТЗ);
                
        ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ПараметрыЗаполнения);
        ОткрытьФорму("Документ.ПеремещениеТоваров.ФормаОбъекта", ПараметрыФормы,,Объект.АдресХранилища);

В обработке при сробатывании соответственно открывает форма документа перемещения, не записанная. Но, в типовой в процедура ОбработкаЗаполнения добавили код с обращение к колонкам таблицы Товары.
ВремТЗ имеет тип ДанныеФормыКоллекция и соответственно начинает ругаться на отсутствие колонок. Вопрос как с клиента передать на сервер именно таблицу значений, но без правки типовой, соответственно без правки в процедуре ОбработкаЗаполнения модуля документа?
1 Cyberhawk
 
13.08.18
20:24
Раб
2 Cyberhawk
 
13.08.18
20:25
Что за типовая?
3 polosov
 
13.08.18
20:28
(0) ТЗ можно преобразовать в массив структур.
4 Pro1001C
 
13.08.18
20:32
(2) ут11.4
(3) можно, но идет проверка именно для таблицы, если туда массив отправлю работать не будет
5 Cyberhawk
 
13.08.18
20:34
(4) Покажи код этой проверки
6 Cyberhawk
 
13.08.18
20:34
Он типовой или кто-то дописал?
7 Pro1001C
 
13.08.18
20:38
код типовой

Функция ДокументОснованиеПриЗаполнении(ДанныеЗаполнения)
    
    Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура")
        И ДанныеЗаполнения.Свойство("Основание") Тогда
        
        Возврат ДанныеЗаполнения.Основание;
        
    ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура")
        И ДанныеЗаполнения.Свойство("МассивЗаказов") Тогда
        
        Возврат ДанныеЗаполнения.МассивЗаказов[0];
        
    ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура")
        И ДанныеЗаполнения.Свойство("АктОРасхождениях")
        И ДанныеЗаполнения.Свойство("ПеремещениеТоваров") Тогда
        
        Возврат ДанныеЗаполнения.ПеремещениеТоваров;
        
    ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура")
        И ДанныеЗаполнения.Свойство("Товары")
        И ДанныеЗаполнения.Товары.Колонки.Найти("ЗаказНаПеремещение") <> Неопределено
    Тогда
        
        Возврат ДанныеЗаполнения.Товары[0].ЗаказНаПеремещение;
        
    ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПоступлениеТоваров") Тогда
        
        Возврат ДанныеЗаполнения;
        
    КонецЕсли;
    
    Возврат Неопределено;
    
КонецФункции


срабатывает соответственно:
ДанныеЗаполнения.Товары.Колонки.Найти("ЗаказНаПеремещение") <> Неопределено
8 Cyberhawk
 
13.08.18
20:40
Ну так ты или не передавай свойство "Товары" в данных заполнения, или передавай там то, что будет иметь колонки
9 Pro1001C
 
13.08.18
20:43
(8) в этом то и дело.
Код: ОткрытьФорму("Документ.ПеремещениеТоваров.ФормаОбъекта", ПараметрыФормы,,Объект.АдресХранилища);

отрабатывает на клиенте. Как мне в товары засунуть что-то, что имеет колонки?
В клиенте ТЗ нет, через ПолучитьИзВременногоХранилища ТЗ не передать, а то, что ТЗ передается с сервера на клиент имеет тип ДанныеФормыКоллекция
10 Cyberhawk
 
13.08.18
20:44
У меня там "или". Значит придется тебе воспользоваться первым.
11 Pro1001C
 
13.08.18
20:52
жаль, придется расширение подключать и преобразовывать сперва данныеформыколлекция и тз
12 Cyberhawk
 
13.08.18
21:05
А на клиенте "ПараметрыЗаполнения" какой тип имеют?
13 palsergeich
 
13.08.18
21:10
(0) Если на клиенте можно через ВК создать ТЗ (тут в одном из соседних топиков умелец показывал), то с клиента на сервер - ни как. Есть вариант - на вызывающей форме создать программно добавить реквизит типа таблица значений, заполнить ее и передать, но это, простите меня, треш
14 Cyberhawk
 
13.08.18
21:14
"реквизит типа таблица значений, заполнить ее и передать" // Так он с клиента вызывает ОткрытьФорму, то что придет в обработку заполнения все равно будет иметь тип "ДанныеФормыКоллекция"
15 palsergeich
 
13.08.18
21:14
А не проще сделать по другому:
1) На сервере вызываюзщзей формы создаем ТЗ и помещаем во Временное хранилище и передаем адрес на клиент
2) Открываем форму и в структуру ПараметрыЗаполнения вставляем какой нибудь уникальный ключ, типо КостыльДляТЗ, а значение - адрес ВХ.
3) Делается подписка на событие ОбработкаЗаполнения, где смотрится. Если ДанныеЗапонения.Свойство("КостыльДляТЗ") Тогда Искомый код КонецЕсли
+ не поганится типовой модуль
+ Не самый плохой костыль
- Это Костыль
16 palsergeich
 
13.08.18
21:17
(14) Дык ТС страдает, что нужно передать что то что имеет колонки. ТЗ - не может. то что он передает не имеет нужных колонок- так пусть создаст ДФК нужжной структуры. Но это лютейший костыль, лучше вариант предложенный мной выше.
17 Pro1001C
 
13.08.18
21:28
(15) пока так и сделал, в расширении перед обработкойзаполнения преобразую ДФК в ТЗ

(12) структура
18 Cyberhawk
 
13.08.18
21:34
(17) Вставь в эту структуру ключ "Товары" со значением типа "Структура", в которой будет ключ "Колонки" со значением типа "Массив", в котором есть строка "ЗаказНаПеремещение" :)
Правда непонятно, что ты хочешь добиться от типового метода
19 Cyberhawk
 
13.08.18
21:35
(16) "то что он передает не имеет нужных колонок" // Неправильно. У того, что он передает, нет свойства "Колонки". Создание нужной ТЗ не спасет по озвученной мною выше причине
20 palsergeich
 
13.08.18
21:36
(19) Согласен, неверно прочитал.
21 palsergeich
 
13.08.18
21:38
(17) Тоже вариант.
22 Pro1001C
 
13.08.18
21:39
(18) нет, так не пойдет. Форма открывается с заполненной табличной частью товары, которая как раз и идет из "Товары"
23 Cyberhawk
 
13.08.18
21:46
(22) Ну тогда сделай так, чтобы до этой ветки проверка условий не доходила. Например, в структуру на клиенте вставить свойство "Основание"
24 palsergeich
 
13.08.18
22:10
Может кому пригодится:
Как создать таблицу значений на клиенте:
ОписаниеТЗ = Новый ОписаниеТипов("ТаблицаЗначений");
ТабЗначений = ОписаниеТЗ.ПривестиЗначение();
25 Pro1001C
 
13.08.18
22:32
(24) спасибо, не знал
26 polosov
 
14.08.18
10:32
(24) От жеж овнокодер ))
Что только люди не придумают лишь бы свою любимую ТЗ везде запихать.
Ошибка? Это не ошибка, это системная функция.