Имя: Пароль:
1C
 
Аналог коррелированного подзапроса в 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 два раза напечатал, ну да пофиг
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн