Как правильно спроектировать структуру справочников и документов для учета оборудования в 1С?

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

При разработке конфигураций для сервисных центров, учета ремонтов и обслуживания оборудования начинающие разработчики часто сталкиваются с дилеммой: как правильно связать между собой справочники оборудования, типы приборов, комплектующие и документы фиксации работ. Разберем типичные ошибки проектирования нормативно-справочной информации (НСИ) и выработаем архитектурно верное решение.

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

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

Выясним причину, почему исходная схема с подчинением справочника типов приборов справочнику самих приборов является некорректной:

  1. Неверное понимание механизма подчинения справочников. В платформе «1С:Предприятие» подчинение через стандартный реквизит Владелец означает жесткую и неделимую связь: один элемент подчиненного справочника может принадлежать строго одному элементу-родителю. Если мы сделаем справочник ТипыПриборов подчиненным справочнику НаименованияПриборов, то для каждого нового физического прибора одного и того же типа придется создавать дубликат записи в справочнике типов. Это разрушает нормализацию базы данных и превращает классификатор в неуправляемый список дублей.
  2. Смешение абстрактного типа и конкретного экземпляра. Важно разделять модель оборудования (описание свойств, общее для сотен одинаковых устройств) и конкретный экземпляр (физический прибор с уникальным серийным номером). Модель должна выступать независимым классификатором, а экземпляр должен ссылаться на нее.
  3. Дублирование реквизитов в табличных частях. Заполнять табличную часть документа или справочника-владельца значениями всех реквизитов зависимого объекта — грубая ошибка. Это приводит к рассинхронизации данных при любом изменении исходной карточки и избыточно раздувает объем таблиц базы данных.
  4. Использование справочников для учета событий и состояний. Справочники предназначены для хранения условно-постоянной информации. Попытка вести заявки и накапливать в них статусы через элементы справочника лишает нас механизмов проведения, транзакционного контроля остатков и контроля последовательности событий во времени. Для фиксации событий служат документы, а для накопления итогов и статусов — регистры.

Правильная модель нормативно-справочной информации (НСИ)

Построим корректную трехуровневую структуру справочников для учета приборов и оборудования:

  1. Справочник ТипыПриборов (или МоделиОборудования): является независимым (не подчиненным). Хранит общие характеристики: наименование типа, производителя, общие технические параметры.
  2. Справочник Приборы (или ОбъектыЭксплуатации): хранит конкретные физические единицы. Содержит реквизиты:
    1. Реквизит ТипПрибора со ссылкой на справочник ТипыПриборов (связь «многие к одному»).
    2. Реквизит СерийныйНомер (строка).
    3. Реквизит ТекущийВладелец (ссылка на Справочники.Контрагенты).
  3. Учет комплектующих: если прибор имеет индивидуальный состав деталей, который не меняется, его можно оформить табличной частью внутри карточки прибора. Если же состав оборудования динамичен (комплектующие снимаются, заменяются в ходе ремонтов), используем независимый периодический регистр сведений СоставПриборов с измерениями Прибор, УзелКомплектующее и ресурсом Количество.

Работа с табличными частями документов: хранение ссылок вместо дублирования

Рассмотрим, как организуется работа в документах (например, в документе ЗаявкаНаРемонт или АктВыполненныхРабот):

В табличной части документа должен присутствовать только один ключевой реквизит для идентификации объекта — Прибор с типом ссылки на СправочникСсылка.Приборы. Хранить в табличной части наименование типа, серийный номер или модель отдельными строковыми реквизитами не требуется. На управляемой форме эти реквизиты отображаются пользователю путем добавления колонок «через точку» от основного реквизита: Прибор.ТипПрибора, Прибор.СерийныйНомер.

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

Опасность создания элементов справочников при проведении документов

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

  1. Транзакционные взаимоблокировки (Deadlocks). При проведении документа в транзакции запись в таблицы справочников блокирует эти таблицы. При многопользовательской работе это неминуемо приведет к ожиданию блокировок и ошибкам параллельной работы.
  2. Замусоривание базы при отмене проведения. Платформа 1С при отмене проведения документа автоматически очищает только движения по регистрам. Созданные кодом элементы справочников остаются в системе, порождая дубли при повторной попытке проведения.

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

Реализация жизненного цикла приборов через регистры

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

1. Регистр накопления ПриборыВРемонте (вид регистра — Остатки)

Регистр позволяет контролировать, какие приборы сейчас находятся на обслуживании и в рамках каких первичных документов:

  1. Измерения: Заявка (тип ДокументСсылка.ЗаявкаНаРемонт), Прибор (тип СправочникСсылка.Приборы).
  2. Ресурс: Количество (число).

При проведении документа ЗаявкаНаРемонт формируется движение «Приход». Когда приборы группируются в другой документ (например, АктВыполненныхРабот или НарядНаРемонт), этот документ списывает остаток движением «Расход» с контролем остатков по регистру.

2. Регистр сведений СтатусыПриборов (периодический)

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

  1. Измерение: Прибор.
  2. Ресурсы: Статус (перечисление: Принят, ВРаботе, ГотовКВыдаче, Выдан), ДокументДвижения.

Посмотрим на пример формирования движений по статусам в обработке проведения документа:


Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    
    Движения.СтатусыПриборов.Записывать = Истина;
    
    Для Каждого СтрТаблицы Из ТаблицаПриборов Цикл
        Движение = Движения.СтатусыПриборов.Добавить();
        Движение.Период = Дата;
        Движение.Прибор = СтрТаблицы.Прибор;
        Движение.Статус = Перечисления.СтатусыОборудования.ВРаботе;
        Движение.ДокументДвижения = Ссылка;
    КонецЦикла;
    
КонецПроцедуры

Такая архитектура полностью соответствует стандартам разработки «1С:Совместимо», исключает дублирование данных, гарантирует высокую производительность системы и позволяет строить любые отчеты по движению оборудования с помощью простого обращения к срезу последних или виртуальным таблицам остатков.

← На главную