Имя: Пароль:
1C
1С v8
Запрос, чтоб без цикла
,
0 cons74
 
26.03.14
09:49
Добрый день.

Имеем РС
01.01.14 документ1 Иванов
02.01.14 документ1 Петров
03.01.14 документ1 ОТКАЗ
04.01.14 документ1 Сидоров
05.01.14 документ1 Иванов
06.01.14 документ1 Петров
07.01.14 документ1 Сергеев
08.01.14 документ1 ОТКАЗ

Задача: найти строки отказа, и предыдущего пользователя перед отказом.

Понимаю, что это можно сделать в цикле. А можно ли без цикла, просто в запросе?
1 kiruha
 
26.03.14
09:51
Ищи макс дату - ДатаМакс1 и дату максимальную, но не равную ДатаМакс1
2 Бовка
 
26.03.14
09:55
(0) выбери все отказы, загони в ВТ, выбери все строки с Датой отказа минус 1 день.
3 kosts
 
26.03.14
09:59
(2) Не, не надежно. Вдруг какой выходной будет, и не будет записи за дату...
4 cons74
 
26.03.14
10:03
(2): (3)прав, я блин, забыл: таблица немного не такая:

01.01.14 документ1 Иванов
02.01.14 документ1 Петров
03.01.14 документ1 масло
04.01.14 документ1 ОТКАЗ
05.01.14 документ1 Сидоров
06.01.14 документ1 молоко
07.01.14 документ1 Иванов
08.01.14 документ1 Петров
09.01.14 документ1 конопля
10.01.14 документ1 Сергеев
11.01.14 документ1 сигареты
12.01.14 документ1 ОТКАЗ

т.е. там еще и другие строки есть (я их просто в запросе отфильтровал - табличку уже чистую вам показал)
5 Avganec
 
26.03.14
10:06
(4) меняй логику РС
6 kiruha
 
26.03.14
10:07
(4)
Т.е. то что описано в (1) сделать не в состоянии ?
7 kumena
 
26.03.14
10:14
(6) наверное если бы знал как, то не спрашивал бы тут
8 fvadim
 
26.03.14
10:17
(6) расскажи как, мне тоже интересно
9 elCust
 
26.03.14
10:19
(0) На собеседовании шоль был?
10 Heckfy
 
26.03.14
10:20
(4) Забавная "КучаМала" получается....
11 kiruha
 
26.03.14
10:21
(8)
Как искать максимальную дату по измерению ? )))
Нет извините это перебор
12 Tateossian
 
26.03.14
10:23
(4) А что это за поле - третье? Какое-то молоко, какой-то ОТКАЗ, Сидоров. Ты там пирожки с людьми и с посыланиями суммируешь по одному документу?
13 Полька
 
26.03.14
10:25
(12) слово "конопля" не насторожило?
14 fvadim
 
26.03.14
10:25
(11) не соскакивай с темы, показывай
15 Godofsin
 
26.03.14
10:27
(4) Чо тут думать? Коноплю выбирай!
16 lex-kex
 
26.03.14
10:30
Вопрос из разряда: "Какого цвета мой холодильник, если я сплю на кровати?". Хоть бы написал описание РС, какие измерения, какие ресурсы тип и т.п.
17 Shurjk
 
26.03.14
10:36
(16) И ты бы ему сразу написал решение?
(0) Посмотри где то в КБ была статья о том как получить последние даты прихода запросом - по моему эти  задачи схожи.
18 unregistered
 
26.03.14
10:39
(0)
Запрос выдает таблицу курсов валют, состоящую из полей:
Валюта, Дата курса, курс, Дата предыдущего курса (может быть вчера или более ранний день, если курса "на вчера" не было установлено), Курс на предыдущую (предшествующую) дату.

ВЫБРАТЬ
  КурсыВалют.Период КАК ПериодВчерашний,
  КурсыВалют.Валюта,
  КурсыВалют.Курс КАК КурсВчерашний,
  КурсыВалют1.Период КАК Период,
  КурсыВалют1.Курс КАК Курс
