Имя: Пароль:
1C
1C 7.7
v7: 1C ДБФ, драйвер OLE DB неправильно вычисляется разность 2 чисел.
0 Aristo
 
14.07.11
12:25
Проблема яйца выеденного не стоит, но разбираемся час.

SELECT
ТабПотребностей.Материал as [Материал$Справочник.Товары]
,ТабПотребностей.Производитель as [Производитель$Справочник.Клиенты]
,ТабПотребностей.КолВоМатериалаНужно КолВоМатериалаНужно
,ТабМатУПроизв.Количество  КолВоМатериала
,ТабМатУПроизв.Количество - ТабПотребностей.КолВоМатериалаНужно as Излишек
FROM (
SELECT
           $ТоварыВПроизводстве.Производитель Производитель,
                                              $ЭлементыРасходов.Материал as Материал,
           sum($ЭлементыРасходов.Количество*$ТоварыВПроизводстве.Количество) as КолВоМатериалаНужно
--sum($ТоварыВПроизводстве.Количество) as КолВоМатериалаНужно
       FROM
           $РегистрИтоги.ТоварыВПроизводстве AS ТоварыВПроизводстве
       INNER JOIN
           $Справочник.Товары AS СпрТовары ON СпрТовары.Id = $ТоварыВПроизводстве.Товар
       INNER JOIN $Справочник.СпецификацииДляПроизводства AS Спец ON $СпрТовары.Спецификация = Спец.ID
                               INNER JOIN $Справочник.НормыРасходовПроизводства Нормы ON $Нормы.Спецификация = Спец.ID
AND $Нормы.Производитель = $ТоварыВПроизводстве.Производитель
                               INNER JOIN $Справочник.ЭлементыРасходовПроизводства AS ЭлементыРасходов %nolock% ON
       ЭлементыРасходов.ParentExt = Нормы.ID AND ЭлементыРасходов.IsMark <> %ISMARK%
WHERE
               ТоварыВПроизводстве.Period = :ДатаТА~~    AND $ТоварыВПроизводстве.Количество <> 0
Group by 1,2
) ТабПотребностей
LEFT JOIN
(    SELECT
       $МатериалыУПроизводителей.Производитель AS Производитель,
       $МатериалыУПроизводителей.Материал AS Материал,
       SUM($МатериалыУПроизводителей.Количество) AS Количество
       FROM
       $РегистрИтоги.МатериалыУПроизводителей AS МатериалыУПроизводителей
   WHERE
       МатериалыУПроизводителей.Period = :ДатаТА~~
   GROUP BY
       $МатериалыУПроизводителей.Производитель, $МатериалыУПроизводителей.Материал ) ТабМатУПроизв
ON ТабПотребностей.Производитель = ТабМатУПроизв.Производитель AND ТабПотребностей.Материал = ТабМатУПроизв.Материал

ORDER BY 1,2
HAVING (ТабПотребностей.КолВоМатериалаНужно <>0) OR (ТабМатУПроизв.Количество <>0)


В запросе все подзапросы работают верно, КолВоМатериалаНужно и КолВоМатериала рассчитываются верно, но неверно считается их разность.
Например, в выборке КолВоМатериалаНужно = 140, КолВоМатериала = 0, "Излишек" должен быть 140, показывает 0.

Подозреваю что проблема в LEFT JOIN (null вместо 0), но я не знаю как это исправить.
1 smaharbA
 
14.07.11
12:26
case
2 Злопчинский
 
14.07.11
12:27
ISNULL
3 Aristo
 
14.07.11
12:29
(2) подскажи, пожалуйста, как будет выглядеть применение этой функции на ДБФ ???
(1) а подробнее можно ?
4 Aristo
 
14.07.11
12:29
Парни, мне не нужно SQL вариантов решения проблемы :)
5 Ёпрст
 
14.07.11
12:46
IIF(ISNULL(ТабМатУПроизв.Количество),0,ТабМатУПроизв.Количество) - ТабПотребностей.КолВоМатериалаНужно as Излишек
6 Aristo
 
14.07.11
14:27
(5) спасибо, помогло
7 Aristo
 
14.07.11
14:30
(5) а еще вопросик - можно ли в запросе промежуточные итоги по группировке "Материал" получить ?
8 Ёпрст
 
14.07.11
14:32
(7) да всё можно.
Промежуточные итоги, что в твоём понимании ?

Сейчас у тебя - всё на ТА..
9 Aristo
 
14.07.11
14:37
Ну чтобы в таблице по первой группировке  были итоги.
То есть сейчас таблица такая

Материал 1 Произв 1  140  0 - 140
Материал 1 Произв 2  150  30 -120
Материал 2 Произв 1 ....
Материал 2 Произв 2 ....

А нужно как в выгрузке из обычного семерочного запроса
Материал 1 ....      290  30 -260 (итог
Материал 1 Произв 1  140  0 - 140
Материал 1 Произв 2  150  30 -120
Материал 2 (итог)
Материал 2 Произв 1 ....
Материал 2 Произв 2 ....
10 Aristo
 
14.07.11
14:37
10 чтобы потом в цикле не считать
11 Aristo
 
14.07.11
15:33
уп
12 Aristo
 
14.07.11
15:42
как я понимаю, нужен какой нить аналог Rollup
13 VoditelKobyly
 
15.07.11
05:28
(12)
1. Объединить твой запрос с точно таким же, но с группировкой только по материалу.
2. Использовать индексированную таблицу значений и сгруппировать по нужным полям.
14 Aristo
 
15.07.11
10:37
(13) спасибо, пойду по пути 2, наверное.
это я в принципе знал, я думал что у драйвера есть что - то типа rollup из transact - sql
Основная теорема систематики: Новые системы плодят новые проблемы.