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

Задваивание записей в запросе

Задваивание записей в запросе
Я
   NIGHTHUNTER
 
29.10.20 - 05:38
Первый запрос пакета задваивает данные.
Задача была в выборке, на демо версии, обращений, нарядов по сотрудникам.
Но в первом запросе понадобился некий пересчет, по этому я в него тоже добавил наряд.
Но теперь, если в этом обращении, выбираются 2 наряда, которые привязаны к обращению, то суммы задваиваются (
По логике запроса, можно как то избавиться от этого задвоения, так как в этом ошибка. Тут постановка на ходу вообще ставится.

http://joxi.ru/D2PN6BGHJp04jr

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

СГРУППИРОВАТЬ ПО
    СвойстваДокументов.Документ,
    СвойстваДокументов.Документ.Клиент,
    СвойстваДокументов.Документ.Услуга,
    СвойстваДокументов.Документ.Клиент.Контрагент,
    ПараметыУровняСервиса.ФактическаяДатаЗакрытия,
    СвойстваДокументов.Документ.Ответственный,
    (ВЫРАЗИТЬ(СвойстваДокументов.Значение КАК ЧИСЛО(15, 2))) - НарядРасходы.СуммаФакт * &Коэффициент

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

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

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

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

СГРУППИРОВАТЬ ПО
    ВТ_СвойстваДокументов.ДокументКлиентКонтрагент,
    ВТ_СвойстваДокументов.ДокументУслуга,
    ВТ_СвойстваДокументов.ФактическаяДатаЗакрытия,
    ЕСТЬNULL(ВТ_СвойстваДокументов.СуммаОбращения, 0),
    ЕСТЬNULL(ВТ_СвойстваДокументов.СуммаНаряда, 0),
    ВТ_СвойстваДокументов.Документ,
    ВТ_СвойстваДокументов.Ответственный,
    ВТ_СвойстваДокументов.Пересчет
   NIGHTHUNTER
 
1 - 29.10.20 - 05:57
Получается вопрос в том, как вот в этой части запроса, получать суммы Нарядов привязанных к обращению, для участия в формуле Пересчет ?
я вот связал, но если наряда 2, то уже идет задвоение (((((

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

СГРУППИРОВАТЬ ПО
    СвойстваДокументов.Документ,
    СвойстваДокументов.Документ.Клиент,
    СвойстваДокументов.Документ.Услуга,
    СвойстваДокументов.Документ.Клиент.Контрагент,
    ПараметыУровняСервиса.ФактическаяДатаЗакрытия,
    СвойстваДокументов.Документ.Ответственный,
    (ВЫРАЗИТЬ(СвойстваДокументов.Значение КАК ЧИСЛО(15, 2))) - НарядРасходы.СуммаФакт * &Коэффициент
   NIGHTHUNTER
 
2 - 29.10.20 - 06:08
нужно что бы в запросе (1) в формуле пересчет, учавствовали суммы всех привязанных нарядов
как это лучше и правильнее сделать?
   K1RSAN
 
3 - 29.10.20 - 06:35
Если задвоение - значит некорректно созданы связи или группировки. Возможно какую-то часть запроса имеет смысл вывести во вложенный запрос или в виртуальную таблицу, предшествующую основному запросу, там сделать нужный отбор полей, чтобы задвоения не было. Смотри, какие элементы приводят к задвоению и думай, как их привести к единому знаменателю
   Индиго
 
4 - 29.10.20 - 06:49
если в левой таблице одна запись с уникальным полем, а в правой их две с таким же, то при левом соединении по этому полю в итоге будем иметь две строки вместо одной
   NIGHTHUNTER
 
5 - 29.10.20 - 07:00
(3) Занимаюсь, пробую сосредоточиться и увидеть нужный результат. разбиваю запросы. Жаль не так быстро все это идет. Нужно в голове уложить все.

(4) Разбираюсь .... Пока нет мыслей как правильно сделать.
   NIGHTHUNTER
 
6 - 29.10.20 - 07:03
Так вот во второй части запроса, есть нужный документ и нужная сумма. Но через объединить тут ничего не сделать.
Нужно через виртуальную таблицу наверное.

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

СГРУППИРОВАТЬ ПО
    СвойстваДокументов.Документ,
    СвойстваДокументов.Документ.Клиент,
    СвойстваДокументов.Документ.Услуга,
    СвойстваДокументов.Документ.Клиент.Контрагент,
    ПараметыУровняСервиса.ФактическаяДатаЗакрытия,
    СвойстваДокументов.Документ.Ответственный

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

ВЫБРАТЬ
    НарядРасходы.Ссылка.ГлавныйДокумент,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    НарядРасходы.СуммаФакт
ИЗ
    Документ.Наряд.Расходы КАК НарядРасходы
   NIGHTHUNTER
 
7 - 29.10.20 - 07:42
Подскажите пожалуйста, как в этом примере избавиться от задвоенной суммы ????

http://joxi.ru/KAx0g5NUKMyGLA


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

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

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

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

СГРУППИРОВАТЬ ПО
    СвойстваДокументов.Документ,
    СвойстваДокументов.Документ.Клиент,
    СвойстваДокументов.Документ.Услуга,
    СвойстваДокументов.Документ.Клиент.Контрагент,
    ПараметыУровняСервиса.ФактическаяДатаЗакрытия,
    СвойстваДокументов.Документ.Ответственный
   NIGHTHUNTER
 
8 - 29.10.20 - 07:44
(7) 3000 - задвоенная сумма. Должно быть 1750 . И эта сумма будет множиться столько раз как я понимаю сколько будет нарядов.
Будет 3 наряда, она будет затроена. Как в таком случае избавиться от дублей у документа обращение?

Суть в том что бы в строке получить для пересчета формулой данные по обращению, его сумма, и сумма всех нарядов привязанных к этому обращению .
   K1RSAN
 
9 - 29.10.20 - 07:46
(7) Я в подобных случаях смотрю, что получается при отсутствии группировок. Какое поле создает дубль. А оттуда уже плясать можно
   NIGHTHUNTER
 
10 - 29.10.20 - 07:55
Ну вот, выборка нарядов, суммированных по обращению без дублей. Сейчас нужно как то преципить это к обращениям, что бы обращения не были задвоенны .


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

СГРУППИРОВАТЬ ПО
    НарядРасходы.Ссылка.ГлавныйДокумент
   K1RSAN
 
11 - 29.10.20 - 08:01
(10) А что по данным регистра "Свойства документов"?
И у тебя там в связи с твоей таблицей два раза записано
   NIGHTHUNTER
 
12 - 29.10.20 - 08:08
Вот что то слепил подобное , буду дальше разбираться.
В принципе все понятно. Выборка нарядов с группировкой по главному документу (обращению). И суммой по сумме. Без каких либо других полей.
И потом это привязывается к выборке по обращениям.

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

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

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

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

СГРУППИРОВАТЬ ПО
    СвойстваДокументов.Документ,
    СвойстваДокументов.Документ.Клиент,
    СвойстваДокументов.Документ.Услуга,
    СвойстваДокументов.Документ.Клиент.Контрагент,
    ПараметыУровняСервиса.ФактическаяДатаЗакрытия,
    СвойстваДокументов.Документ.Ответственный,
    ВТ_СуммаПоНарядам.ГлавныйДокумент
   NIGHTHUNTER
 
13 - 29.10.20 - 08:09
(11) по регистру сведений СвойстваДокументов выбираются документы Обращения, у них идентификатор Инцидент

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.