Каталог решений - Универсальная обработка события ОкончаниеВводаТекста

Универсальная обработка события ОкончаниеВводаТекста

Универсальная обработка события ОкончаниеВводаТекста

В наличии

При вводе по строке выводит в список значения произвольных реквизитов. Функция универсальна для любой конфигурации. Для использования необходимо предлагаемую функцию вставить в общий модуль. Функция вызывается из обработчика элемента формы "ОкончаниеВводаТекста".
Текст функции с примером ее вызова представлен ниже.

Категория:

Описание

Недавно поставила мне бух задачу: Хочу, чтобы когда я вводила расчетный счет контрагента в платежное поручение, отображался в списке для выбора расчетный счет и МФО в скобочках. Другая бухгалтерша захотела, чтобы при вводе статьи затрат та отображалась с хитрой кодировкой в списке значений. И у меня родилась идея написать универсальный обработчик события «ОкончаниеВводаТекста» элемента формы, который бы позволил при вводе по строке выводить в список значения произвольных реквизитов.

Функция универсальна для любой конфигурации.

Для использования необходимо предлагаемую функцию вставить в общий модуль.

Функция вызывается из обработчика элемента формы «ОкончаниеВводаТекста».

 

Пример вызова функции:

 

Процедура СчетКонтрагентаОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)

            СтандартнаяОбработка = Ложь;

            Значение = РаботаСДиалогами.ПолучитьСписокОкончаниеВводаТекста(«БанковскиеСчета»,Текст,«НомерСчета»,«Банк.Код»,,«МФО»,Контрагент);

КонецПроцедуры

 

//==================================

//ПолучитьСписокОкончаниеВводаТекста(_НазваниеСправочника,_Текст,_НазваниеРекв1,_НазваниеРекв2 = «»,_Рекв2ВСкобки = Истина,_ТекстРекв2 = «»,_ВладелецСправочника = «») Экспорт

// _НазваниеСправочника — Строка с названием справочника

// _Текст — Подстрока набираемого текста

// _НазваниеРекв1 — Строка с названием реквизита, который будем показывать в списке значений

// _НазваниеРекв2 — Строка с названием реквизита, который будем показывать в списке значений в скобочках

// _Рекв2ВСкобки — Признак вывода второго реквизита в скобках, булево

//_ТекстРекв2 — В случае необходимости добавляем к значению реквизита в скобочках его имя

// _ ВладелецСправочника – Фильтр по владельцу

// Возвращает список значений; Вызывается из обработчика события «ОкончаниеВводаТекста» элемента формы

Функция ПолучитьСписокОкончаниеВводаТекста(_НазваниеСправочника,_Текст,_НазваниеРекв1,_НазваниеРекв2 = «»,_Рекв2ВСкобки = Истина,_ТекстРекв2 = «»,_ВладелецСправочника = «») Экспорт

            Метадан = Метаданные.Справочники[_НазваниеСправочника];

            ПоляВводПоСтроке = Метадан.ВводПоСтроке;

            КвоСимволов = СтрДлина(СокрЛП(_Текст));

            СписокЗн = Новый СписокЗначений;

            Если ПоляВводПоСтроке.Количество() = 0 ИЛИ КвоСимволов = 0 Тогда

                        Возврат СписокЗн;

            КонецЕсли;

                        Запрос = Новый Запрос;

                        Запрос.УстановитьПараметр(«КвоСимволов»,КвоСимволов);

                        Запрос.УстановитьПараметр(«Текст»,_Текст);

                        Запрос.Текст =  «ВЫБРАТЬ

                        |           Спр.Ссылка,

                |       Спр.»+_НазваниеРекв1+«»;

                        Если _НазваниеРекв2 <> «» Тогда

                                   Запрос.Текст = Запрос.Текст + «,

                                   |           Спр.»+_НазваниеРекв2+«»;

                        КонецЕсли;

                        Запрос.Текст = Запрос.Текст + «

                        |ИЗ

                        |           Справочник.»+_НазваниеСправочника+» КАК Спр

                        |ГДЕ»;

                        Для каждого ТекСтр Из ПоляВводПоСтроке Цикл

                                   Если (ТекСтр.Имя = «Наименование»)

                                               ИЛИ (ТекСтр.Имя = «Код» И Строка(Метадан.ТипКода) = «Строка»)

                                               ИЛИ (ТекСтр.Имя <> «Код» И ТипЗнч(Метадан.Реквизиты[ТекСтр.Имя].Имя) = Тип(«Строка»)) Тогда

                                               Запрос.Текст = Запрос.Текст + «

                                               |  » + ?(ПоляВводПоСтроке.Индекс(ТекСтр) > 0,» ИЛИ «,«(«)+            «ПОДСТРОКА(Спр.» + ТекСтр.Имя + «, 1, &КвоСимволов) = &Текст»

                                               +  ?(ПоляВводПоСтроке.Индекс(ТекСтр) = (ПоляВводПоСтроке.Количество() — 1),«)»,«»);

                                   Иначе

                                               Запрос.Текст = Запрос.Текст + «

                                               |  » + ?(ПоляВводПоСтроке.Индекс(ТекСтр) > 0,» ИЛИ «,«(«)+     «Спр.» + ТекСтр.Имя + » = &Текст»

                                               +  ?(ПоляВводПоСтроке.Индекс(ТекСтр) = (ПоляВводПоСтроке.Количество() — 1),«)»,«»);

                                   КонецЕсли;

                        КонецЦикла;

                        Если Метадан.Иерархический Тогда

                                   Запрос.Текст = Запрос.Текст + «

                                   |           И (НЕ Спр.ЭтоГруппа)»;

                        КонецЕсли;

                        Если _ВладелецСправочника <> «» Тогда

                                   Запрос.УстановитьПараметр(«ВладелецСправочника»,_ВладелецСправочника);

                                   Запрос.Текст = Запрос.Текст + «

                                   |           И Спр.Владелец = &ВладелецСправочника»;

                        КонецЕсли;

                        Запрос.Текст = Запрос.Текст + «

                        |

                        |УПОРЯДОЧИТЬ ПО

                        |           «+_НазваниеРекв1+«»;

                        Если _НазваниеРекв2 <> «» Тогда

                                   Запрос.Текст = Запрос.Текст + «,

                                   |           «+_НазваниеРекв2+«»;

                        КонецЕсли;

                        ЗначениеРекв2 = «»;

                        Выборка = Запрос.Выполнить().Выбрать();

                        Пока Выборка.Следующий() Цикл

                                   ЗначениеСсылка = Выборка.Ссылка;

                                   ЗначениеРекв1  = СокрЛП(Выборка[_НазваниеРекв1]);

                                   Если _НазваниеРекв2 <> «» Тогда

                                               _НазваниеРекв2 = СтрЗаменить(_НазваниеРекв2,«.»,«»);

                                               ЗначениеРекв2 = ?(_Рекв2ВСкобки,» («,?(_ТекстРекв2 <> «»,» «,«»)) + _ТекстРекв2 + » » + СокрЛП(Выборка[_НазваниеРекв2]) + ?(_Рекв2ВСкобки,«)»,«»);

                                   КонецЕсли;

                                   СписокЗн.Добавить(ЗначениеСсылка,ЗначениеРекв1 + ЗначениеРекв2);

                        КонецЦикла;

            Возврат СписокЗн;

КонецФункции //

has been added to your cart:
Оформление заказа