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