Как программно свернуть остатки по счету 19.07 в 1С

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет
← На главную

В практике бухгалтера и программиста 1С часто возникает задача очистки или свертки остатков по специфическим счетам. Одним из таких является счет 19.07 «Налог на добавленную стоимость по товарам, реализованным по ставке 0% (экспорт)». В связи с изменениями в законодательстве (ФЗ №150), накопление НДС на этом счете для многих видов товаров стало необязательным, и старые «зависшие» остатки требуют корректировки.

В данной статье мы разберем, как правильно реализовать программную свертку остатков, какие объекты использовать и как избежать типичных ошибок, когда проводки вроде бы есть, а сальдо в оборотно-сальдовой ведомости (ОСВ) не закрывается.

Почему нельзя просто изменить существующие движения документов

Разберем типичную ошибку начинающих разработчиков: попытку добавить новые записи в существующие наборы движений документов прошлых периодов. Как справедливо отмечено в обсуждении, это «убийство для учета». Любое последующее перепроведение документа полностью затрет ваши ручные или программные правки.

Правильный подход — создание нового документа ОперацияБух (в конфигурациях на обычных формах, таких как УПП или КА 1.1) или Операция (бухгалтерский и налоговый учет). Это обеспечит сохранность данных и наглядность корректировок для аудита.

Шаг 1: Получение актуальных остатков с помощью запроса

Прежде всего, нам необходимо получить данные, которые мы будем сворачивать. Важным нюансом здесь является использование объекта Граница. Если использовать просто КонецДня(Дата), в выборку могут не попасть движения, сделанные в ту же самую секунду, или возникнет путаница с последовательностью. Рассмотрим правильный способ получения остатков по счету 19.07.


// Подготовка параметров запроса
СписокСчетовБУ = Новый СписокЗначений;
СписокСчетовБУ.Добавить(ПланыСчетов.Хозрасчетный.НДС_Экспорт); // 19.07

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   ХозрасчетныйОстатки.Организация КАК Организация,
    |   ХозрасчетныйОстатки.Счет КАК Счет,
    |   ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
    |   ХозрасчетныйОстатки.Субконто2 КАК Поступление,
    |   ХозрасчетныйОстатки.Субконто3 КАК Реализация,
    |   ХозрасчетныйОстатки.СуммаОстатокДт КАК Сумма
    |ИЗ
    |   РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет В ИЕРАРХИИ (&СписокСчетовБУ), , ) КАК ХозрасчетныйОстатки
    |ГДЕ
    |   ХозрасчетныйОстатки.СуммаОстатокДт <> 0";

// Используем Границу для точности получения остатков
ПараметрПериод = Новый Граница(КонецДня(ДатаКон), ВидГраницы.Включая);
Запрос.УстановитьПараметр("Период", ПараметрПериод);
Запрос.УстановитьПараметр("СписокСчетовБУ", СписокСчетовБУ);

РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
    Сообщить("Остатков для свертки не обнаружено.");
    Возврат;
КонецЕсли;

Обратите внимание на использование В ИЕРАРХИИ. Это хорошая практика на случай, если пользователи добавили свои субсчета к счету 19.07. Проверка результата методом Пустой() позволяет избежать лишних действий и ошибок в коде.

Шаг 2: Создание документа «Операция» и заполнение движений

Теперь рассмотрим процесс создания документа и циклического заполнения его проводок. Главная задача здесь — перенести дебетовый остаток на кредит этого же счета или списать его на затраты (например, счет 91.02), соблюдая всю аналитику.

Важный момент: если вы просто укажете СчетКт = СчетДт и перенесете те же субконто, сумма в ОСВ закроется только в том случае, если все измерения (Организация, Подразделение и т.д.) совпадут до копейки.


Выборка = РезультатЗапроса.Выбрать();
ДокументОбъект = Документы.ОперацияБух.СоздатьДокумент();
ДокументОбъект.Дата = ДатаКон;
ДокументОбъект.Организация = ВыбраннаяОрганизация;
ДокументОбъект.Ответственный = глТекущийПользователь;
ДокументОбъект.Содержание = "Свертка остатков по счету 19.07 (программно)";

// Запись документа для получения ссылки, если это необходимо
ДокументОбъект.Записать();

Пока Выборка.Следующий() Цикл
    Движение = ДокументОбъект.Движения.Хозрасчетный.Добавить();
    Движение.Период = ДокументОбъект.Дата;
    Движение.Организация = Выборка.Организация;
    
    // Списываем с дебета 19.07 на кредит другого счета (например, 91.02)
    // Либо делаем корректировку внутри счета 19.07
    Движение.СчетДт = ПланыСчетов.Хозрасчетный.ПрочиеРасходы; 
    Движение.СчетКт = Выборка.Счет;
    
    // Заполнение субконто кредита (то, что закрываем)
    Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = Выборка.Контрагент;
    Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.СФПолученные] = Выборка.Поступление;
    Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРеализации] = Выборка.Реализация;
    
    // Заполнение субконто дебета (куда списываем)
    Движение.СубконтоДт.ПрочиеДоходыИРасходы = Справочники.ПрочиеДоходыИРасходы.НайтиПоНаименованию("Списание НДС");
    
    Движение.Сумма = Выборка.Сумма;
КонецЦикла;

ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);

Шаг 3: Проблема «невидимых» остатков в ОСВ

Часто программисты сталкиваются с ситуацией: в регистре бухгалтерии записи появились, дебет и кредит по сумме равны, но в отчете ОСВ всё равно висит сальдо. Проанализируем основные причины этого явления:

  1. Разная аналитика: Проверьте, что типы данных в субконто полностью идентичны. Если в остатках на 19.07 Субконто2 имело тип ДокументСсылка.ПоступлениеТоваровУслуг, а вы в проводку записали Неопределено или ссылку на другой тип документа — 1С не «схлопнет» эти суммы.
  2. Измерения регистра: У регистра бухгалтерии, помимо субконто, есть измерения. Самое важное — Организация. Если при программном создании проводки вы забыли заполнить Движение.Организация, сумма «упадет» на пустую организацию, и остаток по основной организации останется нетронутым.
  3. Забалансовые счета: Если вы работаете с забалансовыми счетами, помните, что там нет двойной записи. Но в случае с 19.07 (счет балансовый) всегда должны быть заполнены обе стороны проводки (Дт и Кт) для сохранения баланса.

Шаг 4: Работа с регистрами НДС (важное дополнение)

Проанализируем ситуацию в сложных конфигурациях (УПП, Комплексная 1.1). Счета 19-й группы тесно связаны с регистрами накопления НДС (например, «НДС предъявленный»). Если вы сделаете только бухгалтерскую проводку через «Операцию», вы уберете цифры из ОСВ, но при попытке сформировать Книгу покупок или Книгу продаж система выдаст ошибки, так как регистры НДС останутся незакрытыми.

В таких случаях рекомендуется:

Резюме

Разбор данной темы показывает, что программная свертка — это не просто перекладывание сумм из одной колонки в другую. Рассмотрим основные правила успеха:

  1. Всегда используйте Граница в запросах по остаткам.
  2. Создавайте отдельный документ-регистратор (ОперацияБух).
  3. Тщательно проверяйте заполнение всех субконто и обязательно измерение Организация.
  4. Если учет ведется в конфигурации с партионным учетом НДС, не забывайте про регистры накопления.

Использование предложенного подхода позволит вам быстро и корректно привести учет в соответствие с актуальными требованиями, избежав рутинного ручного ввода сотен операций.

← На главную