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

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

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

В наличии

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

Категория:

Описание

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

Буду краток.

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

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

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

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

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

 

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

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

 

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

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

   конецесли;

 

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

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

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

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

has been added to your cart:
Оформление заказа