Как правильно вывести в отчете данные списания и оприходования товаров за период?

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

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

Почему не стоит использовать табличные части документов для отчетов?

Работа с физическими табличными частями документов напрямую в запросе — это распространенная ошибка начинающих разработчиков. Когда мы пытаемся «склеить» данные двух разных документов через оператор ОБЪЕДИНИТЬ или через сложное соединение, мы сталкиваемся со следующими трудностями:

Использование регистров накопления как правильный путь

Чтобы вывести информацию по оприходованиям и списаниям, необходимо обратиться к регистрам накопления, в которые записывают движения данные документы. Обычно это регистры вида ТоварыНаСкладах, ТоварыОрганизаций или аналогичные, предусмотренные вашей конфигурацией.

Разберем по шагам, как построить такой отчет правильно:

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

Пример запроса к регистру накопления

Рассмотрим пример того, как может выглядеть запрос к регистру накопления в СКД:


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

Как настроить отборы в СКД

Когда вы используете виртуальную таблицу, параметры &НачалоПериода и &КонецПериода автоматически добавляются в параметры виртуальной таблицы. В СКД вам достаточно:

Используя этот подход, вы избавите себя от необходимости вручную прописывать сложные условия в запросе, а отчет будет работать быстро и корректно отображать данные за любой выбранный промежуток времени.

Резюме

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

← На главную