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

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

В процессе ведения учета в 1С:ERP Управление предприятием 2 многие пользователи сталкиваются с неожиданной ситуацией: система позволяет регистрировать одинаковые инвентарные номера для разных объектов ТМЦ, если они проводятся разными документами. Это создает риск возникновения пересортицы и затрудняет инвентаризацию. В этой статье мы подробно разберем, почему так происходит, как работает типовой механизм и какие существуют способы настройки «защиты от дублей».

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

Для начала проанализируем внутреннюю архитектуру программы. Важно разделять учет Основных средств (ОС) и ТМЦ в эксплуатации (так называемой «малоценки»). Рассмотрим основные отличия:

  1. Для Основных средств: Инвентарный номер является ключевым реквизитом справочника ОбъектыЭксплуатации. Контроль его уникальности встроен в логику работы со справочником на уровне платформы и программного кода.
  2. Для ТМЦ в эксплуатации: Инвентарный номер здесь выступает скорее как текстовый атрибут (характеристика) конкретной партии передачи. Программа 1С:ERP ориентирована на партионный учет. При проведении документа ПередачаВЭксплуатацию создается уникальная учетная партия.

Выясним причину отсутствия сквозного контроля: система проверяет уникальность номеров только внутри текущего документа. Это сделано для того, чтобы пользователь случайно не ввел две одинаковые строки в одном списке. Однако при создании нового документа система «забывает» о номерах, введенных ранее в других документах, так как не рассматривает это поле как глобально уникальный идентификатор объекта в масштабе всей базы данных.

Метод 1. Использование «Правил проверки ведения учета»

Если нам не требуется жесткая блокировка в момент ввода, а достаточно регулярного контроля и выявления ошибок, рассмотрим механизм «Правила проверки ведения учета». Это встроенный инструмент, который позволяет находить ошибки в данных по заданному алгоритму.

Разберем по шагам, как это настроить:

  1. Перейдем в раздел НСИ и администрирование — Обслуживание — Правила проверки учета.
  2. Создадим новое правило с типом «Произвольный запрос».
  3. В тексте запроса проанализируем данные регистра сведений ТМЦВЭксплуатации (или аналогичного в зависимости от версии). Нам нужно сгруппировать записи по полю ИнвентарныйНомер и отобрать те, где количество записей больше единицы.

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

Метод 2. Реализация контроля через Расширение конфигурации

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

Проанализируем ситуацию: нам нужно перехватить событие ПередЗаписью или ОбработкаПроведения для документа ПередачаВЭксплуатацию. Выполним следующие действия:

  1. Создадим новое расширение.
  2. Добавим в него документ ПередачаВЭксплуатацию и форму документа (если контроль нужен интерактивно).
  3. Напишем процедуру, которая будет проверять наличие введенного номера в базе.

Пример логики кода для расширения (схематично):


&После("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    Если Не РежимПроведения Тогда
        Возврат;
    КонецЕсли;

    // Проанализируем табличную часть "ТМЦ в эксплуатации"
    Для Каждого СтрокаТЧ Из ЭтотОбъект.ТМЦВЭксплуатации Цикл
        
        Если ЗначениеЗаполнено(СтрокаТЧ.ИнвентарныйНомер) Тогда
            
            // Выполним запрос к регистру, чтобы найти такие же номера
            Запрос = Новый Запрос;
            Запрос.Текст = 
                "ВЫБРАТЬ ПЕРВЫЕ 1
                |	ТМЦВЭксплуатации.Регистратор
                |ИЗ
                |	РегистрНакопления.ТМЦВЭксплуатации КАК ТМЦВЭксплуатации
                |ГДЕ
                |	ТМЦВЭксплуатации.ИнвентарныйНомер = &ИнвентарныйНомер
                |	И ТМЦВЭксплуатации.Регистратор <> &ТекущийДокумент";
            
            Запрос.УстановитьПараметр("ИнвентарныйНомер", СтрокаТЧ.ИнвентарныйНомер);
            Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
            
            РезультатЗапроса = Запрос.Выполнить();
            
            Если Не РезультатЗапроса.Пустой() Тогда
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "Инвентарный номер " + СтрокаТЧ.ИнвентарныйНомер + " уже используется!";
                Сообщение.Сообщить();
                Отказ = Истина;
            КонецЕсли;
            
        КонецЕсли;
        
    КонецДля;

КонецПроцедуры

Важный нюанс: Такой подход может замедлить проведение документов, если в базе данных сотни тысяч записей ТМЦ. Поэтому обязательно убедитесь, что поле ИнвентарныйНомер проиндексировано в базе данных.

Метод 3. Использование серийного учета

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

Выясним, как это работает:

  1. В настройках номенклатуры или вида номенклатуры включим использование серий.
  2. Выберем политику учета серий: «Экземпляр товара (уникальный серийный номер)».
  3. При передаче в эксплуатацию система потребует указать серийный номер для каждой единицы товара.

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

Особенности версий 2.5.x и выше

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

Выводы и рекомендации

Подведем итоги нашего исследования:

Помните, что инвентарный номер в ERP 2.4 — это лишь дополнительное аналитическое поле. Чтобы оно стало полноценным инструментом контроля, необходимо либо организационное воздействие (регламенты), либо техническая доработка системы.

← На главную