![]() |
![]() |
|
получить последние записи с РС, если остальные не подходят | ☑ | ||
---|---|---|---|---|
0
Stim
10.09.12
✎
17:02
|
РС.Периодический.
измерения: КОнтрагент, договор ресурсы: ДатаОкончания, СуммаВзаиморасчетов Записи: период контр договор ДатаОкончания СуммаВзаиморасчетов 01.01.2012 Иванов ОсновнойДоговор 30.10 99 01.09.2012 Иванов ДополнДоговор 30.09 1 как видно, у иванова есть с 01.01 по 30.10 действует основной договор и лишь на сентябрь(01.09-30.09) действует дополнительный. дополнительный на период своего действия имеет приоритет перед основным. итого, мы имеем: 01.01 - 01.09 - основной 99 01.09 - 30.09 - дополн 1 01.10 - 30.10 - основной 99 но! нужно еще знать, что после 30.10 у нас был последний основной договор и сумма взаиморасчетов до конца года ЕСЛИ ЧТО - считается по нему. поэтому еще должна быть строка: 30.10 - 31.12 - основной 99 нужно составить запрос, который на любую дату текущего года вернет только одну действующую запись регистра. уже сломал голову |
|||
1
DrShad
10.09.12
✎
17:04
|
вот для чего придумали регистры расчета с их вытеснением
|
|||
2
Stim
10.09.12
✎
17:06
|
брать срезПоследних(&дата) и срезПоследних(&дата,ДатаОкончания>)- как-то соединять их между собой..
|
|||
3
Stim
10.09.12
✎
17:07
|
срезПоследних(&дата,ДатаОкончания>&дата)
|
|||
4
DrShad
10.09.12
✎
17:07
|
(2) с таким зоопарком договоров не так просто соединить будет
|
|||
5
ЧашкаЧая
10.09.12
✎
17:08
|
>> нужно составить запрос, который на любую дату текущего года вернет только одну действующую запись регистра
1. Получаем ВТ всех действующих договоров на дату. 2. Полное соединение подзапросов с отборами по виду договора - если есть дополнительный - выбираем его, нету - выбираем основной. |
|||
6
Stim
10.09.12
✎
17:09
|
(4) зоопарка нет. договор либо основной либо дополнительный, определяется булевным признаком договора. дополнительный имеет приоритет на период своего действия
|
|||
7
Stim
10.09.12
✎
17:13
|
(5) если на конец года:
всеДействующие - вернет 2 записи, если без ДатаОкончания>&дата в параметрах и с какой таблицей соединить его полным соединением? |
|||
8
Kreont
10.09.12
✎
17:17
|
Одним запросом получи договор основной на дату, другим запросом получи доп.договор, и выбери что надо из двух, уже без запросов.
А если будет два основных и три доп.договоров на указанную дату, что тогда будет результатом? |
|||
9
Stim
10.09.12
✎
17:24
|
(8) 2. не будет такого в одном периоде могут быть только осн и доп. осн и осн, или доп и доп не могут быть
|
|||
10
Classic
10.09.12
✎
17:35
|
Шо там писать?
Ну например у нас есть ТЗ (Контрагент, Нужная нам дата) ВЫБРАТЬ ТЗ.Контрагент КАК Контрагент, ТЗ.Дата КАК Дата, ЕстьNULL(РС_Дополнительный.Договор, РС_Основной.Договор) КАК Договор, ЕстьNULL(РС_Дополнительный.СуммаВзаиморасчетов, РС_Основной.СуммаВзаиморасчетов) КАК Договор, ИЗ ТЗ КАК ТЗ ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РС КАК РС_Основной ПО РС_Основной.Контрагент = ТЗ.Контрагент И РС_Основной.Договор.Основной И РС_Основной.ДатаНачала <= ТЗ.Дата И РС_Основной.ДатаОкончания >= ТЗ.Дата ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РС КАК РС_Дополнительный ПО РС_Дополнительный.Контрагент = ТЗ.Контрагент И НЕ РС_Дополнительный.Договор.Основной И РС_Дополнительный.ДатаНачала <= ТЗ.Дата И РС_Дополнительный.ДатаОкончания >= ТЗ.Дата |
|||
11
Stim
10.09.12
✎
17:43
|
(10) срез последних не берешь? а если у меня каждый месяц действует отдельный основной договор - твой запрос вернет 12 записей (ДатаНачала <= ТЗ.Дата И ДатаОкончания >= ТЗ.Дата ) ?
|
|||
12
Classic
10.09.12
✎
17:45
|
(11)
Ты ж сказал, что в один период у тебя только один основной договор |
|||
13
Stim
10.09.12
✎
17:47
|
(12) да. январь - осн1
февраль - осн2 март - осн 3 апрель - осн4 март-апрель - доп1 и т.д |
|||
14
Classic
10.09.12
✎
17:47
|
(13)
И почему у тебя при ТЗ.Дата = 01.03 окажется два основных договора? |
|||
15
Stim
10.09.12
✎
17:55
|
а, сорри, туплю
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |