Имя: Пароль:
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) Просто перестало выходить дубли.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший