Имя: Пароль:
1C
1С v8
СКД, ПользовательскиеНастройки. Объясните раз и навсегда, плиз...
0 fisher
 
27.12.11
19:09
Как программно добавить, допустим, элемент отбора в пользовательские настройки, которого раньше не было? И чтобы пользователь увидел?
Бьюсь, нифига понять не могу.
Никак не могу въехать в симбиоз "Настроек" и "ПользовательскихНастроек". Я правильно понимаю, что "ПользовательскиеНастройки" - вторичны? Ведь у элемента настроек есть свойство "ИдентификаторПользовательскойНастройки"? Или я могу напрямую работать с пользовательскими настройками, добавлять туда новые элементы минуя настройки? Объясните на примере программного добавления нового элемента отбора, очень вас прошу. Бо я уже понемногу закипаю. С изменением параметров в пользовательских настройках вроде разобрался. Находишь нужный параметр в настройках, смотришь его идентификатор пользовательских настроек, находишь в пользовательских настройках и меняешь. А вот как добавить новый отбор нифига не могу сообразить. Не выходит каменный цветок :(
1 fisher
 
27.12.11
19:11
Пробовал программно добавлять элемент отбора в настройки. Но как его заставить появиться в пользовательских настройках и сработать - не могу понять.
2 fisher
 
28.12.11
11:49
<хриплым слабеющим голосом> Хэээээлп...
3 fisher
 
28.12.11
12:58
С наступающим! Сделайте подарок, плиз :)
4 Axel2009
 
28.12.11
13:12
так тебе нужно с пользовательскими настройками разобраться или отбор добавить програмно?
5 fisher
 
28.12.11
13:35
(4) И то и другое. Буду рад любой помощи :)
6 Axel2009
 
28.12.11
13:46
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
   НастройкиОтчета.ПользовательскиеПоля.Элементы.Очистить();
   Элемент = НастройкиОтчета.ПользовательскиеПоля.Элементы.Добавить(Тип("ПользовательскоеПолеВыборКомпоновкиДанных"));
   Элемент.Заголовок = "Тест";
   //Элемент.ПутьКДанным = "ПользовательскиеПоля.Поле1";
   Элемент.Использование = Истина;
   ЭлементВарианта = Элемент.Варианты.Элементы.Добавить();
   ЭлементОтбора = ЭлементВарианта.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
   ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
   ЭлементОтбора.ПравоеЗначение = Справочники.Контрагенты.НайтиПоНаименованию("Вася пупкин");
7 fisher
 
28.12.11
15:12
(6) Хм... Интересный пример. Но уже взлетело по-другому.
В элементах пользовательских настроек нахожу элемент с типом "ОтборКомпоновкиДанных" и в его элементы добавляю нужный отбор.
Тут хитрость еще у меня небольшая. В пользовательские настройки выводится отбор не основной схемы, а вложенной. Так вот, все попытки установить отбор не через пользовательские настройки а напрямую через схему (ВложенныеСхемы.МояСхема.Настройки) или через КомпоновщикНастроек.Настройки.Структура[ИндексНастроекВложеннойСхемы] провалились. Т.е. отборы добавляются нормально, но не отрабатывают. Типа как пользовательские отборы их перекрывают (несмотря на то, что список пользовательских отборов пуст). В связи с чем вопрос (может сразу сможешь ответить). Для основной схемы такая же байда? В смысле, если отбор добавить только в КомпоновщикНастроек.Настройки, то он не сработает, т.к. его перекроет пользовательский отбор?
А как тогда красивее всего решить задачу с принудительным доп-отбором, который пользователь не должен менять? По-идее, для этого предназначены "ФиксированныеНастройки", но для вложенной схемы их вроде не применишь...
8 Axel2009
 
28.12.11
15:18
а код где?
9 Axel2009
 
28.12.11
15:19
если пользователю не доступна кнопка конструктор настроек, тогда отбор нужно добавлять недоступный. тогда пользователю он виден не должен быть.
10 acsent
 
28.12.11
15:24
// Функция возвращает пользовательские настройки.
//
// Параметры:
//  Нет.
//
// Возвращаемое значение:
//  Пользовательские настроки отчета усОстаткиТоваров
//
Функция ПолучитьПользовательскиеНастройки(ИмяОтчета, СтруктураПараметров) Экспорт

   СхемаКомпоновкиДанных = Отчеты[ИмяОтчета].ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

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

   Возврат КомпоновщикНастроекКомпоновкиДанных.ПользовательскиеНастройки;

КонецФункции // ПолучитьПользовательскиеНастройки()
11 acsent
 
28.12.11
15:25
ПользовательскиеНастройки = ПолучитьПользовательскиеНастройки(ПараметрКоманды);
   
   ПараметрыФормы = Новый Структура;
   ПараметрыФормы.Вставить("СформироватьПриОткрытии",   Ложь);
   ПараметрыФормы.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);
                           
   ОткрытьФорму("Отчет.блПлатежнаяДисциплина.Форма", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно);
12 fisher
 
28.12.11
15:36
(8) Какой именно код интересует? Нету его уже ибо тестовый был. Корневые объекты я указал - а дальше абсолютно стандартная и идентичная для всех случаев работа с объектом "ОтборКомпоновкиДанных". Та же, что и в работающем уже коде для пользовательских настроек.
(9) А, т.е. таки именно в пользовательские отборы все равно пихать надо, только "РежимОтображения" в "Недоступный" ставить? Вариант.
(10),(11) Не совсем в кассу, но спасибо за пример.
13 Axel2009
 
28.12.11
15:46
(12) не обязательно в пользовательские. в обычные отборы тоже можно добавлять. режим отображения только ставь "Недоступный"
14 fisher
 
28.12.11
15:59
(13) А обычный отбор перекроет пользовательские? Обычный отбор по вложенной схеме не отработал...
Пробовал два варианта:
1)  НовыйЭлементОтбора = СхемаКомпоновкиДанных.ВложенныеСхемыКомпоновкиДанных.МояНужнаяСхема.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
2) НовыйЭлементОтбора = КомпоновщикНастроек.Настройки.Структура[ИндексНастроекНужнойВложеннойСхемы].Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
15 Axel2009
 
28.12.11
16:30
(14) ну отключи пользовательские отборы.. зачем их использовать то вообще?
16 fisher
 
28.12.11
16:42
(15) Эээ... Чтобы пользователи могли свои отборы добавлять, зачем же еще?
17 Axel2009
 
28.12.11
17:06
(16) ну так они могут добавлять обычные отборы. не?
18 fisher
 
28.12.11
17:23
(17) Не, речь об управляемой форме отчета...
19 Axel2009
 
28.12.11
17:43
(18) тогда получается нужно самому писать процедурку по выводу в табдок, а не заполнять пользовательские настройки и стандартная обработка.
вообще в упр формах не силен пока еще.
20 fisher
 
28.12.11
18:11
(19) Зачем? Все что надо уже получилось через пользовательские настройки.
А упр-интерфейс я сам пока слабо. За умные книжки еще не садился, т.к. клиент у меня толстый а упр-формы пока только в отчетах. Т.е. от случая к случаю и по необходимости. Я вообще не вижу большого толка от того, что замутили пользовательские настройки отдельной темой и как именно это сделали. Больше всего пользы от более-менее человеческой настройки простых группировок в них, которой раньше очень не хватало. А то что одним табличным полем можно пользователю все нужные настройки вывалить - преимущество сомнительное (их представление не так чтобы уж идеальное). Короче, несколько кособокий аппендикс вырастили, ИМХО. Хоть и вполне рабочий. Собственно, только потому управляемые формы для отчетов и юзаю, что на них можно очень быстро клепать очень функциональные отчеты.