СКД: стандартный период и виртуальные таблицы
-
В этой статье рассмотрим: -> как выглядит дата окончания у объектов «Стандартный период»; -> особенности использования периодов в виртуальных таблицах «Остатки», «Обороты», «Остатки и Обороты».
Дата окончания у объектов «Стандартный период»
Рассмотрим на примере как выглядит дата окончания у объектов «Стандартный период». Для этого в демонстрационном приложении «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)» не обязательно выполнять проверку, что «Дата окончания» – пустая дата, потому что все и так работает корректно.
Надеемся, что наша статья помогла вам узнать как выглядит дата окончания у объектов «Стандартный период» и разобраться в особенностях использования периодов в виртуальных таблицах «Остатки», «Обороты», «Остатки и Обороты».
Оцените статью
Читайте также: