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