Добрый день.

Помогите пожалуйста разобраться, как в запросе установить Дату НачалоПериодаДолг и КонецПериодаДолг, полученные из временной таблицы или из ТЧ на форме.
В интернете смотрела, к сожалению не нашла этого решение

```1c
    |ВЫБРАТЬ
    | ВрСгрОстатки.ЛС КАК ЛС,
    | ВрСгрОстатки.Помещение КАК Помещение,
    | ВрСгрОстатки.НачалоПериодаДолг Как НачалоПериодаДолг ,
    | ВрСгрОстатки.КонецПериодаДолг Как КонецПериодаДолг,

    **********************************************************

    |ИЗ
    //Данные из временной таблицы
    | ВрСгрОстатки КАК ВрСгрОстатки
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.КУ_Взаиморасчеты.ОстаткиИОбороты(НачалоПериодаДолг, КонецПериодаДолг , , , ) КАК КУ_ВзаиморасчетыОстатки
    |

    **********************************************************
```

Благодарю за помощь.
---
```1c
    Запрос.текст = ВЫБРАТЬ
    | <Нужные Вам поля>
    |ИЗ
    | РегистрНакопления.КУ_Взаиморасчеты.ОстаткиИОбороты(НачалоПериодаДолг, КонецПериодаДолг , , , ) КАК КУ_ВзаиморасчетыОстатки

    Для каждого Стр Из ТаблицаДолг Цикл

    Запрос.УстановитьПараметр("НачалоПериодаДолг", Стр .НачалоПериодаДолг);
    выборка = Запрос.Выполнить().Выбрать()

    КонецЦикла;
```

что-то типа такого
---
Лично мне представляется решение через использование детализации "Регистратор" в параметрах виртуальной таблицы ОстаткиИОбороты.
Только не совсем понятно, какие именно остатки нужны в периоде между НачалоПериодаДолг и КонецПериодаДолг?
У вас будет набор остатков на каждый регистратор в этом периоде, как вы определите нужный остаток?
---
nomad_irk
Задолженность по ЛС получили по остаткам на нужную дату.

Далее
у нас есть документ Претензия, в нём период задолженности к примеру
НачалоПериода и КонецПериода
01.01.2018 по 31.12.2018, на сумму 10 000

необходимо создать новую претензию на следующий период
с КонецПериода прошлого документа (в новом документе это НачалоПериода)+ 1 день по КонецПериода (Дата на форме) , на сумму задолженности этого периода

т.е. новая претензия будет с 01.01.2019 по КонецПериода и сумма задолженности с 01.01.2019- КонецПериода

нам не нужна вся задолженность для повторного создания претензии, а только по периоду.
и у всех людей в док. Претензия разные периоды НачалоЗадолженности КонецЗадолженности
---
```1c
    ............................
    | КУ_ВзаиморасчетыОстатки.СуммаКонечныйОстаток
    |ИЗ
    | ВрСгрОстатки КАК ВрСгрОстатки
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.КУ_Взаиморасчеты.ОстаткиИОбороты(, , Регистратор, , ) КАК КУ_ВзаиморасчетыОстатки
    | ПО КУ_ВзаиморасчетыОстатки.Период МЕЖДУ ВрСгрОстатки.НачалоПериодаДолг И ВрСгрОстатки.КонецПериодаДолг
    | И ВрСгрОстатки.ЛС = КУ_ВзаиморасчетыОстатки.ЛС
    | И ВрСгрОстатки.Помещение = КУ_ВзаиморасчетыОстатки.Помещение
```

так вы получите остаток на каждый регистратор в периоде между ВрСгрОстатки.НачалоПериодаДолг И ВрСгрОстатки.КонецПериодаДолг

Табличка получится не маленькой, ее нужно будет сгруппировать по ЛС и Помещение. Что делать с суммой - решать вам, но актуальный остаток в периоде будет у последней записи.
---
nomad_irk, мне не нужны остатки на каждый регистратор в периоде между НачалоПериода и КонецПериода.
Я в личное сообщение скинула Вам свой запрос и результат
---
Поймите простую вещь, у остатков нет периода, у остатков есть дата этих самых остатков.
Если вы оперируете периодом получения остатков, то вас должна интересовать какая-то одна дата в этом периоде.

Личное сообщение гляну, отвечу.
---
nomad_irk ,
КУ_Взаиморасчеты.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , )

Я понимаю, что у остатков нет между периодами, остаток получается на конкретную дату. Просто таблица была не верно названа, на самом деле - это ОстаткиИОбороты.
Остаток получен был раньше
---
Таблица ОстаткиИОбороты умеет показывать остатки на каждый документ, т.к. умеет работать с периодом - вы можете воспользоваться этим для решения вашей задачи.

Ваша задача, насколько понял, получить максимальную дату остатков в периоде, и, используя ее, получить "динамические остатки" на каждую такую дату периоде.

Вот ваша таблица долга:

Петров|Помещение1|01.01.2019|31.12.2019
Иванов|Помещение2|01.01.2019|31.12.2019

Вот ваша таблица ОстаткиИОбороты:

01.01.2019|Документ1|Петров|Помещение1|НачальныйОстаток = 0|Приход = 10|Расход = 0|КонечныйОстаток = 10
02.01.2019|Документ2|Петров|Помещение1|10|0|5|5
03.01.2019|Документ3|Петров|Помещение1|5|6|0|11

Чтобы получить остаток в период с 01.01.2019 по 31.12.2019 нужно выполнить соединение ТаблицаДолга с Таблицей ОстаткиИОбороты с детализацией до регистратора и ограничивая период движений периодом из ТаблицыДолга.

```1c
    |Выбрать
    | ВрСгрОстатки.*,
    | КУ_ВзаиморасчетыОстатки.Период
    |ИЗ
    | ВрСгрОстатки КАК ВрСгрОстатки
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.КУ_Взаиморасчеты.ОстаткиИОбороты(, , Регистратор, , ) КАК КУ_ВзаиморасчетыОстатки
    | ПО КУ_ВзаиморасчетыОстатки.Период МЕЖДУ ВрСгрОстатки.НачалоПериодаДолг И ВрСгрОстатки.КонецПериодаДолг
    | И ВрСгрОстатки.ЛС = КУ_ВзаиморасчетыОстатки.ЛС
```

Так как актуальный остаток будет у последней записи в таблице ОстаткиИОбороты, то необходимо сначала получить максимальную дату этой записи(еще лучше, момент времени), т.е. выполняем соединение с ОстаткиИОбороты и получаем промежуточную таблицу вида:

Петров|Помещение1|01.01.2019|31.12.2019|Период таблицы ОстаткиОбороты = 01.01.2019
Петров|Помещение1|01.01.2019|31.12.2019|02.01.2019
Петров|Помещение1|01.01.2019|31.12.2019|03.01.2019

Выполняем группировку таблицы и агрегируем "период таблицы ОстаткиИОбороты" функцией Максимум()

Петров|Помещение1|01.01.2019|31.12.2019|Период таблицы ОстаткиОбороты = 03.01.2019

```1c
    |Выбрать
    | ВрСгрОстатки.*,
    | МАКСИМУМ(КУ_ВзаиморасчетыОстатки.Период) КАК ПериодОстаткиИОбороты
    |ПОМЕСТИТЬ ВТ_ОСтаткиИОборотыСрезПоследних
    |ИЗ
    | ВрСгрОстатки КАК ВрСгрОстатки
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.КУ_Взаиморасчеты.ОстаткиИОбороты(, , Регистратор, , ) КАК КУ_ВзаиморасчетыОстатки
    | ПО КУ_ВзаиморасчетыОстатки.Период МЕЖДУ ВрСгрОстатки.НачалоПериодаДолг И ВрСгрОстатки.КонецПериодаДолг
    | И ВрСгрОстатки.ЛС = КУ_ВзаиморасчетыОстатки.ЛС
    |СГРУППИРОВАТЬ ПО
    | ВрСгрОстатки.*
```

Этот результат еще раз соединяем с таблицей ОстаткиИОбороты и получаем актуальные остатки

```1c
    |ВЫБРАТЬ
    | ОстаткиИОбороты.ЛС
    | ОстаткиИОбороты.Помещение,
    | КУ_ВзаиморасчетыОстатки.СуммаКонечныйОстаток
    |ИЗ
    | ВТ_ОстаткиИОборотыСрезПоследних КАК ОстаткиИОбороты
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.КУ_Взаиморасчеты.ОстаткиИОбороты(, , Регистратор, , ) КАК КУ_ВзаиморасчетыОстатки
    | ПО ОстаткиИОбороты.ПериодОстаткиИОбороты = КУ_ВзаиморасчетыОстатки.Период
    | И ВрСгрОстатки.ЛС = КУ_ВзаиморасчетыОстатки.ЛС
```

Тексты запроса накидал "на коленке", отладка строго обязательна.
---
nomad_irk, да, частично Вы верно меня поняли- получить максимальную дату остатков в периоде.
И дальше-из таблицы ОстаткиИОбороты я уже получаю Обороты за нужный мне период.
И сложность была в том, что у каждого ЛС этот период разный
---
я смотрю предложенный Вами запрос.

