Имя: Пароль:
1C
1С v8
Запрос в запросе 1с 8
0 Dohter2010
 
19.04.18
10:41
Нужна помощь в запросе(ах).

ВЫБРАТЬ
    СотрудникиОрганизацииСрезПоследних.ФизЛицо КАК ФизЛицо,
    ПаспортныеДанныеФизЛицСрезПоследних.ВидДокумента КАК ВидДокумента,
    ПаспортныеДанныеФизЛицСрезПоследних.Период КАК Период
ИЗ
    РегистрСведений.СотрудникиОрганизации.СрезПоследних(, ) КАК СотрудникиОрганизацииСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних КАК ПаспортныеДанныеФизЛицСрезПоследних
        ПО СотрудникиОрганизацииСрезПоследних.ФизЛицо = ПаспортныеДанныеФизЛицСрезПоследних.Физлицо

ГДЕ
СотрудникиОрганизацииСрезПоследних.Организация = &Организация

Делаю запрос по всем сотрудникам срез последних и прилепливаю вид документа - беда в том что видов документа может быть несколько, а надо последний. уменя выходит записей по кажддому виду документа. подскажите как правильно? платформа  8.3 не типовая УФ.
1 dezss
 
19.04.18
10:48
какая структура у РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних?
2 Dohter2010
 
19.04.18
10:50
период
измерения : физлицо
3 Buster007
 
19.04.18
10:50
ну добавь условие на вид документа
4 Dohter2010
 
19.04.18
10:51
0

период
измерения : физлицо, организация  ресурсы: вид документа,серия ,номер, кем выдан.
5 dezss
 
19.04.18
10:51
(2) ну так и бери последний период
6 Ненавижу 1С
 
гуру
19.04.18
10:51
ВидДокумента у тебя измерение
7 Ненавижу 1С
 
гуру
19.04.18
10:52
+(6) а нет, все еще хуже

зачем организация в измерениях и вообще зачем?
8 dezss
 
19.04.18
10:53
(5) + по физ лицу....а потом соединяй по периоду...
9 Dohter2010
 
19.04.18
10:53
Мне надо узнать какой документ последний. а мен выдает по каждому виду.
10 dezss
 
19.04.18
10:55
(9) в вт пихаешь запрос по Максимум(период) с группировкой по физ. лицу (не к срезу обращаешься, а к самой таблице).
А потом опять эту таблицу соединяешь с получившейся вт по физ. лицу и периоду.
11 Йохохо
 
19.04.18
10:58
(10) и еще Первые 1, т.к. на период нет уникальности. А на сотрудникисрез тоже надо выбрать различные, т.к. будут дубли на совместителях
12 dezss
 
19.04.18
11:02
(11) Либо во втором запросе тоже минимум-максимум уже по виду документа. Различные - это да.
13 Dohter2010
 
19.04.18
11:13
мне бы что нибудь типо :
Запрос = выбрать
физлица ,
( выбрать первые 1 ВидДокумента из ВТ где физлицовт=физлицо) как виддок
из СотрудникиСрезПоследних;

Только я не понимаю как  соединить и передать туда параметр "физлицо"
14 Dohter2010
 
19.04.18
11:16
А вт  это верхняя таблица
15 dezss
 
19.04.18
11:18
(14) значит делай еще более верхнюю вт)))
16 dezss
 
19.04.18
11:19
(15) а потом сразу свой запрос...
17 Йохохо
 
19.04.18
11:20
(13) тебе не нужно соединение, выбери сотрудникисрез.физики уникальные в вт и передай вт в параметры среза ПаспортныеДанныеФизЛиц
18 Dohter2010
 
19.04.18
11:25
Вот такая мутотень получилось - не знаю на сколько это "профессионально"
ВЫБРАТЬ
    МАКСИМУМ(ПаспортныеДанныеФизЛиц.Период) КАК Период,
    ПаспортныеДанныеФизЛиц.Физлицо КАК Физлицо
ПОМЕСТИТЬ Времянка
ИЗ
    РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц
ГДЕ
    ПаспортныеДанныеФизЛиц.Физлицо.Организация = &Организация

СГРУППИРОВАТЬ ПО
    ПаспортныеДанныеФизЛиц.Физлицо
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПаспортныеДанныеФизЛицСрезПоследних.ВидДокумента КАК ВидДокумента,
    МАКСИМУМ(ПаспортныеДанныеФизЛицСрезПоследних.Период) КАК Период,
    ПаспортныеДанныеФизЛицСрезПоследних.Физлицо КАК Физлицо,
    ПаспортныеДанныеФизЛицСрезПоследних.Физлицо.Наименование КАК ФизлицоНаименование
ИЗ
    РегистрСведений.СотрудникиОрганизации.СрезПоследних(, ) КАК СотрудникиОрганизацииСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ Времянка КАК Времянка
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних КАК ПаспортныеДанныеФизЛицСрезПоследних
            ПО (Времянка.Период = ПаспортныеДанныеФизЛицСрезПоследних.Период)
                И (Времянка.Физлицо = ПаспортныеДанныеФизЛицСрезПоследних.Физлицо)
        ПО (СотрудникиОрганизацииСрезПоследних.ФизЛицо = Времянка.Физлицо)
ГДЕ
    СотрудникиОрганизацииСрезПоследних.Организация = &Организация

СГРУППИРОВАТЬ ПО
    ПаспортныеДанныеФизЛицСрезПоследних.ВидДокумента,
    ПаспортныеДанныеФизЛицСрезПоследних.Физлицо

УПОРЯДОЧИТЬ ПО
    ФизлицоНаименование
19 dezss
 
19.04.18
11:30
(18) во втором запросе убирай максимум по периоду и добавь максимум по виду документа

не делай так...присоедини  справочник физ. лица и оттуда возьми наименование, если оно тебе так нужно
   ПаспортныеДанныеФизЛицСрезПоследних.Физлицо.Наименование КАК ФизлицоНаименование
20 Dohter2010
 
19.04.18
11:37
(19) Да максимум во втором запросе - лишнее а ФизлицоНаименование - это для сортировки Проверки- так оно мне не нужно !

Всем большое спасибо!
21 Dohter2010
 
19.04.18
11:45
Чорт и вот так получилось :

ВЫБРАТЬ
    СотрудникиОрганизацииСрезПоследних.ФизЛицо КАК ФизЛицо,
    МАКСИМУМ(ПаспортныеДанныеФизЛицСрезПоследних.ВидДокумента) КАК ВидДокумента,
    МАКСИМУМ(ПаспортныеДанныеФизЛицСрезПоследних.Период) КАК Период,
    СотрудникиОрганизацииСрезПоследних.ФизЛицо.Наименование КАК ФизЛицоНаименование
ИЗ
    РегистрСведений.СотрудникиОрганизации.СрезПоследних(, ) КАК СотрудникиОрганизацииСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних КАК ПаспортныеДанныеФизЛицСрезПоследних
        ПО (СотрудникиОрганизацииСрезПоследних.ФизЛицо = ПаспортныеДанныеФизЛицСрезПоследних.Физлицо)
ГДЕ
    СотрудникиОрганизацииСрезПоследних.Организация = &Организация

СГРУППИРОВАТЬ ПО
    СотрудникиОрганизацииСрезПоследних.ФизЛицо

УПОРЯДОЧИТЬ ПО
    ФизЛицоНаименование

Может об этом говорил   Йохохо в (17)  !??
22 dezss
 
19.04.18
12:03
(21) нельзя так делать. У тебя Максимум периода не будет связан видом документа (просто возьмет макс период и макс вид документа у данного сотрудника, но не факт, что в этом периоде будет этот вид документа).

И еще раз, избавься от этого:
    СотрудникиОрганизацииСрезПоследних.ФизЛицо.Наименование КАК ФизЛицоНаименование

Присоедини еще и таблицу физ лиц, и уже из нее бери наименование.
23 dezss
 
19.04.18
12:07
(22) + вообще старайся избегать в запросе обращений через вторую точку
24 olegves
 
19.04.18
13:02
(4) и кто такое наваял? Потому у тебя срез и не работает - обращайся ко всей таблице через создание своего среза в ВТ
25 olegves
 
19.04.18
13:04
+(24) первая ВТ:
Максимум (Период), Физлицо
Вторая - соединение с первой по полям ВТ - туда дотянешь ВидДокумента
26 Dohter2010
 
19.04.18
14:42
(22) Вот я мозгом понимаю что разные , но выборочное тыкание показала что все верно ((
" СотрудникиОрганизацииСрезПоследних.ФизЛицо.Наименование КАК ФизЛицоНаименование " - это часть мне нужна только на этапе проверки результата запроса - в коде её не будет.
(24) есть тут "Ваятели" (((
(25) тогда получается 3 таблицы 1) вытянуть даты последнего документа 2) вытянуть документ и соединить с фио- ?
27 НЕА123
 
19.04.18
15:20
что-не стыкуется (0) и (4)...

ВидДокумента на измерение похоже...
ну так
ВЫБРАТЬ
    СотрудникиОрганизацииСрезПоследних.ФизЛицо КАК ФизЛицо,
    ПаспортныеДанныеФизЛицСрезПоследних.ВидДокумента КАК ВидДокумента,
    ПаспортныеДанныеФизЛицСрезПоследних.Период КАК Период
ИЗ
    РегистрСведений.СотрудникиОрганизации.СрезПоследних(,Организация = &Организация ) КАК СотрудникиОрганизацииСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних КАК ПаспортныеДанныеФизЛицСрезПоследних
        ПО СотрудникиОрганизацииСрезПоследних.ФизЛицо = ПаспортныеДанныеФизЛицСрезПоследних.Физлицо
28 dezss
 
19.04.18
15:37
(26) выборочное тыканье - не показатель...
подготовь данные, которые дадут заведомо неправильный результат на твоем запросе, и все увидишь

на этапе проверки лучше тоже писать оптимально, иначе привыкнешь gbcfnm говнокод)))
29 dezss
 
19.04.18
15:37
(28) gbcfnm -> писать
30 olegves
 
19.04.18
15:41
(26) срез по документам можешь не трогать - делай как в (25) 2 временные таблицы и вторую временную (это твой срез) соединяй с виртуальной по документам
31 olegves
 
19.04.18
15:41
+(30) соединяй как в (0)
32 dezss
 
19.04.18
15:47
(30) больше ВТ полезных и не очень?
зачем вторая ВТ, если все это можно сделать в результирующем запросе?
33 olegves
 
19.04.18
16:03
(32) так понятнее объяснять
34 Dohter2010
 
19.04.18
17:08
(32)в каком результирующем запросе ?
(31) (30)   я так и сделал (28) - не пойму как подготовить заведомо не те данные  у меня только виддокумента и период (в базе часто встречаются по несколько доков у человека (до 6) а поскольку там переодический регистр то две записи на одно число не заведешь)
Подскажи тогда как без "ФизЛицоНаименование" упорядочить по фамилии. от говнокода конечно стараюсь избавляться !
Спасибо всем, что откликнулись. думал простая задача а растянулось на целый день.
35 dezss
 
20.04.18
10:21
(34) блин...и ты нам парил мозг...сразу надо было говорить, что 2 дока на одно число не заведешь (руки бы оторвать тому, кто это проектировал).

А данные подготовь
1. Вычисли какой из видов документа возвращается, если в запросе указать Максимум(ВидДокумента).
2. Сделай последней датой другой вид документа, не тот, что получился в пункте 1.
3. Выполни свой запрос из (21) и увидишь, что дата будет из пункта 2, а документ из пункта 1, а это некорректно.

По поводу наименования. Делай так (твой 2-й запрос из (18)):
ВЫБРАТЬ
    ПаспортныеДанныеФизЛицСрезПоследних.ВидДокумента КАК ВидДокумента,
    МАКСИМУМ(ПаспортныеДанныеФизЛицСрезПоследних.Период) КАК Период,
    ПаспортныеДанныеФизЛицСрезПоследних.Физлицо КАК Физлицо,
    ФизЛица.Наименование КАК ФизлицоНаименование
ИЗ
    РегистрСведений.СотрудникиОрганизации.СрезПоследних(, ) КАК СотрудникиОрганизацииСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ Времянка КАК Времянка
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних КАК ПаспортныеДанныеФизЛицСрезПоследних
            ПО (Времянка.Период = ПаспортныеДанныеФизЛицСрезПоследних.Период)
                И (Времянка.Физлицо = ПаспортныеДанныеФизЛицСрезПоследних.Физлицо)
        ПО (СотрудникиОрганизацииСрезПоследних.ФизЛицо = Времянка.Физлицо)
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизЛица
        ПО СотрудникиОрганизацииСрезПоследних.ФизЛицо = ФизЛица.Ссылка
ГДЕ
    СотрудникиОрганизацииСрезПоследних.Организация = &Организация

СГРУППИРОВАТЬ ПО
    ПаспортныеДанныеФизЛицСрезПоследних.ВидДокумента,
    ПаспортныеДанныеФизЛицСрезПоследних.Физлицо,
    ФизЛица.Наименование

УПОРЯДОЧИТЬ ПО
    ФизлицоНаименование