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