Здравствуйте!

Есть две виртуальные таблицы бухгалтерского регистра:
1)ХозрасчетныйОстаткиИОбороты - главная, из нее берется список регистраторов.
2)ХозрасчетныйОбороты - дополнительная, из нее берутся обороты.

Необходимо, чтобы к регистратору приклеивался оборот, который был на ДАТУ РЕГИСТРАТОРА.
Например, на 16.10.16 общий оборот по базе дебета был 20 000 грн, а он приклеивает данные на сегодня (41 000 грн).

Как сделать так, чтобы для таблицы ХозрасчетныйОбороты датой была дата регистратора с первой таблицы? Заранее спасибо!
---
Да, только соединение
НАЧАЛОПЕРИОДА(ХозрасчетныйОстаткиИОбороты.Регистратор.Дата, ДЕНЬ) >= Обороты.ПериодДень
мы же берем все обороты ранее даты регистратора.
и после соединения еще нужно Сгруппировать, т.к. на 1 регистратор будет много записей (1 запись на каждый день, где были движения между 01010001 и датой регистратора)
Единственный момент, что при таком соединении мы получим обороты либо на начало дня даты рег-ра(включая обороты между датой рег-раи концом дня даты рег-ра), либо исключим обороты между началом дня даты рег-ра и самой датой рег-ра. Для этого можно либо изменить Периодичность во временной таблице, существенно увеличив количество записей в ней, и замедлив работу отчета, либо пренебречь этим моментом.
---
Что-то у вас с постановкой задачи не то. Обороты берутся за период, а не на дату.
Получить обороты на дату каждого регистратора при помощи виртуальной таблицы у вас не выйдет так или иначе.
Единственный вариант - получить обороты на каждую дату (между начальной датой и текущей) с помощью МетодаДополнения День, поместить во временную таблицу. Затем список регистраторов. Затем соединить таблицы по ТабОборотовПоДням.Период = НачалоПериода(Регистратор.Дата, День) и сгруппировать.
---
mymyka, здравствуйте, спасибо за отклик!
Возможно способ я вижу неправильный, но задача (получить оборот на дату регистратора) - верная, нужно для нестандартного отчета.

МетодаДополнения День - это ДвиженияИГраницыПериода?
---
получить оборот на дату регистратора
Вы не понимаете сути вирт.таблицы оборотов, не бывает оборота на дату, ну вот просто не бывает и все. Оборот бывает ЗА ПЕРИОД. С начала времен по дату регистратора, с начала года, месяца, недели, но все равно это будет Период, а не Дата. Кстати, через 5 лет у вас в отчете будут выводиться миллионы (обороты за все 5 лет) на каждый регистратор?
(7)МетодаДополнения День - это ДвиженияИГраницыПериода?
Это в параметрах вирт.таблицы на первом скрине.
(8)Регистр бухгалтерии настолько тормозная штука, что сильно увеличить время выполнения запроса составным типом так или иначе не получится. Регистратор же все равно получаем.
---
mymyka,

```1c
    НачалоПериода(Регистратор.Дата, День)
```

с начала, тоже хотел предложить такой подход с одним добавлением

```1c
    НачалоПериода(Выразить(Регистратор КАК Документ.РеализацияТоваровУстуг).Дата, День)
```

, но на скрине в (3) видно, что в регистраторах выбирается не один документ, а несколько, а это значит , что привести регистратор к одному типу не получиться(если только не использовать выбор ... когда...). Если нет возможности привести регистратор к конкретному типу(оставить составным), то я бы поискал другой вариант решения ИМХО
---
Фотографии:
---
Как сейчас и как нужно сделать.
---
dreamcreal, хорошо бы увидеть текст запроса
---
vovan_victory, Здравствуйте!
Спасибо за то, что откликнулись!

Вот текст запроса:

```1c
    ВЫБРАТЬ
    ХозрасчетныйОстаткиИОбороты.Субконто1,
    ХозрасчетныйОстаткиИОбороты.Регистратор,
    ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаОборотДтОБОРОТЫ,
    ХозрасчетныйОбороты.СуммаОборотКт КАК СуммаОборотКтОБОРОТЫ,
    ХозрасчетныйОстаткиИОбороты.СуммаОборот КАК СуммаОборотОСТАТКИ
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Регистратор, Движения, Счет.Код = "361", , ) КАК ХозрасчетныйОстаткиИОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(, , , Счет.Код = "361", , , , ) КАК ХозрасчетныйОбороты
    ПО (ХозрасчетныйОстаткиИОбороты.Субконто1 = ХозрасчетныйОбороты.Субконто1)
    И (ХозрасчетныйОстаткиИОбороты.Субконто2 = ХозрасчетныйОбороты.Субконто2)
```
---
vovan_victory, может быть мне хватит только реализаций...
Есть такой шанс.
Подскажите пожалуйста как получить обороты хотя бы только по документам РеализацияТоваровУслуг...
---
mymyka,
"С начала времен по дату регистратора

Вот это мне нужно.

Кстати, через 5 лет у вас в отчете будут выводиться миллионы (обороты за все 5 лет) на каждый регистратор?

Возможно, мне просто нужна эта цифра, без нее никак.

МетодаДополнения День - это ДвиженияИГраницыПериода?

Это в параметрах вирт.таблицы на первом скрине.

Есть периодичность "День" и есть два метода дополнения - "Движения" и "ДвиженияИГраницыПериода".
Не понимаю как здесь выбрать "МетодаДополнения День"
---
С временной таблицей получился такой отчет:

```1c
    ВЫБРАТЬ
    ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДтОБОРОТЫ,
    ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКтОБОРОТЫ,
    ХозрасчетныйОстаткиИОбороты.Субконто1,
    ХозрасчетныйОстаткиИОбороты.ПериодДень,
    ХозрасчетныйОстаткиИОбороты.Субконто2
    ПОМЕСТИТЬ Обороты
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Авто, ДвиженияИГраницыПериода, Счет.Код = "361", , ) КАК ХозрасчетныйОстаткиИОбороты
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ХозрасчетныйОстаткиИОбороты.Субконто1,
    ХозрасчетныйОстаткиИОбороты.Регистратор,
    Обороты.СуммаОборотДтОБОРОТЫ,
    Обороты.СуммаОборотКтОБОРОТЫ
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Регистратор, ДвиженияИГраницыПериода, Счет.Код = "361", , ) КАК ХозрасчетныйОстаткиИОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ Обороты КАК Обороты
    ПО (НАЧАЛОПЕРИОДА(ХозрасчетныйОстаткиИОбороты.Регистратор.Дата, ДЕНЬ) = Обороты.ПериодДень)
    И (ХозрасчетныйОстаткиИОбороты.Субконто1 = Обороты.Субконто1)
    И (ХозрасчетныйОстаткиИОбороты.Субконто2 = Обороты.Субконто2)
```
---
Единственный вариант - получить обороты на каждую дату (между начальной датой и текущей) с помощью МетодаДополнения День, поместить во временную таблицу. Затем список регистраторов. Затем соединить таблицы по ТабОборотовПоДням.Период = НачалоПериода(Регистратор.Дата, День) и сгруппировать.

