vandalsvq писал(а) 29. Декабря 2011 :: 09:44:С бухитогами не так все "просто". Посмотри как реализованы ВТ у меня или у
berezdetsky (собственно я нагло у него слизал почти все
).
Погоди, а как ты снимаешь остатки по регистрам? Там ведь тоже надо использовать то остатки, то остатки + обороты.
С остатками то все просто. Есть простенькая функция, которая анализирует метаданные и автоматом формирует запрос. Если дата не совпадает с началом периода, то имеем запрос вида
SELECT
Зап.Продукция [Продукция :Справочник.Номенклатура]
, Зап.Подразделение [Подразделение :Справочник.Подразделения]
, Зап.Заказ [Заказ :Документ]
, Зап.Владелец [Владелец :Справочник.Контрагенты]
, Зап.Количество [Количество :Число.14.3]
FROM
(SELECT
Рег.Продукция
, Рег.Подразделение
, Рег.Заказ
, Рег.Владелец
, SUM(Рег.Количество) [Количество]
FROM
(SELECT
Итоги.Продукция
, Итоги.Подразделение
, Итоги.Заказ
, Итоги.Владелец
, Итоги.Количество
FROM
[РегистрИтоги.ВыпускПродукции] AS Итоги
WHERE
Итоги.period = '20101201'
UNION ALL
SELECT
Движения.Продукция
, Движения.Подразделение
, Движения.Заказ
, Движения.Владелец
, Движения.Количество * (1 - Движения.debkred * 2) [Количество]
FROM
[Регистр.ВыпускПродукции] AS Движения
INNER JOIN [Журнал] Жур ON Жур.iddoc = Движения.iddoc AND Жур.date BETWEEN '20110101' AND '20110105'
) Рег
GROUP BY Рег.Продукция, Рег.Подразделение, Рег.Заказ, Рег.Владелец
) Зап
WHERE
(Зап.Количество <> 0)
При совпадении же даты (как раз случай свертки) запрос сильно упрощяется, и (что очень радует) заметно ускоряется
SELECT
Зап.Продукция [Продукция :Справочник.Номенклатура]
, Зап.Подразделение [Подразделение :Справочник.Подразделения]
, Зап.Заказ [Заказ :Документ]
, Зап.Владелец [Владелец :Справочник.Контрагенты]
, Зап.Количество [Количество :Число.14.3]
FROM
(SELECT
Рег.Продукция
, Рег.Подразделение
, Рег.Заказ
, Рег.Владелец
, SUM(Рег.Количество) [Количество]
FROM
(SELECT
Итоги.Продукция
, Итоги.Подразделение
, Итоги.Заказ
, Итоги.Владелец
, Итоги.Количество
FROM
[РегистрИтоги.ВыпускПродукции] AS Итоги
WHERE
Итоги.period = '20110101'
) Рег
GROUP BY Рег.Продукция, Рег.Подразделение, Рег.Заказ, Рег.Владелец
) Зап
WHERE
(Зап.Количество <> 0)
Оба варианта запроса выполняются на несколько порядков быстрее штатных.
С периодикой ненамного сложнее... минус только в том, что нельзя получить сразу всю периодику с группировкой по объектам, т.к. коды этих объектов запросом никак не получить... потому приходится отдельно для каждого объекта получать его историю.
Осталось только разобраться с бухитогами.
Скачал класс, попытался вникнуть в эти жутко-запутанные функции и
...
выложи, пожалуйста, готовый запрос к бухитогам, а то я там вообще нифига не понял
Мне нужны итоги по всем счетам в таком виде, который позволил бы их ввести ручными операциями.