Форум Кладовочки АЛьФ`а

Общие вопросы => 7.7 => Тема начата: Злоп от 13 августа 2025, 23:14

Название: Рег.ОбратныйПорядок(1) - до или после инициализации выборки..?
Отправлено: Злоп от 13 августа 2025, 23:14
Постоянно туплю на этом вопросе.

Вариант1
   РегП = СоздатьОбъект("Регистр.Продажи");
   РегП.ОбратныйПорядок(1);
   РегП.ВыбратьДвиженияДокумента(ВыбДок);
   Пока РегП.ПолучитДвижение() = 1 Цикл

Вариант2
   РегП = СоздатьОбъект("Регистр.Продажи");
   РегП.ВыбратьДвиженияДокумента(ВыбДок);
   РегП.ОбратныйПорядок(1);
   Пока РегП.ПолучитДвижение() = 1 Цикл

Какой вариант правильный?
Название: Re: Рег.ОбратныйПорядок(1) - до или после инициализации выборки..?
Отправлено: vladmenleo от 14 августа 2025, 13:47
Конечно первый. по аналогии с объектом периодический, про который написано Замечание:
Метод используется до вызова метода ВыбратьЗначения. Так и тут
Название: Re: Рег.ОбратныйПорядок(1) - до или после инициализации выборки..?
Отправлено: Харлампий Дымба от 16 августа 2025, 01:53
Свои 5 копеек, просто в копилочку:
Для справочников, документов и периодического - ОбратныйПорядок() меняет только флажок направления, но не влияет на текущее позиционирование. При открытии выборки (в момент вызова .Выбрать...) выборка будет спозиционирована в зависимости от этого флажка - на первый или на последний элемент.
То есть по факту порядок выборки можно развернуть в любой момент перебора, даже после открытия выборки:
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
 Если Спр.Наименование="с этого элемента идём обратно" Тогда
  Спр.ОбратныйПорядок(1);
 КонецЕсли;
КонецЦикла;
Не смог, правда, придумать практического применения этой фишке, ну да ладно.

А вот для регистров так не работает - там установка флажка ОбратныйПорядок() после начала выборки игнорируется.
Это вот, кстати, интересный момент: такие отклонения - обычно маркер какой-то заплатки, исправления в релизе платформы. Ну или того, что подсистему регистров писал прог со своим видением логики работы системы)
Название: Re: Рег.ОбратныйПорядок(1) - до или после инициализации выборки..?
Отправлено: Харлампий Дымба от 16 августа 2025, 12:24
Добавлю, что во всех случаях значение флажка ОбратныйПорядок не сбрасывается после окончания выборки. То есть, если пользоваться единожды созданным объектом для разных целей, то вторая выборка будет идти с учетом установок первой. Тут особенно внимательно надо, если пользуешься глобальной переменной.