Информационный поток
Задания вакансии материалы разработки сообщения форума
Рубрики статей и материалов
Яндекс-директ

Приключение с подбором в документ продажи. Управление торговлей 11

  • Добавить свою публикацию
  • для этого требуется регистрация

Проблема

Пользователи пожаловались, что после при работе с подбором в документе "Реализация товаров и услуг" нельзя стирать строку поиска.

Изображение

Нажимая на клавишу Backspace ничего не происходит. Приходится выделять текст и стирать клавишей Delete. Но это еще не самое страшное. Иногда при нажатии на Backspace платформа вылетает с ошибкой:

Изображение

Версия 1С:Предприятия, на которой обнаружено столь странное поведение - 8.3.4.437. Релиз конфигурации "Управление торговлей" - 11.1.5.8.

Решение

Посмотрев информацию на форумах и в списке ошибок платформы на сайте 1С наткнулся на следующую информацию:

 

Технологическая платформа 1С:Предприятия 8. Версия 8.3.4

Известные ошибки версии 8.3.4, планируемые к исправлению в версии 8.3.5

20021516  Клавиша Backspace в поле ввода в управляемой формы

Проблема:
В поле ввода в управляемой форме не работает клавиша Backspace, если клавиша Backspace назначена в качестве акселератора в одной из команд формы.
Дата публикации:
2013-12-18


Ссылка на страницу с информацией.

 

Сразу понял, что это мой случай. В обработке "ПодборТоваровВДокументПродажи" в форме пересмотрел все элементы, но не нашел того, у которого в качестве сочетания клавиш установлена клавиша Backspace. Значит она устанавливается программно. В обработчике формы "ПриСозданииНаСервере" вызывается процедура из общего модуля, в которой и выполняется первоначальная инициализация формы подбора, включая установку сочетания клавиш для элементов:

 &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)	УстановитьУсловноеОформление();
	
	// Пропускаем инициализацию, чтобы гарантировать получение формы 
	// при передаче параметра "АвтоТест".
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	Если Параметры.Документ = Неопределено Тогда
		ВызватьИсключение НСтр("ru='Предусмотрено открытие обработки только из документов.'");
	КонецЕсли;
	
	КодФормы = "Обработка_ПодборТоваровВДокументПродажи_Форма";
	
	// !!! Процедура начальной инициализации формы подбора
	ПодборТоваровСервер.ПриСозданииФормыПодбораНаСервере(ЭтаФорма);
	
КонецПроцедуры

Посмотрев содержимое процедуры и модуля "ПодборТоваровСервер" не нашел установку сочетания клавиш для элементов. Решил посмотреть в других общих модулях, относящихся к подбору и получил результат: в процедуре "ПодборТоваровКлиентСервер.УстановитьТекущиеСтраницыПоВариантуПоиска" идет установка клавиши Backspace в качестве сочетания клавиши:

// Устанавливает значения текущих страниц на формах подборов.
//
// Параметры:
// Форма - УправляемаяФорма - форма списка номенклатуры, форма выбора, форма подбора.
//
Процедура УстановитьТекущиеСтраницыПоВариантуПоиска(Форма) Экспорт
	
	Если ДействующийВариантПоиска(Форма) = "Стандартный" Тогда
		СнятьОтборПоСтрокеПоискаНоменклатуры(Форма);
		Форма.СтрокаПоискаНоменклатура = "";
	КонецЕсли;
	
	Если ЭтоФормаПодбора(Форма) Тогда
		
		Форма.Элементы.СтраницыСписков.ТекущаяСтраница 
			= Форма.Элементы[ИмяТекущейСтраницыПоВариантуПоиска(Форма)];
		
		Если ЭтоФормаПодбораВДокументыЗакупки(Форма) Тогда
			Форма.Элементы.СтраницыСписковНоменклатураПоставщика.ТекущаяСтраница 
			= Форма.Элементы[ИмяТекущейСтраницыНоменклатурыПоставщикаПоВариантуПоиска(Форма)];
		КонецЕсли;
		// !!! Здесь выполняется установка сочетаний клавиш
		НазначитьСочетанияКлавишКомандФормыПоВариантуПоиска(Форма);
		
	Иначе
		
		ИмяСтраницы = ИмяТекущейСтраницыПоВариантуПоиска(Форма);
		Форма.Элементы.СтраницыСписков.ТекущаяСтраница = Форма.Элементы[ИмяСтраницы];
		
	КонецЕсли;
	
КонецПроцедуры 

 Сама процедура "УстановитьТекущиеСтраницыПоВариантуПоиска" вызывается из процедуры начальной инициализации формы подбора "ПриСозданииФормыПодбораНаСервере". Обратимся к непосредственно к процедуре установки сочетания клавиш:

 // Назначает нужные сочетания для клавиш команд формы в зависимости от варианта поиска.
//
// Параметры:
// Форма - УправляемаяФорма - форма списка номенклатуры, форма выбора, форма подбора.
//
Процедура НазначитьСочетанияКлавишКомандФормыПоВариантуПоиска(Форма)
	
	ВариантПоиска = ДействующийВариантПоиска(Форма);
	
	Если ВариантПоиска = "Расширенный" Тогда
		ОсновнаяКоманда = Форма.Элементы.ПерейтиКСпискуНоменклатурыРасширенныйПоиск;
		ДополнительнаяКоманда = Форма.Элементы.ПерейтиКСпискуНоменклатурыСтандартныйПоиск;
	Иначе
		ОсновнаяКоманда = Форма.Элементы.ПерейтиКСпискуНоменклатурыСтандартныйПоиск;
		ДополнительнаяКоманда = Форма.Элементы.ПерейтиКСпискуНоменклатурыРасширенныйПоиск;
	КонецЕсли;
	// !!! Основной команде устанавливается в качестве сочетания клавиш 
	// нажатие Backspace
	ОсновнаяКоманда.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.BackSpace);
	ДополнительнаяКоманда.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.Нет);
	
КонецПроцедуры

 Как мы видим, основной команде устанавливается как раз то сочетание клавиш, которое мы искали. Для решения проблемы закомментируем строку:

// ОсновнаяКоманда.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.BackSpace)

 И проблема решена! Причем решена не только проблема с удалением строки поиска по клавише Backspace, но и вылеты платформы больше не повторялись.

 Вместо заключения

Конечно, можно и не "ковыряться" в конфигурации, а дождаться выхода новой версии платформы 8.3.5, в которой ошибку обещают исправить, но пользователи не ждут. Поэтому в качестве временного решения эти действия выполнить можно.

 
0
Еще от автора
≡ к списку статей