Имя: Пароль:
1C
 
Задвоенное значение в пакетном запросе
0 NIGHTHUNTER
 
27.11.20
07:50
Подскажите пожалуйста, из за чего может быть задвоение значения в запросе?

В выборке два значения. Два документа. Во втором документе, задвоенное значение СуммаДокумента .


ВЫБРАТЬ
    НарядРасходы.Ссылка.ГлавныйДокумент КАК ГлавныйДокумент,
    СУММА(НарядРасходы.СуммаФакт)       КАК СуммаФакт,
    0                                   КАК СуммаФактЗарплата
ПОМЕСТИТЬ ВТ_СуммаПоНарядам
ИЗ
    Документ.Наряд.Расходы КАК НарядРасходы
ГДЕ
    НарядРасходы.Ссылка.Состояние = &Состояние

СГРУППИРОВАТЬ ПО
    НарядРасходы.Ссылка.ГлавныйДокумент

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    НарядРасходы.Ссылка.ГлавныйДокумент,
    0,
    СУММА(НарядРасходы.СуммаФакт)
ИЗ
    Документ.Наряд.Расходы КАК НарядРасходы
ГДЕ
    НарядРасходы.СтатьяБюджета = &СтатьяБюджета
    И НарядРасходы.Ссылка.Состояние = &Состояние

СГРУППИРОВАТЬ ПО
    НарядРасходы.Ссылка.ГлавныйДокумент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СвойстваДокументов.Документ                                   КАК Документ,
    СвойстваДокументов.Документ.Клиент                            КАК ДокументКлиент,
    СвойстваДокументов.Документ.Услуга                            КАК ДокументУслуга,
    СвойстваДокументов.Документ.Клиент.Контрагент                 КАК ДокументКлиентКонтрагент,
    ПараметыУровняСервиса.ФактическаяДатаЗакрытия                 КАК ФактическаяДатаЗакрытия,
    СвойстваДокументов.Документ.Ответственный                     КАК Ответственный,
    ВТ_СуммаПоНарядам.ГлавныйДокумент                             КАК ГлавныйДокумент,
    СвойстваДокументов.Документ.Состояние                         КАК Состояние,
    СУММА(ВЫРАЗИТЬ(СвойстваДокументов.Значение КАК ЧИСЛО(15, 2))) КАК СуммаОбращения,
    СУММА(ЕСТЬNULL(ВТ_СуммаПоНарядам.СуммаФакт, 0))               КАК СуммаФактПоНарядам,
    СУММА(ЕСТЬNULL(ВТ_СуммаПоНарядам.СуммаФактЗарплата, 0))       КАК СуммаФактПоНарядамЗарплата
//ПОМЕСТИТЬ ВТ_Обращения_СуммаНарядовДляПересчета
ИЗ
    РегистрСведений.СвойстваДокументов КАК СвойстваДокументов
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметыУровняСервиса КАК ПараметыУровняСервиса
        ПО СвойстваДокументов.Документ = ПараметыУровняСервиса.Инцидент
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СуммаПоНарядам КАК ВТ_СуммаПоНарядам
        ПО СвойстваДокументов.Документ = ВТ_СуммаПоНарядам.ГлавныйДокумент
ГДЕ
    СвойстваДокументов.Документ ССЫЛКА Документ.Инцидент
    И НЕ СвойстваДокументов.Документ.Клиент.Контрагент ЕСТЬ NULL
    И СвойстваДокументов.Свойство = &Свойство
    И ПараметыУровняСервиса.ФактическаяДатаЗакрытия МЕЖДУ &НачДата И &КонДата

СГРУППИРОВАТЬ ПО
    СвойстваДокументов.Документ,
    СвойстваДокументов.Документ.Клиент,
    СвойстваДокументов.Документ.Услуга,
    СвойстваДокументов.Документ.Клиент.Контрагент,
    ПараметыУровняСервиса.ФактическаяДатаЗакрытия,
    СвойстваДокументов.Документ.Ответственный,
    ВТ_СуммаПоНарядам.ГлавныйДокумент,
    СвойстваДокументов.Документ.Состояние
1 NIGHTHUNTER
 
27.11.20
07:52
(0+) Задвоенное значение СуммаОбращения , то есть .
2 Галахад
 
гуру
27.11.20
08:00
Ну, сгруппируй таблицу из первого запроса.
3 NIGHTHUNTER
 
27.11.20
08:09
(2) То есть, нужно, предварительно сделать ещё один пакетный запрос, где выбрать сгруппировав, таблицу из первого запроса ?
Что бы передать ее на обработку дальше?
4 NIGHTHUNTER
 
27.11.20
08:18
(2) вот это значение задваивает, в одном документе, почему то ((

  СУММА(ВЫРАЗИТЬ(СвойстваДокументов.Значение КАК ЧИСЛО(15, 2))) КАК СуммаОбращения,
5 NIGHTHUNTER
 
27.11.20
08:18
(2) Правильно ли я все сделал?

ВЫБРАТЬ
    НарядРасходы.Ссылка.ГлавныйДокумент КАК ГлавныйДокумент,
    СУММА(НарядРасходы.СуммаФакт) КАК СуммаФакт,
    0 КАК СуммаФактЗарплата
ПОМЕСТИТЬ ВТ_СуммаПоНарядам
ИЗ
    Документ.Наряд.Расходы КАК НарядРасходы
ГДЕ
    НарядРасходы.Ссылка.Состояние = &Состояние

СГРУППИРОВАТЬ ПО
    НарядРасходы.Ссылка.ГлавныйДокумент

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    НарядРасходы.Ссылка.ГлавныйДокумент,
    0,
    СУММА(НарядРасходы.СуммаФакт)
ИЗ
    Документ.Наряд.Расходы КАК НарядРасходы
ГДЕ
    НарядРасходы.СтатьяБюджета = &СтатьяБюджета
    И НарядРасходы.Ссылка.Состояние = &Состояние

СГРУППИРОВАТЬ ПО
    НарядРасходы.Ссылка.ГлавныйДокумент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_СуммаПоНарядам.ГлавныйДокумент КАК ГлавныйДокумент,
    СУММА(ВТ_СуммаПоНарядам.СуммаФакт) КАК СуммаФакт,
    СУММА(ВТ_СуммаПоНарядам.СуммаФактЗарплата) КАК СуммаФактЗарплата
ПОМЕСТИТЬ ВТ_СуммыПоНарядамСГруппировкой
ИЗ
    ВТ_СуммаПоНарядам КАК ВТ_СуммаПоНарядам

СГРУППИРОВАТЬ ПО
    ВТ_СуммаПоНарядам.ГлавныйДокумент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СвойстваДокументов.Документ КАК Документ,
    СвойстваДокументов.Документ.Клиент КАК ДокументКлиент,
    СвойстваДокументов.Документ.Услуга КАК ДокументУслуга,
    СвойстваДокументов.Документ.Клиент.Контрагент КАК ДокументКлиентКонтрагент,
    ПараметыУровняСервиса.ФактическаяДатаЗакрытия КАК ФактическаяДатаЗакрытия,
    СвойстваДокументов.Документ.Ответственный КАК Ответственный,
    СвойстваДокументов.Документ.Состояние КАК Состояние,
    СУММА(ВЫРАЗИТЬ(СвойстваДокументов.Значение КАК ЧИСЛО(15, 2))) КАК СуммаОбращения,
    СУММА(ЕСТЬNULL(ВТ_СуммыПоНарядамСГруппировкой.СуммаФакт, 0)) КАК СуммаФактПоНарядамСГруппировкой,
    СУММА(ЕСТЬNULL(ВТ_СуммыПоНарядамСГруппировкой.СуммаФактЗарплата, 0)) КАК СуммаФактПоНарядамЗарплатаСГруппировкой
ИЗ
    РегистрСведений.СвойстваДокументов КАК СвойстваДокументов
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметыУровняСервиса КАК ПараметыУровняСервиса
        ПО СвойстваДокументов.Документ = ПараметыУровняСервиса.Инцидент
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СуммыПоНарядамСГруппировкой КАК ВТ_СуммыПоНарядамСГруппировкой
        ПО СвойстваДокументов.Документ = ВТ_СуммыПоНарядамСГруппировкой.ГлавныйДокумент
ГДЕ
    СвойстваДокументов.Документ ССЫЛКА Документ.Инцидент
    И НЕ СвойстваДокументов.Документ.Клиент.Контрагент ЕСТЬ NULL
    И СвойстваДокументов.Свойство = &Свойство
    И ПараметыУровняСервиса.ФактическаяДатаЗакрытия МЕЖДУ &НачДата И &КонДата

СГРУППИРОВАТЬ ПО
    СвойстваДокументов.Документ,
    СвойстваДокументов.Документ.Клиент,
    СвойстваДокументов.Документ.Услуга,
    СвойстваДокументов.Документ.Клиент.Контрагент,
    ПараметыУровняСервиса.ФактическаяДатаЗакрытия,
    СвойстваДокументов.Документ.Ответственный,
    СвойстваДокументов.Документ.Состояние,
    ВТ_СуммыПоНарядамСГруппировкой.ГлавныйДокумент
6 Галахад
 
гуру
27.11.20
08:23
(5) Наверное. Суммы-то норм?
7 NIGHTHUNTER
 
27.11.20
09:01
(6) на тестовом этом примере, вроде как да, буду сейчас продвигаться в решении .
8 Kassern
 
27.11.20
09:11
(7) А что мешает запустить консоль запросов и выполнить запрос по пакетно. Сразу будет видно в каком пакете задваиваются данные.
9 Terl
 
27.11.20
09:55
(0) Задвоение может быть в любой из таблиц, что приводит к задвоению в итоговом результате. Необходимо сделать отдельные запросы к каждой таблице, и добиться везде отсутствия проблем. Это самый быстры путь решения задачи
10 Ёпрст
 
гуру
27.11.20
10:01
(5) нет.
11 Ёпрст
 
гуру
27.11.20
10:03
Нужно обернуть твой юнион в подзапрос и его уже сгруппировать, а не групптровать отдельно запросы в юнионе
12 Галахад
 
гуру
27.11.20
10:07
(11) Так сделал же.
13 Ёпрст
 
гуру
27.11.20
10:13
(12) где?
14 Галахад
 
гуру
27.11.20
10:14
(13) Второй пакет.
15 Ёпрст
 
гуру
27.11.20
10:21
(14) да уж..ты не отличаешь этот запрос

Селект вася фром (селект юнион селект юнион) гроуп бай вася

От такого???

Селект вася фром гроупбай
Юнион
Селект федя фром гроупбай
16 Галахад
 
гуру
27.11.20
10:25
(15) Да вот же:

ВЫБРАТЬ
    ВТ_СуммаПоНарядам.ГлавныйДокумент КАК ГлавныйДокумент,
    СУММА(ВТ_СуммаПоНарядам.СуммаФакт) КАК СуммаФакт,
    СУММА(ВТ_СуммаПоНарядам.СуммаФактЗарплата) КАК СуммаФактЗарплата
ПОМЕСТИТЬ ВТ_СуммыПоНарядамСГруппировкой
ИЗ
    ВТ_СуммаПоНарядам КАК ВТ_СуммаПоНарядам

СГРУППИРОВАТЬ ПО
    ВТ_СуммаПоНарядам.ГлавныйДокумент
17 Ёпрст
 
гуру
27.11.20
10:28
(16) чего куришь то???
Сгруппированные подзапросы в юнионе не равны, сгруппированному запросу снаружи юниона
18 Галахад
 
гуру
27.11.20
10:30
(17) И что? (0) Видимо очень старательный и сгруппировал два раза.
19 Галахад
 
гуру
27.11.20
10:30
(18) + И внутри и снаружи.
20 Ёпрст
 
гуру
27.11.20
10:52
(18)  ну ты тугой..

первый сгруппированный запрос вернул тебе

Вася
  булка 10
  водка 0

второй сгруппированный запрос  вернул тебе
Вася
   булка 0
   водка 10

потом ты делаешь юнион между ними

будет у тебя 2 записи

Вася
  булка 10
  водка 0
Вася
  булка 0
  водка 10

а актору надо одну

Вася
  булка 10
  водка 10


так понятнее, нет ?
21 Ёпрст
 
гуру
27.11.20
11:07
(0)

на вот, занимайся

Выбрать
   Табличка.ГлавныйДокумент,
   Сумма(Табличка.СуммаФакт) как СуммаФакт,
   Сумма(Табличка.СуммаФактЗарплата) как СуммаФактЗарплата
ПОМЕСТИТЬ ВТ_СуммаПоНарядам
ИЗ (
ВЫБРАТЬ
    НарядРасходы.Ссылка.ГлавныйДокумент КАК ГлавныйДокумент,
    НарядРасходы.СуммаФакт       КАК СуммаФакт,
    0                                   КАК СуммаФактЗарплата
ИЗ
    Документ.Наряд.Расходы КАК НарядРасходы
ГДЕ
    НарядРасходы.Ссылка.Состояние = &Состояние


ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    НарядРасходы.Ссылка.ГлавныйДокумент,
    0,
    НарядРасходы.СуммаФакт
ИЗ
    Документ.Наряд.Расходы КАК НарядРасходы
ГДЕ
    НарядРасходы.СтатьяБюджета = &СтатьяБюджета
    И НарядРасходы.Ссылка.Состояние = &Состояние
)как Табличка
СГРУППИРОВАТЬ ПО
    Табличка.ГлавныйДокумент
;
22 Галахад
 
гуру
27.11.20
11:07
(20) Ну ок.

"будет у тебя 2 записи

Вася
  булка 10
  водка 0
Вася
  булка 0
  водка 10

а актору надо одну"

Так вот он их сгруппировал. См. ВТ_СуммыПоНарядамСГруппировкой.
И получил одну.

"Вася
  булка 10
  водка 10"
23 NIGHTHUNTER
 
27.11.20
11:24
(21) То есть, что в (5) выдавать будет не правильный результат ?
В (21)  Верное решение? Я никогда так не делал, когда

ИЗ

выбирали из другого запроса. Видел конечно, но не понимал истинное предназначение этого .
24 Ёпрст
 
гуру
27.11.20
11:38
(22) ёпт..еще одну вт не заметил))
(23) либо так, либо в (5) выкинь группировку там гдде юнион, раз потом груупируешь во второй временной табличке
25 NIGHTHUNTER
 
27.11.20
11:43
(24)  Ну вот получается все в (5) же верно?
Ну да возможно лишняя группировка, но на результат то она не влияет же???!!!!! Просто лишняя. А так, (5) нормально же работает?

А то у меня тут, ничего не пойму с данными, из зачего что не так выводится (
26 Галахад
 
гуру
27.11.20
11:48
(24) Епрст! :)

(25) Ну тебе как-то самому желательно понимать верен твой запрос или нет...
27 NIGHTHUNTER
 
27.11.20
12:51
(26) Это правильно! Но все же я узнаю, правильно или нет можно же сказать.
У меня что то голова отказала (((
28 NIGHTHUNTER
 
27.11.20
12:53
(26) Если там что то лишнее в нем, не суть значимо, если это не влияет на результат.
Например в (0) шло задвоение, (5) это устранило!

Да в (21) тоже интересный прием и подход.
Ошибка? Это не ошибка, это системная функция.