Имя: Пароль:
1C
1С v8
получить последние записи с РС, если остальные не подходят
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
а, сорри, туплю
Независимо от того, куда вы едете — это в гору и против ветра!