новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Нумерация строк в запросе

  • Добавить свою публикацию
  • для этого требуется регистрация

Задача

В тестовой конфигурации в журнале документов необходимо реализовать нумерацию строк в динамическом списке. В журнал входит три документа: "Заявка", "Приходный ордер" и "Расходный ордер". Первоначально форма списка журнала документов выглядит следующим образом: 

Изображение

В принципе, задача легко бы решалась, если список документов мы бы получали в отчете. Но тут дела обстоят иначе.

В отчетах - не проблема!

Создав отчет на системе компоновки данных с получением списка документов, задача решалась бы очень просто. В поля отчета нужно было бы всего-навсего добавить специальное поле "Номер по порядку".

Изображение

В результате пользователь увидит подобный результат формирования отчета:

Изображение

Но как быть, если нумерацию нужно получить непосредственно в запросе? Например, это может понадобиться для получения порядкового номера записи в динамическом списке.

Нумерация в запросе

Изменим запрос динамического списка журнала документов следующим образом:

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

 При открытии динамического списка в режиме 1С:Предприятия получаем следующий результат:

Изображение

Примечание: в примере показан лишь принцип нумерации строк непосредственно в запросе. Если Вы обратили внимание, то на скриншоте выше документы в списке, отсортированные по порядковому номеру строки, "идут" в порядке типов (сначала приходные ордера, затем расходные и т.д.).  Это происходит, потому что, используя ссылку для соединения, мы не можем гарантировать, что GUID'ы ссылок будут уникальными. Также нельзя сравнивать ссылки разных типов документов - это приведет к некорректному результату. Можно использовать момент времени или другие поля, определяющие конкретное положение документа с общем списке журнала.

 

Конечно, используя подобный подход мы усложнили бы запрос к базе данных, плюс ко всему, некоторые возможности динамического списка, важные для работы пользователей, стали бы не доступными (динамическое считывание данных, основная таблица и т.д.), но пример был создан лишь для демонстрации возможности нумерации строк в запросах. Используя этот принцип для решения других задач, например для печатных форм, подобных проблем не возникнет.

 

Нужно понимать, что использование повторного обращения к таблице документа или журнала документов может отрицательно повлиять на производительность. Оптимальным было бы создание временной таблицы всех выбираемых документов, а затем уже работать с ней. Опять же, все зависит от конкретной задачи!

 
0
Читайте также
Прямые запросы из 1С к базе на PostgreSQL
"Технология ADO для получения данных из базы с помощью SQLзапросов"
Получение в запросе цен на дату документа
2 варианта получения цен в отчете на дату документа
Динамическое формирование запроса
Фррмирование запроса простейщий способ
Разработки
Очистка базы от документов УУ версия на SQL
Подготовка (очистка базы) от управленческой информации на SQL
Консоль компоновки данных
Обработка состоит их запросов, СКД и объектов
Еще от автора
≡ к списку статей