Имя: Пароль:
1C
1C 7.7
v7: Прямой запрос, база dbf, остатки на дату
0 Gluk
 
22.02.16
13:39
Использую 1cpp.dll, OLEDBData, провайдер VFPOLEDB, т.к. база DBF

ТекстЗапроса =
"SELECT
|   Рег.Товар as [Номенклатура $Справочник.Номенклатура],
|   SUM(Рег.КоличествоОстаток) as Количество
|FROM
|   (SELECT
|       $Р.Товар AS Товар,
|        $Р.Количество AS КоличествоОстаток
|    FROM
|        $РегистрИтоги.Склад as Р
|    WHERE
|        period = :НаДату~~
|    UNION ALL
|    SELECT
|        $Р2.Товар AS Товар,
|        $Р2.Количество * (1 - Р2.debkred * 2) AS КоличествоОстаток
|    FROM
|        $Регистр.Склад AS Р2
|    ) Рег
|GROUP BY
|    Рег.Товар";
        
Запрос.УстановитьТекстовыйПараметр("НаДату", НаДату);

На дату ТА вроде все правильно получаю, но если указать дату до ТА, какая то ерунда.

ЧЯНДТ?
1 Mikeware
 
22.02.16
13:47
ерунду запрашиваешь - ерунду и получаешь.
Где отбор по периоду для движений?
2 Chieftain
 
22.02.16
14:02
(1)+period в РегистрИтоги равен началу месяца итогов
3 Mikeware
 
22.02.16
14:04
(2) это если итоги помесячные...
4 Mikeware
 
22.02.16
14:04
+(3) они равны дате начала периода итогов
5 Chieftain
 
22.02.16
14:06
(4) Согласен, просто в 99% их именно в месяц и ставят
6 Gluk
 
22.02.16
15:09
Взял пример с сайта, прямые запросы не использовал ранее, надоумте, как правильно сделать
7 Gluk
 
22.02.16
15:16
(1) как называется поле периода в регистре движений?
8 Gluk
 
22.02.16
15:17
(2) как его запрашивать на конец периода?
9 Gluk
 
22.02.16
15:29
киньте пример простого запроса к регистру остатков
10 MishaD
 
22.02.16
15:58
С прямыми сам не работал, разок помнится экспериментировал. Попробуй изменить так.

|    FROM
|        $Регистр.Склад AS Р2
|    WHERE
|        Р2.period < :НаДату~~
11 Gluk
 
22.02.16
16:19
(10) пробовал, говорит:
Произошла одна или несколько ошибок во время обработки команды.
12 ДенисЧ
 
22.02.16
16:21
(9) Ты, главное, никогда не ходи на 1cpp.ru...
А то вдруг там найдёшь ответы на свои вопросы...
13 Gluk
 
23.02.16
12:36
таки разобрался, но поимел ошибку в своем INNER JOIN:
SQL: Queries of this type are not supported.

SELECT
    Рег.Товар as Номенклатура,
    SUM(Рег.КоличествоОстаток) as Количество
FROM
    (SELECT
        $Р.Товар AS Товар,
        $Р.Количество AS КоличествоОстаток
    FROM
        $РегистрИтоги.Склад as Р
    INNER JOIN
        $Справочник.Номенклатура СпрНом ON СпрНом.ID = $Р.Товар
        AND ($СпрНом.Department IN (SELECT VAL FROM :ВрТаблСвойствНоменклатуры3))
    WHERE
        (period = :ПредМесяц~~)  
    UNION ALL
    SELECT
        $Р.Товар AS Товар,
        $Р.Количество * (1 - Р.debkred * 2) AS КоличествоОстаток
    FROM
        $Регистр.Склад AS Р
    INNER JOIN
        1sjourn jr ON Р.iddoc = jr.iddoc
        AND (jr.date >= :НачалоМесяца~~)
        AND ($ФлагРегистра.Склад = 1)
     INNER JOIN
         $Справочник.Номенклатура СпрНом ON СпрНом.ID = $Р.Товар
        AND ($СпрНом.Department IN (SELECT VAL FROM :ВрТаблСвойствНоменклатуры3))
    ) Рег
GROUP BY
    Рег.Товар

В поиске нашел решение заменить AND на WHERE в INNER JOIN, поставил, но получаю ошибку синтаксиса
14 Mikeware
 
23.02.16
12:37
(12) там сейчас страшно.
15 Gluk
 
23.02.16
12:39
(12), (14) нашел там chm, очень помогло
2 + 2 = 3.9999999999999999999999999999999...