УФ, Как выгрузить результат запроса в дерево на форме |
Я |
28.10.12 — 17:27
Подскажите, как выгрузить результат запроса в дерево на форме?
Пишу:
лпДерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЗначениеВРеквизитФормы(лпДерево, «Дерево»);
ЗначениеВДанныеФормы(лпДерево, «Дерево»);
Ошибка: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
по причине:
Недопустимое значение параметра (параметр номер ‘2’)
Что я делаю не так?
1 — 28.10.12 — 17:29
&НаКлиенте
Процедура ВыраститьДуб(Команда)
ИнициализацияДерева(ЗначениеНуля);
КонецПроцедуры
&НаСервере
Процедура ИнициализацияДерева(Ноль)
Дуб=Новый ДеревоЗначений;
Дуб.Колонки.Добавить(«Количество»);
Ветка0=Дуб.Строки.Добавить();
Ветка0.Количество=Ноль;
Ветка1=Ветка0.Строки.Добавить();
Ветка1.Количество=Ноль;
Ветка1.Строки.Добавить().Количество=10;
Ветка1.Строки.Добавить().Количество=5;
Ветка1.Строки.Добавить().Количество=10;
Ветка1=Ветка0.Строки.Добавить();
Ветка1.Количество=Ноль;
Ветка2=Ветка1.Строки.Добавить();
Ветка2.Количество=Ноль;
Ветка2.Строки.Добавить().Количество=7;
ЗначениеВРеквизитФормы(Дуб, «Дерево»);
КонецПроцедуры
2 — 28.10.12 — 17:30
(1) а Дерево — реквизит формы
3 — 28.10.12 — 17:34
(1)Тоже ошибку пишет:
Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
ЗначениеВРеквизитФормы(Дуб, «Дерево»);
по причине:
Недопустимое значение параметра (параметр номер ‘2’)
4 — 28.10.12 — 17:35
(3) что такое Дерево?
5 — 28.10.12 — 17:36
(4) Реквизит управляемой формы и типом значения ДеревоЗначений
6 — 28.10.12 — 17:39
(5) аналогично. но у меня работает
7 — 28.10.12 — 17:50
8 — 28.10.12 — 17:56
(7)Хм. В управляемом приложении работает. Но у меня режим обычного приложения с поддержкой УФ, может из-за этого не хочет?
9 — 28.10.12 — 18:03
а у меня эта форма ваще в обычном не открывается
10 — 28.10.12 — 18:07
(9)У меня тоже не открывается, я ее код в свою обработку скопировал
11 — 28.10.12 — 18:11
12 — 28.10.12 — 18:15
(11)Как сделал? 🙂
13 — 28.10.12 — 18:15
(12)&НаКлиенте
Процедура ВыраститьДерево(Команда)
СделатьДерево();
КонецПроцедуры
&НаСервере
Процедура СделатьДерево()
Запрос=Новый Запрос;
Запрос.Текст=»выбрать 50 как раз»;
ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), «Дуб»);
КонецПроцедуры
14 — 28.10.12 — 18:26
почему-то не открываются внешние обработки на УФ в обычном приложении. А если обработка в конфигурации, то открывается
15 — 28.10.12 — 18:54
телепатирую: получаемое дерево не совпадает по структуре с реквизитом формы
16 — 28.10.12 — 18:57
(14) правов не хватает
17 — 28.10.12 — 19:01
(16) у меня мелкая конфигурация, с нуля писанная. пользователей в базе вообще нет, роль одна — повелитель
18 — 28.10.12 — 19:01
(17) в смысле такая же ерунда
19 — 28.10.12 — 19:12
а, ёпрст! ну конечно, а как вообще согут открыться УФ из обычного приложения!!! Как вообще из обычного каике УФ могуть открываться!!!
Обратное иногда верно, но только если для этого сделан ряд телодвижений и к тому-же не всегда это адекватно по трудозатратам, не редко проще написать 2 разных обработки для УФ и для обычных.
20 — 28.10.12 — 19:13
(19) показать пример УФ в обычном приложении?
21 — 28.10.12 — 19:16
(20)документа у которого есть и форма для УФ и для обычного? Так у обработок есть только одна основная форма для того режима под который рисолвалась
22 — 28.10.12 — 19:18
(21) ну одна основная. управляемая. во внешней не открывается, во встроенной открывается
23 — 28.10.12 — 19:21
основной режим запуска = ?
24 — 28.10.12 — 19:23
(23) Управляемое приложение
25 — 28.10.12 — 19:23
перекроил на обычное. результат тот же — не открывается
26 — 28.10.12 — 19:23
и внешняя форма под УФ не открывется?
27 — 28.10.12 — 19:24
(26) ахха
28 — 28.10.12 — 19:25
управляемая форма внешней обработки в обычном режимен не открывается.
управляемая форма втроенной обработки в обычном режимен не открывается.
29 — 28.10.12 — 19:25
а у меня всё нормально отрбатывает!!! фотку дать?
30 — 28.10.12 — 19:25
(28) последнее не убрать 😉
31 — 28.10.12 — 19:26
(29) не, не дать, верю 😉
но как-то интересно, что я делаю не так…
32 — 28.10.12 — 19:26
так если основной режим запуска = УФ, то основной это и ест УФ, а обычные форрмы — это огрызки старого….
33 — 28.10.12 — 19:27
забавно…. надо будет разобраться с этим вопросом… но завтра… поздновато уже…
34 — 29.10.12 — 05:24
(19) Так обычное приложение может поддерживать УФ, если в свойствах конфигурации поставить галочку «Использовать управляемые формы в обычном приложении».
35 — 29.10.12 — 05:59
Wobland, ну короче, что-бы не повторять то что упорно не получается — дай мне твой нераб. пример — а то я или не то делаю или нифига не могу добиться того что у тебя не работает
36 — 29.10.12 — 07:08
(35) а вон же — в (7)
37 — 29.10.12 — 07:18
(36) и конфу надо! с её настройками и кодом как её вызывабют! думается всё кроется в каких-то деталах…
38 — 29.10.12 — 08:09
(37) а она дома…
39 — 29.10.12 — 08:10
вот-же нафиг!
40 — 29.10.12 — 08:14
(39) да можно взять совсем голую конфигурацию и играться с ней, но не до этого сейчас
41 — 29.10.12 — 16:22
(15)Был прав! Все получилось! Всем большое спасибо! 🙂
42 — 29.10.12 — 16:26
43 — 29.10.12 — 16:30
(43) сходил, я не так запускал… надоб было с тебя сразу конфу требовать
44 — 29.10.12 — 16:33
(43) надо было всё-так фотку просить 😉
45 — 29.10.12 — 17:22
(44) всё-же дай конфу а я покалупаюсь при случае
46 — 29.10.12 — 17:24
rphosts
47 — 29.10.12 — 17:38
забрал — в выхи помучаю
Дерево значений в управляемой форме
Свойства и методы универсальных коллекции значений типа дерево значений как и таблицы значений не доступны в тонком клиенте. Их нужно создавать на сервере, а затем методом контекста формы ЗначениеВРеквизитФормы(<Значение>, <ИмяРеквизита>) преобразовать значение объекта в реквизит управляемой формы с указанным именем ИмяРеквизита
Мне дали задание – создать форму списка заказа в виде дерева значений, как показано на рис 1

