Добавить в корзинуПозвонить
Найти в Дзене

Как получить остатки на каждый день в запросе 1с

Конечно, давайте разберемся, как получить остатки на каждый день в запросе 1С:Предприятие. Получение остатков на каждый день – это распространенная задача при анализе движения товаров, денежных средств и других ресурсов. В 1С это можно эффективно реализовать с помощью запросов к регистрам накопления. Основная идея: Для получения остатков на каждый день, нам нужно использовать виртуальную таблицу регистра накопления, которая называется "ОстаткиИОбороты". Эта таблица позволяет получить как обороты (приход и расход) за период, так и остатки на начало и конец периода, а также остатки на каждый день (или другой период) внутри заданного интервала. Пошаговая инструкция с примером запроса: Предположим, у нас есть регистр накопления "ТоварыНаСкладах", который ведет учет остатков товаров на складах. Измерениями регистра являются "Номенклатура" и "Склад", а ресурсом является "Количество". Мы хотим получить остатки товаров номенклатуры "Монитор" на основном складе на каждый день за январь 2024 г

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

Основная идея:

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

Пошаговая инструкция с примером запроса:

Предположим, у нас есть регистр накопления "ТоварыНаСкладах", который ведет учет остатков товаров на складах. Измерениями регистра являются "Номенклатура" и "Склад", а ресурсом является "Количество". Мы хотим получить остатки товаров номенклатуры "Монитор" на основном складе на каждый день за январь 2024 года.

Шаг 1: Откройте консоль запросов.

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

  • "Разработка" - "Консоль запросов"
  • "Сервис" - "Консоль запросов"
  • "Все функции" (если включена видимость) - и в поиске ввести "Консоль запросов"

Шаг 2: Составьте запрос к регистру накопления "ТоварыНаСкладах".

В окне консоли запросов введите следующий текст запроса:

Фрагмент кода

ВЫБРАТЬ
КОНЕЦПЕРИОДА(ОстаткиИОбороты.Период, ДЕНЬ) КАК День, // Получаем дату конца дня
ОстаткиИОбороты.Номенклатура, // Номенклатура
СУММА(ОстаткиИОбороты.Приход) КАК Приход, // Приход за день
СУММА(ОстаткиИОбороты.Расход) КАК Расход, // Расход за день
СУММА(ОстаткиИОбороты.ОстатокКонец) КАК ОстатокНаКонецДня // Остаток на конец дня
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
&НачалоПериода, // Параметр "НачалоПериода"
&КонецПериода, // Параметр "КонецПериода"
ДЕНЬ, // Периодичность "День"
, // Отбор по измерениям (пустой, отбор будет в условии "ГДЕ")
Номенклатура В (&СписокНоменклатуры) // Отбор по номенклатуре
) КАК ОстаткиИОбороты
ГДЕ
ОстаткиИОбороты.Склад = &Склад // Условие отбора по складу
И ОстаткиИОбороты.Номенклатура = &Номенклатура // Условие отбора по номенклатуре (дублируется для параметра)
СГРУППИРОВАТЬ ПО
КОНЕЦПЕРИОДА(ОстаткиИОбороты.Период, ДЕНЬ), // Группировка по дате
ОстаткиИОбороты.Номенклатура // Группировка по номенклатуре
ПОРЯДОЧИТЬ ПО
День, // Сортировка по дате
ОстаткиИОбороты.Номенклатура // Сортировка по номенклатуре

Разберем запрос по частям:

  • ВЫБРАТЬ ... ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(...) КАК ОстаткиИОбороты:Это основная часть запроса. Мы выбираем данные из виртуальной таблицы ОстаткиИОбороты регистра накопления ТоварыНаСкладах.
    ОстаткиИОбороты(...) – это вызов виртуальной таблицы с параметрами.
    КАК ОстаткиИОбороты – присваиваем псевдоним ОстаткиИОбороты для удобства дальнейшего обращения к таблице.
  • ОстаткиИОбороты(&НачалоПериода, &КонецПериода, ДЕНЬ, , Номенклатура В (&СписокНоменклатуры)):&НачалоПериода, &КонецПериода: Это параметры запроса, которые мы будем задавать перед выполнением. Они определяют начало и конец периода, за который мы хотим получить остатки и обороты.
    ДЕНЬ: Это
    периодичность виртуальной таблицы. Указываем, что хотим получать данные с периодичностью "День", то есть на каждый день в заданном периоде.

    , , Номенклатура В (&СписокНоменклатуры): Это параметры отбора.Первый пустой параметр (,) – это отбор по измерениям в целом (мы его не используем, отбор по измерениям будет в ГДЕ и в параметре Номенклатура).
    Номенклатура В (&СписокНоменклатуры) – Отбор по измерению "Номенклатура". &СписокНоменклатуры – это параметр запроса, который позволит нам задать список номенклатуры для отбора. В данном примере, мы будем использовать только одну номенклатуру, но параметр СписокНоменклатуры позволяет гибко расширить отбор при необходимости.
  • КОНЕЦПЕРИОДА(ОстаткиИОбороты.Период, ДЕНЬ) КАК День:ОстаткиИОбороты.Период – поле виртуальной таблицы, которое содержит дату и время периода.
    КОНЕЦПЕРИОДА(..., ДЕНЬ) – функция 1С, которая возвращает дату конца периода (в данном случае - дня) для указанной даты и периода. Так как периодичность "День", поле Период будет содержать время 00:00:00 начала дня. КОНЕЦПЕРИОДА преобразует эту дату в дату конца дня (23:59:59), но при выводе в таблице и при группировке будет отображаться просто дата начала дня. Это сделано для удобства представления данных – чтобы "День" выглядел как дата, а не как дата и время.
    КАК День – присваиваем псевдоним "День" для колонки с датой.
  • СУММА(ОстаткиИОбороты.Приход) КАК Приход, СУММА(ОстаткиИОбороты.Расход) КАК Расход, СУММА(ОстаткиИОбороты.ОстатокКонец) КАК ОстатокНаКонецДня:СУММА(...) – агрегатные функции, которые суммируют значения ресурсов Приход, Расход, ОстатокКонец для каждой группы (в нашем случае – для каждого дня и номенклатуры).

    Приход, Расход, ОстатокКонец – ресурсы виртуальной таблицы ОстаткиИОбороты.Приход: Сумма прихода за день.
    Расход: Сумма расхода за день.
    ОстатокКонец:
    Остаток на конец дня. Именно это значение нам нужно для получения остатков на каждый день.
  • ГДЕ ОстаткиИОбороты.Склад = &Склад И ОстаткиИОбороты.Номенклатура = &Номенклатура:Условия отбора. Мы отбираем данные только для определенного склада (&Склад – параметр запроса) и номенклатуры (&Номенклатура – параметр запроса, дублирует отбор в параметрах виртуальной таблицы).
  • СГРУППИРОВАТЬ ПО КОНЕЦПЕРИОДА(ОстаткиИОбороты.Период, ДЕНЬ), ОстаткиИОбороты.Номенклатура:Группировка результатов запроса по дате (КОНЕЦПЕРИОДА(ОстаткиИОбороты.Период, ДЕНЬ)) и номенклатуре (ОстаткиИОбороты.Номенклатура). Группировка необходима, чтобы агрегатные функции СУММА(...) корректно работали и выдавали итоги для каждого дня и номенклатуры.
  • ПОРЯДОЧИТЬ ПО День, ОстаткиИОбороты.Номенклатура:Сортировка результатов запроса по дате (День) и номенклатуре (ОстаткиИОбороты.Номенклатура) для удобства просмотра результатов.

Шаг 3: Установите значения параметров запроса.

После ввода текста запроса, в нижней части консоли запросов появятся параметры, которые мы использовали в запросе (параметры начинаются с &):

  • НачалоПериода: Установите значение начала периода, например, 01.01.2024 00:00:00 (начало января 2024 года).
  • КонецПериода: Установите значение конца периода, например, 31.01.2024 23:59:59 (конец января 2024 года).
  • Склад: Выберите из выпадающего списка ваш основной склад.
  • Номенклатура: Выберите из выпадающего списка номенклатуру "Монитор".
  • СписокНоменклатуры: Здесь нужно указать список номенклатуры для параметра Номенклатура В (&СписокНоменклатуры) в виртуальной таблице. Так как в условии ГДЕ мы уже отбираем по конкретной номенклатуре (ОстаткиИОбороты.Номенклатура = &Номенклатура), параметр СписокНоменклатуры в виртуальной таблице можно сделать избыточным. Для простоты, можно указать значение параметра Номенклатура в качестве значения параметра СписокНоменклатуры. В консоли запросов это можно сделать, например, скопировав значение из параметра Номенклатура в параметр СписокНоменклатуры. Или, в более общем случае, можно создать массив или список значений номенклатуры и передать его в параметр СписокНоменклатуры.

Шаг 4: Выполните запрос.

Нажмите кнопку "Выполнить" в консоли запросов.

Шаг 5: Просмотрите результаты.

В результате выполнения запроса, в окне "Результат" консоли запросов вы увидите таблицу, содержащую следующие колонки:

  • День: Дата, соответствующая концу дня.
  • Номенклатура: Номенклатура (в нашем примере "Монитор").
  • Приход: Приход товара "Монитор" за этот день.
  • Расход: Расход товара "Монитор" за этот день.
  • ОстатокНаКонецДня: Остаток товара "Монитор" на конец указанного дня.

Таким образом, в колонке "ОстатокНаКонецДня" вы получите остатки товара "Монитор" на каждый день января 2024 года на основном складе.

Важные моменты:

  • Регистр накопления: Убедитесь, что вы правильно указали имя регистра накопления в запросе (РегистрНакопления.ТоварыНаСкладах). Имя регистра может отличаться в вашей конфигурации.
  • Измерения и ресурсы: Запрос составлен исходя из предположения, что измерения регистра - "Номенклатура" и "Склад", ресурс - "Количество". Если в вашем регистре другие измерения и ресурсы, скорректируйте запрос соответственно.
  • Периодичность "День": Именно периодичность "День" в виртуальной таблице ОстаткиИОбороты обеспечивает получение остатков на каждый день. Вы можете использовать другую периодичность (например, "Неделя", "Месяц"), если вам нужны остатки на конец недели или месяца.
  • Параметры запроса: Использование параметров запроса (&НачалоПериода, &КонецПериода, &Склад, &Номенклатура, &СписокНоменклатуры) делает запрос гибким и позволяет легко менять период, склад и номенклатуру для анализа.
  • Функция КОНЕЦПЕРИОДА: Функция КОНЕЦПЕРИОДА используется для удобства представления даты дня. Без нее, поле Период в виртуальной таблице ОстаткиИОбороты с периодичностью "День" будет содержать дату начала дня (00:00:00).
  • Агрегатные функции СУММА: Агрегатные функции СУММА используются для суммирования значений прихода, расхода и остатка на конец дня в рамках каждой группы (день и номенклатура).

Расширение запроса:

Вы можете расширить этот запрос, добавляя отборы по другим измерениям регистра (например, по организации, если в регистре есть такое измерение), добавляя другие ресурсы (например, "Сумма" в денежном выражении), используя другие функции и возможности языка запросов 1С для более сложного анализа остатков и оборотов.

Например, вы можете добавить отбор по нескольким складам, изменив условие ГДЕ на ОстаткиИОбороты.Склад В (&СписокСкладов), и добавив параметр &СписокСкладов в параметры запроса, указав список нужных складов.

Этот пример запроса является базовым и может быть адаптирован под ваши конкретные задачи и структуру данных вашей конфигурации 1С. Главное – понимать принцип использования виртуальной таблицы ОстаткиИОбороты и параметров запроса для получения остатков на каждый день.