При автоматизации предприятий общественного питания интеграторы часто сталкиваются со связкой бэк-офиса «1С:Общепит 3.0» (разработка компании «1С-Рарус») и фронт-офисного кассового решения Frontol 5/6. На первый взгляд, обе системы популярны и должны иметь бесшовную интеграцию. Однако на практике специалисты часто обнаруживают, что типовой обмен настроить не так просто.
В этой статье мы подробно разберем, почему возникает проблема с выгрузкой меню и номенклатуры, какие штатные механизмы можно использовать, с какими техническими препятствиями вы столкнетесь и как их правильно решить.
Давайте разберемся в архитектуре решений. Разработчик «1С:Общепит» (компания «1С-Рарус») ориентирует пользователей на использование собственных фронт-офисных продуктов — 1С:Ресторан, 1С:Фастфуд или РестАрт. Для этих систем в конфигурации реализован полноценный двусторонний обмен через так называемые Кассовые узлы.
Для стороннего оборудования и программного обеспечения (включая Frontol) в типовом «1С:Общепит» исторически предусмотрена только односторонняя загрузка продаж. То есть система умеет забирать файлы отчетов о розничных продажах, но не имеет стандартной кнопки «Выгрузить меню во Frontol» в привычном интерфейсе общепита. При попытке выполнить выгрузку через стандартное меню продаж пользователи часто заходят в тупик.
Тем не менее, решить эту задачу можно несколькими путями. Рассмотрим их подробно.
Поскольку «1С:Общепит 3.0» построен на базе типовой «1С:Бухгалтерии предприятия», в нем присутствует стандартный механизм платформы 1С для работы с ККМ Offline. Мы можем использовать его для связи с Frontol.
Давайте разберем этот процесс по шагам:
goods.txt).Казалось бы, решение найдено. Но на этом этапе большинство разработчиков и администраторов сталкиваются с серьезной технической проблемой.
Когда мы пытаемся выгрузить файл goods.txt через стандартную БПО, кассовое ПО Frontol при попытке загрузить этот файл выдает ошибку: «В строке №... неверные данные — недопустимое значение в поле 1».
Выясним причину этой ошибки. По умолчанию «1С:Общепит» использует текстовые коды номенклатуры, которые часто содержат префиксы информационной базы и ведущие нули (например, 00-0000015 или СП0000234). Frontol в своем классическом режиме работы ожидает, что в поле «Код товара» (первое поле в строке файла обмена) будет передано строго целое число (числовой идентификатор PLU).
Существует два пути решения этой проблемы.
Это самый простой способ обхода проблемы, не требующий программирования в 1С. Как отмечали участники обсуждения, мы можем настроить сам Frontol на работу с алфавитно-цифровыми кодами.
В настройках Frontol необходимо переключить режим идентификации товаров с числового на строковый. В этом случае Frontol без проблем примет коды вида 00-0000015 в качестве уникальных идентификаторов. При считывании штрихкода или выборе товара на кассе Frontol будет оперировать этими строковыми значениями, и при обратной загрузке отчета о продажах в 1С коллизий не возникнет.
Если перевод Frontol в строковый режим невозможен (например, к кассе подключены весы с ПЛУ-плиткой или другие системы, требующие только числовые коды), нам придется дорабатывать выгрузку со стороны 1С. Для этого лучше всего использовать механизм расширений конфигурации, чтобы не снимать «1С:Общепит» с поддержки.
Нам потребуется написать функцию, которая перед записью данных в файл обмена будет очищать код номенклатуры от префиксов и ведущих нулей, преобразуя его в число.
Рассмотрим пример реализации такой функции на языке 1С:
Функция ПолучитьЧисловойКодДляФронтол(ИсходныйКод) Экспорт
ОчищенныйКод = ИсходныйКод;
// 1. Удаляем префикс базы и тире, если они есть (например, "СП-0000125" -> "0000125")
ПозицияТире = Найти(ОчищенныйКод, "-");
Если ПозицияТире > 0 Тогда
ОчищенныйКод = Сред(ОчищенныйКод, ПозицияТире + 1);
КонецЕсли;
// 2. Очищаем от буквенных символов, если префикс был без тире
// (для этого можно использовать регулярные выражения или посимвольный перебор)
// 3. Удаляем ведущие нули
Пока Лев(ОчищенныйКод, 1) = "0" И ДлинаСтроки(ОчищенныйКод) > 1 Цикл
ОчищенныйКод = Сред(ОчищенныйКод, 2);
КонецЦикла;
Возврат ОчищенныйКод;
КонецФункции
При использовании этого подхода важно помнить о двух моментах:
АБ-000012 и ВГ-000012 превратятся в число 12). За этим нужно строго следить на уровне ведения справочника в 1С.Если мы проанализируем архитектуру «1С:Общепит», то увидим, что в разделе «Продажи» присутствует блок работы с кассовым меню. Мы можем сформировать меню для кассы стандартным документом Установка меню кухни/бара.
Чтобы выгрузить данные, выполним следующие шаги:
Кассовые узлы.Обратите внимание, что этот механизм ориентирован на XML-форматы обмена решений «Рарус». Чтобы подружить его с Frontol, программисту потребуется написать небольшую внешнюю обработку-конвертер, которая будет перехватывать выгруженный XML-файл меню и преобразовывать его в стандартный текстовый формат Frontol.
Если вы не хотите тратить время на написание собственного кода и доработку конфигурации, рассмотрите альтернативные варианты:
Подведем итоги. Настроить обмен между «1С:Общепит 3.0» и Frontol возможно. Простейший путь без программирования — использовать стандартную БПО (ККМ Offline) совместно с переключением Frontol в режим строковых кодов. Если же кассовая дисциплина и оборудование требуют жестких числовых ID, лучшим решением будет создание небольшого расширения 1С для нормализации кодов номенклатуры при обмене.