Имя: Пароль:
1C
1С v8
Срез последних по нескольким значениям ресурса
,
0 Альбатрос
 
02.11.15
09:17
Имеется ТЗ, в каждой строке которой 3 разных значения.
Есть периодический РС с одним ресурсом, который может принимать значения из ТЗ. Нужно по каждой строке ТЗ для каждого значения взять СрезПоследних и выбрать макс по периоду.
Как это реализовать в запросе?
1 Альбатрос
 
02.11.15
09:26
Не с ресурсом, измерением. =)
2 Mankubus
 
02.11.15
09:29
3 mistеr
 
02.11.15
09:36
Что значит "для каждого значения взять СрезПоследних"? Срез последних бывает только по измерениям.

Если нужно ответить на вопрос "когда последний раз встречалось это значение?", то срез последних не нужен.
4 Альбатрос
 
02.11.15
09:38
(2) не то
5 Альбатрос
 
02.11.15
09:39
(3) я опечатался в (0). Не с ресурсом, а измерением. Соответственно мне нужно использовать значения из строки ТЗ в качестве измерения для среза и из полученных срезов выбрать самый "наипоследнейший".
6 torgm
 
02.11.15
09:44
(5) млин , загоняешь таблицу в запрос, потом левое соединение и т.д..
7 Альбатрос
 
02.11.15
09:47
(6) и по каким условиям соединяться? и что указывать в параметре вирт. таблицы для среза? Я мож туплю, конечно, но никак не соображу как тут использовать левое соединение.
8 Альбатрос
 
02.11.15
09:52
Пожалуйста, замените в заголовке слово "ресурса" на "измерения".

Понедельник день тяжелый...
9 НЕА123
 
02.11.15
09:56
завидую ТС.
10 RomanYS
 
02.11.15
10:01
(5) если тебе нужна одна дата

выбрать первые 1
...
упорядочить по период убыв

список измерений засунуть в условия вирт. таблицы среза
11 patria0muerte
 
02.11.15
10:05
Т.е. у тебя есть строка:
Значение1, Значение2, Значение3

Каждое из этих значений может являться измерением для РС.
И тебе надо получить что в итоге?

Теже самые строки, только с указанием, что максимального периода изменения одного из трех указанных значений?

Или просто выбрать строку, в которой по одному из трех этих значений был максимальный период?
12 patria0muerte
 
02.11.15
10:06
Лучше на примере покажи. Типа есть таблица x, надо чтобы стала y, по условию z
13 Альбатрос
 
02.11.15
10:11
То ли инет у меня глючит, то ли браузер, то ли сайт... не отправляются большие сообщения
14 Альбатрос
 
02.11.15
10:12
Ща
15 Альбатрос
 
02.11.15
10:12
Вот так это работает, если запрос выполнять в цикле:


Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    МАКСИМУМ(ДокументыРозничныхНаценокСрезПоследних.Период) КАК Период,
                   |    ДокументыРозничныхНаценокСрезПоследних.Регистратор,
                   |    ДокументыРозничныхНаценокСрезПоследних.Регистратор.Дата
                   |ИЗ
                   |    РегистрСведений.ДокументыРозничныхНаценок.СрезПоследних(
                   |            ,
                   |            (ТорговыйОбъект = &ЮрЛицо
                   |                ИЛИ ТорговыйОбъект = &ТС
                   |                ИЛИ ТорговыйОбъект = &Контрагент)
                   |                И Используется) КАК ДокументыРозничныхНаценокСрезПоследних
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ДокументыРозничныхНаценокСрезПоследних.Регистратор,
                   |    ДокументыРозничныхНаценокСрезПоследних.Регистратор.Дата";
                  
    Для каждого СтрокаТЗ из ТЗ Цикл              
    Запрос.УстановитьПараметр("ЮрЛицо", СтрокаТЗ.ЮрЛицо);
    Запрос.УстановитьПараметр("ТС",     СтрокаТЗ.ТорговаяСеть);
    Запрос.УстановитьПараметр("Контрагент", СтрокаТЗ.Контрагент);
    Данные = Запрос.Выполнить().Выгрузить();
    Сообщить("!");
КонецЦикла;
16 Альбатрос
 
02.11.15
10:15
(15) Хотя не, так тоже не работает =) Но смысл чего хочу надеюсь понятен =)
17 RomanYS
 
02.11.15
10:17
(16) Абсолютно нет
18 RomanYS
 
02.11.15
10:19
что на входе?
что ожидается на выходе?
структура регистра(измерения)?
19 Альбатрос
 
02.11.15
10:24
да что за хрень? Сообщения через одно отправляются
20 Альбатрос
 
02.11.15
10:25
Вот так работает в цикле

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                   |    ДокументыРозничныхНаценокСрезПоследних.Период КАК Период,
                   |    ДокументыРозничныхНаценокСрезПоследних.Регистратор,
                   |    ДокументыРозничныхНаценокСрезПоследних.Регистратор.Дата
                   |ИЗ
                   |    РегистрСведений.ДокументыРозничныхНаценок.СрезПоследних(
                   |            ,
                   |            (ТорговыйОбъект = &ЮрЛицо
                   |                ИЛИ ТорговыйОбъект = &ТС
                   |                ИЛИ ТорговыйОбъект = &Контрагент)
                   |                И Используется) КАК ДокументыРозничныхНаценокСрезПоследних
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    Период УБЫВ";
                  
    Для каждого СтрокаТЗ из ТЗ Цикл              
    Запрос.УстановитьПараметр("ЮрЛицо", СтрокаТЗ.ЮрЛицо);
    Запрос.УстановитьПараметр("ТС",     СтрокаТЗ.ТорговаяСеть);
    Запрос.УстановитьПараметр("Контрагент", СтрокаТЗ.Контрагент);
    Данные = Запрос.Выполнить().Выгрузить();
    //Сообщить("!");
    Данные.ВыбратьСтроку();
КонецЦикла;
21 patria0muerte
 
02.11.15
10:25
Навскидку:
1) Передать таблицу с номерами строк в запрос
2) Распилить на 3ВТ.
3) К ним присобачить срез последних
4) В результирующей - выбрать НомерСтроки и Максимум(Период)
22 patria0muerte
 
02.11.15
10:25
(21)*2)Распилить на ТРИ ВТ..
23 Альбатрос
 
02.11.15
10:27
(21) Спс, ща попробую
24 patria0muerte
 
02.11.15
10:27
Точнее даже:
1) Передать таблицу с номерами строк в запрос
2) Распилить на 3ВТ.
3) К каждой присобачить срез последних нужного РС
4) Объединить таблицы в результирующий запрос
5) В результирующей выбрать Максимум(Период) с группировкой по номеру строки
25 Cyberhawk
 
02.11.15
10:28
Покажи на картинке, что у тебя на входе и что должно быть на выходе
26 Альбатрос
 
02.11.15
10:52
27 Альбатрос
 
02.11.15
11:42
Сделал как в (24).
Только пункт 5 изменил и сделал соединением.
Группировка и максимум не проканали, ибо в выборке еще регистратор присутствует.
28 Альбатрос
 
02.11.15
11:42
Всем спасибо, большое спасибо patria0muerte за идею.
29 mistеr
 
02.11.15
12:48
(26) Таблицу в ВТ, соединить с регистром по

ТорговыйОбъект = &ЮрЛицо
ИЛИ ТорговыйОбъект = &ТС
ИЛИ ТорговыйОбъект = &Контрагент

Срез нафиг не нужен.
30 Альбатрос
 
02.11.15
13:19
(29) Ну как вариант.
31 patria0muerte
 
03.11.15
01:45
(27) Выкинь регистратор, сгруппируй, потом к уже готовым записям прицепи его из предыдущих ВТ.