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