|
Царьков Валерий |
Как ускорить открытие формы при подборе по каталогу в "1С:Торговля и склад" v.8.6, 8.7
Еще один подход к ускорению: динамическое заполнение списка
Как в списке подбора показать только товары, имеющиеся в наличии
Как ускорить открытие формы при подборе по каталогу в "1С:Торговля и склад" v.8.6, 8.7.
Для подбора номенклатуры по каталогу в "1С:Торговля и склад" v.8.6, 8.7 предусмотрена возможность видеть остатки и цены номенклатуры. Штука, безусловно, хорошая. Только вот в чем проблема. При открытии формы происходит расчет регистров по редактируемый документ, а это процесс небыстрый. Чтобы дать пользователю возможность самому устанавливать расчет делаем так:
1.В процедуре ПриОткрытии() модуля формы строки
Если внКонтекст.ДатаДок<ПолучитьДатуТА() Тогда
ОстТоваров.ВременныйРасчет();
РассчитатьРегистрыПо(внКонтекст.ДатаДок);
КонецЕсли;
нужно вынести в отдельную процедуру.
2.В форму нужно вставить кнопку, по которой эта процедура срабатывает.
Примечание. В ТиС 9.х эта возможность учтена.
Еще один подход к ускорению: динамическое заполнение списка.
Работает это так. При открытии группы сработывает процедура: ЗаполнитьКЭШ(Группа). Она заполняет таблицу значений: ОстаткиТоваров необходимыми данными. При вызове функции: ПолучитьЗначениеКолонки(Колонка) из многострочной части, мо получаем ранее внесенные значения из этой таблицы. Все просто и красиво
А теперь представьте, что Вы работаете в нагруженной сети да с большим (несколько сотен) количеством позиций в группе. Открытие каждой большой группы товаров будет происходить, мягко говоря, медленно (пока заполняется таблица значений). Зато потом перемещение по списку происходит достаточно быстро. Возникает законный вопрос: а как бы список заполнять динамически, т.е. только то, что видим в данный момент на экране?
Для начала закомментируем вызов процедуры: ЗаполнитьКЭШ(Группа).
Далее в функции: ПолучитьЗначениеКолонки(Колонка) меняем
Если ОстаткиТоваров.НайтиЗначение(ТекТовар,Поз,"Элемент")=0 Тогда
// Не нашли. Вернем пустую строку
// Возврат "";
Поз=Добавить(ТекТовар);
КонецЕсли;
Т.е. если не нашли, тогда не возвращаем пустую строку (как было ранее), а добавляем новую при помощи функции: Добавить(ТекТовар);
Осталось превратить процедуру: ЗаполнитьКЭШ(Группа) в функцию: Добавить(ТекТовар). Для этого убираем перебор справочника: добавляем в таблицу значений только текущий товар и значения цены и остатка для него. Возвращает функция номер только что введенной строки. Далее - без изменений. Текст функции в виде текстового файла лежит здесь.
Данный пример нецелесообразно использовать в случае, описанном ниже.
Как в списке подбора показать только товары, имеющиеся в наличии.