В практической работе бухгалтера и технического специалиста 1С часто возникает ситуация, когда основное средство (ОС) продается, затем сделка отменяется (сторнируется), а через некоторое время ОС требуется продать повторно. В конфигурации «1С:Управление производственным предприятием 1.3» (а также в «1С:Комплексная автоматизация 1.1») при попытке провести повторный документ Передача ОС пользователи регулярно сталкиваются со следующей ошибкой:
«Запись с такими ключевыми полями существует: Состояния ОС организаций: [Наименование Организации], [Наименование ОС]»
Проведение документа блокируется, и программа не позволяет отразить хозяйственную операцию. В данной статье мы подробно разберем, почему возникает эта ошибка, проанализируем архитектуру регистров учета основных средств и рассмотрим пошаговые сценарии корректного исправления ситуации.
---
Чтобы понять природу ошибки, проанализируем техническое устройство регистра сведений Состояния ОС организаций. Этот регистр имеет следующие ключевые особенности:
Организация и ОсновноеСредство. Такие реквизиты, как Состояние (например, «Принято к учету», «Снято с учета») и Дата состояния, являются ресурсами или реквизитами, но не измерениями.Из этого устройства следует жесткое платформенное ограничение: для одной конкретной организации и одного конкретного основного средства в базе данных может физически существовать только одна активная запись.
Рассмотрим стандартную хронологию ошибочных действий:
Организация = «Наша Фирма», ОсновноеСредство = «Станок», Состояние = «Принято к учету».Передача ОС запись перезаписывается. Теперь состояние меняется на «Снято с учета». Это делает сам документ-регистратор.Корректировка записей регистров (КЗР) или ручная Операция. Пытаясь вернуть ОС на учет, пользователь вручную добавляет в КЗР строчку в регистр Состояния ОС организаций со значением «Принято к учету».Передача ОС пытается записать в регистр состояние «Снято с учета». Но платформа видит, что запись по связке Организация + ОсновноеСредство уже занята и контролируется другим документом (вашим КЗР). Перезаписать «чужие» движения документ Передача ОС не имеет права, поэтому система выдает ошибку уникальности.---
Рассмотрим подробнее правильный алгоритм работы с документом Корректировка записей регистров. Вместо того чтобы вручную добавлять новые «компенсирующие» записи в регистр, нам нужно корректно аннулировать влияние старого документа продажи.
Выполним следующие шаги:
Корректировка записей регистров (или Операция (бухгалтерский и налоговый учет)), которым выполнялось сторнирование первой передачи.Состояния ОС организаций.Передача ОС, но с одним важным изменением: для строки, где зафиксировано выбытие (состояние «Снято с учета»), снимем флаг «Активность» (установим свойство Активность = Ложь).Установка флага активности в значение «Ложь» — это наиболее корректный с точки зрения платформы способ сторнирования. Запись физически остается в базе данных для истории, но система ее «не видит». Актуальной для данного ОС автоматически становится предыдущая активная запись, сделанная документом принятия к учету.
Посмотрим на пример того, как это выглядит программно, если бы мы писали внешнюю обработку для автоматического исправления таких записей:
// Пример деактивации записи в регистре сведений
НаборЗаписей = РегистрыСведений.СостоянияОСОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Организация.Установить(ВыбраннаяОрганизация);
НаборЗаписей.Отбор.ОсновноеСредство.Установить(ВыбранноеОС);
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// Если запись сделана документом КЗР или старой передачей, которую мы сторнируем
Если Запись.Регистратор = СсылкаНаСторнируемыйДокумент Тогда
Запись.Активность = Ложь;
КонецЕсли;
КонецЦикла;
Попытка
НаборЗаписей.Записать();
Сообщить("Движения успешно деактивированы.");
Исключение
ВызватьИсключение "Ошибка записи регистра: " + ОписаниеОшибки();
КонецПопытки;
---
Проанализируем ситуацию шире. ОС не может просто «висеть» в правильном состоянии. Чтобы по нему корректно начислялась амортизация до момента повторной продажи, в этом же документе КЗР необходимо деактивировать движения по другим важным регистрам:
Начислять амортизацию был установлен в значение Нет).После проведения скорректированного КЗР откроем новую Передачу ОС и проведем ее. Документ проведется без ошибок, так как система увидит, что ОС числится на учете как активное, а старая блокирующая запись деактивирована.
---
Если ручные корректировки в КЗР вызывают сложности или вы боитесь нарушить целостность данных в регистрах, воспользуемся стандартным механизмом конфигурации. Разберем этот способ по шагам:
Принято к учету.Этот документ разработан методистами 1С специально для корректного изменения состояний в рамках штатной логики. Он автоматически разрешит конфликт уникальности записей в регистре Состояния ОС организаций, корректно перезаписав ресурс состояния, и при этом у вас не возникнет проблем при последующей реализации актива.
---
Мы выяснили, что основная ошибка пользователей — попытка «сражаться» с непериодическим регистром сведений путем добавления новых записей поверх существующих. Для успешной работы в 1С:УПП 1.3 придерживайтесь следующих правил:
Состояния ОС организаций.Активность = Ложь) вместо добавления новых записей-дублей.Изменение состояния ОС для штатного восстановления процессов начисления амортизации.