Имя: Пароль:
1C
1С v8
Как получить из отдельных дат периоды в запросе?
0 inetguru
 
31.10.11
19:59
Товарищи, подскажите, как сделать запрос.
Есть табель учета рабочего времени, есть регистр, где хранится информация о состоянии работника по табелю на каждый отдельно взятый день.  Нужно из последовательности этих дат получить периоды состояний работника.
Вот пример исходных данных:
Период                ВИДИСПОЛЬЗОВАНИЯРАБОЧЕГОВРЕМЕНИ
01.09.2010 0:00:00    Дни явок
02.09.2010 0:00:00    Дни явок
03.09.2010 0:00:00    Дни явок
06.09.2010 0:00:00    Нетрудоспособность
07.09.2010 0:00:00    Нетрудоспособность
08.09.2010 0:00:00    Нетрудоспособность
09.09.2010 0:00:00    Нетрудоспособность
10.09.2010 0:00:00    Нетрудоспособность
11.09.2010 0:00:00    Нетрудоспособность
12.09.2010 0:00:00    Нетрудоспособность
13.09.2010 0:00:00    Нетрудоспособность
14.09.2010 0:00:00    Нетрудоспособность
15.09.2010 0:00:00    Нетрудоспособность
16.09.2010 0:00:00    Нетрудоспособность
17.09.2010 0:00:00    Нетрудоспособность
20.09.2010 0:00:00    Дни явок
21.09.2010 0:00:00    Дни явок
22.09.2010 0:00:00    Дни явок
23.09.2010 0:00:00    Дни явок
24.09.2010 0:00:00    Дни явок
27.09.2010 0:00:00    Дни явок
28.09.2010 0:00:00    Дни явок
29.09.2010 0:00:00    Дни явок
30.09.2010 0:00:00    Дни явок
В результате работы запроса нужно получить вот это:
НачалоПериода    ОкончаниеПериода      ВИДИСПОЛЬЗОВАНИЯРАБОЧЕГОВРЕМЕНИ
01.09.2010 0:00:00    03.09.2010 0:00:00    Дни явок
06.09.2010 0:00:00    17.09.2010 0:00:00    Нетрудоспособность
20.09.2010 0:00:00    30.09.2010 0:00:00    Дни явок
Т.е. состояние работника меняется если указано другое состояние (это касается разрыва с 25.09.10 по 26.09.10 – тут ничего не меняется, поэтому период не прерывается на 24.09.2011).
Мозг на грани кипения.
1 Sersh
 
31.10.11
20:05
(0) Без запроса никак?
2 Живой Ископаемый
 
31.10.11
20:10
3 inetguru
 
01.11.11
01:45
Ура!!! Спасибо за ссылку. Воспользовался данными темы и вот что получил:
<PRE style="color: blue">ВЫБРАТЬ
   ВложенныйЗапрос<span style="color: red">.</span>ПериодНач КАК ПериодНач<span style="color: red">,</span>
   ВложенныйЗапрос<span style="color: red">.</span>ПериодКон<span style="color: red">,</span>
   ВложенныйЗапрос<span style="color: red">.</span>ВидИспользованияРабочегоВремени
ИЗ
   <span style="color: red">(</span>ВЫБРАТЬ
       РабочееВремяНач<span style="color: red">.</span>Период КАК ПериодНач<span style="color: red">,</span>
       РабочееВремяКон<span style="color: red">.</span>Период КАК ПериодКон<span style="color: red">,</span>
       РабочееВремяНач<span style="color: red">.</span>ВидИспользованияРабочегоВремени КАК ВидИспользованияРабочегоВремени<span style="color: red">,</span>
       РабочееВремяНач<span style="color: red">.</span>Сотрудник КАК Сотрудник
   ИЗ
       РегистрНакопления<span style="color: red">.</span>РабочееВремяРаботниковОрганизаций КАК РабочееВремяНач
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления<span style="color: red">.</span>РабочееВремяРаботниковОрганизаций КАК РабочееВремяКон
               ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления<span style="color: red">.</span>РабочееВремяРаботниковОрганизаций КАК РабочееВремяК
               ПО <span style="color: red">(</span>РАЗНОСТЬДАТ<span style="color: red">(</span>РабочееВремяКон<span style="color: red">.</span>Период<span style="color: red">,</span> РабочееВремяК<span style="color: red">.</span>Период<span style="color: red">,</span> ДЕНЬ<span style="color: red">)</span> <span style="color: red">=</span> <span style="color: black">1</span><span style="color: red">)</span>
                   И РабочееВремяКон<span style="color: red">.</span>Сотрудник <span style="color: red">=</span> РабочееВремяК<span style="color: red">.</span>Сотрудник
                   И РабочееВремяКон<span style="color: red">.</span>ВидИспользованияРабочегоВремени <span style="color: red">=</span> РабочееВремяК<span style="color: red">.</span>ВидИспользованияРабочегоВремени
           ПО РабочееВремяНач<span style="color: red">.</span>Период <span style="color: red"><=</span> РабочееВремяКон<span style="color: red">.</span>Период
               И РабочееВремяНач<span style="color: red">.</span>Сотрудник <span style="color: red">=</span> РабочееВремяКон<span style="color: red">.</span>Сотрудник
               И РабочееВремяНач<span style="color: red">.</span>ВидИспользованияРабочегоВремени <span style="color: red">=</span> РабочееВремяКон<span style="color: red">.</span>ВидИспользованияРабочегоВремени
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления<span style="color: red">.</span>РабочееВремяРаботниковОрганизаций КАК РабочееВремяН
           ПО <span style="color: red">(</span>РАЗНОСТЬДАТ<span style="color: red">(</span>РабочееВремяН<span style="color: red">.</span>Период<span style="color: red">,</span> РабочееВремяНач<span style="color: red">.</span>Период<span style="color: red">,</span> ДЕНЬ<span style="color: red">)</span> <span style="color: red">=</span> <span style="color: black">1</span><span style="color: red">)</span>
               И РабочееВремяНач<span style="color: red">.</span>Сотрудник <span style="color: red">=</span> РабочееВремяН<span style="color: red">.</span>Сотрудник
               И РабочееВремяНач<span style="color: red">.</span>ВидИспользованияРабочегоВремени <span style="color: red">=</span> РабочееВремяН<span style="color: red">.</span>ВидИспользованияРабочегоВремени
   ГДЕ
       РабочееВремяН<span style="color: red">.</span>Период ЕСТЬ NULL
       И РабочееВремяК<span style="color: red">.</span>Период ЕСТЬ NULL
       И РабочееВремяНач<span style="color: red">.</span>Сотрудник <span style="color: red">=</span> <span style="color: brown">&Сотрудник
</span>        И РабочееВремяНач<span style="color: red">.</span>Период <span style="color: red">>=</span> <span style="color: brown">&НачалоПериода
</span>        И РабочееВремяНач<span style="color: red">.</span>Период <span style="color: red"><=</span> <span style="color: brown">&КонецПериода
</span>        И РабочееВремяКон<span style="color: red">.</span>Период <span style="color: red">>=</span> <span style="color: brown">&НачалоПериода
</span>        И РабочееВремяКон<span style="color: red">.</span>Период <span style="color: red"><=</span> <span style="color: brown">&КонецПериода</span><span style="color: red">)</span> КАК ВложенныйЗапрос
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления<span style="color: red">.</span>РабочееВремяРаботниковОрганизаций КАК РабочееВремя
       ПО <span style="color: red">(</span>РабочееВремя<span style="color: red">.</span>Период МЕЖДУ ВложенныйЗапрос<span style="color: red">.</span>ПериодНач И ВложенныйЗапрос<span style="color: red">.</span>ПериодКон<span style="color: red">)</span>
           И ВложенныйЗапрос<span style="color: red">.</span>ВидИспользованияРабочегоВремени <span style="color: red">=</span> РабочееВремя<span style="color: red">.</span>ВидИспользованияРабочегоВремени
           И ВложенныйЗапрос<span style="color: red">.</span>Сотрудник <span style="color: red">=</span> РабочееВремя<span style="color: red">.</span>Сотрудник

СГРУППИРОВАТЬ ПО
   ВложенныйЗапрос<span style="color: red">.</span>ПериодНач<span style="color: red">,</span>
   ВложенныйЗапрос<span style="color: red">.</span>ПериодКон<span style="color: red">,</span>
   ВложенныйЗапрос<span style="color: red">.</span>ВидИспользованияРабочегоВремени

ИМЕЮЩИЕ
   КОЛИЧЕСТВО<span style="color: red">(</span>РАЗЛИЧНЫЕ РабочееВремя<span style="color: red">.</span>Период<span style="color: red">)</span> <span style="color: red">=</span> РАЗНОСТЬДАТ<span style="color: red">(</span>ВложенныйЗапрос<span style="color: red">.</span>ПериодНач<span style="color: red">,</span> ВложенныйЗапрос<span style="color: red">.</span>ПериодКон<span style="color: red">,</span> ДЕНЬ<span style="color: red">)</span> <span style="color: red">+</span> <span style="color: black">1
</span>
УПОРЯДОЧИТЬ ПО
   ПериодНач </PRE>
4 inetguru
 
01.11.11
01:47
Извинюсь за предыдущий пост.Хотел фот так:
[COLOR=#0000FF]ВЫБРАТЬ
&nbsp; &nbsp;ВложенныйЗапрос[COLOR=#FF0000].[/COLOR]ПериодНач КАК ПериодНач[COLOR=#FF0000],[/COLOR]
&nbsp; &nbsp;ВложенныйЗапрос[COLOR=#FF0000].[/COLOR]ПериодКон[COLOR=#FF0000],[/COLOR]
&nbsp; &nbsp;ВложенныйЗапрос[COLOR=#FF0000].[/COLOR]ВидИспользованияРабочегоВремени
ИЗ
&nbsp; &nbsp;[COLOR=#FF0000]([/COLOR]ВЫБРАТЬ
&nbsp; &nbsp;&nbsp; &nbsp;РабочееВремяНач[COLOR=#FF0000].[/COLOR]Период КАК ПериодНач[COLOR=#FF0000],[/COLOR]
&nbsp; &nbsp;&nbsp; &nbsp;РабочееВремяКон[COLOR=#FF0000].[/COLOR]Период КАК ПериодКон[COLOR=#FF0000],[/COLOR]
&nbsp; &nbsp;&nbsp; &nbsp;РабочееВремяНач[COLOR=#FF0000].[/COLOR]ВидИспользованияРабочегоВремени КАК ВидИспользованияРабочегоВремени[COLOR=#FF0000],[/COLOR]
&nbsp; &nbsp;&nbsp; &nbsp;РабочееВремяНач[COLOR=#FF0000].[/COLOR]Сотрудник КАК Сотрудник
&nbsp; &nbsp;ИЗ
&nbsp; &nbsp;&nbsp; &nbsp;РегистрНакопления[COLOR=#FF0000].[/COLOR]РабочееВремяРаботниковОрганизаций КАК РабочееВремяНач
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления[COLOR=#FF0000].[/COLOR]РабочееВремяРаботниковОрганизаций КАК РабочееВремяКон
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления[COLOR=#FF0000].[/COLOR]РабочееВремяРаботниковОрганизаций КАК РабочееВремяК
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;ПО [COLOR=#FF0000]([/COLOR]РАЗНОСТЬДАТ[COLOR=#FF0000]([/COLOR]РабочееВремяКон[COLOR=#FF0000].[/COLOR]Период[COLOR=#FF0000],[/COLOR] РабочееВремяК[COLOR=#FF0000].[/COLOR]Период[COLOR=#FF0000],[/COLOR] ДЕНЬ[COLOR=#FF0000])[/COLOR] [COLOR=#FF0000]=[/COLOR] [COLOR=#00FF00]1[/COLOR][COLOR=#FF0000])[/COLOR]
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;И РабочееВремяКон[COLOR=#FF0000].[/COLOR]Сотрудник [COLOR=#FF0000]=[/COLOR] РабочееВремяК[COLOR=#FF0000].[/COLOR]Сотрудник
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;И РабочееВремяКон[COLOR=#FF0000].[/COLOR]ВидИспользованияРабочегоВремени [COLOR=#FF0000]=[/COLOR] РабочееВремяК[COLOR=#FF0000].[/COLOR]ВидИспользованияРабочегоВремени
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;ПО РабочееВремяНач[COLOR=#FF0000].[/COLOR]Период [COLOR=#FF0000]<=[/COLOR] РабочееВремяКон[COLOR=#FF0000].[/COLOR]Период
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;И РабочееВремяНач[COLOR=#FF0000].[/COLOR]Сотрудник [COLOR=#FF0000]=[/COLOR] РабочееВремяКон[COLOR=#FF0000].[/COLOR]Сотрудник
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;И РабочееВремяНач[COLOR=#FF0000].[/COLOR]ВидИспользованияРабочегоВремени [COLOR=#FF0000]=[/COLOR] РабочееВремяКон[COLOR=#FF0000].[/COLOR]ВидИспользованияРабочегоВремени
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления[COLOR=#FF0000].[/COLOR]РабочееВремяРаботниковОрганизаций КАК РабочееВремяН
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;ПО [COLOR=#FF0000]([/COLOR]РАЗНОСТЬДАТ[COLOR=#FF0000]([/COLOR]РабочееВремяН[COLOR=#FF0000].[/COLOR]Период[COLOR=#FF0000],[/COLOR] РабочееВремяНач[COLOR=#FF0000].[/COLOR]Период[COLOR=#FF0000],[/COLOR] ДЕНЬ[COLOR=#FF0000])[/COLOR] [COLOR=#FF0000]=[/COLOR] [COLOR=#00FF00]1[/COLOR][COLOR=#FF0000])[/COLOR]
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;И РабочееВремяНач[COLOR=#FF0000].[/COLOR]Сотрудник [COLOR=#FF0000]=[/COLOR] РабочееВремяН[COLOR=#FF0000].[/COLOR]Сотрудник
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;И РабочееВремяНач[COLOR=#FF0000].[/COLOR]ВидИспользованияРабочегоВремени [COLOR=#FF0000]=[/COLOR] РабочееВремяН[COLOR=#FF0000].[/COLOR]ВидИспользованияРабочегоВремени
&nbsp; &nbsp;ГДЕ
&nbsp; &nbsp;&nbsp; &nbsp;РабочееВремяН[COLOR=#FF0000].[/COLOR]Период ЕСТЬ NULL
&nbsp; &nbsp;&nbsp; &nbsp;И РабочееВремяК[COLOR=#FF0000].[/COLOR]Период ЕСТЬ NULL
&nbsp; &nbsp;&nbsp; &nbsp;И РабочееВремяНач[COLOR=#FF0000].[/COLOR]Сотрудник [COLOR=#FF0000]=[/COLOR] [COLOR=brown]&Сотрудник
[/COLOR]&nbsp; &nbsp;&nbsp; &nbsp;И РабочееВремяНач[COLOR=#FF0000].[/COLOR]Период [COLOR=#FF0000]>=[/COLOR] [COLOR=brown]&НачалоПериода
[/COLOR]&nbsp; &nbsp;&nbsp; &nbsp;И РабочееВремяНач[COLOR=#FF0000].[/COLOR]Период [COLOR=#FF0000]<=[/COLOR] [COLOR=brown]&КонецПериода
[/COLOR]&nbsp; &nbsp;&nbsp; &nbsp;И РабочееВремяКон[COLOR=#FF0000].[/COLOR]Период [COLOR=#FF0000]>=[/COLOR] [COLOR=brown]&НачалоПериода
[/COLOR]&nbsp; &nbsp;&nbsp; &nbsp;И РабочееВремяКон[COLOR=#FF0000].[/COLOR]Период [COLOR=#FF0000]<=[/COLOR] [COLOR=brown]&КонецПериода[/COLOR][COLOR=#FF0000])[/COLOR] КАК ВложенныйЗапрос
&nbsp; &nbsp;&nbsp; &nbsp;ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления[COLOR=#FF0000].[/COLOR]РабочееВремяРаботниковОрганизаций КАК РабочееВремя
&nbsp; &nbsp;&nbsp; &nbsp;ПО [COLOR=#FF0000]([/COLOR]РабочееВремя[COLOR=#FF0000].[/COLOR]Период МЕЖДУ ВложенныйЗапрос[COLOR=#FF0000].[/COLOR]ПериодНач И ВложенныйЗапрос[COLOR=#FF0000].[/COLOR]ПериодКон[COLOR=#FF0000])[/COLOR]
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;И ВложенныйЗапрос[COLOR=#FF0000].[/COLOR]ВидИспользованияРабочегоВремени [COLOR=#FF0000]=[/COLOR] РабочееВремя[COLOR=#FF0000].[/COLOR]ВидИспользованияРабочегоВремени
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;И ВложенныйЗапрос[COLOR=#FF0000].[/COLOR]Сотрудник [COLOR=#FF0000]=[/COLOR] РабочееВремя[COLOR=#FF0000].[/COLOR]Сотрудник

СГРУППИРОВАТЬ ПО
&nbsp; &nbsp;ВложенныйЗапрос[COLOR=#FF0000].[/COLOR]ПериодНач[COLOR=#FF0000],[/COLOR]
&nbsp; &nbsp;ВложенныйЗапрос[COLOR=#FF0000].[/COLOR]ПериодКон[COLOR=#FF0000],[/COLOR]
&nbsp; &nbsp;ВложенныйЗапрос[COLOR=#FF0000].[/COLOR]ВидИспользованияРабочегоВремени

ИМЕЮЩИЕ
&nbsp; &nbsp;КОЛИЧЕСТВО[COLOR=#FF0000]([/COLOR]РАЗЛИЧНЫЕ РабочееВремя[COLOR=#FF0000].[/COLOR]Период[COLOR=#FF0000])[/COLOR] [COLOR=#FF0000]=[/COLOR] РАЗНОСТЬДАТ[COLOR=#FF0000]([/COLOR]ВложенныйЗапрос[COLOR=#FF0000].[/COLOR]ПериодНач[COLOR=#FF0000],[/COLOR] ВложенныйЗапрос[COLOR=#FF0000].[/COLOR]ПериодКон[COLOR=#FF0000],[/COLOR] ДЕНЬ[COLOR=#FF0000])[/COLOR] [COLOR=#FF0000]+[/COLOR] [COLOR=#00FF00]1
[/COLOR]
УПОРЯДОЧИТЬ ПО
&nbsp; &nbsp;ПериодНач [/COLOR]
5 inetguru
 
01.11.11
01:48
Блин, вот это точно оно:
ВЫБРАТЬ
   ВложенныйЗапрос.ПериодНач КАК ПериодНач,
   ВложенныйЗапрос.ПериодКон,
   ВложенныйЗапрос.ВидИспользованияРабочегоВремени
ИЗ
   (ВЫБРАТЬ
       РабочееВремяНач.Период КАК ПериодНач,
       РабочееВремяКон.Период КАК ПериодКон,
       РабочееВремяНач.ВидИспользованияРабочегоВремени КАК ВидИспользованияРабочегоВремени,
       РабочееВремяНач.Сотрудник КАК Сотрудник
   ИЗ
       РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяНач
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяКон
               ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяК
               ПО (РАЗНОСТЬДАТ(РабочееВремяКон.Период, РабочееВремяК.Период, ДЕНЬ) = 1)
                   И РабочееВремяКон.Сотрудник = РабочееВремяК.Сотрудник
                   И РабочееВремяКон.ВидИспользованияРабочегоВремени = РабочееВремяК.ВидИспользованияРабочегоВремени
           ПО РабочееВремяНач.Период <= РабочееВремяКон.Период
               И РабочееВремяНач.Сотрудник = РабочееВремяКон.Сотрудник
               И РабочееВремяНач.ВидИспользованияРабочегоВремени = РабочееВремяКон.ВидИспользованияРабочегоВремени
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяН
           ПО (РАЗНОСТЬДАТ(РабочееВремяН.Период, РабочееВремяНач.Период, ДЕНЬ) = 1)
               И РабочееВремяНач.Сотрудник = РабочееВремяН.Сотрудник
               И РабочееВремяНач.ВидИспользованияРабочегоВремени = РабочееВремяН.ВидИспользованияРабочегоВремени
   ГДЕ
       РабочееВремяН.Период ЕСТЬ NULL
       И РабочееВремяК.Период ЕСТЬ NULL
       И РабочееВремяНач.Сотрудник = &Сотрудник
       И РабочееВремяНач.Период >= &НачалоПериода
       И РабочееВремяНач.Период <= &КонецПериода
       И РабочееВремяКон.Период >= &НачалоПериода
       И РабочееВремяКон.Период <= &КонецПериода) КАК ВложенныйЗапрос
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремя
       ПО (РабочееВремя.Период МЕЖДУ ВложенныйЗапрос.ПериодНач И ВложенныйЗапрос.ПериодКон)
           И ВложенныйЗапрос.ВидИспользованияРабочегоВремени = РабочееВремя.ВидИспользованияРабочегоВремени
           И ВложенныйЗапрос.Сотрудник = РабочееВремя.Сотрудник

СГРУППИРОВАТЬ ПО
   ВложенныйЗапрос.ПериодНач,
   ВложенныйЗапрос.ПериодКон,
   ВложенныйЗапрос.ВидИспользованияРабочегоВремени

ИМЕЮЩИЕ
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РабочееВремя.Период) = РАЗНОСТЬДАТ(ВложенныйЗапрос.ПериодНач, ВложенныйЗапрос.ПериодКон, ДЕНЬ) + 1

УПОРЯДОЧИТЬ ПО
   ПериодНач
2 + 2 = 3.9999999999999999999999999999999...