Имя: Пароль:
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) От жеж овнокодер ))
Что только люди не придумают лишь бы свою любимую ТЗ везде запихать.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn