Не работает порядок в запросе 1с
В этой статье мы хотим обсудить с Вами все функции языка запросов 1с, а также конструкции языка запросов. Чем же отличается функция от конструкции? Функция вызывается со скобками и возможными параметрами в них, а конструкция пишется без скобок. Безусловно все конструкции и функции языка запросов 1с делают процесс получения данных гибким и многофункциональным. Данные функции и конструкции применимы к полям запроса, а некоторые также применимы в условиях.
Функции языка запросов 1с
Поскольку понятное описание функций языка запросов 1с встречается намного реже, чем описание конструкций, мы решили начать рассматривать именно функции. Теперь давайте разберем каждую по отдельности, описав ее назначение, синтаксис и пример использования, итак:
1. Функция ДАТАВРЕМЯ - данная функция создает константное поле с типом "Дата".
2. Функция РАЗНОСТЬДАТ - возвращает разность двух дат в одном из измерений (год, месяц, день, час, минута, секунда). Измерение передается в параметре.
3. Функция ЗНАЧЕНИЕ - задает константное поле с предопределенной записью из базы данных, также можно получить пустую ссылку любого типа.
4. Функция ВЫБОР - перед нами аналог конструкции ЕСЛИ который используется в коде, только эта используется в запросах 1С.
Синтаксис: ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ
5. Функция ВЫРАЗИТЬ - позволяет выразить константное поле определенным типом.
Синтаксис: ВЫРАЗИТЬ(НазваниеПоля КАК НазваниеТипа)
Еще есть вариант использования функции ВЫРАЗИТЬ в полях смешанных типах, где такие встречаются? Самый простой пример это "Регистратор" у любого регистра. Так зачем нам может понадобиться уточнять тип в регистраторе? Давайте рассмотрим ситуацию когда мы из регистратора выбираем поле "Номер", из какой таблицы будет выбран номер? Правильный ответ из всех! Поэтому чтобы наш запрос работал быстро следует указывать явный тип с помощью функции ВЫРАЗИТЬ
6. Функция ISNULL (альтернативное написание ЕСТЬNULL) - если поле имеет тип NULL, то оно заменяется на второй параметр функции.
Также отметим что тип NULL желательно ВСЕГДА заменять на какое-то значение, т.к. сравнение с типом NULL всегда дает ЛОЖЬ даже если вы сравниваете NULL с NULL. Чаще всего значения NULL образуются в результате соединения таблиц (все виды соединений кроме внутреннего).
7. Функция ПРЕДСТАВЛЕНИЕ - позволяет получить представление поля запроса.
Конструкции в языке запросов 1с
Выше мы рассмотрели с Вами функции языка запросов 1с, теперь пришло время рассмотреть конструкции в языке запросов 1с, они не менее важны и полезны, приступаем.
1. Конструкция ССЫЛКА - представляет из себя логический оператор проверки ссылочного типа. Наиболее часто встречается при проверки поля составного типа на конкретный тип. Синтаксис: ССЫЛКА
2. Конструкция МЕЖДУ - данный оператор проверяет входит ли значение в указанный диапазон.
Синтаксис: МЕЖДУ И
3. Конструкция В и В ИЕРАРХИИ - проверяют находится ли значение в передаваемом списке (в качестве списка могут передаваться массивы, таблицы значений и т.д.). Оператор В ИЕРАРХИИ позволяет просматривать иерархию (пример использования ПланСчетов).
4. Конструкция ПОДОБНО - эта функция позволяет нам сравнивать строку с шаблоном строки.
Варианты шаблона строки:
% - последовательность, содержащая любое количество произвольных символов.
_ - один произвольный символ.
[. ] - любой одиночный символ, либо последовательность символов из перечисленных внутри квадратных скобок. В перечислении могут задаваться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.
[^. ] - любой одиночный символ, либо последовательность символов из перечисленных внутри квадратных скобок кроме тех, которые перечислены следом за значком отрицания.
5. Конструкция РАЗРЕШЕННЫЕ - этот оператор позволяет выбрать только те записи из БД, на которые вызывающий имеет право чтения. Данные права настраиваются на уровне записей (RLS).
Синтаксис: РАЗРЕШЕННЫЕ пишется после ключевого слова ВЫБРАТЬ
6. Конструкция РАЗЛИЧНЫЕ - позволяет выбрать записи в которых отсутствуют повторные записи.
Синтаксис: РАЗЛИЧНЫЕ пишется после ключевого слова ВЫБРАТЬ
Также Конструкция РАЗЛИЧНЫЕ может использоваться с оператором РАЗРЕШЕННЫЕ и другими операторами.
7. Конструкция ПЕРВЫЕ - выбирает указанное в параметре число записей из результата запроса.
8. Конструкция ДЛЯ ИЗМЕНЕНИЯ - позволяет заблокировать таблицу, работает только в транзакциях (актуально только для автоматических блокировок).
Синтаксис: ДЛЯ ИЗМЕНЕНИЯ
9. Конструкция УПОРЯДОЧИТЬ ПО - упорядочивает данные по определенному полю. Если полем является ссылка то при установке флага АВТОУПОРЯДОЧИВАНИЕ будет происходить сортировка по представлению ссылки, если флаг выключен то ссылки сортируются по старшинству адреса ссылки в памяти.
Синтаксис: УПОРЯДОЧИТЬ ПО АВТОУПОРЯДОЧИВАНИЕ
10. Конструкция СГРУППИРОВАТЬ ПО - используется для группировки строк запроса по определенным полям. Числовые поля должны использоваться с любой агрегатной функцией.
11. Конструкция ИМЕЮЩИЕ - позволяет применить агрегатную функцию к условию выборки данных, похожа на конструкцию ГДЕ.
12. Конструкция ИНДЕКСИРОВАТЬ ПО - используется для индексации поле запроса. Запрос с индексацией дольше выполняется, но ускоряет поиск по индексированным полям. Можно использовать только в виртуальных таблицах.
Синтаксис: ИНДЕКСИРОВАТЬ ПО
13. Конструкция ГДЕ - позволяет наложить условие на любые поля выборки. В результат попадут записи только удовлетворяющие условию.
14. Конструкция ИТОГИ . ПО ОБЩИЕ - применяется для подсчета итогов, в конструкции указываются поля по которым будут считаться итоги и агрегатные функции применяемые к итоговым полям. При использовании итогов на каждое поле следующее после конструкции ИТОГИ производится группировка данных. Есть необязательная конструкция ОБЩИЕ, ее использование также обеспечивает дополнительную группировку. Пример результата запроса вы увидите ниже.
На рисунке обведены группировки которые образовались в ходе выполнения запроса, самая верхняя относится к секции ОБЩИЕ, а вторая к полю ДоговорКонтрагентаВидДоговора.
Простенький вопросик для знатоков от зрителей :)
Почему настоятельно не рекомендуется использовать оператор ИЛИ в условии запроса?
(ЗаявкаНаОтгрузкуНакладные.ВидНакладной = "ЗТО" И ЗаявкаНаОтгрузкуНакладные.Накладная.Отправитель = &Отправитель)
Не следует использовать ИЛИ в секции ГДЕ запроса. Это может привести к тому, что СУБД не сможет использовать индексы таблиц и будет выполнять сканирование, что увеличит время работы запроса и вероянтность возникновения блокировок. Вместо этого следует разбить один запрос на несколько и объединить результаты.
Например, запрос
(11) Ха ха. то есть сервер 1С должен был сам заменить запрос на объединение? а если там более одного ИЛИ? )))
Можно подумать что сервер такой глупый, что всегда будет строить не оптимальный план. Но сложные случаи возможно ему нужно помочь.
(9) Классические пример:
a) Кривости RTFM от 1С.
б) Варианта, когда использование ИЛИ безопасно.
в) Шаблонности м ы шления 1С ников.
(8) Все ему понятно.
Посмотрит статистику и какой-нибудь использует.
(8) Можно твое имя и фамилию, пожалуйст. Для летописи.
(23) Ходят упорные слухи, что там где оптимизатор MS SQL еще справляется (хотя и без гарантии) оптимизаторы других СУБД (включая Oracle) впадают в ступор. Возможны и обратные случаи, но авторы типовых и прочих тиражируемых решений сидят на MS SQL, поэтому такие проблемы нетипичны.
(29) А в 1С хотят, чтобы работало на всех поддерживаемых СУБД более менее прилично. Поэтому выдвигают рекомендации писать запрос так, чтобы самый негодный оптимизатор справлялся удовлетворительно, а не только самый годный в случае если повезет.
(30)
То есть нельзя никому верить, Печенкин Роман.
Надо все проверять, ставить под сомнение и пытаться докопаться до сути.
Как бы тебя не слепил красный кожаный, блестящий на солнце, плащъ.
(33) Ну я как бэ согласен, хорошо.
Но хотелось бы некоторого веса словам.
А то получается, Рупасов сказал А, ты сказал Б.
Но Рупасов все-таки сказал на ИТС всей России, а ты на МиСте узкому кругу.
Спрашивается, как решить, кто прав, кто нет.
Может, моделирование ситуации решит спор? :))
(22) б - если условия на поля составного типа, то план запроса действительно может отличаться эпическим образом. Даже со всеми возможными ВЫРАЗИТЬ. Проверено на себе.
(43) Планы НИКОГДА не бывают нелогичными и не вылезают ВНЕЗАПНО. Всегда есть причина, по которой sql выбрал этот план, надо просто долго ковырять.
(45) Он может не ошибаться, а добросовестно заблуждаться. Причина разумеется будет, только станет ли лучше от этого результат?
"result (cost=0.00..4.08 rows=1 width=19) (actual time=0.000..0.000 rows=0 loops=1)
one-time filter: false
-> index only scan using _docum10341_bydocnum_sr on Документ.XXXXXXXXXX t1 (cost=0.00..4.08 rows=1 width=19) (never executed)
total runtime: 0.018 ms
"limit (cost=0.00..4.09 rows=1 width=0) (actual time=0.023..0.023 rows=0 loops=1)
-> index scan using pg_class_relname_nsp_index on pg_class (cost=0.00..4.09 rows=1 width=0) (actual time=0.022..0.022 rows=0 loops=1)
filter: (pg_table_is_visible(oid) and (relkind = 'r'::""char""))
total runtime: 0.040 ms
"
"bitmap heap scan on Документ.XXXXXXXXXX t1 (cost=4.15..8.11 rows=2 width=19) (actual time=1.536..1.539 rows=2 loops=1)
recheck cond: ((Номер = '000000011'::mvarchar) or (Номер = '000000010'::mvarchar))
-> bitmapor (cost=4.15..4.15 rows=2 width=0) (actual time=1.530..1.530 rows=0 loops=1)
-> bitmap index scan on _docum10341_bydocnum_sr (cost=0.00..2.07 rows=1 width=0) (actual time=1.517..1.517 rows=1 loops=1)
index cond: (Номер = '000000011'::mvarchar)
-> bitmap index scan on _docum10341_bydocnum_sr (cost=0.00..2.07 rows=1 width=0) (actual time=0.012..0.012 rows=1 loops=1)
index cond: (Номер = '000000010'::mvarchar)
total runtime: 1.560 ms
"
"limit (cost=2.10..9.61 rows=1 width=0) (actual time=0.037..0.037 rows=0 loops=1)
-> bitmap heap scan on pg_class (cost=2.10..9.61 rows=1 width=0) (actual time=0.036..0.036 rows=0 loops=1)
rows removed by filter: 2
-> bitmap index scan on pg_class_relname_nsp_index (cost=0.00..2.10 rows=4 width=0) (actual time=0.010..0.010 rows=7 loops=1)
index cond: (relname = 'tt35'::name)
total runtime: 0.054 ms
"
"result (cost=0.00..8.15 rows=2 width=19) (actual time=0.040..0.051 rows=2 loops=1)
-> append (cost=0.00..8.15 rows=2 width=19) (actual time=0.040..0.051 rows=2 loops=1)
-> index only scan using _docum10341_bydocnum_sr on Документ.ХХХХХХХХХХ t1 (cost=0.00..4.08 rows=1 width=19) (actual time=0.039..0.039 rows=1 loops=1)
heap fetches: 1
-> index only scan using _docum10341_bydocnum_sr on Документ.ХХХХХХХХХХ t2 (cost=0.00..4.08 rows=1 width=19) (actual time=0.010..0.010 rows=1 loops=1)
total runtime: 0.079 ms
"
При работе с запросами нередко возникает ситуация, когда результат запроса необходимо упорядочить по представлению некоторого ссылочного поля. Например, необходимо упорядочить список номенклатуры по представлению. Заметим, что упорядочивание непосредственно по полю Представление приведет к не вполне ожидаемому результату - результат будет упорядочен в порядке возрастания ссылок объектов. Данный эффект проявляется из-за того, что поле Представление является виртуальным и на уровне базы данных состоит из нескольких полей, из которых уже в момент получения значения поля получается строка - представление. При упорядочивании же по этому полю произойдет последовательное упорядочивание по реальным полям, из которого оно состоит, в результате чего упорядочивание произойдет не по строковому представлению, а по внутренней ссылке поля.
Пример неправильного упорядочивания:
Код 1C v 8.х
На самом деле, упорядочивание по представлению является довольно сомнительной операцией с точки зрения полезности результата. Для примера достаточно посмотреть на представления документов - эти строки содержат в себе даты, а упорядочивание дат как строк не даст осмысленного результата. Для того чтобы обеспечить упорядочивание, которое будет отвечать ожиданиям пользователей, следует использовать упорядочивание непосредственно по ссылочному полю и дополнительно указать в запросе ключевое слово АВТОУПОРЯДОЧИВАНИЕ. В таком случае запрос получит для каждого ссылочного поля реальные поля, по которым его необходимо упорядочить (для документа это будет дата и номер, для справочника - основное представление) и произведет упорядочивание по ним.
Пример правильного упорядочивания:
Код 1C v 8.х
Похожие FAQ
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени Автоматическое резервное копирование 1С:Предприятия в облако с помощью ПО Effector Saver 3
Всем известно, для большей гарантии восстановления важных данных, необходимо копировать архивы в несколько мест хранения. Отдельный диск может помочь в случае порчи основного, но в случае если устройство будет потеряно или украдено, он будет так же Автоматическое резервное копирование 1С:Предприятия в облако с помощью ПО Effector Saver 0
Всем известно, для большей гарантии восстановления важных данных, необходимо копировать архивы в несколько мест хранения. Отдельный диск может помочь в случае порчи основного, но в случае если устройство будет потеряно или украдено, он будет так же Веб браузер в 1С используя поле HTML документа 3
Настраивал клиенту CRM, он захотел - чтобы панель управления сайтом была в 1С. Хочет - делаем: Обработка Веб браузер проста, состоит из поля HTML документа и 20 строчек кода: Код команд: НаКлиенте Процедура Команда1(Команда) Объект.HTML = Посмотреть все результаты поиска похожих
Еще в этой же категории
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Что такое менеджер временных таблиц и как с ним работать? 11
В 1С есть такая замечательная вещь, как МенеджерВременныхТаблиц . Этот объект позволяет передавать временные таблицы из одного запроса в другой. То есть, мы можем создать временную таблицу в запросе, прерваться, выполнить какой-нибудь код, и продо Объектная модель схемы запроса 5
Периодически во встроенном языке возникает необходимость изменения текста запроса в зависимости от разных алгоритмических условий. Раньше подобная задача решалась путем непосредственного формирования нужного текста запроса в виде строки. А это не вс Как в запросе объединить несколько значений в один столбец отобрав по условию? 1
Бывают ситуации, особенно когда формируешь отчеты по проводкам, где надо вывести отчет по одному типу значений и эти значения могут быть в разных колонках регистра. В примере ниже, необходимо собрать отчет в разбивке по Номенклатурным группам. Про Курс по разработке и оптимизации запросов в 1С (Часть 1) 0
Часть 1. Основные конструкции языка запросов и их назначение • Назначение языка запросов • Структура запроса • Основные секции запроса и их назначение • Группировка результатов запроса • Фильтрация результатов запроса • Объединения и соединени Посмотреть все в категории Запросы
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: упорядочивание
Автор уроков и преподаватель школы: Владимир Милькин
Упорядочивание в запросах
Давайте напишем запрос, который получает из таблицы Справочник.Еда код и название еды:
Как всегда, выполните этот запрос у себя на компьютере.
С большой долей вероятности у вас получится следующий результат:
Возможно вы удивитесь, но при таком написании запроса никто не гарантирует нам именно такого порядка выдачи записей в таблице. В случае использования клиент-серверного режима работы на различных СУБД результат мог бы быть и такой:
И . ну в общем вы поняли, что если мы не указываем порядок сортировки (упорядочивания) результата запроса, то этот самый порядок может быть абсолютно любым.
Секция УПОРЯДОЧИТЬ ПО
Поля по которым требуется упорядочить запрос перечисляются в секции УПОРЯДОЧИТЬ ПО через запятую:
Следом за именем поля упорядочивания может идти одно из двух ключевых слов:
- ВОЗР- упорядочивание по возрастанию.
- УБЫВ - упорядочивание по убыванию.
Если не указывать ни одно из этих слов, считается, что сортировка идёт по возрастанию.
Вооружившись знаниями, давайте упорядочим результат нашего запроса по убыванию поля Код:
По возрастанию поля Наименование (алфавитный порядок):
А теперь упорядочим следующую таблицу
так, чтобы сначала шла сортировка по полю Вкус по возрастанию, а затем (среди строчек с одинаковым значением поля Вкус) шла сортировка по полю Цвет по убыванию:
Отдельно обращаю ваше внимание на то, что мы указали сортировку не по самим полям Вкус и Цвет, а по их строковому реквизиту Наименование. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Это связано с тем, что сортировка возможна лишь по полям имеющим один из типов: Строка, Число, Дата.
А поля Вкус и Цвет являются ссылками на элементы справочников Вкус и Цвет, сортировать по которым не имеет смысла (в этом случае сортировка будет вестись по внутреннему идентификатору ссылки). Зато можно сделать сортировку по одному из реквизитов этих элементов. Наиболее подходящим в нашем случае будет строковый реквизит Наименование.
Возможность автоупорядочивания
Ключевое слово АВТОУПОРЯДОЧИВАНИЕ позволяет включить режим автоматического формирования полей для упорядочивания результатов запроса.
Мы сейчас познакомимся с этой возможностью подробно, но сразу хочется оговориться, что фирма "1С" в своих методических рекомендациях не советует использовать её без необходимости (о причинах этого мы поговорим ниже).
Прежде всего, ключевое слово АВТОУПОРЯДОЧИВАНИЕ может быть расположено в запросе сразу за или вместо секции УПОРЯДОЧИТЬ ПО:
Автоупорядочивание работает по следующим принципам:
Тогда ссылка на каждую таблицу в этой секции будут заменена полями, по которым по умолчанию сортируется эта таблица.
Для таблиц справочников полями сортировки по умолчанию являются код и наименование, выбор из которых осуществляется в соответствии с настройками справочника в конфигураторе:
Для таблиц документов полем сортировки по умолчанию является дата документа.
Так как поле сортировки ЛюбимыйЦвет имеет тип Справочник.Цвета, в настройках которого основным представлением выбрано поле Наименование, то этот запрос эквивалентен:
- отсутствует секция УПОРЯДОЧИТЬ ПО
- но есть секция ИТОГИ ПО (её мы будем проходить позже)
В этом случае результат запроса будет упорядочен по полям итогов (в той же последовательности).
Если среди этих полей есть ссылки на таблицы, то они также будут заменены полями, по которым сортируются эти таблицы по умолчанию.
- отсутствует секция УПОРЯДОЧИТЬ ПО
- отсутствует секция ИТОГИ ПО
- но есть секция СГРУППИРОВАТЬ ПО (группировку мы проходили здесь)
В этом случае результат запроса будет упорядочен по полям группировки (в той же последовательности).
Если среди этих полей есть ссылки на таблицы, то они также будут заменены полями, по которым сортируются эти таблицы по умолчанию.
Так как поле группировки Город имеет тип Справочник.Города, в настройках которого основным представлением выбрано поле Наименование, то этот запрос эквивалентен:
Наконец, если в запросе:
- отсутствует секция УПОРЯДОЧИТЬ ПО
- отсутствует секция ИТОГИ ПО
- отсутствует секция СГРУППИРОВАТЬ ПО
В этом случае результат запроса будет упорядочен по полям сортировки по умолчанию для таблиц, из которых выбираются данные, в порядке их появления в запросе.
Так как данные выбираются из справочника Еда, в настройках которого основным представлением выбрано поле Наименование, то этот запрос будет эквивалентен:
Почему использование автоупорядочивания нежелательно
- для универсальных запросов, когда разработчик не может предвидеть из каких таблиц будут запрашиваться данные
- для случаев, когда получаемый порядок записей не важен, но при этом он должен быть одинаковым в независимости от применяемой СУБД
Во всех остальных случаях использовать возможность автоупорядочивания нежелательно, так как поля, которые являются полями сортировки сегодня, могут перестать быть такими завтра.
Например, сегодня мы можем написать код, чувствительный к тому, чтобы результаты запроса из справочника Еда были отсортированы по полю Наименование.
А завтра фирма "1С" (или другой разработчик) изменят настройки базы в конфигураторе так, что полем сортировки по умолчанию для справочника Еда станет, к примеру, поле Код. И, если мы использовали автоупорядочивание в запросе, то наш отчет сломается, ведь порядок сортировки уже будет другим. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Поэтому всегда старайтесь указывать конкретные поля и конкретный порядок сортировки по ним в секции УПОРЯДОЧИТЬ ПО, такой запрос уже не сломать просто так:
Упорядочивание в запросе 1С 8.3 - это функция сортировки результата запроса, для которой используются операторы УПОРЯДОЧИТЬ ПО и АВТОУПОРЯДОЧИВАНИЕ.
- В секции с оператором УПОРЯДОЧИТЬ ПО можно использовать агрегатные функции (СУММА, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, КОЛИЧЕСТВО [РАЗЛИЧНЫЕ]), которые были использованы для группировки результата. Сортировка для строк, чисел и булево (примитивных типов) происходит по алфавиту и возрастанию. Для ссылочных типов сортировка происходит не по коду (или представлению ссылки), а по уникальному идентификатору (внутреннему представлению ссылки). Если указано свойство иерархичности, то возможно упорядочивание в соответствии с иерархией.
- Оператор АВТОУПОРЯДОЧИВАНИЕ включает режим автоматического упорядочивания полей и используется для вывода записей в неизменном (постоянном) порядке. Аналогичен сортировки по умолчанию: для документов это дата и номер, а для справочников это код или наименование. В том случае, когда поле для упорядочивания ссылается на иерархический справочник, то будет применена иерархическая сортировка по данному справочнику. Автоупорядочивание в запросе может сильно тормозить процесс. Если сортировка не нужна, лучше вообще ее не использовать. Во многих случаях эффективнее записать сортировку через ключевое слово УПОРЯДОЧИТЬ ПО .
✔ Упорядочивание результата запроса по определенным полям
&НаСервере
Процедура УпорядочиваниеРезультатаЗапросаПоОпределеннымПолям ()
// Выборка материалов, упорядоченных сперва по возрастанию срока использования,
// а потом по убыванию веса
Запрос = Новый Запрос ( "ВЫБРАТЬ
| Наименование,
| СрокИспользования,
| Вес
|ИЗ
| Справочник.Материалы
|УПОРЯДОЧИТЬ ПО
| СрокИспользования ВОЗР,
| Вес УБЫВ" );
РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
&НаСервере
Процедура УпорядочиваниеРезультатаЗапросаПоИерархии ()
// Выборка контрагентов в порядке их следования в иерархии
Запрос = Новый Запрос ( "ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Контрагенты КАК Производитель
|УПОРЯДОЧИТЬ ПО
| Наименование Иерархия" );
РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
&НаСервере
Процедура УпорядочиваниеРезультатаЗапросаПоВыражению ()
// Выборка материалов, упорядоченных сперва по убыванию максимальной фасовке и плотности вместе
Запрос = Новый Запрос ( "ВЫБРАТЬ
| Наименование,
| Фасовка,
| Плотность
|ИЗ
| Справочник.Материалы
|УПОРЯДОЧИТЬ ПО
| (Фасовка + Плотность) УБЫВ" );
РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
&НаСервере
Процедура УпорядочиваниеРезультатаЗапросаПоАгрегатнойФункцииГруппировки ()
// Выборка материалов с минимальным весом и группировкой по сроку использования
// Запрос отсортируем по минимальному весу
Запрос = Новый Запрос ( "ВЫБРАТЬ
| СрокИспользования,
| МИНИМУМ(Вес)
|ИЗ
| Справочник.Материалы
|СГРУППИРОВАТЬ ПО
| СрокИспользования
|УПОРЯДОЧИТЬ ПО
| МИНИМУМ(Вес) ВОЗР" );
РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
&НаСервере
Процедура АвтоупорядочиваниеРезультатаЗапроса ()
// Сортировка по полю Ссылка и использование ключевого слова АВТОУПОРЯДОЧИВАНИЕ. При этом
// поле Ссылка в секции УПОРЯДОЧИТЬ ПО будет автоматически изменена на дату документа.
Запрос = Новый Запрос ( "ВЫБРАТЬ
| ПоступлениеМатериалов.Ссылка
|ИЗ
| Документ.ПоступлениеМатериалов КАК ПоступлениеМатериалов
|УПОРЯДОЧИТЬ ПО
| ПоступлениеМатериалов.Ссылка
|АВТОУПОРЯДОЧИВАНИЕ" );
РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Читайте также: