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