Скрыть отдельный отбор СКД по условию

1. user1559729 07.03.24 11:01 Сейчас в теме
Добрый день!
Отчет на СКД, есть Форма. В СКД добавлен отбор по полю Организация. Требуется скрывать этот отбор, если в базе только 1 организация. Как это сделать? Что-то никак не получается. Пробовал и через установку РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный и через удаление пользовательских полей...
По теме из базы знаний
Найденные решения
10. user1559729 11.03.24 10:25 Сейчас в теме
Разобрался. В ПриСозданииНаСервере() не получилось. Сделал в ПриОткрытии():
	Для каждого Эл из Элементы.КомпоновщикНастроекПользовательскиеНастройки.ПодчиненныеЭлементы Цикл
		Для каждого ЭлПодч из Эл.ПодчиненныеЭлементы Цикл
			Если ЭлПодч.Заголовок = "Организация" Тогда
				 ЭлПодч.Видимость = Ложь;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. Said-We 07.03.24 15:50 Сейчас в теме
(1)
Отчет на СКД, есть Форма. В СКД добавлен отбор по полю Организация. Требуется скрывать этот отбор, если в базе только 1 организация. Как это сделать?
Обычно не скрывают отбор, а не используют. Или в тексте указывают условие:
т.Организация = &Организация ИЛИ &Организация=Справочник.Организации.ПустаяСсылка....
6. user1559729 07.03.24 15:52 Сейчас в теме
(5) задача именно скрыть, т.к. для баз с одной организацией выводить данный отбор смысла не имеет...
21. toypaul 63 11.03.24 14:56 Сейчас в теме
(6) для баз с одной организацией это обычно делается через функциональную опцию
2. 1segen1 33 07.03.24 11:33 Сейчас в теме
Попробуй так
Прикрепленные файлы:
3. user1559729 07.03.24 12:13 Сейчас в теме
(2) нет, вы не поняли - мне нужно скрыть поле, выводимое в отбор на форме при помощи флага Включать в пользовательские настройки.
Прикрепленные файлы:
4. user1559729 07.03.24 15:39 Сейчас в теме
7. provadyuga 99 07.03.24 17:13 Сейчас в теме
В модуле формы отчета можно поместить такой код:
&НаСервере
Функция КоличествоОрганизацийВИнфБазе()
	
	//Здесь посчитать количество организаций в инф.базе и
	//поместить его в переменную КоличествоОрганизацийВИнфБазе
	
	Возврат КоличествоОрганизацийВИнфБазе;
КонецФункции	

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки;
	
	ПараметрКомпоновкиДанных = Новый ПараметрКомпоновкиДанных("Организация");
	
	КоличествоОрганизацийВИнфБазе = КоличествоОрганизацийВИнфБазе();
	
	Для Каждого Элемент Из ПользовательскиеНастройки.Элементы Цикл
		Если Элемент.Параметр = ПараметрКомпоновкиДанных Тогда
			Элемент.Использование = (КоличествоОрганизацийВИнфБазе > 1);
			Прервать;
		КонецЕсли;	
	КонецЦикла;	
КонецПроцедуры
Показать
8. user1559729 07.03.24 17:20 Сейчас в теме
(7) Не работает.
И у вас про использование, а не про видимость.
11. wertep 23 11.03.24 10:28 Сейчас в теме
(8) Заменяем
Элемент.Использование = (КоличествоОрганизацийВИнфБазе > 1);

На
Если КоличествоОрганизацийВИнфБазе = 1 Тогда
    Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
Иначе
    Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
КонецЕсли;    
9. user1559729 11.03.24 09:44 Сейчас в теме
10. user1559729 11.03.24 10:25 Сейчас в теме
Разобрался. В ПриСозданииНаСервере() не получилось. Сделал в ПриОткрытии():
	Для каждого Эл из Элементы.КомпоновщикНастроекПользовательскиеНастройки.ПодчиненныеЭлементы Цикл
		Для каждого ЭлПодч из Эл.ПодчиненныеЭлементы Цикл
			Если ЭлПодч.Заголовок = "Организация" Тогда
				 ЭлПодч.Видимость = Ложь;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
12. wertep 23 11.03.24 10:38 Сейчас в теме
(10) - Ты суслика видишь?
- Нет.
- А он есть.

Вот так и появляются потом непонятные артефакты. "У меня отчет какую-то ерунду выводит. Все настройки проверил ничего нет, а выводит не все". Это не решение, это проблема на будущее.
Да и обращение по порядку элементов это жесть, а вдруг отбор по организации будет не первым?
13. user1559729 11.03.24 10:47 Сейчас в теме
(12) Исходное условие вполне приемлемое.
14. wertep 23 11.03.24 10:49 Сейчас в теме
(13) А потом люди поиском натыкаясь на этот вопрос будут сразу видеть решение и делать точно также "через жопу".
15. user1559729 11.03.24 10:54 Сейчас в теме
(14) это не моя хотелка, имеются привередливые бизнес-пользователи.
проблема того, кто выхватывает из контекста - на его стороне, и это никак не связано с 1С и с данной темой в принципе, сабж описан.
16. wertep 23 11.03.24 11:14 Сейчас в теме
(15) Проблема не в хотелке, а в ее реализации. Сама по себе хотелка нормальная.

Если где-то капает и тебя попросили устранить, можно пойти двумя путями.
1. Найти где протекает и устранить. Правильный путь.
2. Приделать трубку. Оно все равно капает, но теперь не видно.
18. user1559729 11.03.24 11:24 Сейчас в теме
(16) что не так с реализацией?
если вопрос был к обращению к элементу по номеру, то этот момент я скорректировал - просто изначально написал путь к решению, а не само решение. В (10) уже поправил.
19. wertep 23 11.03.24 11:36 Сейчас в теме
(18) Смотри на свой алгоритм. Сам отбор ты из пользовательских настроек не убрал, он там как был так и остался. Ты просто выключил его видимость. Т.е. отбор есть, но его не видно. И если вдруг каким-то образом он будет включен, и в нем не будет выбрана не та единственная организация, то отчет будет всегда пустой. А вот найти что происходит будет очень трудно.
Поэтому воздействуем на отбор. Можно ставить "Использовать = Ложь". Можно поставить "РежимОтображения - Обычный", чтоб он на форме не мозолил глаза. Можно совсем удалить из пользовательских настроек, но тогда при появлении второй организации его надо будет восстановить.
Но оставлять отбор и при этом его не показывать это путь создания "магических проблем". Потому что отбор есть и он воздействует на отчет, но что там в нем ты никак не можешь увидеть пользовательскими средствами.
20. user1559729 11.03.24 13:26 Сейчас в теме
(19) c РежимомОтображения не взлетело... Возможно, ещё нужно как-то обновлять настройки.
27. wertep 23 11.03.24 16:56 Сейчас в теме
(20) Ну потому что пользователь уже открывал отчет и у него есть сохраненные "пользовательские настройки", поэтому надо всю эту фигню отлавливать в событиях "ПередЗагрузкойПользовательскихНастроекНаСервере" и "ПередЗагрузкойВариантаНаСервере".
22. user1559729 11.03.24 15:13 Сейчас в теме
23. toypaul 63 11.03.24 15:40 Сейчас в теме
(22) подробнее что именно? что такое ФО? посмотреть по-моему можно в любой типовой - если в базе ведется учет по одной организации, то справочник (вроде целиком) включен в ФО, которая отключена. соот-но во всех отчетах организация недоступна. ну или можно реквизит какого-то объекта включить в эту ФО
25. wertep 23 11.03.24 16:27 Сейчас в теме
(23) Судя по тому как стоит задача, у него как раз включено "Несколько организаций". Но при этом добавлена только одна организация.
24. user1559729 11.03.24 15:44 Сейчас в теме
(23) Не об этом речь. Пользователю мешает лишний параметр отбора на форме. На данный момент организация одна - и выводить параметр как бы смысла не имеет, т.к. в разрезе одной этой организации выводим отчет. Но в перспективе организаций в базе потенциально может стать больше. Пользователь хочет заложиться сразу в отчете на это. И соответственно, когда организаций станет больше одной - уже нужен отбор.
26. wertep 23 11.03.24 16:36 Сейчас в теме
(24) Вообще по хорошему это "пользовательские настройки". Если пользователю мешает лишний отбор, пользователь открывает "Настройки", заходит в отборы, нажимает "Удалить элемент" (или как там оно точно называется). И все больше он не видит этот дополнительный отбор.
28. toypaul 63 11.03.24 21:00 Сейчас в теме
(24) Похоже кто-то не в курсе что такое фо. Ну и ладно. Колесо изобретать - любимое занятие ограниченно осведомлённых
29. user1559729 11.03.24 21:26 Сейчас в теме
(28) "знание надмевает, а любовь назидает"... (1 Кор. 8:1)
Я в курсе про ФО. Речь не про ФО в целом, а про то, каким образом вы предлагаете привязать видимость конкретного элемента отбора СКД дополнительного внешнего отчета к ФО? С удовольствием вас выслушаю.
Оставьте свое сообщение

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