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

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

При разработке систем учета оборудования (IT-активов, мебели или инструментов) часто возникает задача: закрепить конкретную единицу техники за определенным рабочим местом или сотрудником. Начинающие разработчики часто пытаются решить эту задачу «в лоб» — создать в справочнике оборудования реквизит РабочееМесто и перезаписывать его программно при проведении документа. Однако такой подход ведет к потере истории перемещений и нарушению целостности данных.

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

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

Представим ситуацию: вы добавили реквизит РабочееМесто в справочник АОВЭксплуатации. При записи документа система программно меняет этот реквизит. На первый взгляд, задача решена. Но проанализируем последствия:

  1. Отсутствие истории. Вы всегда видите только последнее местонахождение оборудования. Вы не сможете узнать, где этот монитор находился месяц назад или кто за него отвечал до текущего сотрудника.
  2. Проблемы при отмене проведения. Если документ будет помечен на удаление или его проведение будет отменено, данные в справочнике останутся старыми. Оборудование будет числиться на рабочем месте, хотя документального основания для этого уже нет.
  3. Блокировки данных. При интенсивной работе изменение справочника из документа может вызвать лишние блокировки таблиц базы данных.

Для решения этих проблем в системе 1С предусмотрен механизм регистров сведений.

Шаг 1: Проектирование структуры данных

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

Справочники:

Регистр сведений:

Создадим периодический регистр сведений МестонахождениеОборудования. Настроим его следующим образом:

Шаг 2: Реализация движений документа

Теперь рассмотрим, как данные попадают в этот регистр. Основным инструментом здесь выступает документ (например, ПеремещениеОборудования или ваш РабочиеМеста).

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


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

Этот код гарантирует, что при удалении документа записи из регистра исчезнут автоматически, сохраняя актуальность данных в системе.

Шаг 3: Отображение данных в карточке оборудования

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

Для этого в форме справочника АОВЭксплуатации можно использовать Динамический список. Создадим на форме декорацию или поле надписи и при открытии (или при выборе элемента) будем выполнять запрос к виртуальной таблице СрезПоследних.

Рассмотрим пример запроса для получения текущего местоположения:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	МестонахождениеОборудованияСрезПоследних.РабочееМесто КАК ТекущееМесто,
    |	МестонахождениеОборудованияСрезПоследних.Статус КАК ТекущийСтатус
    |ИЗ
    |	РегистрСведений.МестонахождениеОборудования.СрезПоследних(&ДатаАктуальности, ИнвентарныйНомер = &ВыбранноеОборудование) КАК МестонахождениеОборудованияСрезПоследних";

Запрос.УстановитьПараметр("ДатаАктуальности", ТекущаяДата());
Запрос.УстановитьПараметр("ВыбранноеОборудование", Объект.Ссылка);

РезультатЗапроса = Запрос.Выполнить();

Такой подход позволяет не только видеть текущее состояние, но и легко построить отчет «История перемещений оборудования», просто выведя все записи регистра по конкретному инвентарному номеру.

Шаг 4: Дополнительные контроли и автоматизация

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

Проанализируем логику проверки:

  1. В процедуре ПередЗаписью или ОбработкаПроведения мы запрашиваем СрезПоследних для добавляемого оборудования.
  2. Если текущее рабочее место в регистре не пустое и не совпадает с тем, что в документе, мы можем выдать предупреждение или запретить проведение.

Также полезно использовать событие ПриИзменении в табличной части документа. Например, при выборе оборудования можно автоматически подтягивать его текущий статус, чтобы пользователь сразу видел, что монитор, который он пытается поставить на рабочее место, в данный момент находится в ремонте.

Заключение

Мы проанализировали ситуацию и пришли к выводу, что использование периодического регистра сведений — это единственный верный способ реализации учета материальных ценностей в 1С. Это обеспечивает:

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

← На главную