Вход | Регистрация



ОткрытьФорму("Документ.") и Таблица Значений

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

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

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

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

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

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


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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс, 1996 г.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует