Как в «1С:Розница» настроить печать разных кассиров на чеках при распределении продаж на две организации?

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

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

Главный бухгалтер организации может справедливо потребовать, чтобы на чеках каждого юридического лица печаталось имя сотрудника, официально оформленного именно в этой организации. Однако штатный механизм «1С:Розница» в рамках одного сеанса пользователя отправляет на обе ККТ ФИО текущего авторизованного пользователя 1С. В этой статье мы подробно разберем, как решить эту проблему с точки зрения закона, а также рассмотрим технические программные решения.

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

Опасения бухгалтерии абсолютно оправданны и связаны с требованиями Федерального закона № 54-ФЗ. Согласно актуальным форматам фискальных документов (ФФД), в фискальном чеке обязательно должны присутствовать следующие реквизиты:

  1. ФИО кассира (Тег 1021) — данные сотрудника, который непосредственно осуществляет расчет.
  2. ИНН кассира (Тег 1203) — индивидуальный налоговый номер этого сотрудника.

Эти реквизиты передаются через оператора фискальных данных (ОФД) напрямую в Федеральную налоговую службу (ФНС). Налоговые органы в автоматическом режиме могут сопоставить ИНН кассира из чеков со сведениями о застрахованных лицах, предоставляемыми организацией в рамках персонифицированной отчетности (формы ЕФС-1, РСВ). Если выяснится, что чеки от имени ООО пробивает сотрудник, который там официально не трудоустроен, организации грозит штраф за нарушение трудового законодательства и некорректное применение ККТ.

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

Решение 1. Организационный (самый безопасный способ)

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

Решение 2. Программная подмена кассира через расширение 1С

Если оформить совместительство невозможно, задачу приходится решать программным путем. В «1С:Розница» (начиная с версий 2.2 и выше) вывод данных на кассу происходит через Библиотеку подключаемого оборудования (БПО). Нам необходимо перехватить отправку XML-пакета данных на фискальный регистратор и подменить ФИО и ИНН кассира в зависимости от организации, к которой принадлежит пробиваемый чек.

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

Рассмотрим пример реализации кода в расширении. Нам необходимо перехватить процедуру подготовки данных для фискализации чека. Для этого можно использовать механизм &Вместо для функций формирования XML-пакета ККТ:


&Вместо("СформироватьXMLПакетДляФискализации")
Функция Расш1_СформироватьXMLПакетДляФискализации(ПараметрыРегистрации, ДанныеЧека)
    
    // Получаем организацию из данных чека
    ОрганизацияЧека = ДанныеЧека.Организация;
    
    // Переменные для подмены реквизитов кассира
    НовыйКассирФИО = "";
    НовыйКассирИНН = "";
    
    // Анализируем организацию чека. В реальном решении лучше использовать 
    // регистр сведений соответствия или реквизиты организации, но для примера сделаем жесткую привязку:
    Если ОрганизацияЧека = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7701000001") Тогда
        НовыйКассирФИО = "Иванова Мария Ивановна";
        НовыйКассирИНН = "770102030405";
    ИначеЕсли ОрганизацияЧека = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7702000002") Тогда
        НовыйКассирФИО = "Петрова Анна Сергеевна";
        НовыйКассирИНН = "770205060708";
    КонецЕсли;
    
    // Если соответствие найдено, подменяем параметры фискализации
    Если Не ПустаяСтрока(НовыйКассирФИО) Тогда
        ПараметрыРегистрации.Кассир = НовыйКассирФИО;
        ПараметрыРегистрации.КассирИНН = НовыйКассирИНН;
    КонецЕсли;
    
    // Передаем измененную структуру параметров в стандартный обработчик БПО
    Возврат ПродолжитьВызов(ПараметрыРегистрации, ДанныеЧека);
    
КонецФункции

Для гибкости настройки рекомендуется создать в конфигурации (или в расширении) простой регистр сведений СоответствиеКассировОрганизациям с измерениями Пользователь, Организация и ресурсами ФизическоеЛицо (откуда будет браться ФИО для чека) и ИНН. В этом случае код не придется переписывать при смене сотрудников.

Решение 3. Использование таблиц пользователей ККТ (с ограничениями)

Иногда специалисты предлагают использовать внутреннюю память самой кассы. В фискальных регистраторах (например, АТОЛ или Штрих-М) есть так называемая "Таблица операторов" или "Таблица кассиров", куда можно вручную занести имена сотрудников через тест драйвера ККТ. Смысл метода заключается в том, чтобы заставить ККТ использовать встроенные имена вместо тех, что отправляет 1С.

Однако проанализируем ситуацию с современными драйверами (в частности, под ФФД 1.05 и 1.2):

Поэтому полностью "заглушить" отправку имени из 1С не получится. Если вы хотите использовать таблицы ККТ, вам все равно придется дорабатывать 1С так, чтобы она отправляла на ККТ не ФИО конкретного человека, а условный идентификатор (например, "Кассир 1"), который драйвер ККТ уже сможет сопоставить со своей внутренней таблицей пользователей. Тем не менее, решение через расширение 1С (Решение 2) является гораздо более надежным, гибким и простым в обслуживании.

← На главную