ПриАктивацииСтроки() в Динамическом списке. Проблемы.

Часто на форме приходится интерактивно связывать 2 табличных поля. При изменении данных в 1-ом поле, автоматически обновлять данные во втором. С аналогичной задачей я столкнулся когда реализовывал подбор на РМК. При выборе строки в таблице остатков товаров, нужно было отобразить остатки в остальных магазинах сети в отдельной таблице. Вроде как делов на раз  два, да не тут то было.

Наблюдается очень неприятная особенность платформы — событие ПриАктивизацииСтроки()  не вызывается, при поиске в Динамическом списке. То есть при осуществлении поиска, текущая строка меняется программно самой платформой, а события ПриАктивизацииСтроки()  не возникает. Соответственно данные во второй таблице не обновляются.

Решение было найдена не без помощи добрых людей. Помогли на инфостарте.

Итак первым делом нужно на форме, завести реквизит ТекСтрока с типом строка.

Далее при открытии подбора, в момент первичной реализации события ПриАктивизацииСтроки(), мы сохраняем текущую активированную строку в наш созданный реквизит ТекСтрока. Делается это для того, чтоб потом мы могли сравнить изменилась ли фактическая текущая строка с течением времени.

&НаКлиенте
Процедура ОстаткиТоваровПриАктивизацииСтроки(Элемент)
	Если НЕ Элемент.ТекущиеДанные = Неопределено Тогда
		Ном = Элемент.ТекущиеДанные.Номенклатура;
		ТекСтрока = Элементы.ОстаткиТоваров.ТекущиеДанные.Номенклатура;
		ПолучитьОстаткиСети(Ном);
	КонецЕсли;	
КонецПроцедуры

Определяем процедуру которую будем вызывать через обработчик ожидания. У меня процедура будет следующая.

&НаКлиенте
Процедура ОбновитьОстаткиСети()
	
	Если НЕ Элементы.ОстаткиТоваров.ТекущиеДанные = Неопределено Тогда
		Если ТекСтрока <> Строка(Элементы.ОстаткиТоваров.ТекущиеДанные.Номенклатура) Тогда
			Ном = Элементы.ОстаткиТоваров.ТекущиеДанные.Номенклатура;
			ТекСтрока = Элементы.ОстаткиТоваров.ТекущиеДанные.Номенклатура;
			ПолучитьОстаткиСети(Ном);				
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Ну и дальше в событии формы ПриОткрытии() и инициализируем обработчик ожидания ПодключитьОбработчикОжидания.  Отметим, что интервал ожидания события, нужно выставить более 1 секунды, чтоб мы могли ожидать событие многократно. Если интервал будет меньше 1, то событие выполнится однократно.

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
    ПодключитьОбработчикОжидания("ОбновитьОстаткиСети",1,Ложь);
	
КонецПроцедуры

На этом собственно все. При обновлении текущей строки динамического списка и соответственно при смене текущей строки, будет вызываться наша  процедура обновления 2-ой таблицы.

Вам также может понравиться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика