Стартовал новый проект Universal Extensions (UE), который содержит весь текущий функционал, лишен глюков и не требует платы за использование.
ExtEventsFrm: это уникальный комплекс, включающий в себя API для реалиации быстрого поиска и позиционирования по первым символам в динамических списках и доступ к текущей активной форме 1С Предприятия постредством пользовательского меню.
NB: ExtEventsFrm находится в стадии тестирования и отлавливания глюков. Поэтому НЕ РЕКОМЕНДУЕТСЯ пользоваться обработкой да рабочих базах данных, либо на базах, представляющих какую либо ценность. Автор не несет ответственности за последствия использования betta версии ExtEventsFrm.
Разработка осуществляется на основе и по технологи обработки, описаной в статье "v8.2 Управляемые формы: добавляем произвольное пользовательское меню в основное меню 1С без модификации конфигурации." и является ее логическим продолжением.
Почему разработка называется "ExtEventsFrm"?
ExtEventsFrm "генерирует" дополнительные события форм 1С 8.2 и предоставляет возможность их обрабатывать на встроенном языке 1С. В дополнении к этому, ExtEventsFrm предоставляет интерфейс для реализации быстрого поиска в динамичесих списках 1С 8.2.
На данный момент ExtEventsFrm находится в стадии бетта тестирования. Вашему вниманию предлагается триальный вариант ExtEventsFrm.
Для того чтобы, по возможности, сократить потраченное Вами время на ознакомление со статьей, предлагаю посмотреть видео-демонстрацию возможностей системы ExtEventsFrm.
Демонстрация быстрого поиска.
Демонстрация работы расширений
Если Вам понравилось то что Вы увидели, тогда идем дальше.
Техническая информация.
Система ExtEventsFrm - это внешня обработка, которая при желании м/б запущена в качестве парамерта из командной строки запуска 1С Предприятия. Для этого нужно использовать ключ "/Execute" и следом ч/з пробел указать путь к обработке: /Execute "T:\ExtEventsFrm (trial).epf"
Возможность встраивания ExtEventsFrm в конфигурацию для триальной версии не поддерживается, но будет возможна для коммерческой.
Обработка состоит из набора форм и макетов:
Форма "ФормаМеню" - API, которая организует всю работу компоненты.
Форма "Инициализация" - основная форма обработки, в которая подготавливает ВК для работы и передает в API пользовательские настройки.
Форма "МодульПоискаПоПодстроке" - форма, экспортные процедуры которого передаются в качетсве обработчиков для поиска по первым символам.
Формы с префиксами "Расширение_" - формы расширений ExtEventsFrm. Добавлены в качестве демонстрационного примера.
Макет "UserMainMenu1C82" - файл ВК, генерирующей необходимые события и организующей работу окон.
Макет "Печать" - png-файл печати, используемой для примера.
Настройка быстрого поиска
На данный момент в качетве настроек быстрого поиска имеются 2 параметра, которые задаются в форме "Инициализация" обработки
////////////////////////////////////////////////////
// БЛОК ПОЛЬЗОВАТЕЛЬСКИХ НАСТРОЕК.
&НаКлиенте
Функция ПолучитьПользовательскиеНастройки()
Настройки = Новый Структура;
//Задержка при поиске в списках
Настройки.Вставить("ЗадержкаПриПоискеПоПодстрокеВСекундах", 0.3);
// имена форм с обработчиками, в которых будет работать поиск по строке
Настройки.Вставить("НастройкиПодключеняБыстрогоПоиска", Новый Массив);
Настройки.НастройкиПодключеняБыстрогоПоиска.Добавить(
Новый Структура("ИмяФормы, Обработчик",
"Обработка.ПодборТоваровВДокументПродажи.Форма.Форма",
"СпозиционироватьсяВСписке"
)
);
Настройки.НастройкиПодключеняБыстрогоПоиска.Добавить(
Новый Структура("ИмяФормы, Обработчик",
"Справочник.Партнеры.Форма.ФормаСписка",
"СпозиционироватьсяВСписке"
)
);
Возврат Настройки;
КонецФункции
НастройкиПодключеняБыстрогоПоиска - Массив структур, содержащий список форм в которых нужно подключить быстрый поиск и имена обработчиков.
Параметры: ИмяФормы - полный путь к форме, как она задана в конфигураторе, Обработчик - имя экспортной процедуры-обработчика в форме "МодульПоискаПоПодстроке"
Процедура-обработчик должна иметь следующий формат:
&НаКлиенте
Процедура ПроизвольноеИмяПроцедуры(СтрокаПоиска, ЗаголовокТекущейФормы) Экспорт
в качестве владельца формы передается форма, в которой "сработало" событие поиска по подстроке.
ЗадержкаПриПоискеПоПодстрокеВСекундах - задержка в секундах, после которой ExtEventsFrm передаст управление процедуре, указаной в качестве обработчика для этой формы.
В ExtEventsFrm нельзя ничего менять в форме "ФормаМеню", так как любые изменения могут привести к некорректной работе ExtEventsFrm.
"ФормаМеню" всегда "открыта" в системе, полностью ее мы не видим, а видим только определенные ее контролы в определенные моменты. Она отображается в списке форм, но ее нельзя никак закрыть кроме 2-х способов: 1 - через пользовательское меню; 2 - при закрытии 1С форма и вся обработка закрывается автоматически.
Модуль формы "ФормаМеню" обфусцирован при помощи замечательного сервиса https://netlenka1c.ru/Module.
Обфускация применена не столько чтобы скрыть какие-то ноу-хау кода (их там абсолютно нет), сколько чтоб защитить модуль от попрыток поковыряться и тем самым внести какие-нить дополнительные глюки, что в свою очередь может усложнить понимание возникновения оных.
///////////////////////////////////////////////////////////////////////////
// ExtEventsFrm betta (trial version) by MarSeN
// Marchenko Sergey (c) 2013
///////////////////////////////////////////////////////////////////////////
// Данный блок не рекомендуется изменять так как это
// может привести к некорректной работе всего модуля.
//////////////////////////////////////////////////////
&наклиенте
перем o_p,oo_p,o_pp,o_p_p,a,a_,a__,a___,_a,__a,___a,_a_;
&наклиенте
процедура init(_a__)экспорт перем b;~0:b=0;if 0=1 then goto ~3;endif;goto ~8;if 0>=-1 then goto ~4;
endif;goto ~5;~1:;~2:a___=новый массив;goto ~9;~3:b=0;~4:;~5:;~6:a___=новый массив;goto ~9;~7:goto ~2;~8:
if -2>=-2 then goto ~7;endif;goto ~1;~9:;~10:if -1=0 then goto ~26;endif;goto ~20;if 1>=0 then goto ~11;
endif;goto ~13;if 1>-1 then goto ~19;endif;goto ~17;~11:if 1<=0 then goto ~24;endif;goto ~18;~12:;~13:
if b=0 then goto ~15;endif;goto ~25;~14:goto ~16;~15:;~16:_a=новый массив;goto ~27;~17:goto ~10;~18:;
~19:;~20:b=0;if b=1 then goto ~12;endif;goto ~21;~21:goto ~23;~22:;~23:_a=новый массив;goto ~27;~24:;~25:
;~26:b=0;if -1<>0 then goto ~22;endif;goto ~14;~27:;~28:b=1;~29:b=1;if 0<=1 then goto ~33;endif;goto ~31;
~30:_a_=_a__.задержкаприпоискепоподстрокевсекундах;goto ~34;~31:;~32:_a_=_a__.предупреждение;goto ~34;
~33:goto ~30;~34:;~35:b=0;~36:b=1;goto ~37;~37:__a_=_a__.настройкиподключенябыстрогопоиска;goto ~39;~38:
...
...
Организация работы расширений.
Расширения , это дополнения к текущему функционалу, выполненные ввиде отдельных форм с экспортируемым списком команд для интеграции в пользовательское меню и функций для выполнения действий над текущими формами. При выполнении команды расширения, ExtEventsFrm предоставляет функции обработки команды активную/текущую форму в качестве владельца формы. В качестве параметров функция получает "ВходящиеДанные" (переменная хранится в контексте ExtEventsFrm) и заголовок текущего окна. Функция может вернуть произвольное значение которое будет передано при следующем вызове любой другой команды в параметр "ВходящиеДанные".
&НаКлиенте
Функция ПолучитьКоманды() Экспорт
СписокКоманд = Новый Массив;
СписокКоманд.Добавить(Новый Структура("ИмяКоманды,
|Заголовок,
|Действие",
"СкопироватьВБуферОбмена",
"Копировать в буфер",
"СкопироватьВБуферОбмена"
)
);
СписокКоманд.Добавить(Новый Структура("ИмяКоманды,
|Заголовок,
|Действие",
"ВставитьИзБуфераОбмена",
"Вставить из буфера обмена",
"ВставитьИзБуфераОбмена"
)
);
Возврат СписокКоманд;
КонецФункции
&НаКлиенте
Функция СкопироватьВБуферОбмена(ВходящиеДанные, ЗаголовокТекущейФормы) Экспорт
Состояние("Данные скопированы в буфер",,ЗаголовокТекущейФормы);
Возврат ВладелецФормы;
КонецФункции
&НаКлиенте
Функция ВставитьИзБуфераОбмена(ВходящиеДанные, ЗаголовокТекущейФормы) Экспорт
Состояние("Данные вставлены из буфера",,ЗаголовокТекущейФормы);
Приемник = ВладелецФормы;
......
Приемник.Модифицированность = Истина;
Приемник.Активизировать();
Возврат Неопределено;
КонецФункции
NB: модули "расширений" включены в обработку в качестве простых примеров для демонстрации возможности работы с текущим окном и не могут претендавать на законченность решения. Это АБСОЛЮТНО банальные примеры которые можно использовать только в качестве "пищи для размышления" но никак не в практической работе. Для этого их нужно довести до ума.
В заключении хочу поблагодарить:
Abadonna - за техническую информацию по программированию.
v77 - за шаблон Native ВК для Delphi
alexk-is - за разукрашку кода
Нетленка1С.ru - за качественный онлайн обфускатор кода 1С
Чуть не забыл! ExtEventsFrm находится в стадии бетта тестирования. Это обозначает что в ней должны быть глюки. Возможны падения 1С по красной ошибке. Но, как я понимаю, это равносильно выключению света. Ограничение триальной версии - это рекламма ввиде текста, которую вы можете видеть на видео выше и ограниченное количество итераций использования системы. Это оброзначает, что после того как лимит будет исчерпан - ExtEventsFrm автоматически закроет обработку. При этом Вы можете запусить ExtEventsFrm заново.
Вроде все. Не забываем плюсовать, если понравилось.