В процессе работы с программами на платформе 1С (особенно часто это встречается в конфигурации «Управление нашей фирмой») пользователи сталкиваются с неприятной ситуацией. При попытке провести документ Корректировка реализации, если исходная накладная уже была полностью оплачена покупателем, система выдает ошибку: «Ошибка: Нет возможности зафиксировать расчеты с покупателями... Долг — задолженность покупателя по документу уже полностью оплачена». На первый взгляд это кажется нелогичным: разве нельзя скорректировать документ только потому, что по нему поступили деньги? На самом деле, причина кроется в жесткой архитектуре регистров накопления. В этой статье мы подробно разберем, почему возникает эта ошибка и какими способами ее можно устранить.
Для того чтобы понять, как решить проблему, давайте заглянем «под капот» программы. В 1С расчеты с контрагентами ведутся в разрезе документов планирования и документов оплаты. Когда вы проводите документ Расходная накладная, в регистре Расчеты с покупателями формируется запись о долге клиента. После того как поступает оплата (через Поступление на счет или Поступление в кассу), этот долг закрывается «в ноль».
Когда мы создаем документ Корректировка реализации в сторону уменьшения (например, меняем цену или количество товара), программа должна сделать запись, которая уменьшает сумму долга. Однако система видит, что остаток долга по конкретной накладной уже равен нулю. Программа не может «уйти в минус» по конкретной сделке, так как она не понимает, куда отнести образовавшуюся переплату. С точки зрения системы, корректировка превращает часть закрытой оплаты в аванс, но механизм автоматического распределения в документе корректировки не всегда срабатывает корректно при полной оплате.
Особенно остро эта проблема встала после 2019 года, когда законодательство (постановление Правительства №1137) закрепило использование корректировочных счетов-фактур вместо обратной реализации. Пользователи стали чаще использовать корректировки вместо возвратов, обнажив данное ограничение платформенных алгоритмов.
Это самый быстрый «пользовательский» способ, который позволяет обойти контроль без привлечения программиста. Давайте рассмотрим последовательность действий:
Корректировка реализации, который не проводится.Поступление на счет), которым была оплачена данная реализация.Важный нюанс: В некоторых версиях конфигураций УНФ система может потребовать указать сумму с минусом, чтобы математически корректно схлопнуть остатки в регистре. Проанализируйте движения документа после проведения, чтобы убедиться в отсутствии «зависших» остатков.
Если первый способ не помог, давайте обратимся к первоисточнику — исходной накладной. Часто проблема заключается в том, что в документе Расходная накладная (или Реализация) установлен автоматический зачет оплаты.
Рассмотрим пошагово этот метод:
Корректировку реализации.Если вы хотите, чтобы учет в регистрах был максимально прозрачным, рекомендуем выполнить следующую последовательность действий. Этот метод гарантированно работает, так как временно устраняет причину конфликта — наличие оплаты.
Разберем алгоритм:
Корректировку реализации и спокойно проведем ее. Система увидит долг и успешно его уменьшит.Этот метод исключает появление «фиктивных» записей и корректно отражает состояние взаиморасчетов в отчетах. Для автоматизации перепроведения документов и устранения ошибок зачета можно использовать обработку для восстановления последовательности взаиморасчетов и зачета долгов.
Если в вашей организации такие корректировки происходят массово, ручные манипуляции с платежами могут быть неудобны. В этом случае программист может создать расширение, которое временно отключает проверку остатков расчетов именно для документа корректировки.
Проанализируем пример кода, предложенный участниками сообщества для конфигурации УНФ. Нам необходимо переопределить процедуру в общем модуле КонтрольОстатковУНФ. Ниже приведен пример реализации через аннотацию &Вместо:
&Вместо("РасчетыСПоставщиками")
Процедура дор_РасчетыСПоставщиками(ДокОбъект, ВыборкаЗаписей, Отказ)
// Сохраняем текущее состояние переменной Отказ
ПредОтказ = Отказ;
// Вызываем стандартный обработчик
ПродолжитьВызов(ДокОбъект, ВыборкаЗаписей, Отказ);
// Принудительно сбрасываем признак отказа, если он был вызван контролем остатков
// Это позволяет документу провестись, даже если расчеты уже закрыты в ноль
Отказ = ПредОтказ;
КонецПроцедуры
Внимание: Использование расширений, отключающих контроль остатков, требует осторожности. Обязательно убедитесь, что после проведения корректировки итоговое сальдо по контрагенту в регистре Расчеты с покупателями совпадает с вашими ожиданиями, иначе вы рискуете получить расхождения в акте сверки. Для устранения возникших расхождений подойдет инструмент для исправления развернутого сальдо расчетов с покупателями.
Мы выяснили причину ошибки — она заключается в защитных механизмах 1С, которые не позволяют менять данные по уже закрытым (оплаченным) транзакциям без явного указания, куда перенести излишек средств.
Подведем итог:
Всегда помните о необходимости делать резервную копию базы перед массовыми изменениями или обновлением конфигурации, так как логика работы документов корректировки может меняться от релиза к релизу.