Рассмотрим ситуацию, с которой могут столкнуться пользователи 1С:Бухгалтерия 3.0 и фискальных регистраторов «Штрих-М». После сбоя операционной системы и восстановления рабочего места может возникнуть проблема: при открытии кассовой смены в ОФД перестает передаваться ИНН кассира. При этом в кассовых чеках и в отчете о закрытии смены ИНН кассира присутствует, что вызывает путаницу и вопросы к корректности фискальных данных. Разберем по шагам, как диагностировать и решить эту проблему.
В первую очередь важно четко определить, какой именно ИНН не передается. Существует два разных реквизита (тега), которые часто путают:
В нашей ситуации проблема именно с тегом 1203. ИНН организации (тег 1018) передается корректно, а вот ИНН сотрудника, открывающего смену, — нет.
Прежде чем переходить к сложным методам, необходимо выполнить базовую проверку данных в 1С. Часто проблема кроется в незаполненных полях. Проверьте следующую цепочку:
Администрирование -> Настройки пользователей и прав -> Пользователи).Справочники -> Физические лица).Даже если вы уверены, что все было заполнено, после восстановления системы могли сбиться привязки, поэтому повторная проверка обязательна. Если после проверки проблема не ушла, переходим к следующему шагу.
Чтобы окончательно убедиться, что проблема на стороне 1С, а не кассового аппарата, воспользуемся утилитой «Тест драйвера Штрих-М». Эта утилита позволяет напрямую взаимодействовать с ККТ и просматривать данные фискальных документов в том виде, в котором они хранятся в фискальном накопителе.
Порядок действий:
Пример данных, подтверждающих проблему:
ОТЧЕТ ОБ ОТКРЫТИИ СМЕНЫ
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С, версии драйвера ККТ или их некорректное взаимодействие после обновления/переустановки.
Если стандартные настройки не помогают, а диагностика подтвердила проблему, наиболее надежным решением будет небольшая программная доработка. Суть ее в том, чтобы перехватить стандартную процедуру открытия смены и перед фискализацией документа принудительно отправить на ККТ недостающие теги через методы драйвера.
Это можно реализовать с помощью внешней обработки, чтобы не изменять основную конфигурацию. Рассмотрим пример кода, который решает эту задачу.
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С.
Используя этот подход, вы сможете надежно решить проблему отсутствия ИНН кассира в отчете об открытии смены и обеспечить корректность передаваемых в ОФД данных.