Автоматизация бизнеса

Установка, настройка, внедрение и сопровождение любых конфигураций на платформе 1С:Предприятие.

Тел: 8(985)141-74-63 Дмитрий.   
ICQ:     552-608-881
e-mail: info@programmist1c.ru

Оплата после выполнения работы.

  •   Удаленный админ
  •   Карта сайта
  •   Контакты


  • Поиск
     

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

    Размещение колонки с остатками в списке справочника
    Автор статьи: acsent | Редакторы: Волшебник, Гений 1С, ZolotarevAA, romix, FlyingOff
    Последняя редакция №16 от 01.08.07 | История


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


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


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


    От Гения 1С: Для ускорения вместо тзОстатки можно использовать Соответствие, оно проиндексировано
    и работает быстрее таблицы значений
    acsent: Соответствие конечно быстрее, но в него надо будет как-то выгружать запрос, а это скорее всего убьет всю прелесть его скорости.
    FlyingOff: а не проще ли использовать выбОстатки = Запрос.Выполнить().Выбрать() и
    выбОстатки.НайтиСледующий(ОформлениеСтроки.ДанныеСтроки.Ссылка,
    "Номенклатура") вместо работы с таблицей значений?


    см. также:

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


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

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


    Вариант 3: Использование обработчика событий (ВК от romix'а)



    Минусы данного варианта:
    1) Требуется ВК (впрочем, для кого-то это плюс)

    Плюсы:
    1) Скорость близка к максимально возможной (т.к. остаток хранится в таблице справочника).
    2) Можно применять и в 7.7 (по ссылке приведен пример для 7.7)
    3) Многие полезные алгоритмы реализуются похожим способом (по ссылке приведены некоторые из них).

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

    Обновление остатка в справочнике происходит после проведения/отмены проведения документа. Если карточка товара в этот момент была заблокирована, также по событию после ее закрытия.
    21.02.18 | 10:31


    30.11.16 | 20:25


    28.11.16 | 09:22


    26.11.16 | 08:19


    22.11.16 | 20:17


    19.11.16 | 10:14


    18.11.16 | 20:09




    Внедрение 1С Автоматизация 1С Доработка 1С Сопровождение 1С Обслуживание 1С Программирование 1С 8 Hастройка 1С Карта сайта Контакты