Имя: Пароль:
1C
1С v8
Заполнение пользовательских настроек на УФ
0 alf2006x
 
23.08.18
11:32
Всем доброго дня.

Перевожу обычную форму на УФ.
В обычной форме есть табличное поле УсловияОтбора с типом значения = Отбор.
Заполняется оно настройками из построителя запроса ПЗ путем программного создания ПЗ с нужным текстом запроса, выполнения метода ПЗ.ЗаполнитьНастройки() и последующим присвоением
УсловияОтбора = ПЗ.Отбор

На УФ я создал реквизит Компоновщик с типом значения = КомпоновщикНастроекКомпоновкиДанных и на форму вытащил его таблицу ПользовательскиеНастройкиКомпоновкиДанных.

Подскажите, куда скормить имеющийся текст запроса чтобы в Пользовательских настройках появились доступные значения для отбора?
1 Cyberhawk
 
23.08.18
13:22
Держи карман шире
2 DrWatson
 
23.08.18
13:44
(1) да ладно, чё ты.
(0)
Процедура ИнициализироватьКомпоновщик(КомпоновщикНастроек, УникальныйИдентификатор, Знач НастройкиКомпоновщика = Неопределено)


    СхемаКомпоновкиДанных = (Загрузить или создать схему компоновки);
    
    URLСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемыКомпоновкиДанных));
    
    Если ЗначениеЗаполнено(НастройкиКомпоновщика) Тогда
        КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпоновщика);
        КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.Полное);
    Иначе
        КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    КонецЕсли;

КонецПроцедуры
3 Cyberhawk
 
23.08.18
13:45
(2) И где в этом коде ответ на "куда скормить имеющийся текст запроса"? :)
4 DrWatson
 
23.08.18
13:48
(3) Невнимательно прочитал вопрос. Думал схему компоновки создать программно создать не трудно.
Ладно, держи.
    СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
    ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
    ИсточникДанных.Имя = "ИсточникДанных1";
    ИсточникДанных.ТипИсточникаДанных = "Local";
    
    НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    НаборДанных.Имя = "НаборДанных1";
    НаборДанных.ИсточникДанных = ИсточникДанных.Имя;
    НаборДанных.АвтоЗаполнениеДоступныхПолей = Ложь;
    НаборДанных.Запрос = ТекстЗапроса;
5 alf2006x
 
23.08.18
13:48
Спасибо.
Ушел пробовать.
6 DrWatson
 
23.08.18
13:49
+(4) АвтоЗаполнениеДоступныхПолей лучше не пиши, у тебя в запросе скорее всего нет {}.
7 alf2006x
 
23.08.18
14:38
Всё сделал по инструкции.

Текст запроса отправил в НаборДанных.
Захожу в
СхемаКомпоновкиДанных.ВариантыНастроек.Основной.Настройки.Отбор.ДоступныеПоляОтбора.Элементы
а там - никого.

Делаю то же самое в Консоли отчетов СКД - там на закладке "Настройки" в варианте "Основной"/Выбранные поля/ Доступные поля - всё появляется (при наличии текста запроса, всё что есть в тексте запроса).

Может программно для СхемаКомпоновкиДанных после установки текста запроса надо какой-то метод инициализации настроек выполнить?
8 DrWatson
 
23.08.18
14:47
(7) У меня тоже никого. Ну и ладно, мне важнее чтобы было в КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.
Кстати, для целей отбора на форму обычно вытаскивают КомпоновщикНастроек.Настройки.Отбор
9 DrWatson
 
23.08.18
14:49
(7) >>надо какой-то метод инициализации настроек выполнить.
Надо. В (2) он есть.
10 alf2006x
 
23.08.18
15:23
(8) Совершенно справедливое замечание.

В итоге всё получилось. Огромное спасибо!
11 alf2006x
 
23.08.18
17:29
Вторая серия.

Справочник.ТабличнаяЧасть.СписокУсловий (тип значения реквизита = ХранилищеЗначений)

На форме: ТабличнаяЧасть и КомпоновщикНастроекКомпоновкиДанных (из первой серии)

При изменении или удалении элемента КомпоновщикаНастроек происходит вызов метода, который должен помещать текущие настройки в ТекущиеДанные.СписокУсловий табличной части.

Судя по тому, что реквизит с типом ХЗ недоступен в данных формы - похоже что задача нерешаемая. Как до него добраться на сервере и впихнуть туда упакованные в ХЗ настройки - не понимаю.

Или все таки возможны варианты?
12 Franchiser
 
гуру
23.08.18
17:40
(11) через адрес временного хранилища
13 alf2006x
 
23.08.18
18:06
На клиенте укладываю набор КомпоновщикаНастроек во временное хранилище.
Получаю временный адрес.
Передаю адрес в процедуру на сервере
На всякий случай передаю также номер строки ТекущихДанных табличной части.
На сервере пытаюсь сделать так:

ТЧ = РеквизитФормыВЗначение("Объект.ТабличнаяЧасть");
НаборУсловийОтбора = ПолучитьИзВременногоХранилища(Адрес);
ТЧ[НомерСтроки-1].СписокУсловий = Новый ХранилищеЗначения(НаборУсловийОтбора);

Получаю: Поле объекта не обнаружено (СписокУсловий)
Смотрю его отладчиком, вижу тип: "ДанныеФормыКоллекция".

А на форме ХЗ недоступен.

Остается, наверное, только записать элемент, получить его программно, найти нужную строку и впихнуть туда содержимое адреса?
14 Franchiser
 
гуру
23.08.18
19:25
Зачем тебе ХЗ на форме, вообще ХЗ не используй
15 Franchiser
 
гуру
23.08.18
19:27
ТЧ[НомерСтроки-1].СписокУсловий = Адрес;
16 Franchiser
 
гуру
23.08.18
19:30
Это вообще что документ, отчёт или обработка?
17 alf2006x
 
24.08.18
09:13
Это элемент справочника у которого есть табличная часть, реквизит в которой имеет тип значения ХЗ.
Этот реквизит нужно заполнить комплектом настроек КомпоновщикаНастроекКомпоновкиДанных для каждого элемента ТЧ.

То есть для каждого элемента ТЧ справочника пользователь указывает список настроек КНКД, а моя задача эти настройки сохранить в ХЗ для каждой строки ТЧ элемента.

Однако когда я на сервере пытаюсь сделать
ТЧ[НомерСтроки-1].СписокУсловий = ...
то в ответ получаю: "Поле объекта не обнаружено (СписокУсловий)"
18 Fragster
 
гуру
24.08.18
09:26
все не читал. нужно схему положить во временное хранилище указав вторым параметром уид формы, потом проинициализировать компоновщик настроек на основе источника, созданного с параметром - адресом, полученным на предыдущем этапе.
19 alf2006x
 
24.08.18
09:29
А ларчик просто открывался:

ТЧ = РеквизитФормыВЗначение("Объект.ТабличнаяЧасть")
возвращает тип "ДанныеФормыКоллекция"

а ТЧ = РеквизитФормыВЗначение("Объект")
возвращает тип "СправочникОбъект" (собственно то, что мне нужно)

Матчасть - это наше всё ))

Спасибо за помощь!