Переход на новые форматы фискальных данных и изменение ставки НДС до 20% стали серьезным испытанием для пользователей классической платформы 1С 7.7. Основная сложность заключается в том, что старые компоненты (например, smDrvFR1CLib20.dll) перестают поддерживать новые требования законодательства, а новые драйверы требуют специфической настройки окружения и корректного формирования XML-пакетов. В данной статье мы подробно рассмотрим, как преодолеть ошибки регистрации библиотек, устранить проблему «33h, Некорректные параметры» и правильно настроить взаимодействие 1С 7.7 с современными драйверами Штрих-М.
Первая проблема, с которой сталкиваются системные администраторы и программисты при обновлении драйвера до версии 4.14.x — это невозможность метода ЗагрузитьВнешнююКомпоненту инициализировать библиотеку DrvFR.dll или сопутствующие ей модули. Рассмотрим ситуацию, когда файлы скопированы в каталог информационной базы или папку BIN платформы, но ошибка сохраняется.
Выясним причину: современные версии драйверов Штрих-М используют дополнительные зависимости, которые не всегда устанавливаются автоматически или регистрируются в системе. Проанализируем список необходимых действий:
sqlite3.dll. Без него компонента просто не инициализируется.libeay32.dll и ssleay32.dll.C:\Windows\SysWOW64\regsvr32.exe, а сопутствующие .dll должны лежать в папках, доступных для 32-битных процессов.Старая библиотека smDrvFR1CLib20.dll часто не справляется с передачей новых атрибутов, таких как ИНН кассира или сложные признаки способа расчета. Рекомендуем перейти на использование SMDrvFR1CLib24.dll (объект Addin.SMDrvFR1C22). Проанализируем пример кода для инициализации новой компоненты:
Компонента = "SMDrvFR1CLib24.dll";
ПрогИд = "AddIn.SMDrvFR1C22";
Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + Компонента) <> 1 Тогда
Предупреждение("Не удалось загрузить компоненту " + Компонента);
Возврат;
КонецЕсли;
Объект = СоздатьОбъект(ПрогИд);
Важный момент: имя объекта (ProgID) изменилось. Если раньше вы использовали SMDrvFR1C20, то теперь необходимо указывать SMDrvFR1C22. Это часто становится камнем преткновения при попытке «быстрого» обновления кода.
Даже если компонента загрузилась, при вызове метода Объект.Подключить(глФРИДУстройства) может возникнуть ошибка 33h. Исследования показывают, что в новых прошивках драйвер требует явного указания номера шрифта для чека, который по умолчанию может быть не задан.
Рассмотрим решение через установку параметра CheckFontNumber. Добавим следующий блок перед вызовом подключения:
Объект.УстановитьПараметр("CheckFontNumber", 1); // Установка шрифта чека
Объект.УстановитьПараметр("Port", глФРPortNumber);
Объект.УстановитьПараметр("Baudrate", глФРBaudRate);
Объект.УстановитьПараметр("AdminPassword", глФРПарольАдминистратора);
Объект.УстановитьПараметр("UserPassword", глФРПарольПользователя);
// Настройка налоговых ставок для НДС 20%
Объект.УстановитьПараметр("Tax1", 20);
Объект.УстановитьПараметр("Tax2", 10);
глФРИДУстройства = "";
Если Объект.Подключить(глФРИДУстройства) <> 0 Тогда
ОписаниеОшибки = "";
Объект.GetLastError(ОписаниеОшибки);
Сообщить("Ошибка подключения: " + ОписаниеОшибки);
КонецЕсли;
Внимание: Не забудьте в таблице №6 самого фискального регистратора (через «Тест драйвера») убедиться, что налоговая ставка 18% заменена на 20% (значение 2000). Если прошивка ККТ старая и не поддерживает НДС 20%, никакие программные манипуляции не помогут — касса будет выдавать ошибку при попытке пробить чек.
Большинство ошибок 33h при формировании чека связано с отсутствием обязательных тегов в XML-структуре, которую ожидает драйвер версии 4.14+. Разберем по шагам, какие атрибуты стали критически важными.
CashierVATIN) должен содержать ровно 12 цифр. Если передать пустую строку или некорректное количество символов, чек не пробьется.Parameters стали обязательными атрибуты AddressSettle и PlaceSettle.CustomerEmail и CustomerPhone должны присутствовать, даже если они пустые.DiscountSum в узле FiscalString теперь обязателен. Если скидки нет, нужно передавать 0.Посмотрим на пример правильного формирования узла параметров в 1С 7.7:
// Используем v7plus.dll или XMLParser для формирования структуры
XMLParameters = XMLCheckPackage.СоздатьПодчиненныйЭлемент("Parameters");
Атрибут(XMLParameters, "CashierName", СокрЛП(ИмяКассира));
Атрибут(XMLParameters, "CashierVATIN", "123456789012"); // Пример ИНН
Атрибут(XMLParameters, "AddressSettle", "г. Москва, ул. Ленина, д. 1");
Атрибут(XMLParameters, "PlaceSettle", "Магазин №5");
Атрибут(XMLParameters, "CustomerEmail", "");
Атрибут(XMLParameters, "CustomerPhone", "");
Также проанализируем формирование строки товара (FiscalString). Обратите внимание на использование PriceWithDiscount и SumWithDiscount:
XMLFiscalString = XMLPositions.СоздатьПодчиненныйЭлемент("FiscalString");
Атрибут(XMLFiscalString, "Name", СокрЛП(Товар.Наименование));
Атрибут(XMLFiscalString, "Quantity", Количество);
Атрибут(XMLFiscalString, "PriceWithDiscount", Цена);
Атрибут(XMLFiscalString, "SumWithDiscount", Сумма);
Атрибут(XMLFiscalString, "DiscountSum", 0);
Атрибут(XMLFiscalString, "Tax", "20"); // Указываем ставку 20
Атрибут(XMLFiscalString, "SignMethodCalculation", 4); // Полный расчет
Атрибут(XMLFiscalString, "SignCalculationObject", 1); // Товар
Метод ЗакрытьСмену в новой компоненте также требует передачи XML-пакета с данными кассира. Если вызвать его по-старому (без параметров), вы получите ошибку о недостаточном количестве аргументов или некорректном формате. Выясним, как должна выглядеть процедура закрытия:
XMLДанныеЗакрытия = XMLАнализатор.СоздатьДокумент();
XMLInputParameters = XMLДанныеЗакрытия.СоздатьПодчиненныйЭлемент("InputParameters");
XMLParameters = XMLInputParameters.СоздатьПодчиненныйЭлемент("Parameters");
Атрибут(XMLParameters, "CashierName", СокрЛП(ИмяКассира));
Атрибут(XMLParameters, "CashierVATIN", ИННКассира);
// Запись в строку для передачи в метод
ТекстXML = СформироватьСтрокуXML(XMLДанныеЗакрытия);
НомерСмены = 0;
НомерДокумента = 0;
Результат = Объект.ЗакрытьСмену(глФРИДУстройства, ТекстXML, "", НомерСмены, НомерДокумента);
Иногда даже при идеально правильном коде в 1С данные в чеке отображаются некорректно (например, не печатается признак способа расчета). Проанализируем настройки таблиц ККТ:
0, касса может не печатать реквизиты, передаваемые через XML. Установите значение 1 для активации печати всех тегов ФФД 1.05.Подводя итог, можно сказать, что стабильная работа Штрих-М в 1С 7.7 требует комплексного подхода: от регистрации зависимых .dll в системе до скрупулезного соблюдения структуры XML-пакета. Использование компоненты SMDrvFR1CLib24.dll и установка параметра CheckFontNumber являются ключевыми факторами успеха при интеграции.