← Назад к вопросам
Управление оборудованием со сроками годности
2.0 Middle🔥 131 комментариев
#Конфигурации и типовые
Условие
Реализуйте систему учёта оборудования со сроками годности и эксплуатации.
Требования:
-
Справочник "Оборудование" с реквизитами:
- Дата производства
- Срок годности
- Дата ввода в эксплуатацию
- Нормативный срок эксплуатации
-
Документы: ВводВЭксплуатацию, Списание
-
Отчёт "Оборудование с истекающим сроком":
- Оборудование, у которого срок годности истекает в ближайшие N дней
- Оборудование, превысившее нормативный срок эксплуатации
-
Автоматическое уведомление ответственного о необходимости замены.
Комментарии (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. Регламентное задание для проверки сроков
// Процедура регламентного задания
&НаСервере
Процедура ПроверитьСрокиОборудования() Экспорт
// Обновляем статусы
РегистрСведений.ПроцедураОбновления.ОбновитьСтатусОборудования();
// Уведомляем ответственных
РегистрСведений.ПроцедураОбновления.УведомитьОборудованиеУтеряет();
// Логирование
ЗаписьЖурнала("ПроверкаОборудования", ТипСобытияЖурналаРегистрации.Информация, , ,
"Проверка сроков оборудования выполнена успешно");
КонецПроцедуры
Ключевые моменты решения
- Автоматическое отслеживание — регламентное задание ежедневно проверяет сроки
- Гибкость — поддержка различных причин списания
- Уведомления — АМЛ получают информацию о необходимости замены
- Аудит — все операции со сроками записываются в регистр
- Масштабируемость — использование регистров сведений для эффективности