При интеграции 1С с кассовым программным обеспечением Frontol через стандартный механизм обмена с ККМ Offline часто возникает ситуация: в конфигурации 1С номенклатура отмечена как алкогольная, таблица выгрузки содержит соответствующую колонку, но после загрузки на кассу флаг алкогольной продукции в карточке товара остается не установленным. Разберем, почему возникает эта ошибка и как корректно передать признак алкоголя в кассовую систему.
Типовой вызов выгрузки через подсистему торгового оборудования выглядит следующим образом:
Результат = ПолучитьСерверТО().ВыгрузитьТоварыККМ(ККМOffline, Товары, Не ФлажокОчистить);
Даже если переданная в метод таблица Товары содержит колонку АлкогольнаяПродукция со значением Истина, на кассу признак не попадает. Проанализируем цепочку передачи данных:
В результате Frontol получает строку товара без алкогольных реквизитов и применяет к карточке значения по умолчанию (обычный товар).
Формат обмена Frontol представляет собой текстовые строки с разделителем «точка с запятой» (;). Каждая позиция в строке строго регламентирована документацией АТОЛ.
За признак алкогольной продукции во Frontol 4 (в поздних сборках) и Frontol 5/6 отвечает поле №55 (тип номенклатуры):
Важно учитывать, что для полноценной работы с ЕГАИС кассовое ПО Frontol обычно ожидает заполнения связанной группы алкогольных полей:
100);0.5);1 или 0);1 — маркированная, 0 — немаркированная, например, разливное пиво);40.0).Кроме того, для алкогольной продукции во Frontol обязательно должен передаваться штрихкод (команда $$$ADDQUANTITY или $$$REPLACEQUANTITY), иначе касса заблокирует продажу алкоголя.
Разберем по шагам, как добавить передачу реквизита в коде обработки обслуживания:
СформироватьТекстЗагрузки, ПодготовитьДанные или аналогичную).$$$ADDWARES или $$$REPLACEWARES.;) до 55-й позиции и вставить значение признака.Рассмотрим пример программного формирования нужных полей в строке:
// Определяем признак алкоголя: 1 - да, 0 - нет
ПризнакАлкоголя = ?(СтрокаТовара.АлкогольнаяПродукция = Истина, "1", "0");
// Если текущая строка формируется конкатенацией полей:
// Допустим, последнее выгружаемое базовое поле имеет индекс 25.
// Нам необходимо дополнить строку пустыми полями с 26 по 52:
ПустыеПоля = ";;;;;;;;;;;;;;;;;;;;;;;;;;;"; // 27 разделителей
КодЕГАИС = ?(ЗначениеЗаполнено(СтрокаТовара.КодЕГАИС), Строка(СтрокаТовара.КодЕГАИС), "");
ЕмкостьТары = ?(СтрокаТовара.Объем > 0, Формат(СтрокаТовара.Объем, "ЧДЦ=3; ЧРД=.; ЧГ=0"), "");
ПризнакМарки = ?(СтрокаТовара.Маркированная = Истина, "1", "0");
Крепость = ?(СтрокаТовара.Крепость > 0, Формат(СтрокаТовара.Крепость, "ЧДЦ=2; ЧРД=.; ЧГ=0"), "");
// Формируем поля с 53 по 57
АлкогольныйБлок = КодЕГАИС + ";" + ЕмкостьТары + ";" + ПризнакАлкоголя + ";" + ПризнакМарки + ";" + Крепость + ";";
СтрокаВыгрузки = СтрокаВыгрузки + ПустыеПоля + АлкогольныйБлок;
Важное предупреждение: строго следите за числом разделителей «точка с запятой». Пропуск даже одного знака ; приведет к смещению всей структуры, и Frontol выдаст ошибку формата строки («Неверный формат загрузки данных») либо запишет некорректные значения в другие поля карточки.
Если нет желания вручную модифицировать код формирования текстового файла, рекомендуется обновить саму обработку обслуживания:
АлкогольнаяПродукция, Объем, Крепость обработка автоматически выгружает поля с 53 по 57.ТорговоеОборудование и выполните повторную полную выгрузку товаров.Если ассортимент алкоголя стабилен и меняется редко, можно не вносить изменения в код 1С: