Имя: Пароль:
1C
1С v8
СрезПоследних замучал меня. Помогитев СКД
, ,
0 temsa
 
21.01.14
23:05
Отлично знаю что Срезпоследних это прежде всего срез различных.
Почему-то всегда я мучаюсь с выводом именно последних записей по конкретным измерениям.
Например есть запрос:

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

Группирую по организациям. Но если сотрудник поменял должность то у меня данных сотрудник выходится дважды.
Как можно избавится от этого? Обычно берут максимальный период.
У меня иногда это не получается. Есть ли простой универсальный подход к этой проблеме?
1 sapphire
 
21.01.14
23:08
(0)
1. Параметр обзови по-другому
2. подумай
2 mistеr
 
21.01.14
23:11
Дважды выходит в каком срезе? :)
И вообще, поясни, что хочешь получить на выходе, и приведи структуру своего регистра.
3 temsa
 
21.01.14
23:16
Делаю так не помогает

ВЫБРАТЬ
    ПитаниеСотрудниковСрезПоследних.Сотрудник,
    ПитаниеСотрудниковСрезПоследних.Организация,
    ПитаниеСотрудниковСрезПоследних.ДатаВремя,
    РаботникиОрганизацийСрезПоследних.Должность
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних КАК РаботникиОрганизацийСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПитаниеСотрудников.СрезПоследних(
                &Период,
                Период В
                    (ВЫБРАТЬ
                        МАКСИМУМ(РаботникиОрганизацийСрезПоследних.Период)
                    ИЗ
                        РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Период, ) КАК РаботникиОрганизацийСрезПоследних)) КАК ПитаниеСотрудниковСрезПоследних
        ПО (ПитаниеСотрудниковСрезПоследних.Сотрудник = РаботникиОрганизацийСрезПоследних.Физлицо)
ГДЕ
    ПитаниеСотрудниковСрезПоследних.ПериодПитания = &ПериодПитания
4 temsa
 
21.01.14
23:20
(2)
РС- "ПитаниеСотрудников"
Измерения = Организация, ФизЛицо, ПериодПитания
Ресурс = ДатаПитания

РС- "РаботникиОрганизаций"
Измерения = (как минимум 4-5)
Ресурсы = (тоже 3-4 шт) Но "должность" как раз ресурс.

Мне нужно вывести список физлиц по организациям всех питающихся но с их должностями на определенную дату и период питания.
5 sapphire
 
21.01.14
23:23
(4) Ошибка в запросе к РаботникиОрганизаций для совместителей, вернее там вообще сложнее
6 temsa
 
21.01.14
23:28
Хотя я знаю что в запросах и в СКД я не гуру, считаю что для РС не хватает в запросах чего-то что позволяет вытаскивать последнюю запись по некотррому отбору а не все различные.

Я вот с нетерпением жду это в 1с8.5 :)))
7 m-serg74
 
21.01.14
23:32
(6) не понятно
в (4) /РС- "ПитаниеСотрудников"
Измерения = Организация, ФизЛицо, ПериодПитания/
а в (3) /ПитаниеСотрудниковСрезПоследних.Сотрудник/
8 temsa
 
21.01.14
23:37
(7) Пардон ФизЛицо = Сотрудник не верно описал измерение.
9 mistеr
 
21.01.14
23:46
(4) ПериодПитания это месяц, а ДатаПитания - день, или как?
Должность нужно взять на какую дату?
10 temsa
 
21.01.14
23:48
(9)Период питание = (завтрак, обед ужин)
11 temsa
 
21.01.14
23:49
ДатаПитания = дата и время конкретно когда он провел карточку в картридере в столовой.
12 temsa
 
21.01.14
23:50
и должность на дату отчета ну это "Период"
13 temsa
 
22.01.14
00:12
есть варианты подскажите?
14 mistеr
 
22.01.14
00:15
(11) Все еще не въезжаю до конца в структуру, но думаю нужно так. Получить в ВТ список интересующих людей из ПитаниеСотрудников, и подставить в параметры РаботникиОрганизаций.СрезПоследних(&Период, Сотрудник В (...))

Потом

РегистрСведений.ПитаниеСотрудников.СрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ
РаботникиОрганизаций.СрезПоследних
15 Dethmont
 
22.01.14
00:23
(13) ВЫБРАТЬ Сотрудник, Должность ПОМЕСТИТЬ ВТ ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Период, )
;
ВЫБРАТЬ
    ПС.Сотрудник,
    ПС.Организация,
    ПС.ДатаВремя,
    ВТ.Должность
ИЗ РегистрСведений.ПитаниеСотрудников.СрезПоследних(&Период,) КАК ПС
ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ
ПО ПС.Сотрудник = ВТ.Сотрудник
16 temsa
 
22.01.14
00:40
(15) Спасибо. Все проделал как тут. НО все равно двойные строки.

"ФИО"    Системный диспетчер производства    20.01.2014 5:42:29
"ФИО"    <>    20.01.2014 5:42:29
17 Dethmont
 
22.01.14
00:44
Совместители?

ВЫБРАТЬ Сотрудник.ФизЛицо КАК Сотрудник, Должность ПОМЕСТИТЬ ВТ ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Период, )
;
ВЫБРАТЬ
    ПС.Сотрудник.ФизЛицо КАК Сотрудник,
    ПС.Организация,
    ПС.ДатаВремя,
    ВТ.Должность
ИЗ РегистрСведений.ПитаниеСотрудников.СрезПоследних(&Период,) КАК ПС
ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ
ПО ПС.Сотрудник.ФизЛицо = ВТ.Сотрудник
18 Dethmont
 
22.01.14
00:45
Организация = &Организация
19 temsa
 
22.01.14
00:47
ДА нет просто один сотрудник поменял должность.
Или перешел из одной организации в другой.
20 temsa
 
22.01.14
00:50
(18) Мне нужно по всем организациям.
21 Dethmont
 
22.01.14
00:50
Это вернет срез последних по сотруднику - т.е. его последнюю должность на дату &Период

А перевод в другую организацию это уже другой сотрудник!
22 temsa
 
22.01.14
00:59
Всем спасибо.

Помогло такой вариант

ВЫБРАТЬ
    РаботникиОрганизацийСрезПоследних.Организация,
    РаботникиОрганизацийСрезПоследних.Физлицо,
    РаботникиОрганизацийСрезПоследних.Должность
ПОМЕСТИТЬ ВТ
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Период, ) КАК РаботникиОрганизацийСрезПоследних
;

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


Хотя не могу понять почему если сотрудник в одной и той же организации если поменяет должность то в отчете  не дублируется?
23 Dethmont
 
22.01.14
01:11
ФизЛицо одно! Сотрудников может быть много!
24 catena
 
22.01.14
08:00
(22)Потому что Организация тоже измерение. СрезПоследних берет последние записи по ключевым полям - т.е. по измерениям. Если у регистра РаботникиОрганизации измерения физлицо, организация, приказ, то именно эти различные наборы и будут срезаться. Если необходим срез последних по неполному набору измерений, придется самостоятельно группировать таблицу по максимальному периоду.
25 m-serg74
 
22.01.14
08:30
(22)
/Помогло такой вариант/

/
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ
        ПО ПитаниеСотрудниковСрезПоследних.Сотрудник = ВТ.Физлицо/

гениально, и как это интересно помогло? :)
26 temsa
 
22.01.14
09:19
(23) Это у меня самописка. Спр сотрудников вообще нет в конфе.
(24) Это все понятно. Но при увольнении и при перемещении
Измерения Физлицо и организация не меняется. Что меня удивило то что при включении в условие организации несмотря на то что есть похожие записио строки не дублируются.
(25) Просто перестало выходить дубли.
Независимо от того, куда вы едете — это в гору и против ветра!