Регистры остатков – один из ключевых механизмов бухгалтерского и управленческого учета в 1С: Предприятие. Правильное указание периода в запросах позволяет получать точные данные о текущих остатках, оборотах и динамике ресурсов. В статье рассмотрим, как работает период в запросах, какие типы периодов существуют, какие подводные камни могут возникнуть и как их избежать.
Содержание
- Типы периодов и границы расчётов
- Базовый синтаксис запросов
- Практические примеры
- Типичные ошибки и способы их устранения
- Рекомендации по оптимизации запросов
- Контакты для обращений
Регистры накопления (в т.ч. регистры остатков) хранят два вида данных:
- Остатки – значения на начало (или конец) выбранного периода.
- Обороты – изменения за период (приход, расход, корректировки).
Для большинства регистров периодичность задаётся по месяцам. Это значит, что в таблице итогов хранится одна запись на каждый месяц – обычно на начало месяца (01‑го числа) или на конец месяца, в зависимости от настройки Границы расчётов.
Типы периодов и границы расчётов
2.1 Период расчётов (Граница)
Период расчётов – это последний день месяца, по который система уже рассчитала итоги. Записи в таблице итогов появляются только до этой даты. Если запрос требует данные за более поздний месяц, 1С автоматически «дорасчитывает» остатки, используя текущие обороты.
2.2 Параметры периода в запросе
В запросах обычно используют два параметра:
- НачалоПериода – дата начала интервала (включительно).
- КонецПериода – дата конца интервала (включительно).
Если параметры не заданы, система использует «пустую дату» , что приводит к выборке всех доступных записей.
2.3 Типы границ
- Граница «Начало» – остаток считается на начало периода (обычно 01‑го числа).
- Граница «Конец» – остаток считается на конец периода (последний день месяца).
Выбор границы влияет на то, будет ли включена в расчёт текущий день.
Базовый синтаксис запросов
Запросы к регистрам в 1С пишутся на встроенном языке запросов (SQL‑подобный, но со своими особенностями). Ниже – шаблон, который используется почти везде.
Период,
Остаток,
Приход,
Расход
FROM
РегистрНакопления.ИмяРегистра.Остатки( &НачалоПериода, &КонецПериода )
WHERE
Период BETWEEN &НачалоПериода AND &КонецПериода
ORDER BY
Период;
Обратите внимание на:
- Функцию Остатки – она принимает два параметра (начало и конец).
- Ключевое слово BETWEEN – удобно, но можно использовать
Период >= &НачалоПериода AND Период <= &КонецПериода.
Практические примеры
4.1 Получение остатков на конец каждого месяца за 2013 год
НачалоПериода Date = &ДатаНачала; //
КонецПериода Date = &ДатаКонца; //
SELECT
Период,
Остаток
FROM
РегистрНакопления.Касса.Остатки( НачалоПериода, КонецПериода )
WHERE
Период BETWEEN НачалоПериода AND КонецПериода
ORDER BY
Период;
В результате получаем строки:
- – остаток на конец января.
- – остаток на конец февраля.
- …
- – остаток на конец декабря 2013‑го.
4.2 Запрос с «пустой» датой (получить все доступные остатки)
Период,
Остаток
FROM
РегистрНакопления.Склад.Остатки( , ) // параметры не заданы
ORDER BY
Период;
Если в настройках регистра период расчётов установлен, например, до , то запрос вернёт записи до включительно. Для более поздних дат система будет «дорасчитывать» остатки в реальном времени.
4.3 Получение остатков «по дням», даже если в регистре нет движений в некоторые дни
Для этого создаём вспомогательную таблицу с перечнем всех дат и соединяем её с регистром.
НачалоПериода Date = &ДатаНачала; //
КонецПериода Date = &ДатаКонца; //
// Временная таблица со всеми датами
ВТ_Даты =
(
SELECT
Дата
FROM
(ВЫБРАТЬ Дата
ИЗ Справочник.Даты
ГДЕ Дата МЕЖДУ &НачалоПериода И &КонецПериода) AS Даты
);
// Запрос остатков
SELECT
ВТ_Даты.Дата КАК Дата,
ОСТАТКИ.Остаток КАК Остаток
FROM
ВТ_Даты
LEFT JOIN РегистрНакопления.Товары.Остатки( НачалоПериода, КонецПериода ) КАК ОСТАТКИ
ON ОСТАТКИ.Период = ВТ_Даты.Дата
ORDER BY
Дата;
В результате получаем строку для каждого дня, а если в регистре нет записи – будет NULL, который можно заменить функцией COALESCE(Остаток,0).
Типичные ошибки и способы их устранения
- Неправильный тип границы. Если нужен остаток «на конец дня», используйте границу «Конец», иначе – «Начало».
- Запрос за период, превышающий границу расчётов. Система будет дорасчитывать, но это может сильно замедлить работу. Лучше заранее увеличить Период расчётов в настройках регистра.
- Отсутствие записей в таблице итогов. При отсутствии записей запрос всё равно выполнится, но вернёт пустой набор. Чтобы избежать «пропусков», используйте вспомогательную таблицу дат (см. пример 4.3).
- Передача списка дат в параметр «Период». Встроенный запрос принимает только одну дату. Для множественного выбора необходимо использовать UNION ALL или временную таблицу.
- Неправильный формат даты. В запросах 1С даты передаются в формате
ГГГГ-ММ-ДДили как переменные типаDate. Ошибки формата приводят к исключениям.
Рекомендации по оптимизации запросов
- Устанавливайте период расчётов как можно ближе к нужному диапазону. Чем меньше «дорасчёт», тем быстрее запрос.
- Индексы. В регистрах 1С автоматически создаются индексы по полям Период и ВидИзмерения. Не удаляйте их.
- Не выбирайте лишние поля. Выбирайте только те колонки, которые действительно нужны в отчёте.
- Используйте агрегаты только при необходимости. Функции
SUM,MAXи т.п. требуют дополнительного прохода по данным. - Кеширование справочных данных. Если в запросе часто используется справочник (например, список товаров), загрузите его в временную таблицу один раз и переиспользуйте.
Контакты для обращений
Официальный сайт
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С. При возникновении вопросов – смело обращайтесь по указанным выше контактам.