ПОМЕСТИТЬ ВсеКурсы
ИЗ
  РегистрСведений.КурсыВалют КАК КурсыВалют
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют1
   ПО КурсыВалют.Валюта = КурсыВалют1.Валюта
    И КурсыВалют.Период < КурсыВалют1.Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВсеКурсы.Валюта,
   ВсеКурсы.Период,
   МАКСИМУМ(ВсеКурсы.ПериодВчерашний) КАК ПериодВчерашний,
    ВсеКурсы.Курс
ПОМЕСТИТЬ ВчерашниеПериодыССегодняшнимиКурсами
ИЗ
   ВсеКурсы КАК ВсеКурсы
СГРУППИРОВАТЬ ПО
   ВсеКурсы.Валюта,
   ВсеКурсы.Период,
   ВсеКурсы.Курс
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВчерашниеПериодыССегодняшнимиКурсами.Валюта КАК Валюта,
   ВчерашниеПериодыССегодняшнимиКурсами.Период КАК Период,
    ВсеКурсы.Курс,
   ВчерашниеПериодыССегодняшнимиКурсами.ПериодВчерашний,
    ВсеКурсы.КурсВчерашний
ИЗ
   ВчерашниеПериодыССегодняшнимиКурсами КАК ВчерашниеПериодыССегодняшнимиКурсами
ЛЕВОЕ СОЕДИНЕНИЕ ВсеКурсы КАК ВсеКурсы
   ПО ВчерашниеПериодыССегодняшнимиКурсами.Валюта = ВсеКурсы.Валюта
     И ВчерашниеПериодыССегодняшнимиКурсами.Период = ВсеКурсы.Период
     И ВчерашниеПериодыССегодняшнимиКурсами.ПериодВчерашний = ВсеКурсы.ПериодВчерашний
УПОРЯДОЧИТЬ ПО
   Валюта,
   Период

Тоже самое можно сделать через вложенные запросы.
Тебе надо будет добавить еще условия отбора в первом запросе и в условиях связей (ОТКАЗ с пользователем).
19 lex-kex
 
26.03.14
10:41
(17) Как вариант
20 ам794123
 
26.03.14
10:45
(0) используй функцию СКД ВычислитьВыражение(), там есть параметр "Начало", который может принимать следующие значения:

Начало. Указывает, с какой записи нужно начинать фрагмент, в котором рассчитывать агрегатные функции выражения и из какой записи получать значения полей вне агрегатных функций. Строка, содержащая одно из:
"Первая" ("First"). Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки. Получаемое значение должно целым быть числом, больше нуля.
Например, Первая(3) – получение третьей записи от начала группировки.
Если первая запись выходит за пределы группировки, то считается, что записей нет.
Например, если записей 3, а требуется получить Первая(4), то считается, что записей нет.
"Последняя" ("Last"). Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки. Получаемое значение должно целым быть числом, больше нуля.
Например, Последняя(3) – получение третьей записи от конца группировки.
Если последняя запись выходит за пределы группировки, то считается, что записей нет.
Например, если записей 3, а требуется получить Последняя(4), то считается, что записей нет.
"Предыдущая" ("Previous"). Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки.
Например, Предыдущая(2) – получение предыдущей от предыдущей записи.
Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3)), то получается первая запись группировки.
При получении предыдущей записи для итога по группировке считается, получается первая запись.
"Следующая" ("Next"). Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки.
Например, Следующая(2) – получение следующей от следующей записи.
Если следующая запись выходит за пределы группировки, то считается, что записей нет.
Например, если записей 3 и для третьей записи получают Следующая, то считается, что записей нет.
При получении следующей записи для итога по группировке считается, что записи нет.
"Текущая" ("Current"). Необходимо получить текущую запись.
При получении для итога по группировке получается первая запись.
"ОграничивающееЗначение" ("BoundaryValue"). Необходимость получить запись по указанному значению. После слова ОграничивающееЗначение в скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания.
В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению.
Например, если в качестве поля упорядочивания используется поле Период, и оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.02.2010.
21 cons74
 
26.03.14
11:01
Всем большое спасибо. Пока занят, буду ковырять попозже.
Боялся, что конопля все испортит - но ничего, пронесло)))
Программист всегда исправляет последнюю ошибку.