Категориальное упорядочение результатов запроса


Оглавление (нажмите, чтобы открыть):

Примеры запросов для работы с иерархическими справочниками

Получение элементов иерархического справочника, находящихся в подчинении заданной группы

Для получения подчиненных элементов иерархического справочника в языке запросов предусмотрена конструкция В ИЕРАРХИИ :

В данном примере будут получены все записи справочника Номенклатура , находящиеся в группе &Группа , включая ее саму, ее подчиненные группы и элементы, принадлежащие подчиненным группам.

Если же нас интересуют только элементы и группы, находящиеся непосредственно в заданной группе, то такие элементы мы можем получить, установив условие на поле Родитель :

Такой запрос выберет группы и элементы, находящиеся в подчинении группы со ссылкой &Группа .

Проверка наличия подчиненных элементов у элемента справочника

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

В данном примере ссылка элемента, для которого необходимо проверить наличие дочерних элементов, записывается в параметр запроса &Родитель . После выполнения такого запроса необходимо проверить результат на пустоту. Если результат не пустой, то подчиненные записи есть. Иначе — нет.

Получение всех родителей элемента

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

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

Если число уровней в справочнике ограничено и невелико, то возможно получение всех родителей одним запросом без цикла.

Вывод иерархического справочника в отчет

Для вывода иерархического справочника в отчет с сохранением иерархии необходимо пользоваться запросом аналогичным следующему:

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

Для того, чтобы группы справочника размещались выше элементов необходимо в данном запросе заменить предложение УПОРЯДОЧИТЬ ПО на следующее:

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

Возможна также замена предложения УПОРЯДОЧИТЬ ПО на предложение АВТОУПОРЯДОЧИВАНИЕ . В этом случае результат будет упорядочен в соответствии с настройками справочника, т.е. если в справочнике указано, что группы должны располагаться выше элементов, то они будут расположены выше.

Получить иерархическую структуру справочника также возможно и при помощи итогов:

Получение итогов по иерархии

Для получения итогов по иерархии в запросе необходимо в предложении ИТОГИ ПО указать ключевое слово ИЕРАРХИЯ после указания поля, по которому будет рассчитываться итоги. Пример отчета «Обороты номенклатуры» с получением итогов по иерархии:

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

В случае, когда не нужны итоги по элементам, а нужны итоги только по группам, необходимо использовать в итогах конструкцию ТОЛЬКО ИЕРАРХИЯ :

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

Сортировка результатов запроса (предложение ORDER BY).

Строки результатов запроса, как и строки таблицы базы данных, не имеют определенного порядка. Включив в оператор SELECT предложение ORDER BY, можно отсортировать результаты запроса. Это предложение состоит из ключевых слов ORDER BY, за которыми следует список имен столбцов, разделенных запятыми.

ORDER BY имя_столбца [ASC | DESC], …

В предложении ORDER BY можно выбрать возрастающий или убывающий порядок сортировки. По умолчанию, данные сортируются в порядке возрастания. Чтобы сортировать их по убыванию, следует включить в предложение сортировки ключевое слово DESC.

Например: вывести список фамилий студентов учащихся в группе с кодом 1 в обратном алфавитном порядке.

FROM Students ORDER BY DESC StName

Многотабличные запросы на чтение (объединения).

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

Запросы с использованием отношения предок/потомок.

Среди многотабличных запросов наиболее распространены запросы к двум таблицам, связанным с помощью отношения предок/потомок. Запрос о студентах, учащихся в группе с некоторым названием является примером такого запроса. У каждого студента (потомка) есть соответствующая ему группа (предок), и каждая группа (предок) может иметь много студентов (потомков). Пары строк, из которых формируются результаты запроса, связаны отношением предок/потомок.

Например: вывести список фамилий студентов с названием группы, в которой он учится

SELECT StName, GrName

FROM Students, Groups

WHERE Students.GrNo = Groups.GrNo

Прочие объединения таблиц по равенству

Огромное множество многотабличных запросов основано на отношениях предок/потомок, но в SQL не требуется, чтобы связанные столбцы представляли собой пару «внешний ключ – первичный ключ». Любые два столбца из двух таблиц могут быть связанными столбцами, если только они имеют сравнимые типы данных.

Объединение таблиц по неравенству. Термин «объединение» применяется к любому запросу, который объединяет данные из двух таблиц базы данных путем сравнения значений в двух столбцах этих таблиц. Самыми распространенными являются объединения, созданные на основе равенства связанных столбцов (объединения по равенству). Кроме того, SQL позволяет объединять таблицы с помощью других операций сравнения. Например, получить все коды дисциплин по которым студентом с кодом 1 была получена оценка большая, чем по дисциплине с кодом 1.

FROM Marks AS Marks1, Marks AS Marks2

WHERE Marks1.Mark > Marks2.Mark

AND Marks2.SubjNo = 1 AND Marks1.StNo = 1


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

Полные имена столбцов. В учебной базе данных имеется несколько случаев, когда две таблицы содержат столбцы с одинаковыми именами. Например, столбцы с именем GrNo имеются в таблицах Groups и Students.

Чтобы исключить разночтения, при указании столбцов необходимо использовать их полные имена. Полное имя столбца содержит имя столбца и имя таблицы, в которой он находится. Полные имена двух столбцов GrNo в учебной базе данных будут такими:

В операторе SELECT вместо простых имен столбцов всегда можно использовать полные имена. Таблица, заданная в полном имени столбца, должна, конечно, соответствовать одной из таблиц, заданных в предложении FROM.

Чтение всех столбцов. Как уже говорилось ранее, оператор SELECT * используется для чтения всех столбцов таблицы, указанной в предложении FROM. В многотабличном запросе звездочка означает выбор всех столбцов из всех таблиц, указанных в предложении FROM.

Самообъединения. Некоторые многотабличные запросы используют отношения, существующие внутри одной из таблиц. Предположим, например, что требуется вывести список имен всех преподавателей и их руководителей. Каждому преподавателю соответствует одна строка в таблице Teachers, а столбец ChiefNo содержит идентификатор преподавателя, являющегося руководителем. Столбцу ChiefNo следовало бы быть внешним ключом для таблицы, в которой хранятся данные о руководителях. И он им, фактически, является – это внешний ключ для самой таблицы Teachers.

Для объединения таблицы с самой собой в SQL применяется именно такой подход: использование «виртуальной копии». Вместо того чтобы на самом деле сделать копию таблицы, SQL позволяет вам сослаться на нее, используя другое имя, которое называется псевдонимом таблицы.

Например: вывести список всех преподавателей и их руководителей.

SELECT Teachers. TName, Chiefs.TName

FROM Teachers, Teachers Chiefs

WHERE Teachers. ChiefNo = Chiefs.TNo

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

Внешнее объединение таблиц. Операция объединения в SQL соединяет информацию из двух таблиц, формируя пары связанных строк из этих двух таблиц. Объединенную таблицу образуют пары тех строк из различных таблиц, у которых в связанных столбцах содержатся одинаковые значения. Если строка одной из таблиц не имеет пары, то такой вид объединения, называемый внутренним объединением, может привести к неожиданным результатам (потере некоторых данных в результате запроса). Для создания объединений таблиц, имеющих неодинаковые значения в столбцах, на основе которых осуществляется связь, применяют внешнее объединение таблиц наиболее полно представленное в стандарте SQL2.

Литература:

1. Джеймс Р. Грофф, Пол Н. Вайнберг. SQL: полное руководство: пер.с англ. –К.: Издательская группа BHV, 2000.–608с. Стр. 31–39,69–166.

Дата добавления: 2020-09-22 ; просмотров: 30 ; ЗАКАЗАТЬ РАБОТУ

Сортировка результатов запроса

Обычно Microsoft Access выводит записи в том порядке, в каком они были найдены в базе данных. При необходимости можно изменить последовательность вывода данных в наборе записей запроса, задав порядок сортировки, — точно так же, как это делается для таблиц. Щелкните по строке Сортировкабланка QBE в столбце того поля, по значениям которого необходимо отсортировать записи, и выберите в раскрывающемся списке один из предлагаемых вариантов:

Следует помнить, что выполнять сортировку можно сразу по нескольким полям. Access применяет условия сортировки в порядке их расположения в бланке QBE слева направо. Если для установки нужного порядка возникнет необходимость переместить столбец, щелкните по области выделения столбца (серый прямоугольник над именем поля), чтобы выделить его целиком, и затем перетащите столбец на новое место.

Задание свойств запросов

Для каждого запроса Microsoft Access позволяет устанавливать набор свойств, с помощью которых пользователь определяет функциональные характеристики запроса и представление результатов запроса. Чтобы открыть окно свойств запроса, щелкните в любом месте верхней части окна запроса в режиме конструктора вне списка полей и нажмите кнопку Свойствана панели инструментов. Рассмотрим лишь некоторые из свойств запроса.

Рис. 33. Свойства запроса на выборку

Обычно, при выполнении запроса на выборку в набор записей включаются только некоторые поля. Если необходимо, чтобы были доступны все поля из всех базовых таблиц запроса, установите для свойства Вывод всех полей(рис. 33) значение Да. В большинстве случаев лучше оставить для этого свойства заданное по умолчанию значение Нет.

В зависимости от сложности запроса и количества записей в базе данных Access, может понадобиться несколько секунд (а то и минут), чтобы найти все строки и начать вывод информации на экран. Если пользователя интересуют только «первые» или «верхние» строки набора записей, получаемые при выполнении запроса, можно воспользоваться свойством Набор значенийдля вывода информации на экран, как только Access найдет первые n или первые x% строк. Количество строк в единицах или в процентах заказывает сам пользователь. В раскрывающемся списке предлагаются следующие значения: 5, 25, 100, 5%, 25% и Все.

При выполнении запроса часто возникают ситуации, при которых Microsoft Access находит повторяющиеся записи, удовлетворяющие заданным условиям. Повторяющимися считаются записи, у которых совпадают значения во всех полях. При значении Да свойства Уникальные значения выводятся только те записи, у которых значения всех полей являются уникальными. Свойство Уникальные записи используют, когда из результата запроса требуется исключить повторяющиеся записи, причем только в том случае, если в запросе используются поля из нескольких таблиц.

Свойства Уникальные записи и Уникальные значения не могут одновременно иметь значения Да. Например, при значении Да свойства Уникальные записи автоматически устанавливается значение Нет свойства Уникальные значения. Однако, оба свойства могут одновременно иметь значение Нет. В этом случае выводятся все записи.

Мастер Йода рекомендует:  Искусственный интеллект научили ориентироваться в Нью-Йорке

Остальные свойства используются достаточно редко поэтому здесь не рассматриваются.

Создание отчетов

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

¨ Они предоставляют широкие возможности для группировки и вычисления промежуточных и общих итогов для больших наборов данных.

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

Создание отчета

Перед тем, как приступать к созданию отчета, уделите немного времени обдумыванию его содержания и оформления. Для этого выполните следующее:

¨ Просмотрите таблицы, формы и запросы, имеющиеся в используемой базе данных.

¨ Определите, из каких компонентов должен состоять отчет.

¨ Убедитесь, что все необходимые данные введены в соответствующие таблицы.

¨ Обдумайте возможность использования вместо отчета имеющихся форм; возможно, вам понадобится осуществлять как вывод, так и ввод данных в одном формате. Помните, что в отчет нельзя вводить данные или изменять их.

¨ Просмотрите уже напечатанные отчеты и посоветуйтесь с теми, кто применяет эти отчеты в своей работе, для выявления их недостатков и получения рекомендаций по улучшению.

Рис. 34. Окно диалога Новый отчет

Создание отчетов напоминает создание форм. Для этой цели может использоваться несколько способов. Во-первых, активизируйте окно базы данных, щелкните на корешке вкладки Отчет, а затем на кнопке Создать(рис. 4)или выберите строку Новый отчетв раскрывающемся списке кнопки Новый объектна панели инструментов, либо воспользуйтесь командой меню ВставкаÞОтчет. На экране появится диалоговое окно Новый отчет, представленное на рис. 34. В поле со списком внизу окна диалога, выберите таблицу или запрос, на основании которых будет создаваться отчет.

Далее рассмотрим, как можно разработать отчет в режиме конструктора. Для этого оставьте маркер на строке Конструкторв верхнем поле окна диалога и нажмите кнопку OK. На экране откроется окно нового отчета в режиме конструктора (рис. 35).

Дата добавления: 2020-11-12 ; просмотров: 274 | Нарушение авторских прав

Операция объединения. Упорядочение результатов запроса ORDER BY

Читайте также:

  1. I. Теоретические методы, основанные на логических приемах, тождественные мыслительным операциям.
  2. III. Региональные объединения
  3. ВОПРОС 22. Общественные организации (объединения) как субъекты административного права
  4. Вопрос 27. Объединения юридических лиц.
  5. Гражданско-правовой статус объединения юридических лиц, некоммерческого партнерства, государственная корпорация, государственной компании.
  6. Депутатские объединения в Государственной Думе. Фракции и депутатские группы
  7. Добровольные и институциональные объединения предприятий (организаций)
  8. Договоры об отдельных транспортно-экспедиционных операциях и услугах
  9. Замкнутость реляционной алгебры и операция переименования
  10. Запрос на выборку с групповыми операциями
  11. Златоустовская операция
  12. Конституционно-правовой статус религиозного объединения


Упорядочение результатов запроса ORDER BY

Отбор запросов с помощью условия WHERE

Запрос данных с использованием арифметических выражений

Запрос данных

Команда SELECT языка SQL

В результате выполнения команды создается файл, содержащий все поля данной таблицы.

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

В условиях Where используются следующие предикативы поиска:

а) операторы сравнения ( ,>=, );

б) диапозона BETWEEN – предназначен для проверки на вхождения в диапазон требуемых значений:

Where between and ;

в) вхождения IN – определяет, есть ли заданное значение в списке

where in (значение1,…, значениеN);

г) сопоставление с образцом Like – так же, как в DOS, можно использовать символы маски (символы ‘ _’,’%’ аналогичны ‘?’,’*’ в DOS):

where like “C%” — выбор записей, у которых заданное имя поля начинается с буквы “С”;

д) неопределенное значение IS NULL — проверят неопределенное значение, которое не задавалось. Неопределенные значения означают, что имеются проблемы с записью или что данные должны быть отброшены.

Where not IS NULL — данное поле определено;

е) составные предикативы (not, and,or).

Можно упорядочить результаты по заданному ключу:

Select * from order by

а) внутреннее объединение – двух и более таблиц по заданному условию:

select . [,… . … ] where . = . >;

б) внешнее объединение – когда для связи между двумя и более таблицами используется команда WHERE:

where . = .

6. Выполнение операций добавление, изменение и удаление

a) добавление записи Inset:

Insert into ( [, имя поле2, …]) values ( [, значения2,…])

Добавляет запись с заданным значением для каждого поля.

б) Изменение записи update:

в) Удаление записи delete:

delete from where

В результате действия этой команды записи, удовлетворяющие данному условию, будут помечены на удаление.

Просмотр – это способ визуализации данных.

1. Создание определения просмотра:

Create SQL view as select * from

2. Использование просмотра:

Использование команды SQL и сохранение команды в виде просмотров избавляет от повторной операции набора команды.

Дата добавления: 2015-05-09 ; Просмотров: 124 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Упорядочивание результата запроса по ссылочным полям

При работе с запросами нередко возникает ситуация, когда результат запроса необходимо упорядочить по представлению некоторого ссылочного поля. Например, необходимо упорядочить список номенклатуры по представлению. Заметим, что упорядочивание непосредственно по полю Представление приведет к не вполне ожидаемому результату — результат будет упорядочен в порядке возрастания ссылок объектов. Данный эффект проявляется из-за того, что поле Представление является виртуальным и на уровне базы данных состоит из нескольких полей, из которых уже в момент получения значения поля получается строка — представление. При упорядочивании же по этому полю произойдет последовательное упорядочивание по реальным полям, из которого оно состоит, в результате чего упорядочивание произойдет не по строковому представлению, а по внутренней ссылке поля.

Пример неправильного упорядочивания:
Код 1C v 8.х

На самом деле, упорядочивание по представлению является довольно сомнительной операцией с точки зрения полезности результата. Для примера достаточно посмотреть на представления документов — эти строки содержат в себе даты, а упорядочивание дат как строк не даст осмысленного результата. Для того чтобы обеспечить упорядочивание, которое будет отвечать ожиданиям пользователей, следует использовать упорядочивание непосредственно по ссылочному полю и дополнительно указать в запросе ключевое слово АВТОУПОРЯДОЧИВАНИЕ. В таком случае запрос получит для каждого ссылочного поля реальные поля, по которым его необходимо упорядочить (для документа это будет дата и номер, для справочника — основное представление) и произведет упорядочивание по ним.

Пример правильного упорядочивания:
Код 1C v 8.х


Упорядочить результат запроса.

По запросу вывожу в таблицу тип документов.
ВводНачальныхОстатков
ЗаказПоставщику
ПриходнаяНакладная
ЗаказПокупателя
РасходнаяНакладная
ОприходованиеЗапасов
СписаниеЗапасов

Как мне эти документы упорядочить в нужном мне порядке?

Ненавижу 1С

когда ЗаказПоставщику тогда 2
.

упорядочить по порядок

Ненавижу 1С

(0) Так ведь в 8.3 добавили конструкцию в запрос:

Упорядочение результатов запроса по списку значений

Я работаю над sql-запросом, которому передается список значений в качестве параметра, например

этот список состоит из отношений, используемых в базе данных, и должен храниться в этом порядке.

Я хотел бы заказать результаты по этому списку. Мне нужен только первый результат, но в этом случае он может быть с GroupId 7.

Я не могу запрос

кто-нибудь знает как это сделать это?

дополнительная информация:
Построение соединения работает и запускает его в Редакторе запросов mssql, но.

из-за ограничений программного обеспечения, отправляющего запрос в mssql, я должен передать его некоторому внутреннему построителю запросов в качестве параметра 1, таким образом «24,12,7,14,65». И я не знаю заранее, сколько цифр будет в этом списке, может быть 2, может быть 20.

4 ответов

используйте переменную таблицы или временную таблицу со столбцом идентификатора, введите свои значения и присоединитесь к ним, например

Примеры условий запроса

Используя условия запроса, вы можете находить в базе данных Access определенные элементы. Если элемент соответствует всем введенным условиям, он отобразится в результатах запроса.

Чтобы добавить условие в запрос Access, откройте этот запрос в конструкторе. Затем определите поля (столбцы), на которые распространяется данное условие. Если нужное поле в бланке запроса отсутствует, добавьте его с помощью двойного щелчка. Затем в строке Условия введите для него условие. Дополнительные сведения см. в статье Общие сведения о запросах.

Условие запроса — это выражение, которое Access сравнивает со значениями в полях запроса, чтобы определить, следует ли включать в результат записи, содержащие то или иное значение. Например, = «Воронеж» — это выражение, которое Access сравнивает со значениями в текстовом поле запроса. Если значение этого поля в определенной записи равно «Воронеж», Access включает ее в результаты запроса.

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

В этом разделе

Общие сведения об условиях запроса

Условие похоже на формулу — это строка, которая может включать ссылки на поля, операторы и константы. В Access условия запроса также называются выражениями.

В следующей таблице показаны примеры условий и описано, как они работают.

>25 and значение больше 25 и меньше 50.

DateDiff («гггг», [ДатаРождения], Date()) > 30

Это условие применяется к полю «Дата/время», такому как «ДатаРождения». В результаты запроса включаются только записи, в которых количество лет между датой рождения человека и текущей датой больше 30.

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

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

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

Узнаем, где и как можно добавлять условия. Чтобы добавить условия в запрос, необходимо открыть его в Конструкторе. После этого следует определить поля, для которых вы хотите задать условия. Если поля еще нет на бланке запроса, добавьте его, перетащив его из окна конструктора запросов на сетку полей или дважды щелкнув поле (при этом поле автоматически добавляется в следующий пустой столбец в сетке). Наконец, введите условия в строку Условия.

Условия, заданные для разных полей в строке Условия, объединяются с помощью оператора AND. Другими словами, условия, заданные в полях «Город» и «ДатаРождения», интерпретируются следующим образом:

Город = «Воронеж» AND ДатаРождения DateAdd (« гггг «, -40, Date())

1. Поля «Город» и «ДатаРождения» включают условия.

2. Этому условию соответствуют только записи, в которых поле «Город» имеет значение «Воронеж».

3. Этому условию соответствуют только записи людей, которым не менее 40 лет.

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

Что делать, если требуется, чтобы выполнялось только одно из этих условий? Другими словами, как можно ввести альтернативные условия?

Если у вас есть альтернативные условия, то есть два набора независимых условий, из которых должен выполняться только один, используйте строки Условие отбора и Или на бланке.

1. 1. Условие «Город» указывается в строке «Условие отбора».

2. 2. Условие «ДатаРождения» указывается в строке «или».


Условия, заданные в строках Условие отбора и или, объединяются с помощью оператора OR, как показано ниже.

Город = «Чикаго» OR ДатаРождения или.

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

Если условие является временным или часто меняется, можно фильтровать результаты запроса, вместо того чтобы постоянно менять условия. Фильтр — это временное условие, которое изменяет результат запроса, не изменяя его структуру. Дополнительные сведения о фильтрах см. в статье Применение фильтра для просмотра отдельных записей в базе данных Access.

Мастер Йода рекомендует:  Как найти человека по IP адресу

Если используются одни и те же поля условий, но часто меняются значения, которые вам интересны, вы можете создать запрос с параметрами. Такой запрос предлагает указать значения полей, а затем использует их для создания условий. Дополнительные сведения о запросах с параметрами см. в статье Использование параметров в запросах и отчетах.

Условия для текстовых полей, полей Memo и полей гиперссылок

Примечание: Начиная с версии Access 2013, текстовые поля носят название Краткий текст, а поля Memo — Длинный текст.

Следующие примеры относятся к полю «СтранаРегион», основанном на таблице, в которой хранится информация о контактах. Условие задается в строке Условие отбора поля на бланке.

Условие, заданное для поля «Гиперссылка», по умолчанию применяется к отображаемому тексту, который указан в поле. Чтобы задать условия для конечного URL-адреса, используйте выражение HyperlinkPart. У него следующий синтаксис: HyperlinkPart([Таблица1].[Поле1],1) = «https://www.microsoft.com/», где «Таблица1» — это имя таблицы, содержащей поле гиперссылки, «Поле1» — это само поле гиперссылки, а «https://www.microsoft.com» — это URL-адрес, который вы хотите найти.

Чтобы добавить записи, которые.

Используйте это условие

Точно соответствуют определенному значению, например «Китай»

Возвращает записи, в которых поле «СтранаРегион» содержит значение «Китай».

Не соответствуют определенному значению, например «Мексика»

Возвращает записи, в которых значением поля «СтранаРегион» не является «Мексика».

Начинаются с заданной строки символов, например «С»

Возвращает записи всех стран или регионов, названия которых начинаются с буквы «С», таких как Словакия и США.

Примечание: Символ «звездочка» ( *) в выражении обозначает любую строку символов. Он также называется подстановочным знаком. Список таких знаков см. в статье Справочные сведения о подстановочных знаках в приложении Access.

Не начинаются с заданной строки символов, например «С»

Возвращает записи всех стран или регионов, названия которых не начинаются с буквы «С».

Содержат заданную строку, например «Корея»

Возвращает записи всех стран или регионов, названия которых содержат строку «Корея».

Не содержат заданную строку, например «Корея»

Возвращает записи всех стран или регионов, названия которых не содержат строку «Корея».

Заканчиваются заданной строкой, например «ина»

Возвращает записи всех стран или регионов, названия которых заканчиваются на «ина», таких как «Украина» и «Аргентина».

Не заканчиваются заданной строкой, например «ина»

Возвращает записи всех стран или регионов, названия которых не заканчиваются на «ина», как в названиях «Украина» и «Аргентина».

Содержат пустые значения (или значения отсутствуют)

Возвращает записи, в которых это поле не содержит значения.

Не содержат пустых значений

Возвращает записи, в которых это поле содержит значение.

Содержат пустую строку

Возвращает записи, в которых поле имеет пустое значение (но не значение NULL). Например, записи о продажах другому отделу могут содержать пустое значение в поле «СтранаРегион».

Не содержат пустых строк

Возвращает записи, в которых поле «СтранаРегион» имеет непустое значение.

Содержит нулевые значения или пустые строки

Возвращает записи, в которых значение в поле отсутствует или является пустым.

Ненулевые и непустые

Is Not Null And Not «»

Возвращает записи, в которых поле «СтранаРегион» имеет непустое значение, не равное NULL.

При сортировке в алфавитном порядке следуют за определенным значением, например «Мексика»

Возвращает записи с названиями стран и регионов, начиная с Мексики и до конца алфавита.

Входят в определенный диапазон, например от А до Г

Возвращает страны и регионы, названия которых начинается с букв от «А» до «Г».


Совпадают с одним из двух значений, например «Словакия» или «США»

«Словакия» Or «США»

Возвращает записи для США и Словакии.

Содержат одно из значений, указанных в списке

In(«Франция», «Китай», «Германия», «Япония»)

Возвращает записи всех стран или регионов, указанных в списке.

Содержат определенные знаки в заданном месте значения поля

Right([СтранаРегион], 1) = «а»

Возвращает записи всех стран или регионов, названия которых заканчиваются на букву «а».

Соответствуют заданной длине

Возвращает записи стран или регионов, длина названия которых превышает 10 символов.

Соответствуют заданному шаблону

Возвращает записи стран или регионов, названия которых состоят из пяти символов и начинаются с «Лив», например Ливия и Ливан.

Примечание: Символы ? и _ в выражении обозначают один символ. Они также называются подстановочными знаками. Знак _ нельзя использовать в одном выражении с символом ?, а также с подстановочным знаком *. Вы можете использовать подстановочный знак _ в выражении, где есть подстановочный знак %.

Условия для числовых полей, полей с денежными значениями и полей счетчиков

Следующие примеры относятся к полю «ЦенаЗаЕдиницу», основанном на таблице, в которой хранится информация о товарах. Условие задается в строке Условие отбора поля на бланке запроса.

Чтобы добавить записи, которые.

Используйте это условие

Точно соответствуют определенному значению, например 1000

Возвращает записи, в которых цена за единицу товара составляет 1000 ₽.

Не соответствуют значению, например 10 000

Возвращает записи, в которых цена за единицу товара не равна 10 000 ₽.

Содержат значение, которое меньше заданного, например 1000

Возвращает записи, в которых цена товара больше 999,99 ₽ (>999,99). Второе выражение отображает записи, цена в которых не меньше 999,99 ₽.

Содержат одно из двух значений, например 200 или 250

Возвращает записи, в которых цена товара равна 200 или 250 ₽.

Содержат значение, которое входит в определенный диапазон

Возвращает записи, в которых цена товара не находится в диапазоне от 500 до 1000 ₽.

Содержит одно из заданных значений

Возвращает записи, в которых цена товара равна 200, 250 или 300 ₽.

Содержат значение, которое заканчивается на заданные цифры

Возвращает записи товаров, цена которых заканчивается на 4,99, например 4,99 ₽, 14,99 ₽, 24,99 ₽ и т. д.

Примечание: Знаки * и % в выражении обозначают любое количество символов. Они также называются подстановочными знаками. Знак % нельзя использовать в одном выражении с символом *, а также с подстановочным знаком ?. Вы можете использовать подстановочный знак % в выражении, где есть подстановочный знак _.

Содержат пустые значения (или значения отсутствуют)

Возвращает записи, для которых не введено значение в поле «ЦенаЗаЕдиницу».

Содержат непустые значения

Возвращает записи, в поле «ЦенаЗаЕдиницу» которых указано значение.

Условия для полей «Дата/время»

Следующие примеры относятся к полю «ДатаЗаказа», основанном на таблице, в которой хранится информация о заказах. Условие задается в строке Условие отбора поля на бланке запроса.

Используйте этот критерий

Точно соответствуют значению, например 02.02.2006

Возвращает записи транзакций, выполненных 2 февраля 2006 г. Обязательно ставьте знаки # до и после значений даты, чтобы Access мог отличить значения даты от текстовых строк.

Не соответствуют значению, такому как 02.02.2006

Возвращает записи транзакций, выполненных в любой день, кроме 2 февраля 2006 г.


Содержат значения, которые предшествуют определенной дате, например 02.02.2006

Возвращает записи транзакций, выполненных после 2 февраля 2006 г.

Чтобы просмотреть транзакции, выполненные в определенную дату или после нее, воспользуйтесь оператором >= вместо оператора >.

Содержат значения, которые входят в определенный диапазон дат

>#02.02.2006# and Between. Например, выражение Between #02.02.2006# and #04.02.2006# идентично выражению >=#02.02.2006# and #04.02.2006#

Возвращает записи транзакций, выполненных до 2 февраля 2006 г. или после 4 февраля 2006 г.

Содержат одно из двух заданных значений, например 02.02.2006 или 03.02.2006

#02.02.2006# or #03.02.2006#

Возвращает записи транзакций, выполненных 2 или 3 февраля 2006 г.

Содержит одно из нескольких значений

In (#01.02.2006#, #01.03.2006#, #01.04.2006#)

Возвращает записи транзакций, выполненных 1 февраля 2006 г., 1 марта 2006 г. или 1 апреля 2006 г.

Содержат дату, которая выпадает на определенный месяц (вне зависимости от года), например декабрь

DatePart(«m»; [ДатаПродажи]) = 12

Возвращает записи транзакций, выполненных в декабре любого года.

Содержат дату, которая выпадает на определенный квартал (вне зависимости от года), например первый

DatePart(«q»; [ДатаПродажи]) = 1

Возвращает записи транзакций, выполненных в первом квартале любого года.

Содержат текущую дату

Возвращает записи транзакций, выполненных сегодня. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи, в поле «ДатаЗаказа» которых указано 2 февраля 2006 г.

Содержат вчерашнюю дату

Возвращает записи транзакций, выполненных вчера. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи за 1 февраля 2006 г.

Содержат завтрашнюю дату

Возвращает записи транзакций, которые будут выполнены завтра. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи за 3 февраля 2006 г.

Содержат даты, которые выпадают на текущую неделю

DatePart(«ww»; [ДатаПродажи]) = DatePart(«ww»; Date()) and Year([ДатаПродажи]) = Year(Date())

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

Содержат даты, которые выпадают на прошлую неделю

Year([ДатаПродажи])* 53 + DatePart(«ww»; [ДатаПродажи]) = Year(Date())* 53 + DatePart(«ww»; Date()) — 1

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

Содержат даты, которые выпадают на следующую неделю

Year([ДатаПродажи])* 53+DatePart(«ww»; [ДатаПродажи]) = Year(Date())* 53+DatePart(«ww»; Date()) + 1

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

Содержат дату, которая выпадает на последние 7 дней

Between Date() and Date()-6

Возвращает записи транзакций, выполненных за последние 7 дней. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи за период с 24 января 2006 г. по 2 февраля 2006 г.

Содержат дату, которая выпадает на текущий месяц

Year([ДатаПродажи]) = Year(Now()) And Month([ДатаПродажи]) = Month(Now())

Возвращает записи за текущий месяц. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи за февраль 2006 г.

Содержат дату, которая выпадает на прошлый месяц

Year([ДатаПродажи])* 12 + DatePart(«m»; [ДатаПродажи]) = Year(Date())* 12 + DatePart(«m»; Date()) — 1

Возвращает записи за прошлый месяц. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи за январь 2006 г.

Содержат дату, которая выпадает на следующий месяц

Year([ДатаПродажи])* 12 + DatePart(«m»; [ДатаПродажи]) = Year(Date())* 12 + DatePart(«m»; Date()) + 1


Возвращает записи за следующий месяц. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи за март 2006 г.

Содержат дату, которая выпадает на последние 30 дней или 31 день

Between Date( ) And DateAdd(«M», -1, Date( ))

Записи о продажах за месяц. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи за период со 2 января 2006 г. по 2 февраля 2006 г.

Содержат дату, которая выпадает на текущий квартал

Year([ДатаПродажи]) = Year(Now()) And DatePart(«q»; Date()) = DatePart(«q»; Now())

Возвращает записи за текущий квартал. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи за первый квартал 2006 г.

Содержат дату, которая выпадает на прошлый квартал

Year([ДатаПродажи])*4+DatePart(«q»;[ДатаПродажи]) = Year(Date())*4+DatePart(«q»;Date())- 1

Возвращает записи за прошлый квартал. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи за последний квартал 2005 г.

Содержат дату, которая выпадает на следующий квартал

Возвращает записи за следующий квартал. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи за второй квартал 2006 г.

Содержат дату, которая выпадает на текущий год

Возвращает записи за текущий год. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи за 2006 г.

Содержат дату, которая выпадает на прошлый год

Year([ДатаПродажи]) = Year(Date()) — 1

Возвращает записи транзакций, выполненных в прошлом году. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи за 2005 г.

Содержат дату, которая выпадает на следующий год

Year([ДатаПродажи]) = Year(Date()) + 1

Возвращает записи транзакций, которые будут выполнены в следующем году. Если сегодняшняя дата — 02.02.2006 г., вы увидите записи за 2007 г.

Содержат дату, которая приходится на период с 1 января до текущей даты (записи с начала года до настоящего момента)

Year([ДатаПродажи]) = Year(Date()) and Month([ДатаПродажи]) Date()

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

Фильтр пустых (или отсутствующих) значений

Возвращает записи, в которых не указана дата транзакции.

Фильтр непустых значений

Возвращает записи, в которых указана дата транзакции.

Условия для полей «Да/Нет»

В качестве примера, в таблице «Клиенты» есть логическое поле «Активность», которое показывает текущую активность учетной записи клиента. В таблице отображается, как вычисляются значения, введенные в строке условий логического поля.

«Да», «Истина», 1 или -1

Проверено для значения «Да». После ввода значение 1 или -1 изменяется на «Истина» в строке условий.

Проверено для значения «Нет». После ввода значение 0 изменяется на «Ложь» в строке условий.

Нет значения (null)

Любое число, отличное от 1, -1 или 0

Нет результатов, если это единственное значение условия в поле

Любая строка символов, отличная от «Да», «Нет», «Истина» или «Ложь»

Мастер Йода рекомендует:  Swift — всё по этой теме для программистов

Не удается выполнить запрос из-за ошибки несоответствия типов данных.

Условия для других полей

Вложения. В строке Условие отбора введите Is Null, чтобы включить записи, которые не содержат вложений. Введите Is Not Null, чтобы включить записи с вложениями.

Поля подстановки. Существует два типа полей подстановки: те, которые подставляют значения из существующего источника данных (с помощью внешнего ключа), и те, которые основаны на списке значений, заданном при их создании.

Поля подстановки, основанные на списке значений, имеют текстовый тип данных и принимают такие же условия, как другие текстовые поля.

Условия, которые можно использовать в поле подстановки, основанном на значениях из существующего источника данных, зависят от типа данных внешнего ключа, а не типа подставляемых данных. Например, у вас может быть поле подстановки, которое отображает имя сотрудника, но использует внешний ключ с числовым типом данных. Так как в поле хранится число, а не текст, вы можете использовать условия, которые подходят для чисел, такие как >2.

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

Найдите исходную таблицу в области навигации.

Откройте таблицу в Конструкторе, сделав одно из следующего:


Щелкните таблицу и нажмите клавиши CTRL+ВВОД.

Щелкните таблицу правой кнопкой мыши и выберите пункт Конструктор.

Тип данных для каждого поля указан в столбце Тип данных на бланке таблицы.

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

Создайте запрос, содержащий многозначное поле, и откройте его в Конструкторе.

Разверните многозначное поле, щелкнув символ плюса ( +) рядом с ним. Если поле уже развернуто, то выводится минус ( —). Под именем поля вы увидите поле, представляющее одно значение многозначного поля. Это поле будет иметь то же имя, что и многозначное поле, но к нему будет добавлена строка .Значение.

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

Введите в поле Условие отбора для поля с одним значением условия, подходящие для типа данных, который представляют собой значения.

Каждое значение в многозначном поле будет оцениваться по отдельности на основе указанных условий. Например, допустим, что в многозначном поле хранится список чисел. Если указать условия >5 AND и одно значение меньше 3.

Категориальное упорядочение результатов запроса

К примеру, такая задача: в регистре сведений хранятся какие-то характеристики справочника «Склады». Измерение «Склад», ресурс «Характеристика». Нам нужно получить эту характеристику для склада «Основной». Если такой записи в регистре нет, то нужно найти в регистре запись для какого-нибудь другого склада, взять его характеристику и создать запись регистра с этой характеристикой и складом «Основной».

Мы можем получить запросом записи регистра сведений для складов, и в первую очередь нам нужно будет выяснить, существует ли запись в регистре для интересующего нас склада. То есть, хорошо бы в первой строчке выборки иметь склад «Основной». Если запись есть, то больше ничего не делаем; а если записи нет, то создадим её, используя данные следующего элемента выборки. Для этого в запросе нужно настроить упорядочивание:

&Склад – параметр, которым передаём в запрос склад «Основной».

Запросы в 1С

Запросы в 1С предназначены для получения данных из базы данных. Рассмотрим на что способен данный механизм.

Что такое запрос и язык запросов

Запросы предназначены для извлечения и обработки информации из базы данных для предоставления пользователю в требуемом виде. Под обработкой здесь подразумевается группировка полей, сортировка строк, расчет итогов и т.д. Изменять данные с помощью запросов в 1С нельзя!

Запрос выполняется в соответствии с заданными инструкциями — текстом запроса. Текст запроса составляется в соответствии с синтаксисом и правилами языка запросов. Язык запросов 1С:Предприятие 8 основан на базе стандартного SQL, но имеет некоторые отличия и расширения.

Схема работы с запросом

Общая схема работы с запросом состоит из нескольких последовательных этапов:

  1. Создание объекта Запрос и установка текста запроса;
  2. Установка параметров запроса;
  3. Выполнение запроса и получение результата;
  4. Обход результата запроса и обработка полученных данных.

1. Объект Запрос имеет свойство Текст, которому необходимо присвоить текст запроса.

// Вариант 1
Запрос = Новый Запрос ;
Запрос . Текст =
«ВЫБРАТЬ
| КурсыВалют.Период,
| КурсыВалют.Валюта,
| КурсыВалют.Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Валюта = &Валюта» ;

// Вариант 2
Запрос = Новый Запрос ( «ВЫБРАТЬ
| КурсыВалют.Период,
| КурсыВалют.Валюта,
| КурсыВалют.Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Валюта = &Валюта» );

2. Установка значений параметров осуществляется методом УстановитьПараметр ( Имя >, Значение >) . Параметры в тексте запроса обозначаются символом «&» и обычно используются в условиях отбора (секция ГДЕ) и в параметрах виртуальных таблиц.

Запрос . УстановитьПараметр ( «Валюта» , ВыбраннаяВалюта );

3. После присвоения текста и установки параметров запрос необходимо выполнить и получить результат выполнения. Выполнение производится методом Выполнить () , который возвращает объект РезультатЗапроса. Из результата запроса можно:

  • получить выборку с помощью метода Выбрать ( ТипОбхода >, Группировки >, ГруппировкиДляЗначенийГруппировок >) ;
  • выгрузить значения в таблицу значений или дерево значений с помощью метода Выгрузить ( ТипОбхода >) .

// Получение выборки
РезультатЗапроса = Запрос . Выполнить ();
Выборка = РезультатЗапроса . Выбрать ();

// Получение таблицы значений
РезультатЗапроса = Запрос . Выполнить ();
Таблица = РезультатЗапроса . Выгрузить ();

4. Обойти выборку результата запроса можно с помощью цикла:

Пока Выборка . Следующий () Цикл
Сообщить ( Выборка . Курс );
КонецЦикла;

Полный пример работы с запросом может выглядеть так:

// Этап 1. Создание запроса и установка текста запроса
Запрос = Новый Запрос ;
Запрос . Текст =
«ВЫБРАТЬ
| КурсыВалют.Период,
| КурсыВалют.Валюта,
| КурсыВалют.Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Валюта = &Валюта» ;

// Этап 2. Установка параметров
Запрос . УстановитьПараметр ( «Валюта» , ВыбраннаяВалюта );

// Этап 3. Выполнение запроса и получение выборки
РезультатЗапроса = Запрос . Выполнить ();
Выборка = РезультатЗапроса . Выбрать ();

// Обход выборки
Пока Выборка . Следующий () Цикл
Сообщить ( Выборка . Курс );
КонецЦикла;

Состав текста запроса

Текст запроса состоит из нескольких секций:

  1. Описание запроса — перечень выбираемых полей и источников данных;
  2. Объединение запросов — выражения «ОБЪЕДИНИТЬ» и «ОБЪЕДИНИТЬ ВСЕ»;
  3. Упорядочивание результатов — выражение «УПОРЯДОЧИТЬ ПО …»;
  4. Автоупорядочивание — выражение «АВТОУПОРЯДОЧИВАНИЕ»;
  5. Описание итогов — выражение «ИТОГИ … ПО …».

Обязательной является только первая секция.


Временные таблицы и пакетные запросы

Язык запросов 1С поддерживает использование временных таблиц — таблиц, полученных в результате выполнения запроса и сохраненных на временной основе.

Часто можно столкнуться с ситуацией, когда в качестве источника запроса нужно использовать не таблицы базы данных, а результат выполнения другого запроса. Эту задачу можно решить с помощью вложенных запросов или временных таблиц. Применение временных таблиц позволяет упростить текст сложного запроса, разделив его на составные части, а также, в некоторых случаях, ускорить выполнение запроса и уменьшить количество блокировок. Для работы с временными таблицами используется объект МенеджерВременныхТаблиц. Создание временной таблицы производится при помощи ключевого слова ПОМЕСТИТЬ, за которым следует наименование временной таблицы.

МенеджерВТ = Новый МенеджерВременныхТаблиц ;
Запрос = Новый Запрос ;
Запрос . МенеджерВременныхТаблиц = МенеджерВТ ;

Запрос . Текст =
«ВЫБРАТЬ
| Валюты.Код,
| Валюты.Наименование
|ПОМЕСТИТЬ ВТВалюты
|ИЗ
| Справочник.Валюты КАК Валюты» ;

РезультатЗапроса = Запрос . Выполнить ();

Для использования временной таблицы ВТВалюты в других запросах необходимо этим запросам присвоить общий менеджер временных таблиц — МенеджерВТ.

Пакетный запрос — это запрос, в котором содержится несколько запросов, разделенных символом «;». При выполнении пакетного запроса все входящие в него запросы выполняются последовательно, причем результаты всех временных таблиц доступны всем последующим запросам. Явное присвоение менеджера временных таблиц пакетным запросам не обязательно. Если менеджер временных таблиц не присвоен, то все временные таблицы удалятся сразу после выполнения запроса.

Для пакетных запросов доступен метод ВыполнитьПакет () , который выполняет все запросы и возвращает массив результатов. Временные таблицы в пакетном запросе будут представлены таблицей с одной строкой и одной колонкой «Количество», в которой хранится количество записей. Для отладки пакетных запросов можно использовать метод ВыполнитьПакетСПромежуточнымиДанными () : он возвращает реальное содержимое временных таблиц, а не количество записей.

// Пример работы с пакетным запросом
Запрос = Новый Запрос ;
Запрос . Текст =
«ВЫБРАТЬ
| Валюты.Наименование
|ИЗ
| Справочник.Валюты КАК Валюты
|;
|ВЫБРАТЬ
| Номенклатура.Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура» ;

РезультатПакета = Запрос . ВыполнитьПакет ();

ТЗВалюты = РезультатПакета [ 0 ]. Выгрузить ();
ТЗНоменклатура = РезультатПакета [ 1 ]. Выгрузить ();

// Пример использования временных таблиц в пакетном запросе
Запрос = Новый Запрос ;
Запрос . Текст =
«ВЫБРАТЬ
| Товары.Ссылка КАК Товар
|ПОМЕСТИТЬ ВТТовары
|ИЗ
| Справочник.Номенклатура КАК Товары
|ГДЕ
| Товары.Производитель = &Производитель
|;
|ВЫБРАТЬ
| ВТТовары.Товар,
| ПТУ.Количество,
| ПТУ.Цена,
| ПТУ.Ссылка КАК ДокументПоступления
|ИЗ
| ВТТовары КАК ВТТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПТУ
| ПО ВТТовары.Товар = ПТУ.Номенклатура» ;

Запрос . УстановитьПараметр ( «Производитель» , Производитель );

РезультатЗапроса = Запрос . Выполнить ();
Выборка = РезультатЗапроса . Выбрать ();

Пока Выборка . Следующий () Цикл

Виртуальные таблицы

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

Существуют следующие виртуальные таблицы (в скобках указаны возможные параметры):

  • Для регистров сведений:
    • СрезПервых( , ) — наиболее ранние записи на указанную дату;
    • СрезПоследних( , ) — наиболее поздние записи на указанную дату;
  • Для регистров накопления:
    • Остатки( , ) — остатки на указанную дату;
    • Обороты( , , , ) — обороты за период;
    • ОстаткиИОбороты( , , , , ) — остатки и обороты за период;
  • Для регистров бухгалтерии:
    • Остатки( , , , ) — остатки на указанную дату в разрезе счета, измерений и субконто;
    • Обороты( , , , , , , , ) — обороты за период в разрезе счета, измерений, кор. счета, субконто, кор. субконто;
    • ОстатковИОборотов( , , , , , , ) — остатки и оборотов в разрезе счета, измерений и субконто;
    • ОборотыДтКт( , , , , , , , ) — обороты за период в разрезе счета Дт, счета Кт, Субконто Дт, Субконто Кт;
    • ДвиженияССубконто( , , , , ) — движения вместе со значениями субконто;
  • Для регистров расчета:
    • База( , , , ) — базовые данные регистра расчета;
    • ДанныеГрафика( ) — данные графика;
    • ФактическийПериодДействия( ) — фактический период действия.

При работе с виртуальными таблицами следует накладывать отборы в параметрах виртуальных таблиц, а не в условии ГДЕ. От этого сильно зависит время выполнения запроса.

Конструктор запроса

Для ускорения ввода текстов запросов платформа имеет специальные инструменты: Конструктор запроса и Конструктор запроса с обработкой результата. Для вызова конструкторов необходимо щелкнуть правой кнопкой мыши и выбрать требуемый пункт:

Также конструкторы можно вызвать из главного меню Текст.

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

Конструктор запроса с обработкой результата кроме формирования текста запроса создает готовый фрагмент кода для получения и обработки данных.

Объект СхемаЗапроса

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

  • УстановитьТекстЗапроса ( Текст >) — заполняет свойство ПакетЗапросов на основании переданного текста запроса;
  • ПолучитьТекстЗапроса () — возвращает сформированный на основании свойства ПакетЗапросов текст запроса;

Рассмотрим пример работы с объектом СхемаЗапроса. Для программного формирования текста запроса

ВЫБРАТЬ
Валюты.Ссылка КАК Валюта,
Валюты.Код
ИЗ
Справочник.Валюты КАК Валюты
ГДЕ
НЕ Валюты.ПометкаУдаления

УПОРЯДОЧИТЬ ПО
Валюты.Код

Код на встроенном языке может выглядеть так:

СхемаЗапроса = Новый СхемаЗапроса ;
Пакет1 = СхемаЗапроса . ПакетЗапросов [ 0 ];
Оператор1 = Пакет1 . Операторы [ 0 ];
// добавление источника
ТаблицаРегистра = Оператор1 . Источники . Добавить ( «Справочник.Валюты» , «Валюты» );
// добавление полей
ПолеСсылка = Оператор1 . ВыбираемыеПоля . Добавить ( «Валюты.Ссылка» , 0 );
ПолеКод = Оператор1 . ВыбираемыеПоля . Добавить ( «Валюты.Код» , 1 );
// указание псевдонимов полей
Пакет1 . Колонки [ 0 ]. Псевдоним = «Валюта» ;
Пакет1 . Колонки [ 1 ]. Псевдоним = «Код» ;
// добавление условия
Оператор1 . Отбор . Добавить ( «НЕ ПометкаУдаления» );
// добавление упорядочивания
Пакет1 . Порядок . Добавить ( ПолеКод );
ТекстЗапроса = СхемаЗапроса . ПолучитьТекстЗапроса ();

Остались вопросы?
Спросите в комментариях к статье.

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