Пишу отчет на СКД. Обращаюсь к периодическому РС Нормы к таблице СрезПоследних.
Поступила постановка, изменить выборку. Нужно взять не последнюю запись из РС Нормы, а те записи, которые соответствовали дате документа, на момент их создания.
Примерно РС и документы отразил на фото Нормы. На фото Нормы2 отразил как бы хотелось это видеть. То есть, я так понимаю, нужно при формировании строки обращаться либо к срезу последних на дату Поступления, либо к самой таблице регистра, без среза, с пост-условием по дате, где дата Поступления в промежутке первой записи и второй записи РС. Вот тут пока не придумаю, как такое реализовать средствами СКД. Что можно придумать?
Делаешь 2 набора данных
В первом получаешь даты среза.
Только берешь не виртуальную таблицу, а реальную, без срезов
ВЫБРАТЬ
РегистрНормы.Норма КАК Норма,
МАКСИМУМ(РегистрНормы.Период) КАК Период
ИЗ
РегистрНормы КАК РегистрНормы
СГРУППИРОВАТЬ ПО
РегистрНормы.Норма КАК Норма
УПОРЯДОЧИТЬ ПО
Период
Показать
Во втором период получаешь как параметр
Я тебе покажу пример из моего отчета, там другие параметры, но суть та же.
ВЫБРАТЬ
&НачалоПериода КАК НачалоПериода,
ТоварыНаСкладахОстаткиИОбороты.Склад.Магазин КАК Магазин,
ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Код КАК Код,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход,
ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК ОстатокНаКонец,
ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Регистратор,
ТоварыНаСкладахОстаткиИОбороты.ПериодСекунда КАК ПериодСекунда,
ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК ОстатокНаНачало
{ВЫБРАТЬ
Магазин.*,
Склад.*,
Код,
Номенклатура.*,
ОстатокНаНачало,
КоличествоПриход,
КоличествоРасход,
ОстатокНаКонец КАК ОстатокНаКонец,
Регистратор.*,
ПериодСекунда,
НачалоПериода}
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
ГДЕ
ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <> 0
{ГДЕ
ТоварыНаСкладахОстаткиИОбороты.Склад.*,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура.*,
ТоварыНаСкладахОстаткиИОбороты.Склад.Магазин.* КАК Магазин}
Показать
А связку делаешь на вкладке "Связи наборов данных:
У меня это как на картинке:
Обрати внимание на 1 строчку 2-го запроса
(4)
ну тут как бы период по РС Нормы не всегда равен дате документа поступления (регистратора РН скажем так даже).
Я делал такие связи, многие записи пропадают, так как нет равенства датам согласно связи наборам данных.
7.
user1004898
2828.08.21 10:09 Сейчас в теме+0.5 $m
Кстати, можно как-то к записям ВТ (которая построена на РС ) из СКД обращаться перебором записей?
К примеру, если ДатаПоступления >= запись.ВТ.Дата и ДатаПоступления <= запись.ВТ(+1).Дата Тогда запись.ВТ.Норма. Типа сравниваю два значения ВТ моего РС и если датаПоступления в этом интервале, то беру соответствущую Норму.
Шаг 1. Получаете таблицу типа "Поступления.Ссылка, Поступления.Дата, Поступления.ПолеСвязи"
Шаг 2. Объединяете эту таблицу с основной таблицей регистра сведений норм.
ВЫБРАТЬ
Поступления.Ссылка,
Поступления.Дата,
Поступления.ПолеСвязи,
МАКСИМУМ(РегистрНормы.Период)
ИЗ
Поступления КАК Поступления
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Нормы КАК РегистрНормы
ПО Поступление.ПолеСвязи = РегистрНормы.ПолеСвязи
И Поступление.Дата >= РегистрНормы.Период
СГРУППИРОВАТЬ ПО
Поступления.Ссылка,
Поступления.Дата
Поступления.ПолеСвязи
Показать
Шаг 3. Получившуюся таблицу объединяете с основной таблицей регистра норм по полю связи и периоду.
Сразу предупрежу, что ресурсы этот запрос жрет как бесплатные.