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


1С:Предприятие ::

Метки: 

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

Я
   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) От жеж овнокодер ))
Что только люди не придумают лишь бы свою любимую ТЗ везде запихать.



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