Цель: Создать веб-модуль для управления каталогом запчастей, учёта их наличия на складе, обработки заказов на пополнение и автоматического списания при использовании в рекламациях.
В системе три роли пользователей:
Администратор: Полный доступ ко всем функциям (добавление, редактирование, удаление, импорт/экспорт).
Менеджер: Только просмотр каталога и списка заказов. Не видит цену закупки.
Бригадир: Полностью не имеет доступа к данному модулю (не видит ни каталог, ни заказы).
Основные сущности: Каталог запчастей, Заказы деталей, Контроль наличия.
Данные тесно связаны: остатки в каталоге автоматически считаются из заказов, а списание происходит при добавлении детали в рекламации.
Важное правило: Экспорт и импорт данных (каталога, заказов) должны сохранять и восстанавливать все связанные данные, включая связи (например, между артикулом и его картинкой, кодами и их расшифровками), чтобы обеспечить целостность системы после переноса данных.
Назначение: Единый справочник всех запчастей.
Структура записи (столбцы таблицы):
Картинка: Автоподгрузка с сервера по артикулу или ручная загрузка.
Артикул детали: Уникальный идентификатор. Заполняется через форму или импорт.
Где используется (Артикул МАФ): Связь с основной номенклатурой. Может быть пустым.
Кол-во Общее: Вычисляемое поле = Кол-во без документов + Кол-во с документами. Кликабельно. При клике открывает вкладку "Заказы деталей" с фильтром по этому артикулу и статусом "На складе".
Кол-во без документов: Вычисляемое поле. Сумма остатков (Остаток > 0) из вкладки "Заказы деталей" для этого артикула, где С документами = "НЕТ" и Статус = "На складе". Кликабельно. При клике открывает "Заказы деталей" с фильтром: артикул, Остаток > 0, С документами = "НЕТ", Статус = "На складе".
Кол-во с документами: Вычисляемое поле. Сумма остатков (Остаток > 0) из вкладки "Заказы деталей" для этого артикула, где С документами = "ДА" и Статус = "На складе". Кликабельно. При клике открывает "Заказы деталей" с фильтром: артикул, Остаток > 0, С документами = "ДА", Статус = "На складе".
Примечание: Руководящее поле.
Цена закупки: Только для Администратора. Скрыта для других ролей.
Цена для заказчика: Руководящее/импортируемое поле.
Цена экспертизы: Руководящее/импортируемое поле.
№ по ТСН: Руководящее/импортируемое поле.
Шифр расценки и коды ресурсов: Может содержать несколько кодов (например, "11.2457.24/14"). Руководящее/импортируемое поле.
Функционал:
Редактирование: При клике на строку открывается форма редактирования, где можно менять только поля: Примечание, Где используется, Цена закупки, Цена для заказчика, Цена экспертизы, № по ТСН, Шифр расценки.
Импорт/Экспорт: Аналогично существующему модулю "Каталог МАФ" (ДКР). Ключевое требование: При импорте данных (например, из файла предыдущего экспорта) система должна корректно обрабатывать и сохранять все связанные данные (ссылки на картинки, связи артикулов, записи в справочнике расшифровок кодов). При экспорте — выгружать данные в формате, пригодном для последующего целостного импорта.
Расшифровка кодов (для полей 11 и 12):
Создать отдельный справочник "Расшифровка расценок" с полями: КОД, Расшифровка.
Реализовать подсказку (tooltip) при наведении курсора на код в каталоге, отображающую его расшифровку из справочника.
Связь с импортом/экспортом: При импорте каталога, если в файле встречаются новые коды, отсутствующие в справочнике, система должна предлагать пользователю (Администратору) добавить их расшифровку или создать записи с пустым полем "Расшифровка".
Назначение: Учёт партий запчастей, поступивших на склад или ожидаемых.
Структура записи:
Картинка: Берётся из Каталога по артикулу.
Артикул детали: Ссылка на запись в Каталоге.
Источник заказа (площадка/рекламация):
Цель: Указать, для какого объекта или случая сделан заказ. Связь с сущностями "Площадки" и "Рекламации" НЕОБЯЗАТЕЛЬНА.
Реализация: Поле ввода с возможностью:
Свободного ввода текста (например, "Складской запас", "Договор №XXX").
Поиска и выбора существующей Площадки из системы (через выпадающий список с автодополнением).
Поиска и выбора существующей Рекламации из системы (через выпадающий список с автодополнением).
В таблице отображается текстовое представление выбранного объекта (название площадки, номер рекламации) или введённый вручную текст.
Статус: Выбор из трёх значений: Заказано, На складе, Отгружено.
Логика статусов: При создании - Заказано. При ручном изменении на На складе - детали учитываются в остатках каталога. Когда Остаток становится 0 - статус автоматически меняется на Отгружено.
Заказано: Исходное количество в заказе.
Остаток: Текущее количество, оставшееся в этом заказе (уменьшается при списании в рекламации).
С документами: Чекбокс "ДА"/"НЕТ".
Примечание: Руководящее поле.
Детальная карточка заказа:
Открывается по клику на строку. Позволяет редактировать все поля.
История списаний: Блок, отображающий, сколько, когда и куда (примечание из окна списания, например, "Рекламация №ХХХ") было отгружено деталей из этого заказа.
Кнопка "Отгрузить":
При нажатии открывает модальное окно с полями: Количество (для списания) и Примечание (куда/для чего забирается, например, номер рекламации).
После подтверждения:
Значение Остаток в заказе уменьшается на указанное количество.
В блоке истории списаний добавляется запись с указанным количеством и примечанием.
Добавление детали в рекламацию:
Поле для ввода детали должно быть с автодополнением (typeahead). При вводе артикула предлагаются варианты только из Каталога запчастей.
Добавить чекбокс "С документами" рядом с полем выбора детали.
Логика списания при сохранении рекламации:
Система получает артикул детали, необходимое количество и признак "С документами".
Поиск заказа для списания: В модуле "Заказы деталей" ищется заказ с данным артикулом, где С документами соответствует запрошенному признаку, Статус = "На складе" и Остаток > 0. Списание происходит из найденного заказа (уменьшается Остаток).
Важно: В историю списаний этого заказа автоматически добавляется запись: "Автоматическое списание для рекламации: [НОМЕР_ТЕКУЩЕЙ_РЕКЛАМАЦИИ]".
Если подходящего заказа не найдено:
В Каталоге в соответствующей колонке (Кол-во с документами или Кол-во без документов) значение становится отрицательным (например, -1 или -запрашиваемое_количество).
Данная позиция автоматически попадает во вкладку "Контроль наличия".
Назначение: Панель мониторинга проблем с наличием.
Данные формируются автоматически, редактирование записей недоступно.
Источники данных и логика формирования:
Правило 1 (Критический недостаток): Вывести все детали, у которых в Каталоге значение в колонках Кол-во без документов ИЛИ Кол-во с документами меньше 0. Выделить строку красным. В столбце "Примечание" системы написать: "Отсутствие детали".
Правило 2 (Минимальный остаток):
В Каталоге добавить скрытое (или отображаемое) поле "Минимальный остаток" для каждой детали (по умолчанию 0).
Если в Каталоге Кол-во Общее (или одна из детализированных колонок, в зависимости от политики) станет меньше значения "Минимальный остаток" - вывести деталь в этот модуль. Выделить строку желтым. В примечании: "Достигнут лимит минимального остатка (X шт)", где X - значение минимального остатка.
Колонки: Картинка, Артикул, Кол-во для заказа (сколько не хватает, т.е. модуль отрицательного значения из Каталога), Примечание (системное).
Логика снятия уведомления: Уведомление из этого модуля автоматически снимается, когда условие, вызвавшее его, перестаёт выполняться. Например:
Для "отсутствия" (-N) — когда появляется заказ с этой деталью и статусом На складе или Заказано, который может покрыть недостачу (остаток в заказе >= недостающему количеству). После этого отрицательное значение в каталоге обнуляется или становится положительным.
Для "минимального остатка" — когда Кол-во Общее становится >= значению "Минимальный остаток".
Вкладки: "Каталог запчастей", "Заказы деталей", "Контроль наличия".
Таблицы с сортировкой, фильтрацией и кликабельными ячейками, как указано выше.
Единый стиль с существующей платформой (логика работы кнопок, модальных окон, импорта/экспорта).