Документ «Закрытие Дт/Кт задолженности»

Документ оформляет взаимозачёт встречной дебиторской и кредиторской задолженности по одному контрагенту — переносит остаток с одного счёта расчётов на другой без движения денег. Вы указываете счёт-источник дебиторки (СчётДт, например 1210) и счёт-источник кредиторки (СчётКт, например 3310), а кнопка «Заполнить по остаткам» сама подбирает пары встречных долгов и суммы к зачёту. При проведении формируется одна бухгалтерская проводка на строку (плюс налоговый учёт по КПН, если включён). Вспомогательный документ блока расчётов с контрагентами и закрытия периода.

Бухгалтерия для Казахстана, ред. 3.0 · v3.0.72.1 · обновлено 2026-06-04

🎯 Что это и зачем

Бывает, что один и тот же контрагент одновременно и должен вам (дебиторская задолженность, например по реализации на счёте 1210), и вы должны ему (кредиторская задолженность, например по поступлению на счёте 3310). Гонять деньги туда-обратно бессмысленно — задолженности можно зачесть на меньшую из сумм. Документ «Закрытие Дт/Кт задолженности» делает именно это: переносит остаток между двумя счетами расчётов так, чтобы взаимные долги схлопнулись.

Ключевая особенность: это не платёж. Денежные счета (1010 касса, 1030 банк) здесь не участвуют. Меняется только структура расчётов с контрагентом — задолженность «закрывается» зачётом.

Кто работает: бухгалтер по расчётам с контрагентами, обычно в конце месяца или по акту сверки/соглашению о взаимозачёте. Документ заполняется самостоятельно (вручную или автоподбором по остаткам), на основании других документов не создаётся и сам основанием не служит (массивы based_on / inverse_based_on в метаданных пусты).

💡 Не путайте с регламентным «Закрытием месяца» (Документ.ЗакрытиеМесяца) — это отдельный документ, который запускает набор операций закрытия периода. «Закрытие Дт/Кт задолженности» — это отдельная точечная операция по конкретному контрагенту, которую вы оформляете руками, а не пункт регламента.

🧭 Где найти в программе

Раздел «Операции» → пункт «Закрытие Дт/Кт задолженности» (соседствует с «Корректировкой долга», «Актом сверки» и «Закрытием месяца»). Откроется журнал документов; новый создаём кнопкой «Создать».

📷 СКРИН 01
СКРИН 01 — раздел «Операции», открытый журнал «Закрытие Дт/Кт задолженности». (AccountingKZ30 во Fresh; маршрут: Операции → Закрытие Дт/Кт задолженности → Создать)
⚠️ Несостыковка [KZ30-0331]. Точный маршрут (раздел/пункт левого меню) во navigation-map.json для этого документа не задан — в карте есть только Документ.ЗакрытиеМесяца (раздел «Операции»). Раздел «Операции» определён по принадлежности к блоку расчётов/закрытия и по соседству с однотипными документами; сверьте по своей конфигурации. См. [журнал ошибок](../../../../issues/AccountingKZ30/issues.md).

👤 Часть 1. Для пользователя

Проходим по шагам: от пустого документа до проведённого взаимозачёта и проверки проводок. Главный «магический» шаг — кнопка «Заполнить по остаткам», которая сама находит встречные долги.

Урок 1. Взаимозачёт по остаткам (основной сценарий)

Когда: у контрагента одновременно висит и дебиторская, и кредиторская задолженность, и их нужно зачесть.

Шаг 1. Создаём документ

«Операции» → «Закрытие Дт/Кт задолженности» → «Создать».

📷 СКРИН 02
СКРИН 02 — пустая форма нового документа.

Шаг 2. Заполняем шапку

📷 СКРИН 03
СКРИН 03 — заполненная шапка (Организация, Счёт Дт = 1210, Счёт Кт = 3310).
⚠️ Важно. Оба счёта (Счёт Дт и Счёт Кт) обязаны вести аналитику по контрагентам (субконто «Контрагенты»). Если на счёте нет такого субконто — заполнение по остаткам не сработает (форма проверяет это функцией НаСчётеВедётсяУчётПоКонтрагентам()).

Шаг 3. Заполняем по остаткам

Нажимаем кнопку «Заполнить по остаткам» над табличной частью «Задолженность». Запустится фоновое (асинхронное) задание — дождитесь индикатора завершения (обычно несколько секунд). Система: - возьмёт остатки дебиторки по счёту Дт и кредиторки по счёту Кт на дату документа; - сопоставит их по каждому контрагенту, валюте и (если ведётся) сделке; - для каждой пары встречных долгов подберёт сумму к зачёту = минимум из двух остатков; - заполнит строки: контрагент, договоры Дт и Кт, валюта, суммы.

📷 СКРИН 04
СКРИН 04 — табличная часть «Задолженность», заполненная автоподбором.
💡 Подсказка. Контрагент попадёт в таблицу, только если у него есть и дебиторский, и кредиторский остаток одновременно. Если в строке вы ждёте контрагента, а его нет — значит встречной задолженности по выбранным счетам у него на эту дату не нашлось.

Шаг 4. Проверяем и корректируем строки

📷 СКРИН 05
СКРИН 05 — корректировка суммы в строке (частичный зачёт).
⚠️ Важно. Поле Сумма документа в шапке — расчётное и доступно только для чтения: оно пересчитывается как итог колонки «Сумма» при записи. Не правьте его напрямую — меняйте строки.

Шаг 5. Проводим

«Провести» или «Записать и закрыть». Чтобы проверить учёт — откройте Дт/Кт (отчёт о движениях документа).

📷 СКРИН 06
СКРИН 06 — окно «Движения документа: Дт/Кт».
💡 Как читать проводку. Закрытие дебиторки = она уходит в кредит счёта 1210; закрытие кредиторки = она уходит в дебет счёта 3310. Поэтому в проводке вы увидите Дт 3310 Кт 1210 — то есть стороны «зеркальны» названиям полей шапки (Счёт Дт/Счёт Кт — это источники долгов, а не дебет/кредит проводки). Подробный разбор — в Части 2.

Урок 2. Ручное заполнение строк

Когда: автоподбор не подходит — нестандартная ситуация, конкретные договоры/сделки, точечный зачёт.

  1. Заполните шапку (Урок 1, шаги 1–2).
  2. В табличной части «Задолженность» нажмите «Добавить» и в строке заполните: - Контрагент — по нему закрываем долг; - Договор контрагента Дт — договор дебиторской задолженности; - Договор контрагента Кт — договор кредиторской задолженности (может отличаться от Дт); - Сумма — сумма зачёта в национальной валюте; - Валюта взаиморасчётов и Сумма взаиморасчётов — для валютных расчётов; - при необходимости Сделка по счёту дебета / Сделка по счёту кредита — для детальной аналитики по документам расчётов.
  3. Добавьте строки по другим контрагентам/договорам.
  4. «Провести».
💡 Договоры Дт и Кт намеренно разделены: с одним контрагентом дебиторка может быть по одному договору, а кредиторка — по другому. Документ закроет оба, перенеся сумму между ними.

Урок 3. Смена счетов после заполнения

Если уже заполнили таблицу, а потом меняете Счёт Дт или Счёт Кт:

📷 СКРИН 07
СКРИН 07 — диалог «Табличная часть будет очищена. Продолжить?».
⚠️ Важно. То же происходит при смене даты документа на другой день: остатки зависят от даты, поэтому таблица очищается (смена только времени в пределах дня — игнорируется). Меняйте счета и дату до заполнения по остаткам.

🛠 Часть 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 на сумму зачёта. Это корректный взаимозачёт без денежных счетов.

Налоговый учёт (КПН)

Если НеобходимостьОтраженияВНУ = Истина, для строки формируется вторая проводка по Движения.Налоговый. Счета берутся не «как есть», а через НУ-аналоги счетов расчётов:

Если Реквизиты.НеобходимостьОтраженияВНУ Тогда
    //если договра равны, то проводки не делаем
    Если СтрокаТаблицы.ДоговорКредит = СтрокаТаблицы.ДоговорДебет Тогда
        Продолжить;
    КонецЕсли;

    ПроводкаНУ = Движения.Налоговый.Добавить();
    ПроводкаНУ.СчетДт = ПроцедурыНалоговогоУчетаВызовСервераПовтИсп.ПолучитьСчетРасчетовСКонтрагентомНУ(Реквизиты.СчетКт);
    ПроводкаНУ.СчетКт = ПроцедурыНалоговогоУчетаВызовСервераПовтИсп.ПолучитьСчетРасчетовСКонтрагентомНУ(Реквизиты.СчетДт);
    ПроводкаНУ.Сумма  = СтрокаТаблицы.Сумма;
    // ... субконто Контрагенты/Договоры (зеркально БУ), подразделения ...
    ПроцедурыНалоговогоУчета.ВидУчетаНУ(ПроводкаНУ, Реквизиты.ВидУчетаНУ);
КонецЕсли;

Признак НеобходимостьОтраженияВНУ вычисляется в ПодготовитьПараметрыПроведения: ОрганизацияПлательщикНалогаНаПрибыль И Реквизиты.УчитыватьКПН И (ПоддержкаУчётаВременныхРазниц ИЛИ ВидУчётаНУ = Справочники.ВидыУчётаНУ.НУ).

⚠️ Если в строке договоры Дт и Кт совпадают, НУ-проводка пропускается (Продолжить) — зачёт внутри одного договора в НУ не отражается. На БУ-проводку это не влияет (она уже добавлена выше).

Движения по регистрам

Регистр Тип / движение Что пишет
РегистрБухгалтерии.Типовой Бухгалтерская проводка (БУ) Дт = СчётКт документа, Кт = СчётДт документа на сумму строки; субконто Контрагент/Договор/Сделка по обеим сторонам; валютные суммы — если счёт валютный
РегистрБухгалтерии.Налоговый Бухгалтерская проводка (НУ) Только при НеобходимостьОтраженияВНУ; счета — НУ-аналоги счетов расчётов; пропускается, если Договор Дт = Договор Кт
⚠️ Несостыковка [KZ30-0332]. Авто-разбор business-logic/...ManagerModule.md утверждает, что движения пишутся в РегистрСведений.ЗакрытиеДтКтЗадолженности. В реальном коде 3.0.72.1 это неверно: СформироватьДвиженияЗакрытиеДтКтЗадолженности пишет в Движения.Типовой и Движения.Налоговый — регистры бухгалтерии, регистр сведений с таким именем здесь не задействован. Опираемся на код.
⚠️ Несостыковка [KZ30-0333]. Разбор objects/ (раздел «Проводки», стр. 403/437) описывает проводку как «Дт СчётДт / Кт СчётКт» с дебетными субконто на дебете. Реальный код переворачивает стороны (Проводка.СчетДт = Реквизиты.СчетКт) и кросс-привязывает субконто (на дебет проводки — кредитные договор/сделку). Корректная проводка — Дт 3310 Кт 1210, а не наоборот. Точные Дт/Кт всегда сверяйте по отчёту «Дт/Кт» на проведённом документе.

Логика «Заполнить по остаткам» — реальный код (ManagerModule, стр. 8)

Команда формы запускает фоновое задание, которое вызывает ManagerModule.ЗаполнитьОстатками. Алгоритм:

  1. Виды субконто отбора — Контрагенты, Договоры, плюс ДокументыРасчётовСКонтрагентами, если на счёте Дт ведётся учёт по документам расчётов (НаСчётеВедётсяУчётПоДокументамРасчётов).
  2. Два запроса к РегистрБухгалтерии.Типовой.Остатки(&ДатаОкончания, ...): - по СчётДт с ВидСчета.Пассивный, Знак = 1 → дерево остатков дебиторки; - по СчётКт с ВидСчета.Активный, Знак = -1 → дерево остатков кредиторки. Остатки выгружаются деревом по группировкам Контрагент → Валюта → (детали).
  3. Сопоставление: по каждому контрагенту ищется встречная строка; по каждой валюте — встречная; затем по парам деталей. Сумма зачёта — МИН(остаток Дт, остаток Кт) с учётом знаков; найденная сумма вычитается из обоих остатков (чтобы корректно распределить на несколько договоров/сделок). Если знаки совпадают (нет встречного долга) — пара пропускается.
  4. Заполняется новая строка Задолженность: Сумма, Контрагент, ВалютаВзаиморасчётов, ДоговорКонтрагентаДт/ДоговорКонтрагентаКт, СделкаПоСчётуДебета/СделкаПоСчётуКредита, СуммаВзаиморасчётов.
  5. Результат кладётся во временное хранилище и подтягивается на форму.
💡 Отбор по структурному подразделению добавляется в запрос только при включённой функциональной опции ПоддержкаРаботыСоСтруктурнымиПодразделениями.

Валидации

ОбработкаПроверкиЗаполнения (ObjectModule, стр. 61) формирует массив непроверяемых реквизитов и затем зовёт стандартную проверку:

Если НЕ ПолучитьФункциональнуюОпцию("ПлательщикКПН", Новый Структура("Организация, Период", Организация, Дата))
    ИЛИ НЕ УчитыватьКПН Тогда
    МассивНепроверяемыхРеквизитов.Добавить("ВидУчетаНУ");
КонецЕсли;

Если НЕ ПолучитьФункциональнуюОпцию("ВестиУчетПоДоговорам") Тогда
    МассивНепроверяемыхРеквизитов.Добавить("Задолженность.ДоговорКонтрагентаДт");
    МассивНепроверяемыхРеквизитов.Добавить("Задолженность.ДоговорКонтрагентаКт");
КонецЕсли;

Зависимости (общие модули)

ПроцедурыБухгалтерскогоУчета / ...ВызовСервераПовтИсп (свойства счетов, установка субконто и подразделений, проверка аналитики), ПроцедурыНалоговогоУчета / ...ВызовСервераПовтИсп (признак плательщика КПН, НУ-аналоги счетов расчётов, ВидУчётаНУ, постоянные разницы), УчётнаяПолитикаСервер (существование политики), ПроведениеСервер (наборы записей), ЗаполнениеДокументов, ОбщегоНазначения / ОбщегоНазначенияБК, БлокируемыеРеквизиты (через ПолучитьБлокируемыеРеквизитыОбъекта).

💼 Партнёру / внедренцу. Три частые причины «не работает»:
  1. «Заполнить по остаткам» неактивна / ничего не находит → на одном из счетов нет субконто «Контрагенты», либо у контрагента нет одновременно Дт- и Кт-остатка по этим счетам на дату, либо не совпадают валюты. Проверьте план счетов и ОСВ по счетам 1210/3310 в разрезе контрагентов.
  2. Документ «тихо» не проводится → нет действующей учётной политики (БУ или НУ) на дату документа — ПодготовитьПараметрыПроведения ставит Отказ без явного сообщения.
  3. Нет проводок по НУ → не выполнено условие НеобходимостьОтраженияВНУ (организация не плательщик КПН, снят УчитыватьКПН, не тот ВидУчётаНУ), или в строках Договор Дт = Договор Кт (тогда НУ-проводка по строке пропускается).
🧩 Заметки для разработчика.
  1. Стороны проводки инвертированы относительно полей шапки (Проводка.СчетДт = Реквизиты.СчетКт). При анализе/доработке не путайте «СчётДт документа» (источник дебиторки) с дебетом проводки.
  2. Субконто кросс-привязаны: на дебет проводки идут кредитные договор и сделка, на кредит — дебетные. Это следствие инверсии.
  3. В простой версии конфигурации часть реквизитов и табличная часть блокируются для редактирования — см. ПолучитьБлокируемыеРеквизитыОбъекта (ЭтоПростаяВерсияКонфигурации).
  4. СуммаДокумента пересчитывается в ПередЗаписью из Задолженность.Итог("Сумма") — поле служебное, не для ручного ввода.
  5. Тип сделок (СделкаПоСчёту…) — составной (ОперацияБух / РегистрацияПрочихОперацийПоРеализованнымТоварамВЦеляхНДС / ОплатаОтПокупателяПлатёжнойКартой); в НУ-проводку сделки не пишутся (только Контрагент/Договор).

🔗 Связанные разделы

🆕 Что нового

Версия Изменение Тип
3.0.72.1 Первичное описание (на релизе 3.0.72.1) 🆕