Описание языка запросов есть только в бумажной документации. И планирует ли 1С разместить в нем 'Язык запросов'. Запросы 1С - практика применения запросов 1С Предприятие 8.3 с нуля через Интернет. Это связано с широким перечнем возможностей языка запросов : связи и объединения Подробное описание изучаемых тем. Поскольку понятное описание функций языка запросов 1с встречается намного реже, чем описание конструкций, мы решили начать рассматривать .
С, услуги сопровождения 1. С и поддержки в Москве. Итак, начнем. Запрос - это специальный объект в 1. С 8. 2, который используется для формирования и выполнения запросов к таблицам базы данных в системе. Для выполнения запроса необходимо составить текст запроса, в котором описывается какие таблицы будут использоваться в качестве источников данных запроса, какие нужно выбрать поля, какие применить сортировки и группировки и т.
. Краткое знакомство с языком запросов в 1С. Основные методы работы с запросами и конструктором запросов в 1С.
Подробнее о запросах можно прочитать в книге "1. С 8. 2 Руководстве разработчика". Язык запросов 1. С 8. SQL языки запросов баз данных, но есть и отличия. Из основных преимуществ встроенного языка запросов стоит отметить разыменование полей, наличие виртуальных таблиц, удобная работа с итогами и нетипизированные поля в запросах.
Функции языка запросов 1с. Поскольку понятное описание функций языка запросов 1с встречается намного реже, чем описание конструкций, мы решили начать рассматривать именно функции. Глава 2. Язык запросов в системе 1С:Предприятие. указываются условия для построения запроса. Более приближенно к системе 1С:Предприятие источник информации можно определить так. Краткое знакомство с языком запросов в 1С. Основные методы работы с запросами и конструктором запросов в 1С. Эта книга поможет начинающим разработчикам, не знакомым с SQL, освоить язык запросов "1С:Предприятия". Книга также будет полезна и тем, кто . Атрибуты, доступные при описании внутренних переменных. 798. Операторы языка запросов. 802. Объявление внутренней переменной. Методы внешних приложений. 902. Работа системы 1С: Предприятие в качестве OLE Automation сервера. Конфигуратор инструментальное средство разработки приложений Встроенный язык программирования Язык запросов. Для описания этой бизнес логики уже необходимо программирование на встроенном языке '1С:Предприятия' — многообразие вариантов учета в.
Из недостатков – в качестве выходного поля нельзя использовать запрос, нельзя использовать хранимые процедуры, нельзя преобразовать строку в число. Приведу сведения и рекомендации по языку запросов по пунктам. Для повышения читабельности запроса и уменьшения количества параметров запроса можно в запросе применять обращение к предопределенным данным конфигурации с помощью литерала ЗНАЧЕНИЕ (ПРЕДСТАВЛЕНИЕЗНАЧЕНИЯ). В качестве представления значений могут использоваться значение перечислений, предопределенные данные справочников, планов видов расчета, планов видов характеристик, планов счетов, пустые ссылки, значения точек маршрута, значения системных перечислений (например, Вид. Движения. Накопления, Вид. Счета). Примеры: ГДЕ Город = ЗНАЧЕНИЕ(Справочник.
Города. Москва)ГДЕ Город = ЗНАЧЕНИЕ(Справочник. Города. Пустая. Ссылка)ГДЕ Тип. Товара = ЗНАЧЕНИЕ(Перечисление. Виды. Товаров. Услуга)ГДЕ Вид. Движения = ЗНАЧЕНИЕ(Вид. Движения. Накопления. Приход)ГДЕ Точка.
Маршрута =ЗНАЧЕНИЕ(Бизнес. Процесс. Согласование. Точка. Маршрута. Согласие)Выражение в скобках всегда начинается со слова в единственном числе (Справочник, Перечисление и т. Автоупорядочивание в запросе может сильно тормозить процесс. Если сортировка не нужна, лучше вообще ее не использовать.
Во многих случаях эффективнее записать сортировку через ключевое слово УПОРЯДОЧИТЬ ПО. Нужно следить, чтобы при использовании псевдонимов не появилось неоднозначное поле. Иначе система не поймет к какому объекту надо обращаться. Пример запроса с неоднозначным полем: ВЫБРАТЬ Номенклатура.
Ссылка, Остатки. Товаров. Остатки. Количество. Остаток. ИЗ Справочник. Номенклатура КАК Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ Регистр.
Накопления. Остатки. Товаров. Остатки КАК Остатки. Товаров. Остатки ПО Остатки.
Товаров. Остатки. Номенклатура = Номенклатура. Ссылка. Нужно исправить псевдоним таблицы, например, так: «Справочник.
Номенклатура КАК Номенклатура. Номенклатура. Ссылка» соответственно исправить на «Номенклатура. Ссылка». 4. Иногда полезно получать представление ссылочных полей с помощью ключевого слова ПРЕДСТАВЛЕНИЕ наряду со ссылкой для того, чтобы не было повторного обращения к базе данных. Это бывает полезно при выводе результата запроса в таблицу.
Пример: ВЫБРАТЬПРЕДСТАВЛЕНИЕ(Документ. Контрагент) КАК Получатель,ПРЕДСТАВЛЕНИЕ(Документ.
Основание)ИЗДокумент. Расходная. Накладная КАК Документ. Использование в запросе ВЫРАЗИТЬ(Поле КАК Тип) позволяет убрать лишние таблицы из соединения с полем составного типа данных. Тем самым ускорить выполнение запроса. Пример (регистратор - поле с составным типом для физической таблицы регистранакопления Остатки.
Товаров, в запросе выбираются Дата и Номер документов Поступление. Товаров, при этом при обращении к реквизитам документа Дата и Номер через Регистратор не происходит множественного соединения таблицы регистра с таблицами документов, являющихся регистраторами для регистра Остатки. Товаров): ВЫБРАТЬ РАЗЛИЧНЫЕ ВЫРАЗИТЬ(Остатки. Товаров. Регистратор КАК Документ.
Поступление. Товаров). Номер КАК НОМЕРПОСТУПЛЕНИЯ,ВЫРАЗИТЬ(Остатки. Товаров. Регистратор КАК Документ. Поступление. Товаров). Дата КАК ДАТАПОСТУПЛЕНИЯИЗ Регистр. Накопления. Остатки.
Товаров КАК Остатки. Товаров. ГДЕ (ВЫРАЗИТЬ(Остатки. Товаров. Регистратор КАК Документ. Поступление. Товаров) ЕСТЬ НЕ NULL)6. Когда в конфигурации 1.
С есть пользователи, у которых права ограничены на определенные объекты конфигурации, в запросе к таким объектам необходимо использовать ключевое слово РАЗРЕШЕННЫЕ, чтобы запрос выполнился без ошибки (Выбрать Разрешенные ..)7. При объединении таблиц, содержащих вложенные таблицы (например, Документ с табличной частью) бывает полезно ключевое слово ПУСТАЯТАБЛИЦА, когда, например, в одном из документов нет табличной части. Пример: ВЫБРАТЬ Ссылка. Номер, ПУСТАЯТАБЛИЦА.(Ном, Тов, Кол) КАК Состав.
ИЗ Документ. Расходная. Накладная. ОБЪЕДИНИТЬ ВСЕВЫБРАТЬ Ссылка. Номер, Состав.(Номер. Строки, Номенклатура, Количество)ИЗ Документ. Расходная. Накладная.
При работе с соединениями таблиц, содержащих по одной строке, бывает нужно склеить строки таблиц (при этом в обеих таблицах нет такого поля, по которому их можно было соединить). Этого можно добиться, применив конструкцию «ПОЛНОЕ СОЕДИНЕНИЕ Таблица По ИСТИНА». Если в таблицах больше, чем одна строка, то в результате будет количество строк, равное произведению количества строк обеих таблиц. Если в одной таблице О строк, то в результирующей таблице количество строк будет равно количеству строк второй таблицы. Также для соединения таких таблиц можно применять декартово произведение таблиц , при котором в результирующей таблице будут встречаться все комбинации строк из обеих таблиц. Надо помнить, что если в одной из таблиц 0 строк, тогда и декартово произведение будет 0, поэтому полное соединение будет лучше.
Вообще вместо полного соединения ПО ИСТИНА можно использовать и любой другой тип соединения, но в таком случае тоже возможна ситуация, когда в результирующей таблице будет 0 строк, даже если в одной из таблиц будет ненулевое количество строк. В случае полного соединения такая ситуация будет только в одном случае, если количество строк в обеих таблицах равно 0. Если знать, что в таблице есть точно хотя бы одна строка, тогда можно использовать и ЛЕВОЕ СОЕДИНЕНИЕ с другой таблицей с условием ПО ИСТИНА. Пример (правда надуманный, для Полного соединения): ВЫБРАТЬ Первые 1 Пол. Ссылка, К. Контрагент. ИЗ Перечисление. Пол КАК Пол ПОЛНОЕ СОЕДИНЕНИЕ (Выбрать Первые 1 Д.
Контрагент ИЗ Документ. Реализация. Товаров КАК Д Упорядочить По Д. Момент. Времени ) КАК К ПО (ИСТИНА)9. Для того чтобы получить уникальные записи по какому- то полю, правильней вместо группировки пользоваться ключевым словом РАЗЛИЧНЫЕ в запросе, потому что такая конструкция намного наглядней и ключевое слово СГРУППИРОВАТЬ ПО имеет более широкое применение и часто используется, если дополнительно надо рассчитать агрегатные функции по группировкам. В некоторых случаях необходимо вывести ограниченное количество строк.
Для этого в описании запроса в описании запроса следует указать ключевое слово ПЕРВЫЕ и после него – требуемое количество строк. Пример для ПЕРВЫЕ: Выбрать Первые 5.
Справочник. Номенклатура. Наименование,Справочник. Номенклатура. Закупочная. Цена. Упорядочить По. Справочник. Номенклатура. Закупочная. Цена Убыв. Пример для РАЗЛИЧНЫЕ: Выбрать Различные.
Документ. Расходная. Контрагент. 10. Агрегатные функции в запросе можно использовать без ключевого слова СГРУППИРОВАТЬ. В таком случае все результаты будут сгруппированы в одну строку. Пример: Выбрать. Сумма(Накладная. Сумма) Как Сумма. Из. Документ. Расходная. Накладная. Состав Как Накладная.
В запросах в полях выборки можно свободно обращаться к реквизитам полей выборки. Эта возможность называется разыменованием полей выборки.
Если источник данных - вложенная таблица (табличная часть документа), то в полях выборки можно обращаться также к полям основной таблицы (например, через поле Ссылка обратиться к полю основной таблицы Контрагент)Пример: ВЫБРАТЬ Поступление. Товаров. ИУслуг. Товары. Номенклатура, Поступление. Товаров. ИУслуг. Товары.
Номенклатура. Код, Поступление. Товаров. ИУслуг. Товары. Количество КАК Количество, Поступление.
Товаров. ИУслуг. Товары. Ссылка. Контрагент. ИЗ Документ. Поступление.
Товаров. ИУслуг. Товары КАК Поступление. Товаров. ИУслуг. Товары. ГДЕ Поступление. Товаров.
ИУслуг. Товары. Ссылка = & Ссылка. Есть одна особенность использования разыменования полей, если в запросе есть группировки. В любых запросах с группировками в списках полей запроса можно свободно обращаться к реквизитам группировочных полей. Пример: ВЫБРАТЬ Поступление. Товаров. ИУслуг. Товары.
Номенклатура, Поступление. Товаров. ИУслуг. Товары. Номенклатура. Код, СУММА(Поступление.
Товаров. ИУслуг. Товары. Количество) КАК Количество, Поступление. Товаров. ИУслуг. Товары. Ссылка. Контрагент, Поступление.
Товаров. ИУслуг. Товары. Ссылка. Дата. ИЗ Документ. Поступление. Товаров. ИУслуг. Товары КАК Поступление. Товаров. ИУслуг. Товары. ГДЕ Поступление. Товаров.
ИУслуг. Товары. Ссылка = & Ссылка. СГРУППИРОВАТЬ ПО Поступление. Товаров. ИУслуг. Товары. Номенклатура, Поступление.
Товаров. ИУслуг. Товары. Ссылка В справке 1. С написано, что при наличии группировки, в полях выборки запроса могут участвовать только группировочные поля и агрегатные функции по полям выборки. Есть один исключительный случай, когда агрегатные функции применены к полям вложенной таблицы. В этом случае в списке полей выборки возможны обращения к полям таблицы верхнего уровня, без группировки результатов по этим полям. Пример: ВЫБРАТЬ Поступление.
Товаров. ИУслуг. Товары.(СУММА(Количество),Номенклатура), Поступление. Товаров. ИУслуг. Ссылка, Поступление. Товаров. ИУслуг. Контрагент. ИЗ Документ. Поступление. Товаров.
ИУслуг КАК Поступление. Товаров. ИУслуг. СГРУППИРОВАТЬ ПО Поступление. Товаров. ИУслуг. Товары.(Номенклатура)1. Иногда вместо указания какого- либо поля в группировке полезно в поля выборки запроса включить параметр: ВЫБРАТЬ Док. Товары. Номенклатура, & Контрагент, & Период, СУММА(Док. Товары. Количество * Док. Товары. К) КАК Количество, СУММА(Док.
Товары. Сумма) КАК Сумма.