Как устранить ошибку уникальности в регистре «Состояния ОС организаций» при повторной продаже ОС в 1С:УПП 1.3?

Бухгалтер 1С v8.3 (Обычные формы) Бухгалтерский учет
← На главную

В практической работе бухгалтера и технического специалиста 1С часто возникает ситуация, когда основное средство (ОС) продается, затем сделка отменяется (сторнируется), а через некоторое время ОС требуется продать повторно. В конфигурации «1С:Управление производственным предприятием 1.3» (а также в «1С:Комплексная автоматизация 1.1») при попытке провести повторный документ Передача ОС пользователи регулярно сталкиваются со следующей ошибкой:

«Запись с такими ключевыми полями существует: Состояния ОС организаций: [Наименование Организации], [Наименование ОС]»

Проведение документа блокируется, и программа не позволяет отразить хозяйственную операцию. В данной статье мы подробно разберем, почему возникает эта ошибка, проанализируем архитектуру регистров учета основных средств и рассмотрим пошаговые сценарии корректного исправления ситуации.

---

Выясняем причину: почему возникает конфликт в регистре?

Чтобы понять природу ошибки, проанализируем техническое устройство регистра сведений Состояния ОС организаций. Этот регистр имеет следующие ключевые особенности:

  1. Непериодический характер: Регистр является непериодическим. Это значит, что система не хранит историю изменения состояний во времени в рамках этого конкретного регистра с точки зрения ключевых полей.
  2. Уникальность измерений: Ключевыми измерениями регистра выступают только два поля: Организация и ОсновноеСредство. Такие реквизиты, как Состояние (например, «Принято к учету», «Снято с учета») и Дата состояния, являются ресурсами или реквизитами, но не измерениями.

Из этого устройства следует жесткое платформенное ограничение: для одной конкретной организации и одного конкретного основного средства в базе данных может физически существовать только одна активная запись.

Рассмотрим стандартную хронологию ошибочных действий:

  1. Принятие ОС к учету делает запись в регистр сведений: Организация = «Наша Фирма», ОсновноеСредство = «Станок», Состояние = «Принято к учету».
  2. При первой (ошибочной) продаже документом Передача ОС запись перезаписывается. Теперь состояние меняется на «Снято с учета». Это делает сам документ-регистратор.
  3. Бухгалтер решает сторнировать продажу. Для этого создается документ Корректировка записей регистров (КЗР) или ручная Операция. Пытаясь вернуть ОС на учет, пользователь вручную добавляет в КЗР строчку в регистр Состояния ОС организаций со значением «Принято к учету».
  4. В этот момент КЗР становится новым регистратором для записи по этому ОС.
  5. Когда наступает момент реальной повторной продажи, новый документ Передача ОС пытается записать в регистр состояние «Снято с учета». Но платформа видит, что запись по связке Организация + ОсновноеСредство уже занята и контролируется другим документом (вашим КЗР). Перезаписать «чужие» движения документ Передача ОС не имеет права, поэтому система выдает ошибку уникальности.

---

Вариант решения №1: Корректное использование КЗР (снятие активности движений)

Рассмотрим подробнее правильный алгоритм работы с документом Корректировка записей регистров. Вместо того чтобы вручную добавлять новые «компенсирующие» записи в регистр, нам нужно корректно аннулировать влияние старого документа продажи.

Выполним следующие шаги:

  1. Откроем документ Корректировка записей регистров (или Операция (бухгалтерский и налоговый учет)), которым выполнялось сторнирование первой передачи.
  2. Перейдем на закладку регистра сведений Состояния ОС организаций.
  3. Удалим строку, которую добавляли вручную (где принудительно устанавливали состояние «Принято к учету» или «Введено в эксплуатацию»).
  4. Заполним движения по регистру путем копирования движений из первоначального (сторнируемого) документа Передача ОС, но с одним важным изменением: для строки, где зафиксировано выбытие (состояние «Снято с учета»), снимем флаг «Активность» (установим свойство Активность = Ложь).

Установка флага активности в значение «Ложь» — это наиболее корректный с точки зрения платформы способ сторнирования. Запись физически остается в базе данных для истории, но система ее «не видит». Актуальной для данного ОС автоматически становится предыдущая активная запись, сделанная документом принятия к учету.

Посмотрим на пример того, как это выглядит программно, если бы мы писали внешнюю обработку для автоматического исправления таких записей:


// Пример деактивации записи в регистре сведений
НаборЗаписей = РегистрыСведений.СостоянияОСОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Организация.Установить(ВыбраннаяОрганизация);
НаборЗаписей.Отбор.ОсновноеСредство.Установить(ВыбранноеОС);
НаборЗаписей.Прочитать();

Для Каждого Запись Из НаборЗаписей Цикл
    // Если запись сделана документом КЗР или старой передачей, которую мы сторнируем
    Если Запись.Регистратор = СсылкаНаСторнируемыйДокумент Тогда
        Запись.Активность = Ложь;
    КонецЕсли;
КонецЦикла;

Попытка
    НаборЗаписей.Записать();
    Сообщить("Движения успешно деактивированы.");
Исключение
    ВызватьИсключение "Ошибка записи регистра: " + ОписаниеОшибки();
КонецПопытки;

---

Корректировка сопутствующих регистров

Проанализируем ситуацию шире. ОС не может просто «висеть» в правильном состоянии. Чтобы по нему корректно начислялась амортизация до момента повторной продажи, в этом же документе КЗР необходимо деактивировать движения по другим важным регистрам:

После проведения скорректированного КЗР откроем новую Передачу ОС и проведем ее. Документ проведется без ошибок, так как система увидит, что ОС числится на учете как активное, а старая блокирующая запись деактивирована.

---

Вариант решения №2: Использование штатного документа «Изменение состояния ОС»

Если ручные корректировки в КЗР вызывают сложности или вы боитесь нарушить целостность данных в регистрах, воспользуемся стандартным механизмом конфигурации. Разберем этот способ по шагам:

  1. Не вносите ручные записи по регистру состояний в КЗР. Оставьте КЗР только для корректировки бухгалтерских и налоговых проводок (счетов учета).
  2. Создайте штатный документ «Изменение состояния ОС». Дату документа установите равной дате сторнирования (конец года).
  3. В табличную часть добавьте наше основное средство.
  4. Установите флаги:
    • «Влияет на начисление амортизации» — установите в положение «Да».
    • «Начислять амортизацию» — установите флаг (Истина).
  5. В поле «Состояние» выберите предопределенное значение Принято к учету.
  6. Проведите документ.

Этот документ разработан методистами 1С специально для корректного изменения состояний в рамках штатной логики. Он автоматически разрешит конфликт уникальности записей в регистре Состояния ОС организаций, корректно перезаписав ресурс состояния, и при этом у вас не возникнет проблем при последующей реализации актива.

---

Резюме и рекомендации

Мы выяснили, что основная ошибка пользователей — попытка «сражаться» с непериодическим регистром сведений путем добавления новых записей поверх существующих. Для успешной работы в 1С:УПП 1.3 придерживайтесь следующих правил:

← На главную