|
СКД: ограничить список значений параметра timurhv, Дмитрий, Prog_man, SleepyHead, formista2000, Волшебник, Franchiser, DiMel_77, RVN, АнализДанных, Kobol, sikuda, Доминошник, youalex, Mr_Boogie, orakool, Gucci76, Шурик71, kir-g, KJlag, sound, yurikmellon2, El_Lipo, Андрей_Андреич, dedmoroz777, Fregat, comp2006, Хряк, СвинТуз, boozin, Жеглофф, Fedor-1971, DimR_71, Климов Сергей, Мультук, dmt, Буковка, osa1C, denk, spiller26, программистище, elka302, Скучный бух, toypaul, dimm7310, Amfiaray, obs191, Hans, 2mugik, Admin_Net_1C, AAA
| ☑ | ||
---|---|---|---|---|
0
sound
28.10.24
✎
19:09
|
Всем доброго времени!
Есть отчет на СКД в конфигурации УТ, форм отчет не имеет, есть параметр "Организации" с типом "СправочникСсылка.Организации" и установленной галкой "Доступен список значений". Нужно список выбора организаций формировать программно. В теле модуля отчета пишу: // Массив - массив ссылок Организаций СписокФилиалов = Новый СписокЗначений; СписокФилиалов.ЗагрузитьЗначения(Массив); ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Организации"); Если ЗначениеЗаполнено(ПараметрДанных.ИдентификаторПользовательскойНастройки) Тогда ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки; ПользовательскийПараметр = ПользовательскиеНастройки.Элементы.Найти(ПараметрДанных.ИдентификаторПользовательскойНастройки); ПользовательскийПараметр.Значение = СписокФилиалов; ПользовательскийПараметр.Использование = Истина; КонецЕсли; Но у пользователя список выбора не ограничивается и видны все организации. Подскажите как правильно это сделать? |
29 |
||
1
Волшебник
28.10.24
✎
19:09
|
доступ к организациям лучше ограничить через RLS
|
|||
2
sound
28.10.24
✎
19:13
|
Отчет формируют по нескольким организациям.
В справочнике Организации есть несколько "технических" элементов, и нужно чтобы некоторые из них нельзя было отметить галочками и чтобы данные по ним не попали в отчет. |
3 |
||
3
Волшебник
28.10.24
✎
19:14
|
(2) Доступ к "техническим" элементам лучше ограничить через RLS. Ещё можно вычищать запрещённые элементы перед самым формированием отчёта.
|
|||
4
sound
28.10.24
✎
19:22
|
Как это сделать в процедуре ПриКомпоновкеРезультата я примерно понимаю, а вот как сделать чтобы при таких настройках, когда нет формы у отчета, ограничить список выбора организаций у параметра на форме, которая "сама генерируется"?
|
5 |
||
5
Волшебник
28.10.24
✎
19:26
|
(4) RLS это сделает. Ещё можно вшить ограничение в форму выбора, но лучше его продублировать зачисткой перед самым формированием отчёта.
|
7 |
||
6
Волшебник
28.10.24
✎
19:27
|
А ещё можно в схему компоновки данных прямо в запрос добавить условие
ГДЕ НЕ Организация В (&Запрещенные) |
7 |
||
7
sound
28.10.24
✎
19:45
|
(5) RLS это сделает, но также RLS скроет от пользователя эти организации и из других мест, а нужно скрыть только в этом отчете.
(6) В схеме компоновки есть лишь набор данных Объект - таблица значений, которая собирается программно из разных баз через http-сервисы, там все сложно короче ). Сейчас посмотрел, отладчик после выполнения основного модуля отчета попадает в общую форму "ФормаОтчета", может в ней дело? |
|||
8
Hans
28.10.24
✎
22:09
|
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы[0].ДоступныеЗначения.Добавить("5"); КонецПроцедуры |
10 19 |
||
9
Hans
28.10.24
✎
22:10
|
Ну можешь сделать свою форму. Можешь БСП разбирать или что там у тебя. Мой код работает. Я добавил в список еще одно число.
|
|||
10
Волшебник
28.10.24
✎
22:11
|
(8) говнокод
|
15 |
||
11
Hans
28.10.24
✎
22:11
|
И оно появилось в пользовательских настройках.
|
12 |
||
12
Волшебник
28.10.24
✎
22:12
|
(11) И не стыдно делиться такими "шедеврами"?
|
13 |
||
13
Hans
28.10.24
✎
22:14
|
(12) норма. Досканально СКД не знаю.
|
14 |
||
14
Волшебник
28.10.24
✎
22:15
|
(13) За такой код надо веником по лицу
|
|||
15
Hans
28.10.24
✎
22:16
|
(10) Ну планирую на курс Шилова идти и Лосяша. Ну и надо фундаментал на других языках изучать.
|
16 |
||
16
Волшебник
28.10.24
✎
22:16
|
(15) Займитесь лучше питоном. В 1С вы ни бум-бум
|
17 |
||
17
Hans
28.10.24
✎
22:19
|
(16) Я сертифицировнный специалист по платформе!!!
|
18 |
||
18
Волшебник
28.10.24
✎
22:20
|
(17) Я эти тесты писал!
|
|||
19
sound
28.10.24
✎
22:27
|
(8) Речь идёт о том, что форм у отчета нет никаких, ни формы отчета, ни формы настроек, ни других, и добавлять формы в планах нет.
|
21 25 |
||
20
Hans
28.10.24
✎
22:40
|
Мой код оказывается и в модуле отчета прекрасно работает. Сам не знал что так можно.
|
|||
21
osa1C
28.10.24
✎
22:41
|
(19) Твой отчет использует общую форму "ФормаОтчета", что значит формы нет? А в "ФормаОтчета" есть процедура ПриСозданииНаСервере. Проблема только в том, что форма общая, поэтому тебе надо в ней определять, что именно твой отчет формируется и для него делать ограничение по организациям. Например формировать отдельные массивы организаций в зависимости от прав. Т.е. сначала в массив добавить организации, доступные всем, а потом по условию добавлять дяя каждых ролей доступные только им организации.
|
|||
22
Hans
28.10.24
✎
22:43
|
тело модуля
|
|||
23
Hans
28.10.24
✎
22:44
|
Нашли новую фишку.
|
|||
24
Hans
28.10.24
✎
22:45
|
Это открывает широкие возможности манипулирования параметрами и всем СКД.
|
|||
25
Шурик71
28.10.24
✎
22:51
|
(19) Бсп умеет прокидывать обработчики в модуль.
Краткая инструкция (мог что-то и пропустить) 1. В модуле отчета: Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт Настройки.События.ПриСозданииНаСервере = Истина; //возможно, понадобится еще //Настройки.События.ПередЗагрузкойВариантаНаСервере = Истина; //Настройки.События.ПередЗаполнениемПанелиБыстрыхНастроек = Истина; КонецПроцедуры Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт //тут нужный код КонецПроцедуры 2. Если это внешний отчет, то этого достаточно. Если это внутренний отчет, тогда еще - в общем модуле ВариантыОтчетовПереопределяемый: Процедура НастроитьВариантыОтчетов(Настройки) ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ИмяМоегоОтчета); КонецПроцедуры - в модуле менеджера отчета: Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт НастройкиОтчета.ОпределитьНастройкиФормы = Истина; КонецПроцедуры |
26 |
||
26
sound
29.10.24
✎
01:19
|
(25) Спасибо. Почитать бы еще где-то про прокидывание обработчиков.
|
33 |
||
27
sound
29.10.24
✎
10:42
|
Нашел где почитать https://blog.livegig.ru/archives/2452
Всем спасибо! |
28 |
||
28
DiMel_77
29.10.24
✎
11:26
|
(27) Делается все просто. Делается добавлением 2-х экспортных функций в модуль объекта. Как то так:
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт Настройки.События.ПриОпределенииПараметровВыбора = Истина; КонецПроцедуры //Если хотите ограничить через запрос Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт ИмяПоля = Строка(СвойстваНастройки.ПолеКД); Если ИмяПоля = "ПараметрыДанных.<Имя нужного параметра>" Тогда СписокДоступных = Новый Массив; СписокДоступных.Добавить(<Доступные значения>); Текст = <Текст запроса получения доступных>; СвойстваНастройки.ЗапросЗначенийВыбора.Текст = Текст; СвойстваНастройки.ЗапросЗначенийВыбора.Параметры.Вставить("СписокДоступных",СписокДоступных); КонецЕсли; КонецПроцедуры //Если хотите тупо списком ограничить Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт ИмяПоля = Строка(СвойстваНастройки.ПолеКД); Если ИмяПоля = "ПараметрыДанных.<Имя нужного параметра>" Тогда ЗначенияДляВыбора = Новый СписокЗначений; <Тут код по добавлению нужных значений> СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = Истина; СвойстваНастройки.ЗначенияДляВыбора = ЗначенияДляВыбора; КонецЕсли; КонецПроцедуры |
30 33 |
||
29
Franchiser
29.10.24
✎
11:31
|
(0) можно создать временную таблицу программно со списком организаций , и потом ее передать в скд
|
|||
30
Franchiser
29.10.24
✎
11:35
|
(28) как это решает проблему с тем что пользователь может не выбрать организации, но нужно результат ограничить списком данных по доступным организациям?
|
31 32 33 |
||
31
DiMel_77
29.10.24
✎
11:46
|
(30) Задача была ограничить список выбора параметра при формировании отчета. Никто не мешает сделать параметр обязательным к заполнению или отработать ситуацию с незаполненным параметром добавлением фильтра по "доступным" организациям при формировании отчета с незаполненным параметром. А как этот фильтр накладывается уже неважно, через выражение СКД, либо через условие в запросе с временной таблицей и т.п.
|
|||
32
Шурик71
29.10.24
✎
12:07
|
(30) Это решает проблему отсутствия формы и ее обработчиков.
А при наличии обработчиков формы - тут уже дело техники. Можно, например, в обработчике "ПриСозданииНаСервере" программно свое поле на форме для отбора сгенерировать, а типовое отключить. А можно в обработчике ПослеЗаполненияПанелиБыстрыхНастроек найти сгенерированный типовой элемент отбора и у него проставить "выбор из списка" и заполнить список доступными значениями. |
33 |
||
33
Шурик71
29.10.24
✎
12:14
|
||||
34
Franchiser
29.10.24
✎
13:26
|
Вообще конечно странно, каким образом пользователь может выбрать в список лишние организации, если у него должен быть в базе настроен rls и такие организации в принципе не могут быть доступны.
|
35 |
||
35
RVN
29.10.24
✎
13:34
|
(34) Они могут быть не лишние вообще. Они могут быть "лишние" в данном конкретном отчете.
|
|||
36
Franchiser
29.10.24
✎
13:46
|
Есть ещё один вариант : написать в модуле объекта:
Процедура ИнициализацияОтчета() // добавляем список доступных значений СписокОрганизаций= Новый СписокЗначений; ПараметрСхемы = СхемаКомпоновкиДанных.Параметры.Найти("Организация"); ПараметрСхемы.УстановитьДоступныеЗначения(СписокОрганизаций); КонецПроцедуры // ИнициализацияОтчета ИнициализацияОтчета(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |