Как исправить ошибку «Регистрация продаж без учета кода товара не допускается» при загрузке отчетов из Frontol в 1С:УТ

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

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

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

Выясняем причину: почему возникает ошибка?

Сбой происходит из-за того, что на кассе Frontol была совершена продажа по так называемой «свободной цене». Это ситуация, когда кассир пробивает товар или услугу вручную, вводя только цену и количество, без выбора конкретной позиции из справочника номенклатуры (без указания PLU-кода или штрихкода).

Во Frontol такая операция записывается в файл обмена (обычно это текстовый файл формата АТОЛ *.txt) как транзакция типа 1 (регистрация без учета кода товара). Стандартный же механизм обмена в 1С ориентирован на транзакции типа 11 (регистрация с кодом товара). Когда обработка загрузки в 1С:УТ встречает строку с типом транзакции 1, она не находит привязанного кода номенклатуры и прерывает чтение файла с ошибкой.

Проанализируем структуру строки файла обмена для транзакции типа 1:

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

Способ 1. Полный запрет продаж по свободной цене во Frontol

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

Выполним настройку во Frontol по шагам:

  1. Откройте утилиту «Frontol Администратор» и авторизуйтесь с правами администратора.
  2. Перейдите в раздел меню «Настройки» -> «Профили пользователей».
  3. Выберите профиль, под которым работают ваши кассиры, и откройте вкладку «Права».
  4. Разверните дерево прав: «Документ продажи» -> «Регистрация».
  5. Найдите пункт «Регистрация по свободной цене» (или «Регистрация без кода») и снимите с него флаг (запретите данное действие).
  6. Сохраните изменения. Теперь кассиры физически не смогут пробивать чеки без выбора конкретной номенклатуры.

Способ 2. Использование номенклатуры типа «Услуга» (Решение без изменения кода)

Если продавать позиции по свободной цене все-таки необходимо (например, сопутствующие услуги, доставку или мелкие работы, перечень которых постоянно меняется), нам нужно научить 1С правильно интерпретировать такие продажи.

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

Рассмотрим более изящное и правильное решение с использованием механизма услуг:

  1. В справочнике «Номенклатура» в 1С создайте новую карточку с наименованием, например, «Услуга по свободной цене».
  2. Установите тип номенклатуры — «Услуга» (или «Работа»). Для таких позиций в 1С не ведется количественный складской учет, поэтому их можно продавать в любых объемах без контроля остатков и без оформления фиктивного прихода.
  3. В регистре сведений КодыТоваровПодключаемогоОборудованияOffline найдите созданную услугу и запомните (или запишите) ее уникальный код ККМ.
  4. В настройках параметров обмена ККМ Offline укажите этот код в поле «ПЛУ по умолчанию для свободной цены» (если данная настройка поддерживается вашей версией конфигурации).

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

Способ 3. Программная подмена кода транзакции в модуле 1С

Если штатные механизмы не справляются с транзакцией типа 1, мы можем доработать алгоритм загрузки отчета. Наша задача — перехватить транзакцию типа 1 в процессе чтения файла обмена, подменить ее тип на транзакцию регистрации с кодом (тип 11) и принудительно подставить код нашей созданной услуги.

Для реализации этого метода найдите в конфигураторе общий модуль ПодключаемоеОборудованиеАтолККМOfflineКлиент. Внутри модуля найдите функцию ЗагрузитьОтчет(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры).

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


Если ТипТранзакции = 1 Тогда
    // Регистрация без учета кода товара.
    ВыходныеПараметры.Добавить(999);
    ВыходныеПараметры.Добавить(НСтр("ru='Регистрация продаж без учета кода товара не допускается'"));
    Результат = Ложь;
    Прервать;
КонецЕсли;

Заменим этот блок алгоритмом, который будет выполнять подмену данных «на лету»:


Если ТипТранзакции = 1 Тогда
    // Задаем код нашей предопределенной услуги, созданной в 1С (например, 112076)
    КодСтр = "112076"; 
    
    // Получаем финансовые данные из строки транзакции Frontol
    ЦенаСтр       = СтрПолучитьСтроку(ТекущаяСтрока, 10);
    КоличествоСтр = СтрПолучитьСтроку(ТекущаяСтрока, 11);
    СуммаСтр      = СтрПолучитьСтроку(ТекущаяСтрока, 16);
    Артикул       = СтрПолучитьСтроку(ТекущаяСтрока, 18);
    
    Попытка
        ПолеОшибки = НСтр("ru='Код товара (8)'");
        Код        = Число(КодСтр);
        ПолеОшибки = НСтр("ru='Цена товара (10)'");
        Цена       = Число(ЦенаСтр);
        ПолеОшибки = НСтр("ru='Количество товара (11)'");
        Количество = Число(КоличествоСтр);
        ПолеОшибки = НСтр("ru='Сумма продажи (16)'");
        Сумма      = Число(СуммаСтр);
    Исключение
        ВыходныеПараметры.Добавить(999);
        ВыходныеПараметры.Добавить(НСтр("ru='Неверный формат файла. Невозможно преобразовать к числу поле:'") + Символы.НПП + ПолеОшибки);
        Результат = Ложь;
        Прервать;
    КонецПопытки;
    
    // Формируем структуру позиции для отчета о продажах
    Врем                = Новый Структура("Код, Цена, Количество, Сумма, Артикул, НомерДокумента, НомерСмены");
    Врем.Код            = Код;
    Врем.Цена           = Цена;
    Врем.Количество     = Количество;
    Врем.Сумма          = Сумма;
    Врем.Артикул        = Артикул;
    Врем.НомерДокумента = НомерДокумента;
    Врем.НомерСмены     = НомерСмены;
    
    // Если ваша конфигурация использует расширенные реквизиты, перенесем их
    Если НаличиеДополнительныхРеквизитов Тогда
        Врем.Вставить("ки_ДатаОтчета", ки_ДатаОтчета);
    КонецЕсли;
    
    Позиции.Добавить(Врем);
КонецЕсли;

Для повышения гибкости решения мы рекомендуем не прописывать код услуги жестко в коде (КодСтр = "112076"), а создать дополнительную константу в 1С или добавить реквизит в настройки ККМ Офлайн. В этом случае код будет динамически получать значение из созданной настройки:

КодСтр = СокрЛП(Константы.УслугаДляПродажПоСвободнойЦене.Получить().Код);

Способ 4. Безопасное внедрение доработки через расширение конфигурации

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

Рассмотрим порядок действий:

  1. Откройте конфигуратор вашей базы данных 1С.
  2. Перейдите в меню «Конфигурация» -> «Расширения конфигурации» и добавьте новое расширение (например, с именем ИсправлениеЗагрузкиФронтол). Укажите назначение расширения — «Адаптация».
  3. В дереве основной конфигурации найдите общий модуль ПодключаемоеОборудованиеАтолККМOfflineКлиент, нажмите на него правой кнопкой мыши и выберите команду «Добавить в расширение».
  4. В модуле расширения перехватите функцию ЗагрузитьОтчет, используя аннотацию &Вместо, или воспользуйтесь директивой &ИзменениеИКонтроль для точечной замены только нужного блока кода.

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

Важное предупреждение: Маркировка и требования ФФД 1.2

Проанализируем правовые последствия использования продаж по свободной цене. В современных реалиях розничной торговли в РФ (в рамках законов о применении ККТ 54-ФЗ и требований системы маркировки «Честный Знак») продажа товаров без конкретного указания кода маркировки и признака предмета расчета категорически запрещена.

Если кассир попытается продать маркированный товар (табак, обувь, молочную продукцию, легкую промышленность) под видом «свободной услуги без кода», это повлечет за собой некорректное формирование кассового чека, невывод кода маркировки из оборота и, как следствие, крупные штрафы со стороны налоговых органов и контролирующих инстанций.

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

← На главную