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




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

Установка

  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

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

9 Comments

  1. Ёпрст

    сам список где хоть хранится ?

    Reply ↓
  2. sournk

    Использую ВосстановитьЗначение() при необходимости показать список и СохранитьЗначение() при каждом его изменении. В классе есть ограничение на его максимальную длину. Сейчас 500 элементов, поэтому не думаю, что будут какие-то тормоза из-за такого.

    Reply ↓
  3. Romarius

    Подобный функционал http://infostart.ru/public/104122/

    Кстати, очень удобно, когда нужно выбирать тот же элемент несколько раз в документах или отчетах

    Reply ↓
  4. alyuev

    Интереснее будет другая реализация.

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

    Reply ↓
  5. sournk

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

    Reply ↓
  6. alyuev

    У тебя кнопка «Часто используемая номенклатура». У нас вместо неё маленькая с картинкой 15 и стрелкой вниз. Т.е. типа «Последние 15». Но помимо этого возможно сделать просто выбор элемента с нажатой Ctrl и тогда пользователю показывается этот список. Т.к. это работает через перехватчик — то и нет необходимости лепить везде кнопки «15», хотя, конечно, согласен — первоначально это удобно. Для тех, кто не знает еще про Ctrl.

    Reply ↓
  7. rdv

    Объяни почему твой пример не работает, выскакивает сообщение что справочник пуст, да еще и это

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

    Ожидается логическое выражение

    Сколько раз надо выбрать елемент для того что бы он стал часто выбирающимся

    Reply ↓
  8. sournk

    (7) Исправил обработку примера. Нельзя давать имена для реквизитов формы служебными словами! Было «поКА», что воспринималось как начало цикла. Неожиданный эффект.

    > Сколько раз надо выбрать елемент для того что бы он стал часто выбирающимся

    Каждому элементу считается количество раз его выбора. А в списке показывается их TOP. По дефолту 50. Можно изменить через поле класса МаксДлинаСписка.

    Reply ↓
  9. rdv

    (8) Что то ты намутил с классом, похоже придется отладчиком воспользоваться, пока кроме что справочник пуст ничего, даже при изменении МаксДлинаСписка (, хотел в фабрику событий встроить, ладно будем ковыряться, если желание не отпадет.

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

    Reply ↓

Leave a Comment

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