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

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

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

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

(Тип("СправочникСсылка.ЗначенияХарактеристик")) содержится в типе значений характеристики.

Врезультате в окно сообщений выводятся виды характеристик, в типе значений которых содержится ссылочный тип данных на справочник Значения характеристик (рис. 3.19).

Рис. 3.19. Вывод видов характеристик с типом значения «Значения характеристик»

Пример 3

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

Таким образом, при помощи отбора по полю Владелец из справочника Значения характеристик можно получить перечень значений для заданного вида характеристики, указанного в параметре ВидХарактеристики (листинг 3.15).

Листинг 3.15. Вывод возможных значений заданной характеристики

Если мы выберем в качестве значения параметра вид характеристики Цвет и выполним запрос в консоли запросов, то мы увидим следующий результат (рис. 3.20).

Рис. 3.20. Значения вида характеристики «Цвет»

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

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

подробнее

О способах хранения дополнительных характеристик подробнее можно прочитать в книге «Реализация прикладных задач в системе «1С:Предприятие 8.2» из серии «Профессиональная разработка».

Мы рассмотрим самый простой способ хранения значений характеристик объектов – в регистре сведений. В нашей демонстрационной конфигурации для этого используется регистр сведений Дополнительные характеристики (рис. 3.21).

Рис. 3.21. Регистр сведений «Дополнительные характеристики»

Измерение регистра Объект содержит ссылку на объект, для которого хранятся значения

характеристик. Измерение ВидХарактеристики содержит ссылку на вид характеристики. Ресурс ЗначениеХарактеристики содержит, собственно, сами значения характеристик объектов.

Таким образом, при помощи отбора по полю ВидХарактеристики из регистра сведений Дополнительные характеристики можно получить значения характеристик конкретных объектов номенклатуры, вид характеристик которых указан в параметре

ВидХарактеристики (листинг 3.16).

Листинг 3.16. Вывод значений характеристик заданного вида из регистра сведений

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

Рис. 3.22. Вывод значений характеристик «Цвет» из регистра сведений

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

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

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

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

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

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

Листинг 3.18. Отбор записей из регистра сведений по значению характеристики

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

Рис. 3.24. Отбор записей из регистра сведений по значению характеристики

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

3.19).

Листинг 3.19. Отбор записей из регистра сведений по значению характеристики

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

Учет движения средств

Регистры накопления

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

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

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

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

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

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

Вид движения – имеет тип системного перечисления ВидДвиженияНакопления.

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

Содержит объект МоментВремени (который включает в себя дату и ссылку на документ-регистратор):

Период – дата записи. Совместно с полями Регистратор и НомерСтроки

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

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

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

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

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

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

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

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

Пример 1

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

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

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

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

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

Пример 2

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

Для этого можно использовать следующий запрос (листинг 3.21).

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

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

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

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

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

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

Пример 3

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

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

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

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

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

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

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

Получение остатков

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

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

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

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

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

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

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

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

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

Пример 1

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

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

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

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