В практике бухгалтера и программиста 1С часто возникает ситуация, когда основное средство (ОС) было принято к учету ошибочно или с неверными параметрами в периоде, который уже закрыт для редактирования и сдачи отчетности. Простое удаление или пометка на удаление документа Принятие к учету ОС в таком случае невозможно. Попытки использовать стандартный документ Корректировка записей регистров часто приводят к ошибке: "Запись с такими ключевыми полями существует" при попытке повторного принятия этого же объекта к учету.
В данной статье мы подробно разберем, почему возникает эта ошибка, как программно очистить "зависшие" записи в регистрах и какие методические приемы помогут исправить учет без открытия периода.
Проанализируем механику работы системы. Документ Принятие к учету ОС делает записи не только в регистр бухгалтерии (проводки), но и в множество регистров сведений (РС). Некоторые из этих регистров являются непериодическими. Это означает, что для одного и того же основного средства в таком регистре может существовать только одна запись, привязанная к конкретному регистратору.
Когда мы создаем Корректировку записей регистров со знаком "минус", система сторнирует количественные и суммовые показатели в регистрах накопления. Однако в непериодических регистрах сведений (таких как Номенклатура основных средств) сторнирование через "минус" логически невозможно — запись там либо есть, либо ее нет. Если корректировка просто дублирует запись, возникает конфликт ключей. Если же корректировка не затрагивает регистр, то при попытке создать новый документ Принятие к учету ОС система видит, что запись по этому объекту уже существует, и блокирует проведение.
Выясним причину: чтобы "освободить" основное средство для нового принятия к учету, нам нужно физически удалить записи старого (ошибочного) документа из определенных регистров сведений. Рассмотрим, как это сделать с помощью небольшого программного кода. Это решение особенно актуально для "начинающих программистов", так как оно использует стандартный механизм наборов записей.
Рассмотрим пример кода, который позволяет очистить записи в конкретном регистре по заданному регистратору:
// Создаем набор записей для конкретного регистра
НаборЗаписей = РегистрыСведений.НоменклатураОсновныхСредств.СоздатьНаборЗаписей();
// Устанавливаем фильтр по ошибочному документу (регистратору)
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаОшибочныйДокумент);
// Записываем пустой набор, тем самым удаляя старые записи
НаборЗаписей.Записать();
Посмотрим на более развернутый пример. Если нам нужно очистить сразу несколько критически важных регистров, можно воспользоваться циклом или последовательным обращением к ним. Важно передавать в отбор именно Ссылку на документ, а не его номер, чтобы избежать случайного удаления данных по документам с похожими номерами из других периодов.
Пример обработки для нескольких регистров (используем названия регистров, характерные для многих типовых конфигураций):
Процедура ОчиститьРегистрыОС(ОшибочныйДокумент)
// Список регистров, которые нужно очистить
МассивРегистров = Новый Массив;
МассивРегистров.Добавить("НоменклатураОсновныхСредств");
МассивРегистров.Добавить("СостоянияОС");
МассивРегистров.Добавить("СостоянияОСОрганизаций");
МассивРегистров.Добавить("ПараметрыАмортизацииОСБухгалтерскийУчет");
МассивРегистров.Добавить("ПервоначальныеСведенияОСБухгалтерскийУчет");
Для Каждого ИмяРегистра Из МассивРегистров Цикл
Набор = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(ОшибочныйДокумент);
Набор.Записать();
Сообщить("Регистр " + ИмяРегистра + " очищен успешно.");
КонецЦикла;
КонецПроцедуры
Разберем ситуацию, когда написать код нет возможности. В типовых конфигурациях 1С (например, БП 3.0) есть мощный инструмент — обработка Групповое изменение реквизитов. С ее помощью также можно попытаться воздействовать на регистры.
Номенклатура основных средств).Регистратор Равно [Ваш ошибочный документ].Внимание: Будьте предельно осторожны при использовании этого метода. Ошибка в отборе может привести к потере данных по всему регистру. Чтобы обезопасить систему, стоит автоматически заархивировать базы 1С перед техническим обслуживанием или внесением массовых изменений.
Проанализируем ситуацию из сообщения 17: основное средство было принято верно по стоимости, но неверно указан порядок включения стоимости в состав расходов в налоговом учете (НУ). Вместо амортизации нужно было единовременное списание. Для контроля правильности отражения таких операций можно автоматически сверить бухгалтерские и налоговые проводки между двумя базами 1С.
В этом случае, помимо сторнирования проводок по счету 02 (амортизация), нам нужно изменить состояние объекта. Если мы не хотим полностью "удалять" принятие к учету, можно пойти по следующему пути:
Изменение состояния ОС, чтобы прекратить начисление амортизации с нужного месяца.Операцию, введенную вручную для корректировки налоговых счетов (например, КВ или затратных счетов НУ) в корреспонденции со счетом 91 или 84.Дт 20 (26, 44) Кт 02 со знаком минус в текущем периоде.При выполнении корректировок по ОС, убедитесь, что вы проверили следующие регистры. Оставшиеся в них записи — самая частая причина ошибок при "повторном" вводе ОС в эксплуатацию:
Рассмотрим альтернативный способ. Если программное удаление записей кажется слишком рискованным, некоторые методологи рекомендуют сделать обратную проводку Дт 08.04 Кт 01.01 текущим периодом (через Операцию) и вручную создать записи в регистрах сведений, меняющие статус объекта на "Снят с учета" или "К передаче".
Однако для того, чтобы заново провести документ Принятие к учету ОС в июне (как хотел автор темы), наиболее чистым решением остается именно полная очистка движений мартовского документа по всем регистрам сведений через программный набор записей. После этого старый документ останется в системе как "пустая оболочка" (без движений), что не нарушит последовательность номеров и не потребует открытия периода, а новый документ июня сможет создать актуальные записи без конфликтов.
Таким образом, мы выяснили, что ключ к решению проблемы лежит в понимании структуры непериодических регистров. Используя предложенный программный код или аккуратную ручную корректировку, вы сможете эффективно исправлять ошибки в учете основных средств даже в самых сложных случаях.