Ошибка при вызове метода контекста значениевреквизитформы дерево значений

Дерево значений в управляемой форме

Свойства и методы универсальных коллекции значений типа дерево значений как и  таблицы значений не доступны в тонком клиенте. Их нужно создавать на сервере, а затем методом контекста формы  ЗначениеВРеквизитФормы(<Значение>, <ИмяРеквизита>)    преобразовать  значение объекта в   реквизит управляемой формы  с указанным именем ИмяРеквизита

Мне дали задание  –  создать форму списка заказа в виде дерева значений, как показано на рис 1

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

Рис 2 Управляемая форма с деревом значений

Однако, у меня не получилось  на сервере создавать дерево значений в путем выгрузки результата запроса по группировкам в дерево таким образом :
Дерево = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
У меня возникала  ошибка при вызове метода контекста формы:
ЗначениеВРеквизитФормы(Дерево, “ДеревоЗаказов”);
Причина ошибки была в том, что структура колонок реквизита формы ДеревоЗаказов не соответствовала структуре объекта  дерево, полученного в результате выгрузки запроса. Я не стал глубоко об этом думать и решил создавать дерево значений  в цикле. Программный код показан ниже:

&НаСервере
Процедура ЗаполнитьДеревоНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Заказ.Ссылка КАК Ссылка,
| НАЧАЛОПЕРИОДА(Заказ.ДатаПриема, ЧАС) КАК Время
|ИЗ
| Документ.Заказ КАК Заказ
|ГДЕ
| Заказ.ДатаПриема МЕЖДУ &ДатаНач И &ДатаКон
|
|УПОРЯДОЧИТЬ ПО
| Заказ.ДатаПриема
|ИТОГИ ПО
| Время";

Запрос.УстановитьПараметр("ДатаКон", Период.ДатаОкончания);
Запрос.УстановитьПараметр("ДатаНач", Период.ДатаНачала);
РезультатЗапроса = Запрос.Выполнить();
// Так не получается и пришлось создать дерево в цикле. Тема  статьи
//Дерево = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); 
Дерево = Новый ДеревоЗначений;
Дерево.Колонки.Добавить("Время");
Дерево.Колонки.Добавить("Заказ");
ВыборкаВремя = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаВремя.Следующий() Цикл
Строка = Дерево.Строки.Добавить();
Строка.Время= ВыборкаВремя.Время;
ВыборкаДетальныеЗаписи = ВыборкаВремя.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Нов=Строка.Строки.Добавить(); 
Нов.Заказ= ВыборкаДетальныеЗаписи.Ссылка; 
КонецЦикла;
КонецЦикла;
ЗначениеВРеквизитФормы(Дерево, "ДеревоЗаказов");
КонецПроцедуры

Для создания полной копии исходного дерева значений можно использовать метод метод скопировать:

НовоеДеревоСостава =  ДеревоСостава.Скопировать();

Следующая процедура предназначена для заполнения реквизита формы типа «ДеревоЗначений»
Параметры:
КоллекцияЭлементовДерева – реквизит формы, который имеет тип «ДеревоЗначений» . Реквизит заполняется значениями из второго параметра процедуры.
ДеревоЗначений – ДеревоЗначений – параметр содержит данные для заполнения.

 &НаСервере 
Процедура ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ДеревоЗначений) Экспорт
Для Каждого Строка Из ДеревоЗначений.Строки Цикл
ЭлементДерева = КоллекцияЭлементовДерева.Добавить();
ЗаполнитьЗначенияСвойств(ЭлементДерева, Строка);
Если Строка.Строки.Количество() > 0 Тогда
заполнитьКоллекциюЭлементовДереваДанныхФормы(ЭлементДерева.ПолучитьЭлементы(), Строка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры

Пример вызова процедуры:

КоллекцияЭлементовДерева =Элементы.Дерево.ПолучитьЭлементы();
КоллекцияЭлементовДерева.Очистить();
ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ДеревоРезультатСКД);

Всем привет и с наступающим праздником! Прошу помощи у специалистов, т.к. сам зашел в тупик. Задача: получить содержимое справочника у удаленной базе по COM-соединению и вывести на управляемую форму в дерево значений. Я делаю вот так: КонецПроцедуры Но на шаге ЗначениеВРеквизитФормы(Дерево, “Автомобили”); 1С ругается:  Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы) ЗначениеВРеквизитФормы(Дерево, «Автомобили»); по причине: Недопустимое значение параметра (параметр номер ‘2’) Если все то же самое делать локально, то данные из запроса попадают в форму без проблем. В чем может быть проблема?

И еще: если убрать УдаленнаяБаза.ОбходРезультатаЗапроса.ПоГруппировкамСИерархией и выгружать в таблицу значений, а на форме реквизит Автомобили сделать таблицей, все выгружается отлично. С теми же колонками, что и в дереве.

Дерево — это дерево другой базы. Поэтому напрямую ЗначениеВРеквизитФормы(Дерево  не прокатит. Надо самому в цикле обходить это дерево и каждую строчку переписывать в автомобили.

Перебор циклом занимает 30-40 секунд, это очень долго.

с чего это 40 секунд? Перебор должен быть быстрее, чем ЗначениеВРеквизитФормы.

Ссылку, то в другую базу передать проблематично… Если только не перепаковывать каждую ссылку Через ЗначениеВстрокуВнутр… Например задав это в функции представления… А так то дерево в строку или в файл в одной базе засунуо, а в другой базе вынул из строки из файла. И будет счастье

Ну вот смотрите, код с перебором &НаСервере Для удаленной базы меняется только строка: И результаты:

вот это что за херня? в запросе это сделайте. Выигрыш по времени в 100 раз.

как это сделать в запросе? не представляю себе. а как мне добавить подчиненный элемент?

ты не поверишь и тогда в выборке будет дерево

Ах, Вы об этом… Запрос я подкорректировал, вместо 30 секунд стало 20. А вот насчет “тогда в выборке будет дерево” — будет. Только дерево не вставляется в форму, что собственно и побудило меня написать этот пост, почитайте . Проблема до сих пор не решена.

Ну как же нет, а вот это: Но на шаге ЗначениеВРеквизитФормы(Дерево, “Автомобили”); 1С ругается:  Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы) ЗначениеВРеквизитФормы(Дерево, «Автомобили»); по причине: Недопустимое значение параметра (параметр номер ‘2’) ?

ну ты там хочешь com-объекты впихнуть в реквизит формы. Это дебилизм согласись. Надо просто создать дерево в это базе, и построчно переписать из того дерева в это дерево.

А как построчно переписать дерево в дерево? Вы можете привести пример?

не получается рекурсивно обойти дерево и передать его в другое дерево. Пожалуйста, покажите как это можно сделать.

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Загрузка запроса в дерево значения на форме для ввода данных

Я

  

TolstiyBeremenniy

02.10.18 — 13:10

Никак не могу сдвинуться в решении задачи.

Есть документ,в него нужно из регистра сведений загрузить

дерево значений. Для ввода двух текстовых полей в удобочитаемой форме. Ранее не работал с деревом значений. Пробовал делать ввод.

Но сейчас нужно загрузить с регистра сведений.

Мыслей нет никаких.

Загрузить хочу вот такой запрос.

    Запрос       = Новый Запрос;

    Запрос.Текст = «ВЫБРАТЬ

                   |    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,

                   |    С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Должность КАК Должность,

                   |    С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Критерий КАК Критерий,

                   |    МАКСИМУМ(С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.КБалл) КАК КБалл,

                   |    МАКСИМУМ(С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.КДис) КАК КДис,

                   |    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Наименование + «»»» + С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Должность.Наименование КАК Сотрудник_Должность

                   |ИЗ

                   |    РегистрСведений.С05_КритерииОценкиКачестваРаботыСотрудников.СрезПоследних(

                   |            &Период,

                   |            Организация = &Организация

                   |                И Подразделение = &Подразделение

                   |                И РуководительЗаполняющийБаллы = &Руководитель) КАК С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних

                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСотрудниковСрезПоследних

                   |        ПО С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Организация = КадроваяИсторияСотрудниковСрезПоследних.Организация

                   |            И С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Подразделение = КадроваяИсторияСотрудниковСрезПоследних.Подразделение

                   |            И С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Период = КадроваяИсторияСотрудниковСрезПоследних.Период

                   |

                   |СГРУППИРОВАТЬ ПО

                   |    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник,

                   |    С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Должность,

                   |    С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Критерий,

                   |    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Наименование + «»»» + С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Должность.Наименование

                   |ИТОГИ

                   |    СУММА(КБалл),

                   |    СУММА(КДис)

                   |ПО

                   |    Сотрудник,

                   |    Должность,

                   |    Критерий,

                   |    Сотрудник_Должность»;

    Запрос.УстановитьПараметр(«Период»,        Объект.Период);

    Запрос.УстановитьПараметр(«Организация»,   Объект.Организация);

    Запрос.УстановитьПараметр(«Подразделение», Объект.Подразделение);

    Запрос.УстановитьПараметр(«Руководитель»,  Объект.РуководительЗаполняющийБаллы);

    Результат = Запрос.Выполнить();

    ДеревоК = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

    ЗначениеВРеквизитФормы(ДеревоК, «ДеревоКритериев»);

Пока идет ошибка, —

{Документ.С05_СправкаПоПоказателямПремирования.Форма.ФормаДокумента.Форма(398)}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)

    ЗначениеВРеквизитФормы(ДеревоК, «ДеревоКритериев»);

по причине:

Недопустимое значение параметра (параметр номер ‘2’)

Недопустимое значение параметра (параметр номер ‘2’)

  

Ботаник Гарден Меран

1 — 02.10.18 — 13:19

[Для ввода двух текстовых полей.]

Двух, а в запросе четыре поля.

  

Ботаник Гарден Меран

2 — 02.10.18 — 13:19

Не четыре, шесть полей.

  

TolstiyBeremenniy

3 — 02.10.18 — 13:26

(1) Точнее не текстовых а числовых.

Но остальные поля для отображения идут.

  

TolstiyBeremenniy

4 — 02.10.18 — 13:26

Хотелось бы сам принцип узнать. Что бы начать делать.

  

НЕА123

5 — 02.10.18 — 13:37

  

НоваяВолна

6 — 02.10.18 — 13:42

(0) У тебя ДеревоКритериев — это что? Какой тип?

  

hhhh

7 — 02.10.18 — 14:03

(4) так конечно

ДеревоКритериев.Загрузить(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией));

Эти все ДеревоК и Значения в какие-то реквизиты выкинь нахрен — это каменный век.

  

aleks_default

8 — 02.10.18 — 14:08

(7)нет такого метода у дерева

  

TolstiyBeremenniy

9 — 02.10.18 — 14:16

(6) Дерево значений

  

hhhh

10 — 02.10.18 — 14:34

(9) ну, типы колонок один в один совпадают в обоих деревьях?

  

НЕА123

11 — 02.10.18 — 14:36

(10)

неа, не совпадают. факт.

ПС

ТС уже 9 месяцев переходил… не родит никак.

  

TolstiyBeremenniy

12 — 02.10.18 — 17:11

А подскажите как правильно заполнять дерево значений.

Перебором выборки запроса?

  

TolstiyBeremenniy

13 — 02.10.18 — 18:18

Почему такая ошибка?

ЗначениеВРеквизитФормы(тДерево, «ДеревоКритериев»);    

{Документ.С05_СправкаПоПоказателямПремирования.Форма.ФормаДокументаДЗИзРС.Форма(471)}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)

ЗначениеВРеквизитФормы(тДерево, «ДеревоКритериев»);    

по причине:

Недопустимое значение параметра (параметр номер ‘2’)

Недопустимое значение параметра (параметр номер ‘2’)

ДеревоКритериев, дерево значений!!!!!!! Все как в примере делаю, по подобию.

  

TolstiyBeremenniy

14 — 02.10.18 — 18:21

(10) В обоих в каких?

  

TolstiyBeremenniy

15 — 02.10.18 — 18:23

(10) Есть составные поля. Как сделать составное поле?

  

TolstiyBeremenniy

16 — 02.10.18 — 18:26

Заполняю вот так. Подскажите пожалуйста!!!! Что поправить?

    Запрос.Текст = «ВЫБРАТЬ

                   |    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,

                   |    С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Должность КАК Должность,

                   |    С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Критерий КАК Критерий,

                   |    С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.КБалл КАК КБалл,

                   |    С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.КДис КАК КДис,

                   |    С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Организация КАК Организация,

                   |    С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Подразделение КАК Подразделение,

                   |    С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.РуководительЗаполняющийБаллы КАК РуководительЗаполняющийБаллы

                   |ИЗ

                   |    РегистрСведений.С05_КритерииОценкиКачестваРаботыСотрудников.СрезПоследних(

                   |            ,

                   |            Подразделение = &Подразделение

                   |                И Организация = &Организация) КАК С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних

                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСотрудниковСрезПоследних

                   |        ПО С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Организация = КадроваяИсторияСотрудниковСрезПоследних.Организация

                   |            И С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Подразделение = КадроваяИсторияСотрудниковСрезПоследних.Подразделение

                   |            И С05_КритерииОценкиКачестваРаботыСотрудниковСрезПоследних.Должность = КадроваяИсторияСотрудниковСрезПоследних.Должность

                   |

                   |УПОРЯДОЧИТЬ ПО

                   |    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Наименование»;

    //Запрос.УстановитьПараметр(«Период»,        Объект.Период);

    Запрос.УстановитьПараметр(«Организация»,   Объект.Организация);

    Запрос.УстановитьПараметр(«Подразделение», Объект.Подразделение);

    //Запрос.УстановитьПараметр(«Руководитель»,  Объект.РуководительЗаполняющийБаллы);

    Рез = Запрос.Выполнить();

    //

    ТекСотр = «»;

    Если Не Рез.Пустой() Тогда

        тДерево = РеквизитФормыВЗначение(«ДеревоКритериев»);

        Выборка = Рез.Выбрать();

        ТекСотр = «»;

        Пока Выборка.Следующий() Цикл

            Если ТекСотр = «» или ТекСотр <> Выборка.Сотрудник Тогда

                нСтр1                               = тДерево.Строки.Добавить();

                нСтр1.СтрСотрудникДолжностьКритерий = Выборка.Должность.Наименование +»-«+ Выборка.Сотрудник.Наименование;

                нСтр1.КбаллМакс                     = Выборка.КБалл;

                нСтр1.КбаллФакт                     = 0;

                нСтр1.КдисМакс                      = Выборка.КДис;

                нСтр1.КдисФакт                      = 0;

                нСтр1.ЭтоСотрудник                  = Истина;

                нСтр1.Сотрудник                     = Выборка.Сотрудник;

                нСтр1.Должность                     = Выборка.Должность;

                //

                нСтр2                               = нСтр1.Строки.Добавить();

                нСтр2.СтрСотрудникДолжностьКритерий = Выборка.Критерий;

                нСтр2.ЭтоСотрудник                  = Ложь;

                нСтр2.КбаллМакс                     = Выборка.КБалл;

                нСтр2.КбаллФакт                     = 0;

                нСтр2.КдисМакс                      = Выборка.КДис;

                нСтр2.КдисФакт                      = 0;

                //

            ИначеЕсли ТекСотр = Выборка.Сотрудник Тогда

                //

                нСтр2                               = нСтр1.Строки.Добавить();

                нСтр2.СтрСотрудникДолжностьКритерий = Выборка.Критерий;

                нСтр2.ЭтоСотрудник                  = Ложь;

                нСтр2.КбаллМакс                     = Выборка.КБалл;

                нСтр2.КбаллФакт                     = 0;

                нСтр2.КдисМакс                      = Выборка.КДис;

                нСтр2.КдисФакт                      = 0;

                //

                //нСтр1.Колонка1 = «Колонка 1»;

                //нСтр1.Колонка2 = «Колонка 2»;

                //

                //нСтр2 = нСтр1.Строки.Добавить();

                //нСтр2.Колонка1 = «Колонка 1»;

                //нСтр2.Колонка2 = «Колонка 2»;

            КонецЕсли;

            ТекСотр = Выборка.Сотрудник;

        КонецЦикла;

    КонецЕсли;

//нСтр3 = нСтр2.Строки.Добавить();

//нСтр3.Колонка1 = «Колонка 1»;

//нСтр3.Колонка2 = «Колонка 2»;

//

//нСтр4 = нСтр3.Родитель.Родитель.Строки.Добавить();

//нСтр4.Колонка1 = «Колонка 1»;

//нСтр4.Колонка2 = «Колонка 2»;

ЗначениеВРеквизитФормы(тДерево, «ДеревоКритериев»);    

//

КонецПроцедуры

  

runoff_runoff

17 — 02.10.18 — 18:36

ЗначениеВДанныеФормы

  

TolstiyBeremenniy

18 — 03.10.18 — 02:53

Ошибка эта не уходит. Скажите что посмотреть?

ЗначениеВДанныеФормы(тДерево, «ДеревоКритериев»);    

ЗначениеВДанныеФормы(тДерево, «ДеревоКритериев»);    

по причине:

Несоответствие типов (параметр номер ‘1’)

  

TolstiyBeremenniy

19 — 03.10.18 — 02:54

Я же дерево беру. Заполняю и в его же возвращаю?

  

TolstiyBeremenniy

20 — 03.10.18 — 02:54

тДерево = РеквизитФормыВЗначение(«ДеревоКритериев»);

        Выборка = Рез.Выбрать();

        ТекСотр = «»;

        Пока Выборка.Следующий() Цикл

            Если ТекСотр = «» или ТекСотр <> Выборка.Сотрудник Тогда

                нСтр1                               = тДерево.Строки.Добавить();

                нСтр1.СтрСотрудникДолжностьКритерий = Выборка.Должность.Наименование +»-«+ Выборка.Сотрудник.Наименование;

                нСтр1.КбаллМакс                     = Выборка.КБалл;

                нСтр1.КбаллФакт                     = 0;

                нСтр1.КдисМакс                      = Выборка.КДис;

                нСтр1.КдисФакт                      = 0;

                нСтр1.ЭтоСотрудник                  = Истина;

                нСтр1.Сотрудник                     = Выборка.Сотрудник;

                нСтр1.Должность                     = Выборка.Должность;

                //

                нСтр2                               = нСтр1.Строки.Добавить();

                нСтр2.СтрСотрудникДолжностьКритерий = Выборка.Критерий;

                нСтр2.ЭтоСотрудник                  = Ложь;

                нСтр2.КбаллМакс                     = Выборка.КБалл;

                нСтр2.КбаллФакт                     = 0;

                нСтр2.КдисМакс                      = Выборка.КДис;

                нСтр2.КдисФакт                      = 0;

                //

            ИначеЕсли ТекСотр = Выборка.Сотрудник Тогда

                //

                нСтр2                               = нСтр1.Строки.Добавить();

                нСтр2.СтрСотрудникДолжностьКритерий = Выборка.Критерий;

                нСтр2.ЭтоСотрудник                  = Ложь;

                нСтр2.КбаллМакс                     = Выборка.КБалл;

                нСтр2.КбаллФакт                     = 0;

                нСтр2.КдисМакс                      = Выборка.КДис;

                нСтр2.КдисФакт                      = 0;

                //

                //нСтр1.Колонка1 = «Колонка 1»;

                //нСтр1.Колонка2 = «Колонка 2»;

                //

                //нСтр2 = нСтр1.Строки.Добавить();

                //нСтр2.Колонка1 = «Колонка 1»;

                //нСтр2.Колонка2 = «Колонка 2»;

            КонецЕсли;

            ТекСотр = Выборка.Сотрудник;

        КонецЦикла;

    КонецЕсли;

//нСтр3 = нСтр2.Строки.Добавить();

//нСтр3.Колонка1 = «Колонка 1»;

//нСтр3.Колонка2 = «Колонка 2»;

//

//нСтр4 = нСтр3.Родитель.Родитель.Строки.Добавить();

//нСтр4.Колонка1 = «Колонка 1»;

//нСтр4.Колонка2 = «Колонка 2»;

ЗначениеВРеквизитФормы(тДерево, «ДеревоКритериев»);

  

TolstiyBeremenniy

21 — 03.10.18 — 03:15

На вот этой строке ЗначениеВДанныеФормы(тДерево, «ДеревоКритериев»);

У меня в тДерево — Дерево из 5 строк, по 2 подстроки в каждой ветке.

Но выходит ошибка (18).

  

TolstiyBeremenniy

22 — 03.10.18 — 03:42

Подскажите пожалуйста в чем дело?

Я сверил, типы все те же, поля все те же.

http://joxi.ru/n2YQ5GaTopoXL2

Но продолжается ошибка, — ЗначениеВДанныеФормы(тДерево, «ДеревоКритериев»);    

по причине:

Несоответствие типов (параметр номер ‘2’)

  

TolstiyBeremenniy

23 — 03.10.18 — 03:56

У дерева значений есть поля, типа:

КбаллМакс число 1.0

КбаллФакт число 1.0

КдисМакс число 1.1

КдисФакт число 1.1

Может в них дело? Иначе в чем? Подскажите пожалуйста, я все сверил!!!!!

Что нужно проверить? Что можно поправить?

  

TolstiyBeremenniy

24 — 03.10.18 — 04:02

Заполнилось! Я Сделал видимыми все поля!!!!!!!

Получается, если у полей видимость ложь, то уже будет идти ошибка что в (22) ?

  

TolstiyBeremenniy

25 — 03.10.18 — 04:22

Мда!!!! Поддержать разговором некомупо очевидной теме!!!!

  

hhhh

26 — 03.10.18 — 04:32

(25) на часы-то смотрел? Кто это будет поддерживать разговор в 4ч утра? Все спят давно.

  

TolstiyBeremenniy

27 — 03.10.18 — 04:57

(26) Но вы можете подсказать как это сделать?

Я в дерево вывожу строку «Должность-Сотрудник»

Но сами ссылки нужны. Но на форме нет. Я их сделал невидимыми, что из за этого ошибка идет (22) ?

  

catena

28 — 03.10.18 — 06:40

Глобальный контекст (Global context)

ЗначениеВДанныеФормы (ValueToFormData)

Синтаксис:

ЗначениеВДанныеФормы(<Значение>, <Объект>)

Параметры:

<Значение> (обязательный)

Тип: Произвольный.

Значение прикладного типа, для которого определено преобразование в данные формы.

<Объект> (обязательный)

Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура.

Данные формы, имеющие совместимую структуру.

Описание:

Преобразует объект прикладного типа в универсальный объект данных.

Доступность:

Сервер, толстый клиент, мобильное приложение(сервер).

По-моему, «ДеревоКритериев» не входит в Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура.

  

TolstiyBeremenniy

29 — 03.10.18 — 08:12

  

TolstiyBeremenniy

30 — 03.10.18 — 08:13

  

Лодырь

31 — 03.10.18 — 08:18

Использовать всегда указано у этих колонок?

  

catena

32 — 03.10.18 — 08:54

(30)И чо? «ДеревоКритериев» — это все равно строка, а не коллекция.

  

TolstiyBeremenniy

33 — 03.10.18 — 09:07

(31) А где такой флаг или параметр у них?

(32) http://joxi.ru/VrwBl18cOd7dgA

  

hhhh

34 — 03.10.18 — 09:31

(33) справа огромная колонка у тебя на рисунке «Использовать всегда». Ты уже ослеп, всё работаешь по ночам.

  

TolstiyBeremenniy

35 — 03.10.18 — 10:04

(34) Вижу. То есть если там убрать галки то

это не будет влиять на то что колонки эти будут заполняться

но выводить их в тч дерева значений не нужно?

Как с этим будет?

  

hhhh

36 — 03.10.18 — 10:13

(35) попробуй волшебную строчку в конце вставить.

Элементы.ДеревоКритериевКритерий.Видимость = Ложь;

  

TolstiyBeremenniy

37 — 03.10.18 — 10:55

(36) Подскажите пожалуйста , а где именно?

  

hhhh

38 — 03.10.18 — 11:25

(37) в конце

  

TolstiyBeremenniy

39 — 03.10.18 — 11:48

(38) Я вот ищу но не вижу там полей табличной части вообще.

ЗначениеВРеквизитФормы(тДерево, «ДеревоКритериев»);    

//

Элементы.ДеревоКритериев.Д

КонецПроцедуры

//

Куда то ваш пример удалился, от сюда.

  

TolstiyBeremenniy

40 — 03.10.18 — 11:52

Сейчас задача избавиться от лишних колонок у дерева значений.

Галками использовать всегда, начал пробовать.

Но вот видимостью как?

УФ, Как выгрузить результат запроса в дерево на форме

Я

Karambol

28.10.12 — 17:27

Подскажите, как выгрузить результат запроса в дерево на форме?

Пишу:

лпДерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

   ЗначениеВРеквизитФормы(лпДерево, «Дерево»);

ЗначениеВДанныеФормы(лпДерево, «Дерево»);

Ошибка: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)    

по причине:

Недопустимое значение параметра (параметр номер ‘2’)

Что я делаю не так?

Wobland

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;

   

   ЗначениеВРеквизитФормы(Дуб, «Дерево»);

КонецПроцедуры

Wobland

2 — 28.10.12 — 17:30

(1) а Дерево — реквизит формы

Karambol

3 — 28.10.12 — 17:34

(1)Тоже ошибку пишет:

Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)

   ЗначениеВРеквизитФормы(Дуб, «Дерево»);

по причине:

Недопустимое значение параметра (параметр номер ‘2’)

Wobland

4 — 28.10.12 — 17:35

(3) что такое Дерево?

Karambol

5 — 28.10.12 — 17:36

(4) Реквизит управляемой формы и типом значения ДеревоЗначений

Wobland

6 — 28.10.12 — 17:39

(5) аналогично. но у меня работает

Wobland

7 — 28.10.12 — 17:50

Karambol

8 — 28.10.12 — 17:56

(7)Хм. В управляемом приложении работает. Но у меня режим обычного приложения с поддержкой УФ, может из-за этого не хочет?

Wobland

9 — 28.10.12 — 18:03

а у меня эта форма ваще в обычном не открывается

Karambol

