Разработка в 1С 8.0

         

Например:


ВЫБРАТЬ Справочник.Товары.Наименование, Справочник.Товары.Цена

ВЫБРАТЬ Справочник.Сотрудники.*



НЕДЕЛЯ (<дата>)


 

Определяет номер недели в году по дате (от 1 до 53).  



Несколько итогов в запросе


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

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



Объединения / Псевдонимы




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



ОбъемПродаж


 

1С:Торговля и Склад 7.7 Проф  

1540  

Windows XP Home Edition Russian CD  

1360  

Windows XP Home Edition Russian UPG CD  

1105  

Windows XP Professional Russian CD  

2480  

Доставка  

40  

Инсталляция ПО  

60  

Клавиатура Apple Pro Keyboards  

5890  

Клавиатура Keyboard PS/2  

384  


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



Обход по группировкам


Третий, и последний способ обхода результата ? по группировкам. Он сходен с иерархическим обходом, но с одним различием: записи с иерархическими итогами при обходе в нем рассматриваются как детальные записи, а не как узловые. Для получения выборки по группировкам из результата запроса необходимо вызвать метод Выбрать объекта РезультатЗапроса с параметром ОбходРезультатаЗапроса.ПоГруппировкам:

СпособВыборки= ОбходРезультатаЗапроса.ПоГруппировкам;  

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

 

Перебрав такую выборку для нашего примера, мы получим записи с номерами 1, 2, 7, 11, 12, 16, например:



Общие итоги


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



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


 

% (процент)  

Последовательность, содержащая любое количество произвольных символов (как и было использовано в последнем примере). Например, шаблон «%ый» обозначает любую строку, заканчивающуюся на «ый».  

_ (подчеркивание)  

Один произвольный символ. Например, под шаблон «_аша» подходят Маша, Даша, Саша, Паша и т.д.  

[...] (в квадратных скобках один или несколько символов)  

Любой одиночный символ из перечисленных внутри квадратных скобок. Например, под шаблон <<[МД]аша» подходят Маша или Даша. В перечислении могут встречаться диапазоны, например, А-Я, означающие произвольный символ, входящий в диапазон, включая концы диапазона.  

[^...] (в квадратных скобках значок отрицания (крышечка), за  

которым следует один или несколько символов  

Любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания. Например, под шаблон «[^МД]аша» Маша и Даша уже не подходят, а подходят Паша и Саша.  


Если необходимо записать один из перечисленных символов в качестве самого себя, а не в качестве служебного символа, то ему должен предшествовать спецсимвол, который определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.

Например, следующая строка обозначает любую строку, начинающуюся со знака подчеркивания «__». Так как знак подчеркивания является служебным, то для его использования в качестве именно знака подчеркивания, необходимо его экранировать другим спецсимволом, например «\»:

 

ВЫБРАТЬ Наименование ИЗ Справочник.СистемныеФайлы

ГДЕ Наименование ПОДОБНО "\_%" СПЕЦСИМВОЛ "\"

ОсновнойПоставщик


Монитор 19" Hitachi CM715ET  

 

Монитор LCD 22" M8537ZM/A  

 

Мышь GENIUS «EASY» (3 кнопки)  

 

Мышь Ice Mouse MUS-2  

 

Мышь LOGITECH M-S48 PS/2  



Параметры в языке запросов


Обычно требуется, чтобы параметры условий пользователь мог указать самостоятельно в каком-либо диалоге. Для этого запрос конструируется с использованием параметров. Обратите внимание, что в следующем запросе параметр МинЦена предваряется знаком «&».

ВЫБРАТЬНаименование, ЗакупочнаяЦена

ИЗ Справочник.Номенклатура

ГДЕ ЗакупочнаяЦена >= &МинЦена

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

 

//создание объекта Запрос с текстом запроса

Запрос = Новый Запрос("Выбрать Наименование, Цена

|ИЗ Справочник.Номенклатура

|ГДЕ Цена >= МинЦена");

 

//передача параметров в запрос

Запрос.УстановитьПараметр("МинЦена",1000);

 

//выполнение запроса с установленными параметрами 

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

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



ПОДСТРОКА (<Строка>, <Позиция>, <ЧислоСимволов>)


 

Данная функция предназначена для выделения подстроки из строки.  



ПоГруппировкам


;

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

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

 

//выведем в окно сообщений поля из результата  

Сообщить("Группа товаров: " + СокрЛП(Выборка.Наименование)   

+ "Количество: "+ СокрЛП(Выборка.Количество));  

 

//выберем дочерние записи линейным способом 

ВыборкаДочерних = Выборка.Выбрать();

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

Сообщить(" Товар: " + СокрЛП(Выборка.Наименование)   

+ " Количество: " + СокрЛП(Выборка.Количество));  

КонецЦикла;  

КонецЦикла;



ПоГруппировкамСИерархией


;  

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

ВыдатьРекурсивно (Выборка);  

КонецПроцедуры

 

Процедура ВыдатьРекурсивно(Выборка)

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

 

//выведем в окно сообщений поля из результата   

Товар = Выборка.Наименование;  

Количество = Выборка.Количество;  

Сообщить("Товар: " + СокрЛП(Товар) +  

"Количество: " + СокрЛП(Количество));  

 

//продолжим выборку подчиненных записей  

СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкамСИерархией;  

ВыдатьРекурсивно(Выборка.Выбрать(СпособВыборки));  

КонецЦикла;  

КонецПроцедуры



Поля из вложенных таблиц


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

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

//требуются все поля из вложенной таблицы

ВЫБРАТЬ Документ.РасходнаяНакладная.Состав

ВЫБРАТЬ Документ.РасходнаяНакладная.Состав.*

 

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

ВЫБРАТЬ Документ.РасходнаяНакладная.Состав.Сумма

 

//требуется несколько полей из табличной части

ВЫБРАТЬ Документ.РасходнаяНакладная.Состав.(Количество,Сумма) 

 

//для полей вложенной таблицы можно указать псевдонимы 

ВЫБРАТЬ Документ.РасходнаяНакладная.Состав.(Количество КАК Кол, 

Сумма КАК Сум)  



ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ


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

Таким образом, в результат запроса будут включены все записи из обоих источников; они будут соединены друг с другом при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из какого-либо источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.



Порядок


Если требуется, укажите условия сортировки полученной информации.



ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ


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

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

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

ВЫБРАТЬ Спр.Наименование, Peг.Курс

ИЗ РегистрСведений.КурсыВалют.СрезПоследних() КАК Peг

ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Справочник.Валюты КАК Спр

ПО Спр.Ссылка = Peг.Валюта



можно построить запрос без


ВЫБРАТЬНаименование, Цена ИЗ Справочник.Товары

ВЫБРАТЬ * ИЗ Справочник.Сотрудники

ВЫБРАТЬ Номер, Дата, Представление ИЗ Документ.РасходнаяНакладная

ВЫБРАТЬ * ИЗ РегистрНакопления.Продажи

В системе 1С:Предприятие 8. 0 можно построить запрос без указания ключевого слова ИЗ, тогда список полей должен содержать полные имена таблиц,  





Примеры значений


Булево  

ИСТИНА; ЛОЖЬ (других значений не существует)  

Строка  

«Иванов»; «Петров»  

Число  

15; 15.2; -10.20  

Дата  

ДАТАВРЕМЯ(2003,12,23,16,56,00)  

ДАТАВРЕМЯ(2003,12,23)  

 

 

Обратите внимание, что значения типа «дата» задаются с помощью ключевого слова ДАТАВРЕМЯ, после которого в скобках последовательно указываются год, месяц, день, час, минута и секунда.  

 

В запрос также могут передаваться параметры. Эта возможность уже использовалась нами при рассмотрении предложения ГДЕ. Значения параметров могут использоваться в выражениях языка запросов, для этого необходимо указать символ «&» и после него имя параметра.  

 

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



Продано


 

Клавиатура Apple Pro Keyboards  

79  

Клавиатура Keyboard PS/2  

79  

Клавиатура LK-601 KB-2000 PS/2  

76  

Мышь 2-кноп A4Tech PS/2  

102  

Мышь Ice Mouse MUS-2  

89  

Мышь LOGITECH M-S48 PS/2  

98  

Приведем другой пример, когда отбор групп необходим. Выберем клиентов, купивших за заданный период товаров на сумму 10000 и выше:  



Продажи


 

1С:Аспект 7.7  

Алекс-2002  

270  

1С:Аспект 7.7  

Магазин на ул.Алексеева  

270  

1С:Аспект 7.7  

Эльбрус  

180  

1С:Бухгалтерия 7.7  

Магазин на ул.Алексеева  

210  

1С:Бухгалтерия 7.7  

Эльбрус  

140  

 



Проверка пустых значений (ЕСТЬ NULL/IS NULL)


Оператор ЕСТЬ NULL позволяет проверить значение заданного выражения на NULL.



Проверка ссылочного значения (ССЫЛКА / REF)


Оператор ССЫЛКА позволяет проверить, является ли значение выражения ссылкой на таблицу, указанную справа от него. Этот оператор полезен для полей, имеющих составной тип данных. Следующий запрос выбирает товары, для которых единица измерения ссылается на справочник ЕдиницыИзмерения, а не является, например, строкой.

ВЫБРАТЬ Наименование, ЕдиницаИзмерения

ИЗ Справочник.Номенклатура

ГДЕ ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения



Проверка вхождения значения в список (В / IN)


В условии можно проверять значения на вхождение в некоторый список или на принадлежность группе справочника (или элементу, если иерархический справочник состоит из одних элементов). В случае иерархического справочника можно применять конструкцию В ИЕРАРХИИ для проверки вхождения в группу независимо от уровня иерархии.

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

//выбираем товары из заданного списка

ВЫБРАТЬ Наименование, ЗакупочнаяЦена

ИЗ Справочник.Номенклатура

ГДЕ Ссылка В (&СписокВыбранныхТоваров)

 

//выбираем товары, принадлежащие определенной группе

//независимо от уровня, на котором они находятся

ВЫБРАТЬ Наименование, ЗакупочнаяЦена

ИЗ Справочник.Номенклатура

ГДЕ Ссылка В ИЕРАРХИИ (&ВыбраннаяГруппа)

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

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

 

ВЫБРАТЬ Спр.Наименование, Спр.ЗакупочнаяЦена 

ИЗ Справочник.Номенклатура КАК Спр 

ГДЕ Спр.Ссылка В (ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура 

ИЗ Документ.РасходнаяНакладная.Состав)  


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

 

ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура, Номенклатура.ЗакупочнаяЦена

ИЗ Документ.РасходнаяНакладная.Состав

Это стало возможно, потому что разыменование полей заставляет систему 1С:Предприятие 8.0 производить неявное соединение таблиц. Рекомендуется всегда пользоваться разыменованием полей там, где это возможно, и не усложнять запросы лишними конструкциями.



Псевдонимы источников КАК/AS


В языке запросов есть возможность указать псевдоним для таблицы-источника с помощью ключевого слова КАК. При этом можно обращаться к источнику через псевдоним, например, в списке полей конструкции ВЫБРАТЬ или при соединении таблиц, которое будет описано ниже.

Ниже приведен пример использования псевдонима таблицы-источника:

ВЫБРАТЬ Спр.Наименование,

Спр.Цена,  

Спр.Страна  

 ИЗ Справочник.Номенклатура 



Псевдонимы полей (КАК/AS)


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

В следующем запросе для полей Наименование и ЕдИзм назначаются псевдонимы:

ВЫБРАТЬНаименование КАК Товар, Цена, ЕдИзм КАК ЕдиницаИзмерения

ИЗ Справочник.Товары

УПОРЯДОЧИТЬ ПО Товар

Результат запроса будет следующий:



Сбросить


Отменяет позиционирование. После вызова метода Следующий выборка позиционируется на первую запись.



СЕКУНДА (<дата>)


 

Выделяет секунды из даты (0 до 59).  



Следующий


 

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

 



СледующийПоЗначениюПоля


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

 



Сравнение строк (ПОДОБНО / LIKE)


Ключевое слово ПОДОБНО позволяет сравнить значение строкового выражения, указанного слева от него, со строкой шаблона, указанной справа. Если значение выражения удовлетворяет шаблону, то результатом оператора будет Истина, иначе ? Ложь. Например, следующий запрос выберет всех контрагентов, начинающихся на определенную букву:

ВЫБРАТЬ Наименование ИЗ Справочник.Контрагенты

ГДЕ Наименование ПОДОБНО "М%"



СРЕДНЕЕ (AVG)


Вычисляет среднее арифметическое значение по столбцу.



Страна


 

1С: Бухгалтерия 7.7  

35  

Россия  

1С: Аспект 7.7  

45  

Россия  

Программы  

 

 

1С: Торговля и Склад 7.7  

140  

Россия  

Windows XP  

140  

США  


 

1С: Бухгалтерия 7.7  

35  

Россия  

1С: Аспект 7.7  

45  

Россия  

1С: Торговля и Склад 7.7  

140  

Россия  

1С: Бухгалтерия 7.7  

35  

Россия  

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

часто имеет в виду «меньше или равно», а не «строго меньше».

Возможно, в данном запросе товары с ценой 1000 тоже подойдут, тогда знак «<» надо заменить на «<=».

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

Например, следующие два запроса могут привести к неожиданным для программиста результатам, потому что оператор И имеет больший приоритет, чем ИЛИ (а оператор НЕ имеет еще больший приоритет, чем И):

 

ВЫБРАТЬ Наименование,

ЗакупочнаяЦена КАК Цена,

СтранаПроисхождения КАК Страна

ИЗ Справочник.Номенклатура

ГДЕ СтранаПроисхождения = "Россия" ИЛИ СтранаПроисхождения = "США"

И ЗакупочнаяЦена < 1000

В результате мы получим следующие записи:




Клавиатура Apple Pro Keyboards  

50  

США  

Лазерный принтер Minolta-QMS  

361  

США  

Лазерный принтер HP LaserJet 2200  

720  

США  

Монитор 19" Hitachi CM715ET  

300  

Россия  

Ноутбук Rover Computers Explorer  

1326  

Россия  

Этот запрос будет интерпретирован системой как «Выбрать все товары из страны Россия, независимо от цены, а также товары

из страны США, которые дешевле 1000». Т.е. условие по цене будет проверяться только для товаров из США, а товары из России будут включены в запрос при любой цене.

Вероятно, программист имел в виду совсем другое: «Выбрать товары из России и США, которые дешевле 1000», что реализовано

вторым запросом. Условие по цене будет проверяться для всех товаров, независимо от страны-производителя:

 

ВЫБРАТЬ Наименование,

ЗакупочнаяЦена КАК Цена,

СтранаПроисхождения КАК Страна

ИЗ Справочник.Номенклатура

ГДЕ (СтранаПроисхождения = "Россия" ИЛИ СтранаПроисхождения = "США")

И ЗакупочнаяЦена < 1000




 

Клавиатура Apple Pro Keyboards  

50  

США  

Лазерный принтер Minolta-QMS  

361  

США  

Лазерный принтер HP LaserJet 2200  

720  

США  

Монитор 19" Hitachi CM715ET  

300  

Россия  




Программное обеспечение  

 

Услуги  

 

Клавиатуры  

 

Принтеры  

 

Мониторы  

Обратите внимание, что в результате запроса присутствуют только группы справочника, так как для них поле Страна имеет NULL-значение (вообще не указывается). В результат запроса не попали товары, у которых строковое поле СтранаПроисхождения имеет значение «» (пустая строка). Как уже было сказано выше, ни ноль, ни пустая строка, ни пробел не являются NULL-значением.

Чтобы выбрать товары, у которых не указана страна (строковое поле), нужно применить обычное сравнение на пустую строку:

 

ВЫБРАТЬ Наименование, СтранаПроисхождения КАК Страна

ИЗ Справочник.Номенклатура

ГДЕ СтранаПроисхождения = ""




Доставка  

 

Инсталляция ПО  

 

Консультации по настройке ОС Windows  

 

Монитор 15" LG Studioworks 575N  

 

Если стоит задача выбрать элементы с неуказанным реквизитом, имеющим ссылочный тип, тогда следует поступать по-другому. Например, требуется выбрать все товары с незаполненным полем ОсновнойПоставщик, которое является ссылкой на справочник Контрагенты.

Предлагается следующая схема для решения этой задачи:

 

Запрос = Новый Запрос("

|ВЫБРАТЬ Наименование, ОсновнойПоставщик

|ИЗ Справочник.Номенклатура

|ГДЕ ОсновнойПоставщик = &ПустойКонтрагент ");

Запрос.УстановитьПараметр("ПустойКонтрагент", 

Справочники.Контрагенты.ПустаяСсылка());  

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

В условии запроса используется параметр ПустойКонтрагент. Этот параметр до выполнения запроса получает значение пустой ссылки на справочник Контрагенты. Для этого используется метод ПустаяСсылка объекта СправочникМенеджер.

Результат приведенного выше запроса будет следующий:



Сумма


1С: Бухгалтерия 7.7  

70  

2  

144  

Клавиатура PS/2  

4,5  

2  

22,5  

Монитор 15" LG  

150  

1  

150  

Мышь 2-кноп PS/2  

1,6  

10  

16  

Если запрос делается к табличной части справочника или документа, то обращение к реквизитам шапки документа или обычным реквизитам справочника производится через поле Ссылка, например:

 

ВЫБРАТЬ Ссылка.Дата, Ссылка.Номер,

Номенклатура, Цена, Количество, Сумма  

ИЗ Документ.РасходнаяНакладная.Состав

 


10.01.2002 12:00:01

00016  

1С: Бухгалтерия 7.7  

70  

2  

140  

11.01.2002 12:00:00

00001  

Клавиатура PS/2  

4,5  

5  

22,5  

10.01.2002 12:00:00

00001  

Монитор 15" LG  

150  

1  

150  

10.01.2002 12:00:00

00001  

Мышь 2-кноп PS/2  

1,6  

10  

16  




 

1C: Аспект 7.7  

720  

1С:Бухгалтерия 7.7 Базовая версия  

350  

1C:Бухгалтерия 7.7 Стандартная версия  

280  

1С:Бухгалтерия ПРОФ версия 7.7  

1320  

1С:Торговля и Склад 7.7 Проф  

1540  

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



СУММА (SUM)


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



Связи


Эта закладка появляется, только если в запросе соединяются несколько несколько таблиц. Здесь можно настроить условия соединения.



Таблица документа


Таблица документа предназначена для выборки данных из документов. Она предоставляет следующие поля:

Ссылка

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

ПометкаУдаления

Признак пометки на удаление документа.

Номер

Номер документа. Встроенное поле для всех документов.

Дата

Дата и время документа. Встроенное поле для всех документов.

Проведен

Содержит признак проведенности документа. Данное поле всегда включается в результат, даже если для документа запрещено проведение.

Далее идут реквизиты шапки документа, как они определены в Конфигураторе, например, Контрагент, Склад и т.д.

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

МоментВремени

Виртуальное поле. Содержит момент времени документа, который включает дату и ссылку на документ. Напомним, что тип «дата» включает также и время с точностью до секунды.

Представление

Виртуальное поле. Содержит строку представление документа, например, «Расходная накладная 0035 от 25.07.2003 12:05:01».

Итак, мы рассмотрели две основные таблицыи-сточники данных для справочников и документов. Таблицы-источники для регистров будут представлены в соответствующих главах. Таблицы-источники для других объектов (констант, журналов документов и т.д.) имеют достаточно простую структуру и в данной книге не рассматриваются.



Таблица справочника


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

Ссылка

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

ПометкаУдаления

Признак пометки на удаление элемента справочника. Если равно значению Истина, то элемент помечен на удаление.

Родитель

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

ЭтоГруппа

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

Владелец

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

Представление

Виртуальное поле. Содержит представление элемента справочника, например, его наименование или код.

Код

Код элемента. Встроенное поле для всех справочников.

Наименование

Наименование элемента. Встроенное поле для всех справочников.

Далее идут реквизиты справочника, как они определены в Конфигураторе, например, Цена, ЕдИзм и т.д.

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

Приведем примеры простых запросов к справочнику:

ВЫБРАТЬ Код, Наименование, Цена, Родитель

ИЗ Справочник.Номенклатура

ВЫБРАТЬ *.Представление

ИЗ Справочник.Номенклатура

ВЫБРАТЬ Наименование, ЭтоГруппа, ПометкаУдаления

ИЗ Справочник.Номенклатура

ГДЕ ЭтоГруппа = ИСТИНА И ПометкаУдаления = ЛОЖЬ



Таблицы и поля


На этой закладке выбираются нужные объекты путем переноса их из списка «База данных» в списки «Таблицы» и «Поля».



Таблицы-источники данных


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

В 1C:Предприятии 8.0 существуют следующие таблицы-источники данных для запросов:


·Таблица констант,  

·Таблица справочника,  

·Таблица документов,  

·Таблица журнала документов,  

·Таблицы последовательностей,  

·Таблица плана видов характеристик,  

·Таблица критерия отбора,  

·Таблица плана видов расчета,  

·Таблицы регистров расчета,  

·Таблицы регистров сведений,  

·Таблицы регистров накопления,  

·Таблицы регистров бухгалтерии.  


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



ТипЗаписи


Этот метод возвращает тип текущей записи запроса, который является одним из значений системного перечисления ТипЗаписиЗапроса: ДетальнаяЗапись, ИтогПоГруппировке, ИтогПоИерархии, ОбщийИтог.



Товар


 

Клавиатуры  

Клавиатура Apple Keyboard  

Клавиатура Keyboards PS/2  

Клавиатура Linkworld LK-601 PS/2  

Клавиатура LK-601 КВ-2000 PS/2  

Мониторы  

Монитор 15" LG Studioworks 575N  

Монитор 17" Philips 107S20  

Монитор 19" Hitachi CM715ET  

Монитор LCD 22" LG M8537ZM/A  

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

Следующий запрос это демонстрирует:

ВЫБРАТЬ Номенклатура КАК Товар

ИЗ Документ.РасходнаяНакладная.Состав

УПОРЯДОЧИТЬ ПО Номенклатура.Наименование ИЕРАРХИЯ

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

 

ВЫБРАТЬ Спр.Ссылка Товар, ДокСоставСсылка Документ

ИЗ Справочник.Номенклатура КАК Спр

ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Состав КАК ДокСостав

ПО ДокСостав.Номенклатура = Спр.Ссылка

УПОРЯДОЧИТЬ ПО Спр.Наименование ИЕРАРХИЯ



Упорядочивание по иерархии


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


Это достигается с помощью ключевого слова ИЕРАРХИЯ, которое используется в следующем запросе:

ВЫБРАТЬ Ссылка КАК Товар

ИЗ Справочник.Номенклатура

УПОРЯДОЧИТЬ ПО Наименование ИЕРАРХИЯ

 



Упорядочивание во вложенных таблицах


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

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

Это делается с помощью следующего запроса:

ВЫБРАТЬНаклСостав.Ссылка.Номер,

Номенклатура, Количество

ИЗ Документ.РасходнаяНакладная.Состав КАК НаклСостав

УПОРЯДОЧИТЬ ПО НаклСостав.Ссылка.Номер,

НаклСостав.Номенклатура.Наименование



Уровень


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



Условия


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



Вложенные запросы в списке источников


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

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

 

ВЫБРАТЬ Товары.Номенклатура КАК Товар,

Товары.Номенклатура.ЗакупочнаяЦена КАК Цена

ИЗ (

ВЫБРАТЬ Номенклатура ИЗ Документ.РасходнаяВакладная.Состав

ОБЪЕДИНИТЬ

ВЫБРАТЬ Номенклатура ИЗ Документ.ПриходнаяНакладная.Состав

) КАК Товары

СГРУППИРОВАТЬ ПО Товары.Номенклатура

 



Выходная форма


Эта закладка появляется, если вызван конструктор выходных форм в дереве метаданных или в форме редактирования объекта метаданных. Конструктор выходных форм генерирует не только запрос, но и процедуру его обработки, а также макет.



Все ключевые слова языка запросов


 

Все ключевые слова языка запросов 1С:Предприятие 8.0 имеют английские эквиваленты, совпадающие там, где это возможно, со стандартным SQL. Например, ключевое слово ВЫБРАТЬ может быть заменено на SELECT, а ключевое слово ИЗ на FROM. Полный перечень английских эквивалентов приведен в документации.  

 

В общем случае текст запроса строится по следующей схеме:  

 


Если проверяемое значение равно NULL, то результатом оператора будет Истина, иначе ? Ложь. Применение логического оператора НЕ изменяет действие оператора на обратное. Любая операция обычного сравнения (=, >, <= и т.д.) значения NULL с чем-либо еще дает результат, аналогичный Ложь.

Следующий запрос выбирает из справочника Номенклатура все товары, для которых строковое поле СтранаПроисхождения имеет NULL-значение:

ВЫБРАТЬНаименование, СтранаПроисхождения КАК Страна

ИЗ Справочник.Номенклатура

ГДЕ СтранаПроисхождения ЕСТЬ NULL

 


Запросы к табличным частям


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

ВЫБРАТЬ Товар, Цена, Количество, Сумма

И3 Документ.РасходнаяНакладная.Состав