![]() |
![]() |
![]() |
|
Задваивание записей в запросе | ☑ | ||
---|---|---|---|---|
0
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), ВТ_СвойстваДокументов.Документ, ВТ_СвойстваДокументов.Ответственный, ВТ_СвойстваДокументов.Пересчет |
|||
1
NIGHTHUNTER
29.10.20
✎
05:57
|
Получается вопрос в том, как вот в этой части запроса, получать суммы Нарядов привязанных к обращению, для участия в формуле Пересчет ?
я вот связал, но если наряда 2, то уже идет задвоение ((((( ВЫБРАТЬ СвойстваДокументов.Документ КАК Документ, СвойстваДокументов.Документ.Клиент КАК ДокументКлиент, СвойстваДокументов.Документ.Услуга КАК ДокументУслуга, СвойстваДокументов.Документ.Клиент.Контрагент КАК ДокументКлиентКонтрагент, СУММА(ВЫРАЗИТЬ(СвойстваДокументов.Значение КАК ЧИСЛО(15, 2))) КАК СуммаОбращения, ПараметыУровняСервиса.ФактическаяДатаЗакрытия КАК ФактическаяДатаЗакрытия, NULL КАК СуммаНаряда, СвойстваДокументов.Документ.Ответственный КАК Ответственный, (ВЫРАЗИТЬ(СвойстваДокументов.Значение КАК ЧИСЛО(15, 2))) - НарядРасходы.СуммаФакт * &Коэффициент КАК Пересчет ПОМЕСТИТЬ ВТ_СвойстваДокументов ИЗ РегистрСведений.СвойстваДокументов КАК СвойстваДокументов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметыУровняСервиса КАК ПараметыУровняСервиса ПО СвойстваДокументов.Документ = ПараметыУровняСервиса.Инцидент ЛЕВОЕ СОЕДИНЕНИЕ Документ.Наряд.Расходы КАК НарядРасходы ПО СвойстваДокументов.Документ = НарядРасходы.Ссылка.ГлавныйДокумент ГДЕ СвойстваДокументов.Документ ССЫЛКА Документ.Инцидент И НЕ СвойстваДокументов.Документ.Клиент.Контрагент ЕСТЬ NULL И СвойстваДокументов.Свойство = &Свойство И ПараметыУровняСервиса.ФактическаяДатаЗакрытия МЕЖДУ &НачДата И &КонДата СГРУППИРОВАТЬ ПО СвойстваДокументов.Документ, СвойстваДокументов.Документ.Клиент, СвойстваДокументов.Документ.Услуга, СвойстваДокументов.Документ.Клиент.Контрагент, ПараметыУровняСервиса.ФактическаяДатаЗакрытия, СвойстваДокументов.Документ.Ответственный, (ВЫРАЗИТЬ(СвойстваДокументов.Значение КАК ЧИСЛО(15, 2))) - НарядРасходы.СуммаФакт * &Коэффициент |
|||
2
NIGHTHUNTER
29.10.20
✎
06:08
|
нужно что бы в запросе (1) в формуле пересчет, учавствовали суммы всех привязанных нарядов
как это лучше и правильнее сделать? |
|||
3
K1RSAN
29.10.20
✎
06:35
|
Если задвоение - значит некорректно созданы связи или группировки. Возможно какую-то часть запроса имеет смысл вывести во вложенный запрос или в виртуальную таблицу, предшествующую основному запросу, там сделать нужный отбор полей, чтобы задвоения не было. Смотри, какие элементы приводят к задвоению и думай, как их привести к единому знаменателю
|
|||
4
Индиго
29.10.20
✎
06:49
|
если в левой таблице одна запись с уникальным полем, а в правой их две с таким же, то при левом соединении по этому полю в итоге будем иметь две строки вместо одной
|
|||
5
NIGHTHUNTER
29.10.20
✎
07:00
|
(3) Занимаюсь, пробую сосредоточиться и увидеть нужный результат. разбиваю запросы. Жаль не так быстро все это идет. Нужно в голове уложить все.
(4) Разбираюсь .... Пока нет мыслей как правильно сделать. |
|||
6
NIGHTHUNTER
29.10.20
✎
07:03
|
Так вот во второй части запроса, есть нужный документ и нужная сумма. Но через объединить тут ничего не сделать.
Нужно через виртуальную таблицу наверное. ВЫБРАТЬ СвойстваДокументов.Документ КАК Документ, СвойстваДокументов.Документ.Клиент КАК ДокументКлиент, СвойстваДокументов.Документ.Услуга КАК ДокументУслуга, СвойстваДокументов.Документ.Клиент.Контрагент КАК ДокументКлиентКонтрагент, СУММА(ВЫРАЗИТЬ(СвойстваДокументов.Значение КАК ЧИСЛО(15, 2))) КАК СуммаОбращения, ПараметыУровняСервиса.ФактическаяДатаЗакрытия КАК ФактическаяДатаЗакрытия, NULL КАК СуммаНаряда, СвойстваДокументов.Документ.Ответственный КАК Ответственный, NULL КАК СуммаФакт ИЗ РегистрСведений.СвойстваДокументов КАК СвойстваДокументов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметыУровняСервиса КАК ПараметыУровняСервиса ПО СвойстваДокументов.Документ = ПараметыУровняСервиса.Инцидент ГДЕ СвойстваДокументов.Документ ССЫЛКА Документ.Инцидент И НЕ СвойстваДокументов.Документ.Клиент.Контрагент ЕСТЬ NULL И СвойстваДокументов.Свойство = &Свойство И ПараметыУровняСервиса.ФактическаяДатаЗакрытия МЕЖДУ &НачДата И &КонДата СГРУППИРОВАТЬ ПО СвойстваДокументов.Документ, СвойстваДокументов.Документ.Клиент, СвойстваДокументов.Документ.Услуга, СвойстваДокументов.Документ.Клиент.Контрагент, ПараметыУровняСервиса.ФактическаяДатаЗакрытия, СвойстваДокументов.Документ.Ответственный ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НарядРасходы.Ссылка.ГлавныйДокумент, 0, 0, 0, 0, 0, 0, 0, НарядРасходы.СуммаФакт ИЗ Документ.Наряд.Расходы КАК НарядРасходы |
|||
7
NIGHTHUNTER
29.10.20
✎
07:42
|
Подскажите пожалуйста, как в этом примере избавиться от задвоенной суммы ????
http://joxi.ru/KAx0g5NUKMyGLA ВЫБРАТЬ НарядРасходы.Ссылка.ГлавныйДокумент КАК ГлавныйДокумент, НарядРасходы.Ссылка.Ответственный КАК Ответственный, СУММА(НарядРасходы.СуммаФакт) КАК СуммаФакт ПОМЕСТИТЬ ВТ_НарядыПООбращениям ИЗ Документ.Наряд.Расходы КАК НарядРасходы СГРУППИРОВАТЬ ПО НарядРасходы.Ссылка.ГлавныйДокумент, НарядРасходы.Ссылка.Ответственный ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СвойстваДокументов.Документ КАК Документ, СвойстваДокументов.Документ.Клиент КАК ДокументКлиент, СвойстваДокументов.Документ.Услуга КАК ДокументУслуга, СвойстваДокументов.Документ.Клиент.Контрагент КАК ДокументКлиентКонтрагент, СУММА(ВЫРАЗИТЬ(СвойстваДокументов.Значение КАК ЧИСЛО(15, 2))) КАК СуммаОбращения, ПараметыУровняСервиса.ФактическаяДатаЗакрытия КАК ФактическаяДатаЗакрытия, СвойстваДокументов.Документ.Ответственный КАК Ответственный, СУММА(ВТ_НарядыПООбращениям.СуммаФакт) КАК СуммаФакт ИЗ РегистрСведений.СвойстваДокументов КАК СвойстваДокументов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметыУровняСервиса КАК ПараметыУровняСервиса ПО СвойстваДокументов.Документ = ПараметыУровняСервиса.Инцидент ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НарядыПООбращениям КАК ВТ_НарядыПООбращениям ПО СвойстваДокументов.Документ = ВТ_НарядыПООбращениям.ГлавныйДокумент И СвойстваДокументов.Документ = ВТ_НарядыПООбращениям.ГлавныйДокумент ГДЕ СвойстваДокументов.Документ ССЫЛКА Документ.Инцидент И НЕ СвойстваДокументов.Документ.Клиент.Контрагент ЕСТЬ NULL И СвойстваДокументов.Свойство = &Свойство И ПараметыУровняСервиса.ФактическаяДатаЗакрытия МЕЖДУ &НачДата И &КонДата СГРУППИРОВАТЬ ПО СвойстваДокументов.Документ, СвойстваДокументов.Документ.Клиент, СвойстваДокументов.Документ.Услуга, СвойстваДокументов.Документ.Клиент.Контрагент, ПараметыУровняСервиса.ФактическаяДатаЗакрытия, СвойстваДокументов.Документ.Ответственный |
|||
8
NIGHTHUNTER
29.10.20
✎
07:44
|
(7) 3000 - задвоенная сумма. Должно быть 1750 . И эта сумма будет множиться столько раз как я понимаю сколько будет нарядов.
Будет 3 наряда, она будет затроена. Как в таком случае избавиться от дублей у документа обращение? Суть в том что бы в строке получить для пересчета формулой данные по обращению, его сумма, и сумма всех нарядов привязанных к этому обращению . |
|||
9
K1RSAN
29.10.20
✎
07:46
|
(7) Я в подобных случаях смотрю, что получается при отсутствии группировок. Какое поле создает дубль. А оттуда уже плясать можно
|
|||
10
NIGHTHUNTER
29.10.20
✎
07:55
|
Ну вот, выборка нарядов, суммированных по обращению без дублей. Сейчас нужно как то преципить это к обращениям, что бы обращения не были задвоенны .
ВЫБРАТЬ НарядРасходы.Ссылка.ГлавныйДокумент КАК ГлавныйДокумент, СУММА(НарядРасходы.СуммаФакт) КАК СуммаФакт ИЗ Документ.Наряд.Расходы КАК НарядРасходы СГРУППИРОВАТЬ ПО НарядРасходы.Ссылка.ГлавныйДокумент |
|||
11
K1RSAN
29.10.20
✎
08:01
|
(10) А что по данным регистра "Свойства документов"?
И у тебя там в связи с твоей таблицей два раза записано |
|||
12
NIGHTHUNTER
29.10.20
✎
08:08
|
Вот что то слепил подобное , буду дальше разбираться.
В принципе все понятно. Выборка нарядов с группировкой по главному документу (обращению). И суммой по сумме. Без каких либо других полей. И потом это привязывается к выборке по обращениям. ВЫБРАТЬ НарядРасходы.Ссылка.ГлавныйДокумент КАК ГлавныйДокумент, СУММА(НарядРасходы.СуммаФакт) КАК СуммаФакт ПОМЕСТИТЬ ВТ_СуммаПоНарядам ИЗ Документ.Наряд.Расходы КАК НарядРасходы СГРУППИРОВАТЬ ПО НарядРасходы.Ссылка.ГлавныйДокумент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СвойстваДокументов.Документ КАК Документ, СвойстваДокументов.Документ.Клиент КАК ДокументКлиент, СвойстваДокументов.Документ.Услуга КАК ДокументУслуга, СвойстваДокументов.Документ.Клиент.Контрагент КАК ДокументКлиентКонтрагент, СУММА(ВЫРАЗИТЬ(СвойстваДокументов.Значение КАК ЧИСЛО(15, 2))) КАК СуммаОбращения, ПараметыУровняСервиса.ФактическаяДатаЗакрытия КАК ФактическаяДатаЗакрытия, СвойстваДокументов.Документ.Ответственный КАК Ответственный, ВТ_СуммаПоНарядам.ГлавныйДокумент КАК ГлавныйДокумент, СУММА(ВТ_СуммаПоНарядам.СуммаФакт) КАК СуммаФакт ИЗ РегистрСведений.СвойстваДокументов КАК СвойстваДокументов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметыУровняСервиса КАК ПараметыУровняСервиса ПО СвойстваДокументов.Документ = ПараметыУровняСервиса.Инцидент ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СуммаПоНарядам КАК ВТ_СуммаПоНарядам ПО СвойстваДокументов.Документ = ВТ_СуммаПоНарядам.ГлавныйДокумент ГДЕ СвойстваДокументов.Документ ССЫЛКА Документ.Инцидент И НЕ СвойстваДокументов.Документ.Клиент.Контрагент ЕСТЬ NULL И СвойстваДокументов.Свойство = &Свойство И ПараметыУровняСервиса.ФактическаяДатаЗакрытия МЕЖДУ &НачДата И &КонДата СГРУППИРОВАТЬ ПО СвойстваДокументов.Документ, СвойстваДокументов.Документ.Клиент, СвойстваДокументов.Документ.Услуга, СвойстваДокументов.Документ.Клиент.Контрагент, ПараметыУровняСервиса.ФактическаяДатаЗакрытия, СвойстваДокументов.Документ.Ответственный, ВТ_СуммаПоНарядам.ГлавныйДокумент |
|||
13
NIGHTHUNTER
29.10.20
✎
08:09
|
(11) по регистру сведений СвойстваДокументов выбираются документы Обращения, у них идентификатор Инцидент
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |