Достаточно часто заказчики и руководители отделов продаж ставят перед разработчиками задачу: сформировать отчет по дебиторской задолженности, в котором можно было бы увидеть долг контрагента не просто по документам или договорам, а в разрезе конкретных номенклатурных позиций. Типичный бизнес-вопрос звучит так: «За какой именно товар нам еще не заплатил клиент?»
Разберем причины возникновения такой потребности, выясним архитектурные ограничения типовых конфигураций 1С и рассмотрим практические способы решения этой задачи.
На практике подобный отчет требуется руководству в нескольких распространенных сценариях:
Проанализируем архитектуру подсистемы взаиморасчетов в программах платформы 1С. Во всех типовых конфигурациях (1С:Бухгалтерия, 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP) денежный контур строго отделен от товарного контура.
Регистры накопления взаиморасчетов (такие как РасчетыСКлиентами, РасчетыСКлиентамиПоДокументам или ВзаиморасчетыСКонтрагентами), а также счета бухгалтерского учета (62, 76) имеют максимальную аналитику: Организация, Контрагент, Договор и Объект расчетов (заказ или документ реализации). Измерения Номенклатура в регистрах взаиморасчетов нет.
Платежные документы (ПоступлениеБезналичныхДС, ПриходныйКассовыйОрдер) фиксируют только факт поступления денежных средств на расчетный счет или в кассу. В них нет и не может быть товарной табличной части. Покупатель оплачивает накладную или счет целиком, одной суммой, не указывая в платежном поручении, за какую именно строку он перевел деньги.
Посмотрим на классический пример: клиенту отгрузили по одной накладной товар А на сумму 1000 рублей и товар Б на сумму 1000 рублей. Общая сумма реализации — 2000 рублей. Покупатель перечислил частичную оплату в размере 1000 рублей. Какова задолженность по товару А? Возможны три варианта:
Все три варианта с точки зрения математики верны, но ни один из них не зафиксирован в первичных документах. Любая цифра в отчете будет результатом выбранного допущения. Поэтому, прежде чем приступать к разработке, необходимо согласовать с заказчиком единые правила разноски оплат.
Самый надежный и устойчивый способ, не требующий внесения изменений в конфигурацию и написания сложных алгоритмов.
При таком подходе типовые отчеты по задолженности автоматически дают корректные остатки в разрезе нужных групп номенклатуры, так как каждая накладная содержит строго однородную продукцию.
Если менять регламент оформления документов невозможно, строим внешний отчет в СКД, который берет фактический остаток долга по накладной и распределяет его по товарным строкам расчетным путем.
Разберем по шагам логику построения такого отчета:
Остатки регистра взаиморасчетов в разрезе расчетных документов (накладных).Товары с помощью левого соединения.Посмотрим на пример текста запроса для набора данных СКД:
ВЫБРАТЬ
ВзаиморасчетыОстатки.АналитикаУчетаПоПартнерам.Партнер КАК Партнер,
ВзаиморасчетыОстатки.ЗаказКлиента КАК ОбъектРасчетов,
ВзаиморасчетыОстатки.РасчетныйДокумент КАК РасчетныйДокумент,
ВзаиморасчетыОстатки.ДолгОстаток КАК ДолгПоДокументу,
РеализацияТовары.Номенклатура КАК Номенклатура,
РеализацияТовары.СуммаСНДС КАК СуммаСтроки,
Реализация.СуммаДокумента КАК СуммаДокумента
ИЗ
РегистрНакопления.РасчетыСКлиентами.Остатки(&Период, ) КАК ВзаиморасчетыОстатки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК Реализация
ПО ВзаиморасчетыОстатки.РасчетныйДокумент = Реализация.Ссылка
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары
ПО ВзаиморасчетыОстатки.РасчетныйДокумент = РеализацияТовары.Ссылка
ГДЕ
ВзаиморасчетыОстатки.ДолгОстаток > 0
Далее в настройках СКД на вкладке Вычисляемые поля добавляем поле ДолгПоНоменклатуре с выражением пропорционального распределения:
ВЫБОР
КОГДА СуммаДокумента = 0 ТОГДА 0
ИНАЧЕ ДолгПоДокументу * (СуммаСтроки / СуммаДокумента)
КОНЕЦ
Если заказчик требует закрывать позиции по порядку (метод FIFO), алгоритм вычисления усложняется: строки документа нумеруются, после чего сумма поступившей оплаты (СуммаДокумента - ДолгПоДокументу) последовательно списывает суммы строк начиная с первой.
Когда требуется юридически точная фиксация того, какая именно номенклатура оплачена (например, для агентских схем или расчета зарплаты), расчетных механизмов в отчете недостаточно. В таком случае в конфигурацию добавляется собственный учетный контур.
Разберем этапы доработки:
ВзаиморасчетыПоНоменклатуре со следующими измерениями: Контрагент, Договор, ДокументОтгрузки, Номенклатура и ресурсом СуммаДолга.Товары.Этот метод обеспечивает максимальную точность данных, однако существенно увеличивает трудоемкость проведения документов и требует регулярного контроля корректности распределения оплат пользователями.
Если цель заказчика — видеть долги не по отдельным артикулам, а по крупным категориям или проектам, можно использовать возможности типовых конфигураций 1С:ERP и 1С:Комплексная автоматизация без модификации кода.