Получить последнюю по дате запись из регистра накопления #719600


#0 by Web00001
Доброго времени суток! Есть достаточно простой вопрос, но... не доходит. Есть вот такой регистр: и есть список номенклатуры в запросе, надо получить для каждой номенклатуры контрагента с последней записью(максимальным полем период), пробовал группировать по полю период с функцией максимум, но тогда контрагент попадает в группировочные поля и я получаю всех контрагентов.
#1 by Фокусник
Вложенный запрос: максимум по периоду (без контрагента), поэтом этот вложенный запрос соединить с движениями регистра: соединять по периоду
#2 by Azverin
открой для себя "Выбрать ПЕРВЫЕ 1" и "УПОРЯДОЧИТЬ ПО"
#3 by toluol
+ Период и ссылка в соединении.
#4 by Web00001
И получи одну запись на всю номенклатуру?
#5 by Web00001
А если будет два документа одинаковым периодом? Будем считать погрешностью? :)
#6 by toluol
Ссылка = Ссылка регистратора
#7 by Azverin
ага) а такаой?
#8 by Azverin
нет, такой не пойдёт(
#9 by Фокусник
Да, может такое быть. Тогда вложенный запрос группируем:  Период МАКС, Регистратор МАКС :)
#10 by Web00001
что то вот такой запрос ВЫБРАТЬ     Товар.Ссылка,     Закупки.Контрагент ИЗ повисает на небольшом списке позиций(позиций 200) отъедая 2 гига памяти
#11 by МимохожийОднако
Зачем здесь справочник в соединении? Попробуй обратиться к записям регистра.
#12 by Фокусник
Если я правильно понял задачу, то нужно еще добавить в соединение Товар и Поставщики поле Номенклатура. И для ускорения запроса можно в таблицу Поставщики добавить условие с отбором номенклатуры: Видимо, ему нужны данные по всем номенклатурам, даже если по ним не было поставок. Если такое не нужно, то действительно справочник Номенклатура не нужен в запросе :)
#13 by Web00001
Такое не нужно, у меня есть список номенклатуры и мне надо для него получить
#14 by Web00001
+хотя нет ) наврал, нужно на выходе получить список номенклатуры и контрагентов в идеале
#15 by alle68
Сразу 2 максимума неверно в принципе. Такая пара может не найтись. ВЫБРАТЬ
#16 by МимохожийОднако
Тогда вариант с запросом к регистру без всяких справочников. Нельзя получить запись, если её никогда не было.
#17 by Web00001
Действительно, что то выпадает
#18 by Web00001
Засада без запроса в цикле, ничего не получится как я понял.
#19 by DefMB
Регистр накопления для этого не предназначен. Нельзя ли добавить регистр сведений ? Или конфа типовая?
#20 by sf
можно чего?
#21 by DefMB
я имею ввиду на больших объемах данных будут тормоза
#22 by DefMB
выбрать то можно извратиться, но потом будет решать другие задачи связанные с производительностью
#23 by sf
1. Создаешь временную таблицу вида Номенклатура - максимальная дата поступления 2. из закупки.Обороты(, тут условия по таблице 1) выбираешь все что нужно выдыхай, в задача на 10 минут
#24 by DefMB
ага, и в оборотах закупки.Обороты(, тут условия по таблице 1) ты период не собираешься указывать?
#25 by Фокусник
Сделай вложенный запрос с максимумом по дате и группировкой по регистратору, затем этот вложенный запрос максимум по регистратору. И потом еще его соединяем с таблицей движений :)
#26 by sf
+ если список позиций в &СписокНоменклатур большой, то лучше тоже в отдельную ВТ выбрать не собираюсь, конечно вложенные запросы - зло, у человека уже валится система
#27 by Web00001
Если буду в просто делать соединение по периоду и номенклатуре(без регистратора) и даже если будет два документа с одной датой с точностью до секунды, то собственно я все равно получу одну запись которая будет с максимальным периодом то есть взять какую то одну из этих двух записей же надо все равно, что запрос и сделает? Или я туплю где то?
#28 by Ник второй
Целый клубок ошибок... посмотри в книгу знаний 1с
#29 by DefMB
в том то и проблема будет , если период не указывать будет вся таблица выбираться. Видимо вы не сталкивались с этим
#30 by Ник второй
Вложенный запрос не зло, соединение с вложенными запросами - зло
#31 by sf
учи теорию. у оборотного регистра будет индекс Измерение + Период, если проиндексировано нужное измерение ( в случае автора - Номенклатура). так что за всю таблицу - ты не прав. да там в чел, имхо, троллит.
#32 by Фокусник
"вложенные запросы - зло, у человека уже валится система" Нужно отбор во вложенном запросе сделать, как в и ничего валиться не будет. Кроме того валилось потому что не было в соединении в стыковки по номенклатуре...
#33 by DefMB
да не в индексации дело, представьте у вас миллионы записей с одинаковой номенклатурой, у вас все эти записи будут выбраны, если вы используете виртуальную таблицу без отбора по периоду. Кроме того, когда обращаемся к виртуальной таблице оборотов, системы пытается получить итоги и построить запрос SQL оптимальным способом. В вашем таком запросе с периодичностью , будет использована таблица движений, это приведет к снижению производительности. Учи теорию!
#34 by sf
>> к виртуальной таблице оборотов, 1. она физическая. 2. если измерение проиндесировано, то индекс: Период+Измерение. и он, скорее всего, будет задействован. 3. по поводу что система сама будет выборку делать из таблицы движений - ты путаешь с агрегатами, это отдельная тема. p.s. расскажи свою теорию, как ты собрался периодом ограничивать таблицу
#35 by DefMB
1. она виртуальная 2. Индекс будет задействован, даже в том случае, если не проставить в конфигураторе, при условии, что регистр построен как на картинке. Скажите почему? Читайте теорию. Ну дело тут не в индексе, я уже выше писал 3. Мда, ничего я не путаю p.s.  уже выше писал, если есть возможность, в таких случаях лучше добавить дополнительные объекты конфигурации
#36 by sf
ты не расстраивайся, твоим знаниям сто лет в обед. я серьезно. прости если задел чем. 1. она виртуальная - Имя таблицы будет AccumRgTn<номер>. И это, ты никогда не задумывался, что делает "Пересчет итогов" ? виртуальные таблички рассчитывает? ) 2. ты путаешь, наверное, с семеркой. Индекс, по умолчанию, для оборотов кластерный, для основной таблицы - по периоду, по регистратору, по проиндексированным измерениям. >> добавить дополнительные объекты конфигурации ага, регистр сведений ))) а потом проиндексировать его и получить тоже самое, что просто добавить индекс по номенклатуре )))
#37 by Кир Пластелинин
про первый пункт. с фига ли она виртуальная?
#38 by Кир Пластелинин
+ ну и если измерение проиндексировано, то вполне сносно будет отрабатывать
#39 by DefMB
вы писали выше закупки.Обороты(, тут условия по таблице 1) - с фига ли она реальная ? объясните мне ?
#40 by DefMB
если память не изменяет Период + измерения в порядке следования их в конфигурации. Может что в платформе поменялось? 7.7 никогда не увлекался
#41 by DefMB
>>а потом проиндексировать его и получить тоже самое, что просто добавить индекс по номенклатуре ))) нет, взять просто срез. последних ))
#42 by DefMB
+ по умолчанию индексы так строятся в 8-ке
#43 by Кир Пластелинин
вообще красота. а ничего, что это это соединение реальных таблиц регистра сведений по максимуму (ну если говорить про 8.2)? ну потому что в начале субд проверяется по какой период рассчитаны итоги. если они рассчитаны за искомый период, то берется таблица итогов регистра. если же нет, то берется таблица самого регистра. или я не прав?)
#44 by Кир Пластелинин
+ так что понятие "виртуальная" довольно таки условное
#45 by DefMB
да, вы правы, но это называется обращение к виртуальной, а что система там дальше делает это уже другой уровень понимания ))
#46 by sf
нет все верно, только если включить индекс по полю, которое хотим отбирать - то не важно что будет использоваться в данном случае. нам интересен сам индекс. и при этом ты же начал объяснять как система работает )
#47 by Кир Пластелинин
так. стоп. вот не догоняю сейчас "не важно что будет использоваться в данном случае. нам интересен сам индекс.". в разрезе чего? индекс рн или связка рн и св?
#48 by sf
нафиг регистр сведений, он тут ничем не поможет. я имею в виду в рамках задачи - включаем индекс по измерению "Номенклатура" и у таблицы оборотов он будет как "номенклатура"+"Период". по нему и построится запрос.
#49 by DefMB
откуда инфа такая про индексы. Всегда все говорят что для таблицы оборотов Период + измерения. Объясни пожалуйста
#50 by Кир Пластелинин
ну касательно рсв - согласен. мало того, что это создание лишних сущностей в базе, так и профит сомнительный.
#51 by sf
с курсов УЦ №3
#52 by sf
+ Период + измерения - это кластерный и то он создается для полей, у которых включено "использование в итогах"
#53 by sf
и да, объясни откуда твоя инфа. просто интересно, откуда это заблуждение, что по первому измерению индекс автоматом.
#54 by Кир Пластелинин
разве кластерный?
#55 by sf
да
#56 by Кир Пластелинин
о какой таблице идет речь? таблице регистра или таблице оборотов регистра?
#57 by sf
таблицу оборотов, конечно, см , я ж про итоги пишу.
#58 by DefMB
я и не говорил что только по первому измерению. я говорил что по Период + все измерения. Откуда инфа? с форума Чистова, когда готовился была ветка обсуждения
#59 by sf
твои слова + "2. Индекс будет задействован, даже в том случае, если не проставить в конфигураторе, при условии, что регистр построен как на картинке. " тогда полный бред. "у Чистова на форуме" - железный аргумент, че. p.s. чтобы задействовать кластерный индекс - надо указать ВСЕ измерения которые в нем участвуют.
#60 by DefMB
вроде все правильно я там написал, открой книгу проф разработка стр. 718. "Если требуется получать итоги по одному измерению, которое не является первым, - следует его проиндексировать". Т.е. если мы делаем отбор Изм1 или Изм1 + Изм2 это эффективно, а когда Изм2 - это уже не эффективно.
#61 by DefMB
+ в этом случае изм2 нужно проиндексировать
#62 by DefMB
>>p.s. чтобы задействовать кластерный индекс - надо указать ВСЕ измерения которые в нем участвуют. вот это впервые слышу.
#63 by sf
да ну, глупости какие-то. уже проверил бы давно, что это не так, а то упираешься на пустом месте. да забудь, после
#64 by DefMB
мда, пытаюсь добиться правды, а ты опять за свое )). Почему в глупости? Ты открывал книгу или нет? или просто пук в небо?
#65 by sf
да я даже технологический журнал специально посмотрел и индексы проверил в обеих табличках (основной и оборотов), со снятым/включенным индексом. ты ошибаешься нехило )
#66 by DefMB
Не звезди. Это не я ошибаюсь, а ты или авторы книги. Посмотрел структуру регистра, по умолчанию создаются индексы "Period", "Fld1", "Fld2", ... "FldN". О чем мы выше говорили. Сделал замер для запроса с отбором по первому полю. Далее проиндексировал это поле, сделал замер. Результаты не отличаются практически, я бы сказал что с установкой индекса время чуть больше.
#67 by sf
у тебя запрос по какой таблице выполнился? телепатирую - по основной таблице
#68 by DefMB
по виртуальной конечно же
#69 by sf
ну тогда у тебя там записей с гулькин нос. ТЖ смотрел?
#70 by sf
+ без индекса там фулл скан
#71 by Кир Пластелинин
ну тут как бы много параметров влияющих на быстродействие. на примере скуля - актуальность статистики, фрагментированность индексов (хотя в случае, если индекс только создан, то фрагментации у него не должно быть). тут еще нужно профайлером план запроса смотреть.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С