Период в запросах к регистрам остатков 1С: Предприятие

Разбираем подводные камни периодов в регистрах остатков 1С. Учимся писать запросы, которые всегда показывают правду о ваших ресурсах и оборотах.

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

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


Содержание

  1. Типы периодов и границы расчётов
  2. Базовый синтаксис запросов
  3. Практические примеры
  4. Типичные ошибки и способы их устранения
  5. Рекомендации по оптимизации запросов
  6. Контакты для обращений

Регистры накопления (в т.ч. регистры остатков) хранят два вида данных:

  • Остатки – значения на начало (или конец) выбранного периода.
  • Обороты – изменения за период (приход, расход, корректировки).

Для большинства регистров периодичность задаётся по месяцам. Это значит, что в таблице итогов хранится одна запись на каждый месяц – обычно на начало месяца (01‑го числа) или на конец месяца, в зависимости от настройки Границы расчётов.


Типы периодов и границы расчётов

2.1 Период расчётов (Граница)

Период расчётов – это последний день месяца, по который система уже рассчитала итоги. Записи в таблице итогов появляются только до этой даты. Если запрос требует данные за более поздний месяц, 1С автоматически «дорасчитывает» остатки, используя текущие обороты.

2.2 Параметры периода в запросе

В запросах обычно используют два параметра:

  • НачалоПериода – дата начала интервала (включительно).
  • КонецПериода – дата конца интервала (включительно).

Если параметры не заданы, система использует «пустую дату» , что приводит к выборке всех доступных записей.

2.3 Типы границ

  • Граница «Начало» – остаток считается на начало периода (обычно 01‑го числа).
  • Граница «Конец» – остаток считается на конец периода (последний день месяца).

Выбор границы влияет на то, будет ли включена в расчёт текущий день.


Базовый синтаксис запросов

Запросы к регистрам в 1С пишутся на встроенном языке запросов (SQL‑подобный, но со своими особенностями). Ниже – шаблон, который используется почти везде.

SELECT
Период,
Остаток,
Приход,
Расход
FROM
РегистрНакопления.ИмяРегистра.Остатки( &НачалоПериода, &КонецПериода )
WHERE
Период BETWEEN &НачалоПериода AND &КонецПериода
ORDER BY
Период;

Обратите внимание на:

  • Функцию Остатки – она принимает два параметра (начало и конец).
  • Ключевое слово BETWEEN – удобно, но можно использовать Период >= &НачалоПериода AND Период <= &КонецПериода.

Практические примеры

4.1 Получение остатков на конец каждого месяца за 2013 год

DECLARE
НачалоПериода Date = &ДатаНачала; //
КонецПериода Date = &ДатаКонца; //

SELECT
Период,
Остаток
FROM
РегистрНакопления.Касса.Остатки( НачалоПериода, КонецПериода )
WHERE
Период BETWEEN НачалоПериода AND КонецПериода
ORDER BY
Период;

В результате получаем строки:

  • – остаток на конец января.
  • – остаток на конец февраля.
  • …
  • – остаток на конец декабря 2013‑го.

4.2 Запрос с «пустой» датой (получить все доступные остатки)

SELECT
Период,
Остаток
FROM
РегистрНакопления.Склад.Остатки( , ) // параметры не заданы
ORDER BY
Период;

Если в настройках регистра период расчётов установлен, например, до , то запрос вернёт записи до включительно. Для более поздних дат система будет «дорасчитывать» остатки в реальном времени.

4.3 Получение остатков «по дням», даже если в регистре нет движений в некоторые дни

Для этого создаём вспомогательную таблицу с перечнем всех дат и соединяем её с регистром.

DECLARE
НачалоПериода Date = &ДатаНачала; //
КонецПериода Date = &ДатаКонца; //

// Временная таблица со всеми датами
ВТ_Даты =
(
SELECT
Дата
FROM
(ВЫБРАТЬ Дата
ИЗ Справочник.Даты
ГДЕ Дата МЕЖДУ &НачалоПериода И &КонецПериода) AS Даты
);

// Запрос остатков
SELECT
ВТ_Даты.Дата КАК Дата,
ОСТАТКИ.Остаток КАК Остаток
FROM
ВТ_Даты
LEFT JOIN РегистрНакопления.Товары.Остатки( НачалоПериода, КонецПериода ) КАК ОСТАТКИ
ON ОСТАТКИ.Период = ВТ_Даты.Дата
ORDER BY
Дата;

В результате получаем строку для каждого дня, а если в регистре нет записи – будет NULL, который можно заменить функцией COALESCE(Остаток,0).


Типичные ошибки и способы их устранения

  • Неправильный тип границы. Если нужен остаток «на конец дня», используйте границу «Конец», иначе – «Начало».
  • Запрос за период, превышающий границу расчётов. Система будет дорасчитывать, но это может сильно замедлить работу. Лучше заранее увеличить Период расчётов в настройках регистра.
  • Отсутствие записей в таблице итогов. При отсутствии записей запрос всё равно выполнится, но вернёт пустой набор. Чтобы избежать «пропусков», используйте вспомогательную таблицу дат (см. пример 4.3).
  • Передача списка дат в параметр «Период». Встроенный запрос принимает только одну дату. Для множественного выбора необходимо использовать UNION ALL или временную таблицу.
  • Неправильный формат даты. В запросах 1С даты передаются в формате ГГГГ-ММ-ДД или как переменные типа Date. Ошибки формата приводят к исключениям.

Рекомендации по оптимизации запросов

  1. Устанавливайте период расчётов как можно ближе к нужному диапазону. Чем меньше «дорасчёт», тем быстрее запрос.
  2. Индексы. В регистрах 1С автоматически создаются индексы по полям Период и ВидИзмерения. Не удаляйте их.
  3. Не выбирайте лишние поля. Выбирайте только те колонки, которые действительно нужны в отчёте.
  4. Используйте агрегаты только при необходимости. Функции SUM, MAX и т.п. требуют дополнительного прохода по данным.
  5. Кеширование справочных данных. Если в запросе часто используется справочник (например, список товаров), загрузите его в временную таблицу один раз и переиспользуйте.

Контакты для обращений

Официальный сайт

https://www.1c.ru

Горячая линия

Тел.: +7 (495) -77‑77‑77 (круглосуточно)

Электронный адрес

support@1c.ru

Личный кабинет

Для зарегистрированных пользователей – https://login.1c.ru

Личный приём (консультации)

Адрес: г. Москва, ул. Тверская, 7, офис 12

График приёма

  • Пн‑Пт: 09:00 – 18:00
  • Сб: 10:00 – 14:00 (по предварительной записи)
  • Вс: выходной

Отделы

  • Техническая поддержка
  • Разработка и внедрение
  • Обучение и сертификация
  • Продажи и лицензирование

Руководство

Генеральный директор – Иванов И.И.

Технический директор – Петров П.П.

Отзывы

Мы ценим ваше мнение! Оставьте отзыв на странице обратной связи или позвоните по телефону горячей линии.


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