СКД: стандартный период и виртуальные таблицы

  • В этой статье рассмотрим: -> как выглядит дата окончания у объектов «Стандартный период»; -> особенности использования периодов в виртуальных таблицах «Остатки», «Обороты», «Остатки и Обороты».

Дата окончания у объектов «Стандартный период»

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

Обратите внимание, что в колонке «Товар» добавлена запись от 01.01.2021 года и сделан приход «Какая-то номенклатура» в количестве 10 штук. В следующей строке добавлен расход по той же номенклатуре в количестве 1 штука. Запись сделана от 31.12.2021 в 23:59:59

Для демонстрации примера в «Конструктор схемы компоновки данных» добавим отчёт по схеме, которая будет содержать один набор данных «Запрос».

Этот «Запрос» состоит из объединения четырех запросов:

- в первом запросе выбираем физическую таблицу «Регистр товарных запасов»;
- во втором запросе выбираем виртуальную таблицу «Обороты»;
- в третьем запросе выбираем виртуальную таблицу «Остатки»;
- в четвертом запросе выбираем виртуальную таблицу «Остатки и обороты»

А теперь посмотрим как это работает.

Перейдем на вкладку «Параметры». Благодаря тому, что используется флаг «Автозаполнение», конструктор СКД добавил нам три параметра: «Начало периода», «Конец периода» и поле «Период»

Параметры «Конец периода» и «Период» можно объединить в один. Для этого вернемся в «Конструктор запроса» во вкладке «Компоновка данных» для запроса, где мы обращаемся к виртуальной таблице «Остатки», укажем параметр периода, как «Конец периода»

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

Перейдем к настройкам. В поле «Стандартный период» сразу включим пользовательские настройки. Добавим отбор по полю «Товар» и также включим пользовательские настройки

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

Выберем поля: «Период», «Регистратор», «Склад», «Товар», «Количество».

Чтобы в этой группировке вывести данные только из физической таблицы, нужно установить отбор по разделу.

Для удобства выбора вернемся на вкладку «Наборы данных». Для поля раздел укажем «Тип значения», что здесь у нас содержится «Строка». И зададим доступные значения: «Регистр товарных запасов», «Обороты», «Остатки», «Остатки и обороты»

Затем возвращаемся в папку «Настройки». В поле выбора значения появляются несколько возможных вариантов. Нам нужен регистр накопления «Товарные запасы».

Для этой группировки отключим вывод отбора. И установим заголовок: «Регистр Товарные запасы»

Посмотрим как это выглядит

На выходе получается очень много данных.

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

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

Выберем тип макета: «Вертикально». Отборы выводить не будем.

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

Проверяем настройки и выводим таблицу

Итак, посмотрим что содержится в поле «Дата окончания периода» «Стандартный период». Нам поможет в этом консоль СКД, а точнее макет, который сгенерировал компоновщик макетов.

Если обратить внимание на область, где установлены значение параметров, то увидим, что в параметре «Стандартный период»:
- startDate - дата начала периода( 01 декабря 00:00 часов);
- endDate - дата окончания периода 31 декабря 23:59:59, то есть конец дня

Соответственно, значения параметров «Начало периода» и «Конец периода» установлены такими же, как и значения полей «Дата начала» и «Дата окончания».

Обратимся к результату: какие же остатки были получены на 31 декабря в 23:59:59

Сначала рассмотрим таблицу «Обороты».

Движения, которые были сделаны 31 декабря в 23:59:59. «Количество Расход», а именно 1 штука, в таблице оборотов было учтено.

Можно сделать вывод: таблица оборотов возвращает движения, сделанные в эту секунду.

В виртуальной таблице «Остатки» не включены движения, произошедшие в эту секунду (в колонке «Количество Конечный остаток» указано значение 10 штук).

А виртуальная таблица «Остатки и Обороты» уже включает движение за последнюю секунду, потому что в колонке «Количество Конечный остаток» указано значение 9 штук (с учетом расхода).

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

Особенности использования периодов в виртуальных таблицах регистров накопления

А теперь рассмотрим особенности использования периодов в виртуальных таблицах «Остатки», «Обороты», «Остатки и Обороты».

Откроем «Конструктор схемы компоновки данных» и на вкладке «Параметры» добавляем еще один параметр, назвав его «Дата остатков» типа «Дата». Этот параметр будет иметь следующее выражение: ДобавимкДате(&Стандартный Период.ДатаОкончания.”Секунда”.1)

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

Проверим результат. Выбираем данные с 01.12.23 по 31.12.23, время 23:59:59. Таблица оборотов не изменилась. А таблица «Остатки» включает движение за последнюю секунду 23:59:59, потому что теперь мы получаем остатки на начало следующей секунды

Затем проверим: что будет, если в параметре «Стандартный период» не указать дату окончания. Как отработает наше выражение «Добавить к дате 1 секунду».

Сформируем отчет. Остатки отображаются корректно

Проверим макет, который сгенерировал «Компоновщик макета».
Нас интересует как вычисляется параметр «Дата остатков». Дата остатков, как видим – пустая дата.

«Дата остатков» в данном случае у нас равна дате окончания у объекта «Стандартный период»

Несмотря на то, что в выражении параметра у нас обозначено добавить к дате 1 секунду, функция «Добавить к дате» не выполнила добавление 1 секунды к пустой дате значения поля «Дата окончания». И значение параметра «Дата Остатков» осталось не заполненным (пустым).

Подведем итоги:

1. При указании периода в объекте «Стандартный период» дата окончания – это всегда конец дня со значением времени 23:59:59.

2. Виртуальные таблицы «Обороты», «Остатки и Обороты» включают в себя движение за последнюю секунду.

3. Виртуальная таблица «Остатки» не включает в себя движение за последнюю секунду. Поэтому для того, чтобы корректно получить остатки, с учетом движений последней секунды, необходимо или использовать объект «Граница» (что затруднительно в СКД) или добавить 1 секунду к параметру «Период».

Также мы выяснили, что в выражении «ДобавимкДате(&Стандартный Период.ДатаОкончания.”Секунда”.1)» не обязательно выполнять проверку, что «Дата окончания» – пустая дата, потому что все и так работает корректно.

Надеемся, что наша статья помогла вам узнать как выглядит дата окончания у объектов «Стандартный период» и разобраться в особенностях использования периодов в виртуальных таблицах «Остатки», «Обороты», «Остатки и Обороты».

Поделиться:

Telegram
VK
WhatsApp

Оцените статью

5

5

Читайте также:

Некогда разбираться самостоятельно?
Напишите нам и наши эксперты ответят вам