Пользователи пожаловались, что после при работе с подбором в документе "Реализация товаров и услуг" нельзя стирать строку поиска.
Нажимая на клавишу Backspace ничего не происходит. Приходится выделять текст и стирать клавишей Delete. Но это еще не самое страшное. Иногда при нажатии на Backspace платформа вылетает с ошибкой:
Версия 1С:Предприятия, на которой обнаружено столь странное поведение - 8.3.4.437. Релиз конфигурации "Управление торговлей" - 11.1.5.8.
Посмотрев информацию на форумах и в списке ошибок платформы на сайте 1С наткнулся на следующую информацию:
Технологическая платформа 1С:Предприятия 8. Версия 8.3.4
Известные ошибки версии 8.3.4, планируемые к исправлению в версии 8.3.5
Проблема:
В поле ввода в управляемой форме не работает клавиша Backspace, если клавиша Backspace назначена в качестве акселератора в одной из команд формы.
Дата публикации:
2013-12-18
Ссылка на страницу с информацией.
Сразу понял, что это мой случай. В обработке "ПодборТоваровВДокументПродажи" в форме пересмотрел все элементы, но не нашел того, у которого в качестве сочетания клавиш установлена клавиша Backspace. Значит она устанавливается программно. В обработчике формы "ПриСозданииНаСервере" вызывается процедура из общего модуля, в которой и выполняется первоначальная инициализация формы подбора, включая установку сочетания клавиш для элементов:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьУсловноеОформление(); // Пропускаем инициализацию, чтобы гарантировать получение формы // при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; Если Параметры.Документ = Неопределено Тогда ВызватьИсключение НСтр("ru='Предусмотрено открытие обработки только из документов.'"); КонецЕсли; КодФормы = "Обработка_ПодборТоваровВДокументПродажи_Форма"; // !!! Процедура начальной инициализации формы подбора ПодборТоваровСервер.ПриСозданииФормыПодбораНаСервере(ЭтаФорма); КонецПроцедуры
Посмотрев содержимое процедуры и модуля "ПодборТоваровСервер" не нашел установку сочетания клавиш для элементов. Решил посмотреть в других общих модулях, относящихся к подбору и получил результат: в процедуре "ПодборТоваровКлиентСервер.УстановитьТекущиеСтраницыПоВариантуПоиска" идет установка клавиши Backspace в качестве сочетания клавиши:
// Устанавливает значения текущих страниц на формах подборов. // // Параметры: // Форма - УправляемаяФорма - форма списка номенклатуры, форма выбора, форма подбора. // Процедура УстановитьТекущиеСтраницыПоВариантуПоиска(Форма) Экспорт Если ДействующийВариантПоиска(Форма) = "Стандартный" Тогда СнятьОтборПоСтрокеПоискаНоменклатуры(Форма); Форма.СтрокаПоискаНоменклатура = ""; КонецЕсли; Если ЭтоФормаПодбора(Форма) Тогда Форма.Элементы.СтраницыСписков.ТекущаяСтраница = Форма.Элементы[ИмяТекущейСтраницыПоВариантуПоиска(Форма)]; Если ЭтоФормаПодбораВДокументыЗакупки(Форма) Тогда Форма.Элементы.СтраницыСписковНоменклатураПоставщика.ТекущаяСтраница = Форма.Элементы[ИмяТекущейСтраницыНоменклатурыПоставщикаПоВариантуПоиска(Форма)]; КонецЕсли; // !!! Здесь выполняется установка сочетаний клавиш НазначитьСочетанияКлавишКомандФормыПоВариантуПоиска(Форма); Иначе ИмяСтраницы = ИмяТекущейСтраницыПоВариантуПоиска(Форма); Форма.Элементы.СтраницыСписков.ТекущаяСтраница = Форма.Элементы[ИмяСтраницы]; КонецЕсли; КонецПроцедуры
Сама процедура "УстановитьТекущиеСтраницыПоВариантуПоиска" вызывается из процедуры начальной инициализации формы подбора "ПриСозданииФормыПодбораНаСервере". Обратимся к непосредственно к процедуре установки сочетания клавиш:
// Назначает нужные сочетания для клавиш команд формы в зависимости от варианта поиска. // // Параметры: // Форма - УправляемаяФорма - форма списка номенклатуры, форма выбора, форма подбора. // Процедура НазначитьСочетанияКлавишКомандФормыПоВариантуПоиска(Форма) ВариантПоиска = ДействующийВариантПоиска(Форма); Если ВариантПоиска = "Расширенный" Тогда ОсновнаяКоманда = Форма.Элементы.ПерейтиКСпискуНоменклатурыРасширенныйПоиск; ДополнительнаяКоманда = Форма.Элементы.ПерейтиКСпискуНоменклатурыСтандартныйПоиск; Иначе ОсновнаяКоманда = Форма.Элементы.ПерейтиКСпискуНоменклатурыСтандартныйПоиск; ДополнительнаяКоманда = Форма.Элементы.ПерейтиКСпискуНоменклатурыРасширенныйПоиск; КонецЕсли; // !!! Основной команде устанавливается в качестве сочетания клавиш // нажатие Backspace ОсновнаяКоманда.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.BackSpace); ДополнительнаяКоманда.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.Нет); КонецПроцедуры
Как мы видим, основной команде устанавливается как раз то сочетание клавиш, которое мы искали. Для решения проблемы закомментируем строку:
// ОсновнаяКоманда.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.BackSpace)
И проблема решена! Причем решена не только проблема с удалением строки поиска по клавише Backspace, но и вылеты платформы больше не повторялись.
Конечно, можно и не "ковыряться" в конфигурации, а дождаться выхода новой версии платформы 8.3.5, в которой ошибку обещают исправить, но пользователи не ждут. Поэтому в качестве временного решения эти действия выполнить можно.