Имя: Пароль:
1C
1С v8
Как запросом получить срез (РегистрСведений с датой начала и датой окончания).
,
0 budnik
 
28.08.12
16:29
ЗИК РегистрСведений.РаботникиОрганизаций .
Люди работают по графику.Указывает период-дата возврата.
1-10 1смена
11-  2 смена
13-17 1смена

т.е. 14 будет 2 смена.
1 Нуф-Нуф
 
28.08.12
16:29
запросом
2 Wobland
 
28.08.12
16:34
кто понял ТС?
3 ILM
 
гуру
28.08.12
16:35
Или выросли люди которые общались с помощью пейджера, или русский язык поменялся, но уже который пост усиленно силюсь понять, что имел ввиду и что сказал ТС.
4 budnik
 
28.08.12
16:42
Извинияюсь.
Нужно запросом получить состояние работника
на указаную дату из регистра сведений,в котором
помимо реквизита(состояния),есть реквизит завершения
действия.
Пример.
с 1 по 10 работник работает в 1 смену
с 11 и далее по  2 смене
с 13 по 17 по 1смена
все записи

какая смена на 14 число
5 NDN
 
28.08.12
16:43
Срез последних на дату
6 Ненавижу 1С
 
гуру
28.08.12
16:43
(4) и какая же?
7 ILM
 
гуру
28.08.12
16:44
ВЫБОР
КОГДА  ..... ТОГДА 1
КОГДА  ..... ТОГДА 2
КОГДА  ..... ТОГДА 1
КОНЕЦ
8 Wobland
 
28.08.12
16:52
с 11 и далее
...
с 13 по 17

как завуалировал ;)
9 budnik
 
29.08.12
08:21
Проблема в том что делая срез на 18 число
я получаю с 13 по 17 будет 1 смена
и надо делать срез выше 13 и т.д.
10 Wobland
 
29.08.12
08:29
(9) проблема с русским языком, а не "делая срез"
11 WebberNSK
 
29.08.12
08:44
для затравки - запрос, получающий периоды работы сотрудников:
1 строка, сотр, подр, должность, ставка, дата начала, дата окончания

ВЫБРАТЬ
   РаботникиНаНачалоПериода.Сотрудник КАК Сотрудник,
   РаботникиНаНачалоПериода.Организация КАК Организация,
   &НачалоПериода КАК Период,
   ВЫБОР
       КОГДА РаботникиНаНачалоПериода.ПериодЗавершения <= &НачалоПериода
               И РаботникиНаНачалоПериода.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
           ТОГДА РаботникиНаНачалоПериода.ПодразделениеОрганизацииЗавершения
       ИНАЧЕ РаботникиНаНачалоПериода.ПодразделениеОрганизации
   КОНЕЦ КАК ПодразделениеОрганизации,
   ВЫБОР
       КОГДА РаботникиНаНачалоПериода.ПериодЗавершения <= &НачалоПериода
               И РаботникиНаНачалоПериода.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
           ТОГДА РаботникиНаНачалоПериода.ДолжностьЗавершения
       ИНАЧЕ РаботникиНаНачалоПериода.Должность
   КОНЕЦ КАК Должность,
   ВЫБОР
       КОГДА РаботникиНаНачалоПериода.ПериодЗавершения <= &НачалоПериода
               И РаботникиНаНачалоПериода.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
           ТОГДА РаботникиНаНачалоПериода.ЗанимаемыхСтавокЗавершения
       ИНАЧЕ РаботникиНаНачалоПериода.ЗанимаемыхСтавок
   КОНЕЦ КАК ЗанимаемыхСтавок
ПОМЕСТИТЬ ВТ_РаботникиНаНачалоПериода
ИЗ
   РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачалоПериода, Сотрудник.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство) {(Сотрудник).* КАК Сотрудник, (Организация).* КАК Организация}) КАК РаботникиНаНачалоПериода
ГДЕ
   ВЫБОР
           КОГДА РаботникиНаНачалоПериода.ПериодЗавершения <= &НачалоПериода
                   И РаботникиНаНачалоПериода.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
               ТОГДА РаботникиНаНачалоПериода.ПричинаИзмененияСостоянияЗавершения
           ИНАЧЕ РаботникиНаНачалоПериода.ПричинаИзмененияСостояния
       КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
{ГДЕ
   (ВЫБОР
           КОГДА РаботникиНаНачалоПериода.ПериодЗавершения <= &НачалоПериода
                   И РаботникиНаНачалоПериода.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
               ТОГДА РаботникиНаНачалоПериода.ПодразделениеОрганизацииЗавершения
           ИНАЧЕ РаботникиНаНачалоПериода.ПодразделениеОрганизации
       КОНЕЦ).* КАК ПодразделениеОрганизации,
   (ВЫБОР
           КОГДА РаботникиНаНачалоПериода.ПериодЗавершения <= &НачалоПериода
                   И РаботникиНаНачалоПериода.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
               ТОГДА РаботникиНаНачалоПериода.ДолжностьЗавершения
           ИНАЧЕ РаботникиНаНачалоПериода.Должность
       КОНЕЦ).* КАК Должность}
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   РаботникиОрганизаций.Период КАК Период,
   РаботникиОрганизаций.Сотрудник КАК Сотрудник,
   РаботникиОрганизаций.Организация КАК Организация,
   РаботникиОрганизаций.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
   РаботникиОрганизаций.Должность КАК Должность,
   РаботникиОрганизаций.ЗанимаемыхСтавок КАК ЗанимаемыхСтавок,
   РаботникиОрганизаций.ПричинаИзмененияСостояния КАК ПричинаИзмененияСостояния
ПОМЕСТИТЬ ВТ_ДвиженияРаботниковЗаПериод
ИЗ
   РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
   РаботникиОрганизаций.Сотрудник.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
   И РаботникиОрганизаций.Период > &НачалоПериода
   И РаботникиОрганизаций.Период <= &КонецПериода
   И РаботникиОрганизаций.Активность
{ГДЕ
   РаботникиОрганизаций.Сотрудник.*,
   РаботникиОрганизаций.Организация.*}

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   РаботникиОрганизаций.ПериодЗавершения,
   РаботникиОрганизаций.Сотрудник,
   РаботникиОрганизаций.Организация,
   РаботникиОрганизаций.ПодразделениеОрганизацииЗавершения,
   РаботникиОрганизаций.ДолжностьЗавершения,
   РаботникиОрганизаций.ЗанимаемыхСтавокЗавершения,
   РаботникиОрганизаций.ПричинаИзмененияСостоянияЗавершения
ИЗ
   РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
   РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
   И РаботникиОрганизаций.Сотрудник.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
   И РаботникиОрганизаций.ПериодЗавершения > &НачалоПериода
   И РаботникиОрганизаций.ПериодЗавершения <= &КонецПериода
   И (НЕ 1 В
               (ВЫБРАТЬ
                   1
               ИЗ
                   РегистрСведений.РаботникиОрганизаций КАК ПерекрывающиесяПериоды
               ГДЕ
                   ПерекрывающиесяПериоды.Сотрудник = РаботникиОрганизаций.Сотрудник
                   И ПерекрывающиесяПериоды.Период > РаботникиОрганизаций.Период
                   И ПерекрывающиесяПериоды.Период <= РаботникиОрганизаций.ПериодЗавершения))
   И РаботникиОрганизаций.Активность
{ГДЕ
   РаботникиОрганизаций.Сотрудник.*,
   РаботникиОрганизаций.Организация.*}
;

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   ДвиженияРаботников.Сотрудник,
   ДвиженияРаботников.Организация,
   ДвиженияРаботников.Период,
   ДвиженияРаботников.ПодразделениеОрганизации,
   ДвиженияРаботников.Должность,
   ДвиженияРаботников.ЗанимаемыхСтавок
ИЗ
   ВТ_ДвиженияРаботниковЗаПериод КАК ДвиженияРаботников

ИНДЕКСИРОВАТЬ ПО
   Сотрудник,
   Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ПериодыРаботыСотрудников.Сотрудник КАК Сотрудник,
   ПериодыРаботыСотрудников.Организация КАК Организация,
   ПериодыРаботыСотрудников.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
   ПериодыРаботыСотрудников.Должность КАК Должность,
ПериодыРаботыСотрудников.НачалоПериода как НачалоПериода,
ПериодыРаботыСотрудников.КонецПериода как КонецПериода,
   ПериодыРаботыСотрудников.ЗанимаемыхСтавок * (РАЗНОСТЬДАТ(ПериодыРаботыСотрудников.НачалоПериода, ПериодыРаботыСотрудников.КонецПериода, ДЕНЬ) + 1) КАК КоличествоДней

ИЗ
   (ВЫБРАТЬ
       РаботникиНачало.Сотрудник КАК Сотрудник,
       РаботникиНачало.Организация КАК Организация,
       РаботникиНачало.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
       РаботникиНачало.Должность КАК Должность,
       РаботникиНачало.ЗанимаемыхСтавок КАК ЗанимаемыхСтавок,
       РаботникиНачало.Период КАК НачалоПериода,
       МИНИМУМ(ЕСТЬNULL(ДОБАВИТЬКДАТЕ(РаботникиКонец.Период, ДЕНЬ, -1), &КонецПериода)) КАК КонецПериода
   ИЗ
       ВТ_РаботникиОрганизации КАК РаботникиНачало
           ЛЕВОЕ СОЕДИНЕНИЕ ВТ_РаботникиОрганизации КАК РаботникиКонец
           ПО РаботникиНачало.Сотрудник = РаботникиКонец.Сотрудник
               И РаботникиНачало.Период < РаботникиКонец.Период
   {ГДЕ
       РаботникиНачало.ПодразделениеОрганизации.*,
       РаботникиНачало.Должность.*}
   
   СГРУППИРОВАТЬ ПО
       РаботникиНачало.Сотрудник,
       РаботникиНачало.Организация,
       РаботникиНачало.ПодразделениеОрганизации,
       РаботникиНачало.Должность,
       РаботникиНачало.ЗанимаемыхСтавок,
       РаботникиНачало.Период) КАК ПериодыРаботыСотрудников