Добрый день подскажите в какое событие в УТ 10.3 формы списка нужно вставить код чтоб он срабатывал при установки нового отбора ну или чтоб он не выполнялся каждый раз как ПриПолученииДанных, просто на форме списка сделал поле итоговой суммы и чтоб систему не перегружать заставляя ее каждый раз пересчитывать в какое событие лучше поместить.
По теме из базы знаний
- Описание почти всех событий технологического журнала
- Установка отбора для поля ввода управляемой формы через ПараметрыВыбора (без переопределения событий "НачалоВыбора", "Автоподбор")
- Подсистема обработки событий в 1С
- Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов
- Программная установка отборов в типовых отчетах
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Если итоговая сумма у вас завязана на список с текущим отбором, не понимаю как вы решили получить все строки отфильтрованного списка. Тем не менее, иногда действительно нужно перехватывать изменение Отборов. Решение вижу через процедуру "ПодключитьОбработчикИзмененияДанных".
В этом примере я также использую "ПодключитьОбработчикОжидания" чтобы запретить следующее выполнение моей процедуры на 1 секунду, так как даже незначительное изменение отбора может вызывать обработчик изменения данных несколько раз (он вызывается при каждом изменении свойства элемента отбора, например "Использование", "Значение" или "ВидСравнения").
В этом примере я также использую "ПодключитьОбработчикОжидания" чтобы запретить следующее выполнение моей процедуры на 1 секунду, так как даже незначительное изменение отбора может вызывать обработчик изменения данных несколько раз (он вызывается при каждом изменении свойства элемента отбора, например "Использование", "Значение" или "ВидСравнения").
Перем РазрешитьМоюПроцедуру;
Процедура ПриОткрытии()
РазрешитьМоюПроцедуру = Истина;
ПодключитьОбработчикИзмененияДанных("ДокументСписок.Отбор", "МояПроцедура", Истина);
КонецПроцедуры
Процедура МояПроцедура(ИмяДанных)
Если Не РазрешитьМоюПроцедуру Тогда
Возврат
КонецЕсли;
Сообщить(ИмяДанных);
РазрешитьМоюПроцедуру = Ложь;
ПодключитьОбработчикОжидания("ВключитьМоюПроцедуру", 1, Истина);
КонецПроцедуры
Процедура ВключитьМоюПроцедуру()
РазрешитьМоюПроцедуру = Истина;
КонецПроцедуры
Показать
(2) SlavaKron, Сделал следующим образом может немного коряво но вроде все работает в процедуру при открытии поместил
И потом в модуль формы списка добавил процедуру
Процедура ОбработатьИзменениеОтбора(Элемент)
ПодключитьОбработчикИзмененияДанных("ДокументСписок.Отбор", "ОбработатьИзменениеОтбора", Истина);
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументСписок);
Результат = Построитель.Результат; //отобранные строки типа РезультатЗапроса
ТЗ = Результат.Выгрузить();
ОбщаяСумма=ТЗ.Итог("СуммаДокумента");
ЭтаФорма.СуммаПриб=ОбщаяСумма;
И потом в модуль формы списка добавил процедуру
Процедура ОбработатьИзменениеОтбора(Элемент)
Если ЕстьОтбор Тогда
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументСписок);
Результат = Построитель.Результат; //отобранные строки типа РезультатЗапроса
ТЗ = Результат.Выгрузить();
ОбщаяСумма=ТЗ.Итог("СуммаДокумента");
ЭтаФорма.СуммаПриб=ОбщаяСумма;
Иначе
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументСписок);
Результат = Построитель.Результат; //отобранные строки типа РезультатЗапроса
ТЗ = Результат.Выгрузить();
ОбщаяСумма=ТЗ.Итог("СуммаДокумента");
ЭтаФорма.СуммаПриб=ОбщаяСумма;
КонецЕсли;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот