Как адаптировать 1С 7.7 для работы с фискальным регистратором Штрих-М после обновления прошивки до версии 1.2?

Программист 1С v7.7 Торговля и дистрибуция
← На главную

Возникла ситуация, когда после обновления прошивки фискального регистратора (ФР) Штрих-М до версии 1.2 стандартные методы взаимодействия с ним из 1С 7.7 перестали работать. В частности, метод Sale(), используемый для пробития позиций чека, вызывает ошибку. Рассмотрим по шагам, как решить эту проблему и адаптировать вашу конфигурацию 1С 7.7 для корректной работы с новым функционалом ФР, что является важной частью соответствия законодательству, как и общая настройка 54-ФЗ и онлайн-касс для нетиповых 1С 7.7.

Основная причина и ключевое изменение: метод FNOperation()

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

Рассмотрим, как должен выглядеть код для пробития одной позиции товара:


ФискальныйРегистратор.StringForPrinting	= Наим;
ФискальныйРегистратор.Price					= ПредстЦена;
ФискальныйРегистратор.Quantity				= ОбрДок.Количество;

ФискальныйРегистратор.Summ1Enabled          = 1;
ФискальныйРегистратор.Summ1                 = ПредстЦена * ОбрДок.Количество;

ФискальныйРегистратор.PaymentTypeSign 		= 4; // Признак способа расчета (например, 4 - полный расчет)
ФискальныйРегистратор.PaymentItemSign 	= ВернутьПризнакПредметаРасчета(ОбрДок.КТН, ОбрДок.Номенклатура.Подакциз);
ФискальныйРегистратор.MeasureUnit 			= 0; // Мера количества
ФискальныйРегистратор.DivisionalQuantity 	= 0; // Без дробного количества

Рез = ФискальныйРегистратор.FNOperation();

Обратите внимание, что необходимо корректно устанавливать такие параметры, как PaymentTypeSign (признак способа расчета) и PaymentItemSign (признак предмета расчета), особенно если ваша деятельность связана с маркировкой или подакцизными товарами — для этого есть решение для поддержки ФФД 1.2 и маркировки в 1С 7.7. Хотя автор темы не нуждался в маркировке, эти параметры являются частью современного ФФД 1.2.

Изменение методов открытия и закрытия чека/смены

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

  1. Открытие смены: Для открытия фискальной смены, если она закрыта, используйте метод FNBeginOpenSession() совместно с FNOpenSession(). Похожий подход к управлению сессиями применяется, когда реализуется печать фискального чека WebCheck для 1с 7.7 ТиС, Бух. Перед этим целесообразно проверить текущий режим работы ФР.
  2. Закрытие чека: Для завершения формирования чека и его фискализации используйте метод FNCloseCheckEx(). Этот метод позволяет получить дополнительную информацию, например, сумму сдачи.

Давайте посмотрим на пример кода для работы со сменой и чеком:

Проверка состояния ФР и открытие смены:

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


ФискальныйРегистратор.Password = глПользователь.ПарольККТ; // Устанавливаем пароль

Рез = ФискальныйРегистратор.GetECRStatus();

// Если есть незакрытый чек, его необходимо аннулировать
Если ФискальныйРегистратор.ECRMode = 8 Тогда	
    Подрежим = ФискальныйРегистратор.ECRAdvancedMode;
    ФискальныйРегистратор.CancelCheck();                     
    Сообщить("Аннулирован незакрытый чек");
ИначеЕсли ФискальныйРегистратор.ECRMode 	= 3 Тогда // Смена превысила 24 часа
    Если Вопрос("Смена превысила 24 часа!" + РазделительСтрок + "Снять Z-отчет?", "Да+Нет")	= "Нет" Тогда
        Предупреждение("Дальнейшая работа с ККМ невозможна!");
        Возврат;
    Иначе 
        ЗакрытиеСмены(); // Ваша процедура для закрытия смены, которая включает снятие Z-отчета
    КонецЕсли;                                       
КонецЕсли;

// Если смена закрыта (режим 4), открываем новую
Если ФискальныйРегистратор.ECRMode 			= 4 Тогда
    ФискальныйРегистратор.FNBeginOpenSession();
    // Возможность добавления тегов, например, ИНН сотрудника при открытии смены
    Если СокрЛП(глПользователь.Сотрудник.ИНН) 		<> "" Тогда 
        ФискальныйРегистратор.TagNumber				= 1203;
        ФискальныйРегистратор.TagType               = 7;
        ФискальныйРегистратор.TagValueStr    		= СокрЛП(глПользователь.Сотрудник.ИНН);
        ФискальныйРегистратор.FNSendTag();
    КонецЕсли;		
    Рез = ФискальныйРегистратор.FNOpenSession();	           // Открываем смену
КонецЕсли;

Закрытие чека и расчет сдачи:

