Как создать и провести счет-фактуру на основании непроведенного документа в 1С

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Налоговый учет Торговля и дистрибуция
← На главную

В практике работы с конфигурациями 1С часто возникает ситуация, когда типовая логика системы вступает в противоречие с реальными бизнес-процессами. Одной из таких задач является создание и проведение документа СчетФактураВыданный на основании документа реализации, который по тем или иным причинам не должен быть проведен или не делает движений по бухгалтерским счетам. Разберем подробно, почему в системе установлены такие ограничения, какими техническими методами их можно обойти и как решить задачу правильно с точки зрения методологии налогового учета.

Анализ проблемы: почему 1С блокирует проведение счета-фактуры

Прежде всего, проанализируем внутреннюю логику платформы. Документ Счет-фактура в типовых конфигурациях (таких как «Бухгалтерия предприятия 3.0», «ERP» или «УТ 11») является подчиненным объектом. Его основное назначение — фиксация записи в регистре накопления НДС Продажи. Данные для этой записи (суммы, ставки НДС, контрагент) подтягиваются из документа-основания (например, РеализацияТоваровУслуг).

Если документ-основание не проведен, система считает, что факт отгрузки или оказания услуги не подтвержден в учете. Следовательно, проведение счета-фактуры без проведенного основания может привести к следующим проблемам:

  1. Нарушение целостности данных: В книге продаж появится запись о начисленном налоге, которая не подтверждена оборотами по счету 90.03 (в бухгалтерском учете).
  2. Риски при налоговых проверках: Система АСК НДС-2 при сверке деклараций может выявить разрыв между данными реализации и данными выставленных счетов-фактур.
  3. Отсутствие движений по регистрам: При стандартном проведении счет-фактура может просто не найти данных в регистрах основания и сформировать «пустые» движения.

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

Способ 1: Программная запись с использованием флага ОбменДанными.Загрузка

Проанализируем самый быстрый технический способ решения задачи. Если нам необходимо принудительно установить статус «Проведен» для документа, игнорируя стандартные проверки платформы и модулей объекта, можно воспользоваться свойством ОбменДанными.Загрузка.

Посмотрим на пример кода, который позволяет это реализовать:


// Получаем объект документа счет-фактура
ОбъектСФ = Документы.СчетФактураВыданный.СоздатьДокумент();
// Заполняем необходимые реквизиты и документ-основание
ОбъектСФ.ДокументОснование = СсылкаНаНепроведеннуюРеализацию;
// ... заполнение остальных полей ...

// Устанавливаем признак загрузки, чтобы пропустить процедуры проверки
ОбъектСФ.ОбменДанными.Загрузка = Истина;
ОбъектСФ.Проведен = Истина;

// Записываем документ в режиме записи, а не проведения
ОбъектСФ.Записат(РежимЗаписиДокумента.Запись);

Важный нюанс: Использование этого метода имеет серьезный побочный эффект. При установке флага ОбменДанными.Загрузка = Истина большинство обработчиков событий (таких как ПередЗаписью или ОбработкаПроведения) не выполняются. Это означает, что документ будет числиться проведенным (в списке будет стоять галочка), но он может не создать фактических записей в регистрах НДС Продажи или ЖурналУчетаСчетовФактур. Этот метод подходит только в том случае, если вам нужен «визуальный» документ для печатной формы или если вы планируете заполнять регистры программно вручную.

Способ 2: Использование транзакции для печати (метод Rollback)

Рассмотрим более изощренный сценарий, предложенный опытными разработчиками. Иногда задача стоит не в том, чтобы оставить документ проведенным навсегда, а в том, чтобы просто получить печатную форму счета-фактуры по данным непроведенной реализации.

Выясним, как это реализовать по шагам:

  1. В расширении или обработке создаем процедуру печати.
  2. Открываем транзакцию базы данных.
  3. Программно проводим документ-основание.
  4. Программно создаем и проводим счет-фактуру.
  5. Формируем табличный документ (печатную форму) и выводим его пользователю.
  6. Отменяем транзакцию (выполняем ОтменитьТранзакцию()).

Пример реализации данной логики:


НачатьТранзакцию();
Попытка
    // Проводим реализацию (даже если она не заполнена до конца, 
    // для печати СФ этого может быть достаточно)
    ДокОснованиеОбъект = СсылкаНаРеализацию.ПолучитьОбъект();
    ДокОснованиеОбъект.Записать(РежимЗаписиДокумента.Проведение);
    
    // Создаем и проводим СФ
    НовыйСФ = Документы.СчетФактураВыданный.СоздатьДокумент();
    НовыйСФ.ДокументОснование = ДокОснованиеОбъект.Ссылка;
    НовыйСФ.Заполнить(ДокОснованиеОбъект.Ссылка);
    НовыйСФ.Записать(РежимЗаписиДокумента.Проведение);
    
    // Формируем печатную форму
    ПечатнаяФорма = СформироватьПечатнуюФорму(НовыйСФ.Ссылка);
    
    // Отменяем всё! База вернется в исходное состояние
    ОтменитьТранзакцию();
    
    ПечатнаяФорма.Показать();
Исключение
    ОтменитьТранзакцию();
    Сообщить("Ошибка при формировании временного документа: " + ОписаниеОшибки());
КонецПопытки;

Этот подход позволяет соблюсти все требования системы к проведению, получить корректно заполненную форму, но при этом не оставить «мусора» в информационной базе.

Способ 3: Методологически верное решение для сводных счетов-фактур

Проанализируем ситуацию, описанную пользователями: когда реализации создаются по физическим лицам (розница), а в конце месяца требуется выставить один «сводный» счет-фактуру. В современных конфигурациях 1С (например, Бухгалтерия 3.0) для этого не нужно ломать программный код.

Разберем, как это сделать правильно:

  1. Для отражения розничных продаж без проведения полноценных документов реализации используйте документ Отчет о розничных продажах.
  2. Если реализации все же созданы, но не проведены (например, они нужны только для оперативного учета), воспользуйтесь документом «Сводная справка по розничным продажам».
  3. В этом документе можно выбрать тип «Сводная справка» и указать период. Система сама соберет данные по реализации физическим лицам и создаст одну запись в книге продаж, которая юридически заменяет собой сотни отдельных счетов-фактур. Это полностью соответствует требованиям ст. 168 НК РФ и письмам Минфина.

Способ 4: Документ «Отражение начисления НДС»

Если бизнес-задача требует начислить НДС сейчас, а саму реализацию (выручку) признать позже, проанализируем использование документа Отражение начисления НДС. Это легальный и безопасный способ:

Резюмируем: Несмотря на то, что техническая возможность провести счет-фактуру по непроведенному основанию существует (через ОбменДанными.Загрузка), мы рекомендуем использовать либо транзакционный метод для печати, либо типовые механизмы сводных справок и отражения начислений. Это гарантирует отсутствие ошибок в декларации по НДС и корректную работу всех стандартных отчетов 1С.

← На главную