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

Тема в разделе "1C и всё что с ней связано", создана пользователем Sangitam, 15 июл 2011.

  1. Sangitam

    Sangitam Well-Known Member

    Регистрация:
    4 фев 2008
    Сообщения:
    90
    Симпатии:
    0
    Как бы данную вещь убыстрить то.

    путьК= "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.Закрыть();
     
  2. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Вынести запрос из цикла.
    Сделать замер производительности, узнать, что тормозит.
     
  3. alxrie

    alxrie Гость

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

    Sangitam Well-Known Member

    Регистрация:
    4 фев 2008
    Сообщения:
    90
    Симпатии:
    0
    Ага, уже все поубирал, работает быстро и чисто. Спасибо.
     
Загрузка...

Поделиться этой страницей