Как бы побыстрее то....

Sangitam

Well-Known Member
04.02.2008
90
0
#1
Как бы данную вещь убыстрить то.

путьК= "D:\tek\postuplenie.xml";
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.ОткрытьФайл(путьК, "UTF-8");

ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("root");
ЗаписьXML.ЗаписатьНачалоЭлемента("Ожидаемые");

Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий() Цикл
Товар = Выборка.Ссылка;
Код = Выборка.Код;

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

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

ЗаписьXML.ЗаписатьКонецЭлемента(); //Ожидаемые
ЗаписьXML.ЗаписатьКонецЭлемента(); //root
ЗаписьXML.Закрыть();
 

unknown181538

НеГуру
28.12.2008
1 417
0
#2
Вынести запрос из цикла.
Сделать замер производительности, узнать, что тормозит.
 
A

alxrie

Гость
#3
Непонятно, зачем крутится цикл по справочнику Номенклатура - запрос сам выдаст ту номенклатуру, по которой есть заказы, а прочая номенклатура, судя по тексту, не интересна.
 

Sangitam

Well-Known Member
04.02.2008
90
0
#4
Непонятно, зачем крутится цикл по справочнику Номенклатура - запрос сам выдаст ту номенклатуру, по которой есть заказы, а прочая номенклатура, судя по тексту, не интересна.
Ага, уже все поубирал, работает быстро и чисто. Спасибо.