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

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.03.2019

Просмотров: 50449

Скачиваний: 8600

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

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

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

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

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

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

Получение движений регистра накопления

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

Листинг 3.20. Отбор движений из регистра накопления по регистратору


background image

В данном запросе на список движений регистра ТоварыНаСкладах накладывается отбор
по полю Регистратор. Выбранный документ-регистратор ПоступлениеТоваров или
РеализацияТоваров передается как значение параметра &Регистратор.

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

Рис. 3.25. Отбор движений из регистра накопления по регистратору

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

Листинг 3.21. Отбор движений из регистра накопления по складу и виду движения

В данном запросе на список движений регистра ТоварыНаСкладах накладывается отбор
по полю Склад. Кроме того, выбираются только те движения, которые произвел в
регистре документ РеализацияТоваров. Для этого при помощи оператора ССЫЛКА
проверяется, ссылкой на какой документ является поле Регистратор регистра
накопления.


background image

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

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

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

Рис. 3.26. Отбор движений из регистра накопления по складу и виду движения

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

Данная задача может быть решена при помощи следующего запроса (листинг 3.22).

Листинг 3.22. Отбор движений из регистра накопления по дополнительной информации


background image

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

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

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

Рис. 3.27. Отбор движений из регистра накопления по дополнительной информации

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

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

Виртуальная таблица Остатки имеет следующий состав полей:

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


background image

определенных для регистра как объекта конфигурации. Имена полей соответствуют
именам ресурсов, как они заданы в конфигураторе, с добавлением слова Остаток.

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

Период – имеет тип ДатаМоментВремени или Граница. Используется для
указания периода, на значение которого будут рассчитаны остатки. Если параметр не
задан, остатки рассчитываются по самую последнюю запись;
Условие – содержит конструкцию языка запросов – условие. Строится по полям
регистра накопления (или по подчиненным им полям). Используется для ограничения
состава исходных записей, по которым при построении виртуальной таблицы будут
получаться итоги. То есть условие будет применяться к исходным записям, а не к уже
отобранным. Если параметр не указан, для получения итогов будут анализироваться
все активные записи регистра.

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

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

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

В результате для товара Клавиатура Apple Pro Keyboards на дату 03.02.2013 мы
получим следующий результат (рис. 3.28).