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

Управление оборудованием со сроками годности

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

Условие

Реализуйте систему учёта оборудования со сроками годности и эксплуатации.

Требования:

  1. Справочник "Оборудование" с реквизитами:

    • Дата производства
    • Срок годности
    • Дата ввода в эксплуатацию
    • Нормативный срок эксплуатации
  2. Документы: ВводВЭксплуатацию, Списание

  3. Отчёт "Оборудование с истекающим сроком":

    • Оборудование, у которого срок годности истекает в ближайшие N дней
    • Оборудование, превысившее нормативный срок эксплуатации
  4. Автоматическое уведомление ответственного о необходимости замены.

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

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

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

Система управления оборудованием со сроками годности

Это комплексное решение для отслеживания оборудования, контроля сроков годности и эксплуатации.

1. Справочник "Оборудование"

// Реквизиты справочника
// - Наименование (строка)
// - ДатаПроизводства (дата)
// - СрокГодностиМесяцев (число)
// - ДатаВводаВЭксплуатацию (дата)
// - НормативнаяСрокЭксплуатацииМесяцев (число)
// - АМЛ - ответственное лицо (ссылка на Пользователей)
// - СтатусОборудования (перечисление: Active, Списано, ВОжидании)

Процедура ОбновитьСтатусОборудования() Экспорт
    ТекущаяДата = ТекущаяДата();
    Для каждого Оборудование Из Справочники.Оборудование.ВыбратьИерархически() Цикл
        ДатаИстечениеГодности = Оборудование.ДатаПроизводства + 
                                (Оборудование.СрокГодностиМесяцев * 30) * 86400;
        
        Если ДатаИстечениеГодности < ТекущаяДата Тогда
            Оборудование.СтатусОборудования = Перечисления.СтатусОборудования.Списано;
            Оборудование.Записать();
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Функция ДнейДоИстечения(Оборудование) Экспорт
    ДатаГодности = Оборудование.ДатаПроизводства + 
                   (Оборудование.СрокГодностиМесяцев * 30) * 86400;
    ДнейОставшихся = Целое((ДатаГодности - ТекущаяДата()) / 86400);
    Возврат ДнейОставшихся;
КонецФункции

2. Документы

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

// Реквизиты:
// - Дата (дата)
// - Номер (строка)
// - Оборудование (ссылка на справочник)
// - ДатаВвода (дата)
// - ОтветственноеЛицо (ссылка на Пользователей)

&НаСервере
Процедура ПриПроведении(Отмена)
    СтруктураХозОперации = Новый Структура;
    СтруктураХозОперации.Вставить("Регистр", РегистрыСведений.СтатусОборудования);
    СтруктураХозОперации.Вставить("Период", Дата);
    СтруктураХозОперации.Вставить("СтатусОборудования", "ВЭксплуатации");
    
    ЗаписьРегистра = РегистрыСведений.СтатусОборудования.СоздатьНаборЗаписей();
    ЗаписьРегистра.Отбор.Оборудование.Значение = Оборудование;
    ЗаписьРегистра.Отбор.Оборудование.ИспользованиеОтбора = Истина;
    ЗаписьРегистра.Прочитать();
    
    НоваяЗапись = ЗаписьРегистра.Добавить();
    НоваяЗапись.Период = Дата;
    НоваяЗапись.Оборудование = Оборудование;
    НоваяЗапись.Статус = "ВЭксплуатации";
    
    ЗаписьРегистра.Записать();
    
    // Обновляем справочник
    ОбъектОборудования = Оборудование.ПолучитьОбъект();
    ОбъектОборудования.ДатаВводаВЭксплуатацию = Дата;
    ОбъектОборудования.АМЛ = ОтветственноеЛицо;
    ОбъектОборудования.Записать();
КонецПроцедуры

Списание

// Реквизиты:
// - Дата (дата)
// - Номер (строка)
// - Оборудование (ссылка на справочник)
// - ПричинаСписания (перечисление: ИстёкСрок, ПревышенСрокЭксплуатации, Повреждение)
// - Комментарий (строка)

&НаСервере
Процедура ПриПроведении(Отмена)
    ОбъектОборудования = Оборудование.ПолучитьОбъект();
    ОбъектОборудования.СтатусОборудования = Перечисления.СтатусОборудования.Списано;
    ОбъектОборудования.Записать();
    
    // Регистрируем операцию в журнале аудита
    УзелXML = РегистрыСведений.АудитОборудования.СоздатьНаборЗаписей();
    НоваяЗапись = УзелXML.Добавить();
    НоваяЗапись.Период = Дата;
    НоваяЗапись.Оборудование = Оборудование;
    НоваяЗапись.ОперацияСписания = ПричинаСписания;
    УзелXML.Записать();
КонецПроцедуры

3. Отчёт "Оборудование с истекающим сроком"

&НаСервере
Процедура СформироватьОтчёт() Экспорт
    ТекущаяДата = ТекущаяДата();
    ДатаГраницы = ТекущаяДата + КоличествоДнейПредупреждения * 86400;
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    Оборудование.Ссылка КАК Оборудование,
    |    Оборудование.Наименование КАК Наименование,
    |    Оборудование.ДатаПроизводства КАК ДатаПроизводства,
    |    Оборудование.СрокГодностиМесяцев КАК СрокГодности,
    |    Оборудование.ДатаВводаВЭксплуатацию КАК ДатаВвода,
    |    Оборудование.НормативнаяСрокЭксплуатацииМесяцев КАК НормативСрок,
    |    Оборудование.АМЛ КАК АМЛ,
    |    ДОБАВИТЬМЕСЯЦЫ(Оборудование.ДатаПроизводства, 
    |                    Оборудование.СрокГодностиМесяцев) КАК ДатаИстечения,
    |    ДОБАВИТЬМЕСЯЦЫ(Оборудование.ДатаВводаВЭксплуатацию,
    |                    Оборудование.НормативнаяСрокЭксплуатацииМесяцев) КАК ДатаПревышения
    |ИЗ
    |    Справочник.Оборудование КАК Оборудование
    |ГДЕ
    |    (
    |        (Оборудование.СтатусОборудования = ЗНАЧЕНИЕ(Перечисление.СтатусОборудования.Active)
    |         И ДОБАВИТЬМЕСЯЦЫ(Оборудование.ДатаПроизводства, 
    |                          Оборудование.СрокГодностиМесяцев) >= &ТекущаяДата
    |         И ДОБАВИТЬМЕСЯЦЫ(Оборудование.ДатаПроизводства, 
    |                          Оборудование.СрокГодностиМесяцев) <= &ДатаГраницы)
    |        ИЛИ
    |        (Оборудование.СтатусОборудования = ЗНАЧЕНИЕ(Перечисление.СтатусОборудования.Active)
    |         И ДОБАВИТЬМЕСЯЦЫ(Оборудование.ДатаВводаВЭксплуатацию,
    |                          Оборудование.НормативнаяСрокЭксплуатацииМесяцев) < &ТекущаяДата)
    |    )
    |ПОРЯДОК ПО
    |    ДОБАВИТЬМЕСЯЦЫ(Оборудование.ДатаПроизводства,
    |                    Оборудование.СрокГодностиМесяцев)";
    
    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата);
    Запрос.УстановитьПараметр("ДатаГраницы", ДатаГраницы);
    
    Результат = Запрос.Выполнить().Выгрузить();
    
    // Заполняем таблицу макета
    ТаблицаДанных.Очистить();
    Для каждого Строка Из Результат Цикл
        НоваяСтрока = ТаблицаДанных.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
    КонецЦикла;
КонецПроцедуры

4. Автоматическое уведомление

&НаСервере
Процедура УведомитьОборудованиеУтеряет() Экспорт
    ТекущаяДата = ТекущаяДата();
    ДатаГраницы = ТекущаяДата + 7 * 86400; // Неделя предупреждения
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    Оборудование.Ссылка КАК Оборудование,
    |    Оборудование.АМЛ КАК АМЛ
    |ИЗ
    |    Справочник.Оборудование КАК Оборудование
    |ГДЕ
    |    Оборудование.СтатусОборудования = ЗНАЧЕНИЕ(Перечисление.СтатусОборудования.Active)
    |    И ДОБАВИТЬМЕСЯЦЫ(Оборудование.ДатаПроизводства, 
    |                      Оборудование.СрокГодностиМесяцев) МЕЖДУ &ТекущаяДата И &ДатаГраницы";
    
    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата);
    Запрос.УстановитьПараметр("ДатаГраницы", ДатаГраницы);
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        СоздатьУведомление(Выборка.Оборудование, Выборка.АМЛ);
    КонецЦикла;
КонецПроцедуры

&НаСервере
Процедура СоздатьУведомление(Оборудование, ОтветственноеЛицо)
    НоваяЗапись = РегистрыСведений.УведомленияОборудование.СоздатьНаборЗаписей();
    ЗаписьУведомления = НоваяЗапись.Добавить();
    ЗаписьУведомления.Период = ТекущаяДата();
    ЗаписьУведомления.Оборудование = Оборудование;
    ЗаписьУведомления.ОтветственноеЛицо = ОтветственноеЛицо;
    ЗаписьУведомления.ВидУведомления = "ПредупреждениеОСроке";
    НоваяЗапись.Записать();
КонецПроцедуры

5. Регламентное задание для проверки сроков

// Процедура регламентного задания
&НаСервере
Процедура ПроверитьСрокиОборудования() Экспорт
    // Обновляем статусы
    РегистрСведений.ПроцедураОбновления.ОбновитьСтатусОборудования();
    
    // Уведомляем ответственных
    РегистрСведений.ПроцедураОбновления.УведомитьОборудованиеУтеряет();
    
    // Логирование
    ЗаписьЖурнала("ПроверкаОборудования", ТипСобытияЖурналаРегистрации.Информация, , , 
                  "Проверка сроков оборудования выполнена успешно");
КонецПроцедуры

Ключевые моменты решения

  1. Автоматическое отслеживание — регламентное задание ежедневно проверяет сроки
  2. Гибкость — поддержка различных причин списания
  3. Уведомления — АМЛ получают информацию о необходимости замены
  4. Аудит — все операции со сроками записываются в регистр
  5. Масштабируемость — использование регистров сведений для эффективности
Управление оборудованием со сроками годности | PrepBro