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

Публикация № 163880

Программирование - Работа с интерфейсом

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

Установка

  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

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

7

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

Наименование Файл Версия Размер
Класс 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. Ёпрст 1034 28.11.12 10:26 Сейчас в теме
сам список где хоть хранится ?
2. sournk 25 28.11.12 10:40 Сейчас в теме
Использую ВосстановитьЗначение() при необходимости показать список и СохранитьЗначение() при каждом его изменении. В классе есть ограничение на его максимальную длину. Сейчас 500 элементов, поэтому не думаю, что будут какие-то тормоза из-за такого.
3. Romarius 14 28.11.12 17:24 Сейчас в теме
Подобный функционал http://infostart.ru/public/104122/
Кстати, очень удобно, когда нужно выбирать тот же элемент несколько раз в документах или отчетах
4. alyuev 199 05.12.12 16:44 Сейчас в теме
Интереснее будет другая реализация.

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

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


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

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

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