|
Сложный запрос к периодическому регистру | ☑ | ||
---|---|---|---|---|
0
Sevish
08.01.16
✎
15:49
|
БП платформа 8.2 конфигурация 2.0.64.42
Есть регистр сведений (периодический, далее РС). У регистра одно измерение - "Склад" (стандартный справочник "Склады"). Ресурсы "ДатаПоступления" (по сути равна "Период", но для наглядности сделал), "Вид" и "НачальныйВозраст". Записей может быть 1-2 в квартал. "СрезПоследних" на нужную дату к этому РС дает мне "ДатаПоступления" и "НачальныйВозраст". "НачальныйВозраст" + разница в днях между "нужной датой" и "ДатаПоступления" дает мне "текущий возраст". И все бы ничего, но мне нужно "текущий возраст" использовать непосредственно в запросе ЗА ВЕСЬ ГОД. Иными словами нужно создать запрос в котором по каждому складу будет свой возраст на каждый день ГОДА или некого иного периода. Зачем? Эта таблица нужна, чтобы однозначно по "Вид" выбрать требуемые показатели из соответствующего документа, привязанные к "Возрасту". Более того, еще надо взять остатки по складу ("Хозрасчетный.ОстаткиИОбороты") на начало каждого дня (а как я выяснил если использовать "остатки и обороты" и оборотов не было - совсем беда - остатка нет). В итоге должно быть что-то вроде этого: 01.01.2015 - Склад1 - Возраст1 - Показатель1_1 - Показатель2_1 - КолВо1 01.01.2015 - Склад2 - Возраст2 - Показатель1_2 - Показатель2_2 - КолВо2 02.01.2015 - Склад1 - Возраст1 - Показатель1_1 - Показатель2_1 - КолВо1 02.01.2015 - Склад2 - Возраст2 - Показатель1_2 - Показатель2_2 - КолВо2 и т. д. В общем нет у меня соображений, как это всё в один запрос уместить. А проблема с остатком на начало дня при отсутствии оборотов - это вообще отдельная тематика. Вроде как решается "Период ПЕРИОДАМИ(ДЕНЬ, &ДатаНач, &ДатаКон)", но это не возможно во вложенных запросах, нет там итогов. Была идея делать все через ТЗ собирая в ней данные разных запросов, но получается адски долго ибо на каждую дату 10-12 складов. Можно так посмотреть на эту задачу. Основной запрос: ВЫБРАТЬ ХозрасчетныйОстаткиИОбороты.Период КАК Период, ХозрасчетныйОстаткиИОбороты.Субконто3 КАК Склад, ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток КАК Остаток ИЗ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, День, , Счет = &Счет, , ) КАК ХозрасчетныйОстаткиИОбороты ГДЕ ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток > 0 УПОРЯДОЧИТЬ ПО Период, ХозрасчетныйОстаткиИОбороты.Субконто3.Наименование ИТОГИ СУММА(Остаток) ПО Период ПЕРИОДАМИ(ДЕНЬ, &ДатаНач, &ДатаКон), Склад И всё что нужно добавить к этому запросу вычисление актуального возраста из данных РС и показатели, привязанные к этому возрасту и складу :) |
|||
1
rsv
08.01.16
✎
15:52
|
(0) Прочел несколько раз - ничего не понял .
|
|||
2
rsv
08.01.16
✎
15:53
|
Имхо ... рассматривайте просто как таблицу с перечнем атрибутов - и все взлетит .
|
|||
3
Sevish
08.01.16
✎
15:59
|
(2) Не понял совета, сорри.
Попробую иначе объяснить. Если взять приведенный запрос просто остатков по счету (см. выше), то в результат я получу значение "Период" в каждой строке. Вот из "Склад" и "Период" мне для каждой строки надо вычислить возраст на основании данных периодического регистра сведений. А затем для каждой строки на основании "Период", "Склад" и "Возраст" получить показатели из документа. |
|||
4
rsv
08.01.16
✎
16:04
|
(3)
Т.е. с запросом к регистру бухгалтерии определились ? Скорее джойните теперь с регистром сведений (подзапрос,времянка) по ... тем ключам связи которые необходимы. |
|||
5
Sevish
08.01.16
✎
16:15
|
(4) С запросом определился. Ибо если остаток 0 то и считать ничего не надо. Проблема в том, что я не могу сообразить как джойнить. Например, чтобы на какую-то дату мне узнать начальный возраст в РС, мне надо взять "срезпоследних", которому нужно указать дату среза. А она плавающая и зависит от периода, полученного в основном запросу, с которым я определился.
А какие тэги прописать. чтобы запросы более точнее вставлялись, красивее что ли. |
|||
6
vicof
08.01.16
✎
16:15
|
(3) Соединить с таблицей дат.
|
|||
7
vicof
08.01.16
✎
16:16
|
Точней так. Выбрать все даты, какие нужны, к ним джойнить данные регистра, вычислять возраст, далее к ним джойнить нужные показатели
|
|||
8
Sevish
08.01.16
✎
16:21
|
(7) Не совсем так, но почти так и делал.
1. Взял остатки на каждый день -> "Период". 2. Создал вложенный запрос к РС "СрезПоследних" объединил по "Склад" и "Период" -> вычислил возраст. 3. Создал вложенный запрос к документам объединил по "Склад" -> получил показатели. Все хорошо, но если за период запроса были новые записи в РС (то есть требуется не только последний возраст), то опаньки. Ну и плюсом пошло то, что если обороты были "0", то и начального остатка я не вижу. |
|||
9
vicof
08.01.16
✎
16:22
|
(8) Делай срез последних на каждую дату - гуглится легко
|
|||
10
Sevish
08.01.16
✎
16:24
|
(7) Что касается Твоего совета: то, что Ты посоветовал я могу сделать в ТЗ без проблем :), как это сделать в одном запросе не представляю. Я могу тупо сделать ТЗ по каждой дате за период. Затем взять остатки добавить в эту ТЗ. Затем сделать запрос к РС и обойдя все строки проставить возраст. Затем прочитать все документы с показателями и ещё раз обойти ТЗ и вставить нужные показатели в зависимости от периода и даты документа...
|
|||
11
Sevish
08.01.16
✎
16:24
|
(9) гуглю
|
|||
12
Sevish
08.01.16
✎
16:38
|
Честно признаюсь, никогда не работал с временными таблицами :( Это видимо и смешно и грустно одновременно :(
Нашел вот такой пример. http://forum1s.ru/read/srez-poslednikh-na-kazhduiu-datu-v-zaprose-1s/ Чтобы оттолкнуться и разобраться. Мне во временную таблицу положить остатки или наоборот, выборку РС за период? |
|||
13
vicof
08.01.16
✎
17:31
|
ПОМЕСТИТЬ ВременнаяТаблица
|
|||
14
vicof
08.01.16
✎
17:31
|
Может, сначала курс по запросам посмотреть?
|
|||
15
Sevish
08.01.16
✎
18:13
|
(14) Не использовал ранее.
В общем совместить возраст с данными поголовья у меня получилось, буду показатели сейчас пытаться прикрутить. Но все ещё актуален вопрос с отсутствием остатков на начало если не было оборотов. Вроде как запрос остатков в основном запросе делаю периодами но что-то пока никак. |
|||
16
echo77
08.01.16
✎
18:17
|
(15) Выводи с помощью СКД, группировка по периоду с дополнением день
|
|||
17
Sevish
12.01.16
✎
21:18
|
Решил задачу следующим образом:
1. Взял с "ПЕРИОДАМИ" сначала остатки по складам на каждый день. Результат запроса обошел в цикле и поместил то что надо в ТЗ. 2. Всю остальную информацию с ИБ собирал через запрос с виртуальной таблицей, в которую и загружал свою ТЗ. Объединял "слева". Левой всегда была моя виртуальная таблица. Таким образом у меня всегда был и остаток по складу на каждый день и все дни подряд непрерывно. Если кому-то интересны подробности - спрашивайте. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |