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