10 — 28.10.12 — 18:07

(9)У меня тоже не открывается, я ее код в свою обработку скопировал

Wobland

11 — 28.10.12 — 18:11

Karambol

12 — 28.10.12 — 18:15

(11)Как сделал?

Wobland

13 — 28.10.12 — 18:15

(12)&НаКлиенте

Процедура ВыраститьДерево(Команда)

   СделатьДерево();

КонецПроцедуры

&НаСервере

Процедура СделатьДерево()

   Запрос=Новый Запрос;

   Запрос.Текст=»выбрать 50 как раз»;

   ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), «Дуб»);

КонецПроцедуры

Karambol

14 — 28.10.12 — 18:26

почему-то не открываются внешние обработки на УФ в обычном приложении. А если обработка в конфигурации, то открывается

Wobland

15 — 28.10.12 — 18:54

телепатирую: получаемое дерево не совпадает по структуре с реквизитом формы

rphosts

16 — 28.10.12 — 18:57

(14) правов не хватает

Wobland

17 — 28.10.12 — 19:01

(16) у меня мелкая конфигурация, с нуля писанная. пользователей в базе вообще нет, роль одна — повелитель

Wobland

18 — 28.10.12 — 19:01

(17) в смысле такая же ерунда

rphosts

19 — 28.10.12 — 19:12

а, ёпрст! ну конечно, а как вообще согут открыться УФ из обычного приложения!!! Как вообще из обычного каике УФ могуть открываться!!!

Обратное иногда верно, но только если для этого сделан ряд телодвижений и к тому-же не всегда это адекватно по трудозатратам, не редко проще написать 2 разных обработки для УФ и для обычных.

Wobland

20 — 28.10.12 — 19:13

(19) показать пример УФ в обычном приложении?

rphosts

21 — 28.10.12 — 19:16

(20)документа у которого есть и форма для УФ и для обычного? Так у обработок есть только одна основная форма для того режима под который рисолвалась

Wobland

22 — 28.10.12 — 19:18

(21) ну одна основная. управляемая. во внешней не открывается, во встроенной открывается

rphosts

23 — 28.10.12 — 19:21

основной режим запуска = ?

Wobland

24 — 28.10.12 — 19:23

(23) Управляемое приложение

Wobland

25 — 28.10.12 — 19:23

перекроил на обычное. результат тот же — не открывается

rphosts

26 — 28.10.12 — 19:23

и внешняя форма под УФ не открывется?

Wobland

27 — 28.10.12 — 19:24

(26) ахха

Wobland

28 — 28.10.12 — 19:25

управляемая форма внешней обработки в обычном режимен не открывается.

управляемая форма втроенной обработки в обычном режимен не открывается.

rphosts

29 — 28.10.12 — 19:25

а у меня всё нормально отрбатывает!!! фотку дать?

Wobland

30 — 28.10.12 — 19:25

(28) последнее не убрать

Wobland

31 — 28.10.12 — 19:26

(29) не, не дать, верю

но как-то интересно, что я делаю не так…

rphosts

32 — 28.10.12 — 19:26

так если основной режим запуска = УФ, то основной это и ест УФ, а обычные форрмы — это огрызки старого….

rphosts

33 — 28.10.12 — 19:27

забавно…. надо  будет разобраться с этим вопросом… но завтра… поздновато уже…

Karambol

34 — 29.10.12 — 05:24

(19) Так обычное приложение может поддерживать УФ, если в свойствах конфигурации поставить галочку «Использовать управляемые формы в обычном приложении».

rphosts

35 — 29.10.12 — 05:59

Wobland, ну короче, что-бы не повторять то что упорно не получается — дай мне твой нераб. пример — а то я или не то делаю или нифига не могу добиться того что у тебя не работает

Wobland

36 — 29.10.12 — 07:08

(35) а вон же — в (7)

rphosts

37 — 29.10.12 — 07:18

(36) и конфу надо! с её настройками и кодом как её вызывабют! думается всё кроется в каких-то деталах…

Wobland

38 — 29.10.12 — 08:09

(37) а она дома…

rphosts

39 — 29.10.12 — 08:10

вот-же нафиг!

Wobland

40 — 29.10.12 — 08:14

(39) да можно взять совсем голую конфигурацию и играться с ней, но не до этого сейчас

Karambol

41 — 29.10.12 — 16:22

(15)Был прав! Все получилось! Всем большое спасибо!

Wobland

42 — 29.10.12 — 16:26

rphosts

43 — 29.10.12 — 16:30

(43) сходил, я не так запускал… надоб было с тебя сразу конфу требовать

Wobland

44 — 29.10.12 — 16:33

(43) надо было всё-так фотку просить

rphosts

45 — 29.10.12 — 17:22

(44) всё-же дай конфу а я покалупаюсь при случае

Wobland

46 — 29.10.12 — 17:24

  

rphosts

47 — 29.10.12 — 17:38

забрал — в выхи помучаю

Дерево значений в управляемой форме

Свойства и методы универсальных коллекции значений типа дерево значений как и  таблицы значений не доступны в тонком клиенте. Их нужно создавать на сервере, а затем методом контекста формы  ЗначениеВРеквизитФормы(<Значение>, <ИмяРеквизита>)    преобразовать  значение объекта в   реквизит управляемой формы  с указанным именем ИмяРеквизита

Мне дали задание  –  создать форму списка заказа в виде дерева значений, как показано на рис 1

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

Рис 2 Управляемая форма с деревом значений

Однако, у меня не получилось  на сервере создавать дерево значений в путем выгрузки результата запроса по группировкам в дерево таким образом :
Дерево = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
У меня возникала  ошибка при вызове метода контекста формы:
ЗначениеВРеквизитФормы(Дерево, “ДеревоЗаказов”);
Причина ошибки была в том, что структура колонок реквизита формы ДеревоЗаказов не соответствовала структуре объекта  дерево, полученного в результате выгрузки запроса. Я не стал глубоко об этом думать и решил создавать дерево значений  в цикле. Программный код показан ниже:

&НаСервере
Процедура ЗаполнитьДеревоНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Заказ.Ссылка КАК Ссылка,
| НАЧАЛОПЕРИОДА(Заказ.ДатаПриема, ЧАС) КАК Время
|ИЗ
| Документ.Заказ КАК Заказ
|ГДЕ
| Заказ.ДатаПриема МЕЖДУ &ДатаНач И &ДатаКон
|
|УПОРЯДОЧИТЬ ПО
| Заказ.ДатаПриема
|ИТОГИ ПО
| Время";

Запрос.УстановитьПараметр("ДатаКон", Период.ДатаОкончания);
Запрос.УстановитьПараметр("ДатаНач", Период.ДатаНачала);
РезультатЗапроса = Запрос.Выполнить();
// Так не получается и пришлось создать дерево в цикле. Тема  статьи
//Дерево = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); 
Дерево = Новый ДеревоЗначений;
Дерево.Колонки.Добавить("Время");
Дерево.Колонки.Добавить("Заказ");
ВыборкаВремя = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаВремя.Следующий() Цикл
Строка = Дерево.Строки.Добавить();
Строка.Время= ВыборкаВремя.Время;
ВыборкаДетальныеЗаписи = ВыборкаВремя.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Нов=Строка.Строки.Добавить(); 
Нов.Заказ= ВыборкаДетальныеЗаписи.Ссылка; 
КонецЦикла;
КонецЦикла;
ЗначениеВРеквизитФормы(Дерево, "ДеревоЗаказов");
КонецПроцедуры

Для создания полной копии исходного дерева значений можно использовать метод метод скопировать:

НовоеДеревоСостава =  ДеревоСостава.Скопировать();

Следующая процедура предназначена для заполнения реквизита формы типа «ДеревоЗначений»
Параметры:
КоллекцияЭлементовДерева – реквизит формы, который имеет тип «ДеревоЗначений» . Реквизит заполняется значениями из второго параметра процедуры.
ДеревоЗначений – ДеревоЗначений – параметр содержит данные для заполнения.

 &НаСервере 
Процедура ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ДеревоЗначений) Экспорт
Для Каждого Строка Из ДеревоЗначений.Строки Цикл
ЭлементДерева = КоллекцияЭлементовДерева.Добавить();
ЗаполнитьЗначенияСвойств(ЭлементДерева, Строка);
Если Строка.Строки.Количество() > 0 Тогда
заполнитьКоллекциюЭлементовДереваДанныхФормы(ЭлементДерева.ПолучитьЭлементы(), Строка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры

Пример вызова процедуры:

КоллекцияЭлементовДерева =Элементы.Дерево.ПолучитьЭлементы();
КоллекцияЭлементовДерева.Очистить();
ЗаполнитьКоллекциюЭлементовДереваДанныхФормы(КоллекцияЭлементовДерева, ДеревоРезультатСКД);

ЗначениеВРеквизитФормы. Ошибка «Недопустимое значение параметра (параметр номер ‘2’)»

Ошибка возникла при преобразовании дерева значений в соответствующий реквизит формы. ДеревоЗначений создавалось запросом и его методом 

Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)

Реквизит формы также имеет тип (ДеревоЗначений) — соответственно Типы совпадают. Причиной оказалось несоответствие колонок ДереваЗначений и реквизита на форме. Их количество и имена должны совпадать.

Недостаточно прав для комментирования

Господа, помогите решить проблему. Есть обработка с ТЧ, на форме УФ данная тч выведена как дерево. Нужно результат запроса выгрузить в дерево &НаСервере ошибка {Форма.Форма.Форма}: Ошибка при установке значения атрибута контекста (Затраты)     Объект.Затраты = Запрос.Выполнить.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); по причине: Нельзя изменять поле, содержащее объект данных формы Как обойти ее?

брр… {Форма.Форма.Форма}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение) по причине: Недопустимое значение параметра (параметр номер ‘1’) что не так?

Пробуй так: Объект.Затраты.Загрузить(Запрос.Выполнить.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам)); Ты собрался просто так присвоить ТаблицуЗначений КоллекцииФормы? скорее наоборот, ЗначениеВДанныеФормы

Загрузить не работает, пробовал

у тебя на форме расположен элемент «Дерево» или ТЧ с отображением Дерево?

{Форма.Форма.Форма}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)     ЗначениеВРеквизитФормы(Дерево,»Объект.Затраты»);     по причине: Недопустимое значение параметра (параметр номер ‘2’)

Так попробуй ЗначениеВРеквизитФормы(Дерево,Затраты);

вместо ЗначениеВРеквизитФормы сделай ЗначениеВДанныеФормы

Вроде без Объект, просто Затраты. Только в запросе нет группировок, как определить где родитель, а где просто запись?

просто «Затраты» не работает

ЗначениеВДанныеФормы пробовал ?

отказался от реквизита объекта. Просто дерево на форме, работает на ура

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

О нюансах работы в 1С с ЗначениеВРеквизитФормы и ошибке Недопустимое значение параметра (параметр номер ‘2’).

ЗначениеВРеквизитФормы выполняется на сервере. Разработчики платформы автоматизировали процесс передачи данных на клиент — вручную на клиенте присваивать значение полю не нужно.

Проще всего выгрузить результат выполнения запроса с вариантом обхода по группировкам. Тогда на выходе будет ДеревоЗначений и тип данных совпадет с тем, что установлен в табличном поле по-умолчанию. Однако, если табличное поле базируется на ТаблицаЗначений — обход по группировкам в выгрузке не нужен.

Если что-то не так — получите ошибку Недопустимое значение параметра (параметр номер ‘2’).

Чтобы исправить ошибку «Недопустимое значение параметра (параметр номер ‘2’)» нужно проверить:

1. Тип данных реквизита на форме должен совпадать с типом данных который хотите присвоить реквизиту (ДеревоЗначений, ТаблицаЗначений).

Формирование ДеревоЗначений:

Запрос.Выполнить.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам)

Формирование ТаблицаЗначений:

Запрос.Выполнить.Выгрузить()

2. Количество и имена колонок в результате запроса должны совпадать с количеством и именами в табличном поле на форме.

3. Имя реквизита на форме должно совпадать с именем указанном в методе ЗначениеВРеквизитФормы и иметь тип Строка. Рекомендую копировать текст и вставлять в места где он должен совпадать.

Если ошибка сохраняется — перепроверьте все пункты в отладчике.

Чтобы научиться работать с методом ЗначениеВРеквизитФормы нужен определенный опыт. Со временем вы обязательно научитесь пользоваться им без ошибок.

Реквизиты управляемых форм

Автор mindruk, 08 авг 2013, 11:49

0 Пользователей и 1 гость просматривают эту тему.

День добрый.

При создании внешнего отчета возник вопрос о выводе результата на форму.

На форме есть реквизит ТабДок типа Табличный документ.

Я его передаю как параметр  в функцию выполняемую на Сервере и заполняю данными.

Если в конце функции возвращаю ТабДок тогда могу вывести в отдельном окне — а нужно вывести на форме.

Пытался использовать ЗначениеВДанныеФормы(ТабДок,Объект.ТабДок);  :dfbsdfbsdf:

Типы совпадают — Табличный документ, но выскакивает ошибка несоответствие параметра №1  :dfbsdfbsdf:

Подскажите где я ошибаюсь — и вообще Табличный документ можно преобразовывать в реквизит?


Используйте ЗначениеВРеквизитФормы() и уберите ТабДок из объекта, не место ему там.


Убрать ТабДок из объекта — значит убрать реквизит?
И не могу нигде найти как мне правильно вывести ТабличныйДокумент созданный программно на форму.
В отдельном окне получается а на форму не очень…
Помогите разобраться пожалуйста…
Листинг примерно такой
& На Сервере кусок
        ТаблДок = Новый ТабличныйДокумент;
   ТаблДок.Очистить();
   Макет = РеквизитФормыВЗначение(«Объект»).ПолучитьМакет(«Макет»);
   Шп = Макет.ПолучитьОбласть(«Шапка»);
   Шп.параметры.ДатаОтчета = Формат(ДатаОтчета,»ДЛФ=DD»);
   ТаблДок.Вывести(Шп);
   Заг = Макет.ПолучитьОбласть(«Заголовок|Начало»);
   Кол =  Макет.ПолучитьОбласть(«Заголовок|Колонка1»);
   СтрокаВыводаНачало = Макет.ПолучитьОбласть(«Строка|Начало»);
   СтрокаВыводаКол =  Макет.ПолучитьОбласть(«Строка|Колонка1»);
   ПТР = Макет.ПолучитьОбласть(«ПустаяСтрока|Начало»);
   ПТРК = Макет.ПолучитьОбласть(«ПустаяСтрока|Колонка1»);
   выполняю кучу действий и в итоге получаю свой документ

если я делаю Возврат(ТаблДок) — тогда на &Клиенте я могу его вывести — но в отдельном окне,а мне надо на форму

я понимаю что надо использовать ЗначениеВРеквизитФормы() но если пишу
ЗначениеВРеквизитФормы(ТаблДок,ТабДок) получается плохо — несоответствие параметра1
ТаблДок — тип Табличный документ — создаю и заполняю сам
ТабДок — тип табличный документ — реквизит на форме

:dfbbdrfb::dfbbdrfb::dfbbdrfb:


вместо ЗначениеВРеквизитФормы(ТаблДок,ТабДок)

нужно писать

ЗначениеВРеквизитФормы(ТаблДок,»ТабДок»)


{Форма.Форма.Форма(374)}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
   ЗначениеВРеквизитФормы(ТаблДок,»ТабДок»);
по причине:
Недопустимое значение параметра (параметр номер ‘2’)

Час от часу не легче?!


Но вообще то все нужно делать не так.
Ничего конвертировать никуда не нужно. Нужно просто использовать тот объект, который находится на форме. Для примера прикладываю обработку.


Вай, шайтаномо насальнико…:o

ОГРОМНОЕ СПАСИБО :zebzdr:


Теги:

  • Форум 1С

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

  • Реквизиты управляемых форм

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

ТрисТан

0 / 0 / 0

Регистрация: 27.11.2012

Сообщений: 92

1

Дерево Значений в квадрате

27.04.2016, 17:05. Показов 2062. Ответов 4

Метки нет (Все метки)


Народ помогите
Есть Дерево Значений (Иерархия) «Наборы»
и Есть Дерево Значений (Иерархия) «Конкуренты»
Нужно перекинуть данные с Наборов в Конкуренты
Пытаюсь таким вот

1C
1
2
3
4
5
6
7
8
9
Дерево  = ДанныеФормыВЗначение(Наборы,Тип("ДеревоЗначений"));
ДеревоКонкурентов  = ДанныеФормыВЗначение(Конкуренты,Тип("ДеревоЗначений"));
Для Каждого СтрокаДерева из Дерево.Строки Цикл
    Если СтрокаДерева.Комплектность = Ложь Тогда 
     СтрокаКонкурент = ДеревоКонкурентов.Строки.Добавить();
     СтрокаКонкурент.Набор = СтрокаДерева.Набор;
    КонецЕсли;
КонецЦикла;
ЗначениеВДанныеФормы(ДеревоКонкурентов,Конкуренты);

Не могу понять как программно перевязать Родителя и сохранить иерархию

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

GreenkA

Эксперт 1С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

27.04.2016, 17:14

2

ТрисТан, попробуйте так:

1C
1
2
3
4
ДеревоНаборы = РеквизитФормыВЗначение("Наборы");
ДеревоКонкуренты = РеквизитФормыВЗначение("Конкуренты");
ДеревоКонкуренты = ДеревоНаборы; //создаем копию дерева
ЗначениеВРеквизитФормы(ДеревоКонкуренты,"Конкуренты");

0

ТрисТан

0 / 0 / 0

Регистрация: 27.11.2012

Сообщений: 92

28.04.2016, 12:13

 [ТС]

3

Пробовал нюанс в том что мне нужно только иерархия по полю наборы
При возвращении реквизитов Ошибка
ЗначениеВРеквизитФормы(ДеревоКонкуренты,»Конкурент ы»);

{Документ.ЭР_КомплексныеЗакупкиКлиентов.Форма.Форм аДокумента.Форма(154)}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
ЗначениеВРеквизитФормы(ДеревоКонкуренты,»Конкурент ы»);
по причине:
Недопустимое значение параметра (параметр номер ‘2’)
Недопустимое значение параметра (параметр номер ‘2’)

Добавлено через 5 минут
Там поля разные в таблицах

Добавлено через 2 часа 23 минуты

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Дерево  = ДанныеФормыВЗначение(Наборы,Тип("ДеревоЗначений"));
    ДеревоКонкурентов  = ДанныеФормыВЗначение(Конкуренты,Тип("ДеревоЗначений"));
    Для Каждого СтрокаДерева из Дерево.Строки Цикл
        Если СтрокаДерева.Комплектность = Ложь Тогда
            СтрокаКонкурент = ДеревоКонкурентов.Строки.Добавить();
            СтрокаКонкурент.Набор = СтрокаДерева.Набор;
            Для Каждого Строка из СтрокаДерева.Строки Цикл
                Если Строка.Комплектность = Ложь Тогда
                    СтрокаКонкурент = ДеревоКонкурентов.Строки.Добавить();
                    СтрокаКонкурент.Набор = Строка.Набор;
                    Строка.Набор.Владелец = Строка.Владелец; 
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    
    ЗначениеВДанныеФормы(ДеревоКонкурентов,Конкуренты);

Отрабатывает нормально только вот иерархия не сохраняется что делать ?

0

GreenkA

Эксперт 1С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

28.04.2016, 12:19

4

ТрисТан, тогда используем рекурсию:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
&НаКлиенте
Процедура Команда1(Команда)
    ИзОдногоДереваВДругое();
КонецПроцедуры
 
&НаСервере
Процедура ИзОдногоДереваВДругое()
    ДеревоНаборы = РеквизитФормыВЗначение("Наборы");
    ДеревоКонкуренты = РеквизитФормыВЗначение("Конкуренты");
    
    ЗаполнениеДерева(ДеревоНаборы, ДеревоКонкуренты);
    
    ЗначениеВРеквизитФормы(ДеревоКонкуренты,"Конкуренты");
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнениеДерева(ДеревоНаборы, ДеревоКонкуренты)
    Для Каждого СтрокаДерева Из ДеревоНаборы.Строки Цикл
        Если СтрокаДерева.Комплектность = Ложь Тогда
            НоваяСтрока = ДеревоКонкуренты.Строки.Добавить();
            НоваяСтрока.Набор = СтрокаДерева.Набор;
            ЗаполнениеДерева(СтрокаДерева, НоваяСтрока);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

0

0 / 0 / 0

Регистрация: 27.11.2012

Сообщений: 92

28.04.2016, 15:54

 [ТС]

5

Уже сделал спасибо тему можно считать закрытой

0

Допустим, мы получили в результате запроса данные, представленные в виде дерева значений, и хотим их вывести на форму также в виде дерева значений.

Результат запроса в виде дерева значений получается следующим способом:

РезультатЗапроса = Запрос.Выполнить();	
	
ДеревоЗначенийДляФормы = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)

Далее создаём реквизит формы, например СписокДокументов, имеющий тип «Дерево значений».

Добавляем подчинённые колонки для реквизита СписокДокумента в соответствии с полями из запроса.

И, наконец, выводим дерево значений из запроса на форму:

ЗначениеВРеквизитФормы(ДеревоЗначенийДляФормы, "СписокДокументов");
Информация о материале
Категория: Программирование 1С

Опубликовано: 20 апреля 2016

Пробовал нюанс в том что мне нужно только иерархия по полю наборы
При возвращении реквизитов Ошибка
ЗначениеВРеквизитФормы(ДеревоКонкуренты,»Конкуренты»);

{Документ.ЭР_КомплексныеЗакупкиКлиентов.Форма.ФормаДокумента.Форма(154)}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
ЗначениеВРеквизитФормы(ДеревоКонкуренты,»Конкуренты»);
по причине:
Недопустимое значение параметра (параметр номер ‘2’)
Недопустимое значение параметра (параметр номер ‘2’)

Добавлено через 5 минут
Там поля разные в таблицах

Добавлено через 2 часа 23 минуты

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Дерево  = ДанныеФормыВЗначение(Наборы,Тип("ДеревоЗначений"));
    ДеревоКонкурентов  = ДанныеФормыВЗначение(Конкуренты,Тип("ДеревоЗначений"));
    Для Каждого СтрокаДерева из Дерево.Строки Цикл
        Если СтрокаДерева.Комплектность = Ложь Тогда
            СтрокаКонкурент = ДеревоКонкурентов.Строки.Добавить();
            СтрокаКонкурент.Набор = СтрокаДерева.Набор;
            Для Каждого Строка из СтрокаДерева.Строки Цикл
                Если Строка.Комплектность = Ложь Тогда
                    СтрокаКонкурент = ДеревоКонкурентов.Строки.Добавить();
                    СтрокаКонкурент.Набор = Строка.Набор;
                    Строка.Набор.Владелец = Строка.Владелец; 
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    
    ЗначениеВДанныеФормы(ДеревоКонкурентов,Конкуренты);

Отрабатывает нормально только вот иерархия не сохраняется что делать ?

Есть запрос и вывод в дерево значений.
91b2e6d53f6a409b963e2c72898d1927.png
Если выполнять такой же запрос в локальной базе — никаких проблем нет, в дерево выгружает и выводит в форму.
Если такой же запрос, но без ОбходРезультатаЗапроса.ПоГруппировкамСИерархией — выгружает в Таблицу Значений и тоже отображает на форме. Но мне нужно с группами, а тут ошибка:

Ошибка при вызове метода контекста (Выгрузить)
	Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); 
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.9.1818): Несоответствие типов (параметр номер ‘1’)

Почему не выгружается дерево с обходом по группировкам? Как можно решить эту проблему?

ЗначениеВРеквизитФормы. Ошибка «Недопустимое значение параметра (параметр номер ‘2’)»

Ошибка возникла при преобразовании дерева значений в соответствующий реквизит формы. ДеревоЗначений создавалось запросом и его методом 

Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)

Реквизит формы также имеет тип (ДеревоЗначений) — соответственно Типы совпадают. Причиной оказалось несоответствие колонок ДереваЗначений и реквизита на форме. Их количество и имена должны совпадать.

Недостаточно прав для комментирования

О нюансах работы в 1С с ЗначениеВРеквизитФормы и ошибке Недопустимое значение параметра (параметр номер ‘2’).

ЗначениеВРеквизитФормы выполняется на сервере. Разработчики платформы автоматизировали процесс передачи данных на клиент – вручную на клиенте присваивать значение полю не нужно.

Проще всего выгрузить результат выполнения запроса с вариантом обхода по группировкам. Тогда на выходе будет ДеревоЗначений и тип данных совпадет с тем, что установлен в табличном поле по-умолчанию. Однако, если табличное поле базируется на ТаблицаЗначений – обход по группировкам в выгрузке не нужен.

Если что-то не так – получите ошибку Недопустимое значение параметра (параметр номер ‘2’).

Чтобы исправить ошибку “Недопустимое значение параметра (параметр номер ‘2’)” нужно проверить:

1. Тип данных реквизита на форме должен совпадать с типом данных который хотите присвоить реквизиту (ДеревоЗначений, ТаблицаЗначений).

Формирование ДеревоЗначений:

Запрос.Выполнить.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам)

Формирование ТаблицаЗначений:

Запрос.Выполнить.Выгрузить()

2. Количество и имена колонок в результате запроса должны совпадать с количеством и именами в табличном поле на форме.

3. Имя реквизита на форме должно совпадать с именем указанном в методе ЗначениеВРеквизитФормы и иметь тип Строка. Рекомендую копировать текст и вставлять в места где он должен совпадать.

Если ошибка сохраняется – перепроверьте все пункты в отладчике.

Чтобы научиться работать с методом ЗначениеВРеквизитФормы нужен определенный опыт. Со временем вы обязательно научитесь пользоваться им без ошибок.

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста записать 1с отчетность
  • Ошибка при вызове метода контекста записать вывод запрещен
  • Ошибка при вызове метода контекста занять сканер
  • Ошибка при вызове метода контекста значениевданныеформы
  • Ошибка при вызове метода контекста зафиксироватьтранзакцию