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

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

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

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

Добавлен: 12.03.2019

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

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

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

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

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

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

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

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

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

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


background image

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

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

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

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

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

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

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


background image

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

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

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

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

Использовать параметры

виртуальных таблиц

».

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

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

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

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


background image

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

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

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

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

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

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

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


background image

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

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

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

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

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

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