Розширення RMKBarcodeCharacteristicFix для BAS Роздрібна торгівля — фільтр «Тільки наявні» у формі вибору ШК

RMKBarcodeCharacteristicFix_1.1.0.cfe — пряме посилання, ~12 КБ. Установка: Конфігурація → Розширення конфігурації → Додати.
Що відбувається без розширення
У РМК (робоче місце касира) для одного товару з характеристиками часто використовується один загальний штрих-код без прив'язки до конкретної характеристики. Коли касир сканує такий код, BAS Retail штатно відкриває форму «Вибір даних пошуку по штрихкоду» і показує усі знайдені варіанти:
Давідоф Classik, , ← товар без характеристики Давідоф Classik, 165, ← характеристика 165 Давідоф Classik, 170, ← характеристика 170
Касир бачить три позиції, але реально на залишку в його магазині може бути тільки одна. Без фільтра по залишку касир вгадує — і це призводить до:
- продажу позиції, якої немає на залишку (мінусові залишки, порушення обліку);
- помилок під час інвентаризації;
- зайвих питань касира до старшого продавця.
Та сама форма відкривається не тільки в РМК. Її використовують документи надходження, переоцінки, переміщення тощо — там фільтр по залишку недоречний (товару фізично ще немає в магазині). Тому потрібен механізм, який вмикається за замовчуванням, але користувач може його вимкнути одним кліком.
Що робить розширення
Розширення позичає форму ОбщаяФорма.ВыборДанныхПоискаПоШК і додає до неї один елемент — чекбокс «Тільки наявні» над таблицею вибору.
При відкритті форми:
- чекбокс за замовчуванням увімкнений;
- одним запитом перевіряємо залишки на складі продажу поточного магазину сесії і ховаємо рядки без залишку.
У вікні касир бачить лише реальні варіанти:
[x] Тільки наявні Давідоф Classik, 165, ← тільки ця позиція є на залишку магазину
Якщо користувач знімає чекбокс — миттєво (без додаткових запитів до БД) повертається повний штатний перелік. У надходженнях, переоцінках і подібних документах це дозволяє побачити всі варіанти, коли товару ще немає на залишку.
Поведінка у різних сценаріях
| Сценарій | Що буде |
|---|---|
| Штрих-код має один варіант (нема двозначності) | Форма вибору не відкривається — розширення не задіюється |
| Декілька варіантів, всі мають залишок | Видно всі (як штатно), чекбокс увімкнено |
| Декілька варіантів, залишок лише в одного | Видно одну позицію; зняти чекбокс → видно всі |
| Декілька варіантів, жоден не має залишку | Список порожній; зняти чекбокс → видно всі |
| Дисконтна картка / серійний номер | Рядки без номенклатури фільтром не зачіпаються — видно завжди |
| Виклик з документа «Завантаження ШК» (двохрівневе дерево) | Чекбокс ховається, поведінка повністю штатна |
| Поточний магазин не визначено | Фільтр по всіх складах (краще показати щось, ніж нічого) |
| У магазину не заповнено «Склад продажу» | Те саме — фільтр по всіх складах |
Технічна реалізація
- Тип розширення: Patch, режим сумісності
Version8_3_10. - Точка втручання: позичена (Adopted) форма
CommonForm.ВыборДанныхПоискаПоШК+ власнийCommonModule.RMKBCF_ОтборПоОстаткуСервер. - Префікс власних об'єктів:
RMKBCF_. - Обробник
&После("ПриСозданииНаСервере")збирає унікальні пари(Номенклатура, Характеристика)з дерева вибору, робить один запит доРегистрНакопления.ТоварыНаСкладах.Остатки, зберігає повний список у тимчасовому сховищі сесії і перебудовує дерево. - Перемикач чекбокса не звертається до БД повторно — читає кешований повний список з тимчасового сховища, тому перемикання миттєве.
- Запит виконується у привілейованому режимі — фільтр не залежить від прав касира на читання регістру залишків.
Визначення магазину і складу
Магазин береться з параметра сесії ПараметрыСеанса.ТекущийМагазин. Це стандартний механізм BAS Retail (ОбщегоНазначенияРТ.ОпределитьТекущийМагазин), який ставить магазин з робочого місця користувача / каси за пріоритетом підрозділу. Касиру не треба нічого підставляти руками — магазин зʼявляється сам, з його сесії.
Склад продажу беремо з реквізиту магазину:
Склад = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Магазин, "СкладПродажи");
Якщо магазин не визначено або СкладПродажи не заповнено — фільтр відкочується до перевірки залишків на всіх складах.
Сумісність
- Конфігурація: BAS Роздрібна торгівля 2.2 (
BASРозничнаяТорговля), версія 2.2.14.2 і сумісні. - Режим сумісності: 8.3.10.
- Мінімальна версія платформи 1С: 8.3.10 і вище (тестовано на 8.3.17, 8.3.24).
- Основна конфігурація не модифікується — стандартний механізм розширень з можливістю відкату.
Тип складу. Використовується тільки СкладПродажи магазину. Якщо торгова мережа продає з іншого складу (наприклад, окремий резервний під роздріб) — у поточній реалізації знадобиться доробка.
Резерви не враховуються. Фільтр базується на КоличествоОстаток > 0, без віднімання резервів. Якщо весь залишок зарезервований під чужі замовлення — позиція все одно показується як «наявна».
Привілейований режим. Запит залишків виконується у привілейованому режимі. Якщо політика безпеки забороняє касиру знати про існування «чужої» позиції — це слід враховувати: порожній перелік при увімкненому фільтрі непрямо свідчить, що штрих-код привʼязаний до позиції без залишку.
Встановлення
- У Конфигуратор відкрити базу даних.
- Конфигурация → Расширения — натиснути Добавить і обрати
RMKBarcodeCharacteristicFix_1.1.0.cfe. - У відкритій формі залишити налаштування за замовчуванням: Защита от опасных действий увімкнено, Активно увімкнено.
- Зберегти і Оновити конфігурацію бази даних (F7).
- Завершити сеанси користувачів (або перезапустити
rphostна клієнт-серверному варіанті).
Розширення підключається без зупинки бази-в-цілому і не потребує реструктуризації даних. Налаштування для користувача не передбачені — працює одразу після встановлення.
Як тимчасово вимкнути
- Разово на одну форму — зняти чекбокс «Тільки наявні» у вікні вибору.
- Глобально — у списку розширень зняти прапор «Активно» і оновити конфігурацію БД. Форма повернеться до штатної поведінки (всі варіанти, без чекбокса).
RMKBarcodeCharacteristicFix_1.1.0.cfe · ~12 КБ · вільне завантаження. Версія 1.1.0.