Почему при открытии смены в 1С:БП 3.0 и Штрих-М не передается ИНН кассира в ОФД и как это исправить?

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

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

Шаг 1. Точная идентификация проблемы: ИНН организации или ИНН кассира?

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

В нашей ситуации проблема именно с тегом 1203. ИНН организации (тег 1018) передается корректно, а вот ИНН сотрудника, открывающего смену, — нет.

Шаг 2. Стандартная проверка настроек в 1С

Прежде чем переходить к сложным методам, необходимо выполнить базовую проверку данных в 1С. Часто проблема кроется в незаполненных полях. Проверьте следующую цепочку:

  1. Откройте карточку пользователя, под которым осуществляется вход в 1С и открытие смены (Администрирование -> Настройки пользователей и прав -> Пользователи).
  2. Убедитесь, что для этого пользователя в поле «Физическое лицо» выбрана корректная запись.
  3. Перейдите в карточку этого физического лица (Справочники -> Физические лица).
  4. Проверьте, что в карточке физического лица заполнено поле «ИНН».

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

Шаг 3. Диагностика через Тест драйвера ККТ «Штрих-М»

Чтобы окончательно убедиться, что проблема на стороне 1С, а не кассового аппарата, воспользуемся утилитой «Тест драйвера Штрих-М». Эта утилита позволяет напрямую взаимодействовать с ККТ и просматривать данные фискальных документов в том виде, в котором они хранятся в фискальном накопителе.

Порядок действий:

  1. Запустите «Тест драйвера Штрих-М».
  2. Установите связь с кассовым аппаратом.
  3. Перейдите на вкладку, отвечающую за работу с фискальным накопителем (ФН).
  4. Найдите функцию для получения данных по номеру фискального документа (ФД). Введите номер ФД отчета об открытии смены, в котором отсутствует ИНН.
  5. Проанализируйте полученные данные. Вы увидите список тегов, которые были записаны в документ.

Пример данных, подтверждающих проблему:


ОТЧЕТ ОБ ОТКРЫТИИ СМЕНЫ
1041,ФН:9252....
1037,РН ККТ:0001069....
1018,ИНН:183101188397      <- ИНН организации есть
1040,ФД:494
1012,ДАТА, ВРЕМЯ:29.03.2021 16:33:00
1077,ФП:931258030
1038,СМЕНА:152
1021,КАССИР:ИП Морозова О. В.
1209,ВЕРСИЯ ФФД:2 (1.05)
...

Как мы видим, в списке присутствует тег 1018 (ИНН организации), но полностью отсутствует тег 1203 (ИНН кассира). Это окончательно подтверждает, что 1С по какой-то причине не передает этот реквизит при вызове команды открытия смены. Причины могут быть разными: особенности версии платформы 1С, версии драйвера ККТ или их некорректное взаимодействие после обновления/переустановки.

Шаг 4. Программное решение: принудительная отправка тега 1203

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

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

1. Подключение внешней компоненты драйвера

Сначала необходимо подключиться к драйверу ККТ. Драйвер «Штрих-М» представляет собой COM-объект, с которым можно работать из кода 1С.


Идентификатор = "AddIn.DrvFR";
Попытка
    ПодключитьВнешнююКомпоненту(Идентификатор);
Исключение
    Сообщить("Внешняя компонента " + Идентификатор + " не найдена");
    Возврат;
КонецПопытки;

Попытка
    ШтрихМ = Новый (Идентификатор);
Исключение
    Сообщить("Не удалось создать объект внешней компоненты с программным идентификатром " + Идентификатор);
    Возврат;
КонецПопытки;

// Устанавливаем пароль для доступа к ККТ и проверяем статус
ШтрихМ.Password = 30; // Стандартный пароль администратора
ШтрихМ.GetECRStatus();

2. Процедура открытия смены с передачей всех тегов

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


Процедура ОткрытьСменуСПередачейИННКассира() Экспорт
    
    // Получаем актуальные данные кассира из 1С
    // Здесь должна быть ваша логика получения ФИО и ИНН текущего пользователя
    ФИОКассира = "Иванов Иван Иванович";
    ИННКассира = "123456789012";
    АдресРасчетов = "г. Москва, ул. Примерная, д.1";
    МестоРасчетов = "Магазин 'Продукты'";
    
    // Устанавливаем пароль и проверяем статус смены
    ШтрихМ.Password = 30;
    ШтрихМ.GetShortECRStatus();
    
    Если ШтрихМ.ECRMode = 2 Тогда
        Предупреждение("Смена уже открыта. Повторное открытие не требуется.", 3);
        Возврат;
    ИначеЕсли ШтрихМ.ECRMode = 3 Тогда
        Предупреждение("Смена открыта более 24 часов. Необходимо закрыть смену.", 3);
        Возврат;
    КонецЕсли;
    
    // Начинаем формирование документа "Открытие смены"
    ШтрихМ.Password = 30;
    ШтрихМ.FNBeginOpenSession();
    
    // --- Ключевой блок: передача реквизитов (тегов) ---
    
    // Передаем Тег 1021 - ФИО кассира
    ШтрихМ.Password = 30;
    ШтрихМ.TagNumber = 1021;
    ШтрихМ.TagType = 7; // Тип "Строка"
    ШтрихМ.TagValueStr = ФИОКассира;
    ШтрихМ.FNSendTag();
    
    // Передаем Тег 1203 - ИНН кассира (РЕШЕНИЕ ПРОБЛЕМЫ)
    ШтрихМ.Password = 30;
    ШтрихМ.TagNumber = 1203;
    ШтрихМ.TagType = 7;
    ШтрихМ.TagValueStr = ИННКассира;
    ШтрихМ.FNSendTag();
    
    // Передаем Тег 1009 - Адрес расчетов
    ШтрихМ.Password = 30;
    ШтрихМ.TagNumber = 1009;
    ШтрихМ.TagType = 7;
    ШтрихМ.TagValueStr = АдресРасчетов;
    ШтрихМ.FNSendTag();
    
    // Передаем Тег 1187 - Место расчетов
    ШтрихМ.Password = 30;
    ШтрихМ.TagNumber = 1187;
    ШтрихМ.TagType = 7;
    ШтрихМ.TagValueStr = МестоРасчетов;
    ШтрихМ.FNSendTag();
    
    // Можно также добавить печать дополнительных строк, если нужно
    ШтрихМ.Password = 30;
    ШтрихМ.StringForPrinting = "Адрес расчетов: " + АдресРасчетов;
    ШтрихМ.PrintString();
    
    // --- Завершаем формирование документа и фискализируем его ---
    ШтрихМ.Password = 30;
    Результат = ШтрихМ.FNOpenSession();
    
    Если ШтрихМ.ResultCode <> 0 Тогда
        Сообщить("Ошибка при открытии смены: " + ШтрихМ.ResultCodeDescription);
    Иначе
        Предупреждение("Смена успешно открыта!", 2);
    КонецЕсли;
    
КонецПроцедуры

Этот код напрямую обращается к методам драйвера: FNBeginOpenSession начинает формирование документа, FNSendTag отправляет каждый тег по отдельности, а FNOpenSession закрывает и фискализирует документ. Таким образом, мы гарантируем, что тег 1203 будет передан в ККТ независимо от стандартного поведения конфигурации 1С.

Используя этот подход, вы сможете надежно решить проблему отсутствия ИНН кассира в отчете об открытии смены и обеспечить корректность передаваемых в ОФД данных.

← На главную