```1c
    | ПО КУ_ВзаиморасчетыОстатки.Период МЕЖДУ ВрСгрОстатки.НачалоПериодаДолг И ВрСгрОстатки.КонецПериодаДолг
```

Вот эта строчка -раньше я не знала, что так можно сделать.

Сейчас смотрю не текущую дату окончания периода, а к примеру 31.03.2020, то суммы получаются другими.
Буду дальше тестировать.

Благодарю Вас за хороший и подробный пример
---
Добавлю ещё

```1c
    КОНЕЦПЕРИОДА(ТаблицаДолг.КонецПериода,День) КАК КонецПериода,

    ****
    | И КУ_ВзаиморасчетыОстатки.ПериодВзаиморасчетов МЕЖДУ НачалоПЕРИОДА(ТаблицаДолг.НачалоПериода,День) И КОНЕЦПЕРИОДА(ТаблицаДолг.КонецПериода,День)
    ******
```
|

Без этого конецПериода время было 0:00:00, а необходимо 23:59:59
---
Если у Вас один запрос, тогда
Запрос.УстановитьПараметр("НачалоПериодаДолг", НачалоПериодаДолг);
Установит значения на нужные даты во временной таблице и в виртуальной.
---
Запрос.УстановитьПараметр("НачалоПериодаДолг", НачалоПериодаДолг);

у разных ЛС разные начала периода
у кого-то 01.01.2020, а у кого-то 01.10.2019.

НачалоПериодаДолг - этот параметр как передать?? как ТЗ?
---
, остатки обычно формируются на конец периода.

Но если так хочется иметь отбор за конечный период (НачальнаяДата, КонечнаяДата), то в условии отбора лучше использовать оператор МЕЖДУ.
---
Вам нужно соединить красиво 2 таблицы?

ВрСгрОстатки - что это за таблица. Если можно целый запрос, пожалуйста
---
motiask,выгружаю данные с формы в ТЗ и передаю её делаю в запрос (получилось).
Я получила список должников, получила период, с которого я хочу смотреть задоженность.

Не получилось
А как дальше детализировать задолженность по ЛС с ВЫБРАННОГО периода, а не со всего периода задолженности- то не знаю.

```1c
    ////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    | ТаблицаДолг.КодЛС КАК КодЛС,
    | ТаблицаДолг.ЛС КАК ЛС,
    | ТаблицаДолг.Здание КАК Здание,
    | ТаблицаДолг.Помещение КАК Помещение,

    | ТаблицаДолг.НачалоПериода Как НачалоПериодаДолг,
    | ТаблицаДолг.КонецПериода Как КонецПериодаДолг

    |ПОМЕСТИТЬ ВрСгрОстатки
    |ИЗ
    | ТаблицаДолг КАК ТаблицаДолг

    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ВрСгрОстатки.ЛС КАК ЛС,
    | ВрСгрОстатки.Помещение КАК Помещение,
    | ВрСгрОстатки.НачалоПериодаДолг Как НачалоПериодаДолг ,

    | ВрСгрОстатки.КонецПериодаДолг Как КонецПериодаДолг,

    | КУ_ВзаиморасчетыОстатки.ЛицевойСчет КАК ЛСССылка,
    | КУ_ВзаиморасчетыОстатки.ЛицевойСчет.ДатаЗакрытия КАК ДатаЗакрытия,
    | КУ_ВзаиморасчетыОстатки.ПериодВзаиморасчетов КАК ПериодВзаиморасчетов,
    | КУ_ВзаиморасчетыОстатки.ВидНачисления.ВидУслуги КАК ВидУслуги,
    | ЕСТЬNULL(КУ_ВзаиморасчетыОстатки.СуммаНачисленияКонечныйОстаток, 0) + ЕСТЬNULL(КУ_ВзаиморасчетыОстатки.СуммаАвансаКонечныйОстаток, 0) КАК СуммаДолга,
    | КУ_ВзаиморасчетыОстатки.СуммаПениКонечныйОстаток КАК СуммаПени,
    | ЕСТЬNULL(КУ_ВзаиморасчетыОстатки.СуммаНачисленияКонечныйОстаток + КУ_ВзаиморасчетыОстатки.СуммаАвансаКонечныйОстаток, 0) + ЕСТЬNULL(КУ_ВзаиморасчетыОстатки.СуммаПениКонечныйОстаток, 0) КАК СуммаВсего,
    | МЕСЯЦ(&КонецПериода) КАК МесяцКонПер,

    |ИЗ
    | ВрСгрОстатки КАК ВрСгрОстатки
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.КУ_Взаиморасчеты.ОстаткиИОбороты(НачалоПериодаДолг, КонецПериодаДолг , , , ) КАК КУ_ВзаиморасчетыОстатки
    |СГРУППИРОВАТЬ ПО
    | ВрСгрОстатки.ЛС,
    | ВрСгрОстатки.Помещение,
    | КУ_ВзаиморасчетыОстатки.ЛицевойСчет,
    | КУ_ВзаиморасчетыОстатки.ЛицевойСчет.ДатаЗакрытия,
    | КУ_ВзаиморасчетыОстатки.ПериодВзаиморасчетов,
    | КУ_ВзаиморасчетыОстатки.ВидНачисления.ВидУслуги,
    | ЕСТЬNULL(КУ_ВзаиморасчетыОстатки.СуммаНачисленияКонечныйОстаток, 0) + ЕСТЬNULL(КУ_ВзаиморасчетыОстатки.СуммаАвансаКонечныйОстаток, 0),
    | КУ_ВзаиморасчетыОстатки.СуммаПениКонечныйОстаток,
    | ЕСТЬNULL(КУ_ВзаиморасчетыОстатки.СуммаНачисленияКонечныйОстаток + КУ_ВзаиморасчетыОстатки.СуммаАвансаКонечныйОстаток, 0) + ЕСТЬNULL(КУ_ВзаиморасчетыОстатки.СуммаПениКонечныйОстаток, 0),
    |УПОРЯДОЧИТЬ ПО
    | ЛС,
    | ПериодВзаиморасчетов,
    | КУ_ВзаиморасчетыОстатки.ВидНачисления.ВидУслуги.Код";
```
|

Ругается, что неверные параметры ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.КУ_Взаиморасчеты.ОстаткиИОбороты(НачалоПериодаДолг, КонецПериодаДолг , , , ) КАК КУ_ВзаиморасчетыОстатки

НачалоПериодаДолг и КонецПериодаДолг
---
```1c
    Если у Вас
    | ТаблицаДолг.НачалоПериода Как НачалоПериодаДолг,
    | ТаблицаДолг.КонецПериода Как КонецПериодаДолг
```

Все разные, тогда проще сделайте:

Цикл выборки из таблицы значений, а в цикле запрос, так проще Вам будет. И не нужно будет ТЗ грузить в запрос.
---
я не совсем Вас поняла.

ТЗ в запросе- это список должников. Все эти строки нужны

Далее
для тех, у кого есть долг (из ТЗ, переданной в выборку)- я хочу посмотреть детализацию их долга за выбранный период.

Попробую сейчас реализовать Ваш вариант
---
```1c
    Запрос.текст = ВЫБРАТЬ
    | <Нужные Вам поля>
    |ИЗ
    | РегистрНакопления.КУ_Взаиморасчеты.ОстаткиИОбороты(НачалоПериодаДолг, КонецПериодаДолг , , , ) КАК КУ_ВзаиморасчетыОстатки

    Для каждого Стр Из ТаблицаДолг Цикл

    Запрос.УстановитьПараметр("НачалоПериодаДолг", Стр .НачалоПериодаДолг);
    выборка = Запрос.Выполнить().Выбрать()

    КонецЦикла;
```

что-то типа такого
---
Благодарю за интересное решение, сейчас попробую.
---
Для каждого Стр Из ТаблицаДолг Цикл

Запрос.УстановитьПараметр("НачалоПериодаДолг", Стр .НачалоПериодаДолг);
выборка = Запрос.Выполнить().Выбрать()

немного не понятен этот момент.
Если в моей ТЗ 100 строк, то получается, что 100 раз будет выполнен запрос??
Тоже не совсем хороший вариант
---
, motiask

```1c
    Если Объект.Задолженность.Количество()<>0 Тогда
    Для каждого Стр Из Объект.Задолженность Цикл
    //Чтобы период был равен периоду задолженности, а не весь период
    Запрос.УстановитьПараметр("НачалоПериода", Стр.НачалоПериода);
    Запрос.УстановитьПараметр("КонецПериода", Стр.КонецПериода);
    КонецЦикла; //Для каждого Стр Из ТаблицаДолг Цикл
    КонецЕсли; //Объект.Задолженность.Количество()<>0 Тогда

    Выборка = Запрос.Выполнить().Выбрать()
```

у меня получилось таким образом.
Вроде даже 100 строк ТЧ- нормально по скорости выполняет запрос+ формирует с заполнением документы
---
Да, это плохой вариант, но он проще в отладке и работе.
потому, что период в таблице у Вас разный. Единственное что можно сделать, это на СКД написать (но и там цикл будет).
---
Или сведите свой список должников к единой дате начала периода и концу. И тогда все это в запрос.
---
как вариант- можно попробовать и такой способ.