Книга знаний

1С:Предприятие / Приемы программирования / Формы

Размещение колонки с остатками в списке справочника

Размещение колонки с остатками в списке справочникаАвтор статьи: acsent | Редакторы: Волшебник, Гений 1С, ZolotarevAA, romix, FlyingOff,
Последняя редакция №9 от 08.08.06 | История
URL: http://kb.mista.ru/article.php?id=310

Ключевые слова: Форма, остатки, колонка, справочник, список


Вариант 1: В процедуре ПриПолученииДанных


Перем Запрос;

Процедура ПриОткрытии()

    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    Рег.Номенклатура,
    |    Рег.КоличествоОстаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(
    |        ,
    |        Склад = &Склад
    |            И Номенклатура В (&Номенклатура)) КАК Рег";

КонецПроцедуры

Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)
  Если Элемент.Колонки.Остаток.Видимость Тогда
    МассивНоменклатуры = Новый Массив;
    Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
        Если НЕ ОформлениеСтроки.ДанныеСтроки.ЭтоГруппа Тогда
            МассивНоменклатуры.Добавить(ОформлениеСтроки.ДанныеСтроки.Ссылка);
        КонецЕсли;    
    КонецЦикла;    
    
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("Номенклатура", МассивНоменклатуры);
    тзОстатки = Запрос.Выполнить().Выгрузить();

    Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
        Если НЕ ОформлениеСтроки.ДанныеСтроки.ЭтоГруппа Тогда
            СтрТЗ = тзОстатки.Найти(ОформлениеСтроки.ДанныеСтроки.Ссылка, "Номенклатура");
            Если СтрТЗ <> Неопределено Тогда
                ОформлениеСтроки.Ячейки.Остаток.УстановитьТекст(СтрТЗ.КоличествоОстаток);
            КонецЕсли;    
        КонецЕсли;    
    КонецЦикла;    
  КонецЕсли;
КонецПроцедуры


От Гения 1С: Для ускорения вместо тзОстатки можно использовать Соответствие, оно проиндексировано и работает быстрее таблицы значений
acsent: Соответствие конечно быстрее, но в него надо будет как-то выгружать запрос, а это скорее всего убьет всю прелесть его скорости.
см. также:
Книга знаний: Дополнительная вычисляемая или текстовая колонка в списке

Вариант 2: Кэширование остаток в тз при открытии


Перем тзОстатки;

Процедура ПриОткрытии()

    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    Рег.Номенклатура,
    |    Рег.КоличествоОстаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(
    |        ,
    |        Склад = &Склад) КАК Рег";
        
        тзОстатки = Запрос.Выполнить().Выгрузить();  
КонецПроцедуры

Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)
  Если Элемент.Колонки.Остаток.Видимость Тогда
    Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл
        Если НЕ ОформлениеСтроки.ДанныеСтроки.ЭтоГруппа Тогда
            СтрТЗ = тзОстатки.Найти(ОформлениеСтроки.ДанныеСтроки.Ссылка, "Номенклатура");
            Если СтрТЗ <> Неопределено Тогда
                ОформлениеСтроки.Ячейки.Остаток.УстановитьТекст(СтрТЗ.КоличествоОстаток);
            КонецЕсли;    
        КонецЕсли;    
    КонецЦикла;    
  КонецЕсли;
КонецПроцедуры

Минусы данного варианта:
1) Долгое открывание формы
2) Неоперативные остатки
Плюсы:
1) Более быстрый скролинг (будет еще быстрей, когда в 8.1 появятся индексы для ТЗ)

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика