При разработке отчетов или модификации динамических списков в 1С:Управление торговлей 11.5 (а также в Комплексной автоматизации 2.5 и ERP 2.5) часто возникает задача: необходимо оперативно видеть контрагентов, которые внесли предоплату, и точную сумму этой предоплаты. Иногда руководители ставят еще более сложную цель — вывести факт поступления предоплаты прямо в журнал заказов клиентов, даже если учет оплат ведется бухгалтерией в целом по договору, а не по конкретным заказам.
Давайте подробно разберем эту задачу, проанализируем доступные регистры накопления, выясним причину возможных сложностей и рассмотрим, как правильно реализовать задуманное с учетом новой архитектуры взаиморасчетов.
Для начала рассмотрим, какие регистры накопления существуют в конфигурации для учета задолженностей и оплат. При переходе с редакции 11.4 на 11.5 архитектура претерпела изменения, поэтому важно четко понимать назначение каждого регистра.
РасчетыСКлиентами
Это базовый регистр взаиморасчетов. В нем хранятся общие «свернутые» остатки и обороты (суммы долга клиента и наши долги перед клиентом, то есть предоплаты) в разрезе объектов расчетов. Объектом расчетов может выступать договор, заказ клиента или накладная — в зависимости от настроек детализации в договоре. Если вам нужен просто конечный факт: сумма общего аванса по контрагенту без учета графиков платежей, то этот регистр — оптимальный выбор для построения запроса.
РасчетыСКлиентамиПоСрокам
Этот регистр является детализированным. Как понятно из названия, он хранит информацию в разрезе сроков задолженности: дат возникновения долга, плановых дат оплат и этапов графиков платежей. Мы обращаемся к этому регистру, когда необходимо построить отчеты по просроченной дебиторской задолженности, проанализировать старение долга или проконтролировать соблюдение сроков оплат. Для простой задачи «получить сальдо авансов» он избыточен.
ДвиженияДенежныеСредстваКонтрагент
Многие ошибочно пытаются искать суммы оплат в этом регистре. Однако он относится к подсистеме Казначейства, а не взаиморасчетов. Его назначение — анализ чистого денежного потока (ДДС). Он фиксирует поступления и выбытия денег в привязке к статьям движения денежных средств, банковским счетам, кассам и терминалам эквайринга. Строить по нему отчет о том, «кто кому должен», в корне неверно, поскольку он не учитывает факты отгрузок (реализаций), возвратов товаров и корректировок долга.
Прежде чем писать сложные запросы, давайте посмотрим, можно ли решить задачу типовыми средствами 1С. Часто потребности бизнеса можно закрыть правильной настройкой существующих отчетов.
В подсистеме продаж перейдем в раздел Продажи – Отчеты по продажам – Ведомость расчетов с клиентами.
В режиме 1С:Предприятие мы можем зайти в настройки этого отчета и задать нужную структуру. Если бухгалтерия разносит платежи просто на контрагента и договор (без указания счетов на оплату или заказов), нам достаточно настроить группировку по Контрагентам и Договорам, добавив поле, которое выводит сальдо (наш долг, то есть аванс). Это позволит получить готовую таблицу с контрагентами и суммами их предоплат, не прибегая к разработке внешних отчетов.
Теперь проанализируем ситуацию, когда руководство требует вывести сумму предоплаты отдельной колонкой непосредственно в динамический список справочника (журнал «Заказы клиентов»).
Проблема кроется в методологии учета: если бухгалтерия просто «кидает деньги на контрагента и договор», то в регистрах 1С объектом расчетов будет выступать сам договор. На уровне базы данных ни один заказ не будет напрямую связан с конкретной платежкой.
Чтобы реализовать такую хотелку, нам потребуется:
РасчетыСКлиентами.Реализация такого алгоритма прямо в запросе динамического списка (с использованием коррелированных подзапросов или нарастающего итога) — это крайне ресурсоемкая операция. При большом количестве заказов у менеджера это неминуемо приведет к сильным «тормозам» системы при каждом открытии, прокрутке и обновлении формы списка.
Также при разработке решений по взаиморасчетам в редакции 11.5 мы должны учитывать новую архитектуру «онлайн-взаиморасчетов». Старые режимы (офлайн) были упразднены.
Система старается распределять взаиморасчеты мгновенно при проведении документов, но на практике для тяжелых операций активно задействует отложенные очереди и системный регистр сведений ЗаданияКРаспределениюВзаиморасчетов.
Если платежи поступают на договор обезличенно, то распределение этих авансов на конкретные объекты расчетов ложится на плечи фоновых регламентных заданий (таких как «Выполнение отложенных движений по расчетам с клиентами»). Следовательно, мы должны понимать: если фоновые задания зависли, упали в ошибку из-за блокировок или накопили большой пул неразобранных записей, данные в наших отчетах и списках могут временно не соответствовать реальному положению дел, пока очередь не будет обработана.
Если перед вами стоит задача получения сумм авансов контрагентов:
РасчетыСКлиентами.