Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 фев 2024, 08:14

1С 8.3. Как можно оптимизировать данный код?

Автор gulnyr, 16 июн 2023, 10:46

0 Пользователей и 1 гость просматривают эту тему.

gulnyr

Код:

Запрос = Новый Запрос ();    

Запрос.Текст = "ВЫБРАТЬ Различные
|ЗаказыПокупателейОстатки.Заказ, //.Номер,
|ЗаказыПокупателейОстатки.Номенклатура,
|ЗаказыПокупателейОстатки.Заказано,
|ОстаткиТоваровКомпанииОстатки.КоличествоОстаток,
|ОстаткиТоваровКомпанииОстатки.РезервОстаток
|ПОМЕСТИТЬ ВТ_ЗаказыПокупателейОстатки     
|ИЗ
|РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателейОстатки
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК ОстаткиТоваровКомпанииОстатки
|ПО ЗаказыПокупателейОстатки.Номенклатура = ОстаткиТоваровКомпанииОстатки.Номенклатура
|ГДЕ
|ЗаказыПокупателейОстатки.Заказано >
|ЕстьNull(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток,0)-ЕстьNull(ОстаткиТоваровКомпанииОстатки.РезервОстаток,0)
|;
|ВЫБРАТЬ
|Максимум(ЗаказыПокупателейОстатки.Заказ.Номер) КАК ЗаказНомер,
|Максимум(ЗаказыПокупателейОстатки.Заказано),
|Максимум(ЕстьNull(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток,0) - ЕстьNull(ОстаткиТоваровКомпанииОстатки.РезервОстаток,0)) Как Остаток
|ИЗ
|РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателейОстатки
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК ОстаткиТоваровКомпанииОстатки
|ПО ЗаказыПокупателейОстатки.Номенклатура = ОстаткиТоваровКомпанииОстатки.Номенклатура
|ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЗаказыПокупателейОстатки
|ПО ЗаказыПокупателейОстатки.Заказ = ВТ_ЗаказыПокупателейОстатки.Заказ
|ГДЕ
|ВТ_ЗаказыПокупателейОстатки.Заказ есть NULL

|ЗаказыПокупателейОстатки.Заказ.ДатаОперации Между &НачалоПериода и &ОкончаниеПериода
|СГРУППИРОВАТЬ ПО ЗаказыПокупателейОстатки.Номенклатура";

Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(ТекущаяДата()));
Запрос.УстановитьПараметр("ОкончаниеПериода", КонецДня(ТекущаяДата()));

    ЗапросВыполнить = Запрос.Выполнить().Выбрать();

   МассивЗаказаПокупателя = Новый Массив();

КоличествоНовыхЗаказов = 0;
НомерСтроки = 1;
Пока ЗапросВыполнить.Следующий() Цикл

    Если МассивЗаказаПокупателя.Найти(ЗапросВыполнить.ЗаказНомер) = Неопределено И ЗапросВыполнить.Заказано<=ЗапросВыполнить.Остаток Тогда
КоличествоНовыхЗаказов = КоличествоНовыхЗаказов+1;
    КонецЕсли;
КонецЦикла;


Если КоличествоНовыхЗаказов>0 Тогда
Сообщить("Есть новые заказы!");
КонецЕсли;

Как можно оптимизировать данный код (чтобы работало быстрее)?

Максим75

gulnyr, так а где заполняется МакссивЗаказаПокупателя? В таком коде все заказы будут новыми.
Можно прямо в запросе отобрать только те заказы, у которых Заказано<=Остаток.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск