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

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

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

Срез последних записей регистра Учетная политика предприятия можно получить с помощью следующего запроса (листинг 3.6).

Листинг 3.6. Получение среза последних записей периодического регистра сведений

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

Рис. 3.6. Срез первых и последних записей регистра сведений

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

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

Листинг 3.7. Получение среза последних записей регистра сведений на 10.05.2012

Рис. 3.7. Срез последних записей регистра сведений на заданную дату

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

Рассмотрим еще один периодический регистр сведений Персонифицированный прайслист, который хранит цены номенклатуры в разрезе товаров и покупателей с заданной периодичностью. Ресурсом регистра является Цена, измерениями – Номенклатура и Покупатель, периодичность регистра – В пределах дня (рис. 3.8).

Рис. 3.8. Периодический независимый регистр сведений

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

Срез актуальных цен номенклатуры по покупателям можно получить с помощью следующего запроса (листинг 3.8).

Листинг 3.8. Получение среза последних записей периодического регистра сведений

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

Рис. 3.9. Срез последних записей регистра сведений

Как мы видим, в результат запроса попали пять записей из шести, так как для покупателя Компания «Риона» на номенклатуру Монитор 17' Philips 107S20 цена устанавливалась дважды, и в срезе последних мы видим последнюю цену – 290, установленную

11.01.2013.

Предположим, нам нужно получить срез последних цен номенклатуры, которые были установлены больше или равными 300. Для этого потребуется наложить отбор на записи виртуальной таблицы среза последних. Это можно сделать двумя способами: в условии отбора ГДЕ языка запросов или в параметре виртуальной таблицы. В общем случае для увеличения скорости выполнения запросов рекомендуется использовать второй вариант. Этот вопрос будет подробно рассмотрен в разделе «Использовать параметры виртуальных таблиц».

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

Проверим вышесказанное на примере. Наложим отбор на записи среза последних с помощью предложения ГДЕ языка запросов (листинг 3.9).

Листинг 3.9. Отбор записей виртуальной таблицы среза последних периодического регистра сведений

При выполнении этого запроса сначала из основной таблицы регистра сведений (см. рис.

3.8) получается срез последних записей (см. рис. 3.9), а затем на эти записи накладывается отбор (Цена >= 300). Таким образом мы получаем тех покупателей, для которых последние цены на номенклатуру установлены больше или равными 300. В результате из пяти записей отбираются две (рис. 3.10).

Рис. 3.10. Отбор среза последних записей регистра сведений

Теперь передадим условие отбора во втором параметре виртуальной таблицы Условие

(листинг 3.10).

Листинг 3.10. Отбор записей виртуальной таблицы среза последних периодического регистра сведений

При выполнении этого запроса из основной таблицы регистра сведений (см. рис. 3.8) отбираются записи, удовлетворяющие условию отбора (Цена >= 300), а затем из них получается срез последних записей. Таким образом, мы получаем тех покупателей, для которых цены на номенклатуру хотя бы раз устанавливались больше или равными 300 (рис. 3.11).

Рис. 3.11. Отбор среза последних записей регистра сведений

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

Рассмотрим теперь пример периодического зависимого регистра сведений Цены номенклатуры, подчиненного регистратору – документу Изменение цен компании. Ресурсом регистра является Цена, измерениями – Номенклатура и Тип Цены, периодичность регистра – По позиции регистратора. Кроме того, регистр имеет реквизит Ответственный, в котором хранится дополнительная информация о записях регистра (рис. 3.12).

Рис. 3.12. Регистр сведений, подчиненный регистратору

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

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

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

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

3.11).

Листинг 3.11. Отбор записей подчиненного регистра сведений по регистратору

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

Рис. 3.13. Регистр сведений, подчиненный регистратору

Поскольку регистр периодический, можно получить срез последних цен номенклатуры, установленных определенным сотрудником (листинг 3.12).

Листинг 3.12. Отбор записей виртуальной таблицы среза последних по условию

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

Рис. 3.14. Регистр сведений, подчиненный регистратору

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

Планы видов характеристик

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

Данные каждого плана видов характеристик хранятся в отдельной таблице

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

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

именем, заданным в конфигурации. Количество таких полей равно количеству реквизитов, определенных для плана видов характеристик как объекта конфигурации; <Имя табличной части> – поле, содержащее табличные части вида характеристики. Имена полей соответствуют именам табличных частей плана видов характеристик, как они заданы в конфигураторе. Имеет тип РезультатЗапроса. Результат запроса к табличной части состоит из колонки НомерСтроки и колонок с именами, соответствующими именам реквизитов табличной части; Код – имеет тип Строка. Содержит код вида характеристики;

Наименование – имеет тип Строка. Содержит наименование вида характеристики; ПометкаНаУдаление – имеет тип Булево. Содержит признак пометки на удаление вида характеристики; Предопределенный – имеет тип Булево. Содержит признак того, что данный вид

характеристики определен в метаданных и над ним нельзя производить некоторые операции; Представление – виртуальное поле, не хранится в информационной базе. Содержит

представление вида характеристики; Родитель – содержит ссылку на родителя вида характеристики. Существует только

для многоуровневых планов видов характеристик; Ссылка – содержит ссылку на вид характеристики;

ТипЗначения – имеет тип ОписаниеТипов. Содержит тип значения характеристик данного вида. Является полем неограниченной длины; ЭтоГруппа – имеет тип Булево. Содержит признак того, является ли данная

характеристика группой. Существует только для многоуровневых планов видов характеристик.

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

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

В нашей демонстрационной конфигурации существует план видов характеристик Виды характеристик, который хранит информацию о дополнительных характеристиках номенклатуры (рис. 3.15).

Рис. 3.15. План видов характеристик

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

Пример 1

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

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

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

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

Рис. 3.16. Иерархический план видов характеристик в виде дерева

Пример 2

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

Для нашего плана видов характеристик Виды характеристик определен составной тип данных значений характеристик, содержащий ссылки на справочники Значения характеристик, Контрагенты, а также примитивные типы данных (рис. 3.17).

Рис. 3.17. Тип значения характеристик

Справочник Значения характеристик был добавлен в прикладное решение для того,

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

Рис. 3.18. Справочник «Значения характеристик»

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

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

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