1с при активизации строки

Часто возникает необходимость вывести связанную информацию для текущего объекта из списка, например, элемента справочника или документа. Это может быть остаток товара на складе, долг контрагента, автор документа, общая сумма и валюта документа и т.д. Рассмотрим, какие существуют способы решения этой задачи в 1С:Предприятии 8.1.

1-й способ. Колонка табличного поля в формы списка, связанная с реквизитом объекта или графой журнала документов. Хотя это простейший способ, но он не всегда применим, потому что связанная информация обычно берется из других объектов (таблиц).

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

3-й способ. Обработчик события «ПриАктивизацииСтроки». Это самый желательный способ, потому что он не сильно нагружает систему дополнительной работой и вполне удовлетворительно справляется с задачей в большинстве случаев. Обычно внизу или вверху формы располагается надпись, в которую выводится дополнительная информация о текущем объекте.

Например, обработчик события ПриАктивизацииСтроки в форме списка справочника Номенклатура:

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

4-й способ. Обработчик события ПриВыводеСтроки.

Событие ПриВыводеСтроки вызывается всякий раз, когда система формирует строки табличного поля. Это происходит при открытии списка, его прокрутке (формируются новые строки), при выборе группы (родителя), при нажатии на кнопку «Обновить текущий список» и т.д. При простой перерисовке формы (например, одна форма была перекрыта другой), данное событие не возникает.

ВНИМАНИЕ. В версии 1С:Предприятия 8 в колонке табличного поля не может располагаться выражение на встроенном языке! Для решения подобных задач можно использовать событие ПриВыводеСтроки .

Следующий пример демонстрирует получение связанной информации по элементам справочника из периодического регистра сведений:

В обработчике события ПриВыводеСтроки не рекомендуется всякий раз обращаться к остаткам регистров, выполнять сложные запросы и другие действия, поскольку это может сильно замедлить работу со списком. По крайней мере надо стремиться минимизировать такие обращения.

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

Кэширование данных средствами встроенного языка

В некоторых случаях для ускорения работы со списком можно организовать кэширование средствами встроенного языка, при котором уже выбранная из базы данных информация сохраняется в памяти (например, в объекте типа «Соответствие» или «ТаблицаЗначений»), а при последуещем формировании строки информация выбирается из импровизированного кэша, а не из базы данных.

Ниже приведен пример кэширования с использованием объекта «Соответствие»:

По мере работы со списком справочника (его прокрутке, при переходах по группам) в соответствие «Статусы» добавляются все новые и новые элементы. Но следует понимать, что информация в кэше может устареть, поэтому нужно иметь способ его периодически обновлять. Конечно, при закрытии окна переменная модуля формы «Статусы» будет уничтожена и кэш полностью очистится. Но более эргономичным решением будет специальная кнопка «Обновить полностью», доступная пользователю, или другой вариант — изменение алгоритма работы стандартной кнопки «Обновить текущий список» . Т.е. вид кнопки будет стандартный, но в алгоритме будет очищаться кэш и затем вызываться метод «Обновить()» текущей формы:

личный блог

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

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

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

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

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

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

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

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

Многократный вызов обработчика «ПриАктивизацииСтроки»

Не рекомендуется в обработчике «ПриАктивизацииСтроки» обращаться на сервер. Если без этого нельзя обойтись, то следует помнить, что если в серверном вызове были изменены свойства элементов, которые влияют на внешний вид формы, то на клиент вернётся новое описание формы, и будет заново вызван обработчик «ПриАктивизацииСтроки».

Если нельзя уйти от вызова сервера, следует использовать следующий типовой приём:

В начале модуля формы:

Изменённый обработчик «ПриАктивизацииСтроки»:

ПредыдущаяСтрока = Элементы . Спр . ТекущаяСтрока ;
ПодключитьОбработчикОжидания ( «ОтборВДеревеДополнительныхПрав» , 0 . 2 , Истина ) ;
КонецПроцедуры

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: