Имя: Пароль:
1C
1С v8
помогите с запросом
,
0 jenny_tea
 
24.04.12
09:49
Есть у меня такой запрос:
ВЫБРАТЬ
   |    ОтветственныеЛицаОрганизаций.Период КАК Период,
   |    ОтветственныеЛицаОрганизаций.ФизическоеЛицо
   |ИЗ
   |    РегистрСведений.ОтветственныеЛицаОрганизаций КАК ОтветственныеЛицаОрганизаций
   |ГДЕ
   |    ОтветственныеЛицаОрганизаций.Период <= &ДатаКон
   |    И ВЫБОР
   |            КОГДА &ВыбПодразделение
   |                ТОГДА ОтветственныеЛицаОрганизаций.СтруктурнаяЕдиница = &СтруктурнаяЕдиница
   |            ИНАЧЕ ИСТИНА
   |        КОНЕЦ
   |    И ОтветственныеЛицаОрганизаций.Период > &ДатаНач
   |
   |ОБЪЕДИНИТЬ ВСЕ
   |
   |ВЫБРАТЬ
   |    ОтветственныеЛицаОрганизацийСрезПоследних.СтруктурнаяЕдиница,
   |    &ДатаНач,
   |    ОтветственныеЛицаОрганизацийСрезПоследних.ФизическоеЛицо,
   |    ОтветственныеЛицаОрганизацийСрезПоследних.Должность,
   |    ОтветственныеЛицаОрганизацийСрезПоследних.ОтветственноеЛицо
   |ИЗ
   |    РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(&ДатаНач, ) КАК ОтветственныеЛицаОрганизацийСрезПоследних
   |ГДЕ
   | ОтветственныеЛицаОрганизацийСрезПоследних.СтруктурнаяЕдиница = &СтруктурнаяЕдиница
   |
   |УПОРЯДОЧИТЬ ПО
   |    Период УБЫВ
   |АВТОУПОРЯДОЧИВАНИЕ

ДатаНач=01.04, ДатаКон=30.04
Выдает примерно следующую картинку:
Петров 25.04
Иванов 20.04
Петров 14.04
Сидоров 01.04

А мне в итоге надо получить, кто сколько дней был ответственным в этом периоде, т.е.:
Петров 6+6=12
Иванов 5
Сидоров 13

Функцию которая бы это сделала я уже написала, но уже используя результат запроса, а хотелось бы сразу из запроса получить
1 Нуф-Нуф
 
24.04.12
09:51
разностьдат? не?
2 jenny_tea
 
24.04.12
09:52
разность дат с чем. как взять разност дат между смежными записями
3 Нуф-Нуф
 
24.04.12
09:53
сделай в двух колонках
4 butterbean
 
24.04.12
09:53
запрос нерабочий
5 jenny_tea
 
24.04.12
09:55
запрос исправляю:
ВЫБРАТЬ
   |    ОтветственныеЛицаОрганизаций.Период КАК Период,
   |    ОтветственныеЛицаОрганизаций.ФизическоеЛицо
   |ИЗ
   |    РегистрСведений.ОтветственныеЛицаОрганизаций КАК ОтветственныеЛицаОрганизаций
   |ГДЕ
   |    ОтветственныеЛицаОрганизаций.Период <= &ДатаКон
   |    ОтветственныеЛицаОрганизаций.СтруктурнаяЕдиница = &СтруктурнаяЕдиница
   |    И ОтветственныеЛицаОрганизаций.Период > &ДатаНач
   |
   |ОБЪЕДИНИТЬ ВСЕ
   |
   |ВЫБРАТЬ
   |    &ДатаНач,
   |    ОтветственныеЛицаОрганизацийСрезПоследних.ФизическоеЛицо
   |ИЗ
   |    РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(&ДатаНач, ) КАК ОтветственныеЛицаОрганизацийСрезПоследних
   |ГДЕ
   | ОтветственныеЛицаОрганизацийСрезПоследних.СтруктурнаяЕдиница = &СтруктурнаяЕдиница
   |
   |УПОРЯДОЧИТЬ ПО
   |    Период УБЫВ
   |АВТОУПОРЯДОЧИВАНИЕ
6 jenny_tea
 
24.04.12
09:57
(3) что записывать во вторую колонку.
7 MadHead
 
24.04.12
10:05
можно такую таблицу соеденить с самой собой, по условию дата1 > дата2, затем сгрупировать и взять максимум по дате2 и дате1 будет тебе 2 колонки дата начала и дата конца
8 jenny_tea
 
24.04.12
10:11
А мне ведь не надо перекрестие Петров 25.04 и Сидоров 01.04, или я как-то не так понимаю что в перекрестие попадут не только смежные но и более дальние
9 Ненавижу 1С
 
гуру
24.04.12
10:16
а если Петров с 01 по 15 Руководитель, а 10 по 20 Главный бухгалтер, сколько ему ставить дней?
10 НЕА123
 
24.04.12
10:18
(8)
примерный перевод (7)

ЛЕВОЕ СОЕДИНЕНИЕ
.....
МАКСИМУМ(ПЕРИОД2)
....
ПО ФИЗЛИЦО = ФизЛицо2 И ПЕРИОД < ПЕРИОД2

СГРУППИРОВАТЬ
ФизЛицо
11 Buster007
 
24.04.12
10:19
(9) Петров молодец.
12 jenny_tea
 
24.04.12
10:20
Я в реале естественно смотрю в разрезе и Ответственного лица, просто в частности не брала этот разрез
13 ILM
 
гуру
24.04.12
10:20
(7) Потом разность дат и уже сумма по этому полю
14 Argon
 
24.04.12
10:21
(10) А если 3 записи есть? :)
15 НЕА123
 
24.04.12
10:22
(10)
+
СГРУППИРОВАТЬ
ФизЛицо, ПЕРИОД
16 vmv
 
24.04.12
10:23
ОтветственныеЛицаОрганизаций.Период заменить на МЕЖДУ
17 jenny_tea
 
24.04.12
10:24
(16)?
18 Argon
 
24.04.12
10:28
Так стоп,  Тебе нужно выбрать количество дней который был ответственным человек
1. С даты по дату  или просто с какой то даты??
2. Момент когда человек был на должности одной потом на другой суммируются просто?
19 jenny_tea
 
24.04.12
10:35
1. с даты по дату
2. да суммируются
20 vmv
 
24.04.12
10:38
классическая задача суммирования интервалов в периоде, счас в консоли запросов затестю ваши перлы, возникает стойкое чувство, что объединить все там от лукавого и совем не нужно
21 jenny_tea
 
24.04.12
10:50
я получила, но мне кажется как-то сложно:

ВЫБРАТЬ
   ВложенныйЗапрос.СтруктурнаяЕдиница,
   ВложенныйЗапрос.ФизическоеЛицо,
   ВложенныйЗапрос.Должность,
   ВложенныйЗапрос.ОтветственноеЛицо,
   РАЗНОСТЬДАТ(ВложенныйЗапрос.Период1, ВЫБОР
           КОГДА ВложенныйЗапрос.Период2 ЕСТЬ NULL
               ТОГДА &ДатаКон
           ИНАЧЕ ВложенныйЗапрос.Период2
       КОНЕЦ, ДЕНЬ) КАК КолДней
ИЗ
   (ВЫБРАТЬ
       ОтвЛица1.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
       ОтвЛица1.ФизическоеЛицо КАК ФизическоеЛицо,
       ОтвЛица1.Должность КАК Должность,
       ОтвЛица1.ОтветственноеЛицо КАК ОтветственноеЛицо,
       ОтвЛица1.Период КАК Период1,
       МИНИМУМ(ОтвЛица2.Период) КАК Период2
   ИЗ
       (ВЫБРАТЬ
           ОтветственныеЛицаОрганизаций.Период КАК Период,
           ОтветственныеЛицаОрганизаций.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
           ОтветственныеЛицаОрганизаций.ФизическоеЛицо КАК ФизическоеЛицо,
           ОтветственныеЛицаОрганизаций.Должность КАК Должность,
           ОтветственныеЛицаОрганизаций.ОтветственноеЛицо КАК ОтветственноеЛицо
       ИЗ
           РегистрСведений.ОтветственныеЛицаОрганизаций КАК ОтветственныеЛицаОрганизаций
       ГДЕ
           ОтветственныеЛицаОрганизаций.Период <= &ДатаКон
           И ОтветственныеЛицаОрганизаций.СтруктурнаяЕдиница = &СтруктурнаяЕдиница
           И ОтветственныеЛицаОрганизаций.Период > &ДатаНач
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           &ДатаНач,
           ОтветственныеЛицаОрганизацийСрезПоследних.СтруктурнаяЕдиница,
           ОтветственныеЛицаОрганизацийСрезПоследних.ФизическоеЛицо,
           ОтветственныеЛицаОрганизацийСрезПоследних.Должность,
           ОтветственныеЛицаОрганизацийСрезПоследних.ОтветственноеЛицо
       ИЗ
           РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(&ДатаНач, ) КАК ОтветственныеЛицаОрганизацийСрезПоследних
       ГДЕ
           ОтветственныеЛицаОрганизацийСрезПоследних.СтруктурнаяЕдиница = &СтруктурнаяЕдиница
       
       СГРУППИРОВАТЬ ПО
           ОтветственныеЛицаОрганизацийСрезПоследних.СтруктурнаяЕдиница,
           ОтветственныеЛицаОрганизацийСрезПоследних.Период,
           ОтветственныеЛицаОрганизацийСрезПоследних.ФизическоеЛицо,
           ОтветственныеЛицаОрганизацийСрезПоследних.Должность,
           ОтветственныеЛицаОрганизацийСрезПоследних.ОтветственноеЛицо) КАК ОтвЛица1
           ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
               ОтветственныеЛицаОрганизаций.Период КАК Период,
               ОтветственныеЛицаОрганизаций.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,
               ОтветственныеЛицаОрганизаций.ФизическоеЛицо КАК ФизическоеЛицо,
               ОтветственныеЛицаОрганизаций.Должность КАК Должность,
               ОтветственныеЛицаОрганизаций.ОтветственноеЛицо КАК ОтветственноеЛицо
           ИЗ
               РегистрСведений.ОтветственныеЛицаОрганизаций КАК ОтветственныеЛицаОрганизаций
           ГДЕ
               ОтветственныеЛицаОрганизаций.Период <= &ДатаКон
               И ОтветственныеЛицаОрганизаций.СтруктурнаяЕдиница = &СтруктурнаяЕдиница
               И ОтветственныеЛицаОрганизаций.Период > &ДатаНач
           
           ОБЪЕДИНИТЬ ВСЕ
           
           ВЫБРАТЬ
               &ДатаНач,
               ОтветственныеЛицаОрганизацийСрезПоследних.СтруктурнаяЕдиница,
               ОтветственныеЛицаОрганизацийСрезПоследних.ФизическоеЛицо,
               ОтветственныеЛицаОрганизацийСрезПоследних.Должность,
               ОтветственныеЛицаОрганизацийСрезПоследних.ОтветственноеЛицо
           ИЗ
               РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(&ДатаНач, ) КАК ОтветственныеЛицаОрганизацийСрезПоследних
           ГДЕ
               ОтветственныеЛицаОрганизацийСрезПоследних.СтруктурнаяЕдиница = &СтруктурнаяЕдиница
           
           СГРУППИРОВАТЬ ПО
               ОтветственныеЛицаОрганизацийСрезПоследних.СтруктурнаяЕдиница,
               ОтветственныеЛицаОрганизацийСрезПоследних.Период,
               ОтветственныеЛицаОрганизацийСрезПоследних.ФизическоеЛицо,
               ОтветственныеЛицаОрганизацийСрезПоследних.Должность,
               ОтветственныеЛицаОрганизацийСрезПоследних.ОтветственноеЛицо) КАК ОтвЛица2
           ПО ОтвЛица1.Период < ОтвЛица2.Период
               И ОтвЛица1.СтруктурнаяЕдиница = ОтвЛица2.СтруктурнаяЕдиница
               И ОтвЛица1.ОтветственноеЛицо = ОтвЛица2.ОтветственноеЛицо
   
   СГРУППИРОВАТЬ ПО
       ОтвЛица1.Период,
       ОтвЛица1.СтруктурнаяЕдиница,
       ОтвЛица1.ФизическоеЛицо,
       ОтвЛица1.Должность,
       ОтвЛица1.ОтветственноеЛицо) КАК ВложенныйЗапрос
22 jenny_tea
 
24.04.12
11:42
зафиксировала в след. виде:

ВЫБРАТЬ
   ОтветственныеЛицаОрганизаций.СтруктурнаяЕдиница КАК Подразделение,
   ОтветственныеЛицаОрганизаций.Период КАК Период,
   ОтветственныеЛицаОрганизаций.ФизическоеЛицо,
   ОтветственныеЛицаОрганизаций.Должность,
   ОтветственныеЛицаОрганизаций.ОтветственноеЛицо КАК ОтветственноеЛицо
ПОМЕСТИТЬ ОтветственныеЛицаЗаПериод
ИЗ
   РегистрСведений.ОтветственныеЛицаОрганизаций КАК ОтветственныеЛицаОрганизаций
ГДЕ
   ОтветственныеЛицаОрганизаций.Период <= &ДатаКон
   И  ОтветственныеЛицаОрганизаций.СтруктурнаяЕдиница = &СтруктурнаяЕдиница
   И ОтветственныеЛицаОрганизаций.Период > &ДатаНач

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ОтвЛица.Подразделение,
   ОтвЛица.ФизическоеЛицо,
   ОтвЛица.ОтветственноеЛицо,
   ОтвЛица.Должность,
   СУММА(РАЗНОСТЬДАТ(ОтвЛица.Период1, ОтвЛица.Период2, ДЕНЬ)) КАК КолДней
ИЗ
   (ВЫБРАТЬ
       ОтветственныеЛицаЗаПериод.Подразделение КАК Подразделение,
       ОтветственныеЛицаЗаПериод.ФизическоеЛицо КАК ФизическоеЛицо,
       ОтветственныеЛицаЗаПериод.ОтветственноеЛицо КАК ОтветственноеЛицо,
       ОтветственныеЛицаЗаПериод.Должность КАК Должность,
       ОтветственныеЛицаЗаПериод.Период КАК Период1,
       МИНИМУМ(ВЫБОР
               КОГДА ОтветственныеЛицаЗаПериод1.Период ЕСТЬ NULL
                   ТОГДА ДОБАВИТЬКДАТЕ(&ДатаКон, ДЕНЬ, 1)
               ИНАЧЕ ОтветственныеЛицаЗаПериод1.Период
           КОНЕЦ) КАК Период2
   ИЗ
       ОтветственныеЛицаЗаПериод КАК ОтветственныеЛицаЗаПериод
           ЛЕВОЕ СОЕДИНЕНИЕ ОтветственныеЛицаЗаПериод КАК ОтветственныеЛицаЗаПериод1
           ПО ОтветственныеЛицаЗаПериод.Подразделение = ОтветственныеЛицаЗаПериод1.Подразделение
               И ОтветственныеЛицаЗаПериод.ОтветственноеЛицо = ОтветственныеЛицаЗаПериод1.ОтветственноеЛицо
               И ОтветственныеЛицаЗаПериод.Период < ОтветственныеЛицаЗаПериод1.Период
   
   СГРУППИРОВАТЬ ПО
       ОтветственныеЛицаЗаПериод.Подразделение,
       ОтветственныеЛицаЗаПериод.ФизическоеЛицо,
       ОтветственныеЛицаЗаПериод.ОтветственноеЛицо,
       ОтветственныеЛицаЗаПериод.Должность,
       ОтветственныеЛицаЗаПериод.Период) КАК ОтвЛица

СГРУППИРОВАТЬ ПО
   ОтвЛица.Подразделение,
   ОтвЛица.ФизическоеЛицо,
   ОтвЛица.ОтветственноеЛицо,
   ОтвЛица.Должность