В типовой конфигурации «Управление торговлей 10.3» (УТ 10.3) стандартный механизм обычно не предполагает скрытого автоматического создания документа Счет-фактура выданный без участия пользователя, если это не предусмотрено специфическими настройками или доработками. Однако на практике программисты часто сталкиваются с ситуацией, когда при нажатии кнопки «ОК» в документе Реализация товаров и услуг счет-фактура формируется «магическим» образом. Разберем подробно, как найти это место в коде и корректно отключить данный функционал, сохранив при этом все необходимые движения по НДС.
Если вы уже проверили форму документа и процедуру ПроверитьЗаполнениеСчетаФактуры(), но документ все равно создается, значит, вызов происходит на уровне сервера или в общих модулях после того, как управление передано от формы к объекту. Проанализируем, какими способами в 1С может быть инициировано создание нового объекта.
Наиболее эффективный метод — это «идти от обратного». Вместо того чтобы искать в огромном коде реализации команду создания, мы поставим ловушку в самом документе Счет-фактура выданный. Рассмотрим этот алгоритм по шагам:
СчетФактураВыданный.ПередЗаписью или ПриУстановкеНовогоНомера.Как только система попытается создать или записать счет-фактуру, работа программы прервется на вашей точке останова. В этот момент нам необходимо открыть окно Стек вызовов (Call Stack). В нем мы увидим всю цепочку процедур: от проведения реализации до момента записи счета-фактуры. Это позволит нам мгновенно вычислить модуль и строку кода, где вызывается СоздатьДокумент() или Записать().
Если по каким-то причинам точка останова не срабатывает (например, документ записывается в фоновом задании, что редкость для УТ 10.3, но возможно), воспользуемся Замером производительности. Этот инструмент фиксирует выполнение каждой строки кода.
Выполним следующие действия:
СчетФактураВыданный или СоздатьДокумент.Проанализируем результаты. Замер покажет нам не только факт создания документа, но и количество времени, затраченное на это, что также поможет локализовать «виновный» блок кода. При масштабной отладке и тестировании копий баз используется программа для автоматического обслуживания и обновления 1С.
В современных (и даже в старых, но обновленных) конфигурациях на платформе 8.3 логика часто выносится за пределы модулей документов в так называемые Подписки на события. Это позволяет разработчикам не менять типовой код самого документа, а «подцепить» свой обработчик к событию проведения.
Разберем, где это искать:
Общие — Подписки на события.РеализацияТоваровУслуг, а в поле Событие — ОбработкаПроведения или ПриЗаписи.
Процедура ПриЗаписиДокументаРегистрацияСчетаФактуры(Источник, Отказ) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Логика автоматического создания
Если НужнаАвтоматическаяСФ(Источник) Тогда
НоваяСФ = Документы.СчетФактураВыданный.СоздатьДокумент();
НоваяСФ.Дата = Источник.Дата;
НоваяСФ.Заполнить(Источник);
НоваяСФ.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
КонецПроцедуры
Если вы обнаружили такой механизм, достаточно закомментировать вызов создания документа или добавить условие, которое будет блокировать это действие. Для контроля корректности учета после подобных вмешательств в код применяется автоматическая сверка проводок между базами 1С.
В УТ 10.3 значительная часть работы с налогами сосредоточена в общих модулях. Проанализируем ситуацию через глобальный поиск (Ctrl+Shift+F). Введем поисковый запрос СчетФактураВыданный.СоздатьДокумент() или Документы.СчетФактураВыданный.СоздатьДокумент().
Особое внимание уделим следующим модулям:
УчетНДСУчетНДСПереопределяемыйРаботаСДиалогами (иногда создание СФ зашито в логику закрытия формы реализации)Часто в коде встречается проверка на наличие уже существующей счета-фактуры. Программа ищет её по регистрам или через КритерииОтбора, и если не находит — создает новую. Выясним причину такого поведения в вашем конкретном случае, изучив условия в найденных процедурах.
Перед тем как радикально менять код, убедимся, что это не стандартная настройка, которую кто-то включил до нас. Проверим следующие места:
Важно: Помните, что полное отключение создания счетов-фактур при сохранении движений по НДС в регистрах может привести к расхождениям в учете. Декларация по НДС в 1С строится на основании записей регистров, но для корректного формирования книги продаж обязателен номер и дата счета-фактуры. Если документ реализации будет делать движения «С НДС», но самого объекта Счет-фактура выданный в базе не будет, вы можете столкнуться с трудностями при сдаче отчетности.
Если ваша задача — просто не распечатывать их сразу или создавать их позже обработкой «Формирование счетов-фактур», то программное отключение автоматического ввода — верный путь. Однако всегда проверяйте, чтобы в регистры накопления (например, НДС Начисленный или НДС Продажи) попадали корректные данные, даже без ссылки на счет-фактуру.