После пробития всех позиций товара необходимо закрыть чек и обработать оплату.

В примере показана оплата наличными. Метод FNCloseCheckEx() возвращает сумму сдачи.


// Устанавливаем тип чека (0 - приход)
ФискальныйРегистратор.CheckType = 0;

// ... (здесь будет цикл с ФискальныйРегистратор.FNOperation() для каждого товара) ...

// Устанавливаем суммы оплаты по различным типам (здесь наличные - Summ1)
ФискальныйРегистратор.Summ1 	= Окр(Получено,2,1); // Получено - общая сумма, принятая от покупателя
ФискальныйРегистратор.Summ2 	= 0;
ФискальныйРегистратор.Summ3 	= 0;
// ... (остальные суммы Summ4-Summ16 по типам оплаты обнуляем или заполняем при необходимости) ...
ФискальныйРегистратор.RoundingSumm  = 0; // Сумма округления 

// Устанавливаем систему налогообложения для чека
ФискальныйРегистратор.TaxType 		= ОбрДок.Касса.СНО;
ФискальныйРегистратор.StringForPrinting = " "; // Важно: без этого может напечатать повторно последнюю строку наименования товара

// Закрываем чек
Рез = ФискальныйРегистратор.FNCloseCheckEx();

// Получаем сумму сдачи
ВыданаСдача = ФискальныйРегистратор.Change;

// ... (дальнейшая обработка ошибок, фиксация результатов в программе) ...

Требования к драйверам и компонентам для ФФД 1.2

Для корректной работы с прошивкой 1.2 и ФФД 1.2 необходимо убедиться, что у вас установлены актуальные версии драйверов ККТ и соответствующих внешних компонент 1С. Если же работа с "железными" ФР вызывает слишком много сложностей, альтернативой могут стать программные решения (поможет обработка печати чеков на ККТ Штрих-М), для которых существуют готовые обработки обслуживания для "ВебЧек: Программный регистратор расчетных операций" (ПРРО).

  1. Версии драйверов: Убедитесь, что используете драйвер ККТ Штрих-М версии не старее 5.19.1109 или 5.16.0.868. Новые версии драйверов обеспечивают поддержку ФФД 1.2.
  2. Внешние компоненты 1С: Для 1С 7.7 обычно требуются файлы DrvFR.dll, DrvFR.lic и Models.xml. Эти файлы должны находиться в папке BIN каталога 1С. Для более новых драйверов может использоваться компонент SMDrvFR1CLib24.dll с программным идентификатором SMDrvFR1C22.
  3. Обработки обслуживания: Подключите к 1С 7.7 актуальные обработки обслуживания (например, shtrihfr_comm.ert), которые содержат необходимый набор функций для работы с драйвером ККТ. Размещайте их в папке <Информационная база>\ExtForms\Equip.

Важные настройки и проверка

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

  1. Настройка через "Тест драйвера ФР": Используйте утилиту "Тест драйвера ФР" от Штрих-М для первоначальной настройки фискального регистратора. Здесь устанавливаются налоговые ставки, наименования видов оплат, строки заголовка и трейлера чека.
  2. Пароли доступа: Убедитесь, что вы используете корректные пароли доступа. Для кассира обычно используется ID 1, для административных действий — ID 29 или 30.
  3. Проверка связи в 1С: После всех настроек обязательно выполните проверку связи с фискальным регистратором через "Сервис - Параметры - Драйвер ФР" в вашей 1С 7.7.
  4. Проблемы с отправкой в ОФД: Если чеки печатаются, но данные не уходят в ОФД, это может указывать на некорректную настройку параметров ФФД или устаревшую конфигурацию, которая не поддерживает передачу подробных сведений о номенклатуре. В таком случае потребуется доработка программы.

Отладка 1С 7.7 на современных версиях Windows

В процессе адаптации кода вам, вероятно, понадобится отладчик. Выясним, что на современных операционных системах, таких как Windows 10 или 11, отладчик 1С 7.7 может работать некорректно, постоянно теряя фокус. Это доставляет значительные неудобства.

Существуют несколько способов облегчить отладку:

  1. Сверните окно 1С Предприятия: Во время пошаговой отладки попробуйте свернуть окно 1С Предприятия. Многие пользователи сообщают, что после этого отладчик начинает работать стабильнее, не теряя фокус.
  2. Режим совместимости: Запустите исполняемый файл 1С 7.7 (1cv7.exe) в режиме совместимости с более старой версией Windows, например, Windows XP Service Pack 3 или Windows 7. Это может улучшить стабильность работы отладчика и других компонентов платформы.

Надеемся, эти рекомендации помогут вам успешно адаптировать вашу систему 1С 7.7 для работы с ФР Штрих-М на прошивке 1.2 — для этого подойдёт обработка управления кассами Штрих ФФД 1.2 для 1С 7.7.

← На главную