Вход | Регистрация
 

Задвоенное значение в пакетном запросе

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

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


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

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

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

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

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

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

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

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////

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

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

////////////////////////////////////////////////////////////////////////////////

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

СГРУППИРОВАТЬ ПО
    СвойстваДокументов.Документ,
    СвойстваДокументов.Документ.Клиент,
    СвойстваДокументов.Документ.Услуга,
    СвойстваДокументов.Документ.Клиент.Контрагент,
    ПараметыУровняСервиса.ФактическаяДатаЗакрытия,
    СвойстваДокументов.Документ.Ответственный,
    СвойстваДокументов.Документ.Состояние,
    ВТ_СуммыПоНарядамСГруппировкой.ГлавныйДокумент
   Галахад
 
6 - 27.11.20 - 08:23
(5) Наверное. Суммы-то норм?
   NIGHTHUNTER
 
7 - 27.11.20 - 09:01
(6) на тестовом этом примере, вроде как да, буду сейчас продвигаться в решении .
   Kassern
 
8 - 27.11.20 - 09:11
(7) А что мешает запустить консоль запросов и выполнить запрос по пакетно. Сразу будет видно в каком пакете задваиваются данные.
   Terl
 
9 - 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"
   NIGHTHUNTER
 
23 - 27.11.20 - 11:24
(21) То есть, что в (5) выдавать будет не правильный результат ?
В (21)  Верное решение? Я никогда так не делал, когда

ИЗ

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

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

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

Да в (21) тоже интересный прием и подход.


Список тем форума
 
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.