Собственно задача простая
1. Получить остатки по товарам
2. Получить склады по которым получили остатки
3. Получить номенклатуру по которым получили остатки
Какие варианты вижу
1. Можно сделать запрос с тремя пакетам в каждом получая остатки, только для 2 и 3 выбрать Без повторяющих
2. Либо сделать запрос по остаткам, поместить во временную таблицу, из нее потом получить остатки, склады и номенклатуру и затем удалить временную таблицу.
3. Можно получить таблицу по остаткам, а потом обходом заполнять массивы складов и номенклатуры, предварительно делая поиск
Как будет правильнее и быстрее?
1. Получить остатки по товарам
2. Получить склады по которым получили остатки
3. Получить номенклатуру по которым получили остатки
Какие варианты вижу
1. Можно сделать запрос с тремя пакетам в каждом получая остатки, только для 2 и 3 выбрать Без повторяющих
2. Либо сделать запрос по остаткам, поместить во временную таблицу, из нее потом получить остатки, склады и номенклатуру и затем удалить временную таблицу.
3. Можно получить таблицу по остаткам, а потом обходом заполнять массивы складов и номенклатуры, предварительно делая поиск
Как будет правильнее и быстрее?
По теме из базы знаний
- Регистры сведений 1С. Как это устроено.
- Руководство по SQL: Как лучше писать запросы (Часть 1)
- Как работают управляемые формы и тонкий клиент 1С – взгляд "из-под капота"
- Как сломать работу 1С, будучи пользователем
- Как мы интегрировали свою систему управления разработкой со Slack. Инструменты, возможности, процесс разработки
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Можно несколько упростить 2 вариант. Исключить "из нее потом получить остатки" и не удалять временную таблицу. Пакет запросов позволяет получить данные из временной таблицы.
Запрос.ВыполнитьПакетСПромежуточнымиДанными()
Что в общем будет вполне достаточно для данного случая.
2. Либо сделать запрос по остаткам, поместить во временную таблицу, из нее потом получить остатки, склады и номенклатуру и затем удалить временную таблицу.
Можно несколько упростить 2 вариант. Исключить "из нее потом получить остатки" и не удалять временную таблицу. Пакет запросов позволяет получить данные из временной таблицы.
Запрос.ВыполнитьПакетСПромежуточнымиДанными()
Что в общем будет вполне достаточно для данного случая.
Если я правильно понял, сами остатки не нужны, нужны только списки складов и номенклатуры?
Тогда так:
В пакете две выборки - это и есть ваши списки.
Повторов в них не будет.
Тогда так:
выбрать Номенклатура, Количество из РегистрНакопления.ТоварыНаСкладах.Остатки(&НаМомент,)
;
выбрать Склад, Количество из РегистрНакопления.ТоварыНаСкладах.Остатки(&НаМомент,)
В пакете две выборки - это и есть ваши списки.
Повторов в них не будет.
Все три работать будут, даже возможно производительностью можно пренебречь. Но как бы было удобнее читать запрос и его потом изменять при необходимости?
Вероятно второй вариант, в нем все последовательно и логично:
1. Запрос по остаткам -> ВТ_Остатки
2. Склады по этим остаткам ->ВТ_Склады
3. Номеклатура по остаткам -> ВТ_Номенклатура.
Но это если у вас как вы описали цели три по пунктам.
Возможно решение другое, если вам на самом деле нужно что то одно.
Вероятно второй вариант, в нем все последовательно и логично:
1. Запрос по остаткам -> ВТ_Остатки
2. Склады по этим остаткам ->ВТ_Склады
3. Номеклатура по остаткам -> ВТ_Номенклатура.
Но это если у вас как вы описали цели три по пунктам.
Возможно решение другое, если вам на самом деле нужно что то одно.
Попробовал все 3 способа - все одинаково. В моей базе по 15 - 16 миллисекунд.
Пробовал на 11 ут, может у кого база побольше будет поинтереснее
Пробовал на 11 ут, может у кого база побольше будет поинтереснее
Прикрепленные файлы:
Сравнение.epf
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот