← Назад к вопросам

Учёт ТМЦ с закреплением за сотрудниками

2.0 Middle🔥 61 комментариев
#Конфигурации и типовые

Условие

Создайте систему учёта ТМЦ (товарно-материальных ценностей) с закреплением оргтехники за сотрудниками и помещениями.

Требования:

  1. Справочники: Номенклатура, Сотрудники, Помещения
  2. Документы: ВводВЭксплуатацию, Перемещение, Списание
  3. Регистр сведений "РасположениеТМЦ" (Номенклатура → Сотрудник, Помещение)
  4. Инвентарные номера для каждой единицы оборудования
  5. Отчёты: Инвентарная ведомость, ТМЦ по сотрудникам, ТМЦ по помещениям

Дополнительно

При увольнении сотрудника показывать список закреплённого за ним оборудования.

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Система учёта ТМЦ с закреплением за сотрудниками

Архитектура решения

Система строится на регистре сведений для отслеживания текущего размещения каждого предмета и документах для фиксации операций перемещения.

1. Справочники

Номенклатура

// Справочник.Номенклатура
// Реквизиты:
// - Наименование (строка)
// - НоменклатурнаяГруппа (справочник, опционально)
// - ВидАктива (перечисление: Оборудование, Мебель, ОфисноеОборудование)
// - СтоимостьПервоначальная (число)
// - СрокПолезногоИспользования (число, месяцы)

Сотрудники

// Справочник.Сотрудники
// Реквизиты:
// - Наименование
// - Должность (справочник)
// - Подразделение
// - ДатаПриема (дата)
// - ДатаУвольнения (дата, опционально)
// - Активен (булево)

Помещения

// Справочник.Помещения
// Реквизиты:
// - Наименование
// - Этаж (число)
// - Площадь (число)
// - ОтветственныйСотрудник (справочник Сотрудники)

2. Регистр сведений

РасположениеТМЦ

// РегистрСведений.РасположениеТМЦ
// ПЕРИОДИЧЕСКИЙ
// Измерения:
//   - НоменклатураЕдиница (справочник Номенклатура)
//   - ИнвентарныйНомер (строка) — уникальный код единицы
// Ресурсы:
//   - Сотрудник (справочник Сотрудники)
//   - Помещение (справочник Помещения)
//   - ДатаРазмещения (дата)
//   - ТекущееМестоположение (перечисление: У сотрудника, В помещении)

Это позволяет хранить историю размещения и находить текущее состояние на любую дату.

3. Документы

ВводВЭксплуатацию

// Документ.ВводВЭксплуатацию
// Реквизиты:
//   - Дата, Номер (стандартные)
//   - Номенклатура (справочник)
//   - Сотрудник (справочник Сотрудники)
//   - Помещение (справочник Помещения)
//   - КоличествоЕдиниц (число)
//   - ПервоначальнаяСтоимость (число)
// Табличная часть: ЕдиницыОборудования
//   - ИнвентарныйНомер (строка, УникальныйКлюч)

&НаСервере
Процедура ПроведениеПроведение(Отказ, Режим)
    
    Попытка
        НачатьТранзакцию();
        
        Для Каждого Строка Из ЕдиницыОборудования Цикл
            
            НаборЗаписей = РегистрыСведений.РасположениеТМЦ.СоздатьНаборЗаписей();
            НаборЗаписей.Фильтр.НоменклатураЕдиница.Установить(Номенклатура);
            НаборЗаписей.Фильтр.ИнвентарныйНомер.Установить(Строка.ИнвентарныйНомер);
            
            НоваяЗапись = НаборЗаписей.Добавить();
            НоваяЗапись.НоменклатураЕдиница = Номенклатура;
            НоваяЗапись.ИнвентарныйНомер = Строка.ИнвентарныйНомер;
            НоваяЗапись.Сотрудник = Сотрудник;
            НоваяЗапись.Помещение = Помещение;
            НоваяЗапись.ДатаРазмещения = Дата;
            
            Если ЗначениеЗаполнено(Сотрудник) Тогда
                НоваяЗапись.ТекущееМестоположение = Перечисления.МестоположениеТМЦ.УСотрудника;
            Иначе
                НоваяЗапись.ТекущееМестоположение = Перечисления.МестоположениеТМЦ.ВПомещении;
            КонецЕсли;
            
            НаборЗаписей.Записать();
            
        КонецЦикла;
        
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
        Отказ = Истина;
        ВызватьИсключение "Ошибка при проведении: " + ОписаниеОшибки();
    КонецПопытки;
    
КонецПроцедуры

Перемещение

// Документ.ПеремещениеТМЦ
// Реквизиты:
//   - ИнвентарныйНомер (строка, УникальныйКлюч)
//   - Номенклатура (справочник)
//   - СотрудникОтправитель (справочник)
//   - СотрудникПолучатель (справочник)
//   - ПомещениеОтправитель (справочник)
//   - ПомещениеПолучатель (справочник)

&НаСервере
Процедура ПроведениеПроведение(Отказ, Режим)
    
    НачатьТранзакцию();
    Попытка
        
        НаборЗаписей = РегистрыСведений.РасположениеТМЦ.СоздатьНаборЗаписей();
        НаборЗаписей.Фильтр.НоменклатураЕдиница.Установить(Номенклатура);
        НаборЗаписей.Фильтр.ИнвентарныйНомер.Установить(ИнвентарныйНомер);
        НаборЗаписей.Прочитать();
        
        Если НаборЗаписей.Количество() = 0 Тогда
            ВызватьИсключение "Оборудование с инвентарным номером " + ИнвентарныйНомер + " не найдено";
        КонецЕсли;
        
        СтараяЗапись = НаборЗаписей[0];
        СтараяЗапись.Сотрудник = СотрудникПолучатель;
        СтараяЗапись.Помещение = ПомещениеПолучатель;
        СтараяЗапись.ДатаРазмещения = Дата;
        
        НаборЗаписей.Записать();
        
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
        Отказ = Истина;
        ВызватьИсключение ОписаниеОшибки();
    КонецПопытки;
    
КонецПроцедуры

Списание

// Документ.СписаниеТМЦ
// Реквизиты:
//   - ИнвентарныйНомер (строка)
//   - ПричинаСписания (перечисление: Износ, Утрата, Хищение, Дарение)
//   - Номенклатура (справочник)
//   - КомментарийСписания (строка, мультистрока)

4. Отчёты

Инвентарная ведомость

// Отчёт.ИнвентарнаяВедомость
// Параметры: ДатаСостояния, Подразделение (опционально)

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

ТМЦ по сотрудникам

// Группировка по Сотруднику → Номенклатура
// Ресурс: количество единиц

При увольнении сотрудника

// Справочник.Сотрудники

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

Ключевые особенности

  • Периодичность регистра позволяет отслеживать историю движения
  • Инвентарные номера обеспечивают уникальную идентификацию каждой единицы
  • Отказ на удаление справочников Сотрудник/Помещение, если к ним есть запросы в регистре
  • Валидация при перемещении — проверка, что оборудование существует
  • Срезы последних для быстрого поиска текущего размещения

Эта архитектура обеспечивает полный учёт движения ТМЦ и гарантирует целостность данных.