Меню Закрыть

1С запрос номер по порядку

Иногда возникает необходимость добавить в запрос колонку с номером строки, например, когда нужно вывести номера строк в отчет, а используется построитель отчета. Также нумерация строк полезна, когда необходимо для определенных группировок вывести ограниченное количество строк, что-то типа "ПЕРВЫЕ 5 документов для каждого контрагента".

Данная статья навеяна обсуждением в теме v8: Раздумья над запросом

Начнем с того, что в 1С 8 используется ограниченный диалект SQL, поэтому многие способы нумерации строк запроса, возможные в стандартном SQL, для нас не доступны (если кому-то интересно, как это делать в SQL, — http://www.sql.ru/faq/faq_topic.aspx?f >
Итак, приступим. Есть запрос, выбирающий номенклатуру. Результат отсортирован по наименованию:
исходный запрос

Требуется добавить колонку с порядковым номером номенклатуры (в рамках данной сортировки):
запрос с номерами строк

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

Аналогичную методику можно применить, если нужно задать нумерацию строк с учетом группировки по какому-либо полю:
запрос с номерами строк в рамках группировки

Это тот же самый запрос, в него просто добавлена группировка по полю "Родитель". Нумерация для каждого родителя — своя.

Быстродействие:
Если говорить о быстродействии, то запросы подобного рода, естественно, ресурсоемки (математическая сложность порядка N^2). Для большинства повседневных задач их использование вполне приемлемо.
Кстати, второй запрос выполняется несколько быстрее первого — это связано с меньшим размером вспомогательных таблиц.

Пример реального использования:
Теперь немного о том, ради чего всё это делается. Какую пользу которую можно извлечь из нумерации строк запроса?

Например, перед нами стоит задача получить для каждого контрагента пять последних документов поступления товаров и услуг:

Читайте также:  Прошить планшет мегафон логин 2 через компьютер

запрос с номерами строк при наличии дублей интересующего поля(того,относительно которого строится счетчик)

Собственно говоря, идея такова: использовать "составное поле" для получения возрастающего итога (при этом одно поле может содержать дубли, а второе, как в данном примере, — нет.).

Автор: Admin 27 сентября, 2019 0 комментария

Наткнулся недавно в запросе на одну интересную функцию ‘АВТОНОМЕРЗАПИСИ’, которую до этого не встречал.

‘АВТОНОМЕРЗАПИСИ’ – создает во временной таблице колонку, содержащую последовательно возрастающие уникальные значения. По сути это ключевое поле во временной таблице. Как утверждает документация с сайта ‘ справка по работе с запросами‘: начальное значение счетчика в общем случае может быть любым.

Для того чтобы пронумеровать строки в запросе, необходимо соединить таблицу запроса с самой собой по какому либо полю с условием « », посчитать количество присоединившихся строк, затем упорядочить по полученным номерам. Замечу, что получить номер строки в запросе 1с данным способом можно только в случае, если в вашей выборке есть поле с уникальным значением для каждой строки. Если это условие не выполняется, то при накладывании условия на «больше» или «меньше» у вас получатся строки с одинаковыми номерами.

Номер строки в запросе 1с. Пример

Рассмотрим простейший запрос к справочнику номенклатура, для быстроты выполнения ограничим выборку номенклатуры одной группой, которую необходимо передать в параметр Группа.

Прочтите еще пару статей на тему языка запросов 1С:

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.