Как сделать "МетодДополнения День"?
Нет у меня такого(
---
Извините, спутал с СКДшным методом дополнения. Достаточно указать Периодичность День и метод дополнения Движения.
---
mymyka, это вторая таблица, где я их объединяю:

```1c
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ХозрасчетныйОстаткиИОбороты.Регистратор
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Регистратор, , Счет.Код = "361", , ) КАК ХозрасчетныйОстаткиИОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ Обороты КАК Обороты
    ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = Обороты.Субконто1
    И ХозрасчетныйОстаткиИОбороты.Субконто2 = Обороты.Субконто2
    И (Обороты.Период = НАЧАЛОПЕРИОДА(ХозрасчетныйОстаткиИОбороты.Регистратор.Дата, ДЕНЬ))

    СГРУППИРОВАТЬ ПО
    ХозрасчетныйОстаткиИОбороты.Регистратор
```
---
mymyka, это виртуальная таблица получается такая:

```1c
    ВЫБРАТЬ
    ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДтОБОРОТЫ,
    ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКтОБОРОТЫ,
    ХозрасчетныйОстаткиИОбороты.Субконто1,
    ХозрасчетныйОстаткиИОбороты.Субконто2,
    ХозрасчетныйОстаткиИОбороты.Период
    ПОМЕСТИТЬ Обороты
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , День, Движения, Счет.Код = "361", , ) КАК ХозрасчетныйОстаткиИОбороты
    ;
```
---
Да, только соединение
НАЧАЛОПЕРИОДА(ХозрасчетныйОстаткиИОбороты.Регистратор.Дата, ДЕНЬ) >= Обороты.ПериодДень
мы же берем все обороты ранее даты регистратора.
и после соединения еще нужно Сгруппировать, т.к. на 1 регистратор будет много записей (1 запись на каждый день, где были движения между 01010001 и датой регистратора)
Единственный момент, что при таком соединении мы получим обороты либо на начало дня даты рег-ра(включая обороты между датой рег-раи концом дня даты рег-ра), либо исключим обороты между началом дня даты рег-ра и самой датой рег-ра. Для этого можно либо изменить Периодичность во временной таблице, существенно увеличив количество записей в ней, и замедлив работу отчета, либо пренебречь этим моментом.
---
mymyka, похоже, получается.

Ура!!! Одну секундочку.
---
mymyka, можно поменять периодичность на минуту или секунду, например, да?
---
mymyka, в любом случае огромное спасибо Вам за помощь и за развернутые ответы!!!
Спасли начинающего программиста. Мне сегодня отчет срочно нужно сдать...
ОГРОМНОЕ ВАМ СПАСИБО!!!
---
На самом деле , судя по постановке задачи, нужно получить нарастающий итог по таблице движений.
Т.е. соединять ОстаткиИОбороты ни с чем не нужно. Нужно по полученному результату просто вывести нарастающий итог оборотов .

Смысл виртуальной таблицы именно в быстром получении итогов. Итоги суть результат нескольких движений. Если Период - регистратор - то это вырождает итоги в движения, которые, кстати, вы уже получили , выбрав ОстаткиИОбороты.
---
Ovrfox, здравствуйте, спасибо за отклик.
В нарастающем итоге сплюсовать нужно Обороты по регистраторам, да?
---
dreamcreal, Таблица ОстаткиИОбороты содержит остатки на начало и конец периода и обороты внутри периода.
Да, сплюсовать нужно суммы по регистраторам, это можно сделать в СКД через "ВычислитьВыражение". Главное отделить дебет от кредита.
Если в период запроса уже существовали какие-либо регистраторы по выводимой группировке, тогда необходимо получить начальное значение оборотов. Для этого, конечно же, лучший вариант виртуальная таблица оборотов. Но это в том случае, если будет задан параметр виртуальной таблицы ОстаткиИОбороты "НачалоПериода". Только в этом случае начальные обороты нужно будет посчитать как раз от начала времен по "НачалоПериода".
---
Ovrfox, спасибо за информацию.
Не совсем понятно почему в виртуальной таблице ОстаткиИОбороты должен быть задан параметр "НачалоПериода"?
А если его оставить пустым?
Или может Вы имеете в виду прописать в его значение дату 01.01.0001?
---
dreamcreal, Я имел в виду, что если вы будете выбирать ОстаткиИОбороты за определенный период (Датанач, ДатаОкон) и при этом Вам понадобится наростающий итог оборотов с начала времен (что врядли, ну а вдруг), то только в этом случае начальное значение наростающих итогов можно получить через Обороты, в которых указать параметр конец периода как Датанач, а параметр начало периода не указывать.

В остальных случаях соединение с оборотами вообще не нужно
---
А разве при Период - Регистратор обороты будут не самого регистратора? ТСу то надо обороты от 01010001 ДО регистратора. Интересно, что будет быстрее, соединение таблицы самой с собой по Таб1.Рег-ор.Дата > Таб2.Рег-ор.Дата или выборка и соединение с временной таблицей по Периоду? Смущает двойное обращение к реквизиту поля составного типа.