Имя: Пароль:
1C
1С v8
Период в запросе
0 ВежливаяТварь
 
18.10.12
12:09
Добрый день. Столкнулся с весьма специфической проблемой есть запрос который вытягивает договора по которым есть долги. Запрос:
ВЫБРАТЬ
                                     |    ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК Сумма,
                                     |    ВзаиморасчетыСКонтрагентамиОстатки.Контрагент КАК Контрагент,
                                     |    ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента КАК Договор
                                     |ИЗ
                                     |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&Дата, Контрагент В ИЕРАРХИИ (&Контрагент)) КАК ВзаиморасчетыСКонтрагентамиОстатки
                                     |ГДЕ
                                     |    ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток > 0
                                     |
                                     |УПОРЯДОЧИТЬ ПО
                                     |    ВзаиморасчетыСКонтрагентамиОстатки.Контрагент.Наименование

Вопрос:Реально ли сделать так что бы параметр &Дата передавался бы как &дата- ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.КоличесвтоДнейострочки  или нужно вторым запросом выяснять количество дней отсрочки и предевать через установить параметр в &Дата? И если реально то как?
1 kosts
 
18.10.12
12:13
Попробуй ДОБАВИТЬКДАТЕ(<Дата>, <Тип>, <Количество>)

ДОБАВИТЬКДАТЕ(&дата, День, - ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента.КоличесвтоДнейострочки)
2 ВежливаяТварь
 
18.10.12
12:14
(1) Понял. Спасибо, сейчас попробую.
3 lxndr
 
18.10.12
12:15
(0), (1) нереально. Остатки могут считаться на одну дату.
В этом плане лучше расчитывать количество дней просрочки долга
4 ВежливаяТварь
 
18.10.12
12:58
а если использовать остатки и обороты?
5 GLazNik
 
18.10.12
13:00
(4) тож не взлетит. Но можно получить остатки на &Дата и вычесть обороты за период (но без использования виртуальных таблиц).
6 ВежливаяТварь
 
18.10.12
13:44
нашел похожий пример, вот

ВЫБРАТЬ
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент.Ссылка КАК Контрагент,
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента КАК Договор,
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом КАК Накладная,
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК Сумма,
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата КАК ДатаРасходной,
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.СуммаДокумента КАК СуммаНакладной
ИЗ
   РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(&Дата, Контрагент В ИЕРАРХИИ (&Контрагент)) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки
ГДЕ
   ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности - 1) <= НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ)
   И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток > 0
   И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом ССЫЛКА Документ.РеализацияТоваровУслуг

УПОРЯДОЧИТЬ ПО
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент.Наименование
7 1Сергей
 
18.10.12
13:46
Куча контриков, куча договоро, куча дат. На какую брать?
8 ВежливаяТварь
 
18.10.12
13:55
(7) ну по идее дата должна изменться динамически в зависимости от того у кого какая отсрочка.
9 ВежливаяТварь
 
18.10.12
16:49
Вот так получилось:
ВЫБРАТЬ
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Контрагент КАК Контрагент,
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента КАК Договор,
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности,
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток
ИЗ
   РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(, , День, , Контрагент В ИЕРАРХИИ (&Контрагент)) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты
ГДЕ
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Период = ДОБАВИТЬКДАТЕ(&дата, ДЕНЬ, -ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности)

УПОРЯДОЧИТЬ ПО
   ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Контрагент.Наименование
10 GLazNik
 
18.10.12
16:56
(9) это вряд ли работает. ОстаткиИОбороты вернет только те дни, в которых были обороты
11 ВежливаяТварь
 
18.10.12
17:05
(10) Жаль, то есть лучше делать несколькими запросами?
12 GLazNik
 
18.10.12
17:16
(11) ну почему же... можно и одним... в принципе и это решение можно довести до ума, но я не нахожу его удачным.
На виртуальных таблицах свет клином не сошелся. В данном случае можно рассчитать остаток на нужную дату используя остаток на &Дата и движения за нужный интервал
13 ВежливаяТварь
 
19.10.12
09:53
(12) Понял. Сейчас попробую. Спасибо.