Скрываем линию поиска

18.04.24

Разработка - Работа с интерфейсом

Как скрыть линию поиска во всех формах конфигурации.

В статье показан пример, как скрыть "злосчастную" линию поиска в динамических списках, которая порождает тяжелые запросы и сильно нагружает базу (особенно в моменты активной работы пользователей). На оригинальность решения не претендую - возможно, кто-то что-то подобное уже сделал.

Итак: первое действие - сделать поле поиска невидимым в форме.  Как правило, во всех формах типовых конфигураций есть общий глобальный метод модуля, который вызывается "ПриСозданииНаСервере". В УТ11 это 

СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

Если у вас много самописных документов и других объектов - желательно обойти все формы и не полениться вписать эту строку в событие "ПриСозданииНаСервере".

Далее нужно вписать глобальный код по скрытию "ненужного" элемента. Для этого берем расширение, переопределяем в нем модуль "СобытияФорм", вписываем в нем что-то вроде

&После("ПриСозданииНаСервере")
Процедура add_ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка, ДополнительныеПараметры)

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

КонецПроцедуры

Этого действия было бы достаточно, если бы различные объекты: документы, справочники имели бы определенную форму списка с вписанной строкой "СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);", НО есть же объекты "вообще без форм" - и таковых, как правило, много.

Для "объектов без форм" придуман некий прием по самостоятельной генерации динамического списка на форме.

1. Создаем в том же расширении простую общую форму, кладем на нее пустой реквизит формы "Динамический список" вообще без всего: без основной таблицы, реквизитов... И бросаем его на форму:

 

 

 

2. Создаем подписку на событие следующего вида:

 

 

Цель: переопределить форму списка для всех объектов системы, у которых нет программной формы.

Код подписки следующий:

 
 Код подписки получения формы

 

Процедура ПолучитьФорму(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт
	
	Если ВидФормы = "ФормаСписка" Тогда
		
		Если СтрНачинаетсяС(Источник, "РегистрСведенийМенеджер.") ИЛИ
			СтрНачинаетсяС(Источник, "РегистрНакопленияМенеджер.") Тогда
			
			Пустое = Источник.ПустойКлюч();
			ВыбМетаданные = Пустое.Метаданные();
			Если ВыбМетаданные.ОсновнаяФормаСписка = Неопределено Тогда  
				
				СтандартнаяОбработка = Ложь;
				Параметры.Вставить("ТипМД1", ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ВыбМетаданные));  
				Параметры.Вставить("ТипМД2", СтрЗаменить(Параметры.ТипМД1, "Регистры", "Регистр"));
				Параметры.Вставить("ИмяМД", ВыбМетаданные.Имя);  
				ВыбраннаяФорма = "ОбщаяФорма.add_ФормаСпискаОбщая";
				
			КонецЕсли;
			
		ИначеЕсли СтрНачинаетсяС(Источник, "СправочникМенеджер.") ИЛИ
			 	СтрНачинаетсяС(Источник, "ДокументМенеджер.") Тогда  
				
			Пустое = Источник.ПустаяСсылка();
			ВыбМетаданные = Пустое.Метаданные();
			Если ВыбМетаданные.ОсновнаяФормаСписка = Неопределено Тогда  
				
				СтандартнаяОбработка = Ложь;
				Параметры.Вставить("ТипМД1", ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ВыбМетаданные));  
				Параметры.Вставить("ТипМД2", ОбщегоНазначения.ВидОбъектаПоТипу(ТипЗнч(Пустое)));
				Параметры.Вставить("ИмяМД", ВыбМетаданные.Имя);  
				ВыбраннаяФорма = "ОбщаяФорма.add_ФормаСпискаОбщая";
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

 

 

3. Теперь остается в самой форме программно обработать динамический список, чтобы он показал нам нужный список данных. Пишем код в форме "add_ФормаСпискаОбщая.ПриСозданииНаСервере":

 
 Обработка универсального динамического списка

 

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
				
	Список.ОсновнаяТаблица = Параметры.ТипМД2 + "." + Параметры.ИмяМД; 
	
	ВыбМетаданные = Метаданные[Параметры.ТипМД1][Параметры.ИмяМД];
	
	Если СтрНачинаетсяС(Параметры.ТипМД2, "РегистрСведений") Тогда   
		
		Если СокрЛП(ВыбМетаданные.ПериодичностьРегистраСведений) <> "Непериодический" Тогда
			НовЭл = Элементы.Добавить("СписокПериод",Тип("ПолеФормы"), Элементы.Список);
			НовЭл.Вид = ВидПоляФормы.ПолеНадписи;
			НовЭл.ПутьКДанным = "Список.Период";
		КонецЕсли;
		Если СокрЛП(ВыбМетаданные.РежимЗаписи) = "ПодчинениеРегистратору" Тогда
			НовЭл = Элементы.Добавить("СписокПериод",Тип("ПолеФормы"), Элементы.Список);
			НовЭл.Вид = ВидПоляФормы.ПолеНадписи;
			НовЭл.ПутьКДанным = "Список.Период";
		КонецЕсли;                                
		
	ИначеЕсли СтрНачинаетсяС(Параметры.ТипМД2, "РегистрНакопления") Тогда    
		
		НовЭл = Элементы.Добавить("СписокПериод",Тип("ПолеФормы"), Элементы.Список);
		НовЭл.Вид = ВидПоляФормы.ПолеНадписи;
		НовЭл.ПутьКДанным = "Список.Период";
		НовЭл = Элементы.Добавить("СписокПериод",Тип("ПолеФормы"), Элементы.Список);
		НовЭл.Вид = ВидПоляФормы.ПолеНадписи;
		НовЭл.ПутьКДанным = "Список.Период";   
		
	ИначеЕсли СтрНачинаетсяС(Параметры.ТипМД2, "Справочник") Тогда
		
		Если ВыбМетаданные.ДлинаКода Тогда
			НовЭл = Элементы.Добавить("СписокКод",Тип("ПолеФормы"), Элементы.Список);
			НовЭл.Вид = ВидПоляФормы.ПолеНадписи;
			НовЭл.ПутьКДанным = "Список.Код";
		КонецЕсли;
		Если ВыбМетаданные.ДлинаНаименования Тогда
			НовЭл = Элементы.Добавить("СписокНаименование",Тип("ПолеФормы"), Элементы.Список);
			НовЭл.Вид = ВидПоляФормы.ПолеНадписи;
			НовЭл.ПутьКДанным = "Список.Наименование";
		КонецЕсли;                                

	ИначеЕсли СтрНачинаетсяС(Параметры.ТипМД2, "Документ") Тогда
		
		НовЭл = Элементы.Добавить("СписокДата",Тип("ПолеФормы"), Элементы.Список);
		НовЭл.Вид = ВидПоляФормы.ПолеНадписи;
		НовЭл.ПутьКДанным = "Список.Дата";
		Если ВыбМетаданные.ДлинаНомера Тогда
			НовЭл = Элементы.Добавить("СписокНомер",Тип("ПолеФормы"), Элементы.Список);
			НовЭл.Вид = ВидПоляФормы.ПолеНадписи;
			НовЭл.ПутьКДанным = "Список.Номер";
		КонецЕсли;                                
		
	КонецЕсли;
	
	Если СтрНачинаетсяС(Параметры.ТипМД2, "Регистр") Тогда
		Для каждого ТекМД Из ВыбМетаданные.Измерения Цикл
			НовЭл = Элементы.Добавить("Список" + ТекМД.Имя,Тип("ПолеФормы"), Элементы.Список);
			НовЭл.Вид = ВидПоляФормы.ПолеНадписи;
			НовЭл.ПутьКДанным = "Список." + ТекМД.Имя;
		КонецЦикла;
		Для каждого ТекМД Из ВыбМетаданные.Ресурсы Цикл
			НовЭл = Элементы.Добавить("Список" + ТекМД.Имя,Тип("ПолеФормы"), Элементы.Список);
			НовЭл.Вид = ВидПоляФормы.ПолеНадписи;
			НовЭл.ПутьКДанным = "Список." + ТекМД.Имя;
		КонецЦикла;        
	КонецЕсли; 
	
	Для каждого ТекМД Из ВыбМетаданные.Реквизиты Цикл
		НовЭл = Элементы.Добавить("Список" + ТекМД.Имя,Тип("ПолеФормы"), Элементы.Список);
		НовЭл.Вид = ВидПоляФормы.ПолеНадписи;
		НовЭл.ПутьКДанным = "Список." + ТекМД.Имя;
	КонецЦикла;  
	
	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	
КонецПроцедуры

 

 

Вот в целом и все. Конечно, всех проблем "неоптимального ввода отборов пользователей" оно не решит, но нагрузку на СУБД все-таки облегчает.

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    62130    43    59    

81

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    16918    22    4    

36

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    11208    762    elcoan    45    

106

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    9916    153    acces969    31    

119

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3961    kalyaka    4    

29

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12315    1    5    

10

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    8963    1    2    

6

Программный интерфейс для доработки форм

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Реализовал простой способ программного создания новых элементов, команд и реквизитов на форме.

25.11.2021    9660    AtamanovYS    19    

139
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. BackinSoda 18.04.24 09:27 Сейчас в теме
С переопределением формы хорошо придумано!
Рамзес; Vasvas05; ixijixi; +3 Ответить
2. SlavaKron 18.04.24 13:36 Сейчас в теме
линию поиска в динамических списках, которая порождает тяжелые запросы и сильно нагружает базу
Лечится методом элемента списка УстановитьОграниченияИспользованияВОтборе
3. RocKeR_13 1325 18.04.24 14:10 Сейчас в теме
Как правило, во всех формах типовых конфигураций есть общий глобальный метод модуля, который вызывается "ПриСозданииНаСервере".

Увы, в той же бухгалтерии далеко не во всех формах подключены процедуры переопределения форм. Более того, где подключены - там создан отдельный общий модуль для конкретных документов, например, "РеализацияТоваровУслугФормы", "ПоступлениеНаРасчетныйСчетФормы" и т.д.

А так вообще зачастую достаточно напомнить пользователям про расширенный поиск: там, где строка поиска сильно тормозит, они сами переходят на расширенный поиск.
4. Vasvas05 22 18.04.24 16:29 Сейчас в теме
включение старого поиска CTRL+F
Список = Форма.Элементы.Найти("Список");
	Если Список = Неопределено или Найти(Форма.ИмяФормы,"ФормаСписка")=0 Тогда
		Возврат;
	КонецЕсли;
	
	Список.ПоложениеСтрокиПоиска = ПоложениеСтрокиПоиска.Нет;
	
	ДополнениеСтрокаПоиска = Форма.Элементы.Найти("ДополнениеСтрокаПоиска");
	Если НЕ ДополнениеСтрокаПоиска = Неопределено Тогда
		ДополнениеСтрокаПоиска.Видимость = Ложь;
	КонецЕсли;
	

Показать
METAL; Рамзес; artkor; Поручик; bulpi; Dolour; +6 Ответить
5. PerlAmutor 129 19.04.24 04:08 Сейчас в теме
Мне запретили отключать. Народ стал жаловаться руководству, что это было удобно и т.д. Так что если отключаете, то делайте это еще на этапе внедрения, чтобы никто даже не догадывался о существовании этого демона.
BomjBandit; +1 Ответить
6. ixijixi 1803 19.04.24 09:41 Сейчас в теме
скрыть "злосчастную" линию поиска в динамических списках, которая порождает тяжелые запросы и сильно нагружает базу

Для того чтобы поиском было удобно пользоваться (в том числе и с точки зрения быстродействия) необходимо включить полнотекстовый поиск для всех объектов конфигурации, которые могут использоваться в качестве основной таблицы динамического списка. Также в полнотекстовом поиске должны участвовать все реквизиты объектов конфигурации, которые могут отображаться в динамическом списке и по которым может потребоваться поиск.

https://its.1c.ru/db/v8315doc#bookmark:dev:TI000001337
METAL; YA_418728146; +2 Ответить
9. artkor 281 22.04.24 09:17 Сейчас в теме
(6) У нас по политическим причинам админы отключили его совсем на основной большой базе. Есть плюсы, но есть и минусы:
- результат полнотекстового поиска "напихивает" найденные ссылки во временные таблицы - это сильно грузит темпДБ
- в версии ПП v2 какие-то странные тормоза наблюдаются, обновление индекса не помогает совсем - поиск так и не отрабатывает. Мы на другой маленькой БД сначала отключили ПП насовсем, потом перевели на v1: стало работать буквально за 1 секунду.
Может неправ - но ПП оправдан только для небольших дин-списков
7. leosoft 165 19.04.24 10:51 Сейчас в теме
(6) Тут недавно обнаружил, что на типовой Бухгалтерии полнотекстовый поиск создает файл по размерам как файл базы данных .1CD! Например, база - 6 ГБ, а файлы поиска - 4 ГБ! Может кто знает - как с этим бороться?
10. artkor 281 22.04.24 09:22 Сейчас в теме
(7) вот есть статья в помощь: https://is1c.ru/about/pc/article/upravlenie-polnotekstovym-poiskom/
Имхо если каждый объект конфы участвует в индексе ПП - это вполне логичный объем :)
Попробуйте обновить индекс ПП, или сначала отключить потом переформировать, опыт будет )
11. leosoft 165 22.04.24 10:34 Сейчас в теме
(10) Отключал, все равно при включении восстанавливается прежний размер папки поиска!
Более того - беру базу к себе на комп без папки поиска - у меня тут же идет восстановление...
Понятно, что надо отключать на копии, хотя поиск тогда не будет работать.
8. Dimel 19.04.24 13:24 Сейчас в теме
Я делал подобный функционал, только для подключения к подсистеме "ПодключаемыеКоманды".

Пару замечаний:
1) Необходимо в глобальной подписке на получение формы делать проверку параметра "ВыбраннаяФорма" - форму могли уже переопределить в модуле менеджера объекта.
2) Модуль в котором отрабатывает подписка должен иметь признак "Внешнее соединение". Вроде бы интерфейсное событие, но при обращении через COM будет ломаться.
3) В параметрах необходимо задавать "КлючНазначенияИспользования" иначе у вас перестанет работать сохранение настроек формы.
4) При выводе надо анализировать права на стандартный реквизит или прочие данные - могли ограничить правами часть данных.
5) Анализировать типы не отображаемые пользователю, например "ХранилищеЗначения".
ixijixi; artkor; mszsuz; +3 Ответить
12. JohnyDeath 301 23.04.24 22:00 Сейчас в теме
Я у себя все формы списка документов (а именно там чаще всего и тупит база на ПП) ограничил отбором в "1 год" через расширение
Прикрепленные файлы:
13. demonisius 24.04.24 14:03 Сейчас в теме
(12)
Было бы любопытно посмотреть на Вашу реализацию ограничения.
14. JohnyDeath 301 24.04.24 14:28 Сейчас в теме
(13) Расширяем ОбщийМодуль.ПодключаемыеКоманды и его процедуру "ПриСозданииНаСервере"
&После("ПриСозданииНаСервере")
Процедура ОграничениеПериодаЖурналов_ПриСозданииНаСервере(Форма, Знач ПараметрыРазмещения) Экспорт
	Если Форма.Элементы.Найти("Список") = Неопределено Тогда
		Возврат;
	КонецЕсли;
	Если НЕ СтрНачинаетсяС(Форма.Список.ОсновнаяТаблица, "Документ.") 
		И НЕ СтрНачинаетсяС(Форма.Список.ОсновнаяТаблица, "ЖурналДокументов.")
		Тогда
		Возврат;
	КонецЕсли;
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
		Форма.Список,
		"Дата",
		НачалоДня(ДобавитьМесяц(ТекущаяДатаСеанса(), ОграничениеПериодаЖурналов_Общий.СдвигЖурналовМесяцев())),
		ВидСравненияКомпоновкиДанных.БольшеИлиРавно,
		"Ограничить 1 годом",
		Истина,
		РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ		
	);
КонецПроцедуры
Показать
artkor; Рамзес; +2 Ответить
15. artkor 281 24.04.24 22:49 Сейчас в теме
(14) решение неплохое, но когда 1000 заказов в день в то и больше-все равно сканы появляются. По статистике самый распространённый запрос поиска-по куску номера документа без нулей: ... like %3452%. В свободное время 'колдуем' как ограничить отбор чтобы в индекс попадал
16. JohnyDeath 301 25.04.24 10:16 Сейчас в теме
(15) я поэтому ограничение периода и вынес в настройку "ОграничениеПериодаЖурналов_Общий.СдвигЖурналовМесяцев()"
Но там надо и название фильтра соот-но менять, а я немного поленился и бросил, потому что этот вариант пока устраивает )

У меня часто ищут не номер, а по имени контрагента. Разговоры о том, что есть быстрый фильтр по контрагенту или быстрый поиск по одной колонке не помогают. Подавляющее большинство всё равно будут вбивать свою строку в этот полнотекстовый поиск и ждать...
не знаю как с этим бороться, но отключать полностью это поле означает подписать себе смертный приговор ) Бунт начнется в ту же минуту
17. artkor 281 25.04.24 21:54 Сейчас в теме
(16) до этого еще подбор товаров изменили: в дин.списке можно отключить типовой подбор и сортировку это очень полезно оказалось. Сортировка СУБД мучает намного сильнее чем отбор: надо запрещать 'тыкать на шапку индексированных колонок' и ставить сортировку по умолчанию. После этого свои программные прибамбасы сделали: выпадающие списки колонок сортировки и отбора. Менеджеры поругались поплевались немного, потом привыкли) главное удобный интерфейс придумать с минимумом телодвижений
18. JohnyDeath 301 25.04.24 22:10 Сейчас в теме
(17) у меня еще веселей было. Одна из пользователей сделала группировку в журнале документов "по дням". Отбора по периоду не стояло.
Вот так просто она вешала всю базу.
19. artkor 281 26.04.24 22:07 Сейчас в теме
(18)интересно. хорошо что у нас юзеры про эту возможность не знают)
Оставьте свое сообщение