В процессе разработки и адаптации типовых решений на базе 1С:Предприятие 8.3 часто возникает задача повышения эргономики рабочего места кассира (РМК). Одной из наиболее востребованных доработок в конфигурации Управление торговлей 11.3 является интеграция формы подбора товаров непосредственно в интерфейс чека ККМ, чтобы кассиру не приходилось каждый раз нажимать кнопку «Поиск» или «Подбор».
В этой статье мы подробно разберем, какими способами можно реализовать данную задачу, проанализируем технические ограничения платформы и выберем оптимальный вариант реализации с использованием расширений.
Прежде чем приступать к кодингу, проанализируем важную особенность платформы. В управляемом приложении 1С не существует механизма, аналогичного iframe в веб-разработке, который позволил бы просто «вставить» одну готовую форму внутрь другой. Форма в 1С — это самостоятельный объект. Чтобы функционал подбора отображался «внутри» РМК, у нас есть три пути:
ПодборТоваровВДокументПродажи на форму РМК. Это трудоемкий процесс, требующий глубокого понимания работы типовых механизмов.Рассмотрим подробнее каждый из этих вариантов.
Это самый быстрый и безопасный способ, который посоветовали опытные участники форума. Мы будем использовать механизм расширений, чтобы не снимать типовую конфигурацию с поддержки. Наша задача — перехватить событие открытия формы РМК и программно вызвать форму подбора.
Выясним причину, почему важно правильно указать владельца формы. Если мы просто вызовем ОткрытьФорму(), то при выборе товара система не будет «знать», куда вернуть результат. Указав владельцем форму РМК, мы задействуем штатный механизм ОбработкаВыбора.
Разберем по шагам создание процедуры в расширении:
ФормаДокументаРМК (документ ЧекККМ).ПриОткрытии с типом вызова &После.
&НаКлиенте
Процедура Расш1_ПриОткрытииПосле(Отказ)
// Подготовим параметры для открытия формы подбора
ПараметрыПодбора = Новый Структура;
ПараметрыПодбора.Вставить("ЗакрыватьПриВыборе", Ложь);
ПараметрыПодбора.Вставить("МножественныйВыбор", Истина);
// Вызываем форму подбора, указывая текущую форму РМК как владельца
ОткрытьФорму("Обработка.ПодборТоваровВДокументПродажи.Форма", ПараметрыПодбора, ЭтаФорма);
КонецПроцедуры
При таком подходе, как только кассир откроет РМК, перед ним сразу появится окно подбора. Важный момент: чтобы это не мешало работе, можно программно настроить положение окна, однако платформа 8.3 имеет ограниченные возможности по управлению координатами окон в управляемом интерфейсе (обычно они открываются в центре или в режиме вкладок).
Прежде чем приступать к сложной разработке, проанализируем ситуацию: возможно, типовой функционал уже решает задачу пользователя. В УТ 11.3 предусмотрена панель «Быстрые товары».
Это настраиваемая область на форме РМК, куда можно вывести наиболее популярные позиции номенклатуры в виде плиток (кнопок). Преимущества этого метода:
Если же ассортимент слишком велик, этот метод не заменит полноценный подбор, и тогда стоит рассмотреть третий вариант.
Если требуется, чтобы список товаров был именно частью формы (без всплывающих окон), мы рекомендуем добавить на форму РМК элемент типа Таблица, связанный с динамическим списком справочника Номенклатура. Это гораздо проще, чем переносить всю логику типовой обработки подбора.
Рассмотрим алгоритм реализации:
СписокНоменклатурыДляПодбора с типом ДинамическийСписок.Справочник.Номенклатура. Желательно настроить произвольный запрос, чтобы сразу видеть актуальные остатки и цены (используя виртуальные таблицы остатков и цен).Выбор.Посмотрим на пример кода обработчика выбора, который будет добавлять товар в корзину чека:
&НаКлиенте
Процедура СписокНоменклатурыДляПодбораВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; // Отменяем стандартное открытие карточки товара
// Получаем данные выбранного товара (ссылку)
ВыбранныйТовар = ВыбраннаяСтрока;
// Вызываем серверную процедуру для добавления строки в таблицу "Товары"
ДобавитьТоварВЧекНаСервере(ВыбранныйТовар);
КонецПроцедуры
&НаСервере
Процедура ДобавитьТоварВЧекНаСервере(ТоварСсылка)
// Создаем новую строку в табличной части документа
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = ТоварСсылка;
// Здесь должна быть логика заполнения цен, упаковок и характеристик
// В УТ 11 для этого лучше использовать типовой метод:
// ОбработкаНоменклатурыКлиентСервер.ЗаполнитьСтандартныеРеквизитыУзла(НоваяСтрока, ...);
КонецПроцедуры
Проанализируем технические риски, с которыми может столкнуться программист при модификации РМК. Форма ФормаДокументаРМК тесно интегрирована с драйверами торгового оборудования.
Проблема фокуса: Сканеры штрихкодов часто работают в режиме эмуляции клавиатуры. Если вы добавите на форму дополнительные поля поиска или динамические списки, кассир может случайно оставить фокус ввода в поле поиска подбора. В этом случае при сканировании штрихкода данные попадут в текстовое поле, а не вызовут внешнее событие 1С для добавления товара в чек.
Рекомендация: При использовании встроенного подбора убедитесь, что основные горячие клавиши (F2, F7, F11) продолжают функционировать корректно, а фокус ввода программно возвращается в основную область чека после выбора позиции из вашего списка.
Таким образом, мы выяснили, что для начинающего программиста наиболее эффективным и безопасным путем будет автоматический вызов формы подбора через расширение (Решение №1). Это требует минимум кода и сохраняет всю мощную логику типового подбора (фильтры по иерархии, характеристики, остатки по складам). Если же требуется бесшовный интерфейс, следует использовать динамический список (Решение №3), аккуратно внедрив его в структуру управляемой формы.