Форма создается очень просто в конфигураторе ( см рис 2)

Однако, у меня не получилось на сервере создавать дерево значений в путем выгрузки результата запроса по группировкам в дерево таким образом :
Дерево = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
У меня возникала ошибка при вызове метода контекста формы:
ЗначениеВРеквизитФормы(Дерево, “ДеревоЗаказов”);
Причина ошибки была в том, что структура колонок реквизита формы ДеревоЗаказов не соответствовала структуре объекта дерево, полученного в результате выгрузки запроса. Я не стал глубоко об этом думать и решил создавать дерево значений в цикле. Программный код показан ниже:
&НаСервере Процедура ЗаполнитьДеревоНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Заказ.Ссылка КАК Ссылка, | НАЧАЛОПЕРИОДА(Заказ.ДатаПриема, ЧАС) КАК Время |ИЗ | Документ.Заказ КАК Заказ |ГДЕ | Заказ.ДатаПриема МЕЖДУ &ДатаНач И &ДатаКон | |УПОРЯДОЧИТЬ ПО | Заказ.ДатаПриема |ИТОГИ ПО | Время"; Запрос.УстановитьПараметр("ДатаКон", Период.ДатаОкончания); Запрос.УстановитьПараметр("ДатаНач", Период.ДатаНачала); РезультатЗапроса = Запрос.Выполнить(); // Так не получается и пришлось создать дерево в цикле. Тема статьи //Дерево = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); Дерево = Новый ДеревоЗначений; Дерево.Колонки.Добавить("Время"); Дерево.Колонки.Добавить("Заказ"); ВыборкаВремя = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаВремя.Следующий() Цикл Строка = Дерево.Строки.Добавить(); Строка.Время= ВыборкаВремя.Время; ВыборкаДетальныеЗаписи = ВыборкаВремя.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Нов=Строка.Строки.Добавить(); Нов.Заказ= ВыборкаДетальныеЗаписи.Ссылка; КонецЦикла; КонецЦикла; ЗначениеВРеквизитФормы(Дерево, "ДеревоЗаказов"); КонецПроцедуры
Для создания полной копии исходного дерева значений можно использовать метод метод скопировать:
НовоеДеревоСостава = ДеревоСостава.Скопировать();
Следующая процедура предназначена для заполнения реквизита формы типа «ДеревоЗначений»
Параметры:
КоллекцияЭлементовДерева – реквизит формы, который имеет тип «ДеревоЗначений» . Реквизит заполняется значениями из второго параметра процедуры.
ДеревоЗначений – ДеревоЗначений – параметр содержит данные для заполнения.
&НаСервере
Процедура ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ДеревоЗначений) Экспорт
Для Каждого Строка Из ДеревоЗначений.Строки Цикл
ЭлементДерева = КоллекцияЭлементовДерева.Добавить();
ЗаполнитьЗначенияСвойств(ЭлементДерева, Строка);
Если Строка.Строки.Количество() > 0 Тогда
заполнитьКоллекциюЭлементовДереваДанныхФормы(ЭлементДерева.ПолучитьЭлементы(), Строка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Пример вызова процедуры:
КоллекцияЭлементовДерева =Элементы.Дерево.ПолучитьЭлементы();
КоллекцияЭлементовДерева.Очистить();
ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ДеревоРезультатСКД);
ЗначениеВРеквизитФормы. Ошибка «Недопустимое значение параметра (параметр номер ‘2’)»
Ошибка возникла при преобразовании дерева значений в соответствующий реквизит формы. ДеревоЗначений создавалось запросом и его методом
Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)
Реквизит формы также имеет тип (ДеревоЗначений) — соответственно Типы совпадают. Причиной оказалось несоответствие колонок ДереваЗначений и реквизита на форме. Их количество и имена должны совпадать.
Недостаточно прав для комментирования
Господа, помогите решить проблему. Есть обработка с ТЧ, на форме УФ данная тч выведена как дерево. Нужно результат запроса выгрузить в дерево &НаСервере ошибка {Форма.Форма.Форма}: Ошибка при установке значения атрибута контекста (Затраты) Объект.Затраты = Запрос.Выполнить.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); по причине: Нельзя изменять поле, содержащее объект данных формы Как обойти ее?
брр… {Форма.Форма.Форма}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение) по причине: Недопустимое значение параметра (параметр номер ‘1’) что не так?
Пробуй так: Объект.Затраты.Загрузить(Запрос.Выполнить.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам)); Ты собрался просто так присвоить ТаблицуЗначений КоллекцииФормы? скорее наоборот, ЗначениеВДанныеФормы
Загрузить не работает, пробовал
у тебя на форме расположен элемент «Дерево» или ТЧ с отображением Дерево?
{Форма.Форма.Форма}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы) ЗначениеВРеквизитФормы(Дерево,»Объект.Затраты»); по причине: Недопустимое значение параметра (параметр номер ‘2’)
Так попробуй ЗначениеВРеквизитФормы(Дерево,Затраты);
вместо ЗначениеВРеквизитФормы сделай ЗначениеВДанныеФормы
Вроде без Объект, просто Затраты. Только в запросе нет группировок, как определить где родитель, а где просто запись?
просто «Затраты» не работает
ЗначениеВДанныеФормы пробовал ?
отказался от реквизита объекта. Просто дерево на форме, работает на ура
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
О нюансах работы в 1С с ЗначениеВРеквизитФормы и ошибке Недопустимое значение параметра (параметр номер ‘2’).
ЗначениеВРеквизитФормы выполняется на сервере. Разработчики платформы автоматизировали процесс передачи данных на клиент — вручную на клиенте присваивать значение полю не нужно.
Проще всего выгрузить результат выполнения запроса с вариантом обхода по группировкам. Тогда на выходе будет ДеревоЗначений и тип данных совпадет с тем, что установлен в табличном поле по-умолчанию. Однако, если табличное поле базируется на ТаблицаЗначений — обход по группировкам в выгрузке не нужен.
Если что-то не так — получите ошибку Недопустимое значение параметра (параметр номер ‘2’).
Чтобы исправить ошибку «Недопустимое значение параметра (параметр номер ‘2’)» нужно проверить:
1. Тип данных реквизита на форме должен совпадать с типом данных который хотите присвоить реквизиту (ДеревоЗначений, ТаблицаЗначений).
Формирование ДеревоЗначений:
Запрос.Выполнить.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам)
Формирование ТаблицаЗначений:
Запрос.Выполнить.Выгрузить()
2. Количество и имена колонок в результате запроса должны совпадать с количеством и именами в табличном поле на форме.
3. Имя реквизита на форме должно совпадать с именем указанном в методе ЗначениеВРеквизитФормы и иметь тип Строка. Рекомендую копировать текст и вставлять в места где он должен совпадать.
Если ошибка сохраняется — перепроверьте все пункты в отладчике.
Чтобы научиться работать с методом ЗначениеВРеквизитФормы нужен определенный опыт. Со временем вы обязательно научитесь пользоваться им без ошибок.
Реквизиты управляемых форм
Автор mindruk, 08 авг 2013, 11:49
0 Пользователей и 1 гость просматривают эту тему.
День добрый.
При создании внешнего отчета возник вопрос о выводе результата на форму.
На форме есть реквизит ТабДок типа Табличный документ.
Я его передаю как параметр в функцию выполняемую на Сервере и заполняю данными.
Если в конце функции возвращаю ТабДок тогда могу вывести в отдельном окне — а нужно вывести на форме.
Пытался использовать ЗначениеВДанныеФормы(ТабДок,Объект.ТабДок); 
Типы совпадают — Табличный документ, но выскакивает ошибка несоответствие параметра №1 
Подскажите где я ошибаюсь — и вообще Табличный документ можно преобразовывать в реквизит?
Используйте ЗначениеВРеквизитФормы() и уберите ТабДок из объекта, не место ему там.
Убрать ТабДок из объекта — значит убрать реквизит?
И не могу нигде найти как мне правильно вывести ТабличныйДокумент созданный программно на форму.
В отдельном окне получается а на форму не очень…
Помогите разобраться пожалуйста…
Листинг примерно такой
& На Сервере \кусок
ТаблДок = Новый ТабличныйДокумент;
ТаблДок.Очистить();
Макет = РеквизитФормыВЗначение(«Объект»).ПолучитьМакет(«Макет»);
Шп = Макет.ПолучитьОбласть(«Шапка»);
Шп.параметры.ДатаОтчета = Формат(ДатаОтчета,»ДЛФ=DD»);
ТаблДок.Вывести(Шп);
Заг = Макет.ПолучитьОбласть(«Заголовок|Начало»);
Кол = Макет.ПолучитьОбласть(«Заголовок|Колонка1»);
СтрокаВыводаНачало = Макет.ПолучитьОбласть(«Строка|Начало»);
СтрокаВыводаКол = Макет.ПолучитьОбласть(«Строка|Колонка1»);
ПТР = Макет.ПолучитьОбласть(«ПустаяСтрока|Начало»);
ПТРК = Макет.ПолучитьОбласть(«ПустаяСтрока|Колонка1»);
\выполняю кучу действий и в итоге получаю свой документ
если я делаю Возврат(ТаблДок) — тогда на &Клиенте я могу его вывести — но в отдельном окне,а мне надо на форму
я понимаю что надо использовать ЗначениеВРеквизитФормы() но если пишу
ЗначениеВРеквизитФормы(ТаблДок,ТабДок) получается плохо — несоответствие параметра1
ТаблДок — тип Табличный документ — создаю и заполняю сам
ТабДок — тип табличный документ — реквизит на форме



вместо ЗначениеВРеквизитФормы(ТаблДок,ТабДок)
нужно писать
ЗначениеВРеквизитФормы(ТаблДок,»ТабДок»)
{Форма.Форма.Форма(374)}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
ЗначениеВРеквизитФормы(ТаблДок,»ТабДок»);
по причине:
Недопустимое значение параметра (параметр номер ‘2’)
Час от часу не легче?!
Но вообще то все нужно делать не так.
Ничего конвертировать никуда не нужно. Нужно просто использовать тот объект, который находится на форме. Для примера прикладываю обработку.
Вай, шайтаномо насальнико…
ОГРОМНОЕ СПАСИБО 
Теги:
- Форум 1С
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
Реквизиты управляемых форм
Похожие темы (5)
![]()
Поиск
|
ТрисТан 0 / 0 / 0 Регистрация: 27.11.2012 Сообщений: 92 |
||||
|
1 |
||||
Дерево Значений в квадрате27.04.2016, 17:05. Показов 2062. Ответов 4 Метки нет (Все метки)
Народ помогите
Не могу понять как программно перевязать Родителя и сохранить иерархию
__________________
0 |
|
GreenkA
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
|
27.04.2016, 17:14 |
2 |
|||
|
ТрисТан, попробуйте так:
0 |
|
ТрисТан 0 / 0 / 0 Регистрация: 27.11.2012 Сообщений: 92 |
||||
|
28.04.2016, 12:13 [ТС] |
3 |
|||
|
Пробовал нюанс в том что мне нужно только иерархия по полю наборы {Документ.ЭР_КомплексныеЗакупкиКлиентов.Форма.Форм аДокумента.Форма(154)}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы) Добавлено через 5 минут Добавлено через 2 часа 23 минуты
Отрабатывает нормально только вот иерархия не сохраняется что делать ?
0 |
|
GreenkA
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
|
28.04.2016, 12:19 |
4 |
|||
|
ТрисТан, тогда используем рекурсию:
0 |
|
0 / 0 / 0 Регистрация: 27.11.2012 Сообщений: 92 |
|
|
28.04.2016, 15:54 [ТС] |
5 |
|
Уже сделал спасибо тему можно считать закрытой
0 |