|
Аналог коррелированного подзапроса в 1С | ☑ | ||
---|---|---|---|---|
0
rowvg
naïve
27.10.21
✎
15:01
|
Мне нужно из регистра накопления остатков получить набор данных, состоящий из двух колонок: Номенклатура и Регистратор, где в качестве регистратора выводится последний по времени для данной номенклатуры документ Поступление товаров.
Если бы такая задача решалась на T-SQL, то я бы просто написал коррелированный подзапрос. Но 1С такие подзапросы не поддерживает. Подскажите, пожалуйста, как такую задачу можно решить в 1С в рамках одного запроса, без дополнительной обработки в циклах? |
|||
1
Naumov
27.10.21
✎
15:03
|
вбей в поиск остатки в разрезе документов запросом. Решается вполне
|
|||
2
Naumov
27.10.21
✎
15:05
|
https://forum.infostart.ru/forum9/topic196927/
Там в ответах есть пример запроса. |
|||
3
Kassern
27.10.21
✎
15:13
|
||||
4
rowvg
naïve
27.10.21
✎
15:44
|
Проблема решения с соединением с подзапросом где используется конструкция МАКСИМУМ(Регистратор.Дата) в том что она может давать дубли, трубли, четырезрубли и так далее, если есть несколько регистраторов с одним временем
|
|||
5
rowvg
naïve
27.10.21
✎
15:46
|
А вот такое решение дала верный результат
ВЫБРАТЬ АВТОНОМЕРЗАПИСИ() КАК НомерСтроки, ПЕРВЫЕ 10000 ОстаткиТоваров.Товар, Регистратор поместить временная1 ИЗ РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров СОЕДИНЕНИЕ ( ВЫБРАТЬ Товар, МАКСИМУМ(Регистратор.Номер) КАК ДатаРегистратора ИЗ РегистрНакопления.ОстаткиТоваров ГДЕ Регистратор ССЫЛКА Документ.ПриходнаяНакладная И ТОВАР В (ВЫБРАТЬ Товар ИЗ ВсеТовары) СГРУППИРОВАТЬ ПО Товар ) КАК ПриходнаяНакладная ПО ОстаткиТоваров.Товар = ПриходнаяНакладная.Товар И ОстаткиТоваров.Регистратор.Номер = ПриходнаяНакладная.ДатаРегистратора ГДЕ ОстаткиТоваров.Регистратор ССЫЛКА Документ.ПриходнаяНакладная; |
|||
6
rowvg
naïve
27.10.21
✎
15:47
|
Хотя тоже костыль, конечно
Нужен коррелированный подзапрос, только он вернет корректный результат |
|||
7
Курант
27.10.21
✎
15:53
|
(4) А какая разница, какой из документов с одним временем взять?
|
|||
8
Ёпрст
27.10.21
✎
16:21
|
(6) с чего вдруг он будет верным ? top 1 + order by по каким полям поставишь, что бы узнать, какой док последний ?
ЗЫ: если че, "рубли, четырезрубли" решаются банальной группировкой или тоже. максимумом - максимум даты + максимум ссылки |
|||
9
pechkin
27.10.21
✎
17:10
|
корррелированные запросы возможны в соединении.
т1.поля= т2.поля и т2.период В (выбрать первые 1 т2.период из т2 где т1.поля = т2.поля упорядочить по период убыв) |
|||
10
youalex
27.10.21
✎
17:26
|
(6) Кореллированные подзапросы в 1с - таки есть.
Типа ВЫБРАТЬ Рег.Регистратор, Рег.Номенклатура ИЗ РегистрНакопления.Остатки Рег ГДЕ Регистратор В (ВЫБРАТЬ ПЕРВЫЕ 1 Регистратор ИЗ РегистрНакопления.Остатки влож где влож.Номенклатура = Рег.Номенклатура УПОРЯДОЧИТЬ По МоментВремени Убыв) |
|||
11
Ёпрст
27.10.21
✎
17:37
|
(10) ему с селект листе нннадо, таких еще не завезли
|
|||
12
Ёпрст
27.10.21
✎
17:39
|
он хочет
select (select top1 нечто from tabl2 where table2.id = table1.id order by date) as нечто from table1 |
|||
13
Fragster
гуру
27.10.21
✎
17:44
|
(4) можно коррелированный запрос в условиях соединения вписать, будет работать. соответственно, что-то типа
По ДокументПоступление.Ссылка в (Выбрать первые 1 1 ДокументПоступлениеОтбор.Ссылка Из Доукмент.Поступление.Товары КАК ДокментПоступлениеОтбор Где ДокументПоступлениеОтбор.Номенклатура = ОстаткиТоваров.Номенклатура Упорядочить по ДокументПоступлениеОтбор.Ссылка Убыв Автоупорядочивание) |
|||
14
Fragster
гуру
27.10.21
✎
17:46
|
1 два раза напечатал, ну да пофиг
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |