В тестовой конфигурации в журнале документов необходимо реализовать нумерацию строк в динамическом списке. В журнал входит три документа: "Заявка", "Приходный ордер" и "Расходный ордер". Первоначально форма списка журнала документов выглядит следующим образом:
В принципе, задача легко бы решалась, если список документов мы бы получали в отчете. Но тут дела обстоят иначе.
Создав отчет на системе компоновки данных с получением списка документов, задача решалась бы очень просто. В поля отчета нужно было бы всего-навсего добавить специальное поле "Номер по порядку".
В результате пользователь увидит подобный результат формирования отчета:
Но как быть, если нумерацию нужно получить непосредственно в запросе? Например, это может понадобиться для получения порядкового номера записи в динамическом списке.
Изменим запрос динамического списка журнала документов следующим образом:
"ВЫБРАТЬ | Т.НомерПоПорядку, | Т.Ссылка, | Т.Дата, | Т.ПометкаУдаления, | Т.Номер, | Т.Проведен, | Т.Тип |ИЗ | (ВЫБРАТЬ" + // Получаем количество присоединенных ссылок в поле "НомерПоПорядку" " КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЖурналДокументовЖурналДокументов.Ссылка) КАК НомерПоПорядку, | ЖурналДокументов.Ссылка КАК Ссылка, | ЖурналДокументов.Дата КАК Дата, | ЖурналДокументов.ПометкаУдаления КАК ПометкаУдаления, | ЖурналДокументов.Номер КАК Номер, | ЖурналДокументов.Проведен КАК Проведен, | ЖурналДокументов.Тип КАК Тип | ИЗ | ЖурналДокументов.ЖурналДокументов КАК ЖурналДокументов | ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов.ЖурналДокументов КАК ЖурналДокументовЖурналДокументов" + // Соединим таблицу журнала документов к самой себе по ссылке на документ. Количество присоед. // ссылок и есть порядковый номер " ПО ЖурналДокументов.Ссылка >= ЖурналДокументовЖурналДокументов.Ссылка / | | СГРУППИРОВАТЬ ПО | ЖурналДокументов.Ссылка, | ЖурналДокументов.Дата, | ЖурналДокументов.ПометкаУдаления, | ЖурналДокументов.Номер, | ЖурналДокументов.Проведен, | ЖурналДокументов.Тип) КАК Т"
При открытии динамического списка в режиме 1С:Предприятия получаем следующий результат:
Примечание: в примере показан лишь принцип нумерации строк непосредственно в запросе. Если Вы обратили внимание, то на скриншоте выше документы в списке, отсортированные по порядковому номеру строки, "идут" в порядке типов (сначала приходные ордера, затем расходные и т.д.). Это происходит, потому что, используя ссылку для соединения, мы не можем гарантировать, что GUID'ы ссылок будут уникальными. Также нельзя сравнивать ссылки разных типов документов - это приведет к некорректному результату. Можно использовать момент времени или другие поля, определяющие конкретное положение документа с общем списке журнала.
Конечно, используя подобный подход мы усложнили бы запрос к базе данных, плюс ко всему, некоторые возможности динамического списка, важные для работы пользователей, стали бы не доступными (динамическое считывание данных, основная таблица и т.д.), но пример был создан лишь для демонстрации возможности нумерации строк в запросах. Используя этот принцип для решения других задач, например для печатных форм, подобных проблем не возникнет.
Нужно понимать, что использование повторного обращения к таблице документа или журнала документов может отрицательно повлиять на производительность. Оптимальным было бы создание временной таблицы всех выбираемых документов, а затем уже работать с ней. Опять же, все зависит от конкретной задачи!