Как правильно получить остатки и обороты из регистра накопления Запасы в 1С:УНФ?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Торговля и дистрибуция
← На главную

При разработке отчетов в системе 1С:Управление нашей фирмой (УНФ), одной из наиболее часто встречающихся задач является получение полной информации о движении товаров. Нам необходимо вывести в одну таблицу остаток на начало периода, приход, расход и остаток на конец периода. Для решения этой задачи в конфигурации предусмотрен регистр накопления Запасы. Разберем подробно, как правильно работать с его таблицами, чтобы отчет работал быстро и корректно.

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

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

  1. Запасы (основная таблица): Это физическая таблица, где хранятся все записи (движения), сделанные документами. Если мы будем выбирать данные отсюда, нам придется самостоятельно группировать записи и вычислять итоги программно или в запросе. Это крайне неэффективно и трудозатратно.
  2. Запасы.Остатки: Позволяет получить срез остатков на конкретный момент времени. Она идеально подходит для простых отчетов типа "Остатки на складах", но не дает информации о том, какой был приход или расход за период.
  3. Запасы.Обороты: Содержит только информацию о том, сколько товара пришло и ушло. В этой таблице нет данных о начальных и конечных остатках, поэтому для полноценной ведомости она не подходит.
  4. Запасы.ОстаткиИОбороты: Это универсальная виртуальная таблица, которая объединяет возможности всех предыдущих. Она специально оптимизирована платформой для того, чтобы за один сеанс обращения к базе данных получить и остатки на границы периода, и все обороты внутри него.

Таким образом, для реализации задачи "Ведомость по товарам" мы выберем таблицу Запасы.ОстаткиИОбороты. Как правильно заметили участники обсуждения, "особо мудрить" здесь не нужно — платформа уже подготовила все необходимые механизмы.

Работа с виртуальной таблицей ОстаткиИОбороты

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


ВЫБРАТЬ
    ЗапасыОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ЗапасыОстаткиИОбороты.Характеристика КАК Характеристика,
    ЗапасыОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачальныйОстаток,
    ЗапасыОстаткиИОбороты.КоличествоПриход КАК Приход,
    ЗапасыОстаткиИОбороты.КоличествоРасход КАК Расход,
    ЗапасыОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонечныйОстаток
ИЗ
    РегистрНакопления.Запасы.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , ) КАК ЗапасыОстаткиИОбороты

Проанализируем важный момент: параметры виртуальной таблицы. В 1С крайне важно накладывать фильтры (например, по конкретному складу или организации) именно в параметрах виртуальной таблицы, а не в условии ГДЕ. Если мы напишем условие ГДЕ Склад = &Склад после выбора данных, система сначала выберет все записи из базы, а потом отсечет лишние. Если же мы передадим склад в параметры таблицы, СУБД сразу выберет только нужные данные, что значительно ускорит работу отчета.

Особенности учета в УНФ: Цены и Характеристики

В тексте задачи упоминается, что отчет должен строиться "в ценах номенклатуры". Это важный нюанс. В самом регистре Запасы обычно хранится только количество и себестоимость (в зависимости от настроек). Актуальные цены продажи хранятся в другом месте — в регистре сведений ЦеныНоменклатуры.

Чтобы получить данные в ценах, нам нужно выполнить Левое соединение нашей таблицы остатков с виртуальной таблицей ЦеныНоменклатуры.СрезПоследних. Рассмотрим, как это сделать по шагам:

  1. Выбираем данные из Запасы.ОстаткиИОбороты.
  2. Присоединяем РегистрСведений.ЦеныНоменклатуры.СрезПоследних.
  3. Устанавливаем связь по полям Номенклатура и Характеристика.
  4. В параметрах среза последних указываем дату окончания периода отчета, чтобы цена соответствовала моменту формирования конечных остатков.

Пример расширенного запроса может выглядеть следующим образом:


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

Важные рекомендации по измерениям

При разработке отчетов в УНФ никогда не забывайте про Характеристики. В этой конфигурации учет часто ведется в разрезе цветов, размеров или других параметров. Если в запросе не указать связь по полю Характеристика или не выводить его, остатки по разным характеристикам одного товара "схлопнутся" в одну строку, что приведет к неверным данным в отчете.

Также обратите внимание на параметр Периодичность виртуальной таблицы. Если вам нужен просто итог за весь период, этот параметр можно оставить пустым. Однако, если вы хотите построить график движений или видеть остатки на каждый день (например, для анализа динамики), установите периодичность в значение День. В этом случае система вернет строки на каждую дату, когда были движения.

Заключение

Мы выяснили, что наиболее правильным и эффективным способом получения данных для складской ведомости является использование виртуальной таблицы ОстаткиИОбороты. Она позволяет минимизировать количество обращений к базе данных и предоставляет готовые поля для начальных остатков, приходов, расходов и конечных остатков. Помните о важности передачи фильтров в параметры таблицы и всегда учитывайте характеристики номенклатуры для обеспечения точности управленческого учета.

← На главную