Имя: Пароль:
1C
1С v8
Подскажите как оптимизировать код
, ,
0 Samie_ch
 
09.12.11
07:31
Функция ОстаткиНаСкладе(Номенклатура)Экспорт
   //ВидСклада = Склад.ВидСклада;
   //Если ВидСклада = Перечисления.ВидыСкладов.Оптовый  Тогда
Текст = "ВЫБРАТЬ
   |ТоварыОрганизацийОстатки.КоличествоОстаток КАК Количество
   |ИЗ
   |  РегистрНакопления.ТоварыОрганизаций.Остатки(&Дата, ) КАК ТоварыОрганизацийОстатки    
   |ГДЕ
   |   ТоварыОрганизацийОстатки.Склад = &Склад
   |    И ТоварыОрганизацийОстатки.Номенклатура = &Номенклатура";
//    Иначе Если ВидСклада = Перечисления.ВидыСкладов.Розничный Тогда
//Текст = "ВЫБРАТЬ
   //|ТоварыВРозницеОстатки.КоличествоОстаток КАК Количество
   //|ИЗ
   //|    РегистрНакопления.ТоварыВРознице.Остатки(&Дата, ) КАК ТоварыВРозницеОстатки
   //|ГДЕ
   //|    ТоварыВРозницеОстатки.Склад = &Склад
   //|    И ТоварыВРозницеОстатки.Номенклатура = &Номенклатура";
  //КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = Текст;                      
Запрос.УстановитьПараметр("Дата",Дата);
Запрос.УстановитьПараметр("Склад",Склад);
Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Количество = ?(Выборка.Следующий(),Выборка.Количество,0);
Возврат Количество;

КонецФункции
1 Wobland
 
09.12.11
07:32
параметры запроса - в параметры вирт. таблицы, ВЫБРАТЬ КОЛИЧЕСТВО()
2 Нуф-Нуф
 
09.12.11
07:32
используй параметры виртуальной таблицы
3 ДенисЧ
 
09.12.11
07:32
Внести отборы в параметры виртуальной таблицы
4 Samie_ch
 
09.12.11
07:33
Функция отвечает за показ текущего остатка товара по складу в документе "реализация товаров и услуг". После ее добавления при наборе позиций номенклатуры база стала очень сильно виснуть продолжительность зависаний от 10 сек до 10 минут.
5 Samie_ch
 
09.12.11
07:34
Грешу на то, что номенклатурных позиций насчитывается порядка 10 тысяч.
6 Нуф-Нуф
 
09.12.11
07:35
(5) тебя спасут (1)(2)(3)
7 Wobland
 
09.12.11
07:35
(1) ВЫБРАТЬ КОЛИЧЕСТВО() вычеркните, не так понял вопрос
8 ЧеловекДуши
 
09.12.11
08:05
О_о... автору нужно подсчитать количество элементов :D
И он нечего умного не придумал, как тупо выгрузить все в ТЗ и получить количество....

...ДНК... все же седня пятнично :)
9 Wobland
 
09.12.11
08:16
(8) остатки конкретной номенклатуры на складе ему надо
10 Wobland
 
09.12.11
08:19
кстати, да
Выборка.Следующий()
Возврат Выборка.Количество;
11 Samie_ch
 
09.12.11
08:19
(8)а как по другому можно сделать. Я новичек толком в коде пока не разбираюсь буду признателен если поможете решить проблему.
12 Wobland
 
09.12.11
08:21
и дату со складом в параметры функции засунь
13 unregistered
 
09.12.11
08:24
Не удивлюсь, если эта функция еще и в цикле перебора по строкам табличной части вызывается...
14 unregistered
 
09.12.11
08:29
Функция ОстаткиНаСкладе(Номенклатура)Экспорт
 Текст = "ВЫБРАТЬ
 |ТоварыОрганизацийОстатки.КоличествоОстаток КАК Количество
 |ИЗ
 |  РегистрНакопления.ТоварыОрганизаций.Остатки(&Дата, Склад = &Склад И Номенклатура = &Номенклатура) КАК ТоварыОрганизацийОстатки";
 Запрос = Новый Запрос;
 Запрос.Текст = Текст;                      
 Запрос.УстановитьПараметр("Дата", Дата);
 Запрос.УстановитьПараметр("Склад", Склад);
 Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
 Результат = Запрос.Выполнить();
 Выборка = Результат.Выбрать();
 Возврат ?(Выборка.Следующий(), Выборка.Количество, 0);
КонецФункции
15 Samie_ch
 
09.12.11
10:35
Ребят спасибо большое вроде помогло. Как окончательно протестирую отпишусь.