Обновление формы списка или формы подбора номенклатуры в 1С

Для актуального показа остатков в открытых формах списка номенклатуры в 1С толстый клиент. Использование механизма подписки на обработчика ожиданий и работа с журналом регистраций.

Столкнулся с проблемой в 1С: УТП. При  подборе номенклатуры в форме списка или в форме подбора необходимо обновлять форму для показания актуальных остатков при  работе множества пользователей. В поиске по интернету  по этой теме кроме записи в регистр сведений с определенной структурой и подписчика на события не нашел полезного. Вот и пришла идея !!!

Буду краток.

1. В форме  списка или подбора при открытии поставил подписку на событие 

          мдатаначало=текущаядата();
ЭтаФорма.ПодключитьОбработчикОжидания( "обновлениеостатковтаймер" ,3);

 Просто объявите в начале  модуля формы перем мдатаначало;

2. Сам обработчик

процедура  обновлениеостатковтаймер()
тз= новый таблицазначений;
МассивМетаданных = Новый Массив;
МассивМетаданных.Добавить(Метаданные.РегистрыБухгалтерии.Хозрасчетный);
отб=новый структура("ДатаНачала,ДатаОкончания,Метаданные",мдатаначало,текущаядата(),МассивМетаданных);
ВыгрузитьЖурналРегистрации(тз, отб);
если тз.Количество()>0  тогда
///  обновить
Если ЭлементыФормы.Список.ТекущиеДанные <> Неопределено
И НЕ ЭлементыФормы.Список.ТекущиеДанные.ЭтоГруппа Тогда

мСписокПрефиксовЦен = УправлениеЗапасами.ПолучитьСписокПрефиксовВыводимыхСумм(СписокЦенОстатков);
УправлениеЗапасами.ПолучитьДеревоОстатковНоменклатуры(ОстаткиТоваров, ЭлементыФормы.Список.ТекущиеДанные.Ссылка, Истина, СписокЦенОстатков, , мСоответвиекурсовВалют);
//Разворачиваем дерево
Для Каждого СтрокаДереваОстатков Из ОстаткиТоваров.Строки Цикл
ЭлементыФормы.ТабличноеПолеОстаткиТоваров.Развернуть(СтрокаДереваОстатков, Истина);
КонецЦикла;
РаботаСДиалогами.ОбновитьШапкиКолонокОстатков(ЭлементыФормы.ТабличноеПолеОстаткиТоваров, ЭлементыФормы.Список.ТекущиеДанные.ЕдиницаХраненияОстатков);
ПересчитатьВалютыОстатковНоменклатуры();
конецесли;
мКэшОстатков.Очистить();
ЭтаФорма.Обновить();
мдатаначало=текущаядата();
конецесли;

конецпроцедуры

 

Все ценное в обработчике. Это эти строки.   Все станет понятно для программиста.

Работа  происходит  с журналом  регистраций. Делается отбор в данном случае по Метаданные.РегистрыБухгалтерии.Хозрасчетный— изменение по счетам, а значит, происходит  изменение остатков. Вот и все.  Если если тз.Количество()>0  тогда  надо  посылать для открытой формы обновить().  Можно делать отбор по (список большой).  Смотри работу с журналом регистраций.

 

тз= новый таблицазначений;
МассивМетаданных = Новый Массив;
МассивМетаданных.Добавить(Метаданные.РегистрыБухгалтерии.Хозрасчетный);
отб=новый структура("ДатаНачала,ДатаОкончания,Метаданные",мдатаначало,текущаядата(),МассивМетаданных);
ВыгрузитьЖурналРегистрации(тз, отб);
если тз.Количество()>0  тогда

здесь    способ обновление  или пересчета  для списка формы.

конецесли;

 

3. При  закрытии формы отключаем обработчик ожидания.

этаформа.ОтключитьОбработчикОжидания("обновлениеостатковтаймер");

Это  работает на УТП 1С.   Обновляет остатки достаточно быстро в серверном варианте. Главное — понять идею. Прикрутить это можно везде, где  надо обновлять  и показывать актуальные остатки товара!!!! 

Всем удачи!! Дерзайте!! 

3 Comments

  1. PowerBoy

    Я б не связывался с журналом регистрации, медленно, ненадежно — я б тупо контролил итоговую сумму регистра.

    Reply
  2. pilgrim9131

    тоже вариант. ну я думаю все время получать запросом итоговую сумму по регистру не намного быстрее. а тут просто фильтр по журналу и все данные готовы. Тем более их не так уж много во время открытой формы подбора.!!! надо просто тестить… тогда будет понятно!! что быстрее.

    Reply
  3. vse-puchcom

    а просто ф5 не катит? или я не о том подумал?

    Reply

Leave a Comment

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