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

1. alex_4x 86 04.06.15 11:20 Сейчас в теме
Добрый день товарищи!
Вот такой вопрос, думаю уже кто то сталкивался, интересно как это можно сделать.
Есть предположим у справочника или документа реквизиты, которые я не хочу чтобы были видны определенным ролям пользователей.
Ограничивать через RLS нельзя, потому что они используются при работе, да и к тому же ограничение по RLS не покажет что там записано, в реквизите, а сам реквизит будет виден, а хочется скрыть сам факт присутствия этого реквизита.
Например реквизит будет называться СЕКРЕТНО_НаОсосбомКонтроле.
На форме справочника(документа) просто скрываем этот реквизит, ориентируясь на префикс в названии "СЕКРЕТНО_"
Проблема в том, что если будем строить любой отчет на СКД, то потом пользователь при настройках отчета в дереве полей этот реквизит увидит, а хочется его оттуда убрать, просто чтобы самого названия реквизита не было видно при настройке отборов или группировок.
Вот интересно как же его из списка Отборов, группировок строк и колонок - убрать, чтобы просто его там не было.

По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Fragster 1140 04.06.15 11:28 Сейчас в теме
(1) alex_4x, использовать для этих целей отдельный регистр
21. ture 608 05.06.15 20:22 Сейчас в теме
(1) alex_4x, в комент реквизита поставь знак "@" и все реквизиты с таким знаком не показывай. Делов то. Прям ВОПРОСИНА!
22. alex_4x 86 08.06.15 09:37 Сейчас в теме
(21) ture, Замечательно! Хорошо, я поставил @ (хотя я до этого ставил СЕКРЕТНО_, что по сути одно и то же - одинаковый префикс)
С скрытием реквизитов на формах - проблем нет - при отрисовке формы проверяем и скрываем.
Вопрос что делать с универсальными отчетами, построенными на СКД, когда данный реквизит виден в структуре метаданных в окнах группировки и отбора. Как оттуда убрать этот реквизит ?

23. vasyak319 151 08.06.15 09:44 Сейчас в теме
(22) alex_4x,
Как оттуда убрать этот реквизит


@#$@#! Да сто раз уже сказали, как! Читать (18), только, блин, с открытыми глазами и включённым мозгом!
26. alex_4x 86 08.06.15 11:14 Сейчас в теме
(23) vasyak319, Да, я в курсе что создается




27. vasyak319 151 08.06.15 11:35 Сейчас в теме
(26) alex_4x, а вот с СКД уже бороться бесполезно. По крайней мере, с типовой формой настройки.
39. zqzq 24 09.06.15 13:52 Сейчас в теме
(1) alex_4x, у вас в вопросе уже содержится ответ. Уберите эти реквизиты из ролей пользователей.
40. alex_4x 86 09.06.15 14:02 Сейчас в теме
(39) zqzq, Чтобы ничего не перепутать, Убрать из ролей - это выключить просмотр в правах только или еще где-то можно "выключить" ? Криво да косо, вроде получилось. Универсальный отчет тоже поборол, но увы не на основании данных из RLS о видимости реквизита.
Отсюда подвопрос - можно ли программно, зная например что это реквизит "Организация" от документа "АвансовыйОтчет" проверить, включен доступен ли просмотр ли текущему пользователю этого реквизита по настройкам прав?
Доступно или нет чтение - понятно что можно проверить например в Попытке прочитать данные из реквизита, а как узнать именно доступен ли просмотр ? (просмотр как снимал - на картинке выше, про него речь)
41. kraynev-navi 649 09.06.15 16:13 Сейчас в теме
(40) alex_4x,
а как узнать именно доступен ли просмотр

Глобальный контекст (Global context)
ПравоДоступа (AccessRight)
Синтаксис:

ПравоДоступа(<Право>, <ОбъектМетаданных>, <Пользователь/Роль>, <СтандартныйРеквизитСтандартнаяТабличнаяЧасть>)
Параметры:

<Право> (обязательный)

Тип: Строка.
Название права доступа. Могут быть использованы следующие значения:
Чтение (Read) - чтение;
Добавление (Insert) - добавление;
42. a-novoselov 1156 09.06.15 18:54 Сейчас в теме
(1) Все равно непонятно, что мешает совсем убрать этот реквизит?
Завести регистр сведений с названием "Секретно" Измерение-ЛюбаяСсылка(ДокументСсылка, или только нужный документ), ресурс - НаОсобомКонтроле и переписать весь код глобальным поиском, где этот реквизит используется на получение и запись данных из/в регистр. Обработкой перенести данные и удалить реквизит. И не выбирать этот регистр в СКД. Настройка "Использовать дочерние" в СКД открывает доступ ко всем реквизитам на уровне платформы и это можно изменить только патчем самой платформы 1С, что представляется маловероятным.
43. alex_4x 86 10.06.15 10:21 Сейчас в теме
(42) a-novoselov, Так сделать можно. Согласен. Но не подходит по той причине, что я хочу поставить в невидимые в том числе родные для типового решения реквизиты (те, которые хочу, может даже все!!!) :-)
Вот по этому технически - да, так как Вы предлагаете сделать можно и даже правильно, но данную задачу таким способом не решить (очень трудозатратно решить).

Благодаря дельным советам, в отчетах уже всё заработало :-) Остаются "штрихи".
При открытии форм надо убирать "закрытые от просмотра" реквизиты.
Я так понимаю что подписки на событие "при открытии формы" в 1С 8.2 Толстый клиент неуправляемые формы - НЕТ.
Так ведь?
То есть в каждой форме надо процедуру "зачистки" явно вызывать из процедуры "ПриОткрытии()" ???
Серьезно ? Но мне это не нравится!!! Честное слово не нравится! Я хочу чтобы при открытии любой формы, в том числе внешнего отчета, (ну дополнительные внешние отчеты и обработки) нужный мне код вызывался, и каждую обработку для этого менять я категорически не хочу. Можно это как-то организовать ? На таймере например проверят список активных форм, если новая форма появилась - то её обрабатывать? Или еще как то?
44. karpik666 3792 11.06.15 07:52 Сейчас в теме
(43) alex_4x, посмотрите код в модулях при открытии, если во всех есть одинаковая стандартная функция для запуска, можно код для очистки туда запихнуть
3. sommid 04.06.15 11:29 Сейчас в теме
Смотрите в сторону функциональных опций, тогда и в формах ничего прописывать не надо будет, платформа сама все спрячет.
Остается только вопрос, как для разных пользователей прописать разное значение функциональной опции. У нас везде константы в качестве значения используются, что вам не подойдет, но в качестве хранения еще можно и ресурс регистра использовать, но так не пробовал.
5. AnryMc 849 04.06.15 11:40 Сейчас в теме
(3) sommid,

А опции в 8.2 работать будут? А на обічніх формах тоже реквизит не покажут?

(1) alex_4x, Вопрос, на чём предполагается реализовывать? (Релиз платформы). Ну и конечно неплохо бы узнать для какой конфигурации (что бы понять какой функционал там уже есть)...
6. sommid 04.06.15 11:52 Сейчас в теме
(5) у нас УТ 11, только управляемые формы. Да, для обычных форм не подойдет
4. alex_4x 86 04.06.15 11:33 Сейчас в теме
А поподробней можно, про функциональные опции ? И как связать с регистром сведений. Наверно это то что надо. Ведь и в толстом и тонком клиентах тогда скроет ? И на формах тоже автоматом скроет ?
7. alex_4x 86 04.06.15 11:52 Сейчас в теме
Платформа 1С:Предприятие 8.2 (8.2.19.83)
Конфа УПП 1.3 (но мне кажется это совершенно не принципиально)

Закладка Функциональные опции в конфигураторе есть и там даже что то уже сделано (в базовом решении)
Но я никогда с этими функциональными опциями не работал. Может посоветуете почитать где, чтобы понятно и с примерами было.
Спасибо!
8. sommid 04.06.15 12:06 Сейчас в теме
Если есть доступ к ИТС - там почитайте, или просто погуглите ). Под руками ничего интересного нет по этому поводу
9. alex_4x 86 04.06.15 14:17 Сейчас в теме
Опечален я тем фактом, что эти функциональные опции работают только на управляемых формах.
Это что же получается, задачу эту на толстом клиенте никак не решить ?
Должен быть какой-то способ!

НА ТОЛСТОМ КЛИЕНТЕ НЕ РАБОТАЕТ (не только на формах, но самое главное в форме выбора поля отчета на СКД)!



А интересно, формочку эту заменить или подменить или както обработать перед выбором можно ? Мне кажется она полностью платформой делается и на неё вообще никак повлиять нельзя. Или можно всё таки как-то ???

10. sommid 04.06.15 17:04 Сейчас в теме
в обычных формах для конкретного отчета в форме в обработчике ПриОткрытии() делал так:
Если НЕ обЭтоБулево(нпПолучитьЗначениеПраваДляТекущегоПользователя(глТекущийПользователь, ПланыВидовХарактеристик.ПраваПользователей.Доступ_НастройкиОтчетаАнализПродажПоИсточникамРекламы)) Тогда //требуется ограничить доступ
		
		Для каждого ТекНабор из СхемаКомпоновкиДанных.НаборыДанных Цикл
			Для Каждого ТекПоле из ТекНабор.Поля Цикл
				Если ТекПоле.Поле = "ВаловыйДоход" ИЛИ ТекПоле.Поле = "ВаловыйДоходУпр" ИЛИ ТекПоле.Поле = "СуммаНДС" ИЛИ ТекПоле.Поле = "СуммаКомиссииБанка"
					ИЛИ ТекПоле.Поле = "Доход" ИЛИ ТекПоле.Поле = "СреднийПроцентНаценки"
					ИЛИ ТекПоле.Поле = "СреднийПроцентНаценкиУпр" ИЛИ ТекПоле.Поле = "СреднийПроцентНаценкиУпр_Числитель" ИЛИ ТекПоле.Поле = "СреднийПроцентНаценкиУпр_Знаменатель"
					ИЛИ ...
					Тогда

					ТекПоле.ОграничениеИспользования.Поле 			= Истина;
					ТекПоле.ОграничениеИспользования.Группировка 	= Истина;
					ТекПоле.ОграничениеИспользования.Порядок 		= Истина;
					ТекПоле.ОграничениеИспользования.Условие 		= Истина;
					
					ТекПоле.ОграничениеИспользованияРеквизитов.Поле 		= Истина;
					ТекПоле.ОграничениеИспользованияРеквизитов.Группировка 	= Истина;
					ТекПоле.ОграничениеИспользованияРеквизитов.Порядок 		= Истина;
					ТекПоле.ОграничениеИспользованияРеквизитов.Условие 		= Истина;
					
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;
		
		сзЗапрещенныеПоля = Новый СписокЗначений;
		Для каждого ТекПоле из СхемаКомпоновкиДанных.ВычисляемыеПоля Цикл
			Если ТекПоле.ПутьКДанным = "КурсоваяРазница" ИЛИ ТекПоле.ПутьКДанным = "Значение"
				ИЛИ ТекПоле.ПутьКДанным = "ВаловыйДоходУпр" ИЛИ ТекПоле.ПутьКДанным = "СреднийПроцентНаценкиУпр"
				ИЛИ ТекПоле.ПутьКДанным = "СреднийПроцентНаценкиУпр_Числитель" ИЛИ ТекПоле.ПутьКДанным = "СреднийПроцентНаценкиУпр_Знаменатель"
				ИЛИ ...
				Тогда
				сзЗапрещенныеПоля.Добавить(ТекПоле);				
			КонецЕсли;
		КонецЦикла;
		Для каждого ТекЭлемент из сзЗапрещенныеПоля Цикл			
			СхемаКомпоновкиДанных.ВычисляемыеПоля.Удалить(ТекЭлемент.Значение);
		КонецЦикла;
				
		КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
	КонецЕсли;
Показать

но это касалось только показателей.. если нужно закрыть только конкретный реквизит справочника или документа, который явно присутствует в доступных полях, то тогда не знаю
11. alex_4x 86 05.06.15 11:22 Сейчас в теме
КАК СКРЫТЬ РЕКВИЗИТЫ ОБЪЕКТОВ в НАСТРОЙКАХ СКД в ТОЛСТОМ КЛИЕНТЕ (Не управляемые формы) 1С 8.2 ???
Вознагрождение будет увеличено, как только будет найдено любое, даже самое неудобное решение!
12. bankolya 05.06.15 12:04 Сейчас в теме
(11) alex_4x, ну универсальное решение на обычных формах вы вряд ли найдете. Реально же можно сделать так: в СКД наборе данных отключить автозаполнение, в конструкторе запроса на закладке "Компоновка данных" выбрать нужные поля - и где нужно СКРЫТЬ реквизит, напротив тех полей НЕ СТАВИТЬ галку "Использовать дочерние" (или, если в тексте запроса, то в фигурных скобках после названия поля не ставить звездочку через точку). Да, тогда не будут никакие доступны реквизиты. Но нужные реквизиты можно подключить либо явно там же (дополнительными полями, правда, тогда они будут отдельно), либо, что будет лучше - через характеристики! Правда, там придется прописать явно все реквизиты, которые предполагается, что пользователь выберет.
13. karpik666 3792 05.06.15 13:10 Сейчас в теме
(11) alex_4x, самое неудобное решение: это завести регистр, например РеквизитыПоРолям, содержащий 2 измерения "роль" и "имяФормы" и ресурс строковый "Реквизиты", который будет содержать через запятую список реквизитов, которые нужно скрыть, ну и сделать функцию, которая будет отрабатывать передоткрытием и управлять видимостью.
14. karpik666 3792 05.06.15 13:12 Сейчас в теме
(13) karpik666, Ошибочка, не все прочитал в вопросе, если тут нужно копать в доступности полей в отборах и выборе универсального отчета, или построителя.
18. vasyak319 151 05.06.15 17:36 Сейчас в теме
(11) alex_4x, вам уже предлагали хорошее решение - вынести всё в регистр. Измерение - ссылка на документ, ресурсы - реквизиты для припрятывания. И логику реализовать несложно. Но если вам так хочется удалить гланды советским способом, то можете, например, задать реквизиту в качестве синонима какую-нибудь брехню типа "Неважный и никому не нужный реквизит" или тупо точку.
19. alex_4x 86 05.06.15 17:45 Сейчас в теме
(18) vasyak319, Я не понял что дальше делать с регистром.
Для того чтобы определить, что этот реквизит не надо показывать?
Так это я могу и так определить, у меня в названии всегда будет одинаковый префикс "СЕКРЕТНО_"
Но как убрать эти реквизиты из отборов и группировок? С учетом, что даже если он будет доступен через иерархию сущностей?
20. vasyak319 151 05.06.15 17:46 Сейчас в теме
(19) alex_4x, прятать будет нечего - реквизит будет храниться в регистре, а не в документе.
24. alex_4x 86 08.06.15 09:44 Сейчас в теме
(20) vasyak319, Нет, так не годится. Я хочу чтобы это был именно реквизит и этот реквизит хочу скрыть.
В отдельном регистре сведений конечно можно эти данные хранить, это выход, не спорю, но тут задача именно реквизит существующий в справочнике документе скрыть.
На самом деле, я хочу скрыть не один, а все реквизиты, которые пользователю "ну не очень" нужны. Чтобы не лез куда не надо :-)
Переименовывать я их конечно не буду, но допустим добавить значек "@" в Синоним - почему бы и нет....
Поэтому вариант хранить данные которые не хочу показывать в отдельном регистре в данном случае не подходит.
Вопрос стоит именно как скрыть уже существующие реквизиты. На картинке выше понятно о чём я спрашиваю ?
25. vasyak319 151 08.06.15 09:58 Сейчас в теме
(24) alex_4x, Если речь про скриншот, то эта форма создаётся не платформой. Это ФормаВыборПоля Универсального отчёта.
15. bankolya 05.06.15 13:43 Сейчас в теме
Доступность полей, выбираемых через точку что в построителе, что в СКД явно никак не настраивается (они все доступны). Только отключать через точку и заводить через характеристики. Хотя не исключаю, конечно, что есть другое решение.
16. bankolya 05.06.15 15:39 Сейчас в теме
Насчет характеристик сорри. Погорячился я. Если отключить дочерние, то и характеристики не будут доступны.
17. alex_4x 86 05.06.15 17:29 Сейчас в теме
Интересная задачка получилась однако.
Если бы можно было форму как-то перехватить перед показом, то оттуда просто удалить бы не нужное.
Но эту форму не перехватить.
Данные которые в неё попадают - тоже получается скрыты от наших глаз.
Тупик ?
28. alex_4x 86 08.06.15 12:12 Сейчас в теме
Не верю что бесполезно.
Наверняка есть какой-то способ.
Список реквизитов получается из базы, значит идет какой-то запрос. Этот запрос где-то можно перехватить и скорректировать.
Может есть где-то в SQL базе хранимая процедура для получения реквизитов объектов системой компоновки данных - тогда можно эту хранимую процедуру подкорректировать. Наверняка есть какое-то решение! И наверняка кто-то уже с этим сталкивался и проблему эту придумал как обойти.
29. vasyak319 151 08.06.15 14:18 Сейчас в теме
(28) alex_4x, есть - запретить к ним доступ через RLS, но вам это не подходит.
Список реквизитов получается из базы, значит идет какой-то запрос
вы это в ветку "Юмор" хотели запостить, но промахнулись, да?
30. alex_4x 86 08.06.15 14:54 Сейчас в теме
(29) vasyak319, Запретить к ним доступ через RLS - точно не подходит.
Во первых с ограничение по RLS - сам реквизит будет таки виден (что он есть) - (а его надо скрыть)
А доступа к содержимому не будет (а по задумке как раз доступ к реквизиту должен быть)
То есть всё с точностью до наоборот.

1С - это вообще всё в "Юмор", иногда. Особенно ответы от официальной поддержки 1С.
31. vasyak319 151 08.06.15 15:07 Сейчас в теме
(30) alex_4x, Насколько я знаю, СКД не покажет, если не будет доступа. Там вообще полная универсальный интерфейс: я как-то долго не мог понять, почему у меня некоторым пользователям в отчёте некоторые цифры не показываются. Права на все регистры, ессно, были. Оказалось, что надо дать право Просмотр (Чтения недостаточно!) на какой-то регистр, который им даже и не показывался, а использовался внутри запроса для пересчёта километров в килограммы - там коэффициенты хранились. Написал в 1С, но им пофиг мороз.
32. alex_4x 86 09.06.15 10:55 Сейчас в теме
(31) vasyak319, Начал копать в этом направлении.
Результат такой:
В всех правах, ставлю курсор на реквизит -> П.К.М. -> Дополнительно -> Права (Ключик)
В правах снимаю галочки Просмотр, Редактирование



И делаю новый отчет к регистру с этим документом регистратором.
После этого в новом отчете на чистом СКД не видно этого поля !!!! Ни в группировках нет его ни в отборах! Класс!

Три раза проверил, действительно не видно!
Но в старых отчетах (которые в конфу встроены) например "Ведомость по взаиморасчетам с клиентами", "Универсальный отчет" - поле всё равно доступно!

Это уже что-то! Копание идет в нужную сторону, спасибо большое Vasyak319 за правильное направление!
Но не понятно почему так. (почему в новом отчете НЕ видно, а в старых ВИДНО)
Мысли есть? Только если есть мысли - вы уж пожалуйста разжевывайте. ;-)
33. ture 608 09.06.15 11:22 Сейчас в теме
(32) alex_4x, в настройку включен.

В неправильном направлении идете товарищ! Выхватили реквизит и давай его скрывать - это значит, что в базе все открыто? У меня аналитики могут везде поглядеть, а простые чины видят только те формы, которые им позволяют не рыть базу, а работу свою оформлять. Не могут подглядеть что-то отличное от того, что сами делали.

Конечно каждый чих требуют зализывать, но зато это много меньший объем работы, чем базу всякий раз проглядывать под разными углами перед релизом.
38. vasyak319 151 09.06.15 12:22 Сейчас в теме
(32) alex_4x, про УниверсальныйОтчёт и отчёты на его основе я уже сказал ранее: там форма формируется не платформой, так что нет никакой проблемы подправить этот алгоритм, выкинув лишние реквизиты.
34. alex_4x 86 09.06.15 11:29 Сейчас в теме
TURE, скажите пожалуйста, у вас все отчеты типовые переписаны ?
Вы работаете на толстом клиенте неуправляемых формах или на управляемых формах?
Как у вас скрыто то, что не нужно пользователям ? (каким механизмом)
35. ture 608 09.06.15 11:41 Сейчас в теме
(34) alex_4x, УФ.
Делаю подсистемы и вывожу туда, только "правильные" формы, нужные для работы.
Пользователи видят только то, что относится к работе их отдела.
Внешние отчеты не разрешены.
Аналитики могут пользоваться и наблюдать все.

У базы есть вьюхи, через которые можно вытянуть ВСЕ. Но для этого нужен доступ к консоли SQL и голова программиста. Чтоб собрать секретные сведения не достаточно просто пары документов, нужно анализировать внушительный массив данных, чтоб построить сколько-нибудь чистый экономический показатель.

Я не прячу цену закупки, я просто даю на нее смотреть тем, кто ее может видеть в документе. Отчета по ней у простого юзака нет (ему придется открывать документы), а у аналитика есть отчет.
36. ture 608 09.06.15 11:43 Сейчас в теме
(35) База не одна. Аналитики у каждой базы свои. По зонам ответственности разбито.
37. ture 608 09.06.15 11:44 Сейчас в теме
(36) между базами 10-ти минутная задержка синхронизации (вход-выход только нужное для работы на следующем этапе)
45. alex_4x 86 11.06.15 10:38 Сейчас в теме
Нет, не годится!
Мне надо чтобы код для проверки и зачистки и еще кое для чего - запускался при открытии любой формы, любой обработочки или отчетика и в том числе внешней обработки, которую пользователь принес на флешке и я эту обработку в глаза не видел! Закрывать доступ пользователям к запуску внешних отчетов и обработок нельзя!

Может быть есть метод перебора всех открытых форм ? Тогда хоть бы по таймеру вызывать процедуру и смотреть какие формы открыты...
46. vasyak319 151 11.06.15 11:00 Сейчас в теме
(45) alex_4x,
в том числе внешней обработки, которую пользователь принес на флешке и я эту обработку в глаза не видел


Мои искренние и глубочайшие соболезнования родным и близким вашей базы.
47. alex_4x 86 11.06.15 11:54 Сейчас в теме
48. ben19791010 19.06.15 06:22 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот