Имя: Пароль:
1C
1С v8
Разжуйте раз и навсегда СрезПоследних или выбор по максимуму периода?
0 Обработка
 
16.07.14
09:50
Периодически мучаюсь с проблемой выбора значения организации для физлица из РС где достатчно много измерений и ресурсов.

Какое есть изящное решение у вас поделитесь?

Вот мой запрос:

ВЫБРАТЬ
    Отпуск.Ссылка,
    Отпуск.Сотрудник,
    Отпуск.ДатаНачала,
    Отпуск.ДатаОкончания,
    Отпуск.ВидИспользваниеРабочегоВремени,
    РаботникиОрганизацийСрезПоследних.Должность,
    РаботникиОрганизацийСрезПоследних.Организация
ИЗ
    Документ.Невыходы КАК Отпуск
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних КАК РаботникиОрганизацийСрезПоследних
        ПО Отпуск.Сотрудник = РаботникиОрганизацийСрезПоследних.Физлицо
ГДЕ
    Отпуск.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
1 Обработка
 
16.07.14
09:51
Умом я отлично понимаю. Но вот как для списка вытащить последние записи за период? если в этом периоде нет то последний до этого периода?
2 Обработка
 
16.07.14
09:52
так тоже не канает


ВЫБРАТЬ
    Отпуск.Ссылка,
    Отпуск.Сотрудник,
    Отпуск.ДатаНачала,
    Отпуск.ДатаОкончания,
    Отпуск.ВидИспользваниеРабочегоВремени
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.Невыходы КАК Отпуск
ГДЕ
    Отпуск.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
;

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

СГРУППИРОВАТЬ ПО
    РаботникиОрганизацийСрезПоследних.Физлицо,
    РаботникиОрганизацийСрезПоследних.Должность,
    РаботникиОрганизацийСрезПоследних.Организация
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Сотрудник,
    ВТ.Ссылка,
    ВТ.ДатаНачала,
    ВТ.ДатаОкончания,
    ВТ.ВидИспользваниеРабочегоВремени,
    ВТ2.Должность,
    ВТ2.Организация
ИЗ
    ВТ КАК ВТ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
        ПО ВТ.Сотрудник = ВТ2.Физлицо
3 Обработка
 
16.07.14
09:53
для одного физ лица уже делал такое

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


а как для списка?
4 Defender aka LINN
 
16.07.14
09:53
(0) Для начала неплохо бы озвучить - чего ты вообще добиваешься?
5 РенеДекарт
 
16.07.14
09:54
У вас разные предпосылки - СрезПоследних на ЛЮБУЮ дату, максимум периода - только один.
А вы себе что-то другое придумали.
6 Обработка
 
16.07.14
09:57
(4) Я хочу для любого отчета за период ли или на дату всегда вытаскивать по физлицу  (или списку физлиц) его (их) актуальное значение организации.
7 tdm
 
16.07.14
09:58
(4) +1, ну и с физ.лицами непонятно что у вас вопрос вызывает - у сотрудника однозначно всегда физ.лицо можно понять, а вот наоборот уже проблема на одно физ.лицо несколько сотрудников может быть ( и следовательно несколько должностей,подразделений и пр.)...что мы  результате хотим получить ?
8 Обработка
 
16.07.14
09:58
+(6) На деле срезпослених не подходит потому что одно физ лицо побывал в нескольких организациях.
9 tdm
 
16.07.14
09:59
(6) их несколько может быть)
я - физ.лицо одно, но я могу работать и бытьс отрудником в одном отделе по основному месту, в другом по совместительству)
т.е. сотрудников уже два будет на одно физ лицо
10 tdm
 
16.07.14
09:59
(8) или даже так - одно физ.лицо по разным организациям...если в базе несколько фирм
11 Обработка
 
16.07.14
10:02
Зы база самописка!
есть справочник физ лиц
все что касаемо его продвижения в РС РаботникиОрганизаций

данные РС
Измерения

    РаботникиОрганизаций.Период,
    РаботникиОрганизаций.Регистратор,
    РаботникиОрганизаций.НомерСтроки,
    РаботникиОрганизаций.Активность,
    РаботникиОрганизаций.Физлицо,
    РаботникиОрганизаций.Организация,

Ресурсы
    РаботникиОрганизаций.ЗанимаемыхСтавок,
    РаботникиОрганизаций.ПодразделениеОрганизации,
    РаботникиОрганизаций.Должность,
    РаботникиОрганизаций.ВидЗанятости,
    РаботникиОрганизаций.ПричинаИзмененияСостояния,
    РаботникиОрганизаций.ГрафикРаботы,
    РаботникиОрганизаций.Разряд,
Реквизит
    РаботникиОрганизаций.ТабельныйНомер
12 Обработка
 
16.07.14
10:03
точнее!!!

Измерения
    РаботникиОрганизаций.Физлицо,
    РаботникиОрганизаций.Организация,
13 tdm
 
16.07.14
10:04
(12) посмотрите если у вас под рукой есть ЗУП - ПолучитьФизлицаСотрудниковПодразделенияНаДату() там всё непросто((( пакетный запрос где они постепенно обрабатывают возможные варианты и осекают ненужных сотрудников для физ.лица
14 Обработка
 
16.07.14
10:04
В базе фирм несколько и сотры бывают качуют.
15 tdm
 
16.07.14
10:06
(14) это нормально) смотрите типовые методы - или даже лучше их использовать, там довольно ветвистые непростые запросы но к сожалению по-простому там никак((((
16 Обработка
 
16.07.14
10:20
(15) Как это не нормально.
Водитель работал в компании А уволился перешел в компанию Б.
У нас базе 7 фирм.
17 mikeA
 
16.07.14
10:20
(14) т.е. тебе надо для каждой даты из периода отчёта определить организацию физлица при условии что физлицо может менять организации в течение периода?
18 samozvanec
 
16.07.14
10:30
а что, если сотрудник числится на пол ставки еще в одной организации? вообще очень даже срез последних, только надо еще определять, что вот из этих он уже уволился
19 Enders
 
16.07.14
10:37
СрезПоследних ты получаешь на одну дату.
Максимумом ты можешь получить тоже что и СрезПоследних(при чем по скорости будет примерно одно и тоже) или получить актуальную инфу на каждую из дат из своего отчета(но для этого нужда таблица дат).

Пример. Формируешь отчет за месяц, Срезом ты можешь получить актуальные данные на началомесяца/конецмесяца (или делать несколько срезов). Если сотрудник перемещался внутри месяца и тебе надо это видеть, то лучше делать через СрезПоследних(На начало месяца)+через Максимум получать актуальные данные на каждый день из твоего отчета.
20 Обработка
 
16.07.14
10:41
Вот  решение: СПАСИБО ЧУВАКУ!!! Всегда мне помогает в трудную минуту!

ВЫБРАТЬ
    Отпуск.Ссылка,
    Отпуск.Сотрудник,
    Отпуск.ДатаНачала,
    Отпуск.ДатаОкончания,
    Отпуск.ВидИспользваниеРабочегоВремени
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.Невыходы КАК Отпуск
ГДЕ
    Отпуск.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РаботникиОрганизаций.Физлицо,
    МАКСИМУМ(РаботникиОрганизаций.Период) КАК Период
ПОМЕСТИТЬ ВТ2
ИЗ
    РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
    РаботникиОрганизаций.Период <= &Период

СГРУППИРОВАТЬ ПО
    РаботникиОрганизаций.Физлицо
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Ссылка,
    ВТ.Сотрудник,
    ВТ.ДатаНачала,
    ВТ.ДатаОкончания,
    ВТ.ВидИспользваниеРабочегоВремени,
    ВТ3.Организация,
    ВТ3.Должность
ИЗ
    ВТ КАК ВТ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ3 КАК ВТ3
        ПО ВТ.Сотрудник = ВТ3.Физлицо
21 0wl
 
16.07.14
10:46
В 8.3 как раз для таких задач ввели дополнительные физические таблицы со срезом первых/срезом последних (хранятся только крайние значения -- самый ранний и самый поздний). И теперь можно смело к динамическому списку, скажем, номенклатуры прикручивать последние цены и не думать о том, в какой ночной кошмар для сервера это выливается
22 Обработка
 
16.07.14
10:48
(21) Так у меня как раз ведь 8.3 да еще конфа самописка.

Как ее юзать то?
23 Обработка
 
16.07.14
10:51
(21) У меня релиз 8.3.678 там ничего такого я не наблюдал пока еще.
24 0wl
 
16.07.14
10:52
(22) Там, по идее, в свойствах регистра галка должна быть. При ее включении создаются физические таблицы итогов и все обращения к СрезПервых и СрезПоследних без указания периода перенаправляются на эти таблицы
25 Обработка
 
16.07.14
18:11
(24) не про  это - "Разрешить итоги: срез последних"
26 0wl
 
16.07.14
18:27
(25) да, оно
27 Обработка
 
17.07.14
07:34
(26) Помоему это не про то.

Создал тестовую конфу и поставил галочку.
ничего не изменилось.
28 catena
 
17.07.14
08:10
Измерения
    РаботникиОрганизаций.Физлицо,
    РаботникиОрганизаций.Организация,

Вот это мощно. Именно поэтому срез последних с этим регистром теперь не поиспользуешь. Только с выбором максимального периода.
29 Обработка
 
17.07.14
11:48
(28) А что тут такого?
В этой самописке у меня нет  справочника Сотроудники.
И в этой базе одновремено 6-8 основых фирм и еще куча подрядчиков ведется.
Принадлежность работника к фирме определяется этим регистром.
Перемещения есть. Не много но есть.
30 catena
 
17.07.14
12:42
(29)То, что срез последних - он в разрезе измерений. Т.е. по каждому уникальному набору измерений.
Петров/филиал1
Петров/филиал2
для среза последних - разные ключевые пары и по каждой будет срез последних.
Если хочется получать историю именно по сотруднику, то измерение должно быть одно - Сотрудник. Ну или вот в моей типовой УПП в организацию пишется Головная организация, а структурная принадлежность разруливается реквизитом ОбособленноеПодразделение.

До сотрудников в стандартных регистрах работников были измерения Физлицо и Приказ(о приеме), что тоже создавало трудности с крайним отбором по человеку.
31 Обработка
 
18.07.14
07:00
(30) ДА, все это отлично понял. Мня смутило "Вот это мощно".
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший