Документ «Закрытие Дт/Кт задолженности»
Документ оформляет взаимозачёт встречной дебиторской и кредиторской задолженности по одному контрагенту — переносит остаток с одного счёта расчётов на другой без движения денег. Вы указываете счёт-источник дебиторки (СчётДт, например 1210) и счёт-источник кредиторки (СчётКт, например 3310), а кнопка «Заполнить по остаткам» сама подбирает пары встречных долгов и суммы к зачёту. При проведении формируется одна бухгалтерская проводка на строку (плюс налоговый учёт по КПН, если включён). Вспомогательный документ блока расчётов с контрагентами и закрытия периода.
🎯 Что это и зачем
Бывает, что один и тот же контрагент одновременно и должен вам (дебиторская задолженность, например по реализации на счёте 1210), и вы должны ему (кредиторская задолженность, например по поступлению на счёте 3310). Гонять деньги туда-обратно бессмысленно — задолженности можно зачесть на меньшую из сумм. Документ «Закрытие Дт/Кт задолженности» делает именно это: переносит остаток между двумя счетами расчётов так, чтобы взаимные долги схлопнулись.
Ключевая особенность: это не платёж. Денежные счета (1010 касса, 1030 банк) здесь не участвуют. Меняется только структура расчётов с контрагентом — задолженность «закрывается» зачётом.
Кто работает: бухгалтер по расчётам с контрагентами, обычно в конце месяца или по акту сверки/соглашению о взаимозачёте. Документ заполняется самостоятельно (вручную или автоподбором по остаткам), на основании других документов не создаётся и сам основанием не служит (массивы based_on / inverse_based_on в метаданных пусты).
Документ.ЗакрытиеМесяца) — это отдельный документ, который запускает набор операций закрытия периода. «Закрытие Дт/Кт задолженности» — это отдельная точечная операция по конкретному контрагенту, которую вы оформляете руками, а не пункт регламента.🧭 Где найти в программе
Раздел «Операции» → пункт «Закрытие Дт/Кт задолженности» (соседствует с «Корректировкой долга», «Актом сверки» и «Закрытием месяца»). Откроется журнал документов; новый создаём кнопкой «Создать».
navigation-map.json для этого документа не задан — в карте есть только Документ.ЗакрытиеМесяца (раздел «Операции»). Раздел «Операции» определён по принадлежности к блоку расчётов/закрытия и по соседству с однотипными документами; сверьте по своей конфигурации. См. [журнал ошибок](../../../../issues/AccountingKZ30/issues.md).👤 Часть 1. Для пользователя
Проходим по шагам: от пустого документа до проведённого взаимозачёта и проверки проводок. Главный «магический» шаг — кнопка «Заполнить по остаткам», которая сама находит встречные долги.
Урок 1. Взаимозачёт по остаткам (основной сценарий)
Когда: у контрагента одновременно висит и дебиторская, и кредиторская задолженность, и их нужно зачесть.
Шаг 1. Создаём документ
«Операции» → «Закрытие Дт/Кт задолженности» → «Создать».
Шаг 2. Заполняем шапку
- Организация — подставится основная или выбираем вручную.
- Счёт Дт — счёт, на котором учтена дебиторская задолженность (контрагент должен вам). Типично для КЗ: 1210 «Краткосрочная дебиторская задолженность покупателей и заказчиков».
- Счёт Кт — счёт, на котором учтена кредиторская задолженность (вы должны контрагенту). Типично: 3310 «Краткосрочная кредиторская задолженность поставщикам и подрядчикам».
- Структурное подразделение — если ведётся учёт по подразделениям.
- Учитывать КПН — поставьте флажок, если организация плательщик КПН и операцию нужно отразить в налоговом учёте; тогда автоматически заполнится Вид учёта НУ.
Счёт Дт и Счёт Кт) обязаны вести аналитику по контрагентам (субконто «Контрагенты»). Если на счёте нет такого субконто — заполнение по остаткам не сработает (форма проверяет это функцией НаСчётеВедётсяУчётПоКонтрагентам()).Шаг 3. Заполняем по остаткам
Нажимаем кнопку «Заполнить по остаткам» над табличной частью «Задолженность». Запустится фоновое (асинхронное) задание — дождитесь индикатора завершения (обычно несколько секунд). Система: - возьмёт остатки дебиторки по счёту Дт и кредиторки по счёту Кт на дату документа; - сопоставит их по каждому контрагенту, валюте и (если ведётся) сделке; - для каждой пары встречных долгов подберёт сумму к зачёту = минимум из двух остатков; - заполнит строки: контрагент, договоры Дт и Кт, валюта, суммы.
Шаг 4. Проверяем и корректируем строки
- Убедитесь, что контрагенты, договоры и суммы корректны.
- Лишние строки удалите (кнопка «Удалить») — их задолженность останется в учёте незакрытой.
- Для частичного зачёта уменьшите Сумму в строке (и, для валютных расчётов, пропорционально Сумму взаиморасчётов).
Шаг 5. Проводим
«Провести» или «Записать и закрыть». Чтобы проверить учёт — откройте Дт/Кт (отчёт о движениях документа).
Счёт Дт/Счёт Кт — это источники долгов, а не дебет/кредит проводки). Подробный разбор — в Части 2.Урок 2. Ручное заполнение строк
Когда: автоподбор не подходит — нестандартная ситуация, конкретные договоры/сделки, точечный зачёт.
- Заполните шапку (Урок 1, шаги 1–2).
- В табличной части «Задолженность» нажмите «Добавить» и в строке заполните: - Контрагент — по нему закрываем долг; - Договор контрагента Дт — договор дебиторской задолженности; - Договор контрагента Кт — договор кредиторской задолженности (может отличаться от Дт); - Сумма — сумма зачёта в национальной валюте; - Валюта взаиморасчётов и Сумма взаиморасчётов — для валютных расчётов; - при необходимости Сделка по счёту дебета / Сделка по счёту кредита — для детальной аналитики по документам расчётов.
- Добавьте строки по другим контрагентам/договорам.
- «Провести».
Урок 3. Смена счетов после заполнения
Если уже заполнили таблицу, а потом меняете Счёт Дт или Счёт Кт:
- «Да» → таблица полностью очищается, заполняем заново.
- «Нет» → смена счёта отменяется, строки сохраняются.
🛠 Часть 2. Для программиста
Источник: реальный код релиза 3.0.72.1 (Documents/ЗакрытиеДтКтЗадолженности/Ext/ObjectModule.bsl и ManagerModule.bsl), плюс разбор objects/ и business-logic/. Где разбор расходится с кодом — отмечено в несостыковках.
Структура объекта
Ключевые реквизиты шапки:
- Обязательные (ShowError): Организация, СчетДт (ПланСчетов.Типовой), СчетКт (ПланСчетов.Типовой), ВидУчетаНУ (Справочник.ВидыУчетаНУ — условно, см. валидации).
- Необязательные (DontCheck): СтруктурноеПодразделение, СуммаДокумента (расчётное), УчитыватьКПН (Булево), РучнаяКорректировка (Булево), Комментарий, Автор.
Табличная часть Задолженность (единственная): Контрагент, ДоговорКонтрагентаДт, ДоговорКонтрагентаКт, СделкаПоСчетуДебета, СделкаПоСчетуКредита (тип — ДокументСсылка: ОперацияБух / РегистрацияПрочихОперацийПоРеализованнымТоварамВЦеляхНДС / ОплатаОтПокупателяПлатежнойКартой), Сумма (нац. валюта), ВалютаВзаиморасчетов, СуммаВзаиморасчетов.
Формы: ФормаДокумента (основная, с кнопкой «Заполнить по остаткам»), ФормаСписка, ФормаВыбора.
Жизненный цикл проведения (обработчики ObjectModule)
| Обработчик | Что делает |
|---|---|
ОбработкаЗаполнения |
При создании/на основании: удаляет служебное Автор из ДанныеЗаполнения, копирует свойства, вызывает ЗаполнениеДокументов.ЗаполнитьШапкуДокумента с валютой регл. учёта |
ПриКопировании |
Заполняет шапку стандартно, восстанавливает валюту регл. учёта |
ОбработкаПроверкиЗаполнения |
Формирует массив непроверяемых реквизитов по функциональным опциям (КПН, учёт по договорам), затем стандартная проверка |
ПередЗаписью |
Пересчитывает СуммаДокумента = Задолженность.Итог("Сумма") (кроме загрузки обмена) |
ОбработкаПроведения |
Готовит наборы записей; при РучнаяКорректировка — выходит; иначе получает параметры и делегирует формирование движений менеджеру + отражает ПР в НУ |
Как формируется проведение — реальный код (3.0.72.1)
Логика проведения в объекте — тонкая обёртка: документ готовит наборы, получает параметры запросом и делегирует формирование движений менеджеру документа (ManagerModule).
Источник: ObjectModule.bsl, процедура ОбработкаПроведения (стр. 91):
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
// ПОДГОТОВКА ПРОВЕДЕНИЯ ПО ДАННЫМ ДОКУМЕНТА
ПроведениеСервер.ПодготовитьНаборыЗаписейКПроведению(ЭтотОбъект);
Если РучнаяКорректировка Тогда
Возврат; // ручное управление движениями
КонецЕсли;
ПараметрыПроведения = Документы.ЗакрытиеДтКтЗадолженности.ПодготовитьПараметрыПроведения(Ссылка, Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
// ФОРМИРОВАНИЕ ДВИЖЕНИЙ
Документы.ЗакрытиеДтКтЗадолженности.СформироватьДвиженияЗакрытиеДтКтЗадолженности(ПараметрыПроведения.ТаблицаЗадолженность,
ПараметрыПроведения.ТаблицаРеквизитов, Движения, Отказ);
// Отражение ПР в НУ
ПроцедурыНалоговогоУчета.ОтразитьПостоянныеРазницыВНУ(ПараметрыПроведения.ТаблицаРеквизитов, Движения, Отказ);
КонецПроцедуры
РучнаяКорректировка = Истина→ авто-проведение пропускается (Возврат): движения заполняет пользователь руками.ПодготовитьПараметрыПроведениясначала проверяет существование учётной политики на дату (и БУ, и НУ) — если её нет, ставитОткази проведение прекращается (отсюда «тихий» отказ без сообщения).- В конце —
ОтразитьПостоянныеРазницыВНУ(стандартный механизм постоянных разниц).
Ядро — СформироватьДвиженияЗакрытиеДтКтЗадолженности (ManagerModule, стр. 329)
Здесь формируется сама проводка. Главный нюанс — стороны Дт/Кт «переворачиваются» относительно полей шапки:
СвойстваСчетаДт = ПроцедурыБухгалтерскогоУчетаВызовСервераПовтИсп.ПолучитьСвойстваСчета(Реквизиты.СчетДт);
СвойстваСчетаКт = ПроцедурыБухгалтерскогоУчетаВызовСервераПовтИсп.ПолучитьСвойстваСчета(Реквизиты.СчетКт);
Для Каждого СтрокаТаблицы ИЗ Таблица Цикл
Проводка = Движения.Типовой.Добавить();
Проводка.Период = Реквизиты.Период;
Проводка.Организация = Реквизиты.Организация;
Проводка.Содержание = НСтр("ru = 'Закрытие дт/кт задолженности'", КодОсновногоЯзыка);
Проводка.СчетДт = Реквизиты.СчетКт; // ← дебет проводки = СЧЁТ КТ документа (кредиторка, напр. 3310)
Проводка.СчетКт = Реквизиты.СчетДт; // ← кредит проводки = СЧЁТ ДТ документа (дебиторка, напр. 1210)
Если СвойстваСчетаДт.Валютный Тогда
Проводка.ВалютаКт = СтрокаТаблицы.ВалютаВзаиморасчетов;
Проводка.ВалютнаяСуммаКт = СтрокаТаблицы.СуммаВзаиморасчетов;
КонецЕсли;
Если СвойстваСчетаКт.Валютный Тогда
Проводка.ВалютаДт = СтрокаТаблицы.ВалютаВзаиморасчетов;
Проводка.ВалютнаяСуммаДт = СтрокаТаблицы.СуммаВзаиморасчетов;
КонецЕсли;
Проводка.Сумма = СтрокаТаблицы.Сумма;
// субконто ДЕБЕТА проводки (= СчётКт документа): договор/сделка берутся КРЕДИТНЫЕ
ПроцедурыБухгалтерскогоУчета.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "Контрагенты", СтрокаТаблицы.Контрагент, Истина);
ПроцедурыБухгалтерскогоУчета.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "Договоры", СтрокаТаблицы.ДоговорКредит);
ПроцедурыБухгалтерскогоУчета.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "ДокументыРасчетовСКонтрагентами", СтрокаТаблицы.СделкаКредит);
// субконто КРЕДИТА проводки (= СчётДт документа): договор/сделка берутся ДЕБЕТНЫЕ
ПроцедурыБухгалтерскогоУчета.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт, "Контрагенты", СтрокаТаблицы.Контрагент, Истина);
ПроцедурыБухгалтерскогоУчета.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт, "Договоры", СтрокаТаблицы.ДоговорДебет);
ПроцедурыБухгалтерскогоУчета.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт, "ДокументыРасчетовСКонтрагентами", СтрокаТаблицы.СделкаДебет);
ПроцедурыБухгалтерскогоУчета.УстановитьПодразделенияПроводки(Проводка, Реквизиты.СтруктурноеПодразделение, Реквизиты.СтруктурноеПодразделение);
Что это даёт экономически (счета КЗ): закрываемая дебиторка (СчётДт документа, 1210) попадает в кредит проводки — остаток дебиторки уменьшается; закрываемая кредиторка (СчётКт документа, 3310) попадает в дебет — остаток кредиторки уменьшается. Итоговая проводка: Дт 3310 Кт 1210 на сумму зачёта. Это корректный взаимозачёт без денежных счетов.
Налоговый учёт (КПН)
Если НеобходимостьОтраженияВНУ = Истина, для строки формируется вторая проводка по Движения.Налоговый. Счета берутся не «как есть», а через НУ-аналоги счетов расчётов:
Если Реквизиты.НеобходимостьОтраженияВНУ Тогда
//если договра равны, то проводки не делаем
Если СтрокаТаблицы.ДоговорКредит = СтрокаТаблицы.ДоговорДебет Тогда
Продолжить;
КонецЕсли;
ПроводкаНУ = Движения.Налоговый.Добавить();
ПроводкаНУ.СчетДт = ПроцедурыНалоговогоУчетаВызовСервераПовтИсп.ПолучитьСчетРасчетовСКонтрагентомНУ(Реквизиты.СчетКт);
ПроводкаНУ.СчетКт = ПроцедурыНалоговогоУчетаВызовСервераПовтИсп.ПолучитьСчетРасчетовСКонтрагентомНУ(Реквизиты.СчетДт);
ПроводкаНУ.Сумма = СтрокаТаблицы.Сумма;
// ... субконто Контрагенты/Договоры (зеркально БУ), подразделения ...
ПроцедурыНалоговогоУчета.ВидУчетаНУ(ПроводкаНУ, Реквизиты.ВидУчетаНУ);
КонецЕсли;
Признак НеобходимостьОтраженияВНУ вычисляется в ПодготовитьПараметрыПроведения:
ОрганизацияПлательщикНалогаНаПрибыль И Реквизиты.УчитыватьКПН И (ПоддержкаУчётаВременныхРазниц ИЛИ ВидУчётаНУ = Справочники.ВидыУчётаНУ.НУ).
Продолжить) — зачёт внутри одного договора в НУ не отражается. На БУ-проводку это не влияет (она уже добавлена выше).Движения по регистрам
| Регистр | Тип / движение | Что пишет |
|---|---|---|
РегистрБухгалтерии.Типовой |
Бухгалтерская проводка (БУ) | Дт = СчётКт документа, Кт = СчётДт документа на сумму строки; субконто Контрагент/Договор/Сделка по обеим сторонам; валютные суммы — если счёт валютный |
РегистрБухгалтерии.Налоговый |
Бухгалтерская проводка (НУ) | Только при НеобходимостьОтраженияВНУ; счета — НУ-аналоги счетов расчётов; пропускается, если Договор Дт = Договор Кт |
business-logic/...ManagerModule.md утверждает, что движения пишутся в РегистрСведений.ЗакрытиеДтКтЗадолженности. В реальном коде 3.0.72.1 это неверно: СформироватьДвиженияЗакрытиеДтКтЗадолженности пишет в Движения.Типовой и Движения.Налоговый — регистры бухгалтерии, регистр сведений с таким именем здесь не задействован. Опираемся на код.objects/ (раздел «Проводки», стр. 403/437) описывает проводку как «Дт СчётДт / Кт СчётКт» с дебетными субконто на дебете. Реальный код переворачивает стороны (Проводка.СчетДт = Реквизиты.СчетКт) и кросс-привязывает субконто (на дебет проводки — кредитные договор/сделку). Корректная проводка — Дт 3310 Кт 1210, а не наоборот. Точные Дт/Кт всегда сверяйте по отчёту «Дт/Кт» на проведённом документе.Логика «Заполнить по остаткам» — реальный код (ManagerModule, стр. 8)
Команда формы запускает фоновое задание, которое вызывает ManagerModule.ЗаполнитьОстатками. Алгоритм:
- Виды субконто отбора — Контрагенты, Договоры, плюс ДокументыРасчётовСКонтрагентами, если на счёте Дт ведётся учёт по документам расчётов (
НаСчётеВедётсяУчётПоДокументамРасчётов). - Два запроса к
РегистрБухгалтерии.Типовой.Остатки(&ДатаОкончания, ...): - по СчётДт сВидСчета.Пассивный,Знак = 1→ дерево остатков дебиторки; - по СчётКт сВидСчета.Активный,Знак = -1→ дерево остатков кредиторки. Остатки выгружаются деревом по группировкам Контрагент → Валюта → (детали). - Сопоставление: по каждому контрагенту ищется встречная строка; по каждой валюте — встречная; затем по парам деталей. Сумма зачёта —
МИН(остаток Дт, остаток Кт)с учётом знаков; найденная сумма вычитается из обоих остатков (чтобы корректно распределить на несколько договоров/сделок). Если знаки совпадают (нет встречного долга) — пара пропускается. - Заполняется новая строка
Задолженность:Сумма,Контрагент,ВалютаВзаиморасчётов,ДоговорКонтрагентаДт/ДоговорКонтрагентаКт,СделкаПоСчётуДебета/СделкаПоСчётуКредита,СуммаВзаиморасчётов. - Результат кладётся во временное хранилище и подтягивается на форму.
ПоддержкаРаботыСоСтруктурнымиПодразделениями.Валидации
ОбработкаПроверкиЗаполнения (ObjectModule, стр. 61) формирует массив непроверяемых реквизитов и затем зовёт стандартную проверку:
Если НЕ ПолучитьФункциональнуюОпцию("ПлательщикКПН", Новый Структура("Организация, Период", Организация, Дата))
ИЛИ НЕ УчитыватьКПН Тогда
МассивНепроверяемыхРеквизитов.Добавить("ВидУчетаНУ");
КонецЕсли;
Если НЕ ПолучитьФункциональнуюОпцию("ВестиУчетПоДоговорам") Тогда
МассивНепроверяемыхРеквизитов.Добавить("Задолженность.ДоговорКонтрагентаДт");
МассивНепроверяемыхРеквизитов.Добавить("Задолженность.ДоговорКонтрагентаКт");
КонецЕсли;
ВидУчётаНУпроверяется на обязательность только если организация — плательщик КПН (ФО "ПлательщикКПН") иУчитыватьКПН = Истина. Иначе исключается.- Договоры Дт/Кт в строках проверяются на обязательность только при включённой
ФО "ВестиУчётПоДоговорам". - Обязательность шапки (
Организация,СчётДт,СчётКт) задана типом реквизита (ShowError). - Учёт по контрагентам на обоих счетах — проверка на форме (
НаСчётеВедётсяУчётПоКонтрагентам()), от неё зависит доступность «Заполнить по остаткам». - В
ПодготовитьПараметрыПроведения— проверка существования учётной политики (БУ и НУ) на дату: нет политики →Отказ.
Зависимости (общие модули)
ПроцедурыБухгалтерскогоУчета / ...ВызовСервераПовтИсп (свойства счетов, установка субконто и подразделений, проверка аналитики), ПроцедурыНалоговогоУчета / ...ВызовСервераПовтИсп (признак плательщика КПН, НУ-аналоги счетов расчётов, ВидУчётаНУ, постоянные разницы), УчётнаяПолитикаСервер (существование политики), ПроведениеСервер (наборы записей), ЗаполнениеДокументов, ОбщегоНазначения / ОбщегоНазначенияБК, БлокируемыеРеквизиты (через ПолучитьБлокируемыеРеквизитыОбъекта).
- «Заполнить по остаткам» неактивна / ничего не находит → на одном из счетов нет субконто «Контрагенты», либо у контрагента нет одновременно Дт- и Кт-остатка по этим счетам на дату, либо не совпадают валюты. Проверьте план счетов и ОСВ по счетам 1210/3310 в разрезе контрагентов.
- Документ «тихо» не проводится → нет действующей учётной политики (БУ или НУ) на дату документа —
ПодготовитьПараметрыПроведенияставитОтказбез явного сообщения.- Нет проводок по НУ → не выполнено условие
НеобходимостьОтраженияВНУ(организация не плательщик КПН, снятУчитыватьКПН, не тотВидУчётаНУ), или в строках Договор Дт = Договор Кт (тогда НУ-проводка по строке пропускается).
- Стороны проводки инвертированы относительно полей шапки (
Проводка.СчетДт = Реквизиты.СчетКт). При анализе/доработке не путайте «СчётДт документа» (источник дебиторки) с дебетом проводки.- Субконто кросс-привязаны: на дебет проводки идут кредитные договор и сделка, на кредит — дебетные. Это следствие инверсии.
- В простой версии конфигурации часть реквизитов и табличная часть блокируются для редактирования — см.
ПолучитьБлокируемыеРеквизитыОбъекта(ЭтоПростаяВерсияКонфигурации).СуммаДокументапересчитывается вПередЗаписьюизЗадолженность.Итог("Сумма")— поле служебное, не для ручного ввода.- Тип сделок (
СделкаПоСчёту…) — составной (ОперацияБух / РегистрацияПрочихОперацийПоРеализованнымТоварамВЦеляхНДС / ОплатаОтПокупателяПлатёжнойКартой); в НУ-проводку сделки не пишутся (только Контрагент/Договор).
🔗 Связанные разделы
- korrektirovka-dolga — более общий документ корректировки/переноса долга (взаимозачёт, перенос задолженности, списание)
- akt-sverki-vzaimoraschetov — основание для взаимозачёта (сверка остатков с контрагентом)
- operaciya-buhgalterskaya — ручной ввод проводок, если нужна нестандартная корреспонденция (плейсхолдер: раздел может отсутствовать в базе)
- zakrytie-mesyaca — регламентное закрытие периода (не путать с этим документом) (плейсхолдер)
🆕 Что нового
| Версия | Изменение | Тип |
|---|---|---|
| 3.0.72.1 | Первичное описание (на релизе 3.0.72.1) | 🆕 |