Страница 1 из 3

Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 09:16
hope
Добрый день!

Имеем каталог МЦ ~ 80 тыс наименований.
На складах остатков ~ 8 тыс наименований.
В SaldoMc больше 10 млн записей.
Нужно максимально быстро посчитать сальдо по всем МЦ по конкретному складу.
Какой вариант самый быстрый?
Nalt, Store_Init (в 7.12 есть такая?), доставать данные из SaldoMc? Или еще как-то?
Направьте, плз, по правильному пути!

Спасибо!

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 11:39
n0where
Через SQL естественно быстрее.
Только что вам нужно? Просто увидеть в отчете или пересчитать галактические.

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 12:00
hope
Нужно для отчета "типа оборотки" посчитать сальдо по всем МЦ на выбранном складе.

Если запросом, то как его правильнее организовать? - чтобы быстро работало.
Учет ведется по Склад - МОЛ - МЦ - Партия.
Циклами? :
1. по KatMc
2. по KatPodr
3. по KatMol
4. по KatParty
5. по SaldoMc

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 12:17
RAJAH
hope писал(а):1. по KatMc
2. по KatPodr
3. по KatMol
4. по KatParty
5. по SaldoMc
Судя по индексу SALDOMC04, именно так.
Наверное, имеет смысл прямой SQL использовать, раз вопрос скорости критичен.

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 13:32
hope
Циклами нереально долго получается: пока переберет для каждой из 80 тыс МЦ склад/все МОЛ/все партии и для каждой такой комбинации - отберет все записи сальдо до даты отчета.... в общем, скорость поиска сальдо исчисляется в часах - не подходит.

Пробовала отобрать все записи SaldoMc по нужному складу - тоже не то - начинается экспорт таблицы, который тоже не быстрый....

На прямом SQL можно только готовый запрос выполнить, или циклы по таблицам тоже можно организовать?

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 14:27
RAJAH
hope писал(а):циклы по таблицам тоже можно организовать?
По идее, можно (sqlNavigateMT, к примеру, или SQLFetch). Есть возможность выгрузить результат запроса в локальную таблицу и далее по ней бегать. Но зачем? Для чего эти циклы? Для суммирования, поиска экстремума? Так лучше сразу в запросе использовать GROUP BY, MAX, MIN.

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 14:35
hope
Да, вы правы - надо в запросе собрать сразу все нужные данные, без циклов, надеюсь получится!
Спасибо!

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 14:56
hope
Только вот как сгруппировать? ведь в этой таблице остатки хранятся на дату движения - сгруппировать по дате не получится.
Мне нужно собрать сальдо по МЦ в целом по складу на определенную дату, без разбивки по МОЛ и партии.
Как-то надо отобрать все последние записи сальдо по разрезу Склад/МОЛ/МЦ/Партия и сложить их!!!

Есть какие-нибудь идеи?

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 15:26
Den
hope писал(а):Добрый день!
...
(в 7.12 есть такая?)?
...
в 7,12 вроде не было еще dsql

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 15:38
oiko
Store_Init;
Store_ReInit;
Store_TypeOstatki(TRUE) ; // входящие остатки
Store_SkladProizv(0);
Store_Run(date1,comp(-2),comp(-2),comp(0),comp(0), true, false, false);
Остатки лягут в таблицу tmpsaldo1

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 15:41
hope
Если в 7.12 нет DSQL, буду пробовать Store_ - может быть устроит быстродействие....
Спасибо!

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 15:47
Den
hope писал(а):Если в 7.12 нет DSQL, буду пробовать Store_ - может быть устроит быстродействие....
Спасибо!
Боюсь что нет (

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 15:52
Den
hope, платформа какая ?

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 15:55
hope
MS SQL

Re: Быстро посчитать сальдо по МЦ

Добавлено: 26 апр 2012, 16:21
Den
Ну тогда такие пути :
1. Писать свою dll-шку с вызов функции которая будет обращаться к данным mssql и запихивать их в какую то таблу (создать випом свою таблу для этого например)откуда их потом будите брать в теле vip и обрабатывать нужным образом.
2. добавить свою таблу в словарь, со структурой, которая будет собой представлять нужные параметры для получения данных. Далее вставлять фиктивную запись в нее и в тригере на insert вызывать заранее описанную хранимку MSSQL которая также закачивает данными нужными таблу...Это конечно изврат еще тот - но от безысходности почему бы и нет )
3. Озаботиться вопросом обрезания остатков в БД чтобы поджать табл saldomc