Имя: Пароль:
1C
1С v8
Переопределение события ОкончаниеВводаТекста() для справочника
,
0 etlau
 
23.05.13
09:22
Возникла потребность переопределить событие ОкончаниеВводаТекста(), убрав из списка удаленные элементы справочника Физлиц

Процедура ОтборФизЛицОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка) Экспорт  //Отбирает физлица с учетом пометки удаления и изменяет список значения для поля ввода
   СтандартнаяОбработка = Ложь;
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("Текст", Текст+"%");
   Запрос.Текст = "ВЫБРАТЬ
                    |    ФизическиеЛица.Ссылка,
                    |  ФизическиеЛица.Наименование,
                    |  ФизическиеЛица.Код
                    |ИЗ
                    |    Справочник.ФизическиеЛица КАК ФизическиеЛица
                    |ГДЕ
                    |  ФизическиеЛица.Наименование ПОДОБНО &Текст
                    |  И НЕ ФизическиеЛица.ПометкаУдаления
                    |Упорядочить ПО
                    |  ФизическиеЛица.Наименование";
   ТЗ = Запрос.Выполнить().Выгрузить();
   Значение = Новый СписокЗначений;    
   Для каждого СтрокаТЗ из ТЗ Цикл
       Значение.Добавить(СтрокаТЗ.Ссылка, СтрокаТЗ.Наименование+" ("+Строка(СтрокаТЗ.Код)+")")
   КонецЦикла
КонецПроцедуры


Для одного элемента формы все работает хорошо. Но мне бы хотелось, чтобы это событие обрабатывалось так для всех полей ввода, которые подвязаны к этому справочнику физлиц, без необходимости у каждого прописывать эту процедуру.
Можно ли как то глобально, для справочника, переопределить это событие?
1 1Сергей
 
23.05.13
09:25
если тонкий клиент, то можно сделать в модуле менеджера справочника
2 Mitriy
 
23.05.13
09:25
ПодключитьОбработчикИзмененияДанных()
3 1Сергей
 
23.05.13
09:26
(1) +

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
   
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    Контрагенты.Ссылка,
                  |    Контрагенты.Наименование + "" ("" + Контрагенты.Код +"")"" КАК Представление
                  |ИЗ
                  |    Справочник.Контрагенты КАК Контрагенты
                  |ГДЕ
                  |    НЕ Контрагенты.ПометкаУдаления
                  |    И Контрагенты.Наименование ПОДОБНО &Подстрока";
   Если НЕ Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.ГруппыИЭлементы Тогда
       Запрос.Текст = Запрос.Текст + "
                  |    И Контрагенты.ЭтоГруппа = &ЭтоГруппа";
       Запрос.УстановитьПараметр("ЭтоГруппа", Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы);
   КонецЕсли;
   Запрос.УстановитьПараметр("Подстрока", Параметры.СтрокаПоиска + "%");
   
   ДанныеВыбора = Новый СписокЗначений;
   
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
       СтрокаЗапроса = Выборка;
       ДанныеВыбора.Добавить(СтрокаЗапроса.Ссылка, СтрокаЗапроса.Представление);
   КонецЦикла;
   
   СтандартнаяОбработка = Ложь;
   
КонецПроцедуры
4 kosts
 
23.05.13
09:30
(0) Правильнее всего навести порядок в справочнике физлиц и удалить помеченных.

В управляемых формах можно перехватить такой выбор для всех.
5 1Сергей
 
23.05.13
09:35
(4) чушь. Если элемент помечен на удаление, это ещё не значит, что его можно удалять
6 Borteg
 
23.05.13
09:45
(0) Параметры выбора указать и все...
7 Borteg
 
23.05.13
09:46
(0) а если для всех то в менеджере справочника
8 kosts
 
23.05.13
09:53
(5) Не фиг тогда помечать. Пометка удаления она для удаления, а не для фантазий на какой либо счет.
9 1Сергей
 
23.05.13
09:56
(8) придумай тогда более красивый способ запретить юзерам указывать определённых физ.лиц в документах?
10 kosts
 
23.05.13
09:58
(9) Подписка перед записью
11 1Сергей
 
23.05.13
09:59
(10) перед записью чего?
12 kosts
 
23.05.13
09:59
(11) Документа
13 1Сергей
 
23.05.13
10:00
(12) всех документов? т.е. старые документы, где данное физлицо уже введено и должно быть там, уже не перезаписать?
14 kosts
 
23.05.13
10:01
(13) Вообще-то в 1С существуют разные конструкции типа "Если".
15 1Сергей
 
23.05.13
10:03
(14) это не "красивое" решение. Проще пометить на удаление и запретить выбирать помеченные. Вообще, меня удивляет, что в 1С не сделали данную опцию
16 kosts
 
23.05.13
10:08
(15) Я бы не сказал не красивое, это нормальное решение, с другой стороны не совсем полное. При записи по любому должен быть контроль. Но желательно дополнить интерфейсными приколюхами. Не верно надеяться, что пользователь не сможет каким-либо способом выбрать не правильный элемент. После обновления что-нить слетит и нашлепают не правильных документов. Подписка же намного надежнее и при обновлении не слетит.