Имя: Пароль:
1C
1С v8
переделать в запрос
0 zak555
 
27.02.14
10:56
Есть некая тз, условно с колонками дата и чис

ПредЗнач = "";
ОтобраннаяТЗ = ТЗ.СкопироватьКолонки();
Для Каждого из Строка из ТЗ Цикла
   Если Строка.Чис <> ПредЗнач Тогда
     ПредЗнач = Строка.Чис;
     ЗаполнитьЗначенияСвойств(ОтобраннаяТЗ.Добавить(), Строка);
   КонецЕсли;
КонецЦикла;



как запросом отобрать тз, чтобы получить ОтобраннаяТЗ
1 vicof
 
27.02.14
10:57
"Для Каждого из Строка из ТЗ Цикла"
думаю, не взлетит
2 Ненавижу 1С
 
гуру
27.02.14
10:58
(0) загрузить ТЗ во временную таблицу, соединить саму с собой
3 vicof
 
27.02.14
10:59
ВЫБРАТЬ РАЗЛИЧНЫЕ, соединить с первой таблицей еще раз по отбранным полям
4 zak555
 
27.02.14
10:59
(2) как соединить ?
5 Cube
 
27.02.14
11:00
Я так понял, ему надо просто выбрать наименьшую дату по каждому числу... В запросе это как два пальца...
6 zak555
 
27.02.14
11:00
(1) ну пусть будет строчка
к тому же опечатки в 0
7 Cube
 
27.02.14
11:01
+(5) Наприер:

ВЫБРАТЬ
    МИНИМУМ(МояТЗ.Дата) КАК Дата,
    МояТЗ.Чис
ИЗ
    &МояТЗ КАК МояТЗ

СГРУППИРОВАТЬ ПО
    МояТЗ.Чис
8 zak555
 
27.02.14
11:09
(7) и что у тебя вернёт на следующих данных

1 4
2 4
3 5
4 4

?
9 zak555
 
27.02.14
11:16
(3) выбрать только различные чис ?
10 vicof
 
27.02.14
11:19
(9) Ага
11 zak555
 
27.02.14
11:19
(10) а дальше ?
как соединять ?
12 vicof
 
27.02.14
11:24
любым соединением, которое понравится, по тз.чис = отобраннаятз.чис
и для чистоты эксперимента, я бы сначала отсортировал тз по чис
13 Cube
 
27.02.14
11:27
(8) Ну, во-первых исходная таблица такая:

01.01.2014 4
02.01.2014 4
03.01.2014 5
04.01.2014 4

А во-вторых, что, сам не знаешь что-ли? Вот это:

01.01.2014 4
03.01.2014 5
14 zak555
 
27.02.14
11:29
(12) пусть пример из 8

выбираем различные чис, суём во временную тз
там будет
4
5

потом соединяем исходную со временной тз ?
15 zak555
 
27.02.14
11:30
(13) а код из 0 вернёт

01.01.2014 4
03.01.2014 5
04.01.2014 4
16 МойКодУныл
 
27.02.14
11:33
(13) (15) тут вопрос что нужно автору. Просто уникальные значения чис с макс\мин датой, или "периоды стабильности". МОжет он решает задачку на собеседовании про курсы валют:), тут была недавно.
17 zak555
 
27.02.14
11:34
(16) по коду из 0 неясно, что нужно ?
18 Cube
 
27.02.14
11:35
(15) Ну тогда соединяй таблицы...
19 МойКодУныл
 
27.02.14
11:35
(17) нет. Не указана сотрировка таблицы. Может она упорядочена по полю "чис" - тогда запрос (8) вполне пойдет.
20 zak555
 
27.02.14
11:38
(18) как?

(19) ничего не отсортировано
21 Cube
 
27.02.14
11:59
(20) "как?"
Не знаю :)
22 H A D G E H O G s
 
27.02.14
12:00
Неясно, зачем нужен запрос.
23 zak555
 
27.02.14
12:01
(22) интересно , как реализовать
24 H A D G E H O G s
 
27.02.14
12:02
(23) см (0)
25 catena
 
27.02.14
12:03
(23)А жесткий порядок строк в таблице чем устаканен? Номера строк есть?
26 Cube
 
27.02.14
12:04
(25) Думаю, сортировка по дате там. Самое простое - это либо курсы валют, либо график работы сотрудника...
27 zak555
 
27.02.14
12:05
(25) у ТЗ же есть номер строки
+ можно считать первая колонка уникальна
28 zak555
 
27.02.14
12:05
(26) а хоть числа
29 catena
 
27.02.14
12:07
(27)Т.е. первая колонка отсортирована по возрастанию и уникальна, правильно?
30 EugeniaK
 
27.02.14
12:07
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    ТЗ.ПолеДата,
               |    ТЗ.ПолеЧисло
               |ПОМЕСТИТЬ ВТ_ТЗ
               |ИЗ
               |    &ТЗ КАК ТЗ
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               |    ВТ_ТЗ.ПолеДата,
               |    МИНИМУМ(ВТ_ТЗ_МИН.ПолеДата) КАК ПолеДатаСледующая,
               |    ВТ_ТЗ.ПолеЧисло
               |ПОМЕСТИТЬ ВТ_Даты
               |ИЗ
               |    ВТ_ТЗ КАК ВТ_ТЗ
               |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТЗ КАК ВТ_ТЗ_МИН
               |        ПО ВТ_ТЗ.ПолеДата < ВТ_ТЗ_МИН.ПолеДата
               |
               |СГРУППИРОВАТЬ ПО
               |    ВТ_ТЗ.ПолеДата,
               |    ВТ_ТЗ.ПолеЧисло
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               |    isnull(ВТ_ТЗ.ПолеДата,ВТ_Даты.ПолеДата) КАК ПолеДата,
               |    isnull(ВТ_ТЗ.ПолеЧисло,ВТ_Даты.ПолеЧисло) КАК ПолеЧисло
               |ИЗ
               |    ВТ_Даты КАК ВТ_Даты
               |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ТЗ КАК ВТ_ТЗ
               |        ПО ВТ_Даты.ПолеДатаСледующая = ВТ_ТЗ.ПолеДата
               |            И ВТ_Даты.ПолеЧисло <> ВТ_ТЗ.ПолеЧисло";
    
    
    Запрос.УстановитьПараметр("ТЗ",ТЗ);
    ОтобраннаяТЗ= Запрос.Выполнить().Выгрузить();
31 catena
 
27.02.14
12:13
Если (29), тогда так

Выбрать
ДатаВремя(2014,1,1) как Д,
4 как чис
Поместить ТЗ
Объединить все
Выбрать
ДатаВремя(2014,1,2),
4
Объединить все
Выбрать
ДатаВремя(2014,1,3),
5
Объединить все
Выбрать
ДатаВремя(2014,1,4),
4;
Выбрать СПредыдущим.Д,СПредыдущим.чис из (Выбрать тз.Д,тз.чис, Максимум(тз2.Д) как предД  из тз как тз
левое соединение тз как тз2 по тз.Д>тз2.Д
Сгруппировать по тз.Д,тз.Чис) как СПредыдущим
левое соединение тз как тз2 по СПредыдущим.предД=тз2.Д
где СПредыдущим.чис<>ЕстьNULL(тз2.чис,"")
32 Cube
 
27.02.14
12:14
(31) Жескач... От руки набирала что-ли?))
33 catena
 
27.02.14
12:15
(32)ну с выдуманными таблицами от руки быстрее))
34 Cube
 
27.02.14
12:16
(33) Зверюга... :)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.