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