Как настроить загрузку во Frontol 6 из двух разных баз 1С на одну кассу?

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

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

Проблема 1: Управление уникальностью кодов (SKU)

Первое, с чем мы столкнемся — это коллизия кодов товаров (SKU). Во Frontol основным идентификатором товара является его внутренний код. Если в базе №1 (Продукты) есть хлеб с кодом "100", и в базе №2 (Промка) есть мыло с кодом "100", то при загрузке данные будут затирать друг друга. Чтобы этого избежать, проанализируем систему кодирования.

Разберем самый надежный способ — разделение диапазонов кодов или использование префиксов. Мы можем настроить 1С так, чтобы коды товаров в файле обмена формировались по определенному правилу:

Проанализируем ситуацию со штрихкодами: они также должны быть уникальными в рамках обеих баз. Если штрихкоды пересекаются, Frontol не сможет однозначно определить товар при сканировании. Проверим уникальность справочников перед запуском обмена.

Проблема 2: Отмена полной очистки справочника на кассе

Стандартная обработка 1С при выгрузке данных в формате АТОЛ (который является родным для Frontol) добавляет в начало файла управления команды полной очистки справочников. Рассмотрим эти команды:

Если мы выгрузим данные из Базы №1, а затем из Базы №2, вторая выгрузка просто удалит всё, что прислала первая. Чтобы этого избежать, нам необходимо внести изменения в код 1С. Выясним, как это сделать правильно через механизм расширений, не снимая конфигурацию с поддержки.

Нам нужно найти общий модуль ОфлайнОборудованиеАтолККМВызовСервера (название может незначительно отличаться в зависимости от версии 1С:Розница или 1С:УТ) и модифицировать процедуру формирования файла. Рассмотрим пример кода, который нужно "заглушить":


// В расширении для общего модуля
&Вместо("ФайлОчисткиДанных")
Процедура Расш1_ФайлОчисткиДанных(Файл)
    // Строки, которые приводят к удалению данных в Frontol, нужно закомментировать
    // Файл.ДобавитьСтроку("$$$DELETEALLWARES");
    // Файл.ДобавитьСтроку("$$$DELETEALLBARCODES");
    // Файл.ДобавитьСтроку("$$$DELETEALLASPECTREMAINS");
    
    // Вместо полной очистки можно использовать выборочное удаление или просто пропустить этот шаг
КонецПроцедуры

После такой модификации Frontol будет работать в режиме добавления/обновления: если товар с таким кодом уже есть, его данные обновятся, если нет — создастся новый. При этом товары из другой базы, которых нет в текущем файле загрузки, останутся нетронутыми.

Проблема 3: Синхронизация файлов-флагов

Проанализируем механизм обмена. Frontol постоянно мониторит папку обмена на наличие файла-флага (обычно load.ok). Как только файл появляется, касса начинает загрузку текстового файла с данными. Если обе базы 1С попытаются записать файлы одновременно, возникнет "состояние гонки".

Рассмотрим алгоритм безопасного обмена:

  1. Настроим в каждой базе 1С свою подпапку для обмена (например, /Obmen/Base1/ и /Obmen/Base2/).
  2. Создадим простой .bat скрипт или небольшую службу, которая будет проверять наличие файлов в этих папках.
  3. Скрипт должен по очереди перемещать файлы в основную папку обмена Frontol. Сначала файл с товарами, затем файл-флаг. После того как Frontol обработает файлы (удалит их или создаст файл ответа), скрипт подает следующую порцию данных из другой базы.

Проблема 4: Обработка отчетов о продажах

После закрытия смены или по запросу Frontol выгружает файл report.txt. В нем содержатся транзакции по товарам из обеих баз. При попытке загрузить этот файл в Базу №1, 1С начнет выдавать ошибки, так как не найдет в своем справочнике товары из Базы №2.

Выясним, как решить эту задачу. Нам потребуется доработка алгоритма загрузки отчета. В коде обработки обмена (обычно это метод ЗагрузитьДанныеИзФайлаЧеков) необходимо добавить условие проверки существования товара. Посмотрим на логическую схему:


// Пример логики при чтении строки файла отчета
Для Каждого СтрокаОтчета Из МассивСтрок Цикл
    Товар = Справочники.Номенклатура.НайтиПоКоду(СтрокаОтчета.КодТовара);
    Если Товар.Пустая() Тогда
        // Если товар не найден в этой базе, просто игнорируем строку
        // и переходим к следующей, не вызывая исключения.
        Продолжить;
    КонецЕсли;
    // ... логика обработки продажи ...
КонецЦикла

Важный момент: ни одна из баз не должна удалять файл report.txt сразу после загрузки. Нужно настроить 1С так, чтобы она либо переименовывала файл (чтобы вторая база могла его найти), либо использовать скрипт-посредник, который будет копировать отчет в обе рабочие директории баз.

Дополнительная аналитика: Группы печати

Хотя фискальный регистратор один, мы рекомендуем использовать механизм Групп печати во Frontol для удобства контроля. Мы можем назначить товарам из Базы №1 Группу печати "Продукты", а товарам из Базы №2 — Группу печати "Промтовары". Это позволит:

Подведем итог: реализация схемы "1 касса — 2 базы" вполне реальна. Основные усилия должны быть направлены на обеспечение уникальности кодов SKU и кастомизацию кода 1С в части удаления команд очистки справочника и игнорирования "чужих" товаров при загрузке продаж.

← На главную