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

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

Метки: 

Заполнение пользовательских настроек на УФ

Я
   alf2006x
 
23.08.18 - 11:32
Всем доброго дня.

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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