Автоматическое управление режимом иерархии при поиске. УТ11.4

Клиент обратился с просьбой облегчить поиск по номенклатуре при включенном режиме иерархии. Сначала он не очень точно смог сформулировать своё пожелание, но совместными усилиями выяснили, что нужно сделать.

При вводе поисковой строки нужно искать по всей номенклатуре, а не по текущей выбранной папке. Самый простой способ для этого — отключить иерархию после изменения поисковой строки.

После очистки поисковой строки нужно опять включить иерархию. Можно конечно было бы посмотреть, была ли она включена до ввода поисковой строки, но это лишнее, клиент обычно всегда работает с иерархией.

Я добавил эту логику в три формы УТ 11.4:

  1. Форма обработки подбора в документы продажи
  2. Форма обработки подбора в документы закупки
  3. Форма списка номенклатуры

Во всех случаях сначала добавляем форму в расширение.

Потом находим поле СтрокаПоискаНоменклатура:

Создаем для этого поля два обработчика события «Перед изменением» и «Перед очисткой» и прописываем в них такой код:

&НаКлиенте
Процедура дор_СтрокаПоискаНоменклатураПриИзмененииПеред(Элемент)
	//Поиск номенклатуры, сначала отключаем иерархию
	ПоИерархии = ЭтаФорма.ВариантНавигации = ПредопределенноеЗначение("Перечисление.ВариантыНавигацииВФормахНоменклатуры.ПоИерархии");
	Если ПоИерархии Тогда
		Если ИспользоватьФильтры Тогда
			ИспользоватьФильтры = ложь;
			ИспользоватьФильтрыПриИзменении(Неопределено);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура дор_СтрокаПоискаНоменклатураОчисткаПеред(Элемент, СтандартнаяОбработка)
	//Включаем иерархию после очистки поля поиска	
	ПоИерархии = ЭтаФорма.ВариантНавигации = ПредопределенноеЗначение("Перечисление.ВариантыНавигацииВФормахНоменклатуры.ПоИерархии");
	Если ПоИерархии Тогда
		Если НЕ ИспользоватьФильтры Тогда
			ИспользоватьФильтры = истина;
			ИспользоватьФильтрыПриИзменении(Неопределено);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

Конечно, я хотел код этих процедур вынести в отдельные процедуры, но увы, в 1С нельзя программно вызывать события элементов, а процедура ИспользоватьФильтрыПриИзменении не экспортируемая. Можно было бы ее сделать экспортируемой в расширениях, но это усложнение для такой простой задачи. Поэтому оставил так и код копирую в каждой из трех форм.

Среда: УТ 11.4.13.46. Объем: 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 4

  1. rzd:

    Я правильно понимаю, что код скопирован в три формы и фактически дважды в каждой (там изменения на один параметр)? Итого 6 раз.
    Это точно способствует сопровождению кода?

    • код скопирован в три места, не знаю где вы шесть насчитали.
      в принципе, можно было сделать расширение не экспортируемой процедуры, тогда можно было бы не копипастить код.
      но я посчитал лишним, читайте об этом написано.

      • rzd:

        Две процедуры практически не отличаются. Их отличие можно было обыграть извлечением метода с параметром. Итого три раза по две процедуры. 3*2=6
        Если логику придётся менять, то это придётся делать в шести местах

        • только вот вероятность смены логики близка к нулю. Поэтому решил не делать процедуру экспортной.

Добавить комментарий для rzd Отменить ответ

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