|
СКД: остатки при соединении двух и более таблиц | ☑ | ||
---|---|---|---|---|
0
timmy
08.02.12
✎
18:30
|
Прочитал, кучу тем, статьи на итс, но так и не понял почему остатки рассчитываются неправильно. спецы по скд, прошу помощи.
роли: Сек, период 2 Рег, период 1 остатки само собой измерения: Орг, Конт ВЫБРАТЬ ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Регистратор, ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ПериодСекунда, ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Организация, ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Контрагент, ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовНачальныйОстаток, ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовПриход, ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовРасход, ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток ПОМЕСТИТЬ Деньги ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(, , Авто, Движения, ) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВзаиморасчетыПоТаре_ГИОстаткиИОбороты.Регистратор, ВзаиморасчетыПоТаре_ГИОстаткиИОбороты.ПериодСекунда, ВзаиморасчетыПоТаре_ГИОстаткиИОбороты.Организация, ВзаиморасчетыПоТаре_ГИОстаткиИОбороты.Контрагент, ВзаиморасчетыПоТаре_ГИОстаткиИОбороты.КоличествоНачальныйОстаток, ВзаиморасчетыПоТаре_ГИОстаткиИОбороты.КоличествоПриход, ВзаиморасчетыПоТаре_ГИОстаткиИОбороты.КоличествоРасход, ВзаиморасчетыПоТаре_ГИОстаткиИОбороты.КоличествоКонечныйОстаток ПОМЕСТИТЬ Тара ИЗ РегистрНакопления.ВзаиморасчетыПоТаре_ГИ.ОстаткиИОбороты(, , Авто, Движения, ) КАК ВзаиморасчетыПоТаре_ГИОстаткиИОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЕСТЬNULL(Деньги.Организация, Тара.Организация) КАК Орг, ЕСТЬNULL(Деньги.Контрагент, Тара.Контрагент) КАК Конт, ЕСТЬNULL(Деньги.Регистратор, Тара.Регистратор) КАК Рег, ЕСТЬNULL(Деньги.ПериодСекунда, Тара.ПериодСекунда) КАК Сек, Деньги.СуммаВзаиморасчетовНачальныйОстаток КАК СуммаВзаиморасчетовНачальныйОстаток, Деньги.СуммаВзаиморасчетовПриход КАК СуммаВзаиморасчетовПриход, Деньги.СуммаВзаиморасчетовРасход КАК СуммаВзаиморасчетовРасход, Деньги.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток, Тара.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток, Тара.КоличествоПриход КАК КоличествоПриход, Тара.КоличествоРасход КАК КоличествоРасход, Тара.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток ИЗ Деньги КАК Деньги ПОЛНОЕ СОЕДИНЕНИЕ Тара КАК Тара ПО Деньги.Организация = Тара.Организация И Деньги.Контрагент = Тара.Контрагент И Деньги.Регистратор = Тара.Регистратор |
|||
1
timmy
10.02.12
✎
11:42
|
переписал запрос на универсальный отчет через ОБЪЕДИНИТЬ ВСЕ,
остатки считаются так же как и в СКД, опять неверно. неужели никто не делал ничего подобного? в типовых, к сожалению, не нашел ничего подобного |
|||
2
Kashemir
10.02.12
✎
11:47
|
(0) Разберись с периодами. На КАЖДЫЙ момент периода с твоей детализацией периода должны быть быть итоги по ПО ВСЕМ остаточным ресурсам.
|
|||
3
Kashemir
10.02.12
✎
11:49
|
(0) В твоем случае 2 независимых источников остатков нужно получить объединение всех периодов обоих источников и на каждый полученный момент дорассчитать значение ресурса как по количеству тары так и по взаиморасчетам.
|
|||
4
timmy
10.02.12
✎
12:00
|
(3) спс за ответ. не понял что значит "дорассчитать значение ресурса"
|
|||
5
Kashemir
10.02.12
✎
12:29
|
(4) Это значит что на каждый период должен быть рассчитан остаток по всем остаточным ресурсам.
Т.е. если у тебя есть движение по таре 01.02 на 10 единиц и движение по взаиморасчетам 02.02 на сумму 100р. то в случае (0) У тебя будет 2 строки 01.02 | 0 | 10 | 02.02 | 100| 0 | а нужно чтобы было 01.02 | 0 | 10 | 02.02 | 100| 10 | Понимаешь ? |
|||
6
timmy
10.02.12
✎
12:39
|
да, так и есть, когда разворачиваю по периоду, остатки как в 1-ом варианте. как сделать чтобы было как во втором не понимаю :)
|
|||
7
Kashemir
10.02.12
✎
13:15
|
Что-то вроде
ВЫБРАТЬ Взаиморасчеты.Период, Взаиморасчеты.Регистратор, Взаиморасчеты.НачОстСумма, Взаиморасчеты.КонОстСумма, Взаиморасчеты.Контрагент, Взаиморасчеты.Организация ПОМЕСТИТЬ ВТВзаиморасчеты ИЗ &Взаиморасчеты КАК Взаиморасчеты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Тара.Период, Тара.Регистратор, Тара.НачОстКол, Тара.КонОстКол, Тара.Контрагент, Тара.Организация ПОМЕСТИТЬ ВТТара ИЗ &Тара КАК Тара ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВсеИзмерения.Контрагент, ВсеИзмерения.Организация, ВсеПериоды.Период, ВсеПериоды.Регистратор ПОМЕСТИТЬ ПолныйНаборПериодовИзмерений ИЗ (ВЫБРАТЬ ВложенныйЗапрос.Период КАК Период, ВложенныйЗапрос.Регистратор КАК Регистратор ИЗ (ВЫБРАТЬ ВТВзаиморасчеты.Период КАК Период, ВТВзаиморасчеты.Регистратор КАК Регистратор ИЗ ВТВзаиморасчеты КАК ВТВзаиморасчеты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ВТТара.Период, ВТТара.Регистратор ИЗ ВТТара КАК ВТТара) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Период, ВложенныйЗапрос.Регистратор) КАК ВсеПериоды, (ВЫБРАТЬ ВложенныйЗапрос.Контрагент КАК Контрагент, ВложенныйЗапрос.Организация КАК Организация ИЗ (ВЫБРАТЬ ВТВзаиморасчеты.Контрагент КАК Контрагент, ВТВзаиморасчеты.Организация КАК Организация ИЗ ВТВзаиморасчеты КАК ВТВзаиморасчеты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ВТТара.Контрагент, ВТТара.Организация ИЗ ВТТара КАК ВТТара) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Контрагент, ВложенныйЗапрос.Организация) КАК ВсеИзмерения ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.Организация КАК Организация, ВложенныйЗапрос.Контрагент КАК Контрагент, ВложенныйЗапрос.Период КАК Период, ВложенныйЗапрос.Регистратор КАК Регистратор, ЕСТЬNULL(ВТВзаиморасчеты.НачОстСумма, 0) КАК НачОстСумма, ЕСТЬNULL(ВТВзаиморасчеты.КонОстСумма, 0) КАК КонОстСумма, ЕСТЬNULL(ВТТара.НачОстКол, 0) КАК НачОстКол, ЕСТЬNULL(ВТТара.КонОстКол, 0) КАК КонОстКол, ВложенныйЗапрос.ПериодВзаиморасчетов, ВложенныйЗапрос.РегистраторВзаиморасчетов ИЗ (ВЫБРАТЬ ВложенныйЗапрос.Контрагент КАК Контрагент, ВложенныйЗапрос.Организация КАК Организация, ВложенныйЗапрос.Период КАК Период, ВложенныйЗапрос.Регистратор КАК Регистратор, ВложенныйЗапрос.ПериодВзаиморасчетов КАК ПериодВзаиморасчетов, ВложенныйЗапрос.ПериодТары КАК ПериодТары, МАКСИМУМ(ВТВзаиморасчеты.Регистратор) КАК РегистраторВзаиморасчетов, МАКСИМУМ(ВТТара.Регистратор) КАК РегистраторТары ИЗ (ВЫБРАТЬ ПолныйНаборПериодовИзмерений.Контрагент КАК Контрагент, ПолныйНаборПериодовИзмерений.Организация КАК Организация, ПолныйНаборПериодовИзмерений.Период КАК Период, ПолныйНаборПериодовИзмерений.Регистратор КАК Регистратор, МАКСИМУМ(ВТВзаиморасчеты.Период) КАК ПериодВзаиморасчетов, МАКСИМУМ(ВТТара.Период) КАК ПериодТары ИЗ ПолныйНаборПериодовИзмерений КАК ПолныйНаборПериодовИзмерений ЛЕВОЕ СОЕДИНЕНИЕ ВТВзаиморасчеты КАК ВТВзаиморасчеты ПО ПолныйНаборПериодовИзмерений.Контрагент = ВТВзаиморасчеты.Контрагент И ПолныйНаборПериодовИзмерений.Организация = ВТВзаиморасчеты.Организация И ПолныйНаборПериодовИзмерений.Период >= ВТВзаиморасчеты.Период ЛЕВОЕ СОЕДИНЕНИЕ ВТТара КАК ВТТара ПО ПолныйНаборПериодовИзмерений.Контрагент = ВТТара.Контрагент И ПолныйНаборПериодовИзмерений.Организация = ВТТара.Организация И ПолныйНаборПериодовИзмерений.Период >= ВТТара.Период СГРУППИРОВАТЬ ПО ПолныйНаборПериодовИзмерений.Контрагент, ПолныйНаборПериодовИзмерений.Организация, ПолныйНаборПериодовИзмерений.Период, ПолныйНаборПериодовИзмерений.Регистратор) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ ВТВзаиморасчеты КАК ВТВзаиморасчеты ПО ВложенныйЗапрос.Организация = ВТВзаиморасчеты.Организация И ВложенныйЗапрос.Контрагент = ВТВзаиморасчеты.Контрагент И ВложенныйЗапрос.ПериодВзаиморасчетов = ВТВзаиморасчеты.Период ЛЕВОЕ СОЕДИНЕНИЕ ВТТара КАК ВТТара ПО ВложенныйЗапрос.Организация = ВТТара.Организация И ВложенныйЗапрос.Контрагент = ВТТара.Контрагент И ВложенныйЗапрос.ПериодТары = ВТТара.Период СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Регистратор, ВложенныйЗапрос.ПериодВзаиморасчетов, ВложенныйЗапрос.Контрагент, ВложенныйЗапрос.Период, ВложенныйЗапрос.ПериодТары, ВложенныйЗапрос.Организация) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ ВТВзаиморасчеты КАК ВТВзаиморасчеты ПО ВложенныйЗапрос.Организация = ВТВзаиморасчеты.Организация И ВложенныйЗапрос.Контрагент = ВТВзаиморасчеты.Контрагент И ВложенныйЗапрос.ПериодВзаиморасчетов = ВТВзаиморасчеты.Период И ВложенныйЗапрос.РегистраторВзаиморасчетов = ВТВзаиморасчеты.Регистратор ЛЕВОЕ СОЕДИНЕНИЕ ВТТара КАК ВТТара ПО ВложенныйЗапрос.Организация = ВТТара.Организация И ВложенныйЗапрос.Контрагент = ВТТара.Контрагент И ВложенныйЗапрос.ПериодТары = ВТТара.Период И ВложенныйЗапрос.РегистраторТары = ВТТара.Регистратор УПОРЯДОЧИТЬ ПО Организация, Контрагент, Период, Регистратор |
|||
8
timmy
10.02.12
✎
13:29
|
эх, ё. спасибо попробую, думал средствами СКД как-то можно сделать
|
|||
9
Kashemir
10.02.12
✎
13:31
|
(8) У тебя практически готовый запрос, поменяй источники и добавь обороты и дальше средства СКД смогут понять что делать с твоими данными
|
|||
10
timmy
10.02.12
✎
13:33
|
огромное спасибо, этим сейчас и занимаюсь
|
|||
11
Kashemir
10.02.12
✎
13:36
|
(10) Кстати можно еще оптимизировать - все периоды + все измерения тебе не нужны. 3 запрос лучше переделать на ВсеИзмерения + ВсеПериоды для каждого с момента 1 упоминания. Т.е. если контрагент А имеет первый остаток 01.02, а контрагент Б лишь 15.02, нет смысла считать контрагента Б до 15.02
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |