Как настроить индивидуальную иерархию номенклатуры для кассы Frontol при выгрузке из 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

При автоматизации розничной торговли часто возникает задача: на рабочем месте кассира с сенсорным экраном (тач-терминал, тачпад) требуется отображать товары в компактном, удобном для быстрого нажатия виде. В то же время в учетной системе 1С и на обычных кассах со сканерами штрихкодов используется классическая подробная иерархия каталога. Разберем, как реализовать индивидуальное дерево каталога для отдельной кассы под управлением кассового ПО Frontol и какие архитектурные решения в 1С будут наиболее эффективными.

Анализ проблемы и ограничений

Проанализируем типовую ситуацию: в информационной базе 1С содержится более 100 000 – 200 000 позиций номенклатуры, структурированных по сложным товарным категориям. На тач-кассу требуется выгружать ограниченный перечень наиболее ходовых позиций (например, до 3 000 товаров) в упрощенном дереве групп. Если просто добавить реквизит РодительДляТачпада в типовой справочник Номенклатура, мы столкнемся с серьезными техническими минусами:

  1. Реструктуризация тяжелой таблицы: добавление нового реквизита в справочник с сотнями тысяч записей блокирует базу и замедляет обновление конфигурации.
  2. Хранение пустых данных: для 197 000 позиций реквизит останется незаполненным, создавая избыточную нагрузку на СУБД.
  3. Негибкость: если в будущем появится еще одна точка с другой спецификой категорий, придется создавать очередные реквизиты.

Рассмотрим несколько альтернативных вариантов реализации — от настроек на стороне кассы до правильного проектирования структуры данных в 1С.

Вариант 1. Настройка экранных меню во Frontol (без изменения выгрузки из 1С)

Прежде чем модифицировать механизмы выгрузки в 1С, выясним возможности самого кассового ПО Frontol. Для сенсорных интерфейсов в программе предусмотрен специализированный механизм визуальных экранных меню и макетов экрана.

В этом сценарии товары и группы выгружаются из 1С стандартным образом, а визуальная структура настраивается непосредственно во Frontol:

  1. В редакторе интерфейса Frontol создаем экранное меню в виде плиток (крупные кнопки с текстом или пиктограммами).
  2. Кнопки верхнего уровня привязываем к вызову подменю (виртуальным папкам).
  3. Кнопки нижнего уровня связываем с конкретными товарами по их кодам или штрихкодам.

Такой подход полностью исключает вмешательство в конфигурацию 1С и правила формирования файлов выгрузки, оставляя справочники чистыми.

Вариант 2. Использование независимого регистра сведений в 1С

Если визуальных возможностей кассового интерфейса недостаточно и требуется сформировать физически другое дерево групп в файле обмена, оптимальным архитектурным решением является создание непериодического независимого регистра сведений, например, ИерархияНоменклатурыКасс.

Спроектируем структуру регистра:

  1. Измерение УзелОбмена (или КассаККМ): ссылка на кассу или узел плана обмена. Это позволит задавать индивидуальные деревья для разных терминалов.
  2. Измерение Номенклатура: ссылка на справочник Номенклатура.
  3. Ресурс РодительскаяГруппа: строка или ссылка на специально созданный справочник виртуальных групп.

Разберем преимущества этого способа: в регистре будут храниться только нужные 3 000 записей. При выгрузке данных в файл обмена мы соединяем исходный список товаров с этим регистром сведений левым соединением:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Товары.Ссылка КАК Номенклатура,
    |	Товары.Код КАК КодТовара,
    |	Товары.Наименование КАК Наименование,
    |	ЕСТЬNULL(КастомнаяИерархия.РодительскаяГруппа, Товары.Родитель) КАК РодительДляКассы
    |ИЗ
    |	Справочник.Номенклатура КАК Товары
    |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИерархияНоменклатурыКасс КАК КастомнаяИерархия
    |		ПО Товары.Ссылка = КастомнаяИерархия.Номенклатура
    |		И КастомнаяИерархия.УзелОбмена = &ТекущийУзел
    |ГДЕ
    |	НЕ Товары.ЭтоГруппа";

Если для текущей кассы в регистре задана кастомная группа, товар выгрузится в нее, а если нет — в свое стандартное дерево либо будет исключен из выгрузки условием в блоке ГДЕ.

Вариант 3. Использование отдельного справочника ассортимента

Другой практичный вариант — создание вспомогательного иерархического справочника, например, АссортиментТачКассы. В этот справочник заносятся только нужные папки верхнего уровня (например, «Выпечка», «Напитки», «Снеки»), а в подчиненных элементах указывается ссылка на базовую номенклатуру.

Посмотрим на логику построения выгрузки в этом случае:

  1. Обработка выгрузки обращается не к справочнику Номенклатура, а к справочнику АссортиментТачКассы.
  2. Для каждой папки формируется строка группы в формате обмена АТОЛ/Frontol со своим уникальным идентификатором.
  3. Для элементов справочника извлекаются данные реальной номенклатуры (штрихкод, цена, ставка НДС), но в качестве родительской группы передается код папки из вспомогательного справочника.

Это исключает разрастание пустых реквизитов и позволяет оператору базы данных управлять составом и структурой меню на кассе независимо от бухгалтерского каталога.

Особенности выгрузки структуры в формате обмена АТОЛ / Frontol

При модификации правил выгрузки необходимо учитывать технические нюансы протокола обмена Frontol:

  1. Уникальность кодов: идентификаторы виртуальных групп, сформированных для тачпада, не должны пересекаться с существующими кодами номенклатуры и стандартных папок. Рекомендуется выделять для них отдельный числовой или символьный диапазон.
  2. Очистка старых данных (команда $$$DELETEALL): если на кассу ранее уже загружалась номенклатура по стандартной иерархии, простая частичная перезагрузка переместит товары в новые папки, но оставит в кассовой базе пустые старые группы («хвосты»). Поэтому первый сеанс обмена с новой структурой каталога обязательно должен сопровождаться полной очисткой базы товаров на кассе.
  3. Связка родитель-потомок: в текстовом файле загрузки Frontol группы должны выгружаться раньше, чем входящие в них элементы номенклатуры, чтобы кассовое ПО могло корректно сопоставить родительский код.
← На главную