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

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

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

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

Мы не будем детально комментировать весь текст функции, так как вывод данных в

табличный документ уже рассматривался подробно в разделе «Вывод в табличный документ». Обратите особое внимание на выделенные жирным шрифтом фрагменты.

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

подробнее

Подробнее о назначении и использовании виртуальной таблицы оборотов регистра

накопления будет рассказано в разделе «Получение оборотов».

По полю Период рассчитываются итоги с недельной периодичностью за требуемый интервал времени. Для этого при описании итогов по полю Период используется ключевое слово ПЕРИОДАМИ. После него в скобках указывается периодичность – НЕДЕЛЯ и период для получения данных, который устанавливается с помощью параметров запроса &ДатаНачала и &ДатаОкончания, значения которых передаются в функцию.

Затем обратите внимание, что выборка ВыборкаПериод получается из результата запроса методом Выбрать() с типом обхода ПоГруппировкам, списком группировок для обхода "Период" (второй параметр метода) и списком значений группировок для обхода "ВСЕ" (третий параметр метода). Если при получении выборки третий параметр опустить, то в нее не попадут дополненные периоды, то есть те периоды, за которые не было продаж.

Таким образом, если мы сформируем отчет о продажах товаров за период 25.10.2012 – 15.11.2012, мы получим следующий результат (рис. 2.59).

Рис. 2.59. Отчет о продажах товаров за период с дополнением дат с недельной периодичностью

Мы видим, что на начало каждой недели, когда происходили продажи товаров (29 октября и 5 ноября 2012 года) в отчете рассчитаны итоговые суммы продаж. Кроме того, поскольку отчетный период (25.10.2012 – 15.11.2012) включает недели, за которые не было продаж, то на начало каждой такой недели в результат добавляется пустая итоговая строка (22 октября и 12 ноября 2012 года).

Этот пример можно посмотреть в демонстрационной конфигурации «Язык запросов», прилагающейся к книге, в обработке Работа с запросами.

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

Глава 3. Решение прикладных задач

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

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

раздел 5.13 «Планы видов характеристик», раздел 5.14 «Регистры», глава 11 «Бухгалтерский учет»,

глава 12 «Периодические расчеты».

Хранение информации

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

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

Регистры сведений

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

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

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

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

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

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

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

Подчинение регистратору;

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

Это поле существует только для регистров с режимом записи Подчинение регистратору;

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

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

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

Должность, а измерениями – Физическое лицо и Подразделение (рис. 3.1).

Рис. 3.1. Непериодический независимый регистр сведений

Основная таблица регистра содержит следующие данные (табл. 3.1).

Таблица 3.1. Пример заполнения регистра сведений «Сотрудники»

Физическое лицо

Подразделение

Должность

 

 

 

Иванов Иван Сергеевич

Отдел продаж

Руководитель

Семенов Сергей Петрович

Отдел продаж

Менеджер

 

 

 

Семенов Сергей Петрович

Отдел закупок

Руководитель

 

 

 

Петровский Семен Иванович

Руководство компании

Руководитель

 

 

 

Петровская Ирина Ивановна

Бухгалтерия

Бухгалтер

 

 

 

Это самый простой вид регистра, для которого в информационной базе создается таблица, содержащая набор измерений и ресурсов, определенных в конфигураторе. Получение информации из такого регистра с помощью языка запросов аналогично обращению к обычному справочнику. Например, с помощью следующего запроса можно выбрать из регистра тех сотрудников, в наименовании подразделения которых встречается подстрока «Отдел» (листинг 3.1).

Листинг 3.1. Получение информации из регистра сведений «Сотрудники»

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

Рис. 3.2. Отбор в регистре сведений

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

3.2).

Листинг 3.2. Получение информации из регистра сведений «Сотрудники»

В данном пакетном запросе сначала ссылки на совместителей помещаются во временную таблицу Совместители. Для этого записи регистра сведений группируются по полю ФизическоеЛицо и в условии ИМЕЮЩИЕ отбираются только группировки, содержащие больше одной записи. Затем ссылки на такие физические лица из временной таблицы подставляются в условие отбора основного запроса.

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

Рис. 3.3. Информация о совместителях

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

Листинг 3.3. Получение информации из регистра сведений «Сотрудники»

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

Рис. 3.4. Информация о сотрудниках по подразделениям

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

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

измерением – Организация, периодичность регистра – В пределах года (рис. 3.5).

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

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

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

(табл. 3.2).

Таблица 3.2. Пример заполнения регистра сведений «Учетная политика предприятия»

Период

Организация

Метод списания себестоимости

01.01.2011

ООО "АвтоматикаСвязьПроект"

FIFO

 

 

 

 

 

 

01.01.2011

ООО "Информационные системы"

Средневзвешенный

01.01.2011

ООО "Мультимедиа Плюс"

Средневзвешенный

 

 

 

01.01.2012

ООО "АвтоматикаСвязьПроект"

Средневзвешенный

 

 

 

01.01.2012

ООО "Мультимедиа Плюс"

LIFO

 

 

 

01.01.2013

ООО "Информационные системы"

LIFO

 

 

 

Чтобы получить такие данные, достаточно выполнить следующий запрос (листинг 3.4).

Листинг 3.4. Получение информации из периодического регистра сведений

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

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

Как и другие виртуальные таблицы, эти таблицы не хранятся в информационной базе, а формируются на основе данных основной таблицы в момент обращения к ней запросом. Таким образом, разработчик может манипулировать сразу «производными» данными, необходимыми для решения прикладных задач. А тонкости организации оптимального получения этих данных обеспечиваются системой.

Виртуальные таблицы СрезПоследних и СрезПервых имеют следующий состав полей:

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

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

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

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

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

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

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

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

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

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

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

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