Как списать ТМЦ из эксплуатации в 1С:ERP 2.5, если инвентарный номер не был указан ранее

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет
← На главную

При переходе с редакции 1С:ERP 2.4 на 2.5 многие пользователи и технические специалисты сталкиваются с неприятной ситуацией: документы Списание из эксплуатации, созданные для позиций, переданных в использование несколько лет назад, перестают проводиться. Система выдает ошибку, требуя заполнения поля Инвентарный номер, хотя на момент передачи ТМЦ (например, в 2019 году) это поле было необязательным или вовсе отсутствовало в логике учета. Разберем детально, почему так происходит и какие существуют пути решения данной проблемы.

Выясним причину технического сбоя

Для начала проанализируем ситуацию с точки зрения архитектуры данных. В редакции 2.4 учет ТМЦ в эксплуатации зачастую велся на оборотном регистре накопления ТМЦВЭксплуатации. В этом регистре измерение ИнвентарныйНомер не всегда было ключевым или обязательным для формирования остатков. Однако в редакции 2.5 методология учета существенно изменилась. Теперь этот регистр стал остаточным, а Инвентарный номер — обязательным измерением (дименсией), по которому система контролирует наличие остатков на складах эксплуатации.

При обновлении конфигурации данные переносятся в новую структуру. Если старые записи в эксплуатации не имели инвентарных номеров, в регистре 2.5 они «зависают» с пустым значением измерения. Однако логика документа Списание из эксплуатации в 2.5 жестко настроена на проверку заполнения этого реквизита в табличной части, что создает блокировку: в регистре остаток есть (на пустой ссылке), а документ не дает выбрать «пустоту» или провести строку без номера.

Способ 1. Использование документа Корректировка регистров

Это наиболее корректный метод с точки зрения сохранения целостности типовой конфигурации. Рассмотрим алгоритм действий по шагам:

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

Способ 2. Групповое создание и привязка инвентарных номеров

Если позиций без номеров слишком много, корректировка вручную займет вечность. Проанализируем возможность автоматизации. В системе 1С:ERP существует стандартная обработка по генерации инвентарных номеров. Мы можем воспользоваться ею или написать небольшой скрипт (внешнюю обработку), который:

Пример фрагмента кода для программного создания инвентарного номера:


НовыйНомер = Справочники.ИнвентарныеНомераТМЦ.СоздатьЭлемент();
НовыйНомер.Наименование = "Инв_номер_фиктивный_" + Строка(НоменклатураСсылка.Артикул);
НовыйНомер.Номенклатура = НоменклатураСсылка;
НовыйНомер.Организация = ОрганизацияСсылка;
НовыйНомер.Записать();

Способ 3. Программное отключение проверки (для опытных пользователей)

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

В расширении необходимо найти форму документа СписаниеИзЭксплуатации и в процедуре ПередЗаписьюНаСервере или через изменение свойств реквизита табличной части ИнвентарныйНомер установить ПроверкаЗаполнения = ВыдаватьОшибку.НеПроверять.

Важный нюанс: если вы просто отключите проверку в форме, документ может не провестись по регистрам, так как механизм проведения 1С:ERP 2.5 все равно будет искать остатки. Если в регистре остаток числится на «пустой ссылке», то и в документе должна быть «пустая ссылка».

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


ОбъектДок = ДокументСсылка.ПолучитьОбъект();
Для Каждого СтрокаТЧ Из ОбъектДок.Товары Цикл
    // Принудительно очищаем или заполняем пустой ссылкой нужного типа
    СтрокаТЧ.ИнвентарныйНомер = Справочники.ИнвентарныеНомераТМЦ.ПустаяСсылка();
КонецЦикла;
ОбъектДок.ОбменДанными.Загрузка = Истина; // Отключаем проверки
ОбъектДок.Записать(РежимЗаписиДокумента.Проведение);

Способ 4. Настройка категории и вида номенклатуры

Иногда проблема кроется в настройках системы. Разберем настройки справочника Виды номенклатуры. Если в виде номенклатуры установлен флаг Учет по инвентарным номерам, система будет требовать их во всех документах движения.

Попробуем следующий алгоритм:

  1. Временно отключим признак учета по инвентарным номерам в Виде номенклатуры.
  2. Попробуем провести документ списания старых остатков.
  3. Вернем настройку обратно для корректного учета новых поступлений.

Внимание: этот метод может не сработать, если в регистре накопления уже сформированы остатки с разрезом по номерам, так как изменение настроек вида номенклатуры может потребовать пересчета итогов или привести к несоответствию аналитики.

Рекомендация по выбору метода

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

Если же объем данных исчисляется тысячами строк, используйте Способ 2 с автоматизированным созданием карточек. Это приведет ваш учет в соответствие с новой методологией 1С:ERP 2.5 и позволит в дальнейшем работать без «хаков» и модификаций конфигурации.

← На главную