Свертка информационной базы в программе «1С:Бухгалтерия 3.0» — это стандартная, но в то же время достаточно трудоемкая процедура. Часто после корректного завершения работы встроенного помощника «Свертка информационной базы» пользователи обнаруживают, что старые документы Счет-фактура выданный и Счет-фактура полученный за свернутый период не помечаются на удаление. Они остаются в базе даже в том случае, если в настройках обработки было вручную указано сворачивать все связанные с НДС регистры.
В этой статье мы подробно проанализируем логику разработчиков фирмы «1С», выясним, почему так происходит, разберем возможные негативные последствия принудительного удаления документов и рассмотрим безопасные практические пути решения этой проблемы.
Для того чтобы понять логику программы, нам необходимо обратиться к архитектуре учета НДС в системе «1С:Предприятие 8». В отличие от старых версий платформы (например, «1С:Предприятие 7.7»), где учет строился преимущественно на бухгалтерских проводках, в современных конфигурациях ключевую роль играют регистры накопления и регистры сведений. Исключение счетов-фактур из алгоритма автоматического удаления обусловлено следующими факторами:
Операция (бухгалтерский и налоговый учет). На счетах учета НДС (например, 19 «НДС по приобретенным ценностям», 76.АВ «НДС по авансам и предоплатам», 76.ВА) субконто «Документы расчетов» является обязательным. В качестве этого субконто система использует исходные первичные документы, в том числе и счета-фактуры.ЖурналУчетаСчетовФактур, а также с регистрами накопления НДС Покупки и НДС Продажи. Если эти регистры не очищены полностью или содержат незавершенные движения, удаление связанных документов будет заблокировано системой контроля ссылочной целостности.Иногда у администраторов баз данных возникает соблазн обойти стандартные механизмы контроля платформы и удалить помеченные (или даже непомеченные) счета-фактуры с помощью сторонних обработок непосредственного удаления. Проанализируем, к какому негативу это приведет:
<Объект не найден> с уникальным идентификатором (GUID) удаленного документа.Если перед вами стоит задача максимально облегчить базу данных и избавиться от документов прошлых лет, рассмотрим безопасные и проверенные методы.
Прежде чем приступать к удалению счетов-фактур, необходимо убедиться, что на них не ссылаются записи специализированных регистров. Выполним следующие действия:
Журнал учета счетов-фактур и регистры накопления по НДС.Если документы свертки остатков уже сформированы и ссылаются на старые счета-фактуры, мы можем разорвать связь между счетами-фактурами и документами-основаниями поступления или реализации. Разберем этот процесс по шагам:
Счет-фактура выданный (или Счет-фактура полученный).Документ-основание (или аналогичные реквизиты связи) и установим для него пустое значение.После очистки этого реквизита связь между счетом-фактурой и первичным документом («Поступление», «Реализация») разорвется. Теперь документы поступления и реализации можно безболезненно пометить на удаление и стереть из базы через стандартный инструмент «Удаление помеченных объектов».
Для автоматизации процесса очистки связей у документов свернутого периода программисты могут использовать внешнюю обработку. Напишем и разберем пример кода, который программно очищает ссылки на документы-основания у старых полученных счетов-фактур:
Выборка = Документы.СчетФактураПолученный.Выбрать(ДатаНачалаСвертки, ДатаОкончанияСвертки);
Пока Выборка.Следующий() Цикл
// Получаем объект для редактирования
ДокументОбъект = Выборка.ПолучитьОбъект();
// Блокируем проведение и очищаем основание
Если ДокументОбъект.Проведен Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЕсли;
// Очищаем реквизит связи
ДокументОбъект.ДокументОснование = Неопределено;
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
КонтекстСообщения = СтрШаблон("Документ %1 успешно обработан.", ДокументОбъект.Ссылка);
Сообщить(КонтекстСообщения);
Исключение
Предупреждение = СтрШаблон("Не удалось записать документ %1. Ошибка: %2", ДокументОбъект.Ссылка, ОписаниеОшибки());
Сообщить(Предупреждение);
КонецПопытки;
КонецЦикла;
Данный код последовательно обходит документы за указанный период, распроводит их (так как проведенный документ не позволит очистить ключевые реквизиты аналитики без нарушения движений) и обнуляет ссылку на документ-основание. После работы скрипта удаление первичных документов пройдет без предупреждений о наличии связей со счетами-фактурами.
Как показывает практика практикующих специалистов, классическая свертка базы в «1С:Бухгалтерии 3.0» далеко не всегда приводит к желаемому уменьшению физического размера базы (размер файла 1Cv8.1CD или таблиц на SQL-сервере может уменьшиться всего на 10–15%). Это связано с особенностями хранения данных СУБД и накопленным «информационным мусором».
Если ваша ключевая цель — радикальное уменьшение объема информационной базы и ускорение ее работы, наиболее эффективным решением будет создание абсолютно новой, «чистой» базы данных и последующий перенос остатков:
Этот метод гарантирует, что в новую рабочую базу не перекочуют старые незакрытые регистры НДС, дублирующиеся элементы справочников и «зависшие» счета-фактуры прошлых лет, история по которым уже закрыта.
Мы проанализировали особенности работы механизма свертки в «1С:Бухгалтерии 3.0» и выяснили, что сохранение счетов-фактур — это не ошибка программы, а заложенная разработчиками защита от разрушения налоговой отчетности по НДС. Прежде чем предпринимать радикальные шаги по удалению документов, всегда делайте резервную копию базы данных и тщательно проверяйте корректность формирования Книги покупок и Книги продаж после любых ручных или программных корректировок.