При сопровождении и обновлении типовых и отраслевых конфигураций 1С (например, 1С:Бухгалтерия предприятия 2.0 или 1С:Общепит) можно столкнуться с ситуацией, когда при попытке открыть ранее созданный документ «Операция (бухгалтерский и налоговый учет)» или «Корректировка записей регистров» система выдает критическую ошибку. При детальном анализе выясняется, что документ ссылается на регистр накопления (например, НДС по ОС и НМА), который полностью отсутствует в дереве метаданных конфигурации.
Разберем подробно, почему возникает такая ошибка, по какой причине разработчики типовых решений удаляют определенные регистры учета НДС и какими способами можно восстановить работоспособность документов.
Для понимания корня проблемы проанализируем внутреннее устройство документов ручной корректировки движений в платформе 1С:Предприятие:
ОперацияБух и КорректировкаЗаписейРегистров перечень задействованных регистров хранится в специальных табличных частях (например, ТаблицаРегистровНакопления, ТаблицаРегистровСведений). Имена регистров записываются в реквизит с примитивным типом Строка, а не ссылочным типом метаданных.Метаданные.РегистрыНакопления[ИмяРегистра] или к коллекции движений Движения[ИмяРегистра]. Если регистра с таким именем в дереве метаданных больше нет, платформа выбрасывает исключение «Поле объекта не обнаружено», блокируя открытие формы.Выясним причину, по которой регистр накопления НДС по ОС и НМА был исключен из типовых конфигураций. Согласно изменениям в налоговом учете и разъяснениям Минфина РФ, право на вычет НДС по приобретенным основным средствам возникает непосредственно после принятия их на учет на счет 08 (до ввода в эксплуатацию на счет 01). Прежний механизм блокировки вычета через отдельный регистр потерял актуальность. Блокировка вычета по нематериальным активам при этом контролируется на основании регистра Состояния НМА. Соответственно, регистр НДС по ОС и НМА и хранившиеся в нем остатки стали не нужны для расчета налога.
Рассмотрим основной способ исправления ошибки без изменения структуры конфигурации. Для этого программно откроем документ в режиме непосредственной записи и удалим строку с несуществующим регистром из табличной части.
Посмотрим на пример программного кода для внешней обработки:
ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
// Получаем табличную часть с составом регистров накопления
СтрокиДляУдаления = Новый Массив;
Для Каждого Стр Из ДокументОбъект.ТаблицаРегистровНакопления Цикл
// Проверяем наличие регистра в текущих метаданных
Если Метаданные.РегистрыНакопления.Найти(Стр.Имя) = Неопределено Тогда
СтрокиДляУдаления.Добавить(Стр);
КонецЕсли;
КонецЦикла;
// Удаляем устаревшие записи
Для Каждого Стр Из СтрокиДляУдаления Цикл
ДокументОбъект.ТаблицаРегистровНакопления.Удалить(Стр);
КонецЦикла;
// Записываем документ без повторных проверок
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
После выполнения данного скрипта документ ОперацияБух будет успешно открываться в пользовательском режиме.
Если ручных операций в информационной базе много, рекомендуется выполнить пакетную обработку всех документов ОперацияБух и КорректировкаЗаписейРегистров.
Разберем по шагам алгоритм массового исправления:
ТаблицаРегистровНакопления, ТаблицаРегистровСведений и ТаблицаРегистровБухгалтерии документов.Найти() соответствующих коллекций объекта Метаданные определяем, какие регистры больше не существуют в конфигурации.ОбменДанными.Загрузка = Истина.Если база снята с поддержки и допускает внесение изменений, но нет возможности написать обработку, применим обходной путь:
НДС_по_ОС_и_НМА или НДСПоОСиНМА).ОперацияБух, заходим в настройку состава регистров и снимаем флажок с созданного регистра.Проанализируем последствия удаления корректировок для регламентированного учета НДС:
НДС предъявленный либо отразить типовым документом Отражение НДС к вычету.Формирование записей книги покупок за соответствующий период, чтобы убедиться в отсутствии расхождений между данными учета НДС и счетами бухгалтерского учета (19.01, 68.02).