Имя: Пароль:
1C
1С v8
Ускорение получение остатка в форме регистрации продаж
,
0 ExRq
 
03.10.11
13:32
Добрый день!
Подскажите пожалуйста,
УТ 10.3.
в форму регистрации продаж Чека ККМ, добавил колонку остаток,
в процедуру при выводе строки добавил процедуру получающую остатки на розничном складе (сама процедура получения остатков в моем общем модуле).
Но теперь время после нажатия на кнопку сканирования до появления товара  с остатком в таблице доходит до 6 сек. (иногда быстрее), в зависимости от производительности компьютера.

Как можно ускорить получение остатка, поделитесь опытом?

Процедуру прикладываю:

Функция ПолучитьОстаткиНаРозничномСкладе (Элемент) Экспорт
   
   Номенклатура = Элемент.Номенклатура.Ссылка;
   Характеристика = Элемент.ХарактеристикаНоменклатуры;
   Серия = Элемент.СерияНоменклатуры;
   Склад = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойСклад");

   Запрос = Новый Запрос;
   Запрос.Текст  = "ВЫБРАТЬ
                   |    ТоварыВРозницеОстатки.КоличествоОстаток КАК Остаток
                   |ИЗ
                   |    РегистрНакопления.ТоварыВРознице.Остатки КАК ТоварыВРозницеОстатки
                   |ГДЕ
                   |    ТоварыВРозницеОстатки.Номенклатура = &Номенклатура
                   |    И ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры = &Характеристика
                   |    И ТоварыВРозницеОстатки.Склад = &Склад
                   |    И ТоварыВРозницеОстатки.СерияНоменклатуры = &Серия";
                   
   Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
   Запрос.УстановитьПараметр("Характеристика", Характеристика);
   Запрос.УстановитьПараметр("Серия", Серия);
   Запрос.УстановитьПараметр("Склад", Склад);
   
   Результат = Запрос.Выполнить().Выгрузить();
   Если Результат.Количество() > 0 тогда
       Возврат Результат[0].Остаток;
   Иначе
       Возврат 0;
   КонецЕсли;
   
КонецФункции
1 art_id
 
03.10.11
13:35
используй параметры виртуальной таблицы
2 zbv
 
03.10.11
13:35
в запросе использовать параметры виртуальной таблицы
3 Maxus43
 
03.10.11
13:36
в при выводе строки тоже не кошерно, слишком часто будет повторятся... при получении данных есть возможность использовать?
4 unregistered
 
03.10.11
13:38
Если строк много, то целесообразнее использовать ПриПолученииДанных вместо ПриВыводеСтроки.
5 ExRq
 
03.10.11
13:40
При получении данных можно, но есть момент кассиры любят вбивать штрих код через инсерт (добаляется новая строчка без номенклатуры харктеристики) и ошибка сразу лезет..

Строк не много в чеке до 3 строк, не больше.
6 ExRq
 
03.10.11
13:41
Про виртуальную таблицу сейчас попробую
7 unregistered
 
03.10.11
13:47
(5) >> и ошибка сразу лезет..

Ну это надо учитывать в любом случае. Проверять, что в строке есть данные, для которых запрашивается остаток.

Можно еще сделать вывод данных об остатках опциональным. Типа по умолчанию ни какие остатки не выводятся, но если надо, то кассир жмет кнопку и видит колонку с остатками. Это подойдет, если остатки нужно знать не всегда.
8 ExRq
 
03.10.11
13:49
Точно, Спасибо большое за совет.
9 ExRq
 
03.10.11
14:58
Виртуальные таблицы все исправили, задержки практически нет.
Всем спасибо.
10 Ткачев
 
03.10.11
15:03
(9)Ну а код, код где исправленный ?
11 ExRq
 
03.10.11
16:39
Надеюсь правильно сделал?

Функция ПолучитьОстаткиНаРозничномСкладе (Элемент) Экспорт
   
   Номенклатура = Элемент.Номенклатура.Ссылка;
   Характеристика = Элемент.ХарактеристикаНоменклатуры;
   Серия = Элемент.СерияНоменклатуры;
   Склад = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойСклад");

   Запрос = Новый Запрос;
   Запрос.Текст  = "ВЫБРАТЬ
                   |    ТоварыВРозницеОстатки.КоличествоОстаток КАК Остаток
                   |ИЗ
                   |    РегистрНакопления.ТоварыВРознице.Остатки(
                   |            ,
                   |            Номенклатура = &Номенклатура
                   |                И ХарактеристикаНоменклатуры = &Характеристика
                   |                И СерияНоменклатуры = &Серия
                   |                И Склад = &Склад) КАК ТоварыВРозницеОстатки";
                   
   Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
   Запрос.УстановитьПараметр("Характеристика", Характеристика);
   Запрос.УстановитьПараметр("Серия", Серия);
   Запрос.УстановитьПараметр("Склад", Склад);
   
   Результат = Запрос.Выполнить().Выгрузить();
   Если Результат.Количество() > 0 тогда
       Возврат Результат[0].Остаток;
   Иначе
       Возврат 0;
   КонецЕсли;
   
КонецФункции
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс