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

Хотелось бы услышать одекватный ответ!

Автор sergey123, 02 окт 2012, 19:03

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

sergey123

Интересует ответ на такой ворос: Как выбрать дату последней операции? (бухгалтерия)
Для реализации след. задачи:
На склады приходят материалы. (Д10 - К60). Нужно выбрать дату последнего поступления каждого материала с учетом Склада на который он поступил. (т.е. выборка по "ключам" Материал + МестоХранения.
1-ин и тотже материал может поступать в разные периоды на разные склады, а выводить нужно только последние поступления (а точнее их Даты)

Делаю пока так!
ВыбСч = СчетПоКоду("10");
ВыбКорСч = СчетПоКоду("60");

Запрос = СоздатьОбъект("Запрос");   
    ТекстЗапроса = "
|Период с '01.01.2011' по ВыбКонПериода;
|ОбрабатыватьОперации Все;
|Док = Операция.ТекущийДокумент;
|Сч = Операция.Дебет.Счет;
|КорСч = Операция.Кредит.Счет;
|МХ = Операция.Дебет.МестаХранения;
|НомНомер = Операция.Дебет.Материалы.Код;
|СумСтор = Операция.Сумма;
|Группировка День;
|Группировка МХ упорядочить по МХ.Код;
|Группировка НомНомер;
|Условие (Сч в ВыбСч);
|Условие (КорСч в ВыбКорСч);
|Условие (СумСтор > 0);";

Заполняю в таблицу значений все операции (Д10 - К60) фильтрую по убыванию и беру (через цикл) первые записи (по МХ и НомНомер) соответственно.
Время затраченное на всё это 5 минут. А нужно анализировать с 2005 года, что увеличит время выполнения до 25 минут! Это долго!

Подскажите как можно ещё найти дату последней операции с минимальными временными затратами соответственно? спс!

Было ещё предложение анализировать документы. Материал поступает через док. ПоступлениеМатериала. Но нужно учитывать и операции введённые вручную!  :angry: Просьба не тролить, а только по существу! Спасибо ещё раз!

Herby

Цитата: sergey123 от 02 окт 2012, 19:03
|Группировка День;
|Группировка МХ упорядочить по МХ.Код;
|Группировка НомНомер;

Поменяй местами группировки день и материал, уже сэкономишь время на том, что не будешь по всем дням пробегать

и дальше

Пока Группировка(1) = 1 Цикл
    Пока Группировка(2) = 1 Цикл
        Пока Группировка(3,-1) = 1 Цикл  // выводишь по убыванию, чтобы последний день по товару в этой группировке был первым
            ДатаОперации = Запрос.День;
            прервать; // дальше обход группировки не имеет смысла


        КонецЦикла;
   КонецЦикла;
КонецЦикла;


За большой период может и будет этот запрос выполняться долго, но явно не 25 минут.
а какая БД? SQL? ДБФ возможно и будет. Но в любом случае этот вариант побыстрее


Теги:
Рейтинг@Mail.ru

Поиск