Имя: Пароль:
1C
1С v8
Запрос, как избавиться от запроса в цикле.
,
0 Пеппи
 
17.08.12
17:47
Имеется простой запрос

ВЫБРАТЬ
   РаботникиОрганизацийСрезПоследних.Период,
   РаботникиОрганизацийСрезПоследних.Сотрудник,
   РаботникиОрганизацийСрезПоследних.Категория,
   РаботникиОрганизацийСрезПоследних.Разряд,
   РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации
ИЗ
   РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Дата, ) КАК РаботникиОрганизацийСрезПоследних

Мне нужно на заданный период получить данные из этого регистра. Как это можно сделать не используя запроса в цикле. Знаю что есть понятие как Цикл в запросе.
1 Fragster
 
гуру
17.08.12
17:47
тебе на каждую дату?
2 Пеппи
 
17.08.12
17:48
да
3 Fragster
 
гуру
17.08.12
17:48
эта неделя - рекордсменю только я 4 темы таких нашел, и еще пеару, где это предлагали как решение Книга знаний: Срез последних на каждую дату в запросе
4 Fragster
 
гуру
17.08.12
17:48
*пеару = пару
5 Пеппи
 
17.08.12
17:50
(3) это не то что мне нужно.

Я знаю про такой запрос


ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачДата, День, РазностьДат.НомерДняИзДиапазона) КАК Дата
ИЗ (
ВЫБРАТЬ aa.a*1000 + bb.b*100 + cc.c*10 + dd.d КАК НомерДняИзДиапазона
ИЗ
(ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ
ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК aa
ПОЛНОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ 0 КАК b ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ
ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК bb
ПО ИСТИНА
ПОЛНОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ 0 КАК c ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ
ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК cc
ПО ИСТИНА
ПОЛНОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ 0 КАК d ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ
ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК dd
ПО ИСТИНА
ГДЕ aa.a*1000 + bb.b*100 + cc.c*10 + dd.d <= &КолДнейМеждуДатами) КАК РазностьДат
УПОРЯДОЧИТЬ ПО Дата


Но как можно в параметр подставить даты из этого запроса. У меня не получилось.
6 Fragster
 
гуру
17.08.12
17:57
(5) фотку нормальную в профиль поставь - сделаю текст
7 Пеппи
 
17.08.12
17:58
поставила )
8 ЧашкаЧая
 
17.08.12
17:58
(5) Это то что нужно. Даты как формируются? Все дни от даты начала до даты конца или как-то по-другому?
9 Пеппи
 
17.08.12
17:59
(8) да, за любой период. например за 1 квартал.
10 Пеппи
 
17.08.12
18:01
запрос в (5) выводит список дат, мне нужно их как то подставлять в параметр в запрос в (0). А я не знаю как.
11 Reset
 
17.08.12
18:02
(5) соединить с физической таблицей РС по (5).Дата <= РС.Период и сгруппировать по нужныи измерениям, взяв максимум по периоду из регистра
12 ЧашкаЧая
 
17.08.12
18:02
(10) В (3) не только запрос (5)
13 Жан Пердежон
 
17.08.12
18:02
(6) гы-гы, делай теперь
14 ЧашкаЧая
 
17.08.12
18:03
(13) Редиска.
15 Fragster
 
гуру
17.08.12
18:04
я-то сделаю
16 Reset
 
17.08.12
18:04
(11) Дата => РС.Период
пятница :(
17 Пеппи
 
17.08.12
18:04
(11) пробовала уже, запрос не выдает то что нужно мне. Мне нужно на каждый день, а в (3) дает только по последнему состоянию. это разные вещи.
18 Пеппи
 
17.08.12
18:06
Пока делаю запрос в цикле.
19 Reset
 
17.08.12
18:08
(17) Запрос (первый) по ссылке из (3) делает аналогично, только вместо (5) используются курсы валют
20 Fragster
 
гуру
17.08.12
18:13
Что там измерением является?



ВЫБРАТЬ
   0 КАК Ч
ПОМЕСТИТЬ Числа

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

ВЫБРАТЬ
   1

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

ВЫБРАТЬ
   2

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

ВЫБРАТЬ
   3

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

ВЫБРАТЬ
   4

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

ВЫБРАТЬ
   5

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

ВЫБРАТЬ
   6

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

ВЫБРАТЬ
   7

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

ВЫБРАТЬ
   8

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

ВЫБРАТЬ
   9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, Ед.Ч + 10 * Дес.Ч + 100 * Сот.Ч + 1000 * Тыс.Ч) КАК ДатаКалендаря
ПОМЕСТИТЬ Календарь
ИЗ
   Числа КАК Ед,
   Числа КАК Дес,
   Числа КАК Сот,
   Числа КАК Тыс
ГДЕ
   ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, Ед.Ч + 10 * Дес.Ч + 100 * Сот.Ч + 1000 * Тыс.Ч) <= &ДатаОкончания
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ЦеныНоменклатурыСрезПоследних.Период,
   ЦеныНоменклатурыСрезПоследних.Номенклатура,
   ЦеныНоменклатурыСрезПоследних.Цена
ПОМЕСТИТЬ Данные
ИЗ
   РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаНачала, ) КАК ЦеныНоменклатурыСрезПоследних

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Календарь.ДатаКалендаря,
   МАКСИМУМ(Данные.Период) КАК Период,
   Данные.Номенклатура
ПОМЕСТИТЬ Подготовка
ИЗ
   Календарь КАК Календарь
       ЛЕВОЕ СОЕДИНЕНИЕ Данные КАК Данные
       ПО Календарь.ДатаКалендаря >= Данные.Период

СГРУППИРОВАТЬ ПО
   Календарь.ДатаКалендаря,
   Данные.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Подготовка.ДатаКалендаря,
   Подготовка.Номенклатура,
   Данные.Цена
ИЗ
   Подготовка КАК Подготовка
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Данные КАК Данные
       ПО Подготовка.Период = Данные.Период
           И Подготовка.Номенклатура = Данные.Номенклатура
21 Fragster
 
гуру
17.08.12
18:14
ВЫБРАТЬ
   ЦеныНоменклатуры.Период,
   ЦеныНоменклатуры.Номенклатура,
   ЦеныНоменклатуры.Цена
ИЗ
   РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
   ЦеныНоменклатуры.Период МЕЖДУ ДобавитьКДате(&ДатаНачала, День, 1) И &ДатаОкончания
22 Пеппи
 
17.08.12
18:15
Может я не так объяснила.
Мне нужно так

01.01.12  Иванов
01.01.12 Петров
02.01.12  Иванов
02.01.12 Петров
...
31.01.12  Иванов
31.01.12 Петров
23 Fragster
 
гуру
17.08.12
18:16
(22) что является измерениями? в запросе (20) в таблице Подготовка - добавляешь группировка по ним, в результирующей таблице - их добавляешь в поля связей.
принцип формирования остального должен быть понятен
24 Пеппи
 
17.08.12
18:18
(23) хорошо, попробую. спасибо.
25 Пеппи
 
17.08.12
18:19
(23) измерения- сотрудники, организация, период, все остальные поля в ресурсах
26 ЧашкаЧая
 
17.08.12
18:20
ВЫБРАТЬ
   ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период
ПОМЕСТИТЬ ВТПериоды
ИЗ
   (ВЫБРАТЬ
       0 КАК a
   
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ
       1
   
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ
       2
   
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ
       3
   
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ
       4
   
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ
       5
   
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ
       6
   
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ
       7
   
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ
       8
   
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ
       9) КАК aa
       ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           0 КАК b
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           1
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           2
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           3
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           4
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           5
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           6
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           7
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           8
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           9) КАК bb
       ПО (ИСТИНА)
       ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           0 КАК c
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           1
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           2
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           3
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           4
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           5
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           6
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           7
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           8
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           9) КАК cc
       ПО (ИСТИНА)
       ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           0 КАК d
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           1
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           2
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           3
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           4
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           5
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           6
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           7
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           8
       
       ОБЪЕДИНИТЬ
       
       ВЫБРАТЬ
           9) КАК dd
       ПО (ИСТИНА)
ГДЕ
   aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   РаботникиОрганизацийСрезПоследних.Период,
   РаботникиОрганизацийСрезПоследних.Сотрудник,
   РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации,
   РаботникиОрганизацийСрезПоследних.Должность
ПОМЕСТИТЬ ВТРаботникиОрганизацийПоПериодам
ИЗ
   РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизацийСрезПоследних
ГДЕ
   РаботникиОрганизацийСрезПоследних.Период <= &КонецПериода
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВложенныйЗапрос.Период,
   ВложенныйЗапрос.Сотрудник,
   ВТРаботникиОрганизацийПоПериодам.ПодразделениеОрганизации,
   ВТРаботникиОрганизацийПоПериодам.Должность
ИЗ
   (ВЫБРАТЬ
       ВТПериоды.Период КАК Период,
       ВТРаботникиОрганизацийПоПериодам.Сотрудник КАК Сотрудник,
       МАКСИМУМ(ВТРаботникиОрганизацийПоПериодам.Период) КАК ПериодЗаписиРегистра
   ИЗ
       ВТПериоды КАК ВТПериоды
           ЛЕВОЕ СОЕДИНЕНИЕ ВТРаботникиОрганизацийПоПериодам КАК ВТРаботникиОрганизацийПоПериодам
           ПО ВТПериоды.Период >= ВТРаботникиОрганизацийПоПериодам.Период
   
   СГРУППИРОВАТЬ ПО
       ВТПериоды.Период,
       ВТРаботникиОрганизацийПоПериодам.Сотрудник) КАК ВложенныйЗапрос
       ЛЕВОЕ СОЕДИНЕНИЕ ВТРаботникиОрганизацийПоПериодам КАК ВТРаботникиОрганизацийПоПериодам
       ПО ВложенныйЗапрос.Сотрудник = ВТРаботникиОрганизацийПоПериодам.Сотрудник
           И ВложенныйЗапрос.ПериодЗаписиРегистра = ВТРаботникиОрганизацийПоПериодам.Период
27 vmv
 
17.08.12
18:20
(0) не читая дают ответ - ПАКЕТНЫЙ ЗАПРОС.

уже пора вешать содтателей типповых за увлечение конструкторами запросов и ваянием глубоко вложенных запросов
28 Fragster
 
гуру
17.08.12
18:23
как то так:


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

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

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

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
   Календарь.ДатаКалендаря,
   МАКСИМУМ(Данные.Период) КАК Период,
   Данные.Сотрудник,
   Данные.ПодразделениеОрганизации
ПОМЕСТИТЬ Подготовка
ИЗ
   Календарь КАК Календарь
       ЛЕВОЕ СОЕДИНЕНИЕ Данные КАК Данные
       ПО Календарь.ДатаКалендаря >= Данные.Период

СГРУППИРОВАТЬ ПО
   Календарь.ДатаКалендаря,
   Данные.Сотрудник,
   Данные.ПодразделениеОрганизации
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
   Подготовка.ДатаКалендаря,
   Подготовка.Сотрудник,
   Подготовка.ПодразделениеОрганизации,
   Данные.Категория,
   Данные.Разряд
ИЗ
   Подготовка КАК Подготовка
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Данные КАК Данные
       ПО Подготовка.Период = Данные.Период
           И Подготовка.Сотрудник= Данные.Сотрудник
           И Подготовка.ПодразделениеОрганизации = Данные.ПодразделениеОрганизации
29 ЧашкаЧая
 
17.08.12
18:24
(27) Вы просто не знаете что есть консоль от TormozIT c разверткой по подзапросам.
30 Пеппи
 
17.08.12
18:25
(26) хороший запрос- спасибо большое. )
31 Reset
 
17.08.12
18:26
(30) (28) оптимальнее, отрезается лишняя часть физической до начала
32 ЧашкаЧая
 
17.08.12
18:27
(27) Вдруг кто еще не знает.
http://screencast.com/t/Gtn0UPdpuys4
33 Fragster
 
гуру
17.08.12
18:30
(32) Вложенные запросы и соединения виртуальных таблиц убивают производительность
34 Пеппи
 
17.08.12
18:30
(31) ок
(32) это консоль от TormozIT ?
35 Пеппи
 
17.08.12
18:30
(33) т.е. нужно использовать или или?
36 Fragster
 
гуру
17.08.12
18:31
(35) не, использовать временные таблицы, а их уже вкладывать и соединять
37 Fragster
 
гуру
17.08.12
18:32
в принципе в (28) последние два запроса можно объединить без ущерба, просто так читается лучше. А вот все объединить не советую.
38 vmv
 
17.08.12
18:34
(29) я просто знаю, что пакетный запрос

1. легче читать
2. проще модифицировать
3. можно добиться большей производительности по сравнению с вложенным тармазитами)
39 Пеппи
 
17.08.12
18:35
Fragster спасибо и тебе большое.
40 ЧашкаЧая
 
17.08.12
18:38
(32) Я это знаю. В (26) только один вложенный запрос.
41 ЧашкаЧая
 
17.08.12
18:38
(40) -> (33)
42 Fragster
 
гуру
17.08.12
18:39
(40) ну да. просто формирование последовательности упоротое...
43 vmv
 
17.08.12
18:41
(40) некоторые методы генерации временных и числовых рядов предложил ваш покорный слуга, вто число и тот, что представлен вами.

скуката, думал потроллить чуток, но тут одни яйцеголовые - даже нет сисек!)
44 Fragster
 
гуру
17.08.12
18:42
45 vmv
 
17.08.12
18:44
(44) без коня не впечатляет - попса)
46 ЧашкаЧая
 
17.08.12
19:02
(42) Действительно, не обратил внимание. В той же консоли есть заготовки, первую попавшуюся взял...
47 rphosts
 
17.08.12
19:10
так решили уже или как?
48 rphosts
 
17.08.12
19:19
если нужно не для расчёта а для отчёта - в СКД это решается дополнением безо всяких выкрутасах с вложенвми
49 Пеппи
 
17.08.12
19:27
(48) а можно подробнее про дополнение? И что имеешь в виду под расчетом?
50 rphosts
 
17.08.12
19:28
(49)тебе нужно что-то посчитать или запрос что-бы скормитть его СКД?
51 rphosts
 
17.08.12
19:30
стоп, у тебя сведений а не накопления - тут не прокатит
52 Пеппи
 
17.08.12
19:32
(50) угу, чтобы скормить СКД. Использую Регистры сведений да регистры расчета.
53 rphosts
 
17.08.12
19:38
тогда ну пусть (26)
Ошибка? Это не ошибка, это системная функция.