В практике работы с 1С:Управление торговлей 11.4 часто возникает ситуация, когда в информационной базе ведется учет по нескольким организациям, и требования к оформлению кассовых чеков различаются. По умолчанию система 1С транслирует в ККТ данные текущего авторизованного пользователя (точнее, физического лица, связанного с ним). Однако для определенных бизнес-процессов может потребоваться, чтобы по конкретной организации в чеке всегда фигурировало одно и то же доверенное лицо, вне зависимости от того, кто именно нажал кнопку «Пробить чек».
Проанализируем ситуацию: почему настройки самого драйвера (например, АТОЛ) не помогают и как программно или организационно добиться желаемого результата.
Многие технические специалисты пытаются решить задачу «в лоб» — запрограммировать ФИО кассира непосредственно в таблицах ККТ через драйвер АТОЛ. Однако современные версии драйверов (особенно 10-й серии) и требования ФФД (формата фискальных данных) работают иначе. При печати чека из 1С программа отправляет на кассовый аппарат XML-пакет с параметрами операции. В этом пакете передаются тег 1021 (Кассир) и тег 1203 (ИНН кассира).
Важный нюанс: данные, переданные из управляющей программы (1С), имеют абсолютный приоритет над данными, зашитыми в памяти ККТ. Как только 1С передает значение в теге 1021, аппарат обязан напечатать именно его. Поэтому для решения задачи нам необходимо вмешаться в процесс формирования этого XML-пакета внутри 1С.
Рассмотрим самый простой способ, не требующий навыков программирования и изменения конфигурации. Логика 1С такова: Пользователь -> Физическое лицо -> ФИО в чеке.
Если нам нужно, чтобы чеки пробивались от имени определенного сотрудника, мы можем:
Плюсы: типовой функционал, не нужно обновлять расширения.
Минусы: пользователям придется открывать несколько сеансов 1С или постоянно перезаходить в систему, если они работают одновременно с разными организациями. Как правило, в условиях интенсивных продаж это решение признается неудобным.
Выясним причину, по которой 1С подставляет данные пользователя. В коде конфигурации существует процедура, которая подготавливает XML-структуру параметров для передачи драйверу. Чтобы переопределить данные кассира для конкретной организации, нам необходимо создать расширение и перехватить формирование XML.
Наиболее подходящим местом для внесения изменений в УТ 11.4 является функция СформироватьТаблицуПараметровДляОперацииФН. Разберем по шагам, как модифицировать этот код.
Нам нужно найти фрагмент, где заполняется атрибут CashierName. В типовом коде это выглядит примерно так:
ЗаписьXML.ЗаписатьАтрибут("CashierName", XMLСтрока(?(СтруктураПараметров.Свойство("Кассир"), XMLСтрока(СтруктураПараметров.Кассир), НСтр("ru='Администратор'"))));
Чтобы реализовать подмену, проанализируем структуру параметров. Мы можем добавить условие по ИНН организации или по ее наименованию. Рассмотрим пример кода, который можно внедрить через расширение (метод &Вместо или &После с модификацией структуры):
// В процедуре формирования параметров чека
Если СтруктураПараметров.Свойство("ОрганизацияИНН") И СтруктураПараметров.ОрганизацияИНН = "7701010101" Тогда
// Заменяем ФИО кассира на фиксированное значение
ИмяКассираДляЧека = "Иванов Иван Иванович";
ИННКассираДляЧека = "770202020202";
Иначе
// Берем стандартные данные из параметров
ИмяКассираДляЧека = ?(СтруктураПараметров.Свойство("Кассир"), СтруктураПараметров.Кассир, "Администратор");
ИННКассираДляЧека = ?(СтруктураПараметров.Свойство("КассирИНН"), СтруктураПараметров.КассирИНН, "");
КонецЕсли;
// Далее записываем это в XML
ЗаписьXML.ЗаписатьАтрибут("CashierName", XMLСтрока(ИмяКассираДляЧека));
ЗаписьXML.ЗаписатьАтрибут("CashierINN", XMLСтрока(ИННКассираДляЧека));
В зависимости от версии БСП (Библиотеки стандартных подсистем), используемой в вашей версии УТ 11.4, функции формирования XML могут находиться в разных модулях. Рекомендуется обратить внимание на:
МенеджерОборудованияВызовСервера.ПодключаемоеОборудованиеУниверсальныйДрайверКлиент (или аналогичные модули для конкретных типов драйверов).Проанализируем ситуацию с передачей ИНН. Важно помнить: согласно ФЗ-54, если вы меняете ФИО кассира (тег 1021), вы обязаны передать и соответствующий ему ИНН (тег 1203). Если в чеке будет ФИО одного человека, а ИНН другого — это может стать поводом для проверки со стороны налоговых органов из-за логического несоответствия данных в ОФД.
При использовании расширения постарайтесь не зашивать ИНН организации прямо в код. Лучше всего:
КассыККМ или Организации (например, «Фиксированный кассир для чеков»).ПараметрыСеанса.ТекущийПользователь.Посмотрим на пример логики в расширении для модуля МенеджерОборудованияУниверсальныйДрайвер:
&Вместо("СформироватьXMLПакетДляЧека")
Функция Мой_СформироватьXMLПакетДляЧека(ПараметрыЧека, ДанныеКассира)
// Проверяем нашу организацию
Если ПараметрыЧека.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7701010101") Тогда
// Подменяем данные кассира в структуре перед формированием XML
ДанныеКассира.Наименование = "Уполномоченный кассир";
ДанныеКассира.ИНН = "123456789012";
КонецЕсли;
// Вызываем стандартную генерацию пакета с уже измененными данными
Возврат ПродолжитьВызов(ПараметрыЧека, ДанныеКассира);
КонецФункции
Такой подход является наиболее гибким, так как позволяет сотруднику работать под своим основным логином, видеть свои документы в базе, но при этом соблюдать требования печати чеков для конкретной торговой точки или организации.
Перед внедрением подобных правок обязательно проконсультируйтесь с юристом или главным бухгалтером. Законодательство требует, чтобы в чеке были указаны данные лица, осуществившего расчет. Если «фиксированный кассир» фактически не присутствует на месте расчетов, это может быть интерпретировано как нарушение правил применения ККТ. Однако, если это внутреннее доверенное лицо или используется автоматизированная система, такие решения часто применяются на практике.