Универсальный 1С++ класс Faval для организации часто используемых элементов справочников и быстрого интерактивного доступ к ним

Опубликовал sournk (sournk) в раздел Программирование - Работа с интерфейсом

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

Установка

  1. Требуется зарегистрированная 1C++ и Miracle (если необходимо создавать кнопки на панелях форм справочника).
  2. Универсальная обработка поиска и отбора http://www.1cpp.ru/forum/YaBB.pl?num=1211491690, если есть желаение ее прикрутить ко всем справочникам.
  3. Регистрируем класс Faval в defcls.prm.
  4. Файлы картинок должны лежать в одной папке с классом.

Подключаем нужные справочники

Создаем экземляр класса Faval. Указываем какие справочники нужно мониторить:

Настройки = СоздатьОбъект("УправлениеНастройками"); 

Попытка

Настройки.Включить("ПерехватитьСобытияГК");

oFavalГМ = СоздатьОбъект("Faval");

oFavalГМ.ИмяФайлаPoiskErt = КаталогИБ() + "\ExtForms\Служебные\Poisk.ert"; // Если есть необходимость вынести на панель еще и кнопку быстрого поиска

oFavalГМ.ДобавитьФэйворитДля("Справочник.Номенклатура", 1); //второй параметр указывает на необходимость создания кнопок на панели инструментов формы списка кнопок после ее открытияя

oFavalГМ.ДобавитьФэйворитДля("Справочник.Контрагенты");

oFavalГМ.ДобавитьФэйворитДля("Справочник.ТорговыеТочки");

oFavalГМ.ДобавитьФэйворитДля("Справочник.Отделы");

oFavalГМ.ДобавитьФэйворитДля("Справочник.ТоварныеГруппы");

// Вместо регистрации каждого справочника выборочно можно сделать это для всех справочников конфигурации одним методом вместо пердыдущих строк

// oFavalГМ.ДобавитьФэйворитДляВсехСправочников(Знач аДобавитьКнопкиНаСтандартнуюПанель)

Перехватчик = СоздатьОбъект("Перехватчик");

Перехватчик.ПерехватитьСобытияГлобальногоМодуля(oFavalГМ);

Перехватчик.ВключитьРазбиениеДлинныхСтрокДляМетодаСообщить(); //Ликвидация проблем с длинными строками

Исключение

Перехватчик = "";

Сообщить("Не удалось инициализировать классы Перехватчик и Faval!", "!");

КонецПопытки;

Если в конфигурации уже есть ПерехватитьСобытияГлобальногоМодуля, то можно попробовать пронаследовать ваш класс обработчик от Faval и обеспечить вызов его метода СобытиеГМ_СозданиеКонтекста(), если он перекрыт.

Выбор элемента из часто используемых в форме списка справоника

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

В код формы добавляем:

Перем oFaval;

Процедура ПослеОткрытия()

oFaval = СоздатьОбъект("Faval");

oFaval.СвязатьКнопкуФэйворитСРеквизитом(Контекст, "кнФэйворит",, "oFaval", "[Значение], Артикул:[Значение.Артикул]");

КонецПроцедуры // ПослеОткрытия

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

Выбор элемента из часто используемых в реквизит формы отчета/обработки

Располагаем на форме кнопки с именем кнФНоменклатура и кнФКонтрагент, по нажатию на которые пользователь получит списоки часто используемых элеметов соответвющих справочников Номенклатура и Контрагенты. После выбра из списка произойдет подстановка выбранного в соответсвующий реквизит.

Перем oFaval;

Процедура ПослеОткрытия()

oFaval = СоздатьОбъект("Faval"); 

oFaval.СвязатьКнопкуФэйворитСРеквизитом(Контекст, "кнФНоменклатура", "поНоменклатура", "oFaval");

oFaval.СвязатьКнопкуФэйворитСРеквизитом(Контекст, "кнФКонтрагент", "поКонтрагент", "oFaval");

КонецПроцедуры // ПослеОткрытия

Использование класса напрямую

  1. Поле МаксДлинаСписка. Количество элементов в списке часто используемых для выбора пользователем. 
  2. Метод ВыбратьЗначение(Знач аФэйворитСписокИД, Знач аШаблонСтрВыбораВМеню = ""). Показывает меню с выбором часто используемых элементов справочника переданного в аФэйворитСписокИД. аШаблонСтрВыбораВМеню опеределяет шаблон каждой строки списка. См. выше.

История версий

2012-12-12
+ Возможность добавления кнопки выбора из списка часто используемых на стандартную панель формы списка справочника без
изменения кода формы справочника. Нужна зарегистрированная ВК Miracle.
+ Возможность добавления кнопки открытия обработки универсального поиска (http://www.1cpp.ru/forum/YaBB.pl?num=1211491690)
и отбора на стандартную панель формы списка справочника без изменения кода формы справочника. Нужна зарегистрированная ВК Miracle.
После создания классу нужно указать, где расположен .ert обработка
oFaval.ИмяФайлаPoiskErt = КаталогИБ() + "\ExtForms\Служебные\Poisk.ert";
+ Метод .ДобавитьФэйворитДляВсехСправочников(Знач аДобавитьКнопкиНаСтандартнуюПанель) регистрации всех имеющих справочников.
Параметр оперделяет добавлять ли на панели форм списоков кнопки доступа. Иначе будет только формироваться списки часто
используемых элементов.

 

2012-12-06

+ В меню быстрого выбора вынесен отдельно последний использованный элемент.

2012-12-05

+ Возможность включения и отключения отбора в форме списка справочника по часто используемым элементам.
* Если в списке всего один элемент пользователю все равно предоставляется выбор из меню. Раньше происходил выбор элемента.

Скачать файлы

Наименование Файл Версия Размер
Класс Faval
.ert 53,50Kb
12.12.12
15
.ert 53,50Kb 15 Скачать
Пример внешнего отчета
.ert 49,50Kb
29.12.12
6
.ert 49,50Kb 6 Скачать
Faval.ert.binocular.jpg
.jpg 0,46Kb
12.12.12
0
.jpg 0,46Kb Скачать
Faval.ert.star.jpg
.jpg 0,46Kb
12.12.12
0
.jpg 0,46Kb Скачать

См. также

Добавить вознаграждение
Комментарии
1. Ёпрст (Ёпрст) 1012 28.11.12 10:26 Сейчас в теме
сам список где хоть хранится ?
2. sournk (sournk) 25 28.11.12 10:40 Сейчас в теме
Использую ВосстановитьЗначение() при необходимости показать список и СохранитьЗначение() при каждом его изменении. В классе есть ограничение на его максимальную длину. Сейчас 500 элементов, поэтому не думаю, что будут какие-то тормоза из-за такого.
3. Romarius (Romarius) 12 28.11.12 17:24 Сейчас в теме
Подобный функционал http://infostart.ru/public/104122/
Кстати, очень удобно, когда нужно выбирать тот же элемент несколько раз в документах или отчетах
4. Александр Алюев (alyuev) 198 05.12.12 16:44 Сейчас в теме
Интереснее будет другая реализация.

При выборе значения реквизита запоминать этот выбор. А при следующем выборе реквизита такого же вида делать выбор с нажатой, допустим, Ctrl. И вываливать список из последних, к примеру, 15-и выбранных.
5. sournk (sournk) 25 06.12.12 08:44 Сейчас в теме
Такой сложный выбор последнего будет не очевиден для пользователя. Лучше вставлю в меню выбора еще один отдельный пункт с последним значением этого вида.
6. Александр Алюев (alyuev) 198 06.12.12 15:38 Сейчас в теме
У тебя кнопка "Часто используемая номенклатура". У нас вместо неё маленькая с картинкой 15 и стрелкой вниз. Т.е. типа "Последние 15". Но помимо этого возможно сделать просто выбор элемента с нажатой Ctrl и тогда пользователю показывается этот список. Т.к. это работает через перехватчик - то и нет необходимости лепить везде кнопки "15", хотя, конечно, согласен - первоначально это удобно. Для тех, кто не знает еще про Ctrl.
7. rdv (rdv) 27.12.12 11:22 Сейчас в теме
Объяни почему твой пример не работает, выскакивает сообщение что справочник пуст, да еще и это

oFaval.СлужебныйВыбор = oFaval.ВыбратьЗначение("Справочник.Контрагенты", " "); Если ПустоеЗначение(oFaval.СлужебныйВыбор) = 0 Тогда поКА <<?>>= oFaval.СлужебныйВыбор КонецЕсли;
Ожидается логическое выражение


Сколько раз надо выбрать елемент для того что бы он стал часто выбирающимся
8. sournk (sournk) 25 29.12.12 11:03 Сейчас в теме
(7) Исправил обработку примера. Нельзя давать имена для реквизитов формы служебными словами! Было "поКА", что воспринималось как начало цикла. Неожиданный эффект.

> Сколько раз надо выбрать елемент для того что бы он стал часто выбирающимся
Каждому элементу считается количество раз его выбора. А в списке показывается их TOP. По дефолту 50. Можно изменить через поле класса МаксДлинаСписка.
9. rdv (rdv) 14.01.13 05:11 Сейчас в теме
(8) Что то ты намутил с классом, похоже придется отладчиком воспользоваться, пока кроме что справочник пуст ничего, даже при изменении МаксДлинаСписка (, хотел в фабрику событий встроить, ладно будем ковыряться, если желание не отпадет.

Итак, с вышенаписанным разобрались, теперь попробуем дальше.