Добавил:
sora.alai.102@gmail.com Делаю работы на заказ. Какие именно? Пишите. Или регайтесь на бирже, где я работаю: https://vsesdal.com/promo?ref=748568 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Хрусталева Е. Ю. Язык запросов 1С-Предприятия 8 (2013)

.pdf
Скачиваний:
2185
Добавлен:
25.11.2018
Размер:
31.3 Mб
Скачать

Листинг 1.38. Отбор записей справочника «Клиенты» по условию

Нажмем кнопку Заполнить параметры и зададим значение параметра ШаблонТелефона как «_-___-___-__-__». Результат запроса (рис. 1.30) полностью совпадает с результатом при выполнении запроса, не использующего параметры в условии отбора

(см. рис. 1.28).

Рис. 1.30. Отбор записей справочника «Клиенты» по параметризированному условию

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

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

Для этого в языке запросов существует удобная возможность – обращаться к табличной части как к отдельной таблице. При этом в тексте запроса можно использовать все ранее изученные нами конструкции: ВЫБРАТЬ, ИЗ и т. п. Синтаксис обращения к таблицеисточнику включает также имя табличной части – <Имя класса объектов>.<Имя объекта конфигурации>.<Имя табличной части>, например Документ.ЗаказТовара.Состав.

Следующий запрос выводит данные всех табличных частей из всех документов

ЗаказТовара (листинг 1.39).

Листинг 1.39. Вывод данных всех табличных частей из всех документов «ЗаказТовара»

В начале главы "Как хранятся данные в «1С:Предприятии»" мы рассматривали, как хранятся данные табличных частей в информационной базе «1С:Предприятия». Поля выборки запроса Товар, Количество, Сумма – это реквизиты табличной части документа, находящиеся в отдельной таблице базы данных, к которой мы обращаемся запросом. В этой таблице хранятся данные всех табличных частей документов определенного вида.

Результат выполнения запроса представлен на рис. 1.31.

Рис. 1.31. Вывод данных всех табличных частей из всех документов «ЗаказТовара»

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

Мы знаем, что поля Номер и Клиент хранятся в основной таблице документа, а поля Товар, Количество, Сумма из табличной части документа – в подчиненной таблице, связанной с основной таблицей по полю Ссылка.

Поскольку в нашем примере источником запроса является подчиненная таблица документа Документ.ЗаказТовара.Состав, то, чтобы получить данные из основной таблицы документа, нужно обращаться к полям таблицы через точку от поля табличной части Ссылка (листинг 1.40).

Листинг 1.40. Вывод данных из основной и подчиненной таблицы документов «ЗаказТовара»

Результат выполнения запроса представлен на рис. 1.32.

Рис. 1.32. Вывод данных из основной и подчиненной таблицы документов «ЗаказТовара»

Конечно, когда данных много, обычно требуется отобрать информацию из определенного документа. Для этого нужно добавить в запрос параметризированное условие, содержащее параметр, имеющий тип ссылки на документ ЗаказТовара (листинг 1.41).

Листинг 1.41. Вывод данных из определенного документа

Нажмем кнопку Заполнить параметры, и параметр Документ будет добавлен в окно параметров консоли запросов. Причем консоль запросов из текста запроса автоматически определяет не только имя, но и тип параметра. В предыдущем примере (см. рис. 1.29) мы использовали в условии отбора параметр примитивного типа (Строка). В данном случае параметр запроса имеет ссылочный тип – ДокументСсылка.ЗаказТовара.

В результате выполнения запроса мы увидим только те записи, которые относятся к конкретному заказу товаров, указанному в параметре Документ (рис. 1.33).

Рис. 1.33. Вывод данных из определенного документа

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

подробнее

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

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

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

ЗаказТовара.Состав), будет иметь тип РезультатЗапроса, то есть содержать вложенный результат запроса, сформированный на основе табличной части (листинг

1.42).

Листинг 1.42. Выбор данных из табличной части в качестве вложенной таблицы

Вложенный результат запроса к табличной части состоит из стандартных полей Ссылка, НомерСтроки и полей с именами, соответствующими именам реквизитов табличной части документа (рис. 1.34).

Рис. 1.34. Поля табличной части, выбираемые запросом

Можно указать конкретные поля табличной части, которые нужно выбрать запросом

(листинг 1.43).

Листинг 1.43. Выбор данных из табличной части в качестве вложенной таблицы

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

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

Рис. 1.35. Вывод данных из документов «ЗаказТовара» в консоли запросов

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

подробнее

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

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

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

Внашей демонстрационной конфигурации существует иерархический справочник Товары с типом иерархии Иерархия групп и элементов. Такой справочник состоит из групп и элементов. Группы – это элементы справочника, которые имеют (или могут иметь) подчиненные себе элементы или другие группы. В отличие от них, элементы не имеют (и не могут иметь) подчиненных себе записей.

Иерархия может быть многоуровневой, то есть внутри групп могут быть другие группы и элементы, не являющиеся группами (рис. 1.36).

Рис. 1.36. Структура иерархического справочника

У рассмотренного на рис. 1.36 иерархического справочника есть стандартные поля: поле Родитель (ссылка на родительские записи у дочерних записей) и поле ЭтоГруппа (ИСТИНА для записей, являющихся группой, и ЛОЖЬ для записей, не являющихся группой).

В нашей демонстрационной конфигурации справочник Товары имеет трехуровневую иерархию и выглядит следующим образом (рис. 1.37).

Рис. 1.37. Справочник «Товары» в режиме «1С:Предприятие»

Выберем поля Код, Наименование, Родитель, ЭтоГруппа из справочника Товары и

отсортируем их по наименованию уже знакомым нам запросом (листинг 1.44).

Листинг 1.44. Вывод записей иерархического справочника «Товары»

Результат выполнения запроса представлен на рис. 1.38.

Рис. 1.38. Вывод записей иерархического справочника «Товары»

Мы видим, что записи справочника отсортированы по наименованию, но элементы групп (Обувь, Детская обувь, Продукты) идут вперемешку. Поскольку справочник является иерархическим, гораздо привычнее видеть записи этого справочника расположенными в иерархическом порядке. По умолчанию так и сделано в «1С:Предприятии».

Для этого изменим текст запроса. В предложении УПОРЯДОЧИТЬ ПО после имени поля Наименование напишем ключевое слово ИЕРАРХИЯ (листинг 1.45).

Листинг 1.45. Вывод записей справочника «Товары», расположенных в порядке иерархии

В результате выполнения этого запроса записи справочника будут расположены в порядке иерархии – начиная от самых верхних корневых записей до самых последних элементов в цепочке иерархии (рис. 1.39).

Рис. 1.39. Вывод записей справочника «Товары», расположенных в порядке иерархии

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

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

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

Листинг 1.46. Вывод значения реквизита иерархического справочника

Для формирования поля выборки Производитель используется операция выбора (ВЫБОР (КОГДА … ТОГДА) ИНАЧЕ … КОНЕЦ). В этой операции после ключевого слова КОГДА записывается условие выбора, после ключевого слова ТОГДА следует значение поля выборки в случае, если условие истинно. В общем случае в операции выбора может указываться неограниченное количество альтернативных одиночных выборов КОГДА … ТОГДА. Значение выражения, указанного после слова ИНАЧЕ, используется в качестве результата операции выбора в том случае, если ни одно из ранее указанных альтернативных условий выбора не было выполнено.

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

(Обувь, Детская обувь, Продукты), в поле выборки запроса Производитель выводится строка «NULL», а для элементов справочника, не являющихся группой, выводится содержимое поля Производитель (рис. 1.40).

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

При этом значения этого поля для некоторых записей (Пинетки, Кроссовки, Сметана) содержат пустую строку, но это не значение NULL – просто для этих элементов справочника значение реквизита Производитель было не заполнено (см. рис. 1.37).