При автоматизации розничной торговли часто возникает задача: на рабочем месте кассира с сенсорным экраном (тач-терминал, тачпад) требуется отображать товары в компактном, удобном для быстрого нажатия виде. В то же время в учетной системе 1С и на обычных кассах со сканерами штрихкодов используется классическая подробная иерархия каталога. Разберем, как реализовать индивидуальное дерево каталога для отдельной кассы под управлением кассового ПО Frontol и какие архитектурные решения в 1С будут наиболее эффективными.
Проанализируем типовую ситуацию: в информационной базе 1С содержится более 100 000 – 200 000 позиций номенклатуры, структурированных по сложным товарным категориям. На тач-кассу требуется выгружать ограниченный перечень наиболее ходовых позиций (например, до 3 000 товаров) в упрощенном дереве групп. Если просто добавить реквизит РодительДляТачпада в типовой справочник Номенклатура, мы столкнемся с серьезными техническими минусами:
Рассмотрим несколько альтернативных вариантов реализации — от настроек на стороне кассы до правильного проектирования структуры данных в 1С.
Прежде чем модифицировать механизмы выгрузки в 1С, выясним возможности самого кассового ПО Frontol. Для сенсорных интерфейсов в программе предусмотрен специализированный механизм визуальных экранных меню и макетов экрана.
В этом сценарии товары и группы выгружаются из 1С стандартным образом, а визуальная структура настраивается непосредственно во Frontol:
Такой подход полностью исключает вмешательство в конфигурацию 1С и правила формирования файлов выгрузки, оставляя справочники чистыми.
Если визуальных возможностей кассового интерфейса недостаточно и требуется сформировать физически другое дерево групп в файле обмена, оптимальным архитектурным решением является создание непериодического независимого регистра сведений, например, ИерархияНоменклатурыКасс.
Спроектируем структуру регистра:
УзелОбмена (или КассаККМ): ссылка на кассу или узел плана обмена. Это позволит задавать индивидуальные деревья для разных терминалов.Номенклатура: ссылка на справочник Номенклатура.РодительскаяГруппа: строка или ссылка на специально созданный справочник виртуальных групп.Разберем преимущества этого способа: в регистре будут храниться только нужные 3 000 записей. При выгрузке данных в файл обмена мы соединяем исходный список товаров с этим регистром сведений левым соединением:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Ссылка КАК Номенклатура,
| Товары.Код КАК КодТовара,
| Товары.Наименование КАК Наименование,
| ЕСТЬNULL(КастомнаяИерархия.РодительскаяГруппа, Товары.Родитель) КАК РодительДляКассы
|ИЗ
| Справочник.Номенклатура КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИерархияНоменклатурыКасс КАК КастомнаяИерархия
| ПО Товары.Ссылка = КастомнаяИерархия.Номенклатура
| И КастомнаяИерархия.УзелОбмена = &ТекущийУзел
|ГДЕ
| НЕ Товары.ЭтоГруппа";
Если для текущей кассы в регистре задана кастомная группа, товар выгрузится в нее, а если нет — в свое стандартное дерево либо будет исключен из выгрузки условием в блоке ГДЕ.
Другой практичный вариант — создание вспомогательного иерархического справочника, например, АссортиментТачКассы. В этот справочник заносятся только нужные папки верхнего уровня (например, «Выпечка», «Напитки», «Снеки»), а в подчиненных элементах указывается ссылка на базовую номенклатуру.
Посмотрим на логику построения выгрузки в этом случае:
Номенклатура, а к справочнику АссортиментТачКассы.Это исключает разрастание пустых реквизитов и позволяет оператору базы данных управлять составом и структурой меню на кассе независимо от бухгалтерского каталога.
При модификации правил выгрузки необходимо учитывать технические нюансы протокола обмена Frontol:
$$$DELETEALL): если на кассу ранее уже загружалась номенклатура по стандартной иерархии, простая частичная перезагрузка переместит товары в новые папки, но оставит в кассовой базе пустые старые группы («хвосты»). Поэтому первый сеанс обмена с новой структурой каталога обязательно должен сопровождаться полной очисткой базы товаров на кассе.