Имя: Пароль:
1C
 
Нумерация строк в запросе- баян? у меня не получилось, нужна помощь.
🠗 (Волшебник 05.05.2025 09:33)
0 report1234
 
naïve
04.05.25
16:21
Необходимо добавить колонку номер строки в результат запроса и пронумеровать строки в запросе. Строки в запросе должены быть отсортированы в порядке:
Наименование, Дата, Код. Каждая строка уникальна.

Использовать метод Автономер нельзя.

Запрос ниже
ВЫБРАТЬ
  "Облако" КАК Наименование,
  ДАТАВРЕМЯ(2022, 2, 1) КАК Дата,
  123 КАК Код
ПОМЕСТИТЬ ТаблицаДанных

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

ВЫБРАТЬ
  "Аквамарин",
  ДАТАВРЕМЯ(2022, 2, 2),
  100

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

ВЫБРАТЬ
  "Пробел",
  ДАТАВРЕМЯ(2022, 1, 7),
  20

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

ВЫБРАТЬ
  "Машина",
  ДАТАВРЕМЯ(2022, 1, 10),
  15

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

ВЫБРАТЬ
  "Строка",
  ДАТАВРЕМЯ(2022, 1, 5),
  10

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

ВЫБРАТЬ
  "Пробел",
  ДАТАВРЕМЯ(2022, 1, 7),
  100

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

ВЫБРАТЬ
  "Статика",
  ДАТАВРЕМЯ(2022, 1, 15),
  87

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

ВЫБРАТЬ
  "Интер",
  ДАТАВРЕМЯ(2022, 2, 5),
  50

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

ВЫБРАТЬ
  "Интер",
  ДАТАВРЕМЯ(2022, 2, 7),
  34
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
  Т.Наименование КАК Наименование,
  Т.Дата КАК Дата,
  Т.Код КАК Код
ИЗ
  ТаблицаДанных КАК Т


// То что смог я.

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

//СГРУППИРОВАТЬ ПО
//  Т.Наименование,
//  Т.Дата,
//  Т.Код
    
УПОРЯДОЧИТЬ ПО
    Наименование
            
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Т.Наименование КАК Наименование,
    //Т.Дата КАК Дата,
    Т.Код КАК Код,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТаблицаДанных.Код) КАК НомерСтроки
    //КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТаблицаДанных.код) КАК Код1
ПОМЕСТИТЬ вт_коды_Сортированные
ИЗ
    ТаблицаДанных КАК Т
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаДанных КАК ТаблицаДанных
        ПО Т.Код >= ТаблицаДанных.Код

СГРУППИРОВАТЬ ПО
    Т.Наименование,
    //Т.Дата,
    Т.Код
;


ВЫБРАТЬ
    Т.Наименование КАК Наименование,
    Т.Дата КАК Дата,
    //Т.Код КАК КОД,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТаблицаДанных.Дата) КАК НомерСтроки
    //КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТаблицаДанных.код) КАК Код1
ПОМЕСТИТЬ вт_Даты_Сортированные
ИЗ
    ТаблицаДанных КАК Т
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаДанных КАК ТаблицаДанных
        ПО Т.Дата >= ТаблицаДанных.Дата

СГРУППИРОВАТЬ ПО
    Т.Наименование,
    Т.Дата
    //т.код
1 Ёпрст
 
гуру
04.05.25
14:16
(0) автономерзаписи
2 d4rkmesa
 
04.05.25
15:59
(0) Какие ограничения? Версия платформы, СУБД, файловая или клиент-серверная?
3 Волшебник
 
04.05.25
16:21
(0) >> Использовать метод Автономер нельзя.

Почему, блять, нельзя?!
4 d4rkmesa
 
04.05.25
16:43
Ну вот, допустим, "нижний" кусок текста запроса так можно сделать, но платформа не ниже в 20-й и код не больше 5 символов. Примитив, конечно, за счет использования "новых" функций.

(0)
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ТаблицаДанных.Наименование КАК Наименование,
	ТаблицаДанных.Дата КАК Дата,
	ТаблицаДанных.Код КАК Код,
	ТаблицаДанных.Наименование + СТРОКА(ТаблицаДанных.Дата) + ВЫБОР
		КОГДА ДЛИНАСТРОКИ(СТРОКА(ТаблицаДанных.Код)) = 1
			ТОГДА "0000" + СТРОКА(ТаблицаДанных.Код)
		КОГДА ДЛИНАСТРОКИ(СТРОКА(ТаблицаДанных.Код)) = 2
			ТОГДА "000" + СТРОКА(ТаблицаДанных.Код)
		КОГДА ДЛИНАСТРОКИ(СТРОКА(ТаблицаДанных.Код)) = 3
			ТОГДА "00" + СТРОКА(ТаблицаДанных.Код)
		КОГДА ДЛИНАСТРОКИ(СТРОКА(ТаблицаДанных.Код)) = 4
			ТОГДА "0" + СТРОКА(ТаблицаДанных.Код)
	КОНЕЦ КАК Ключ
ПОМЕСТИТЬ ВТПоля
ИЗ
	ТаблицаДанных КАК ТаблицаДанных
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТПоля.Наименование КАК Наименование,
	ВТПоля.Дата КАК Дата,
	ВТПоля.Код КАК Код,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТПоля1.Ключ) КАК Номер
ИЗ
	ВТПоля КАК ВТПоля
		ЛЕВОЕ СОЕДИНЕНИЕ ВТПоля КАК ВТПоля1
		ПО (ВТПоля.Ключ >= ВТПоля1.Ключ)

СГРУППИРОВАТЬ ПО
	ВТПоля.Наименование,
	ВТПоля.Дата,
	ВТПоля.Код

УПОРЯДОЧИТЬ ПО
	Наименование,
	Дата,
	Код
5 report1234
 
naïve
06.05.25
08:29
(4) Спасибо большое, единственное что я не попробовал, как оказалось, соединение строк через СТРОКА, пробовал ВЫРАЗИТЬ, ПРЕДСТАВЛЕНИЕ, а вот СТРОКА, даже намека не увидел в решениях. Отталкивался от "книги знаний" - "Нумерация строк в запросе", понял что нужно склеить данные по строке, но вот как, не понял. Еще раз спасибо.
Программист всегда исправляет последнюю ошибку.