В типовых конфигурациях 1С («Управление торговлей», «УПП», «Комплексная автоматизация», а также в отраслевых решениях вроде «Альфа-Авто») взаиморасчеты ведутся максимум с детализацией до документов расчетов: заказов, накладных, счетов или договоров. Механизм учета не хранит информацию о том, какая именно номенклатурная позиция из табличной части реализации была оплачена входящим платежом. Однако на практике часто возникает управленческая задача: привязать мотивацию менеджеров или расчет фактической маржинальности к конкретным оплаченным позициям номенклатуры.
Разберем архитектурные особенности платформы, возможные пути решения этой задачи и выявим подводные камни каждого подхода.
Проанализируем базовую проблему учета: когда поступает частичная оплата по накладной (например, оплачено 50 000 руб. из 100 000 руб. по документу, содержащему 20 позиций), стандартный регистр взаиморасчетов фиксирует только уменьшение общего долга по документу. В типовой структуре данных не заложено правило, закрывает ли эта сумма первые строки реализации, самые дорогие товары или распределяется равномерно.
Выясним причину необходимости такой детализации. Чаще всего требование возникает в двух случаях:
Рассмотрим наименее инвазивный вариант, который не требует переделки структуры регистров и перепроведения документов. Логика строится на вычислении процента оплаты накладной и применении его к строкам продажи.
Разберем по шагам логику построения отчета:
Продажи (или табличные части документов РеализацияТоваровУслуг) с остатками по регистру взаиморасчетов (например, ВзаиморасчетыСКонтрагентами или ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов).СуммаОплаты = СуммаДокумента - ОстатокДолга.Коэффициент = СуммаОплаты / СуммаДокумента.Посмотрим на пример фрагмента вычисляемого поля или выражения в запросе:
ВЫБОР
КОГДА ТаблицаПродаж.СуммаДокумента = 0 ТОГДА 0
КОГДА ТаблицаОплат.СуммаОплаты >= ТаблицаПродаж.СуммаДокумента ТОГДА ТаблицаПродаж.СуммаВыручки
ИНАЧЕ (ТаблицаОплат.СуммаОплаты / ТаблицаПродаж.СуммаДокумента) * ТаблицаПродаж.СуммаВыручки
КОНЕЦ
Преимущества: быстродействие, отсутствие необходимости менять логику проведения документов и хранить избыточные данные.
Недостатки: «размазывание» оплаты по всем строкам. Если клиент купил две позиции и оплатил ровно стоимость одной из них, отчет покажет обе позиции оплаченными наполовину.
Если требуется однозначно фиксировать факт оплаты конкретной позиции (например, методом FIFO по порядку строк в накладной), типовых регистров недостаточно. Рассмотрим создание отдельного регистра накопления.
Разберем структуру нового объекта конфигурации:
ОплаченныеТоварыПродаж.Номенклатура, ХарактеристикаНоменклатуры, ДокументПродажи, Покупатель.Количество, СуммаВыручки, СуммаОплаты.При проведении платежных документов (ПлатежноеПоручениеВходящее, ПриходныйКассовыйОрдер) алгоритм считывает состав строк связанной накладной и последовательно закрывает строки по алгоритму FIFO.
Посмотрим на примерную структуру модуля проведения платежного документа:
ОстатокПлатежа = ДокументОплаты.СуммаДокумента;
ВыборкаСтрок = ПолучитьСтрокиНакладнойПоФИФО(ДокументРеализации);
Пока ВыборкаСтрок.Следующий() И ОстатокПлатежа > 0 Цикл
СуммаКЗакрытию = Мин(ОстатокПлатежа, ВыборкаСтрок.НеоплаченныйОстаток);
Движение = Движения.ОплаченныеТоварыПродаж.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.ДокументПродажи = ДокументРеализации;
Движение.Номенклатура = ВыборкаСтрок.Номенклатура;
Движение.СуммаОплаты = СуммаКЗакрытию;
ОстатокПлатежа = ОстатокПлатежа - СуммаКЗакрытию;
КонецЦикла;
В ситуациях, когда требуется контролировать сквозную цепочку (товар оплачен покупателем И товар оплачен поставщику), используется механизм контроля состояний партий, аналогичный учету расходов при УСН («Доходы минус расходы»).
Проанализируем 4 события, необходимые для признания товара полностью закрытым:
Для реализации такой схемы в системе настраивается партионный учет с жесткой привязкой документов оплаты к документам поступления и реализации. При нарушении хронологии проведения документов (например, задним числом введена банковская выписка) требуется обязательное восстановление последовательности расчетов регламентным заданием.
При проектировании подобного учета обязательно учитываем технические сложности:
КорректировкаДолга, Взаимозачет и списание безнадежной дебиторки закрывают долг контрагента, но не являются прямым движением денежных средств. В учетной политике компании должно быть однозначно определено, признаются ли такие операции оплатой для анализа продаж.ВозвратТоваровОтПокупателя после того, как позиция была отмечена как «оплаченная», регистры пономенклатурной оплаты должны корректно сторнировать ранее зафиксированные суммы.Во многих случаях детализация оплаты до отдельной строки номенклатуры является избыточным усложнением учета. Если цель отчета — мотивация сотрудников или контроль дебиторской задолженности, гораздо эффективнее перейти на позаказный учет.
В этом случае контроль ведется по правилу: сделка считается успешной, а товар оплаченным только тогда, когда общее сальдо расчетов по документу ЗаказПокупателя или РеализацияТоваровУслуг строго равно нулю. Наличие недоплаты даже в 1 копейку исключает продажу из расчета бонусов, что одновременно стимулирует менеджеров контролировать своевременное и полное закрытие дебиторской задолженности.