Имя: Пароль:
1C
1С v8
Интересная задачка по запросам в 1с.
0 Dionis Sergeevich
 
03.12.14
12:57
есть таблица примерно с таким содержанием

Номенклатура | СерийныйНомер
-----------------------------------------------
Номенклатура1 | СерийныйНомер1
Номенклатура1 | СерийныйНомер2
Номенклатура1 | СерийныйНомер3
Номенклатура2 | СерийныйНомер4
Номенклатура2 | СерийныйНомер5
Номенклатура3 | СерийныйНомер6
Номенклатура3 | СерийныйНомер7

Задача:
Как построить запрос чтобы на выходе получить первую пару Номенклатура->СерийныйНомер для каждой отдельной номенклатуры?

Имею в виду примерно такое:
Номенклатура1 | СерийныйНомер1
Номенклатура2 | СерийныйНомер4
Номенклатура3 | СерийныйНомер6

В MS-SQL подобную ситуацию можно решить таким образом:
SEL ECT t.nom,
(
SELECT TOP 1 tt.sn
FR OM #tt tt
WH ERE tt.nom = t.nom
)
FR OM #tt t
GROUP BY
t.nom

нужно сделать в 1с.
1 Wobland
 
03.12.14
12:58
а что такое первая пара?
2 Огурцы
 
03.12.14
13:01
(0)ничего не понял
3 Reaper_1c
 
03.12.14
13:01
Коррелированным запросом. Точно так же как в на T-SQL
4 Wobland
 
03.12.14
13:01
(2) сгруппировать он хочет по номенклатуре
5 Ненавижу 1С
 
гуру
03.12.14
13:01
выбрать Номенклатура, Максимум(СерийныйНомер)
из Т
сгруппировать по Номенклатура

правда тут первый сферически-вакуумный
6 Лодырь
 
03.12.14
13:02
Максимум по серийному номеру.
7 Anarki
 
03.12.14
13:04
Понапридумывают заголовков к УГ темам..
8 Dionis Sergeevich
 
03.12.14
13:04
Это было бы слишком просто)) А вот именно первое значение серийного номера которое не является ни максимумом ни минимумом)
9 Dionis Sergeevich
 
03.12.14
13:04
я только что решил задачку) Предлагаю и вам) Правда интересная
10 Лодырь
 
03.12.14
13:05
(8) Это неверно. Набор данных априори неупорядочен.
11 Лодырь
 
03.12.14
13:05
В нем нет понятия ПЕРВЫЙ.
12 Maxus43
 
03.12.14
13:07

есть такая хрень - Нумерация строк в запросе, вот тебе и решение

13 Dionis Sergeevich
 
03.12.14
13:08
(12) Да, так и сделал) Через декартово произведение
14 Лодырь
 
03.12.14
13:11
(13) Можно увидеть результат?
15 Dionis Sergeevich
 
03.12.14
13:14
16 Лодырь
 
03.12.14
13:18
(15) Ты используешь вполне конкретное сравнение серийных номеров по ссылке.
17 Dionis Sergeevich
 
03.12.14
13:20
Нет, я использую сравнение порядкового номера записи
18 Ненавижу 1С
 
гуру
03.12.14
13:22
(17) тебе так кажется
19 Maxus43
 
03.12.14
13:23

сделай лучше сначала сквозную нумерацию исходной таблицы

20 Dionis Sergeevich
 
03.12.14
13:23
получаю таблицу
Ном1 Сер1 1
Ном1 Сер2 2
Ном2 Сер1 3
Ном2 Сер1 4
Ном3 Сер1 5
потом
Ном1 1
Ном2 3
Ном3 5
и уже потом по порядковым номерам присоединяю Серийные номера
21 Serginio1
 
03.12.14
13:24
22 Dionis Sergeevich
 
03.12.14
13:24
(19) так и сделал же.
(18) Где я сравниваю что-то с серийным номером? Только для нумерации строк сравниваю на >=  и все
23 Dionis Sergeevich
 
03.12.14
13:25
(21) Не покатит. Пробовал
24 Serginio1
 
03.12.14
13:25
25 Dionis Sergeevich
 
03.12.14
13:28
(24) Если вы уверены что это поможет - можете попробовать написать решение.
26 Serginio1
 
03.12.14
13:32
(25)
ВЫБРАТЬ
    втИндекс.Номенлатура КАК Номенлатура,
    Min(втИндекс.СерийныйНомер КАК втИндекс.СерийныйНомер)
ИЗ
    втИндекс КАК втИндекс
ГДЕ
    (втИндекс.СерийныйНомер) В


          (ВЫБРАТЬ ПЕРВЫЕ 1
               док.СерийныйНомер
            ИЗ
                втИндексКАК Док
            ГДЕ
           Док.Номенклатура=втИндекс.Номенлатура
            УПОРЯДОЧИТЬ ПО
                Док.СерийныйНомер)

Groub By
    втИндекс.Номенлатура
27 Лодырь
 
03.12.14
13:34
http://screencast.com/t/0g3hKhXz
И видно что всегда выбирается не ПЕРВЫЙ элемент в таблице, а вполне себе конкретный определяемый однозначно.
28 Serginio1
 
03.12.14
13:35
Но желательно, что бы индекс был по Номенклатура,СерийныйНомер

А для твоей Задачи подойдет просто
ВЫБРАТЬ
    втИндекс.Номенлатура КАК Номенлатура,
    Min(втИндекс.СерийныйНомер) КАК СерийныйНомер
ИЗ
    втИндекс КАК втИндекс
Groub By
    втИндекс.Номенлатура
29 Dionis Sergeevich
 
03.12.14
13:41
(28) Это по минимальному значению же. Мы не привязываемся к значению...
30 Лодырь
 
03.12.14
13:42
(29) Смотри (27) Там скриншот результатов твоего "решения". Явная нестыковка.
31 Dionis Sergeevich
 
03.12.14
13:46
(30) Да, видел уже. я даже удалил первый элемент, записал его последним - все равно первым попадает
32 Serginio1
 
03.12.14
14:26
(29) Убери в 28 УПОРЯДОЧИТЬ ПО
                Док.СерийныйНомер
и получишь запрос как в (0)
33 wertyu
 
03.12.14
14:27
(27) всё правильно, выбираются по порядку внесения в базу
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс