ЗначениеВРеквизитФормы: Недопустимое значение параметра (параметр номер ‘2’)
На форме создал таблицу значений, с именем «ИмяТаблицыНаФорме».
Получаю ошибку Недопустимое значение параметра (параметр номер ‘2’)
ТЗ = Запрос.Выполнить().Выгрузить(); ДобавляемыеРеквизиты = Новый Массив; Для Каждого Колонка Из ТЗ.Колонки Цикл ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ИмяТаблицыНаФорме", Колонка.Заголовок)); КонецЦикла; ИзменитьРеквизиты(ДобавляемыеРеквизиты); ЗначениеВРеквизитФормы(ТЗ,"ИмяТаблицыНаФорме");
Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы) по причине:
Недопустимое значение параметра (параметр номер ‘2’)
&НаСервере Процедура СоздатьТаблицуФормы(Знач ИмяПоляТаблицыФормы, Знач ИмяРеквизитаДанныеФормыКоллекция, Знач ТаблицаЗначений) // Если руками не создали эелемент формы Таблица, то создается программно Если Элементы.Найти(ИмяПоляТаблицыФормы) = Неопределено Тогда ЭлементРеквизита = Элементы.Добавить(ИмяПоляТаблицыФормы, Тип("ТаблицаФормы"),); ЭлементРеквизита.ПутьКДанным = ИмяРеквизитаДанныеФормыКоллекция; КонецЕсли; УдаляемыеРеквизиты = Новый Массив; РеквизитыДляУдаления = ПолучитьРеквизиты(ИмяРеквизитаДанныеФормыКоллекция); Для Каждого РеквизитУдаления Из РеквизитыДляУдаления Цикл УдаляемыеРеквизиты.Добавить(ИмяРеквизитаДанныеФормыКоллекция+"."+РеквизитУдаления.Имя); // Удаляем элементы формы Элементы.Удалить(Элементы[ИмяПоляТаблицыФормы+РеквизитУдаления.Имя]); КонецЦикла; // Добавление реквизитов в таблицу формы ДобавляемыеРеквизиты = Новый Массив; Для каждого Колонка Из ТаблицаЗначений.Колонки Цикл ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ИмяРеквизитаДанныеФормыКоллекция, Колонка.Заголовок)); КонецЦикла; ИзменитьРеквизиты(ДобавляемыеРеквизиты,УдаляемыеРеквизиты); // Добавление элементов форму Для каждого Колонка Из ТаблицаЗначений.Колонки Цикл ЭлементРеквизита = Элементы.Добавить(ИмяПоляТаблицыФормы + Колонка.Имя, Тип("ПолеФормы"), Элементы[ИмяПоляТаблицыФормы]); ЭлементРеквизита.ПутьКДанным = ИмяРеквизитаДанныеФормыКоллекция + "." + Колонка.Имя; ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода; КонецЦикла; ЗначениеВРеквизитФормы(ТаблицаЗначений, ИмяРеквизитаДанныеФормыКоллекция); КонецПроцедуры &НаСервере Процедура ВПоискНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслугСерии.Серия КАК Серия, | РеализацияТоваровУслугСерии.Ссылка КАК Реализация, | РеализацияТоваровУслугСерии.Ссылка.ЗаказКлиента КАК ЗаказКлиента, | РеализацияТоваровУслугСерии.Ссылка.Контрагент КАК Контрагент, | РеализацияТоваровУслугСерии.Ссылка.Договор КАК Договор |ИЗ | Документ.РеализацияТоваровУслуг.Серии КАК РеализацияТоваровУслугСерии |ГДЕ | РеализацияТоваровУслугСерии.Серия В | (ВЫБРАТЬ | СерииНоменклатуры.Ссылка КАК Ссылка | ИЗ | Справочник.СерииНоменклатуры КАК СерииНоменклатуры | ГДЕ | СерииНоменклатуры.Наименование ПОДОБНОНаименование) | |УПОРЯДОЧИТЬ ПО | Серия |АВТОУПОРЯДОЧИВАНИЕ"; Запрос.УстановитьПараметр("Наименование", "%"+НомерФН+"%"); РезультатЗапроса = Запрос.Выполнить(); ТаблицаЗапроса = Запрос.Выполнить().Выгрузить(); СоздатьТаблицуФормы("ТЗ","ТЗ",ТаблицаЗапроса); КонецПроцедуры &НаКлиенте Процедура ВПоиск(Команда) ВПоискНаСервере(); КонецПроцедуры
Источник
ЗначениеВРеквизитФормы, недопустимое значение параметра ( параметр номер ‘2’)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ДоговорыКонтрагентов.Контрагент КАК Контрагент,
| ДоговорыКонтрагентов.Партнер,
| СоглашенияСКлиентами.Ссылка КАК Соглашение,
| СоглашенияСКлиентами.ГрафикОплаты,
| ДоговорыКонтрагентов.Ссылка КАК Договор,
| ДоговорыКонтрагентов.ОграничиватьСуммуЗадолженности,
| ДоговорыКонтрагентов.ДопустимаяСуммаЗадолженности,
| ДоговорыКонтрагентов.ЗапрещаетсяПросроченнаяЗадолженность
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
| ПОЛНОЕ СОЕДИНЕНИЕ Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами
| ПО ДоговорыКонтрагентов.Контрагент = СоглашенияСКлиентами.Контрагент
| И ДоговорыКонтрагентов.Партнер = СоглашенияСКлиентами.Партнер
|ГДЕ
| ВЫБОР
| КОГДА ДоговорыКонтрагентов.Ссылка ЕСТЬ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ ДоговорыКонтрагентов.ПометкаУдаления <> ИСТИНА
| И ДоговорыКонтрагентов.ТипДоговора = ЗНАЧЕНИЕ(Перечисление.ТипыДоговоров.СПокупателем)
| КОНЕЦ
| И ВЫБОР
| КОГДА СоглашенияСКлиентами.Ссылка ЕСТЬ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ СоглашенияСКлиентами.ПометкаУдаления <> ИСТИНА
| И СоглашенияСКлиентами.Типовое = ЛОЖЬ
| КОНЕЦ
|ИТОГИ ПО
| Контрагент»;
Ругается на строку:
ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам), «СписокДоговоров»);
Недопустимое значение параметра (параметр номер ‘2’)
Источник
Как заполнить Реквизит УФ Дерево значений.
После ввода кавычек в ЭтаФорма.ЗначениеВРеквизитФормы(ДеревоЗначений, »
автоподбор срабатывает.
у меня вот целиком объект передавался. наверное, потому, что проблемы были с отдельным реквизитом. сдаюсь
Сервер, толстый клиент, внешнее соединение.
Внимание! В толстом клиенте (обычное приложение) передача значений данного типа с клиента на сервер и обратно приводит к возникновению исключения.
(0)Непосредственное заполнение через ПолучитьЭлементы() вместо «.Строки» получилось, то хотел бы сначала Дерево подготовить, а потом его загрузить в реквизит формы.
Нашел в «Библиотеке электронных документов» код
где ДеревоПомеченных — дерево значений, а СписокПомеченныхНаУдаление — реквизит формы дерево значений
оттуда же. задача исполнителя, форма задачи по предмету
&НаСервере
Процедура ЗаполнитьДеревоЗадач()
Дерево = РеквизитФормыВЗначение(«ДеревоЗадач»);
Дерево.Строки.Очистить();
ДеревоЗначений = Новый ДеревоЗначений;
(18) попробовал (17) Так работает, секрет (9) неясен, может там предварительно сохраняли пустое дерево для ускорения работы.
(19) ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
Макет = Справочники.ЕдиницыИзмерения.ПолучитьМакет(«КлассификаторЕдиницИзмерения»);
Макет.Записать(ИмяВременногоФайла);
Дерево = ЗначениеИзФайла(ИмяВременногоФайла);
Макет — двоичные данные. верю, что из них получается дерево. как и в случае с Новый Дерево 😉
(0) Чтобы подобное сработало, нужно чтобы структура (колонок и типов) у дерева на форме и загружаемого дерева совпадала 1 в 1
Источник
Работа с деревом значений (УФ)
Имею два справочника сведенных в одну таблицу:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Док1.Справочник1 КАК Справочник1, | Док1.Справочник2 КАК Справочник2, | Док1.Количество КАК Количество, | Док1.Цена КАК Цена, | Док1.Сумма КАК Сумма |ИЗ | Документ.Док1.ТабЧасть КАК Док1 |ГДЕ | Док1.Ссылка = &Ссылка |ИТОГИ | СУММА(Количество), | СУММА(Сумма) |ПО | Справочник1"; Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка); ДанныеДляДерева = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); ЗначениеВРеквизитФормы(ДанныеДляДерева, "ДеревоНаФорме");
Получаю:
а как сделать вот так? :
Уточните, пожалуйста, Вас интересует любое решение или исключительно запросом? Ведь первое, что здесь напрашивается, это отказаться от использования метода «ЗначениеВРеквизитФормы» и заполнить дерево формы согласно своим предпочтениям последовательным обходом выборки.
(5)
А, блин, мой косяк, не досмотрел строчку.
Тогда остаётся просто циклом пробегать, а не одной строчкой выгрузки) Потому что выгрузкой для запроса у вас всегда будет заполнена колонка «Справочник1». Для понимания можете в консоли запросов глянуть результат
(5) результатЗапроса.Выгрузить() там как отображается?
и попробуйте ДанныеДляДерева = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); (сИерархией убрать)
ДанныеДляДерева — после выгрузки имеет тип дерево значений и нужный вид?
ДанныеДляДерева = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); Для каждого Группировка Из ДанныеДляДерева.Строки Цикл Для каждого ДетальныеЗаписи Из Группировка.Строки Цикл ДетальныеЗаписи.Справочник1 = Неопределено; КонецЦикла; КонецЦикла; ЗначениеВРеквизитФормы(ДанныеДляДерева, "ДеревоНаФорме");
ДанныеДляДерева = РеквизитФормыВЗначение("ДеревоНаФорме"); ДанныеДляДерева.Строки.Очистить(); ВыборкаПоГруппировкам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоГруппировкам.Следующий() Цикл Группировка = ДанныеДляДерева.Строки.Добавить(); ЗаполнитьЗначенияСвойств(Группировка, ВыборкаПоГруппировкам); ВыборкаДетальныеЗаписи = ВыборкаПоГруппировкам.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ДетальныеЗаписи = Группировка.Строки.Добавить(); ЗаполнитьЗначенияСвойств(ДетальныеЗаписи, ВыборкаДетальныеЗаписи, , "Справочник1"); КонецЦикла; КонецЦикла; ЗначениеВРеквизитФормы(ДанныеДляДерева, "ДеревоНаФорме");
(9) спасибо, «перебором» получилось.
Если у элемента верхнего уровня, длинное название, можно как-то настроить, чтобы оно было по всей строке.
Ведь в первой строке у меня вообще только один элемент с типом Справочник1.
Думаю на картинке понятно, что сейчас обрезает по красной линии:
(11) да, по сути делаю иерархический подбор в документ (не иерархия справочника, а подчинение одного справочника другому, как в примере)
(12) Опять предлагаю Вам попробовать два пути решения:
1. Спрятать колонки справочников, добавить третью составного типа. Ее и вывести на форму. При обходе результата запроса заполнять новую колонку либо значением справочника 1, либо справочника 2 зависимости от уровня. В зависимости от уровня же при активизации строки ограничивать тип выбираемых данных в отображаемой колонке, при изменении ее значения корректно заполнять одну из скрытых колонок (если нужно, конечно).
2. Добавить скрытую колонку булево типа «ЭтоГруппа», или числового «Уровень». Заполнять ее при обходе результата запроса. Настроить условное оформление формы в зависимости от значения в новой колонке. В оформлении указать не то «Видимость=Ложь», не то «Отображать=Ложь», точно не помню.
а если посмотреть результатЗапроса.Выгрузить() там отображается как надо?
Может у вас ЭлементФормы не дерево?
И тогда отображение должно быть как Вы хотите.Хотя, вроде, тогда всё равно на дочернем уровне будут светиться поля и всё равно нужно тогда дерево заполнять вручную циклом)
(9) Почему у меня не работает Группировка = ДанныеДляДерева.Строки.Добавить(); ?
Пишет ошибку «Несоответствие типов». Делаю в модуле формы &НаСервере.
(16) Скорее всего имя переменной «Группировка» неудачное. Например, совпало с именем свойства формы. Попробуйте использовать другое имя, например «ГруппаДерева».
1. Нужно ПоГруппировкам обходить, а не ПоГруппировкамСИерархией. Это другое. Для иерархических справочников. У вас в запросе нет иерархии
2. Не нужно ничего дообрабатывать в цикле. Всё в запросе делается. Через ISNULL в поле итогов можно назначить разное значение для итогового поля, в зависимости от уровня группировки. И вообще в итогах можно произвольные выражения делать любой сложности. Сделал в демоБазе пример. Думаю из него понятно, как это можно к другой любой задаче использовать, когда нужно дерево на форму вывести.
Примерно так:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказКлиента.Ссылка КАК Заказ |ПОМЕСТИТЬ ВтЗаказы |ИЗ | Документ.ЗаказКлиента КАК ЗаказКлиента |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВтЗаказы.Заказ КАК Заказ, | РеализацияТоваровУслугТовары.Ссылка КАК Реализация, | РеализацияТоваровУслугТовары.Цена КАК Цена, | РеализацияТоваровУслугТовары.Ссылка.Менеджер КАК Менеджер, | РеализацияТоваровУслугТовары.Количество КАК Количество, | РеализацияТоваровУслугТовары.Номенклатура КАК ДокументТовар, | РеализацияТоваровУслугТовары.Сумма КАК Сумма |ИЗ | ВтЗаказы КАК ВтЗаказы | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ПО ВтЗаказы.Заказ = РеализацияТоваровУслугТовары.ЗаказКлиента |ИТОГИ | ВЫБОР | КОГДА Реализация ЕСТЬ NULL | ТОГДА ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) | ИНАЧЕ МАКСИМУМ(Менеджер) | КОНЕЦ КАК Менеджер, | СУММА(Количество), | ЕСТЬNULL(Реализация, Заказ) КАК ДокументТовар, | СУММА(Сумма) |ПО | Заказ, | Реализация"; ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам), "Дерево");
Источник