#0
by Web00001
Доброго времени суток! Есть достаточно простой вопрос, но... не доходит. Есть вот такой регистр: и есть список номенклатуры в запросе, надо получить для каждой номенклатуры контрагента с последней записью(максимальным полем период), пробовал группировать по полю период с функцией максимум, но тогда контрагент попадает в группировочные поля и я получаю всех контрагентов.
#1
by Фокусник
Вложенный запрос: максимум по периоду (без контрагента), поэтом этот вложенный запрос соединить с движениями регистра: соединять по периоду
#9
by Фокусник
Да, может такое быть. Тогда вложенный запрос группируем: Период МАКС, Регистратор МАКС :)
#10
by Web00001
что то вот такой запрос ВЫБРАТЬ Товар.Ссылка, Закупки.Контрагент ИЗ повисает на небольшом списке позиций(позиций 200) отъедая 2 гига памяти
#12
by Фокусник
Если я правильно понял задачу, то нужно еще добавить в соединение Товар и Поставщики поле Номенклатура. И для ускорения запроса можно в таблицу Поставщики добавить условие с отбором номенклатуры: Видимо, ему нужны данные по всем номенклатурам, даже если по ним не было поставок. Если такое не нужно, то действительно справочник Номенклатура не нужен в запросе :)
#14
by Web00001
+хотя нет ) наврал, нужно на выходе получить список номенклатуры и контрагентов в идеале
#16
by МимохожийОднако
Тогда вариант с запросом к регистру без всяких справочников. Нельзя получить запись, если её никогда не было.
#19
by DefMB
Регистр накопления для этого не предназначен. Нельзя ли добавить регистр сведений ? Или конфа типовая?
#22
by DefMB
выбрать то можно извратиться, но потом будет решать другие задачи связанные с производительностью
#23
by sf
1. Создаешь временную таблицу вида Номенклатура - максимальная дата поступления 2. из закупки.Обороты(, тут условия по таблице 1) выбираешь все что нужно выдыхай, в задача на 10 минут
#24
by DefMB
ага, и в оборотах закупки.Обороты(, тут условия по таблице 1) ты период не собираешься указывать?
#25
by Фокусник
Сделай вложенный запрос с максимумом по дате и группировкой по регистратору, затем этот вложенный запрос максимум по регистратору. И потом еще его соединяем с таблицей движений :)
#26
by sf
+ если список позиций в &СписокНоменклатур большой, то лучше тоже в отдельную ВТ выбрать не собираюсь, конечно вложенные запросы - зло, у человека уже валится система
#27
by Web00001
Если буду в просто делать соединение по периоду и номенклатуре(без регистратора) и даже если будет два документа с одной датой с точностью до секунды, то собственно я все равно получу одну запись которая будет с максимальным периодом то есть взять какую то одну из этих двух записей же надо все равно, что запрос и сделает? Или я туплю где то?
#29
by DefMB
в том то и проблема будет , если период не указывать будет вся таблица выбираться. Видимо вы не сталкивались с этим
#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. ты путаешь, наверное, с семеркой. Индекс, по умолчанию, для оборотов кластерный, для основной таблицы - по периоду, по регистратору, по проиндексированным измерениям. >> добавить дополнительные объекты конфигурации ага, регистр сведений ))) а потом проиндексировать его и получить тоже самое, что просто добавить индекс по номенклатуре )))
#39
by DefMB
вы писали выше закупки.Обороты(, тут условия по таблице 1) - с фига ли она реальная ? объясните мне ?
#40
by DefMB
если память не изменяет Период + измерения в порядке следования их в конфигурации. Может что в платформе поменялось? 7.7 никогда не увлекался
#41
by DefMB
>>а потом проиндексировать его и получить тоже самое, что просто добавить индекс по номенклатуре ))) нет, взять просто срез. последних ))
#43
by Кир Пластелинин
вообще красота. а ничего, что это это соединение реальных таблиц регистра сведений по максимуму (ну если говорить про 8.2)? ну потому что в начале субд проверяется по какой период рассчитаны итоги. если они рассчитаны за искомый период, то берется таблица итогов регистра. если же нет, то берется таблица самого регистра. или я не прав?)
#45
by DefMB
да, вы правы, но это называется обращение к виртуальной, а что система там дальше делает это уже другой уровень понимания ))
#46
by sf
нет все верно, только если включить индекс по полю, которое хотим отбирать - то не важно что будет использоваться в данном случае. нам интересен сам индекс. и при этом ты же начал объяснять как система работает )
#47
by Кир Пластелинин
так. стоп. вот не догоняю сейчас "не важно что будет использоваться в данном случае. нам интересен сам индекс.". в разрезе чего? индекс рн или связка рн и св?
#48
by sf
нафиг регистр сведений, он тут ничем не поможет. я имею в виду в рамках задачи - включаем индекс по измерению "Номенклатура" и у таблицы оборотов он будет как "номенклатура"+"Период". по нему и построится запрос.
#49
by DefMB
откуда инфа такая про индексы. Всегда все говорят что для таблицы оборотов Период + измерения. Объясни пожалуйста
#50
by Кир Пластелинин
ну касательно рсв - согласен. мало того, что это создание лишних сущностей в базе, так и профит сомнительный.
#52
by sf
+ Период + измерения - это кластерный и то он создается для полей, у которых включено "использование в итогах"
#53
by sf
и да, объясни откуда твоя инфа. просто интересно, откуда это заблуждение, что по первому измерению индекс автоматом.
#58
by DefMB
я и не говорил что только по первому измерению. я говорил что по Период + все измерения. Откуда инфа? с форума Чистова, когда готовился была ветка обсуждения
#59
by sf
твои слова + "2. Индекс будет задействован, даже в том случае, если не проставить в конфигураторе, при условии, что регистр построен как на картинке. " тогда полный бред. "у Чистова на форуме" - железный аргумент, че. p.s. чтобы задействовать кластерный индекс - надо указать ВСЕ измерения которые в нем участвуют.
#60
by DefMB
вроде все правильно я там написал, открой книгу проф разработка стр. 718. "Если требуется получать итоги по одному измерению, которое не является первым, - следует его проиндексировать". Т.е. если мы делаем отбор Изм1 или Изм1 + Изм2 это эффективно, а когда Изм2 - это уже не эффективно.
#62
by DefMB
>>p.s. чтобы задействовать кластерный индекс - надо указать ВСЕ измерения которые в нем участвуют. вот это впервые слышу.
#63
by sf
да ну, глупости какие-то. уже проверил бы давно, что это не так, а то упираешься на пустом месте. да забудь, после
#64
by DefMB
мда, пытаюсь добиться правды, а ты опять за свое )). Почему в глупости? Ты открывал книгу или нет? или просто пук в небо?
#65
by sf
да я даже технологический журнал специально посмотрел и индексы проверил в обеих табличках (основной и оборотов), со снятым/включенным индексом. ты ошибаешься нехило )
#66
by DefMB
Не звезди. Это не я ошибаюсь, а ты или авторы книги. Посмотрел структуру регистра, по умолчанию создаются индексы "Period", "Fld1", "Fld2", ... "FldN". О чем мы выше говорили. Сделал замер для запроса с отбором по первому полю. Далее проиндексировал это поле, сделал замер. Результаты не отличаются практически, я бы сказал что с установкой индекса время чуть больше.
#71
by Кир Пластелинин
ну тут как бы много параметров влияющих на быстродействие. на примере скуля - актуальность статистики, фрагментированность индексов (хотя в случае, если индекс только создан, то фрагментации у него не должно быть). тут еще нужно профайлером план запроса смотреть.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Получить id и получить объект по id
- Как программно получить получить пароль пользователя в текущем сеансе работ
- Как запросом получить последнюю фактуру по заказу?
- v8: Как получить удаляемую запись регистра сведений при интерактивном удалении
- как выбрать из регистра накопления последнюю запись с заданным отбором
- Как получить разность дат (Нужно получить количество дней)
- v8: Как получить последнюю запись в регистре сведений
- получить последнюю запись из регистра сведений на дату
- Как получить ГУИД элемента по OLE, записать и получить по нему ссылку?
- Как получить последнюю строку ТЧ документа
- Таблица значений. Получить последнюю строку
- В одном запросе получить количество рабочих дней по дате заказа
В этой группе 1С
- ошибка Error calling context method (Open) при работе с Excel в регл. задании
- УПП Универсальный передаточный документ. Как распечатать УПД со статусом "2"?
- УТ 11. Выгрузка данных для обмена с сайтом на фтп
- И все-таки разузлование спецификации через СКД)
- Кто-нибудь делал вывод статуса заказа на экран?
- Обмен между УТ 10.3 и Розницей 2.1
- как вызвать окно лицензирования?
- УТ 11 Расчеты с поставщиками по документам
- excel фильтр по цвету
- Один партнер, один контрагент
- Отключить автоматическое изменение ширины колонки в табличном поле
- Вычисляемое колонка в СКД с плавающей переменной.
- Программно заполнить Субконто
- v7: Получить документ в запросе
- v7: Как установить 2 значения периодического реквизита за 1 раз?
- ЗУП: в каких документах хранится РСВ-1, нужна программная обработка данных
- получить еще не ЗАПИСАННЫЙ объект по ссылке
- Изменение данных в регистре сведений
- Сравнить 1С:Управление Холдингом и 1С:Консолидация
- Файловое хранилище заблокировано