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