В практике работы с конфигурацией «1С:Управление производственным предприятием» (УПП) разработчики и бухгалтеры часто сталкиваются с необходимостью корректировки или полной свёртки остатков по счету 19.07 «НДС по товарам, реализованным по ставке 0% (экспорт)». Необходимость в этом возникает из-за изменений в налоговом законодательстве (в частности, отмены обязательного откладывания вычета НДС для несырьевого экспорта согласно Федеральному закону № 150-ФЗ), либо при реорганизации учета.
В этой статье мы подробно разберем, как решить задачу по свёртке оборотов и списанию остатков по счету 19.07. Мы проанализируем типичные технические ошибки, которые совершают программисты при написании собственных обработок, выясним, почему нельзя ограничиваться только проводками в бухгалтерском учете, и рассмотрим два правильных варианта реализации задачи: через типовые механизмы и с помощью программного кода.
Перед тем как приступать к технической реализации и массовому списанию остатков, необходимо понимать методологию учета. Изменение законодательства, отменяющее необходимость откладывать НДС по экспорту до момента подтверждения ставки 0%, распространяется исключительно на несырьевые товары.
Если ваше предприятие экспортирует сырьевые товары (например, металлы, древесину, нефтепродукты), то по ним прежний порядок учета полностью сохранился. Это означает, что НДС по таким операциям должен по-прежнему аккумулироваться на счете 19.07 и списываться только после подтверждения экспорта или по истечении 180 дней. Перед запуском обработки обязательно проконсультируйтесь с главным бухгалтером, чтобы исключить риск неправомерного списания НДС по сырьевым позициям.
Рассмотрим типичный код, который часто пытаются использовать начинающие разработчики (подобный пример приводился в сообщении №11 на форуме):
// Ошибочный подход: попытка сделать движения только по регистру бухгалтерии
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйОстатки.Организация,
| ХозрасчетныйОстатки.Счет КАК Счет,
| ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
| ХозрасчетныйОстатки.Субконто2 КАК Договор,
| ХозрасчетныйОстатки.Субконто3 КАК ДокументОснование,
| ХозрасчетныйОстатки.СуммаОстатокДт КАК СуммаОстатокДт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет19, , ) КАК ХозрасчетныйОстатки";
Запрос.УстановитьПараметр("Период", Новый Граница(ДатаКон, ВидГраницы.Включая));
Запрос.УстановитьПараметр("Счет19", СсылкаНаСчет19_07);
В чем кроется критическая ошибка такого подхода?
Если мы напишем обработку, которая просто выберет эти остатки и сформирует бухгалтерскую проводку вида Дт 91.02 - Кт 19.07 (или схлопнет дебет с кредитом), то мы решим задачу лишь визуально — на уровне оборотно-сальдовой ведомости (ОСВ). Однако подсистема учета НДС в 1С:УПП устроена гораздо сложнее.
Вся налоговая отчетность, Книга покупок, Книга продаж и декларация по НДС в УПП строятся не по бухгалтерским проводкам, а по специализированным регистрам накопления. Счет 19.07 неразрывно связан со следующими регистрами:
НДС предъявленныйНДС по приобретенным ценностямНДС реализация 0%Если вы спишете сумму только по регистру бухгалтерии Хозрасчетный, то в регистрах накопления НДС эти суммы останутся «висеть» мертвым грузом. В результате:
Рассмотрим, как решить эту задачу правильно и безболезненно для системы.
Самый безопасный и методологически верный способ — использовать существующий в конфигурации УПП типовой документ ДокументСсылка.СписаниеНДС. Этот документ спроектирован разработчиками 1С именно для того, чтобы корректно списывать суммы НДС на расходы предприятия как в бухгалтерском учете, так и во всех связанных регистрах накопления.
Вместо того чтобы вручную формировать движения по регистрам, мы напишем обработку, которая соберет остатки по счету 19.07 и на их основе автоматически создаст, заполнит и проведет документы «Списание НДС».
Разберем по шагам алгоритм создания такой обработки:
// Шаг 1. Выбираем остатки НДС с учетом аналитики регистров накопления
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НДСПредъявленныйОстатки.Организация КАК Организация,
| НДСПредъявленныйОстатки.Поставщик КАК Поставщик,
| НДСПредъявленныйОстатки.СчетФактура КАК СчетФактура,
| НДСПредъявленныйОстатки.ВидЦенности КАК ВидЦенности,
| НДСПредъявленныйОстатки.СтавкаНДС КАК СтавкаНДС,
| НДСПредъявленныйОстатки.СуммаБезНДСОстаток КАК СуммаБезНДС,
| НДСПредъявленныйОстатки.НДСОстаток КАК НДС
|ИЗ
| РегистрНакопления.НДСПредъявленный.Остатки(&Период, СчетУчета = &Счет19) КАК НДСПредъявленныйОстатки";
Запрос.УстановитьПараметр("Период", Новый Граница(РабочаяДата, ВидГраницы.Включая));
Запрос.УстановитьПараметр("Счет19", ПланыСчетов.Хозрасчетный.НДС_Экспорт); // Ссылка на 19.07
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
// Для демонстрации создадим один документ на всю организацию.
// В реальной практике лучше группировать документы по Организациям.
НовыйДок = Документы.СписаниеНДС.СоздатьДокумент();
НовыйДок.Дата = РабочаяДата;
НовыйДок.Организация = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ГлЗначениеПеременной("ГлТекущийПользователь"), "ОсновнаяОрганизация");
НовыйДок.СтатьяРасходов = СсылкаНаНужнуюСтатьюПрочихРасходов; // Обычно 91.02 (Прочие расходы)
НовыйДок.ОтразитьВУчете = Истина;
НовыйDoc.ОтразитьВНалоговомУчете = Истина;
Пока Выборка.Следующий() Цикл
// Заполняем табличную часть документа "Состав НДС"
НоваяСтрока = НовыйДок.НДС.Добавить();
НоваяСтрока.Поставщик = Выборка.Поставщик;
НоваяСтрока.СчетФактура = Выборка.СчетФактура;
НоваяСтрока.ВидЦенности = Выборка.ВидЦенности;
НоваяСтрока.СтавкаНДС = Выборка.СтавкаНДС;
НоваяСтрока.СуммаБезНДС = Выборка.СуммаБезНДС;
НоваяСтрока.НДС = Выборка.НДС;
НоваяСтрока.СчетУчетаНДС = ПланыСчетов.Хозрасчетный.НДС_Экспорт;
КонецЦикла;
Попытка
НовыйДок.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Документ " + НовыйДок + " успешно создан и проведен!");
Исключение
Сообщить("Ошибка при проведении документа: " + ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;
КонецЕсли;
Использование этого метода гарантирует, что система сама сформирует все необходимые проводки:
Дт 91.02 (или иной выбранный счет затрат) - Кт 19.07 в бухгалтерском и налоговом учете.НДС предъявленный, что полностью очистит остатки по регистру.НДС по приобретенным ценностям.Если ваша конфигурация сильно кастомизирована (нетиповая база на основе старых релизов УПП 1.1 / 1.2), и типовой документ «Списание НДС» по какой-то причине отсутствует или работает некорректно, вам придется написать обработку прямого заполнения движений.
В качестве регистратора мы рекомендуем использовать типовой документ КорректировкаЗаписейРегистров. Рассмотрим пошагово, как реализовать этот алгоритм программно, чтобы не нарушить целостность данных.
Проанализируем пример правильного заполнения движений регистра бухгалтерии и регистра накопления одновременно:
// Создаем документ корректировки
Корректировка = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
Корректировка.Дата = РабочаяДата;
Корректировка.Организация = ВыбраннаяОрганизация;
Корректировка.Комментарий = "Системная свертка и списание остатков по счету 19.07";
Корректировка.Записать(РежимЗаписиДокумента.Запись);
// 1. Настройка таблицы регистров, которые будем корректировать
ТаблицаРегистров = Корректировка.ТаблицаРегистровНакопления;
НоваяСтрокаРегистра = ТаблицаРегистров.Добавить();
НоваяСтрокаРегистра.Имя = "НДСПредъявленный";
// Получаем коллекции движений документа
ДвиженияБУ = Корректировка.Движения.Хозрасчетный;
ДвиженияНДС = Корректировка.Движения.НДСПредъявленный;
// 2. Запрос для получения детальных остатков
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйОстатки.Организация КАК Организация,
| ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
| ХозрасчетныйОстатки.Субконто2 КАК Договор,
| ХозрасчетныйОстатки.Субконто3 КАК ДокументОснование,
| ЕСТЬNULL(НДСПредъявленныйОстатки.ВидЦенности, ЗНАЧЕНИЕ(Перечисление.ВидыЦенностей.Товары)) КАК ВидЦенности,
| ЕСТЬNULL(НДСПредъявленныйОстатки.СтавкаНДС, ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС18)) КАК СтавкаНДС,
| ХозрасчетныйОстатки.СуммаОстатокДт КАК СуммаОстатка
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет19, , ) КАК ХозрасчетныйОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НДСПредъявленный.Остатки(&Период, СчетУчета = &Счет19) КАК НДСПредъявленныйОстатки
| ПО ХозрасчетныйОстатки.Организация = НДСПредъявленныйОстатки.Организация
| И ХозрасчетныйОстатки.Субконто1 = НДСПредъявленныйОстатки.Поставщик
| И ХозрасчетныйОстатки.Субконто3 = НДСПредъявленныйОстатки.СчетФактура";
Запрос.УстановитьПараметр("Период", Новый Граница(ДатаКон, ВидГраницы.Включая));
Запрос.УстановитьПараметр("Счет19", ПланыСчетов.Хозрасчетный.НДС_Экспорт);
Выборка = Запрос.Выполнить.Выбрать();
Пока Выборка.Следующий() Цикл
// Проверяем, что сумма остатка не нулевая
Если Выборка.СуммаОстатка = 0 Тогда
Продолжить;
КонецЕсли;
// --- ФОРМИРУЕМ ПРОВОДКУ БУХГАЛТЕРСКОГО УЧЕТА ---
Проводка = ДвиженияБУ.Добавить();
Проводка.Период = РабочаяДата;
Проводка.Организация = Выборка.Организация;
Проводка.Активность = Истина;
// Дебет: списываем на прочие расходы (91.02)
Проводка.СчетДт = ПланыСчетов.Хозрасчетный.ПрочиеРасходы;
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, "ПрочиеДоходыИРасходы", СсылкаНаСтатьюСписания);
// Кредит: очищаем 19.07 с обязательным заполнением всей аналитики (субконто)
Проводка.СчетКт = ПланыСчетов.Хозрасчетный.НДС_Экспорт;
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт, "Контрагенты", Выборка.Контрагент);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.SubkontoKt, "Договоры", Выборка.Договор);
БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт, "ДокументыРасчетовСКонтрагентами", Выборка.ДокументОснование);
Проводка.Сумма = Выборка.СуммаОстатка;
// --- ФОРМИРУЕМ ДВИЖЕНИЕ ПО РЕГИСТРУ НАКОПЛЕНИЯ "НДС предъявленный" ---
ДвижениеНДС = ДвиженияНДС.Добавить();
ДвижениеНДС.ВидДвижения = ВидДвиженияНакопления.Расход; // Расходуем (закрываем) остаток
ДвижениеНДС.Период = РабочаяДата;
ДвижениеНДС.Организация = Выборка.Организация;
ДвижениеНДС.Поставщик = Выборка.Контрагент;
ДвижениеНДС.СчетФактура = Выборка.ДокументОснование;
ДвижениеНДС.ВидЦенности = Выборка.ВидЦенности;
ДвижениеНДС.СтавкаНДС = Выборка.СтавкаНДС;
ДвижениеНДС.СчетУчетаНДС = ПланыСчетов.Хозрасчетный.НДС_Экспорт;
ДвижениеНДС.НДС = Выборка.СуммаОстатка;
ДвижениеНДС.СуммаБезНДС = Выборка.СуммаОстатка * 5.55; // Примерный расчет базы, либо точные данные из регистра
КонецЦикла;
// Записываем сформированные движения в базу данных
ДвиженияБУ.Записать();
ДвиженияНДС.Записать();
Обратите внимание на то, как в коде заполняются субконто кредита для счета 19.07. Нельзя оставлять субконто пустыми! Если списать сумму общей проводкой без указания конкретного Контрагента, Договора и Счета-фактуры, то в бухгалтерском учете на счете 19.07 возникнет пересортица («краснота» по субконто при нулевом общем итоге), которую будет крайне сложно вычистить в дальнейшем.
Подведем итог. Чтобы успешно и без ошибок свернуть или списать счет 19.07 в 1С:УПП, придерживайтесь следующего алгоритма совместной работы разработчика и бухгалтера:
НДС предъявленный.