При автоматизации складского учета или учета внутреннего оборудования часто возникает задача отслеживания текущего состояния объектов, например, установленных в принтеры картриджей. Рассмотрим, как правильно спроектировать архитектуру такой системы и вывести для пользователей актуальный список установленных комплектующих.
Первый шаг к решению задачи — выбор правильного объекта Регистр. Хотя на первый взгляд кажется, что Регистр накопления (остатки) подходит идеально, на практике для отслеживания состояния «что установлено прямо сейчас» лучше использовать Регистр сведений. Рассмотрим почему:
Измерения мы указываем Принтер, а Ресурсом выступает Картридж.Такой подход автоматически решает проблему дублирования данных. Если принтер может содержать только один картридж, использование Регистра сведений позволяет легко ограничить повторную установку на программном уровне.
Чтобы избежать ситуации, когда на один принтер устанавливается несколько картриджей одновременно, мы можем реализовать проверку в модуле набора записей регистра. Это гарантирует целостность данных:
Процедура ПередЗаписью(Отказ, Замещение)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Регистр.Принтер
|ИЗ
| РегистрСведений.УстановленныеКартриджи КАК Регистр
|ГДЕ
| Регистр.Принтер = &Принтер";
Запрос.УстановитьПараметр("Принтер", Принтер);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("На данном принтере уже установлен картридж!");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Для создания формы, в которой отображаются только установленные на данный момент картриджи, мы можем воспользоваться механизмом Динамический список. Вместо обращения к основной таблице, используйте произвольный запрос:
Динамического списка.Произвольный запрос в значение Истина.Если вы все же решили использовать Регистр накопления, запрос к виртуальной таблице Остатки будет выглядеть следующим образом:
ВЫБРАТЬ
Остатки.Принтер КАК Принтер,
Остатки.Картридж КАК Картридж
ИЗ
РегистрНакопления.УчетКартриджей.Остатки(&Период, ) КАК Остатки
ГДЕ
Остатки.КоличествоОстаток > 0
Это позволит пользователю видеть только те строки, которые имеют положительный остаток, то есть физически установленные на технике картриджи.
Часто пользователи хотят не просто видеть список, но и совершать действия (например, снять картридж). Вместо поиска документов в общем журнале, рекомендуем следующие решения:
Снятие, подставляя нужные данные.Отчет на системе компоновки данных (СКД). В форму отчета можно добавить командную панель. Пользователь выделяет строку в отчете, нажимает кнопку «Списать», и вы программно создаете соответствующий документ на основании данных выбранной строки.Таким образом, мы объединяем строгую структуру данных в регистре с удобным пользовательским интерфейсом, что минимизирует ошибки и упрощает ежедневную работу сотрудников.