Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Запрос в запросе 1с 8

Запрос в запросе 1с 8
Я
   Dohter2010
 
19.04.18 - 10:41
Нужна помощь в запросе(ах).

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

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

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует