Столкнулся с проблемой в 1С: УТП. При подборе номенклатуры в форме списка или в форме подбора необходимо обновлять форму для показания актуальных остатков при работе множества пользователей. В поиске по интернету по этой теме кроме записи в регистр сведений с определенной структурой и подписчика на события не нашел полезного. Вот и пришла идея !!!
Буду краток.
1. В форме списка или подбора при открытии поставил подписку на событие
мдатаначало=текущаядата();
ЭтаФорма.ПодключитьОбработчикОжидания( "обновлениеостатковтаймер" ,3);
Просто объявите в начале модуля формы перем мдатаначало;
2. Сам обработчик
процедура обновлениеостатковтаймер()
тз= новый таблицазначений;
МассивМетаданных = Новый Массив;
МассивМетаданных.Добавить(Метаданные.РегистрыБухгалтерии.Хозрасчетный);
отб=новый структура("ДатаНачала,ДатаОкончания,Метаданные",мдатаначало,текущаядата(),МассивМетаданных);
ВыгрузитьЖурналРегистрации(тз, отб);
если тз.Количество()>0 тогда
/// обновить
Если ЭлементыФормы.Список.ТекущиеДанные <> Неопределено
И НЕ ЭлементыФормы.Список.ТекущиеДанные.ЭтоГруппа Тогда
мСписокПрефиксовЦен = УправлениеЗапасами.ПолучитьСписокПрефиксовВыводимыхСумм(СписокЦенОстатков);
УправлениеЗапасами.ПолучитьДеревоОстатковНоменклатуры(ОстаткиТоваров, ЭлементыФормы.Список.ТекущиеДанные.Ссылка, Истина, СписокЦенОстатков, , мСоответвиекурсовВалют);
//Разворачиваем дерево
Для Каждого СтрокаДереваОстатков Из ОстаткиТоваров.Строки Цикл
ЭлементыФормы.ТабличноеПолеОстаткиТоваров.Развернуть(СтрокаДереваОстатков, Истина);
КонецЦикла;
РаботаСДиалогами.ОбновитьШапкиКолонокОстатков(ЭлементыФормы.ТабличноеПолеОстаткиТоваров, ЭлементыФормы.Список.ТекущиеДанные.ЕдиницаХраненияОстатков);
ПересчитатьВалютыОстатковНоменклатуры();
конецесли;
мКэшОстатков.Очистить();
ЭтаФорма.Обновить();
мдатаначало=текущаядата();
конецесли;
конецпроцедуры
Все ценное в обработчике. Это эти строки. Все станет понятно для программиста.
Работа происходит с журналом регистраций. Делается отбор в данном случае по Метаданные.РегистрыБухгалтерии.Хозрасчетный— изменение по счетам, а значит, происходит изменение остатков. Вот и все. Если если тз.Количество()>0 тогда надо посылать для открытой формы обновить(). Можно делать отбор по (список большой). Смотри работу с журналом регистраций.
тз= новый таблицазначений;
МассивМетаданных = Новый Массив;
МассивМетаданных.Добавить(Метаданные.РегистрыБухгалтерии.Хозрасчетный);
отб=новый структура("ДатаНачала,ДатаОкончания,Метаданные",мдатаначало,текущаядата(),МассивМетаданных);
ВыгрузитьЖурналРегистрации(тз, отб);
если тз.Количество()>0 тогда
здесь способ обновление или пересчета для списка формы.
конецесли;
3. При закрытии формы отключаем обработчик ожидания.
этаформа.ОтключитьОбработчикОжидания("обновлениеостатковтаймер");
Это работает на УТП 1С. Обновляет остатки достаточно быстро в серверном варианте. Главное — понять идею. Прикрутить это можно везде, где надо обновлять и показывать актуальные остатки товара!!!!
Всем удачи!! Дерзайте!!
Я б не связывался с журналом регистрации, медленно, ненадежно — я б тупо контролил итоговую сумму регистра.
тоже вариант. ну я думаю все время получать запросом итоговую сумму по регистру не намного быстрее. а тут просто фильтр по журналу и все данные готовы. Тем более их не так уж много во время открытой формы подбора.!!! надо просто тестить… тогда будет понятно!! что быстрее.
а просто ф5 не катит? или я не о том подумал?