Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Бух. итоги в обратном направлении
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Vofka
Есть запрос по бух. итогам:

Ит.ВыполнитьЗапрос(НаДатуНач, НаДатуКон, "361", "", , 3, 2);


Дальше идут определенные действия, расчеты и:

Ит.ВыбратьПериоды(,,,);
Пока Ит.ПолучитьПериод(,) = 1 Цикл
...
КонецЦикла;


Так вот в этой выборке я получаю операции в порядке от НаДатуНач до НаДатуКон. А мне надо наоборот. Т.е., чтобы операции в цикле перебирались от НаДатуКон до НаДатуНач.

Можно так сделать?
Zaval
Можно в цикле перебирать даты начала периодов от ДатаКон до ДатаНач и указывать их в ПолучитПреиод() вторым параметром.
Vofka
Т.е. так (не могу сейчас проверить):

Ит.ВыполнитьЗапрос(НаДатуНач, НаДатуКон, "361", "", , 3, 2);
...
Ит.ВыбратьПериоды(,,,);
Пока Ит.ПолучитьПериод(,НаДатуКон) = 1 Цикл
...
КонецЦикла;

?
Zaval
Если НаДатуНач и НаДатуКон пред выполнением запроса программно корректируются под целое число периодов(или период - день), то можно так:
Ит.ВыбратьПериоды(,,,);
текПериод = ДобавитьМесяц(НаДатуКон, -1); // начало последнего периода для месяца, для дня: текПериод = текПериод - 1;
Пока текПериод >= НаДатуНач Цикл
    Ит.ПолучитьПреиод(, текПериод);
    ....
    текПериод = ДобавитьМесяц(текПериод, -1); // аналогично

КонецЦикла;


Если же даты как есть - тогда проще будет скопировать результат запроса, свернуть по периодам, отсортировав по убыванию и перебирать в цикле, передавая в Ит.ПолучитьПреиод(). Это будет работать при любом раскладе.
MATEVI
Я бы тоже работал с таблицей значений и ее сортировкой.
Fynjy
А зачем? Как вариант работать с бухитогами черным запросом, там есть обратная сортировка ...
Vofka
Цитата
Если же даты как есть

Да, как есть.

Цитата
передавая в Ит.ПолучитьПреиод()

Передавая что?

MATEVI, примеры приветствуются smile.gif

Fynjy, тоже хотелось бы подробней
Zaval
Если передавать в ПолучитьПериод() вторым параметром дату начала периода, то получишь итоги по этому периоду....
Из копии результата запроса получаешь список периодов в нужном порядке, и....

ЗЫ. В отпуск тебе пора.
Fynjy
Не пинать рисовал быстро конструктором ...
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ОбрабатыватьДокументы все;
    |Дебет = Операция.Дебет.Счет;
    |Счет = Операция.Кредит.Счет;
    |Сумма = Операция.Сумма;
    |Контрагенты = Операция.Субконто.Контрагенты;
    |Функция СуммаСНД = СНД(Сумма);
    |Функция СуммаДО = ДО(Сумма);
    |Функция СуммаКО = КО(Сумма);
    |Функция СуммаСКД = СКД(Сумма);
    |Группировка День;
    |"//}}ЗАПРОС
;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    Пока Запрос.Группировка(1,-1) = 1 Цикл
        // Заполнение полей Документ
        Таб.ВывестиСекцию("Документ");
    КонецЦикла;
Acid
FIFO / LIFO
Ит.ВыполнитьЗапрос(,ДатаДок,СчетТМЦ,,,1,,5);
Если Константа.МетодСписанияТМЦ.Получить(ДатаДок)=Перечисление.МетодСписанияТМЦ.FIFO Тогда
     Ит.ВыбратьСубконто(2);
ИначеЕсли Константа.МетодСписанияТМЦ.Получить(ДатаДок)=Перечисление.МетодСписанияТМЦ.LIFO Тогда
     Ит.ВыбратьСубконто(2,,,,,,1);
КонецЕсли;
Vofka
Спасибо всем кто ответил!
Ещё не пробовал. Попробую, отпишу

Acid, мне надо не в ВыбратьСубконто, а в ПолучитьПериод
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.