Маркировка на ККТ АТОЛ с ФФД 1.2

07.12.21

Учетные задачи - Кассовые операции

Реализация функций продажи/возврата маркированной продукции в ФФД 1.2 для ККМ марки АТОЛ для самописных конфигураций. DTO 10.9.1.0.

Всем доброго дня.

Уверен, что многие еще столкнутся с данной проблемой, после перепрошивки кассовых аппаратов АТОЛ на версию формата фискальных данных 1.2. Эта информация в основном для тех, кто поддерживает самописные конфигурации.

Ранее мы просто брали GTIN и серийный номер из маркировки, формировали 16-ричный код и записывали его в реквизит 1162.

Теперь этот путь закрыт.

Основная суть изменившегося подхода при пробитии чека - мы должны занести в память кассового аппарата полный код маркировки с криптохвостом, проверить его и проверенный код пробить в чеке, чтобы получить заветный [M+].

Мой код для отражения продажи/возврата маркированной продукции,передаваемой в Честный Знак, тестировалось на драйвере DTO 10.9.1.0:

 

	//Переменные на входе
	// Кассир - ФИО кассира
	// ВидЧека - "ПРОДАЖА" или "ВОЗВРАТ"
	// Телефон - телефон контрагента
	// ШтрихкодМаркировки - маркировка товара из системы Честный Знак 
	// Номенклатура - название товара
	// Цена,Количество,СуммаНДС (в примере 20%)
	// СуммаАванса,СуммаНал,СуммаБезнал
	
	//Переменные на выходе
	// НомерЧека, НомерДокумента
	
	//Обращаемся к объекту драйвера DTO10
	//Инициализируем параметры кассы.
	
	FR = Новый COMОбъект("AddIn.Fptr10"); 
	FR.setSingleSetting(FR.LIBFPTR_SETTING_MODEL, Строка(FR.LIBFPTR_MODEL_ATOL_AUTO));
	FR.setSingleSetting(FR.LIBFPTR_SETTING_PORT, FR.LIBFPTR_PORT_COM);
	FR.setSingleSetting(FR.LIBFPTR_SETTING_COM_FILE, 1);
	FR.setSingleSetting(FR.LIBFPTR_SETTING_BAUDRATE, 9600);
	FR.setSingleSetting(FR.LIBFPTR_SETTING_ACCESS_PASSWORD, "0");
	FR.setSingleSetting(FR.LIBFPTR_SETTING_USER_PASSWORD, 1);
	FR.applySingleSettings();
	
	Если FR.open()<>0 тогда //Соединение с ККТ 
		Сообщить("Ответ: "+FR.errorCode()+" Ошибка: "+FR.errorDescription());
		возврат;
	КонецЕсли;
	
	FR.setParam(1021, СокрЛП(Кассир));
	
	FR.operatorLogin();
	
	// После прошивки - важный параметр "Система налогообложения",
	// который слетает в неопределенность. 
	// Либо ставьте в драйверве в регистрации по умолчанию, либо указывайте явно
	FR.setParam(1055, FR.LIBFPTR_TT_OSN);
	//FR.setParam(1055, fptr.LIBFPTR_TT_ENVD);
	
	Попытка
		//стираем все запрошенные маркировки из памяти кассового аппарата
		FR.clearMarkingCodeValidationResult();
	Исключение
	КонецПопытки;	

	Если ВидЧека  = "ВОЗВРАТ" тогда
		FR.setParam(FR.LIBFPTR_PARAM_RECEIPT_TYPE, FR.LIBFPTR_RT_SELL_RETURN);
	Иначе
		FR.setParam(FR.LIBFPTR_PARAM_RECEIPT_TYPE, FR.LIBFPTR_RT_SELL);
	КонецеСли;
	
	FR.setParam(FR.LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY, false);			

	Если не СокрЛП(Телефон) = "" тогда
		FR.setParam(1008, СокрЛП(Телефон));			
	КонецЕСли;	
	
	
	FR.openReceipt();
	
	status = 1;
	
	Разделитель = Символ(29);
	
	ПодготовленныйШК = СокрЛП(ШтрихкодМаркировки);
	
	ПодготовленныйШК = СтрЗаменить(ПодготовленныйШК,Разделитель,"");
	
	КМ = Лев(ПодготовленныйШК, 31) + Разделитель + Сред(ПодготовленныйШК, 32, 6) + Разделитель + Сред(ПодготовленныйШК, 38);
	
	//Получился код маркировки с восстановленными знаками GS1, если вдруг их не было в строке
	//Много где было сказано, что надо использовать только 16-ричную кодировку. Это не так.
	
	
	FR.setParam(FR.LIBFPTR_PARAM_MARKING_CODE_TYPE, FR.LIBFPTR_MCT12_AUTO);
	FR.setParam(FR.LIBFPTR_PARAM_MARKING_CODE, КМ);
	FR.setParam(FR.LIBFPTR_PARAM_MARKING_CODE_STATUS, status);
	FR.setParam(FR.LIBFPTR_PARAM_MARKING_WAIT_FOR_VALIDATION_RESULT, Истина);
	FR.setParam(FR.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0);					
	
	FR.beginMarkingCodeValidation();
	ВремяНачала = ТекущаяДата();
	ВремяОжидания = 100;
	
	// Начало проверки 
	Пока истина Цикл
		FR.getMarkingCodeValidationStatus();
		Если FR.getParamBool(FR.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY) тогда
			прервать;
		КонецЕсли;	
		Если ТекущаяДата() - ВремяНачала > ВремяОжидания тогда
			прервать;
		КонецЕсли;	
	КонецЦикла;
	
	validationResult = FR.getParamInt(FR.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT);
	
	FR.acceptMarkingCode();
	
	//Наш штрихкод проверен и занесен в память аппарата
	// Теперь его ОБЯЗАТЕЛЬНО надо повторить в самой продаже
	// Если этого не сделать - то ничего и не отошлется
	
	FR.setParam(FR.LIBFPTR_PARAM_COMMODITY_NAME,СокрЛП(Номенклатура));
	FR.setParam(FR.LIBFPTR_PARAM_PRICE, Окр(Цена,2));
	FR.setParam(FR.LIBFPTR_PARAM_QUANTITY, Количество);
	FR.setParam(FR.LIBFPTR_PARAM_TAX_TYPE,FR.LIBFPTR_TAX_VAT20);
	FR.setParam(FR.LIBFPTR_PARAM_TAX_SUM, СуммаНДС);
	
	FR.setParam(FR.LIBFPTR_PARAM_MARKING_CODE, КМ);
	FR.setParam(FR.LIBFPTR_PARAM_MARKING_CODE_STATUS, status);
	FR.setParam(FR.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT, validationResult);
	FR.setParam(FR.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0);	
	
	Если FR.registration() <> 0 тогда
		Сообщить("Ответ: "+FR.errorCode()+" Ошибка: "+FR.errorDescription());
        FR.cancelReceipt();
        Возврат;
	КонецЕсли;
	
	//Оплата
	Если СуммаАванса>0 тогда
		FR.setParam(FR.LIBFPTR_PARAM_PAYMENT_TYPE, FR.LIBFPTR_PT_PREPAID);
		FR.setParam(FR.LIBFPTR_PARAM_PAYMENT_SUM, СуммаАванса);
		FR.payment();
	КонецеСли;
	
	Если СуммаНал>0 тогда
		FR.setParam(FR.LIBFPTR_PARAM_PAYMENT_TYPE, FR.LIBFPTR_PT_CASH);
		FR.setParam(FR.LIBFPTR_PARAM_PAYMENT_SUM, СуммаНал);
		FR.payment();
	КонецеСли;
	
	Если СуммаБезнал>0 тогда
		FR.setParam(FR.LIBFPTR_PARAM_PAYMENT_TYPE, FR.LIBFPTR_PT_ELECTRONICALLY);
		FR.setParam(FR.LIBFPTR_PARAM_PAYMENT_SUM, СуммаБезнал);
		FR.payment();
	КонецеСли;
	
	FR.closeReceipt();
	
	//открыть ящик
	FR.openDrawer();
	
	FR.setParam(FR.LIBFPTR_PARAM_DATA_TYPE, FR.LIBFPTR_DT_STATUS);
	FR.queryData();
	
	НомерЧека       = FR.getParamInt(FR.LIBFPTR_PARAM_RECEIPT_NUMBER);
	НомерДокумента  = FR.getParamInt(FR.LIBFPTR_PARAM_DOCUMENT_NUMBER);
	

 

Вступайте в нашу телеграмм-группу Инфостарт

АТОЛ ФФД 1.2 ошибка 1162

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

ККМ Кассовые операции Розничная торговля НДС 22% Системный администратор Разработчик 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия 1.6 1С:Бухгалтерия автономного учреждения Россия Платные (руб)

Универсальная обработка для обслуживания любых фискальных регистраторов (ККТ), в том числе Веб сервер АТОЛ. Работает в соответствии с 54-ФЗ. (ФФД 1.0, ФФД 1.05, ФФД 1.1, ФФД 1.2). Подключайте любую онлайн кассу к практически любой конфигурации на обычных формах. Нет необходимости обновлять 1С. Можно бесплатно скачать и протестировать. Может работать одновременно с несколькими онлайн-кассами, либо одной с разных рабочих мест. (через RDP, TCP\IP или веб-сервер) Позволяет разделить один чек сразу на несколько ККТ или на несколько систем налогообложения. Поддерживает разрешительный режим и маркировку. Поддерживает локальный модуль честного знака для офлайн проверки. Можно настроить собственный шаблонов чека. Можно использовать эквайринг там, где он не поддерживается. Работает на LINUX и Windows Адаптировано к ставке НДС 22% и ТС ПИоТ.

6100 руб.

27.02.2017    918488    6629    10489    

3367

ККМ Кассовые операции Розничная торговля НДС 22% Системный администратор Разработчик 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия автономного учреждения Россия Платные (руб)

Обработка осуществляет обслуживание ККТ АТОЛ, Штрих, Вики Принт и Меркурий для конфигураций "УТ 10.3", "КА 1.1", "УПП 1.3", "Розница 1.0", "БП 2.0" и других отраслевых решений, построенных на основе указанных выше конфигурациях. Поддерживает возможность параллельно пробития чеков на одной ККМ несколькими пользователями. Поддерживает Веб-сервер Атол. Соответствует требованиям 54-ФЗ. Поддерживает ФФД 1.0, 1.05, 1.1 и 1.2. Разделяет чеки по нескольким СНО. Поддерживает механизмы подключения ККТ по TCP/IP, для работы через RDP или интернет. Поддержка маркировки и разрешительного режима. Поддержка пробития чеков с новыми ставками НДС 5%, НДС 7% и НДС 22%.

7900 руб.

25.05.2015    405854    2035    3372    

1195

ККМ Розничная торговля Системный администратор Разработчик 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Обмен между 1С:Розница и Frontol 6 при торговле от нескольких организаций, а также ряд других полезных функций. Данный модуль синхронизации незаменим для тех, кто ведёт учет по нескольким организациям в 1С:Розница, а на РМК (рабочем месте кассира) установлен Frontol или планируется его установка. Подходит для 1С:Розница 2.3 / 3.0, 1С:УНФ 3.0

4200 руб.

22.03.2019    106387    891    494    

246

ККМ Кассовые операции Розничная торговля Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение для типовых конфигураций для Управляемых форм позволяет выполнять печать кассовых чеков на одну ККМ 54-ФЗ с нескольких рабочих мест. НИКАКИХ НАСТРОЕК В РАЗРАБОТКЕ - ПОДКЛЮЧИЛ И ПЕЧАТАЙ. Если у вас несколько отделов и одна ККМ - печатайте на одной ККМ! Если у вас две ККМ и одна поломалась - печатайте на одной ККМ, пока ремонтируете другую! Решение для розничных продаж! Обновление 19.03.26 для 1С:Розница 2.3.23 и 27.04.2026 для 1С:УТ 11.5.25 в новых релизах tcp/ip. Реализована работа с ПИОТ.

9500 руб.

27.08.2018    142187    827    603    

966

Кассовые операции Файловый обмен (TXT, XML, DBF), FTP ЭДО и ОФД НДС 22% Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Бухгалтерский учет Налоговый учет Управленческий учет Платные (руб)

Специализированные обработки для загрузки кассовых чеков в локальных базах: 1С:БП 3.0, 1С:УНФ 3.0, 1С:Розница 3.0, 1С:КА. 2.5, 1С:ERP Управление предприятием 2.5 и 1С:УТ 11.5. Вы просто сканируете QR коды с бумажных и электронных чеков c помощью мобильного приложения ФНС или сканера штрихкодов и чеки автоматически (без ручного ввода) загружаются в документы 'Авансовый отчет', 'Расходы предпринимателя', 'Путевой лист', 'Приходная накладная', 'Поступление (акты, накладные, УПД)', 'Приобретение товаров и услуг', 'Отчет о розничных продажах', 'Поступление денежных документов' и 'Реестры выплат самозанятым'. Обработка будет работать на любой версии конфигурации управляемые формы: базовой, ПРОФ или КОРП. Для загрузки чеков самозанятых достаточно только ссылки на чек.

6990 руб.

19.08.2020    83831    383    93    

269

ККМ Кассовые операции Розничная торговля НДС 22% Системный администратор Разработчик Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Торговля и склад 7.7 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 10 1С:Управление торговлей 11 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Платные (руб)

«Сервер ККМ» позволяет приложениям работать с фискальными регистраторами по локальной сети или интернет, организовать печать на одном ККМ с нескольких рабочих мест или нескольких баз 1С. Поддержка ТСПИоТ для Атол, Штрих, Ритейл и РР-Электро. Возможность работы с ТСПИоТ без изменения конфигурации 1С! Поддерживаются ВСЕ ревизии требований фирмы 1С к разработке драйверов ККТ от 2.0 до 4.7. Бесплатные функции: Эмулятор ККМ с возможностью эмуляции различных сбоев, печать чеков продажи и покупки до 1000р, прочие виды чеков - без ограничений.

18000 руб.

02.09.2016    160583    243    210    

240

Кассовые операции Розничная торговля ККМ 1С 8.3 1С 8.5 1С:Розница 2 1С:Управление торговлей 11 Россия Платные (руб)

Расширение для «Розницы» 2.3 и «Управления торговлей» 11.5. При сканировании пачки сигарет ставит в строку чека МРЦ из её кода маркировки. Возвращает коды маркировки на свои строки перед пробитием: типовая программа в чеке с пачками разной МРЦ может отправить в ККТ и «Честный знак» код одной пачки с ценой другой. Не даёт пробить чек дороже МРЦ. Конфигурацию не меняет.

23.09.2026    5272    14    G_100802897175107255412    0    

14

Кассовые операции ЭДО и ОФД Бухгалтер 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Бухгалтерский учет Платные (руб)

Согласно 54-ФЗ по правилам ведения кассовых операций необходимо оформлять приходные кассовые ордера (ПКО) и расходные кассовые ордера (РКО) на основании чеков ККМ. Все данные о чеках, можно взять на сайте оператора фискальных данных (ОФД). Обработка загрузки данных из ОФД в 1С сделает за вас в 1С - ПКО и РКО, Операции по платежным картам или Отчет о розничных продажах (может создать номенклатуру в 1С, указать налоги и др. реквизиты в документах в зависимости от налогообложения ККМ в торговой точке).

7320 руб.

09.08.2017    170381    1014    377    

627
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. quazare 4020 07.12.21 11:15 Сейчас в теме
прошу дополнить на какую версию драйвера написан код под объект

FR = Новый COMОбъект("AddIn.Fptr10");
126. user976872 13.06.23 20:28 Сейчас в теме
(1) можно с Вами связаться ? нужна помощь по ффд 1.2 в самописной конфе
2. quazare 4020 07.12.21 11:16 Сейчас в теме
не увидел на драйвере DTO 10.9.1.0

извините....
3. aximo 2771 07.12.21 14:06 Сейчас в теме
есть ли у вас ссылка на описание методов объекта Fptr10 ? Поделитесь пожалуйста здесь
5. slava_1c 602 07.12.21 14:43 Сейчас в теме
10. пользователь 16.12.21 10:32
Сообщение было скрыто модератором.
...
6. lvictor58 139 10.12.21 14:39 Сейчас в теме
А заветный [M+] сам пропишется в чеке или его потом руками подрисовывать надо будет? У меня есть клиент, работающий на ТиС 7.7 там в обработке пробития чека на ФР его в виде строки добавляют.
7. slava_1c 602 10.12.21 15:53 Сейчас в теме
(6)Так в том то и дело что сам прописывается. Это признак того что касса сама ПРОВЕРИЛА этот код. Ничего руками добавлять не нужно.
8. boevik 2 13.12.21 21:11 Сейчас в теме
9. slava_1c 602 13.12.21 22:20 Сейчас в теме
(8) Нет, не делал, но судя по описанию АПИ - там, вроде как, все описано:

http://integration.atol.ru/api/?csharp#fiskalnye-cheki

{
    "type": "sell",
    "validateMarkingCodes": true,
    "operator": {
        "name": "Иванов",
        "vatin": ""
    },
    "electronically": false,
    "items": [
        {
            "type": "position",
            "name": "*3282705 Товар",
            "price": 299.95,
            "quantity": 1.0,
            "measurementUnit": "piece",
            "amount": 299.95,
            "infoDiscountAmount": 0.0,
            "tax": {
                "type": "vat20",
                "sum": 0.0
            },
            "paymentObject": "commodityWithMarking",
            "paymentMethod": "fullPayment",
            "imcParams": {
                "imcType": "auto",
                "imc": "MDEwMjkwMDAwMDQ3NTgzMDIxTWRFZng6WHA2WUZkNx05MTgwMjkdOTJhUUl­Ra0k3b0hYbXpHL21kS3h6Q1VDS1RKSFhvQk9EZG1DZE01azhRajdnYVpWMnh­ibjY2eEJYR0lLcnRmdnFQSU5BMmprYmp5ajMvTytreTZvdTFOQT09",
                "itemEstimatedStatus": "itemPieceSold",
                "imcModeProcessing": 0
            }
        }
    ],
    "payments": [
        {
            "type": "0",
            "sum": 300.0
        }
    ],
    "taxes": [],
    "total": 299.95,
    "clientInfo": {
        "emailOrPhone": "address@mail.ru"
    },
    "companyInfo": {
        "email": "test@ofd.ru"
    }
}
Показать
11. OlegK14 12.01.22 20:42 Сейчас в теме
Пробовал получить КМ с вашим алгоритмом вставки GS1 (КМ = Лев(ПодготовленныйШК, 31) + Разделитель + Сред(ПодготовленныйШК, 32, 6) + Разделитель + Сред(ПодготовленныйШК, 38);) и вот какая штука получается. В 1 с в сообщении он выводится полнистью, символ GS1 не виден как положено но если его скопировать в блокнот то два последних символа пропадают.
12. slava_1c 602 12.01.22 21:46 Сейчас в теме
(11)Не очень понял, если честно, что значит пропадают символы при копировании в блокнот. Суть алгоритма в том, чтобы сначала полностью избавиться от символов разделителя GS1 (был он или не был в строке - не важно), а затем точно его добавить. В этом случае никаких лишних символов точно не будет. Рекомендую Notepad++ он скрытые символы прекрасно показывает.

Для примера:

И такой код
010467018882925021xpFnolGDIAy9p91EE0692aTIUIotYb7jKc0OBacg­OKUkJyRAlnsUB/0rAiHfzFUk=

И такой код
010467018882925021xpFnolGDIAy9p91EE0692aTIUIotYb7jKc0OBacgOK­UkJyRAlnsUB/0rAiHfzFUk=

на выходе должны дать

010467018882925021xpFnolGDIAy9p91EE0692aTIUIotYb7jKc0OBacg­OKUkJyRAlnsUB/0rAiHfzFUk=
13. user1313774 17.01.22 19:18 Сейчас в теме
Формула КМ = Лев(ПодготовленныйШК, 31) + Разделитель + Сред(ПодготовленныйШК, 32, 6) + Разделитель + Сред(ПодготовленныйШК, 38);
любопытна.
А как насчет того, что для фототоваров серийный номер (то, что находится после кода применения 21) содержит не 13 символов, а больше?
А код маркировки молочной продукции для групповой упаковки меньше.
А с табаком там вообще фиг поймешь
14. slava_1c 602 18.01.22 00:02 Сейчас в теме
(13) Спасибо за замечание.

Минули меня стороной данные типы маркированной продукции, однако данный пост скорее показывает как без ошибки сформировать чек на ККТ АТОЛ с ФФД 1.2, нежели универсальный алгоритм замещения символов.

Тогда оговорюсь - алгоритм замещения символов корректен для шин, одежды, обуви.

В других типах маркировки следует обращать внимание на описанный в Честном Знаке формат маркировки.

А сколько этих типов завтра придумают одному Алишеру известно..
21. KVIKS 506 02.02.22 01:22 Сейчас в теме
(13)Для табака на пачке для на кода 29 символов - брал ее всю целиком, на выходе получил М+
15. user1313774 18.01.22 10:33 Сейчас в теме
Ну, справедливости, ради я бы отметил, что документация по форматам маркировки после табака становится более-менее вменяемой с каждым новым видом продукции

А еще буду очень благодарен тем, кто сталкивался с работой маркировки ФФД 1.2 в реальных условиях и смог бы проконсультировать меня по таким вопросам:
1. В документации по драйверу и примерам обычно описывается ситуация, когда код маркировки проверяется в момент формирования чека, ну или до его открытия. Сколько в среднем занимает по времени проверка кода маркировки онлайн?
Мне хотелось бы организовать эту проверку на этапе добавления товара в реализацию до формирования фискального чека, чтобы можно было уже на этом этапе отказаться от продажи товара, если проверка кода была неуспешна.
2. Как средствами драйвера организовать проверку оффлайн и нужно ли это? Если я правильно понимаю, то оффлайн проверка это проверка кодов самим ФН. Откуда они там берутся и что такое "ключ проверки", упоминаемый в документации?
3. Судя про приведенному примеру, чек будет сформирован на все товары, если маркировка успешна будет напечатано "М+", если нет, то "М-". Что потом делать с товарами, которые продались с "М-"?
16. slava_1c 602 18.01.22 20:01 Сейчас в теме
(15) Чисто из своих наблюдений.

1. Онлайн проверка кода занимает немного времени - буквально секунды (я имею ввиду розничную продажу, когда кодов от силы 4 (например шины)) НО. Я пробовал проверить коды без открытия чека, а потом их продать - ругается аппарат. Только после того как чек открыт , прошла проверка, коды маркировки подтянулись - все отрабатывает как надо. Как вариант - можно чек открыть, проверить и отменить, однако проще по-моему проверить статус непосредственно через АПИ Честного знака. Это те же секунды. Правда, для этого на компьютере должна быть электронная подпись. Да и нужно ли их проверять в момент продажи - вопрос. Приняли товар, проверили коды и забыли. А далее уже в момент онлайн проверки ККМ - чтобы [M+] получить.

2. Оффлайн проверка, как я понял - это проверка на формат самой маркировки. Нужно указать тип маркировки и аппарат проверит, что код маркировки валиден. Естественно, о том, есть он в Честном знаке или нет и в каком он статусе, аппарат не скажет.

3. Если хоть один код маркировки не пройдет проверку, чек не нужно печатать - товар который не прошел проверку нужно заменить на другой.
17. user1313774 19.01.22 11:10 Сейчас в теме
(16) Огромное спасибо! В данный момент под рукой нет аппарата под ФФД 1.2, приходится работать "вслепую".
26. 1141799 18.02.22 08:55 Сейчас в теме
(16)
. Если хоть один код маркировки не пройдет проверку, чек не нужно печатать - товар который не прошел проверку нужно заменить на другой.



Добрый день. Подскажите где в 1с Ка 2.4 увидеть, что код маркировки не прошел проверку? Я только в самом чеке это вижу.
18. alexey-simf 38 21.01.22 15:50 Сейчас в теме
Сейчас как раз воюю с ФФД 1.2 (Самописный кассовый клиент не 1С, который взаимодействует с фискальником через JSON).
В документации от Атола есть метод "validateMarks" ("Проверка массива КМ"), который позволяет проверить массив данных о кодах маркировки (далее КМ) в одно действие; результатом является массив результатов проверки каждого из КМ (порядок в ответе соответствует порядку в запросе). Если я правильно понял, то выигрыш в сравнении с методом "beginMarkingCodeValidation", как минимум, в отсутствии необходимости опрашивать фискальник на наличие результата после каждого КМ.

На fs.atol.ru / Программное обеспечение / ДТО / 10.х / существует файл "Работа с ФФД 1.2.pdf". В нём для JSON есть три блок-схемы взаимодействия с фискальником, во второй из них как раз используется метод "validateMarks".
В том же pdf есть пример, где параметр "validateMarkingCodes" в методе "sell" используется со значение "false", т.е. в этом методе уже не надо повторно выполнять проверку КМ, а только записать их чтобы фискальник передал их ОФД.

Ещё раз повторюсь, я сейчас только разбираюсь и потому уверенность в своих выводах не стопроцентная.
19. slava_1c 602 21.01.22 17:44 Сейчас в теме
(18)Возможно JSON будет работать немного по другому, нежели команды.

У меня как раз и не получалось сначала ВСЕ проверить, а потом просто указать коды с признаком успешной валидации.

Когда я делал проверку валидации отдельно, до открытия чека, - он упорно не отсылал код в ЧЗ и признак [M+] не ставил.

Поэтому я оставил построчную проверку и отправку внутри открытого чека.

Попробуйте - возможно в варианте JSON запроса все отработает как нужно. Удачи в тестировании!
20. Dark_Warrior56 27.01.22 16:13 Сейчас в теме
(18) Скажите, вам удалось победить проверку КМ через json?)
22. alexey-simf 38 03.02.22 18:03 Сейчас в теме
(20)
Хорошие примеры, позволяющие понять последовательность, нашёл в онлайн документации от атола (integration. и далее).
Слева выбрать "Работа с марками в ФФД 1.2" а справа смотреть примеры для "Python" или "Java"

Примеры JSON
Dark_Warrior56; +1 – Ответить
23. Dark_Warrior56 03.02.22 21:32 Сейчас в теме
(22) Спасибо, в мануал поглядываю. "validateMarkingCodes" не использовал, правда.
Подскажите, как вы кодируете КМ? Я беру полный КМ (с криптохвостом), меняю GS1 на символ(29) и перегоняю в Base64. КМ в таком виде нормально принимает тест маркировки в ДТО, но он же в json возвращается с ошибкой "409 Некорректный код маркировки".
24. alexey-simf 38 04.02.22 11:03 Сейчас в теме
(23)
Подскажите, как вы кодируете КМ? Я беру полный КМ (с криптохвостом), меняю GS1 на символ(29) и перегоняю в Base64
Это делает разработчик кассовой программы (на C#), но по сути так же, только без замены символов; всегда только полный код с криптохвостом.

Я сначала в тестовой утилите занимался отладкой JSON, а когда получилось полностью прогнать всю цепочку действий, тогда отдал эти JSONа разработчику кассовой программы.

В случае ругательств на некорректность КМ я всегда дополнительно проверял их в УТ 11: Закупки - Обмен с ИС МП - (см. также) Проверка кодов маркировки - получалось информативней. Причём как в base64, так и в чистом виде.
Dark_Warrior56; +1 – Ответить
25. Dark_Warrior56 08.02.22 13:29 Сейчас в теме
(24) Если что, проблема решилась добавлением в json параметра "validateMarkingCodes": true и настройкой в драйвере "Для проверки КМ использовать прямой доступ к ФН-М". Это если кто-то забредет в эту ветку с аналогичной проблемой.
27. alexey-simf 38 05.03.22 11:35 Сейчас в теме
(25) Вчера как раз столкнулся с проблемой. В тестовой утилите при установленной галочке про прямой доступ к ФН-М json-запрос возвращал корректный результат, а без этой галочки, была ошибка 402 на тему отсутствия связи (вчера с DNS-проблемы были в Крыму, а может и по всей РФ). В то же время, кассовое ПО, отправляя json-запрос драйверу через web-сервис всегда получало ошибку 402, словно упомянутая галочка игнорировалась :(
28. user897732 15.03.22 11:11 Сейчас в теме
Добрый день! А подскажите, пожалуйста, один момент.
В целом в принципе то все понятно, но вот, что в Вашем примере:

validationResult = FR.getParamInt(FR.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT);
FR.acceptMarkingCode();

что в примерах того же Атола, выходит, что Вы получаете результат проверки и сразу же делаете акцепт.
То есть акцепт никак не зависит от результатов проверки? А как же тогда это: " Если хоть один код маркировки не пройдет проверку, чек не нужно печатать - товар который не прошел проверку нужно заменить на другой."

Тем более у Вас там таймаут есть при проверке, то есть КМ в принципе может даже не завершить еще проверку,
что тогда будет в validationResult? Ноль?
29. slava_1c 602 15.03.22 13:23 Сейчас в теме
(28) Добрый день.

Смысл том что в цикле мы сначала запрашиваем статус функцией FR.getMarkingCodeValidationStatus();

и если переменная FR.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY равна TRUE,

то тогда цикл прерывается и уже в переменную FR.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT записывается результат проверки.

Цикл также может прерваться по таймауту, но в случае проверки одного кода - этого таймаута достаточно.

Т.е. проверка происходит в цикле выше, а не в конструкции getParamInt(FR.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT);
30. user897732 15.03.22 13:40 Сейчас в теме
(29) Я понимаю, что проверка происходит в цикле, но ведь то что переменная FR.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY равна TRUE, означает, что проверка завершилась, но это ведь не означает, что она прошла успешно? Наверняка могут быть какие нибудь ошибки.
И опять же, что возвращается в этом параметре:

validationResult = FR.getParamInt(FR.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT);

если цикл завершился по таймауту?
31. user897732 15.03.22 13:45 Сейчас в теме
(29) Есть же кроме LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT еще и LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_ERROR, который возвращает ошибку онлайн проверки,
вот я и не могу понять, почему ни в Вашем примере ни в Атоловском это не проверяется
32. slava_1c 602 15.03.22 14:53 Сейчас в теме
(31) Результат в любом случае, неуспешно по таймауту он завершился или же успешно устанавливается в переменную LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT в момент регистрации чека.

В любом случае, если результат не удовлетворительный, чек не пробьется по ошибке в момент регистрации

FR.registration() <> 0
33. user897732 15.03.22 15:03 Сейчас в теме
(32) А ну вот что то такое я подозревал, только не смог найти нигде подтверждения.
Спасибо большое. Пока не на чем было тестироваться, возможно завтра наконец привезут МГМ с ФФД 1.2
и тогда все станет окончательно ясно.
34. user897732 15.03.22 15:07 Сейчас в теме
(32) да, прошу прощения за беспокойство еще раз,
остался еще один непонятный момент, метод writeSalesNotice
в документации числится для передачи уведомления о реализации товара,
а в Вашем примере его нет, он не обязателен?
35. slava_1c 602 15.03.22 15:35 Сейчас в теме
По тексту в комментариях я указывал что тестировал и внедрял данный код на шинах и обуви

Для товарных групп: Шины, Легкая промышленность, Духи, Обувь, заполнять тег 1265 "Значение отраслевого реквизита" не требуется.

Если у Вас необходимо отправлять уведомление, то значит нужно выполнять этот метод.
38. user897732 16.03.22 10:07 Сейчас в теме
(35) Понял, спасибо, у нас лексредства, сейчас буду узнавать для них
36. alexey-simf 38 15.03.22 16:51 Сейчас в теме
Хочу поделиться новыми знаниями.

Ранее я приводил пример проверки массива кодов маркировки (validateMarks). Результат может быть двух видов (визуально, не обращая внимания на значения)

Если фискальник смог связаться с сервисом проверки кодов


Если фискальник НЕ смог связаться с сервисом проверки кодов


В обоих случаях ответ содержит секцию "itemInfoCheckResult".

В описании API на integration_atol_ru есть "Пример чека прихода (предварительная проверка маркированного товара под ФФД ≥ 1.2, передача кода маркировки)". Который, по сути, является примером использования метода "sell".
У этого метода есть параметр "items", содержащий данные строк. Для каждой строки может быть задано много параметров, но нам сейчас важен "imcParams". В этом объекте есть несколько параметров, среди которых есть "itemInfoCheckResult" (Результат проверки). Так вот, в случае регистрации чека ("type": "sell") при "validateMarkingCodes": false (проверка КМ проводится заранее и не проводится в момент регистрации) в упомянутый чуть выше параметр строки "itemInfoCheckResult" следует передавать набор значений, полученный ранее при проверке КМ по массиву (validateMarks). Этот результат определяет какой вариант будет напечатан в чеке: М / М- / М+.
37. slava_1c 602 15.03.22 17:32 Сейчас в теме
(36) Забавно. Получается, можно безо всякой проверки заполнить эту структуру правильными флагами и регистрировать чеки с [M+] вообще ничего не проверяя...
39. alexey-simf 38 24.03.22 17:10 Сейчас в теме
(37) ну вроде так, если я правильно всё это понимаю.

Задавал вопрос в Атол:
Существует ли способ выполнить продажу маркированных духов если на кассе
временно отсутствует доступ в интернет?


Получил ответ:
конечно существует
послали запрос на проверку

получили статус "сервер ИСМ не отвечает"
с этим статусом и произвели регистрацию


Т.е. разработчик ПО "сам" указывает статус, с которым будет происходить регистрация. Скорее всего, в коммерческих решениях всё сделано правильно, но вот в самописных...
40. speedwagon33 04.04.22 23:46 Сейчас в теме
Можете пожалуйста помочь, уже всю голову сломал. Пытаюсь передать маркированные шины - все очень худо. Все время возвращается ошибка с неверной передачей кода маркировки. Код отсканирован через сканер. Но ошибка со стороны кассы летит и летит. В чем проблема?
41. slava_1c 602 05.04.22 04:29 Сейчас в теме
(40) Слишком мало информации.

1. Какой код ошибки и описание ошибки?
2. Какой-то конкретный код не передается, а остальные передаются? Если да, то его желательно показать
3. Что пишет лог кассы?
4. Пользуетесь для передачи программным кодом из публикации или чем-то другим?
42. speedwagon33 05.04.22 07:17 Сейчас в теме
(41)1) Возвращает код ошибки 409 - неверная маркировка. При попытке проверить валидность кода в цикле пишет что код не найден в КМ. 422 вроде бы ошибка
2)Тестировал на двух кодах - оба не передаются
3)Лог могу куда нибудь в мессенджер прислать
4)Использую почти полностью код твой, только момент подключения к ККМ другой. Там стучит по tcpip, но думаю это не принципиально, связь с кассой есть.
43. speedwagon33 05.04.22 08:43 Сейчас в теме
(41) Пример кода:
0104717784236841215ga2rHsmCq>?H91EE0692MbGeVwKZokrwRA64WXuL/opbsb/23lBNggP0z9jnzX8=


Лог кассы возвращает:
2022.04.05 08:39:25.005 T:00012204 INFO [FiscalPrinter] libfptr_get_marking_code_validation_status()
2022.04.05 08:39:25.005 T:00012204 ERROR
[FiscalPrinter] Объекту 0x1C651D68 присвоен код ошибки 422 [Данный КМ отсутствует в таблице]


Уже попробовал даже в 64Base передать - всё равно безуспешно. Лог уже набился на 600 мб от таких манипуляций :)
44. speedwagon33 05.04.22 08:44 Сейчас в теме
(41)
При регистрации чека следующее в логе:

2022.04.05 08:39:25.024 T:00012204 INFO [FiscalPrinter] > LIBFPTR_PARAM_COMMODITY_NAME (65631) = "Шина R15 195/50 MAXXIS (лето)"
2022.04.05 08:39:25.024 T:00012204 INFO [FiscalPrinter] > LIBFPTR_PARAM_PRICE (65632) = 6160
2022.04.05 08:39:25.024 T:00012204 INFO [FiscalPrinter] > LIBFPTR_PARAM_QUANTITY (65633) = 1
2022.04.05 08:39:25.024 T:00012204 INFO [FiscalPrinter] > LIBFPTR_PARAM_TAX_TYPE (65569) = 6
2022.04.05 08:39:25.024 T:00012204 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE (65760) = "30 31 30 34 37 31 37 37 38 34 32 33 36 38 34 31 32 31 35 67 61 32 72 48 73 6D 43 71 3E 3F 48 39 31 45 45 30 36 39 32 4D 62 47 65 56 77 4B 5A 6F 6B 72 77 52 41 36 34 57 58 75 4C 2F 6F 70 62 73 62 2F 32 33 6C 42 4E 67 67 50 30 7A 39 6A 6E 7A 58 38 3D"
2022.04.05 08:39:25.024 T:00012204 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_STATUS (65846) = 1
2022.04.05 08:39:25.024 T:00012204 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT (65886) = 0
2022.04.05 08:39:25.024 T:00012204 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_PROCESSING_MODE (65852) = 0
2022.04.05 08:39:25.024 T:00012204 INFO [FiscalPrinter] > LIBFPTR_PARAM_TAX_TYPE (65569) = 6
2022.04.05 08:39:25.024 T:00012204 INFO [FiscalPrinter] > LIBFPTR_PARAM_DEPARTMENT (65568) = 1
2022.04.05 08:39:25.024 T:00012204 INFO [FiscalPrinter] libfptr_registration()
2022.04.05 08:39:25.024 T:00012204 INFO [FiscalPrinter] output > 34
2022.04.05 08:39:25.026 T:00012204 INFO [Transport] send fiscal (1D) 1D 40 33 34 (4 bytes total)
2022.04.05 08:39:25.031 T:00012204 INFO [Transport] recv fiscal (1D) 1D 30 30 34 3B 34 3B 34 3B 32 36 32 3B (13 bytes total)
2022.04.05 08:39:25.031 T:00012204 INFO [FiscalPrinter] input < 4;4;4;262;
2022.04.05 08:39:25.031 T:00012204 INFO [FiscalPrinter] Чтение таблицы КМ (0 элементов)
2022.04.05 08:39:25.031 T:00012204 ERROR [FiscalPrinter] Объекту 0x1C651D68 присвоен код ошибки 409 [Некорректный код маркировки]
2022.04.05 08:39:25.031 T:00012204 INFO [FiscalPrinter] libfptr_close()
45. rinat_az 35 05.04.22 09:58 Сейчас в теме
На лекарствах такой вариант почему то не проходит, поэтому я загоняю код через setParamStrHex в hex-ах.
Но вопрос по тегу 1261 (отраслевой стандарт ) если в одном чеке и лекарства и молоко и вода. кто нибудь в курсе как быть? в ФФД 1.1 mdlp указывается для конкретно позиции, т.е. все понятно, а в ФФД 1.2 он же на весь чек..
46. speedwagon33 05.04.22 11:40 Сейчас в теме
(45) Выше ныл, разобрался в чём дело. Нужно правильно расставить непечатаемые символы. Все дело исключительно в них. Не обязательно в 16СС всё это дело переводить.
У меня вопрос с шинами стоял.
Нужно смотреть лог - сейчас в логе корректно начали проставляться символы 29 - до этого криво прилетало.

				
ПодготовленныйШК = СокрЛП(СокрЛП(Т[Сч].ЧестныйЗнак));
				
ПодготовленныйШК = СтрЗаменить(ПодготовленныйШК,Разделитель,"");
	
КМ = Лев(ПодготовленныйШК, 31) + Разделитель + Сред(ПодготовленныйШК, 32, 6) + Разделитель + Сред(ПодготовленныйШК, 38);


Как то так у меня это выглядит, так же как и у ТС
48. slava_1c 602 05.04.22 14:02 Сейчас в теме
(46) Прекрасно, что разобрались, поздравляю. Кстати, для проверки работы сканера на самом сайте Честного знака есть специальный сервис проверки. Если сканер подключен как эмулятор клавиатуры - сначала нужно проверить сканирование на нем.
У клиента были сканеры, которые просто не считывали спецсимволы.
47. speedwagon33 05.04.22 11:41 Сейчас в теме
(45) В ФФД 1.2 убрали поддержку ТЭГа 1261, сами только вчера на новый формат данных перешли.
49. rinat_az 35 06.04.22 08:42 Сейчас в теме
(47)
и поддержку ТЭГа 126
а есть какоето постановление, документ... Че-то сижу трясу инет и нет ничего везде только рекомендации по заполнению..
50. slava_1c 602 06.04.22 12:51 Сейчас в теме
(49) Как написано в самом АТОЛе
"В уведомление о реализации товара с КМ также можно передать данные о реализации маркированного товара с помощью метода writeSalesNotice(), который принимает параметры:
1228 - ИНН клиента
1261 - отраслевой реквизит чека (можно несколько)" Т.е. несколько допустимо
https://integration.atol.ru/api/?csharp#proverka-km
51. Tarlich 89 12.04.22 20:43 Сейчас в теме
Просьба пример цикла когда несколько товаров (и не весь маркируемый)
и если можно пример когда когда продаем количество меньше одного (т.е вскрыли пачку и продаем частями , то все равно должны указать марку)
52. slava_1c 602 15.04.22 04:24 Сейчас в теме
(51) хмм... если честно, не думал что это может вызвать какие то трудности, да и зависит все от конкретной реализации - я же не знаю как у вас реализовано хранение кодов маркировки. Если там же где товары, тогда выборка по товарам, если в отдельной таблице, тогда это будет запрос или перебор двух таблиц с поиском по идентификатору строки.

Грубо так:

Для каждого стр из Товары Цикл

    Если стр.Товар.ВидНоменклатуры = ВидМаркируемогоТовара тогда
         
        ШтрихкодМаркировки = стр.ШтрихкодМаркировки;

        ПодготовленныйШК = СокрЛП(ШтрихкодМаркировки); 
        ....
        FR.acceptMarkingCode();

    КонецЕсли;

КонецЦикла;
Показать



все коды проверили, если все акцептовалось - дальше уже цикл самой продажи.

Продажа меньше одного - это, я так понимаю, работа с SSCC кодами упаковок и агрегацией. По идее вложенные на этапе упаковки конечные коды маркировки должны без проблем пробиваться при продаже поштучно через ККМ.
53. Бит 80 05.05.22 08:05 Сейчас в теме
Может кто подскажет, не удаётся проверить марку пачки сигарет (в том числе и драйвером атола) как пример qr - 04640030090846KjbdAiJ
base64 - MDQ2NDAwMzAwOTA4NDZMNTtValdI
MarkingCode - HTA0NjQwMB0zMDA5MDg0NktqYmRBaUo=
Заранее большое человеческое спасибо
54. slava_1c 602 05.05.22 08:39 Сейчас в теме
Не занимаюсь сигаретами, но ради интереса на пачке отсканировал код - 00000046206008NWqX<Q<AC68mC3I

Он в ЧЗ без проблем бьется

Может наведет на мысль.

У вас в примере какой то очень короткий получается. И не бьется естественно.
55. Бит 80 05.05.22 15:53 Сейчас в теме
В том то и дело, что проверка пачки через честный знак проходит (сама пачка получена через запрос о составе блока), но проверка не проходит не в 1с, не в драйвере атола, вот и удумаю где косяк в драйвере атола (релизе прошивки или самом драйвере) или в алгоритме преобразования MarkingCode. Думал может кто проверит и даст какой у него получается MarkingCode на рабочей базе в которой отправляются марки. Это хоть как то сузит разброс возможных проблем. Сами атоловцы отправили в драйвер и все на этом.
56. Бит 80 12.05.22 02:43 Сейчас в теме
(54) да Вы оказались правы, проблема в отсутствии криптохвоста у марки пачки (так как сами марки получаются через запрос содержимого блока) через ЧЗ, а он возвращает без криптохвоста. Может кто сталкивался с проблемой пробития ффд 1.2 марки без криптохвоста. Или это безвыходная ситуация?
57. slava_1c 602 12.05.22 06:58 Сейчас в теме
(56)Да в том то и дело, что при проверке подразумевается полный код с криптохвостом. Однако, выше по сообщениям (36) описан алгоритм без проверки кодов. Можно попробовать копнуть туда.
58. balirinka 18.05.22 17:16 Сейчас в теме
Без крипто-хвоста бьется, но проверку не пройдет, будет [M-] на чеке. А почему вы запрашиваете состав блока? Если блок отсканировали, то можно передать код блока с крипто-хвостом на кассу.
59. пользователь 03.06.22 21:23
Сообщение было скрыто модератором.
...
60. пользователь 04.06.22 16:06
Сообщение было скрыто модератором.
...
61. user1796722 09.06.22 07:29 Сейчас в теме
Добрый день. Тоже мучаюсь с кодом маркировки шин. Можно пример корректного КМ из файла логов. Уже голову сломал что нужно еще докрутить чтобы Код прошел проверку.

Приходит ответ что КМ имеет некорректный формат
Вот код маркировки из логово
010467018882925021xpFnolGDIAy9p91EE0692aTIUIotYb7jKc0OBacg­­OKUkJyRAlnsUB/0rAiHfzFUk=
62. user1796722 09.06.22 10:19 Сейчас в теме
Я правильно понимаю:

01 04717784236841 21 - это GTIN
5ga2rHsmCq>?H - это серийный номер
92MbGeVwKZokrwRA64WXuL/opbsb/23lBNggP0z9jnzX8= - это GTIN и серийный номер в строке кодировки base64

Откуда берется часть кода "91EE06"? Или это константа и всегда принимает такое значение?
63. slava_1c 602 09.06.22 13:49 Сейчас в теме
64. user1796722 10.06.22 04:52 Сейчас в теме
65. elenikiti 04.07.22 12:18 Сейчас в теме
Добрый день. Самописная конфигурация на 77. Работаем пока в тестовом контуре.
При печати чека с одним кодом всё ОК. При попытки пробить два товара с КМ на втором товаре ошибка:
Ответ 26 Ошибка Неверный формат команды
Проверяю КМ в цикле по товарам. Чек уже открыт.
Посоветуйте пожалуйста, что с этим делать?
66. slava_1c 602 04.07.22 17:29 Сейчас в теме
(65)
Ответ 26 Ошибка Неверный формат команды


Добрый день.

Первым делом посмотрите в логе ККМ - что вызвало ошибку.

В 90% случаев - ошибка становится ясна.

Также напомню то, что говорил выше: проверка товаров на предмет валидации кодов
FR.acceptMarkingCode()
должна проводиться непосредственно перед отправкой строки чека на регистрацию
67. elenikiti 05.07.22 09:09 Сейчас в теме
К сожалению в логе мало что понимаю, фактически не работала с кассами до этого момента.
Думаю это вот этот фрагмент:
2022.07.05 09:04:01.011 T: T:0000217C ERROR [FiscalPrinter] Код ошибки ККТ - 3635h
2022.07.05 09:04:01.011 T: T:0000217C ERROR [FiscalPrinter] Объекту 0x04AA4340 присвоен код ошибки 410 [Неверное состояние процесса проверки КМ]
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] > LIBFPTR_PARAM_COMMODITY_NAME (65631) = "А/ш ш 195/55/16 PIRELLI Formula Ice 91T. ЦЕНА ПО АКЦИИ."
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] > LIBFPTR_PARAM_MEASUREMENT_UNIT (65851) = 0
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE (65760) = "0108019227248081215Ckth%XdlI0al"
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_STATUS (65846) = 1
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT (65886) = 65886
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_PROCESSING_MODE (65852) = 0
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] > LIBFPTR_PARAM_PRICE (65632) = 10
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] > LIBFPTR_PARAM_QUANTITY (65633) = 1
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] > LIBFPTR_PARAM_TAX_TYPE (65569) = 7
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] > 1212 (1212) = 1
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] > 1214 (1214) = 4
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] libfptr_registration()
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] output > 34
2022.07.05 09:04:01.019 T: T:0000217C INFO [Transport] send fiscal (08) 08 40 33 34 (4 bytes total)
2022.07.05 09:04:01.020 T: T:0000217C INFO [Transport] recv fiscal (08) 08 30 30 34 3B 34 3B 34 3B 32 36 32 3B (13 bytes total)
2022.07.05 09:04:01.020 T: T:0000217C INFO [FiscalPrinter] input < 4;4;4;262;
2022.07.05 09:04:01.020 T: T:0000217C INFO [FiscalPrinter] Чтение таблицы КМ (1 элементов)
2022.07.05 09:04:01.020 T: T:0000217C INFO [FiscalPrinter] 1. [CRC = -2087129350, 2106 = -1] 30 31 30 38 30 31 39 32 32 37 32 34 38 30 38 31 32 31 35 43 6B 74 68 25 58 64 6C 49 30 61 6C
2022.07.05 09:04:01.020 T: T:0000217C INFO [FiscalPrinter] output > bQ0;0;1;18446744073709551615;0108019227248081215Ckth%XdlI0al;
2022.07.05 09:04:01.020 T: T:0000217C INFO [Transport] send fiscal (09) 09 40 62 51 30 3B 30 3B 31 3B 31 38 34 34 36 37 34 34 30 37 33 37 30 39 35 35 31 36 31 35 3B 30 31 30 38 30 31 39 32 32 37 32 34 38 30 38 31 32 31 35 43 6B 74 68 25 58 64 6C 49 30 61 6C 3B (63 bytes total)
2022.07.05 09:04:01.021 T: T:0000217C INFO [Transport] recv fiscal (09) 09 59 44 (3 bytes total)
2022.07.05 09:04:01.021 T: T:0000217C ERROR [FiscalPrinter] Код ошибки ККТ - 4459h
2022.07.05 09:04:01.021 T: T:0000217C ERROR [FiscalPrinter] Объекту 0x04AA4340 присвоен код ошибки 26 [Неверный формат команды]
2022.07.05 09:04:01.032 T: T:0000217C INFO [FiscalPrinter] libfptr_cancel_receipt()
2022.07.05 09:04:01.032 T: T:0000217C INFO [FiscalPrinter] output > a1
2022.07.05 09:04:01.033 T: T:0000217C INFO [Transport] send fiscal (0A) 0A 40 61 31 (4 bytes total)
2022.07.05 09:04:01.033 T: T:0000217C INFO [Transport] recv fiscal (0A) 0A 3B 61 (3 bytes total)
2022.07.05 09:04:01.033 T: T:0000217C ERROR [FiscalPrinter] Код ошибки ККТ - 613Bh
2022.07.05 09:04:01.033 T: T:0000217C INFO [FiscalPrinter] output > 01
2022.07.05 09:04:01.033 T: T:0000217C INFO [Transport] send fiscal (0B) 0B 40 30 31 (4 bytes total)
2022.07.05 09:04:01.034 T: T:0000217C INFO [Transport] recv fiscal (0B) 0B 30 30 30 3B 37 3B 30 3B 30 3B 30 3B (13 bytes total)
2022.07.05 09:04:01.034 T: T:0000217C INFO [FiscalPrinter] input < 0;7;0;0;0;
2022.07.05 09:04:01.034 T: T:0000217C ERROR [FiscalPrinter] Объекту 0x04AA4340 присвоен код ошибки 81 [Чек закрыт - операция невозможна]
68. elenikiti 05.07.22 09:26 Сейчас в теме
Все ваши рекомендации внимательно прочитала.
Добилась того, что чек с одним КМ печатается.
Но при попытки пробить два товара с КМ получаю ошибку.
69. slava_1c 602 05.07.22 14:29 Сейчас в теме
А у Вас. получается, на кассовом оборудовании не ФФД1.2?

Я смотрю посылается короткий код. В ФФД1.2 обязательно длинный.

И если производится проверка, то должна быть последовательность - начало проверки, валидация, и в момент списания - акцепт.

beginMarkingCodeValidation
getMarkingCodeValidationStatus
acceptMarkingCode

У Вас в коде этих запросов нет.
70. elenikiti 06.07.22 11:14 Сейчас в теме
ФФД 1.2
КМ короткие, такие дал тестовый контур ЧЗ.
Может запросы выше в логе остались?
Файл прикладываю, буду благодарна за помощь.
Прикрепленные файлы:
fptr10.log
71. slava_1c 602 06.07.22 16:07 Сейчас в теме
В приложенном файле нет ни одного чека, подозреваю, что это сегодняшний лог и в нем не было никаких транзакций по типу libfptr_open_receipt

Проще всего - покажите код печати чека на 77.
72. elenikiti 07.07.22 11:37 Сейчас в теме
Объект.openReceipt(); // открыли чек 
Сообщить("открыли чек ");
//Табличная часть
СписокТоваров.ВыбратьСтроки();
Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл  Сообщить("позиция  "+СписокТоваров.Наименование);
	ПризнакНаличияКМ=32;
        Если ПустоеЗначение(СписокТоваров.КМ)=0 Тогда    // Код маркировки 
			ПризнакНаличияКМ=33;
			mark = СокрЛП(СписокТоваров.КМ);   
 			Сообщить("КМ  "+mark);
		        Статус = Объект.LIBFPTR_MES_PIECE_SOLD; // штучный товар 1 
			Штуки  = Объект.LIBFPTR_IU_PIECE;
			
Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_CODE_TYPE,Объект.LIBFPTR_MCT12_AUTO); 
			Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_CODE, mark);
			Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_CODE_STATUS, Статус);  // штучный товар
		//	Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_WAIT_FOR_VALIDATION_RESULT, 1);
			Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0);	
			Объект.beginMarkingCodeValidation();  //начать проверку КМ  

			ВремяНачала = ТекущееВремя(); ВремяОжидания = ТекущееВремя() + 100;
			Сообщить("-------------");
			Сообщить("Начата проверка КМ  "+mark);
			Пока 1=1 Цикл
				Объект.getMarkingCodeValidationStatus();   
				ПроверкаЗавершена = 
                               Объект.getParamBool(Объект.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY);
				Если ПроверкаЗавершена = 1 тогда  // проверка завершена  
					прервать;
				КонецЕсли;	
   		                Если ТекущееВремя() > ВремяОжидания тогда Сообщить("Время  истекло. ");
					прервать;
		                КонецЕсли;	
			КонецЦикла;
			
Сообщить("КМ был отправлен на сервер  "+Объект.getParamBool(Объект.LIBFPTR_PARAM_IS_REQUEST_SENT));
validationResult = Объект.getParamInt(Объект.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT); 
			Если validationResult = 0 Тогда																									
				Сообщить("Отмена чека при проверки КМ! ");
				Объект.cancelReceipt(); // отмена чека
				Объект.close();
				СтатусВозврата(0);
				Возврат 0;
			КонецЕсли;
			
			Объект.acceptMarkingCode();	// подтверждение реализации 		
			Объект.setParam(Объект.LIBFPTR_PARAM_COMMODITY_NAME,СокрЛП(СписокТоваров.Наименование));  	
//Объект.setParam(Объект.LIBFPTR_PARAM_MEASUREMENT_UNIT, Объект.LIBFPTR_IU_PIECE); 
Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_CODE, mark);
Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_CODE_STATUS, 1); //штучный 
Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT, validationResult);
Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0); 
			Сообщить("обработка КМ "+mark+" завершена. ");
		Иначе
		  	Объект.setParam(Объект.LIBFPTR_PARAM_COMMODITY_NAME,СокрЛП(СписокТоваров.Наименование));
        КонецЕсли;
		Объект.setParam(Объект.LIBFPTR_PARAM_PRICE, СписокТоваров.Цена);
		Объект.setParam(Объект.LIBFPTR_PARAM_QUANTITY, СписокТоваров.Количество);
 		Объект.setParam(1212, ПризнакНаличияКМ); 
//параметр для ФФД 1.2!!! 32 - товар не имеющий код маркировки, 33 - товар имеющий код маркировки
 		
 		Сообщить("Попытка регистрации оплаты. ");

	 	Если ПолученоНал > 0 Тогда
                       Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_TYPE, Объект.LIBFPTR_PT_CASH); 
			Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_SUM, ПолученоНал);
			Если Объект.Payment() <> 0 тогда   //Зарегистрировать оплату
				Ошибка = 1;
	  			ПолучитьОписаниеРезультата(Объект,"Оплата не прошла");
				глСообщитьВЛог("Атол, Ошибка оплаты налом " + ОписаниеРезультата);
				Попытка
					Объект.cancelReceipt(); // отмена чека
					Объект.close();
				Исключение
				КонецПопытки;
	                       Возврат 0;
	            КонецЕсли;   
		КонецЕсли;

	лСуммаВстречноеПредставление = глФРДопПарам.Получить("СуммаВстречноеПредставление");
	Если ПустоеЗначение(лСуммаВстречноеПредставление) = 0 Тогда
		Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_TYPE, Объект.LIBFPTR_PT_OTHER);
		Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_SUM, лСуммаВстречноеПредставление);
			Если Объект.Payment() <> 0 тогда   //Зарегистрировать оплату
			Ошибка = 1;
			ПолучитьОписаниеРезультата(Объект,"Оплата не прошла");
			глСообщитьВЛог("Атол, Ошибка оплаты СуммаВстречноеПредставление " + ОписаниеРезультата);
			Попытка
				Объект.cancelReceipt(); // отмена чека
				Объект.close();
			Исключение
			КонецПопытки;
			Возврат 0;
		КонецЕсли;   
	КонецЕсли;

	Если Ошибка = 0 Тогда
		Сообщить("Можно закрыть чек! ");
		Объект.closeReceipt(); // Закрытие чека	
	КонецЕсли;

	Если Объект.checkDocumentClosed() < 0 Тогда   
		Сообщить("закрылся? "+Объект.getParamBool(Объект.LIBFPTR_PARAM_DOCUMENT_CLOSED));
		Если Объект.getParamBool(Объект.LIBFPTR_PARAM_DOCUMENT_CLOSED) = 0 Тогда
			Объект.cancelReceipt(); // отменить и сформировать заново 
		КонецЕсли;	
		Сообщить("напечатался? "+Объект.getParamBool(Объект.LIBFPTR_PARAM_DOCUMENT_PRINTED));
		Если Объект.getParamBool(Объект.LIBFPTR_PARAM_DOCUMENT_PRINTED) = 0 Тогда 
			Объект.cancelReceipt(); // отменить и сформировать заново 
			Если Объект.continuePrint() < 0  Тогда // не получилось напечатать.  заново
				Предупреждение("Чек не напечатан!"); // отключиться 
				ПолучитьОписаниеРезультата(Объект,"Печать не прошла");
				глСообщитьВЛог("Атол, Ошибка печати  " + ОписаниеРезультата);
				Попытка
					Объект.cancelReceipt(); // отмена чека
				Исключение
				КонецПопытки;
				Возврат 0;
			КонецЕсли;
		КонецЕсли;	
	КонецЕсли; //Проверить закрытие документа
Показать
73. slava_1c 602 07.07.22 12:48 Сейчас в теме
(72) Странно, в логе, который Вы ранее показывали - у вас строки

2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] > 1212 (1212) = 1
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] > 1214 (1214) = 4
2022.07.05 09:04:01.019 T: T:0000217C INFO [FiscalPrinter] libfptr_registration()

А в коде:

Объект.setParam(1212, ПризнакНаличияКМ);
//параметр для ФФД 1.2!!! 32 - товар не имеющий код маркировки, 33 - товар имеющий код маркировки 


т.е, 1212 = 33

А строк где 1214=4 и registration() НЕТ ВООБЩЕ!

Это, кстати дает ответ на вопрос почему не проходит когда две строки.

Внимательно изучите вот тут - это практически Ваш код

https://integration.atol.ru/api/?csharp#proverka-km
74. elenikiti 07.07.22 13:33 Сейчас в теме
Я натыкалась на это противоречие, но решила, что так и нужно:
1212 Признак предмета расчета int Все
75. elenikiti 07.07.22 13:34 Сейчас в теме
fptr.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, Constants.LIBFPTR_TAX_VAT10);
fptr.setParam(1212, 33);
fptr.setParam(1214, 4);
fptr.setParam(1260, industryInfo);
76. elenikiti 07.07.22 13:38 Сейчас в теме
Получается с КМ нужно использовать новые значения этого параметра, 32 или 33.
77. elenikiti 07.07.22 13:54 Сейчас в теме
Регистрация там есть, просто зацепила, когда подчищала код от комментов:
	Объект.setParam(1214, ПризнакСпособРасчета); 
        Сообщить("Попытка регистрации позиции. ");
		Если Объект.registration() <> 0 тогда  /// Регистрация позиции
 			ПолучитьОписаниеРезультата(Объект,"Регистрация позиции ");  
 			Ошибка = 1;
			Попытка
				Сообщить("Отмена чека при регистрации позиции! ");
				Объект.cancelReceipt(); // отмена чека
				Объект.close();
			Исключение
			КонецПопытки;
			СтатусВозврата(0);
			Возврат 0;
		Иначе
			Сообщить("Регистрация позиции выполнена. ");
		КонецЕсли;   
	КонецЦикла;	// Цикл по строкам товаров 
	Сообщить("Попытка регистрации оплаты. ");
	Если ПолученоНал > 0 Тогда
Показать
78. slava_1c 602 07.07.22 13:55 Сейчас в теме
Увидел ответ по поводу регистрации.
79. elenikiti 07.07.22 14:04 Сейчас в теме
Пока и с одной строкой не проходит печать.
Прикрепленные файлы:
fptr10.log
80. elenikiti 07.07.22 14:28 Сейчас в теме
Не понимаю. В какой-то момент сверка КМ делалась, не смотрю на то, что они короткие. Хотя бы 5-ку в статус я получала. Пусть с одним КМ, но чек хотя бы начинал печататься. Теперь и этого нет (((
Я переписала алгоритм. Сначала проверяю КМ, запоминаю ответ. Потом заново перебираю таблицу товаров.
Но это пока не помогло. Чек аннулируется т.к. не проходит проверку КМ.
Прикрепленные файлы:
fptr10.log
81. slava_1c 602 07.07.22 14:33 Сейчас в теме
В логе видно что даже кассир не регистрируется
output > B1кассир Никитина;1;
2022.07.07 14:16:57.510 T: T:00001774 INFO [Transport] send fiscal (0F) 0F 40 42 31 AA A0 E1 E1 A8 E0 20 8D A8 AA A8 E2 A8 AD A0 3B 31 3B (22 bytes total)
2022.07.07 14:16:57.511 T: T:00001774 INFO [Transport] recv fiscal (0F) 0F 59 44 (3 bytes total)
2022.07.07 14:16:57.511 T: T:00001774 ERROR [FiscalPrinter] Код ошибки ККТ - 4459h
2022.07.07 14:16:57.511 T: T:00001774 ERROR [FiscalPrinter] Объекту 0x049D13D0 присвоен код ошибки 196 [Не удалось зарегистрировать кассира]
2022.07.07 14:16:57.511 T: T:00001774 INFO [FiscalPrinter] libfptr_cancel_marking_code_validation()

Ошибок в процессе вывода чека никаких быть не должно - начните с этого
82. slava_1c 602 07.07.22 14:39 Сейчас в теме
И вот тут
Объект.getParamBool(Объект.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY);

Я бы задержку поставил.

А то в логе 100500 вызовов
83. elenikiti 07.07.22 15:01 Сейчас в теме
(82)
А то в логе 100500 вызовов


Это вот это место:
ВремяНачала = ТекущееВремя();
ВремяОжидания = ТекущееВремя() + 100;
Сообщить("-------------");
Сообщить("Начата проверка КМ  "+mark);
Пока 1=1 Цикл
Объект.getMarkingCodeValidationStatus();   //Сообщить("ожидаем проверки КМ  ");
ПроверкаЗавершена = Объект.getParamBool(Объект.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY);
Если ПроверкаЗавершена = 1 тогда  // проверка завершена  Перечисление.Булево.Да
	прервать;
КонецЕсли;	
Если ТекущееВремя() > ВремяОжидания тогда Сообщить("Заданное время ожидания ответа истекло. ");
	прервать;
КонецЕсли;	
КонецЦикла;
			
Сообщить("КМ был отправлен на сервер  "+Объект.getParamBool(Объект.LIBFPTR_PARAM_IS_REQUEST_SENT));
validationResult = Объект.getParamInt(Объект.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT); 
Показать


Вызовов много, так как жду ответа 100 секунд. Задержку в плане sleep() ?
84. slava_1c 602 07.07.22 15:11 Сейчас в теме
Да можно хоть пустым циклом))
85. slava_1c 602 07.07.22 15:15 Сейчас в теме
И все-таки на мой взгляд неправильно посылать в ФФД1.2 короткий код без симоволов GS1, хоть это и тестовый контур.

В том же примере с АТОЛа код вполне себе длинный.
86. elenikiti 07.07.22 15:32 Сейчас в теме
Я попыталась создать в тестовом контуре свой КМ, не дали! Требуют длину 12 символов ((
87. slava_1c 602 07.07.22 16:01 Сейчас в теме
Попробуйте коды которые у вас имеются отсканировать и передать в тестовый контур.
88. SeTIrk 20.07.22 09:15 Сейчас в теме
Не могу сообразить как должна выглядеть регистрация для нескольких КИЗ в 1 строке.

// для каждого киз
fptr.beginMarkingCodeValidation()
fptr.getMarkingCodeValidationStatus()
// ну и какую-то проверку что статус корректный.

// фиксируем кизы
fptr.acceptMarkingCode()

// открываем чек
fptr.openReceipt();

// вот тут не понятно, как их все передать?
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE, mark);
Показать
89. SeTIrk 20.07.22 11:01 Сейчас в теме
(88) Нашел на форуме атола: "один штук - одна позиция
так велит ФФД"
90. SeTIrk 20.07.22 13:21 Сейчас в теме
(88) Теперь другой вопрос, почему КИЗ блока может возвращать 5?
010460026600180121;6Y-AEs{FNC1}8005147000{FNC1}93sOTQ{FNC1}24010132404
От пачки нормально приходит 15.
Неужели придется все блоки в пачки переводить? Вроде бы блок идет потребительский уровень.
91. SeTIrk 21.07.22 07:37 Сейчас в теме
(90) Разобрался, видимо вечером голова не работала лишний {FNC1} возле 21 влепил. А когда писал заново расставил...
(88) Не экономно пробили 40 блоков одного вида, потратили пол рулона бумаги, можно омуль завернуть, и ещё останется.
92. Morikpro 26.07.22 23:07 Сейчас в теме
Отличная подсказка , автору спасибо !
93. m1_1976 13 08.09.22 12:26 Сейчас в теме
Для тех кто мучается с короткой маркой (короткая марка)

Пример: У нас только молочная продукция. 31 символ в марке.
Вот такое преобразование делаю :

КМ = Лев(ПодготовленныйШК, 24) + Разделитель + Сред(ПодготовленныйШК, 25);

То есть тот самый GS1 должен быть 25 символом

P.S.
Спасибо сообщению (63) ТАМ все понятно какие марки как ждет.
94. alexey-simf 38 19.09.22 10:11 Сейчас в теме
(93) Вдруг кто-то столкнётся.

Задавал вопрос в ЧЗ:

...нашёл в холодильнике несколько товаров из упомянутой категории и обнаружил, что код одного из этих товаров во второй группе содержал не 6, а 8 символов
01048110840014582123udBn5693:5x1
Что самое интересное, ваше мобильное приложение считает этот код правильным.


Получил ответ:


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

P.S. ссылка, присланная ЧЗ, редиректит на сторонний комерческий сайт. Надеюсь, это не станет поводом для её удаления. Других источников, быстро, беспалтно и с полным текстом решения, я не нашёл.
95. Xeromant 6 05.11.22 13:53 Сейчас в теме
Здравствуйте. А есть пример кода для продажи маркированного товара в офлайн режиме?
Какими значениями заполнять
LIBFPTR_PARAM_MARKING_WAIT_FOR_VALIDATION_RESULT
LIBFPTR_PARAM_MARKING_PROCESSING_MODE
LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT
96. slava_1c 602 08.11.22 11:27 Сейчас в теме
(95) Добрый день.

Лично сам в офлайн режиме продавать маркированный товар никогда не пробовал.

В данном обсуждении с 36 по 39 пост посмотрите.
97. basil_m 6 10.11.22 15:45 Сейчас в теме
Добрый день. Подскажите, при возврате маркированного товара для ффд1.2 алгоритм тот же?
98. slava_1c 602 10.11.22 16:21 Сейчас в теме
(97)Добрый день.

Абсолютно.

ВидЧека - "ВОЗВРАТ" и все.
99. basil_m 6 17.02.23 10:33 Сейчас в теме
Добрый день. Всю голову сломал уже, не знаю куда копать. При проверке кода через тест драйвер Атола - всё нормально. Отправляю этот же код в 1С, получаю в логах постоянно LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY (65850) = false, в итоге после acceptMarkingCode() получаю ошибку: Объекту 0x03A9FDF8 присвоен код ошибки 422 [Данный КМ отсутствует в таблице] и потом при пробитии чека: Объекту 0x03A9FDF8 присвоен код ошибки 409 [Некорректный код маркировки].
Код маркировки передаю полный, после серийного номера добавляю GS (Симв(29)). Наведите, плиз, на мысль в чем проблема?
Еще вопрос: запускать проверку марок надо после открытия чека? хотя пробовал и так, и так - результат один.
108. Sphinx2009 01.03.23 14:44 Сейчас в теме
(99) то же самое. и символ(29) тоже пробовал((((((
109. basil_m 6 01.03.23 20:00 Сейчас в теме
(108) я дальше так и не продвинулся, ушёл на больничный, ничего больше не попробовал. Завтра выйду, попробую драйвер обновить и буду дальше голову ломать
(108)
110. slava_1c 602 02.03.23 09:41 Сейчас в теме
(109)
(108) Постараюсь подсказать универсально.
1. Виды маркированного товара вводятся периодически новые, поэтому драйвера для ККМ нужны для новых товаров свежие.
2. Метод запроса валидности кода - АСИНХРОННЫЙ, если вы сразу же спросите ответ у сервиса функцией getMarkingCodeValidationStatus() - наверняка переменная LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY будет false. Поэтому в приведенном мною коде стоит цикл опроса.
Пока истина Цикл
		FR.getMarkingCodeValidationStatus();
		Если FR.getParamBool(FR.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY) тогда
			прервать;
		КонецЕсли;	
		Если ТекущаяДата() - ВремяНачала > ВремяОжидания тогда
			прервать;
		КонецЕсли;	
	КонецЦикла;
Показать

3. Проверяйте не на одном едиственном коде, а хотя бы на выборке из разных поставок а лучше поставщиков. Бывает, что те кто клеят коды неверно выводят на печать сам код (сколько ошибок было в том же Ocvita Barcode или на чистой библиотеке ZINT - они выдают на печать неверные коды) На сегодняшний день - самый верный драйвер печати из свежих конфигураций 1С.
100. slava_1c 602 17.02.23 11:44 Сейчас в теме
(99) Добрый день. А Вы на многих кодах пробовали или только на одном? Первое с чего нужно начать, это с того что убедиться что код правильный. Сейчас появилось мобильное приложение Честный знак для бизнеса. Попробуйте им отсканировать данный код. Он сразу напишет что с этим кодом не так. Тест драйвера не всегда правдив. Вернее зависит от драйвера
101. basil_m 6 17.02.23 16:29 Сейчас в теме
Пробовал на одном. Проверил его. Через приложение пишет "Товар проверен. Найден в системе маркировки".
102. basil_m 6 17.02.23 17:11 Сейчас в теме
Не заметил, что написали про ЧЗ для бизнеса. Проверил им: Структура КМ корректная, в обороте. Длина 38символов. По воде 37, так понял символ GS считает.
Всё вроде нормально.
103. slava_1c 602 17.02.23 17:25 Сейчас в теме
(102) Тогда рекомендую проверить отсылать код без обратной подготовки, тем более у воды действительно 38 знаков, а в моем примере для шин и обуви знаков гораздо больше.
Те. вот эту строку
КМ = Лев(ПодготовленныйШК, 31) + Разделитель + Сред(ПодготовленныйШК, 32, 6) + Разделитель + Сред(ПодготовленныйШК, 38);


Сделать такой
КМ = Лев(ПодготовленныйШК, 31) + Разделитель + Сред(ПодготовленныйШК, 32);


либо вообще на п проверку передавать чистый код без исправления
104. basil_m 6 17.02.23 17:41 Сейчас в теме
Отсылаю такой:
КодДляККТ=Лев(КодМаркировки,31)+Симв(29)+Сред(КодМаркировки,32,6)

Чистый код не пробовал передать. Но вроде без разделителя же не пройдет? Надо попробовать. Вообще странная ситуация. Через драйвер код проходит, а так ошибка.
105. slava_1c 602 17.02.23 18:02 Сейчас в теме
(104) Попробуйте передать тот код который идет со сканера. В нем уже должен быть символ GS.
Если не получится - показывайте лог с кассы - может с последовательностью проверки что не так.
106. slava_1c 602 17.02.23 18:04 Сейчас в теме
Да и еще, воду не так давно запустили, может быть драйвер кассы старый стоит, который о воде не знает ничего.
107. basil_m 6 17.02.23 19:55 Сейчас в теме
Да, попробую драйвер для начала обновить. Спасибо за советы.
111. basil_m 6 02.03.23 10:24 Сейчас в теме
Поставил сегодня последние драйвера атоловские 10.9.4.0. Результат тот же. Видимо где-то ошибка в запросе.
Гляньте, плиз, может что подскажите. И лог ККТ вкладываю
//стираем все запрошенные маркировки из памяти кассового аппарата
	Попытка
		FR.clearMarkingCodeValidationResult();
	Исключение
	КонецПопытки;
	ТаблМарок=СоздатьОбъект("ТаблицаЗначений"); 
	ТаблМарок.НоваяКолонка("КодМаркировки");
	ТаблМарок.НоваяКолонка("РезультатПроверкиСведений");  
	ТаблМарок.НоваяКолонка("КодМаркировкиККТ");  
	ВыбратьСтроки();
	Пока ПолучитьСтроку()=1 Цикл 
		Если (Товар.Маркировка=Перечисление.Булево.Да) Тогда   
			Если СтрДлина(СокрЛП(КодМаркировки))=37 Тогда //вода
				КодДляККТ=Лев(СокрЛП(КодМаркировки),31)+Симв(29)+Сред(КодМаркировки,32,6);
			КонецЕсли;      
			// Запускаем проверку КМ 
			Если Вид = Перечисление.ВидыОперацийЧекККМ.Чек Тогда
				Статус = FR.LIBFPTR_MES_PIECE_SOLD;      //штучный товар, реализован    
			Иначе	
				Статус = FR.LIBFPTR_MES_PIECE_RETURN;    //штучный товар, возвращен
			КонецЕсли;	
			FR.setParam(FR.LIBFPTR_PARAM_MARKING_CODE_TYPE, FR.LIBFPTR_MCT12_AUTO); //Тип КМ (тег 2101)
			FR.setParam(FR.LIBFPTR_PARAM_MARKING_CODE, КодДляККТ);      	     //КМ (тег 2000)
			FR.setParam(FR.LIBFPTR_PARAM_MARKING_CODE_STATUS, Статус);           //Планируемый статус КМ (тег 2003)
			//					FR.setParam(FR.LIBFPTR_PARAM_QUANTITY, Количество);                  //Количество товара (тег 1023)
			//					FR.setParam(FR.LIBFPTR_PARAM_MEASUREMENT_UNIT, FR.LIBFPTR_IU_PIECE); //Мера количества товара (тег 2108)  штуки, единицы 
			FR.setParam(2108, 0);                                                //Мера количества товара (тег 2108)  штуки, единицы
			//					FR.setParam(FR.LIBFPTR_PARAM_MARKING_WAIT_FOR_VALIDATION_RESULT, 1); 
			FR.setParam(FR.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0);            //Режим обработки кода товара (тег 2102) 	
			//					FR.setParam(FR.LIBFPTR_PARAM_MARKING_FRACTIONAL_QUANTITY, "1/2");    //(тег 1291)
			FR.beginMarkingCodeValidation(); 
			ВремяОжидания = ТекущееВремя() + 20; //20 секунд таймаут
			// Дожидаемся окончания проверки и запоминаем результат
			Пока 1=1 Цикл
				FR.getMarkingCodeValidationStatus();
				ПроверкаЗавершена=FR.getParamBool(FR.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY);
				Если ПроверкаЗавершена<>0 Тогда    
					Прервать;
					РезультатПроверкиСведений = FR.getParamInt(FR.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT); //Результат проверки сведений о товаре (тег 2106) 
				Иначе 
					РезультатПроверкиСведений = FR.getParamInt(FR.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT); //Результат проверки сведений о товаре (тег 2106) 
					Если ТекущееВремя() > ВремяОжидания Тогда   
						FR.cancelMarkingCodeValidation();	
						Прервать;
					КонецЕсли;
				КонецЕсли;
			КонецЦикла;     
			Сообщить(ПроверкаЗавершена);
			Сообщить("Результат проверки: "+РезультатПроверкиСведений);
			// Подтверждаем реализацию товара с указанным КМ
			FR.acceptMarkingCode(); 
			ТаблМарок.НоваяСтрока();
			ТаблМарок.КодМаркировки=КодМаркировки;
			ТаблМарок.РезультатПроверкиСведений=РезультатПроверкиСведений;  
			ТаблМарок.КодМаркировкиККТ=КодДляККТ;
			//				FR.clearMarkingCodeValidationResult();    //Очистка таблицы проверенных КМ в ФН
			//	FR.cancelMarkingCodeValidation();
		КонецЕсли;
	КонецЦикла;	
КонецЕсли;
//------------------------------
FR.setParam(FR.LIBFPTR_PARAM_DATA_TYPE, FR.LIBFPTR_DT_STATUS);   
FR.queryData();
НомерДок  = FR.getParamInt(FR.LIBFPTR_PARAM_RECEIPT_NUMBER);  // запрос номера чека  
НомерСмены=FR.getParamInt(FR.LIBFPTR_PARAM_SHIFT_NUMBER);    // запрос номера смены   
//запрос номера ФН и ФД
FR.setParam(FR.LIBFPTR_PARAM_FN_DATA_TYPE , FR. LIBFPTR_FNDT_LAST_RECEIPT); 
FR.fnQueryData();
НомерФД = FR.getParamInt(FR.LIBFPTR_PARAM_DOCUMENT_NUMBER)+1; 
FR.setParam(FR.LIBFPTR_PARAM_FN_DATA_TYPE , FR.LIBFPTR_FNDT_FN_INFO); 
FR.fnQueryData();
НомерККМ = FR.getParamString(FR.LIBFPTR_PARAM_SERIAL_NUMBER);   

//Открыть чек
FR.setParam(1021, Константа.Кассир.Наименование);
FR.operatorLogin();
//Тип чека
Если Вид = Перечисление.ВидыОперацийЧекККМ.ЧекНаВозврат Тогда
	FR.setParam(FR.LIBFPTR_PARAM_RECEIPT_TYPE, FR.LIBFPTR_RT_SELL_RETURN);
Иначе		
	FR.setParam(FR.LIBFPTR_PARAM_RECEIPT_TYPE, FR.LIBFPTR_RT_SELL);
КонецЕсли; 
//Запись реквизита телефон или e-mail
Если ПустоеЗначение(Клиент)=0 Тогда 
	FR.setParam(1008, СокрЛП(Клиент)); 
КонецЕсли;
FR.openReceipt(); 

// регистрация продажи  
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл    
	FR.setParam(FR.LIBFPTR_PARAM_PRICE, Цена);     
	FR.setParam(FR.LIBFPTR_PARAM_QUANTITY, Количество);  //Количество товара (тег 1023)
	FR.setParam(FR.LIBFPTR_PARAM_TAX_TYPE, FR.LIBFPTR_TAX_NO );  //	номер налога "БезНДС"
	FR.setParam(FR.LIBFPTR_PARAM_COMMODITY_NAME, Лев(Товар,64));
	//предмет расчета     
	FR.setParam(1212,33);  //параметр для ФФД 1.2!!! 33 - Товар, имеющий КМ, за исключением подакцизного 
	FR.setParam(1214,4);  //Полная оплата
	
	//формируем код маркировки для отправки в ККТ
	Поз=0;
	ТаблМарок.НайтиЗначение(КодМаркировки,Поз,"КодМаркировки");
	ТаблМарок.ПолучитьСтрокуПоНомеру(Поз);
	РезультатПроверки=ТаблМарок.РезультатПроверкиСведений; 
	КодДляККТ=ТаблМарок.КодМаркировкиККТ;
	//	FR.setParam(FR.LIBFPTR_PARAM_MEASUREMENT_UNIT, FR.LIBFPTR_IU_PIECE);   
	//	FR.setParam(2108, 0);
	//	FR.setParam(FR.LIBFPTR_PARAM_MARKING_FRACTIONAL_QUANTITY, "1/2");  
	FR.setParam(FR.LIBFPTR_PARAM_MARKING_CODE, КодДляККТ);
	FR.setParam(FR.LIBFPTR_PARAM_MARKING_CODE_STATUS, Статус);
	FR.setParam(FR.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT, РезультатПроверки);
	FR.setParam(FR.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0);   
	Если FR.registration() <> 0 тогда   //регистрация
		ОтветДрайвера();
		СтатусВозврата(0);
		Возврат;
	КонецЕсли;  
КонецЦикла;
Показать
Прикрепленные файлы:
fptr10_.txt
113. slava_1c 602 02.03.23 11:35 Сейчас в теме
(111) На счет кода. Я повторюсь, что анализ маркировки вне цикла регистрации у меня не давал положительного результата.
Попробуйте все же проверять маркировку непосредственно перед регистрацией а не во внешнем цикле.
114. basil_m 6 02.03.23 12:02 Сейчас в теме
(110)
(113)пробовал после открытия чека, результат одинаковый
112. slava_1c 602 02.03.23 11:09 Сейчас в теме
(111) Посмотрел - так в логе видно что код маркировки проходит без проблем, а ошибка в том что не введена мера расчета, видимо для воды она должна быть.
https://crystals.ru/infocenter/articles/ffd-12-tegi-1212-i-2108/
115. basil_m 6 02.03.23 12:11 Сейчас в теме
(112)FR.setParam(2108, 0); мера количества стоит.
FR.setParam(1212,33); предмет расчета тоже стоит
116. slava_1c 602 02.03.23 12:35 Сейчас в теме
(115) А попробуйте убрать эти строки..
117. basil_m 6 02.03.23 14:57 Сейчас в теме
(116)
(116)убрал. всё тоже. завтра попробую к другому компу подключить ККТ. Если ничего не выйдет, попробую к рознице подцепить и в ней уже попробовать.
Уже перенес код после открытия чека, не взлетает никак(
118. basil_m 6 03.03.23 12:55 Сейчас в теме
Добрый день. Отпишусь о результатах. Попробовал на своем компе ККТ, чек пробивается через раз. Один раз проходит сразу, следующий раз пробиваешь, выходит ошибка 409 [Некорректный код маркировки], перед ней в логах Объекту присвоен код ошибки 422 [Данный КМ отсутствует в таблице]. Через пару секунд отправляешь этот чек еще раз и он пробивается, М+.
Буду пробовать на рознице. Пока не пойму в чем дело.
119. slava_1c 602 03.03.23 15:59 Сейчас в теме
(118) Странная ошибка. А из цикла проверки валидности выходит по таймауту или по переменной LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY
= TRUE выходит? Как вариант больше таймаут поставить. Т.е. влогах должно быть эта переменная false, false а потом true
120. basil_m 6 03.03.23 16:05 Сейчас в теме
Т.е. влогах должно быть эта переменная false, false а потом true - вот именно так в логах и есть, это когда проходит чек. А когда не проходит - всё время false
121. basil_m 6 03.03.23 16:09 Сейчас в теме
Странно, хотя у меня в коде 1С таймаут стоит 20сек., но там даже когда LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY = false всё время, явно проходит пару сек и всё.
Когда проходит чек, то выходит из цикла по LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY (65850) = true
122. slava_1c 602 03.03.23 16:59 Сейчас в теме
(121) У меня сомнение по поводу корректности вот этого кода

	ПроверкаЗавершена=FR.getParamBool(FR.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY);
				Если ПроверкаЗавершена<>0 Тогда    
					Прервать;
					РезультатПроверкиСведений = FR.getParamInt(FR.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT); //Результат проверки сведений о товаре (тег 2106) 


Первое. Переменная РезультатПроверкиСведений не достижима, потому что Прервать стоит перед ней.
И второе, раз таймаут не работает - проверяйте чему равна переменная ПроверкаЗавершена - возможно она всегда не равна 0
123. basil_m 6 03.03.23 18:06 Сейчас в теме
(122)Да, насчет прервать, уже заметил, переставил её дальше. А ПроверкаЗавершена когда чек проходит у меня почему-то равна -1, но в чеке печатается М+. Думал, что должна быть 1
124. slava_1c 602 03.03.23 18:38 Сейчас в теме
(123) Значит в 1С77 getParamBool не выдает 0. Попробуйте условие
Если ПроверкаЗавершена = 1 Тогда
125. user1929800 30.03.23 13:53 Сейчас в теме
(124) Добрый день! Торговая сеть по продаже детской одежды. Пользуемся Розницей 2.3. Время от времени терроризирует ошибка (409)
(часть лога)
2023.03.30 14:44:40.031 T:00001DFC INFO [FiscalPrinter] recv header sign=[B65D9C62] deviceID=[A769B8E30A66CEC96FBDDAD5763702FBBFCAAC52] id=015A type=[RESPONSE] len=91
2023.03.30 14:44:40.031 T:00001DFC INFO [FiscalPrinter] recv data { "e" : { "c" : 409, "d" : "Некорректный код маркировки" }, "p" : [ ], "f" : null }
2023.03.30 14:44:40.031 T:00001DFC ERROR [FiscalPrinter] Объекту 0x09B1A0F8 присвоен код ошибки 409 [Некорректный код маркировки]
2023.03.30 14:44:40.031 T:00001DFC INFO [FiscalPrinter] libfptr_cancel_receipt()
2023.03.30 14:44:40.031 T:00001DFC INFO [FiscalPrinter] send header sign=[B65D9C62] deviceID=[A769B8E30A66CEC96FBDDAD5763702FBBFCAAC52] id=015B type=[REQUEST] len=47
2023.03.30 14:44:40.031 T:00001DFC INFO [FiscalPrinter] send data { "m" : "libfptr_cancel_receipt", "w" : false, "p" : [ ] }
2023.03.30 14:44:40.196 T:00001DFC INFO [FiscalPrinter] recv header sign=[B65D9C62] deviceID=[A769B8E30A66CEC96FBDDAD5763702FBBFCAAC52] id=015B type=[RESPONSE] len=58
2023.03.30 14:44:40.196 T:00001DFC INFO [FiscalPrinter] recv data { "e" : { "c" : 0, "d" : "Ошибок нет" }, "p" : [ ], "f" : null }
2023.03.30 14:44:40.198 T:00001DFC INFO [FiscalPrinter] < LIBFPTR_PARAM_JSON_DATA (65645) = ""
2023.03.30 14:44:40.198 T:00001DFC ERROR [FiscalPrinter] Объекту 0x09B1A0F8 присвоен код ошибки 409 [Некорректный код маркировки]
2023.03.30 14:44:43.728 T:00001DFC INFO [FiscalPrinter] > LIBFPTR_PARAM_FN_DATA_TYPE (65622) = 5
2023.03.30 14:44:43.728 T:00001DFC INFO [FiscalPrinter] libfptr_fn_query_data()

Конкретные условия, при которых ошибка себя проявляет выявить не удалось. Однако товар спокойно реализуется, после того как КМ добавляется в РМК повторно. Частота возникновения по всей сети, так же не имеет закономерностей, может не быть неделю, а может возникать десятки раз в день. (Все магазины на ФФД 1.2).
127. user976872 13.06.23 20:45 Сейчас в теме
Добрый день!

У меня проблема при фискализации чека с маркировкой. А конкретно проблема возникает на этапе проверки марки методами ЗапросКМ, ПолучитьРезультатыЗапросаКМ, ПодтвердитьКМ.

При выполнении ПодтвердитьКМ выходит ошибка = неверный аргумент.

Выбытие = Истина;

ИдентификаторЗапроса = УникаьныйУИДсгенерированный на этапе ЗапросКМ.

ПараметрыПодключения.ИДУстройства = "ATOL_KKT_1C_V10#1"

	Результат = ОбъектДрайвера.ПодтвердитьКМ(ПараметрыПодключения.ИДУстройства, ИдентификаторЗапроса, ?(Выбытие, 0 , 1));

При чём в типовой 1с всё отрабатывает. Получается у меня либо какая-то ошибка на этапе проверить статус КМ, и в ККТ неверно устанавливаются данные в готовность к операции ПодтвердитьКМ, либо у меня в самописной подтягивается не тот ОбъектДрайвера для атола ?
128. slava_1c 602 16.06.23 05:47 Сейчас в теме
(127) Добрый день.

Все-таки в данной публикации обсуждается реализация подключения ККМ с помощью функций АТОЛа, а не с помощью обработки написанной для 1С. Что в ней за функции - не известно, лично я такими методами не пользуюсь, поэтому подсказать не смогу.
В любом случае - сначала начинайте тестировать с лога кассы. Там, по крайней мере, видно будет конкретный момент возникновения ошибки.
Если до ошибки там не дошло - смотрите саму обработку в которой реализованы функции ПодтвердитьКМ и пр... Возможно она не для данного драйвера или там, например, нет перечисленных выше аргументов. В конце концов - можно взять встроенную в типовую 1с обработку и подключить ее, тем более что данный вызов функции есть в общем модуле "ПодключаемоеОборудованиеУниверсальныйДрайверКлиент"
129. user1311287 01.08.23 17:37 Сейчас в теме
Здравствуйте!
Пробую использовать приведенный алгоритм в самописной конфигурации, обувь, используемый код вставляется без спецсимволов. getMarkingCodeValidationStatus() не возвращает никакого результата, прерывается по истечению времени с validationResult = 0. В какую сторону копать?
Усложняется тем, что ккт на удаленном рабочем месте, проверить не всегда могу, уже после проверки пришла мысль, возможно ошибка появляется где-то предыдущих шагах, например на beginMarkingCodeValidation(), или и того раньше.
Чек пробивается, в офд под товаром появляется запись КТ ААА=. На печать признаков маркировки не выводится, просто обычная продажа.
130. slava_1c 602 01.08.23 18:51 Сейчас в теме
Добрый день.

Первое что необходимо сделать - получить лог с ккт. Там по шагам будет все видно на каком этапе возникает ошибка.
Ну и конечно проверить ревизию аппарата ккт. Он должен уметь работать с маркированными товарами. ФФД должно быть 1.2.
131. slava_1c 602 01.08.23 19:29 Сейчас в теме
И еще одно - с вашим офд должен быть заключен договор на отсылку данных в Честный знак. Это платно. Просто так касса ничего не отошлет.
132. user1311287 02.08.23 08:33 Сейчас в теме
Спасибо, буду разбираться, думаю причина, скорее во 2. По результатам постараюсь отписаться, вдруг кому будет полезно.
133. Gluk 20 09.08.23 09:18 Сейчас в теме
Подскажите, почему происходит ошибка,
пытаюсь пробить с кодом в base64, в логах драйвера он отображается верно:

1305 (1305) = "0102900197088110215MbLX%ndd;hSl9180BF92a4Yi9UPRPGKcqKOXFUIqp95R1rn4FUvecxLENqkeW6RJuSY­qzSRVSS2cBhPR2QVYx78QJh5ytkD8ZlV3v9m8Jg=="

ошибка:

Объекту 0x14990B40 присвоен код ошибки 148 [Ошибка программирования реквизита 1305 (Превышение длины реквизита)]
134. slava_1c 602 09.08.23 17:30 Сейчас в теме
(133) Добрый день. Как видно из моей публикации, я не пользуюсь программированием данного реквизита, поэтому рекомендаций к этому пути дать не могу.
Проверил приведенный код: с криптохвостом не бьется в ЧЗ, а без криптохвоста бьется, из чего могу допустить что отсканированный код все-таки не верный. Судя по начальным цифрам - всего введен был он с описания остатков.
135. Gluk 20 10.08.23 23:38 Сейчас в теме
Проверяю код, который передаю в чеке, через тест драйвера атол - получаю ответ:
Проверка завершена
КМ был отправлен
Ошибка онлайн проверки: 0 - Ошибок нет
Результат проверки сведений о товаре: 15
Сведения о статусе товара: 1
Результаты обработки запроса: 15
Код обработки запроса: 0

Все правильно вроде.

Можете прислать пример валидного кода?
136. muskul 11.09.23 03:59 Сейчас в теме
А не полный код маркировки, есть еще такие марки, реально через ффд 1.2 пробивать?
137. slava_1c 602 11.09.23 10:41 Сейчас в теме
(136) Если имеется ввиду что есть валидный код без криптохвоста, то его при продаже можно списать через честный знак. Чтобы проверить его валидность, можно сгенерить DataMatrix и проверить через приложение честного знака- там все пройдет и с коротким кодом. Но пробить непосредственно на ККМ код без криптохвоста по ФФД1.2 не получится.
138. muskul 12.09.23 02:32 Сейчас в теме
(137)
что есть валидный код без криптохвоста, то его при продаже можно списать через честный знак. Чтобы проверить его валидность, можно сгенерить DataMatrix и проверить через приложение честного знака- там все

Спасибо, бред конечно, на 1.05 - 1.1 пробить можно с признаком м а на 1.2 уже не дает
139. vap_pig 124 24.01.24 18:40 Сейчас в теме
Подскажите, пожалуйста, кто может в курсе: не проходят коды маркировки табачной продукции (29 символов длиной). Выдает при печати чека ошибку: "Некорректный код маркировки" и чек аннулируется. Пробовал для такого кода задавать тип кода и LIBFPTR_MCT12_AUTO и LIBFPTR_MCT12_SHORT - не помогает. Что может быть?
140. slava_1c 602 24.01.24 20:47 Сейчас в теме
(139)
1. Проверяете код мобильным приложением честного знака - все пункты должны быть зелеными. Если хоть один красный - значит код маркировки не корректен (или временно некорректен - и такое бывает))
2. Если код везде показывает что корректен, нужно смотреть лог кассы. Практически сразу становится все понятно, т.к. лог выводит все сообщения пооперационно.
3. Можно попробовать распечатать данный код с помощью драйвера. И если все пройдет и ошибки не будет - сравнить лог кассы с тем логом который был из программы. Такой подход позволяет выявить неочевидные настройки.
141. vap_pig 124 04.02.24 16:12 Сейчас в теме
(140) Помогло для коротких кодов указать принудительно тип кода маркировки.

Если (СтрДлина(СписокТоваров.КодМаркировкиСоСканера) = 20) или (СтрДлина(СписокТоваров.КодМаркировкиСоСканера) = 25) или (СтрДлина(СписокТоваров.КодМаркировкиСоСканера) = 29) Тогда
	Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_CODE_TYPE, Объект.LIBFPTR_MCT12_SHORT);
Иначе
	Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_CODE_TYPE, Объект.LIBFPTR_MCT12_AUTO);
КонецЕсли;


В итоге успешно проапгрейдил до ФФД 1.2 драйвер для 1С 7.7: https://infostart.ru/marketplace/1280931/
142. user2090991 06.06.24 09:13 Сейчас в теме
Добрый день! У меня проблема с пробитием маркированного товара на кассе. Ситуация в следующем: сканируешь код маркировки высвечивается "код маркировки проверен", затем при регистрации чека пишет "ошибка кода маркировки" ( касса атол-30ф) продать без кассы ( потом приходится делать коррекцию), время от времени можно отменить оплату. Таким образом маркировка пробивается через раз. Не понимаю в чем причина.Сможете помочь в данном вопросе?
143. fi-tec 1 10.06.24 10:53 Сейчас в теме
(142) мало информации.... какое ПО на кассе + логи ККМ в студию
144. user2090991 10.06.24 11:33 Сейчас в теме
(143) ПО контур касса, работаем через контур маркет, касса атол 30 ф,
Прикрепленные файлы:
fptr10.log
145. slava_1c 602 11.06.24 03:16 Сейчас в теме
(144) Добрый день.

1. В приложенном логе не нашел примера отправки маркировки и ошибки связанной с ней
2. Зато в логе есть куча других ошибок, например 11 ошибка - что за параметр 7777 который записывается в настройки соединения? , скорее всего отсюда ошибка "нет соединения с сервером ОФД"...
3. Здесь ветка про самописные конфигурации 1С (в основном). Если речь про конкретное, нередактируемое ПО, самым верным способом все-таки будет обращение на их линию поддержки.
146. MissionOnly 29 05.11.24 15:50 Сейчас в теме
(145) Уже несколько раз перечитываю вашу статью, с намереньем написать свою проверку МАРКИРОВОК через ККТ. Но вот есть один вопрос к вашему коду, который не получил должного освящения.

Что делать если за время "ВремяОжидания" процесс получения СТАТУСА не завершился. У меня реально ОН не завершается.

Что ВЫ предлагаете делать в этом случае?

// Начало проверки
Пока истина Цикл
FR.getMarkingCodeValidationStatus();
Если FR.getParamBool(FR.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY) тогда
прервать;
КонецЕсли;
Если ТекущаяДата() - ВремяНачала > ВремяОжидания тогда
прервать;
КонецЕсли;
КонецЦикла;
147. slava_1c 602 05.11.24 16:17 Сейчас в теме
(146) Добрый день. На сегодняшний день для большинства товаров действует разрешительный режим. И проверять марки только через ККТ уже не получится.
На самом деле и ранее и сейчас признаком проверки маркировки через драйвер ККТ являлся признак [M+] [M] и [M-]. При этом чек пробивался в любом случае. Теперь же нужно сначала проверить товары программным путем, далее результат проверки вставить в тег 1260. А в случае отрицательного результата чек выбивать нельзя. Вот здесь автор подробно описал процесс : ссылка
149. MissionOnly 29 05.11.24 16:31 Сейчас в теме
(147) Добрый день, все это я изучил. Но абсолютно уверен, что ни какой чек не пробьется (или пробьется не нужным образом), если не сделать нужные действия на ККТ (вне ККТ это лишь информационно и бутафория).

1) Т.к. первая функция открывает запрос на проверку FR.beginMarkingCodeValidation();
2) А вторая функция FR.getMarkingCodeValidationStatus() получает статус маркировки (АСИНХРОННО);
3) Третья FR.acceptMarkingCode() добавляет код маркировки с список проверенных.

Без этого МАРКИРОВКИ не пробьются, как бы хорошо не плясали разработчики 1С вокруг ККТ.

Главный вопрос, что писать в ТЕГИ, если запрос FR.getMarkingCodeValidationStatus() не закончился в отведенное время (100 секунд).

Возможно как профи, вы меня поправите.
152. slava_1c 602 05.11.24 17:42 Сейчас в теме
(149) На счет этого вопроса. Это две разных задачи. Проверка методом ККТ - это одно, а проверка разрешительного режима - это совсем другое. Как я понял, теперь если товар с разрешительным режимом - проверку ККТ можно и не делать. Главное - получить от серверов ЧЗ ответ о проверке возможности продажи товара. Если она прошла, то ее результат и прописывается в тег 1260.
148. slava_1c 602 05.11.24 16:25 Сейчас в теме
(146) Посмотрите еще рекомендации в этой статье https://support.evotor.ru/article/5129097789842
150. MissionOnly 29 05.11.24 16:45 Сейчас в теме
(148) Вот это могло быть решением данной проблемы (у себя я двигаюсь именно в этом направлении):

Зайдите в главном меню Эвотора в приложение «Время проверки КМ», проверьте настройку Продажа без моментальной онлайн проверки КМ.
Если настройка установлена, значит, проверка в ОИСМ отключена. Запрос на проверку КМ отправляется, но терминал не ожидает ответа, поэтому при продаже вы видите статус [М].

Но как это сделать на "AddIn.Fptr10", честно говоря не знаю.
151. slava_1c 602 05.11.24 16:59 Сейчас в теме
(150) Так это и есть проверка методами, описанными в статье. А в Эвоторе это реализовано в их софте. В данном случае - первый режим указанный на скриншоте - 10 секунд таймаута, установленное время - 4 секунды таймаута и третий режим - FR.getParamBool(FR.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY) не используется вообще.
Вы проверьте, по рекомендации из пункта 2. "Проверьте связь с ОИСМ. Для этого перейдите в раздел: Настройки → Обслуживание кассы и нажмите Поверить связь с ОФД, распечатается чек диагностики."
153. MissionOnly 29 06.11.24 09:16 Сейчас в теме
Спасибо, с ККТ все хорошо. Согласен, FR.getParamBool(FR.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY) нет смысла использовать, в случае, если не отдается ответ по маркировке.
154. luda33 24.02.25 19:21 Сейчас в теме
КМ = Лев(ПодготовленныйШК, 31) + Разделитель + Сред(ПодготовленныйШК, 32, 6) + Разделитель + Сред(ПодготовленныйШК, 38);
а после этого не надо КМ переводить в base 24?

подсовываю КМ при печати чека не проходит проверку ЧЗ, в прочем и в base64 тоже не проходит
155. slava_1c 602 24.02.25 20:14 Сейчас в теме
(154) Нет не надо (тем более в base 24)) Главное чтобы сам штрихкод был валидный. На сегодняшний день повсеместно внедрен разрешительный режим, это также надо учитывать при отправке штрихкода - перед всеми манипуляциями - создаете таблицу с запросами на сервера. Вот тут у коллеги подробно https://infostart.ru/1c/tools/2065151/
156. TVA_11 07.03.25 15:17 Сейчас в теме
И никто примера тестового КМ не привел для тестового сервера ИСМ.
157. basil_m 6 07.08.25 12:09 Сейчас в теме
Добрый день! А никто эти новые теги в соответствии с новым приказом не добавлял в ПО? до 1 сентября надо сделать. Получается прошивку обновить, ДТО и само кассовое ПО
1011 - часовой пояс
2040 - номер ФД
1125 - признак расчета в интернет
Посмотрел в документации к драйверу, что-то там вообще не нашел по тегу 2040 ничего.
158. slava_1c 602 13.08.25 17:34 Сейчас в теме
(157) На сайте АТОЛа висят последние изменения, касаемые нового ФФД, на дату 30.06.25.
Более свежих пока нет.
Упоминания о теге 2040 тоже нет.

https://atoldriver.ru/izmeneniya-v-versii-drajverov-atol-10-10-7-0-ot-30-06-2025/

- Добавлена настройка часовой зоны LIBFPTR_SETTING_TIME_ZONE, используемая при формировании уведомлений;
- Добавлены новые значения для реквизита LIBFPTR_PARAM_MARKING_CODE_STATUS(тег 2003, тег 2110) — LIBFPTR_MES_PIECE_FOR_SALE и LIBFPTR_MES_DRY_SOLD в соответствии с изменениями ФФД;
- Переименовано значение признака предмета расчета «Курортный сбор» в «Туристический налог» в соответствии с изменениями ФФД;
- Добавлена возможность подачи адреса расчета (тег 1009), признака расчета в «Интернет» (тег 1125) при открытии чека в соответствии с изменениями ФФД;
- Добавлена возможность подать дополнительные сведения об оплате безналичными (тег 1235) в соответствии с изменениями ФФД;
159. amf0404 18.08.25 14:03 Сейчас в теме
Добрый день!

Помогите пожалуйста разобраться, с проверкой маркировки на Атол зашли в тупик.
Получаем такой лог:
160. amf0404 18.08.25 14:05 Сейчас в теме
Добрый день!

Помогите пожалуйста разобраться, с проверкой маркировки на Атол зашли в тупик.
Получаем такой лог:

2025.08.04 10:40:26.773 T:000029FC INFO [FiscalPrinter] > 1021 (1021) = "Владелец"
2025.08.04 10:40:26.773 T:000029FC INFO [FiscalPrinter] > 1203 (1203) = "1"
2025.08.04 10:40:26.773 T:000029FC INFO [FiscalPrinter] libfptr_operator_login() [0x01CAD6E8]
2025.08.04 10:40:26.773 T:000029FC INFO [FiscalPrinter] output > B1Владелец;1;
2025.08.04 10:40:26.773 T:000029FC INFO [Transport] send fiscal (12) 12 40 42 31 82 AB A0 A4 A5 AB A5 E6 3B 31 3B (15 bytes total)
2025.08.04 10:40:26.774 T:000029FC INFO [Transport] recv fiscal (12) 12 59 44 (3 bytes total)
2025.08.04 10:40:26.774 T:000029FC ERROR [FiscalPrinter] Код ошибки ККТ - 4459h
2025.08.04 10:40:26.774 T:000029FC ERROR [FiscalPrinter] Объекту 0x01CAD6E8 присвоен код ошибки 196 [Не удалось зарегистрировать кассира]
2025.08.04 10:40:26.774 T:000029FC INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_TYPE (65826) = LIBFPTR_MCT12_AUTO (256)
2025.08.04 10:40:26.774 T:000029FC INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE (65760) = "0109002490100070215&P,BZjeh&f2d92jo5A"
2025.08.04 10:40:26.774 T:000029FC INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_STATUS (65846) = LIBFPTR_MES_DRY_FOR_SALE (2)
2025.08.04 10:40:26.774 T:000029FC INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_PROCESSING_MODE (65852) = 0
2025.08.04 10:40:26.774 T:000029FC INFO [FiscalPrinter] > LIBFPTR_PARAM_TIMEOUT (65899) = 5000
2025.08.04 10:40:26.774 T:000029FC INFO [FiscalPrinter] libfptr_begin_marking_code_validation() [0x01CAD6E8]
2025.08.04 10:40:26.774 T:000029FC INFO [FiscalPrinter] output > A1
2025.08.04 10:40:26.775 T:000029FC INFO [Transport] send fiscal (13) 13 40 41 31 (4 bytes total)
2025.08.04 10:40:26.775 T:000029FC INFO [Transport] recv fiscal (13) 13 30 30 30 34 30 38 32 35 31 30 32 38 33 32 3B (16 bytes total)
2025.08.04 10:40:26.775 T:000029FC INFO [FiscalPrinter] input < 040825102832;
2025.08.04 10:40:26.778 T:000029FC INFO [FiscalPrinter] output > UE0;0109002490100070215&P,BZjeh&f2d[1Dh][1Dh]92jo5A;╙[07h][01h][00h][02h]6[08h][01h][00h][00h];5000;
2025.08.04 10:40:26.778 T:000029FC INFO [Transport] send fiscal (14) 14 40 55 45 30 3B 30 31 30 39 30 30 32 34 39 30 31 30 30 30 37 30 32 31 35 26 50 2C 42 5A 6A 65 68 26 66 32 64 1D 1D 39 32 6A 6F 35 41 3B D3 07 01 00 02 36 08 01 00 00 3B 35 30 30 30 3B (62 bytes total)
2025.08.04 10:40:26.779 T:000029FC INFO [Transport] recv fiscal (14) 14 33 42 (3 bytes total)
2025.08.04 10:40:26.779 T:000029FC ERROR [FiscalPrinter] Код ошибки ККТ - 4233h
2025.08.04 10:40:26.779 T:000029FC ERROR [FiscalPrinter] Объекту 0x01CAD6E8 присвоен код ошибки 11 [Не поддерживается в данной версии]
2025.08.04 10:40:26.779 T:000029FC INFO [FiscalPrinter] libfptr_get_marking_code_validation_status() [0x01CAD6E8]
2025.08.04 10:40:26.779 T:000029FC ERROR [FiscalPrinter] Объекту 0x01CAD6E8 присвоен код ошибки 422 [Данный КМ отсутствует в таблице]
2025.08.04 10:40:26.780 T:000029FC INFO [FiscalPrinter] libfptr_get_marking_code_validation_status() [0x01CAD6E8]
2025.08.04 10:40:26.780 T:000029FC ERROR [FiscalPrinter] Объекту 0x01CAD6E8 присвоен код ошибки 422 [Данный КМ отсутствует в таблице]
2025.08.04 10:40:26.780 T:000029FC INFO [FiscalPrinter] libfptr_get_marking_code_validation_status() [0x01CAD6E8]
Прикрепленные файлы:
fptr10 CleanControl_статическое_значение_марки.rar
161. slava_1c 602 18.08.25 16:11 Сейчас в теме
(160) Добрый день.
Первая ошибка "присвоен код ошибки 196 [Не удалось зарегистрировать кассира]" явно из-за передачи ИНН = 1, либо передавайте правильный инн, либо не передавайте его совсем.
Вторая ошибка "присвоен код ошибки 11 [Не поддерживается в данной версии]" очень похожа на то, что используется старая прошивка (2.5). Обновите прошивку ККМ до платформы 5.0 и проблема уйдет.
Дальнейшие ошибки свидетельствуют о той же проблеме устаревшей платформы.
162. amf0404 20.08.25 15:44 Сейчас в теме
Замучился уже с прикручиванием проверки марки, правда делаю это не в 1с, а на проге написанной на с# и .net, но думаю принцип в части проверки КМ один и тот же может кто ткнет носом, что не так делаю, вот часть кода которая регистрирует чек и проверяет КМ



IFptr fptr = null;

int result;

try
{
fptr = new Fptr();
}
catch (Exception)
{
MessageBox.Show("Не удалось создать объект общего драйвера ККМ!", Application.ProductName,
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return false;

}


string COM_FILE = "COM" + comPort;

fptr.setSingleSetting(Constants.LIBFPTR_SETTING_MODEL, Constants.LIBFPTR_MODEL_ATOL_AUTO.ToString());
fptr.setSingleSetting(Constants.LIBFPTR_SETTING_PORT, Constants.LIBFPTR_PORT_COM.ToString());
fptr.setSingleSetting(Constants.LIBFPTR_SETTING_COM_FILE, COM_FILE);
fptr.setSingleSetting(Constants.LIBFPTR_SETTING_BAUDRATE, Constants.LIBFPTR_PORT_BR_115200.ToString());
fptr.applySingleSettings();

fptr.open();
bool isOpened = fptr.isOpened();
if (!isOpened)
{
MessageBox.Show("Ошибка открытия порта устройства");
return false;
}

//Короткий запрос статуса ККТ

fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_STATUS);
result = fptr.queryData();
if (result < 0)
{
MessageBox.Show("Ошибка статуса устройства. Код: " + result + "\n" + fptr.errorDescription());
return false;
}

uint receiptType = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_TYPE);

if (receiptType != Constants.LIBFPTR_RT_CLOSED)
{
result = fptr.cancelReceipt();
if (result < 0)
{
MessageBox.Show("Ошибка операции ККМ(cancelReceipt). Код: " + result + "\n" + fptr.errorDescription());
return false;
}

}


// входим в режим регистрации
// устанавливаем пароль кассира
fptr.setParam(1021, cashierFIO);
fptr.setParam(1203, pwd);
fptr.operatorLogin();


// Запускаем проверку КМ
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE_TYPE, Constants.LIBFPTR_MCT12_AUTO);
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE, mark);
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE_STATUS, Constants.LIBFPTR_MES_DRY_FOR_SALE);
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0);
// таймаут 5 сек
fptr.setParam(Constants.LIBFPTR_PARAM_TIMEOUT, 5000);

fptr.beginMarkingCodeValidation();

// Синхронный режим, Дожидаемся окончания проверки и запоминаем результат
while (true)
{
fptr.getMarkingCodeValidationStatus();
if (fptr.getParamBool(Constants.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY))
break;
}

uint validationResult = fptr.getParamInt(Constants.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT);

// Т.к тут просто проверка маркировки, то просто сбрасывем валидацию
fptr.declineMarkingCode();
fptr.destroy();

// из документов

return validationResult == 15;
163. slava_1c 602 20.08.25 18:24 Сейчас в теме
(162) Не очень понятно зачем все это...
1. Проверка марки на валидность и ее текущий статус нужно проверять через API честного знака, а не через кассу.
2. Нигде не написано что же за ошибка выходит
3. После введения разрешительного режима я вообще не уверен что марки можно таким образом проверять, т.к. они опасаются DDOS атак и рассматривают подобные запросы без оформления марки именно как атаку:

"Использование метода API разрешительного режима разрешено только в момент перед розничной продажей. Проверка принимаемой продукции с использованием этого метода запрещена. "

https://markirovka.ru/community/rezhim-proverok-na-kassakh/proverka-markirovannoy-produktsii-v-moment-priyemki-po-kriteriyami-razreshitelnogo-rezhima-po-api
164. amf0404 21.08.25 16:30 Сейчас в теме
(163)

Большое спасибо за комментарий, было такое ощущение, что через драйвер проверку делать сейчас не актуально.

Можно уточняющий вопрос, я понимаю что мы можем слать запрос на проверку марки сюда - /api/v4/true-api/codes/check и в случае прохождения проверки реализовывать товар.

Вопрос в чем, куда при формировании чека через кассу Атол записывать информацию о реализации маркированного товара, в какой реквизит, что бы он изьялся из оборота в система ЧЗ.
165. slava_1c 602 21.08.25 17:37 Сейчас в теме
(164) "можем слать запрос на проверку марки сюда - /api/v4/true-api/codes/check и в случае прохождения проверки реализовывать товар". - да, все верно. А уже при продаже использовать разрешительный режим и проверку его методами. Выше уже давал ссылку на актуальную статью: https://infostart.ru/1c/tools/2065151/ - там все есть с примерами.

"куда при формировании чека через кассу Атол записывать информацию о реализации маркированного товара, в какой реквизит, что бы он изьялся из оборота в система ЧЗ" - Вы записываете в реквизиты чека коды маркировки как описано в топике, собственно ККТ передает эти коды маркировки в ОФД, ОФД передает эти данные в ЧЗ и они выводятся из оборота автоматически. С ОФД должен быть заключен договор.
166. amf0404 25.08.25 15:10 Сейчас в теме
(165)
LIBFPTR_PARAM_MARKING_CODE_STATUS


Можно еще уточнить, т.е. мне надо после получения ответа от ЧЗ что марка прошла, формировать чек "Регистрация позиции с отраслевым реквизитом предмета расчета (тег 1260, ФФД 1.2)" ? В описании у штриха (https://integration.atol.ru/api/#zaregistrirovat-pozitsiyu) много разных вариантов регистрации марки в чеке, но если мы работаем с ФФД 1.2, надо реализовывать такую регистрацию, правильно ?
167. slava_1c 602 02.09.25 21:35 Сейчас в теме
(166) Вот этот код из примера АТОЛ обязан работать на сегодняшний день, при условии что код маркировки до этого проверен в ЧЗ:


mark = "014494550435306821QXYXSALGLMYQQ\u001D91EE06\u001D92YWCXbmK6­SN8vvwoxZFk7WAY8WoJNMGGr6Cgtiuja04c=";

fptr.SetParam(1262, "020");
fptr.SetParam(1263, "14.12.2018");
fptr.SetParam(1264, "1556");
fptr.SetParam(1265, "tm=mdlp&sid=00000000105200");
fptr.UtilFormTlv();

industryInfo = fptr.GetParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);
validationResult = fptr.GetParamInt(fptr.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT);
fptr.SetParam(fptr.LIBFPTR_PARAM_COMMODITY_NAME, "Афобазол");
fptr.SetParam(fptr.LIBFPTR_PARAM_PRICE, 450);
fptr.SetParam(fptr.LIBFPTR_PARAM_QUANTITY, 1.000);
fptr.SetParam(fptr.LIBFPTR_PARAM_MEASUREMENT_UNIT, fptr.LIBFPTR_IU_PIECE);
fptr.SetParam(fptr.LIBFPTR_PARAM_TAX_TYPE, fptr.LIBFPTR_TAX_VAT10);
fptr.SetParam(1212, 33);
fptr.SetParam(1214, 4);
fptr.SetParam(1260, industryInfo);
fptr.SetParam(fptr.LIBFPTR_PARAM_MARKING_CODE, mark);
fptr.SetParam(fptr.LIBFPTR_PARAM_MARKING_CODE_STATUS, fptr.LIBFPTR_MES_DRY_FOR_SALE);
fptr.SetParam(fptr.LIBFPTR_PARAM_MARKING_CODE_TYPE, fptr.LIBFPTR_MCT12_AUTO);
fptr.SetParam(fptr.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT, validationResult);
fptr.SetParam(fptr.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0);
fptr.Registration();

Показать
168. Cramac 10.09.25 12:00 Сейчас в теме
(167) обязан, но у меня не прошло если заполняю 1262-1265, без них чеки бьются, марка проверяется средствами кассы.
Но бывают случаи, когда АПИ ЧЗ марку проверил, а ККМ не смогла. Редко но бывает отвал по таймауту проверки
из лога АТОЛа
2025.09.10 10:44:26.477 T:000004BC INFO [FiscalPrinter
169. slava_1c 602 10.09.25 13:21 Сейчас в теме
(168)

1. Выбирайте самую свободную площадку ЧЗ для проверки.
2. Попробуйте получение параметра в 16-ричном виде.

....
fptr.utilFormTLV();
ДанныеТега1260 = fptr.getParamStringHex(FR.LIBFPTR_PARAM_TAG_VALUE);	
.....
fptr.setParamStrHex(1260,ДанныеТега1260);



На счет отвала по таймауту - такое бывает конечно же, это же внешний сервис.
170. Cramac 13.09.25 09:34 Сейчас в теме
(169) пробовал два раза повторять проверку марки, не помогает, все равно таймаут. При этом если чек отменить, следующий проходит нормально. может делаю не так, и принимать марку все равно даже если не прошла проверку? сейчас у меня если проверку марка не прошла, отменяю полностью чек
171. amf0404 13.10.25 12:37 Сейчас в теме
Здравствуйте!

На кассе АТОЛ 91Ф при продаже воды, ФФД 1.2 получаем ошибку на тег 1260.

Лог атола ниже:

025.10.11 17:16:23.979 T:00002ED0 INFO [FiscalPrinter] output > 01
2025.10.11 17:16:23.979 T:00002ED0 INFO [Transport] send fiscal (18) 18 40 30 31 (4 bytes total)
2025.10.11 17:16:23.979 T:00002ED0 INFO [Transport] recv fiscal (18) 18 30 30 30 3B 37 3B 30 3B 30 3B 30 3B (13 bytes total)
2025.10.11 17:16:23.980 T:00002ED0 INFO [FiscalPrinter] input < 0;7;0;0;0;
2025.10.11 17:16:23.980 T:00002ED0 INFO [FiscalPrinter] output > b11;0;32;
2025.10.11 17:16:23.980 T:00002ED0 INFO [Transport] send fiscal (19) 19 40 62 31 31 3B 30 3B 33 32 3B (11 bytes total)
2025.10.11 17:16:24.451 T:00002ED0 INFO [Transport] recv fiscal (19) 19 30 30 (3 bytes total)
2025.10.11 17:16:24.452 T:00002ED0 INFO [FiscalPrinter] input <
2025.10.11 17:16:24.452 T:00002ED0 INFO [FiscalPrinter] output > 01
2025.10.11 17:16:24.452 T:00002ED0 INFO [Transport] send fiscal (1A) 1A 40 30 31 (4 bytes total)
2025.10.11 17:16:24.453 T:00002ED0 INFO [Transport] recv fiscal (1A) 1A 30 30 30 3B 37 3B 31 3B 33 38 3B 30 3B (14 bytes total)
2025.10.11 17:16:24.453 T:00002ED0 INFO [FiscalPrinter] input < 0;7;1;38;0;
2025.10.11 17:16:24.453 T:00002ED0 INFO [FiscalPrinter] < LIBFPTR_PARAM_SHIFT_AUTO_OPENED (65743) = true
2025.10.11 17:16:24.453 T:00002ED0 INFO [FiscalPrinter] > 2108 (2108) = 0
2025.10.11 17:16:24.453 T:00002ED0 INFO [FiscalPrinter] > 2108 (2108) = 0
2025.10.11 17:16:24.453 T:00002ED0 INFO [FiscalPrinter] > 1262 (1262) = "030"
2025.10.11 17:16:24.453 T:00002ED0 INFO [FiscalPrinter] > 1263 (1263) = "21.11.2023"
2025.10.11 17:16:24.453 T:00002ED0 INFO [FiscalPrinter] > 1264 (1264) = "1944"
2025.10.11 17:16:24.453 T:00002ED0 INFO [FiscalPrinter] > 1265 (1265) = "UUID=feadb273-417b-4b1d-be68-2a16fdbd9a88&Time=1760192172582"
2025.10.11 17:16:24.453 T:00002ED0 INFO [FiscalPrinter] libfptr_util_form_tlv() [0x07CA5140]
2025.10.11 17:16:24.459 T:00002ED0 INFO [FiscalPrinter] < LIBFPTR_PARAM_TAG_VALUE (65624) = 3C 08 01 00 00 3C 08 01 00 00 EE 04 03 00 30 33 30 EF 04 0A 00 32 31 2E 31 31 2E 32 30 32 33 F0 04 04 00 31 39 34 34 F1 04 3C 00 55 55 49 44 3D 66 65 61 64 62 32 37 33 2D 34 31 37 62 2D 34 62 31 64 2D 62 65 36 38 2D 32 61 31 36 66 64 62 64 39 61 38 38 26 54 69 6D 65 3D 31 37 36 30 31 39 32 31 37 32 35 38 32
2025.10.11 17:16:24.459 T:00002ED0 INFO [FiscalPrinter] > LIBFPTR_PARAM_COMMODITY_NAME (65631) = "RedBull"
2025.10.11 17:16:24.459 T:00002ED0 INFO [FiscalPrinter] > LIBFPTR_PARAM_PRICE (65632) = 250
2025.10.11 17:16:24.459 T:00002ED0 INFO [FiscalPrinter] > LIBFPTR_PARAM_QUANTITY (65633) = 1
2025.10.11 17:16:24.460 T:00002ED0 INFO [FiscalPrinter] > LIBFPTR_PARAM_TAX_TYPE (65569) = LIBFPTR_TAX_NO (6)
2025.10.11 17:16:24.460 T:00002ED0 INFO [FiscalPrinter] > LIBFPTR_PARAM_TAX_SUM (65570) = 0
2025.10.11 17:16:24.460 T:00002ED0 INFO [FiscalPrinter] > LIBFPTR_PARAM_POSITION_SUM (65634) = 250
2025.10.11 17:16:24.460 T:00002ED0 INFO [FiscalPrinter] > LIBFPTR_PARAM_DEPARTMENT (65568) = 1
2025.10.11 17:16:24.460 T:00002ED0 INFO [FiscalPrinter] > LIBFPTR_PARAM_INFO_DISCOUNT_SUM (65562) = 0
2025.10.11 17:16:24.460 T:00002ED0 INFO [FiscalPrinter] > 1260 (1260) = 3C 08 01 00 00 3C 08 01 00 00 EE 04 03 00 30 33 30 EF 04 0A 00 32 31 2E 31 31 2E 32 30 32 33 F0 04 04 00 31 39 34 34 F1 04 3C 00 55 55 49 44 3D 66 65 61 64 62 32 37 33 2D 34 31 37 62 2D 34 62 31 64 2D 62 65 36 38 2D 32 61 31 36 66 64 62 64 39 61 38 38 26 54 69 6D 65 3D 31 37 36 30 31 39 32 31 37 32 35 38 32
2025.10.11 17:16:24.460 T:00002ED0 INFO [FiscalPrinter] libfptr_registration() [0x07CA5140]
2025.10.11 17:16:24.460 T:00002ED0 INFO [FiscalPrinter] output > A1
2025.10.11 17:16:24.460 T:00002ED0 INFO [Transport] send fiscal (1B) 1B 40 41 31 (4 bytes total)
2025.10.11 17:16:24.461 T:00002ED0 INFO [Transport] recv fiscal (1B) 1B 30 30 31 31 31 30 32 35 31 37 31 34 30 30 3B (16 bytes total)
2025.10.11 17:16:24.461 T:00002ED0 INFO [FiscalPrinter] input < 111025171400;
2025.10.11 17:16:24.461 T:00002ED0 INFO [FiscalPrinter] output > 34
2025.10.11 17:16:24.461 T:00002ED0 INFO [Transport] send fiscal (1C) 1C 40 33 34 (4 bytes total)
2025.10.11 17:16:24.462 T:00002ED0 INFO [Transport] recv fiscal (1C) 1C 30 30 34 3B 34 3B 34 3B 32 38 32 3B (13 bytes total)
2025.10.11 17:16:24.462 T:00002ED0 INFO [FiscalPrinter] input < 4;4;4;282;
2025.10.11 17:16:24.463 T:00002ED0 INFO [FiscalPrinter] output > bA0;
2025.10.11 17:16:24.463 T:00002ED0 INFO [Transport] send fiscal (1D) 1D 40 62 41 30 3B (6 bytes total)
2025.10.11 17:16:24.463 T:00002ED0 INFO [Transport] recv fiscal (1D) 1D 30 30 (3 bytes total)
2025.10.11 17:16:24.464 T:00002ED0 INFO [FiscalPrinter] input <
2025.10.11 17:16:24.464 T:00002ED0 INFO [FiscalPrinter] output > aAь[04h]g[00h]<[08h][01h][00h][00h]<[08h][01h][00h][00h]ю[04h][03h][00h]030я[04h][0Ah][00h]21.11.2023Ё[04h][04h][00h]1944ё[04h]<[00h]UUID=feadb273-417b-4b1d-be68-2a16fdbd9a88&Time=1760192172582;0;
2025.10.11 17:16:24.464 T:00002ED0 INFO [Transport] send fiscal (1E) 1E 40 61 41 EC 04 67 00 3C 08 01 00 00 3C 08 01 00 00 EE 04 03 00 30 33 30 EF 04 0A 00 32 31 2E 31 31 2E 32 30 32 33 F0 04 04 00 31 39 34 34 F1 04 3C 00 55 55 49 44 3D 66 65 61 64 62 32 37 33 2D 34 31 37 62 2D 34 62 31 64 2D 62 65 36 38 2D 32 61 31 36 66 64 62 64 39 61 38 38 26 54 69 6D 65 3D 31 37 36 30 31 39 32 31 37 32 35 38 32 3B 30 3B (114 bytes total)
2025.10.11 17:16:24.759 T:00002ED0 INFO [Transport] recv fiscal (1E) 1E 59 44 (3 bytes total)
2025.10.11 17:16:24.759 T:00002ED0 ERROR [FiscalPrinter] Код ошибки ККТ - 4459h
2025.10.11 17:16:24.764 T:00002ED0 INFO [FiscalPrinter] < LIBFPTR_PARAM_ERROR_TAG_NUMBER (65617) = 1260
2025.10.11 17:16:24.765 T:00002ED0 ERROR [FiscalPrinter] Объекту 0x07CA5140 присвоен код ошибки 26 [Неверный формат команды]
2025.10.11 17:16:24.765 T:00002ED0 INFO [FiscalPrinter] > LIBFPTR_PARAM_TEXT (65536) = "========================="
2025.10.11 17:16:24.765 T:00002ED0 INFO [FiscalPrinter] > LIBFPTR_PARAM_TEXT_WRAP (65537) = LIBFPTR_TW_WORDS (1)
2025.10.11 17:16:24.765 T:00002ED0 INFO [FiscalPrinter] libfptr_print_text() [0x07CA5140]
2025.10.11 17:16:24.765 T:00002ED0 INFO [FiscalPrinter] output > P3
2025.10.11 17:16:24.765 T:00002ED0 INFO [Transport] send fiscal (1F) 1F 40 50 33 (4 bytes total)
2025.10.11 17:16:24.765 T:00002ED0 INFO [Transport] recv fiscal (1F) 1F 30 30 31 3B (5 bytes total)
2025.10.11 17:16:24.765 T:00002ED0 INFO [FiscalPrinter] input < 1;
2025.10.11 17:16:24.765 T:00002ED0 INFO [FiscalPrinter] output > P1
2025.10.11 17:16:24.766 T:00002ED0 INFO [Transport] send fiscal (20) 20 40 50 31 (4 bytes total)
2025.10.11 17:16:24.766 T:00002ED0 INFO [Transport] recv fiscal (20) 20 30 30 33 38 34 3B (7 bytes total)
2025.10.11 17:16:24.766 T:00002ED0 INFO [FiscalPrinter] input < 384;
2025.10.11 17:16:24.766 T:00002ED0 INFO [FiscalPrinter] output > P21;
2025.10.11 17:16:24.766 T:00002ED0 INFO [Transport] send fiscal (21) 21 40 50 32 31 3B (6 bytes total)
2025.10.11 17:16:24.767 T:00002ED0 INFO [Transport] recv fiscal (21) 21 30 30 39 3B 31 34 3B (8 bytes total)
2025.10.11 17:16:24.767 T:00002ED0 INFO [FiscalPrinter] input < 9;14;
2025.10.11 17:16:24.767 T:00002ED0 INFO [FiscalPrinter] output > PA1;=========================;1;1;
2025.10.11 17:16:24.767 T:00002ED0 INFO [Transport] send fiscal (22) 22 40 50 41 31 3B 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3B 31 3B 31 3B (36 bytes total)
2025.10.11 17:16:24.768 T:00002ED0 INFO [Transport] recv fiscal (22) 22 41 61 (3 bytes total)
2025.10.11 17:16:24.768 T:00002ED0 ERROR [FiscalPrinter] Код ошибки ККТ - 6141h
2025.10.11 17:16:24.768 T:00002ED0 ERROR [FiscalPrinter] Объекту 0x07CA5140 присвоен код ошибки 203 [Произошла критическая ошибка, документ необходимо отменить]
2025.10.11 17:16:24.768 T:00002ED0 INFO [FiscalPrinter] > LIBFPTR_PARAM_PAYMENT_TYPE (65564) = LIBFPTR_PT_CASH (0)
2025.10.11 17:16:24.768 T:00002ED0 INFO [FiscalPrinter] > LIBFPTR_PARAM_PAYMENT_SUM (65565) = 250
2025.10.11 17:16:24.768 T:00002ED0 INFO [FiscalPrinter] libfptr_payment() [0x07CA5140]
2025.10.11 17:16:24.768 T:00002ED0 INFO [FiscalPrinter] output > bD0;250;
2025.10.11 17:16:24.768 T:00002ED0 INFO [Transport] send fiscal (23) 23 40 62 44 30 3B 32 35 30 3B (10 bytes total)
2025.10.11 17:16:24.769 T:00002ED0 INFO [Transport] recv fiscal (23) 23 41 61 (3 bytes total)
2025.10.11 17:16:24.769 T:00002ED0 ERROR [FiscalPrinter] Код ошибки ККТ - 6141h
2025.10.11 17:16:24.769 T:00002ED0 ERROR [FiscalPrinter] Объекту 0x07CA5140 присвоен код ошибки 203 [Произошла критическая ошибка, документ необходимо отменить]
2025.10.11 17:16:24.769 T:00002ED0 INFO [FiscalPrinter] libfptr_close_receipt() [0x07CA5140]
2025.10.11 17:16:24.769 T:00002ED0 INFO [FiscalPrinter] output > 01
2025.10.11 17:16:24.769 T:00002ED0 INFO [Transport] send fiscal (24) 24 40 30 31 (4 bytes total)
2025.10.11 17:16:24.770 T:00002ED0 INFO [Transport] recv fiscal (24) 24 30 30 30 3B 37 3B 31 35 33 37 3B 32 3B 30 3B (16 bytes total)
2025.10.11 17:16:24.771 T:00002ED0 INFO [FiscalPrinter] input < 0;7;1537;2;0;
2025.10.11 17:16:24.771 T:00002ED0 INFO [FiscalPrinter] Чтение кеша: [C:\Users\User\AppData\Roaming\ATOL\drivers10\cache\00108203424918.json]
2025.10.11 17:16:24.771 T:00002ED0 INFO [FiscalPrinter] Содержимое файла кеша:
2025.10.11 17:16:24.771 T:00002ED0 INFO [FiscalPrinter] {
"lastFiscalDocumentNumber" : 3846
}

Подскажите в чем может быть проблема.
172. slava_1c 602 13.10.25 14:01 Сейчас в теме
Добрый день. Это случаем не Ваш топик? https://kkmcom.ru/index.php?topic=20706.0
Просто проверочные данные на вход абсолютно те же самые, и год документа 23...
У него все получилось, пишет.

Могу предложить тоже самое - изменить последовательность проверки с сохранением результат в переменную.

Я в своем решении вообще сначала организую таблицу проверки, проверяю разрешительный режим, записываю результат проверки в таблицу, затем уже при пробитии чека - ПЕРЕД выводом каждой строки с товаром заполняю тэг 1260 из таблицы.
173. YA_34252528 29.10.25 08:49 Сейчас в теме
Добрый день!

Добавили разрешительный режим для Атол.

При продаже воды получили ошибку: Не найден обязательный параметр (LIBFPTR_PARAM_PRICE)] , хотя в логе есть это параметр

2025.10.29 08:11:04.494 T:00000C70 INFO [FiscalPrinter] < LIBFPTR_PARAM_RECEIPT_SIZE (65904) = 291
2025.10.29 08:11:04.494 T:00000C70 INFO [FiscalPrinter] < LIBFPTR_PARAM_RECEIPT_PERCENTAGE_SIZE (65935) = 1
2025.10.29 08:11:04.497 T:00000C70 INFO [FiscalPrinter] > LIBFPTR_PARAM_COMMODITY_NAME (65631) = ""Аква минерале 0,5 л""
2025.10.29 08:11:04.497 T:00000C70 INFO [FiscalPrinter] > LIBFPTR_PARAM_QUANTITY (65633) = 1
2025.10.29 08:11:04.497 T:00000C70 INFO [FiscalPrinter] > LIBFPTR_PARAM_MEASUREMENT_UNIT (65851) = LIBFPTR_IU_PIECE (0)
2025.10.29 08:11:04.497 T:00000C70 INFO [FiscalPrinter] > LIBFPTR_PARAM_PRICE (65632) = 107
2025.10.29 08:11:04.498 T:00000C70 INFO [FiscalPrinter] > 1212 (1212) = 1
2025.10.29 08:11:04.498 T:00000C70 INFO [FiscalPrinter] > LIBFPTR_PARAM_TAX_TYPE (65569) = LIBFPTR_TAX_VAT5 (9)
2025.10.29 08:11:04.498 T:00000C70 INFO [FiscalPrinter] > 1262 (1262) = "020"
2025.10.29 08:11:04.498 T:00000C70 INFO [FiscalPrinter] > 1263 (1263) = "14.12.2018"
2025.10.29 08:11:04.498 T:00000C70 INFO [FiscalPrinter] > 1264 (1264) = "1556"
2025.10.29 08:11:04.498 T:00000C70 INFO [FiscalPrinter] > 1265 (1265) = "tm=mdlp&sid=00000000105200"
2025.10.29 08:11:04.498 T:00000C70 INFO [FiscalPrinter] libfptr_util_form_tlv() [0x07137380]
2025.10.29 08:11:04.499 T:00000C70 INFO [FiscalPrinter] < LIBFPTR_PARAM_TAG_VALUE (65624) = BC 04 01 00 01 EE 04 03 00 30 32 30 EF 04 0A 00 31 34 2E 31 32 2E 32 30 31 38 F0 04 04 00 31 35 35 36 F1 04 1A 00 74 6D 3D 6D 64 6C 70 26 73 69 64 3D 30 30 30 30 30 30 30 30 31 30 35 32 30 30
2025.10.29 08:11:04.517 T:00000C70 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE (65760) = "0104600494693359215rpZ2gYgKa6Wa93WGKq"
2025.10.29 08:11:04.517 T:00000C70 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_STATUS (65846) = LIBFPTR_MES_PIECE_SOLD (1)
2025.10.29 08:11:04.517 T:00000C70 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_TYPE (65826) = LIBFPTR_MCT12_AUTO (256)
2025.10.29 08:11:04.518 T:00000C70 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT (65886) = 15
2025.10.29 08:11:04.518 T:00000C70 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_PROCESSING_MODE (65852) = 0
2025.10.29 08:11:04.518 T:00000C70 INFO [FiscalPrinter] libfptr_registration() [0x07137380]
2025.10.29 08:11:04.518 T:00000C70 INFO [FiscalPrinter] output > 01
2025.10.29 08:11:04.518 T:00000C70 INFO [Transport] send fiscal (3E) 3E 40 30 31 (4 bytes total)
2025.10.29 08:11:04.522 T:00000C70 INFO [Transport] recv fiscal (3E) 3E 30 30 30 3B 37 3B 31 3B 33 38 3B 30 3B (14 bytes total)
2025.10.29 08:11:04.522 T:00000C70 INFO [FiscalPrinter] input < 0;7;1;38;0;
2025.10.29 08:11:04.522 T:00000C70 INFO [FiscalPrinter] output > 17
2025.10.29 08:11:04.522 T:00000C70 INFO [Transport] send fiscal (3F) 3F 40 31 37 (4 bytes total)
2025.10.29 08:11:04.526 T:00000C70 INFO [Transport] recv fiscal (3F) 3F 30 30 32 39 31 30 32 35 30 38 30 39 32 33 3B (16 bytes total)
2025.10.29 08:11:04.526 T:00000C70 INFO [FiscalPrinter] input < 291025080923;
2025.10.29 08:11:04.527 T:00000C70 ERROR [FiscalPrinter] Объекту 0x07137380 присвоен код ошибки 8 [Не найден обязательный параметр (LIBFPTR_PARAM_PRICE)]
174. slava_1c 602 29.10.25 10:07 Сейчас в теме
Поменяйте местами вывож информации о маркировке и вывод наименеования и цен - они должны быть непосредственно перед регистрацией продажи - см выше пример.
175. YA_34252528 29.10.25 10:20 Сейчас в теме
(174) Спасибо, попробую.
176. YA_34252528 29.10.25 11:47 Сейчас в теме
(174)
Получили новую загадку:

При валидации приходится отправлять МС с CHR(29), т.к. с \u001D не проходит:
-------------------------------------------------------
2025.10.29 11:28:10.125 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_TYPE (65826) = LIBFPTR_MCT12_AUTO (256)
2025.10.29 11:28:10.125 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE (65760) = "0104600494693359215<Hu.e.&NGY1r93<chr(29)>FwcU"
2025.10.29 11:28:10.125 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_STATUS (65846) = LIBFPTR_MES_PIECE_SOLD (1)
2025.10.29 11:28:10.125 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_WAIT_FOR_VALIDATION_RESULT (65845) = true
2025.10.29 11:28:10.125 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_PROCESSING_MODE (65852) = 0
2025.10.29 11:28:10.125 T:00000F40 INFO [FiscalPrinter] libfptr_begin_marking_code_validation() [0x07384190]
----------------------------------------------------------------
так валидация проходит и получаем 15

При регистрации позиции, нет смысла указывать правильный код (с \u001D), атол все равно берет код марки из своей таблицы, куда записал при валидации, т.е. с Chr(29)

В результате, получаем ошибку [Некорректный код маркировки]

---------------------------------------------------------
2025.10.29 11:28:20.739 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE (65760) = "0104600494693359215<Hu.e.&NGY1r\u001D93FwcU"
2025.10.29 11:28:20.739 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_STATUS (65846) = LIBFPTR_MES_PIECE_SOLD (1)
2025.10.29 11:28:20.739 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_TYPE (65826) = LIBFPTR_MCT12_AUTO (256)
2025.10.29 11:28:20.740 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT (65886) = 15
2025.10.29 11:28:20.740 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_PROCESSING_MODE (65852) = 0
2025.10.29 11:28:20.740 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_COMMODITY_NAME (65631) = ""Аква минерале 0,5 л""
2025.10.29 11:28:20.740 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_QUANTITY (65633) = 1
2025.10.29 11:28:20.741 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_MEASUREMENT_UNIT (65851) = LIBFPTR_IU_PIECE (0)
2025.10.29 11:28:20.741 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_PRICE (65632) = 107
2025.10.29 11:28:20.741 T:00000F40 INFO [FiscalPrinter] > 1212 (1212) = 1
2025.10.29 11:28:20.741 T:00000F40 INFO [FiscalPrinter] > LIBFPTR_PARAM_TAX_TYPE (65569) = LIBFPTR_TAX_VAT5 (9)
2025.10.29 11:28:20.741 T:00000F40 INFO [FiscalPrinter] libfptr_registration() [0x07384190]
2025.10.29 11:28:20.742 T:00000F40 INFO [FiscalPrinter] output > 01
2025.10.29 11:28:20.742 T:00000F40 INFO [Transport] send fiscal (3E) 3E 40 30 31 (4 bytes total)
2025.10.29 11:28:20.745 T:00000F40 INFO [Transport] recv fiscal (3E) 3E 30 30 30 3B 37 3B 31 3B 33 38 3B 30 3B (14 bytes total)
2025.10.29 11:28:20.745 T:00000F40 INFO [FiscalPrinter] input < 0;7;1;38;0;
2025.10.29 11:28:20.745 T:00000F40 INFO [FiscalPrinter] output > 17
2025.10.29 11:28:20.745 T:00000F40 INFO [Transport] send fiscal (3F) 3F 40 31 37 (4 bytes total)
2025.10.29 11:28:20.749 T:00000F40 INFO [Transport] recv fiscal (3F) 3F 30 30 32 39 31 30 32 35 30 38 30 39 32 33 3B (16 bytes total)
2025.10.29 11:28:20.749 T:00000F40 INFO [FiscalPrinter] input < 291025080923;
2025.10.29 11:28:20.749 T:00000F40 INFO [FiscalPrinter] output > 34
2025.10.29 11:28:20.750 T:00000F40 INFO [Transport] send fiscal (40) 40 40 33 34 (4 bytes total)
2025.10.29 11:28:20.753 T:00000F40 INFO [Transport] recv fiscal (40) 40 30 30 34 3B 34 3B 34 3B 33 36 33 3B (13 bytes total)
2025.10.29 11:28:20.754 T:00000F40 INFO [FiscalPrinter] input < 4;4;4;363;
2025.10.29 11:28:20.754 T:00000F40 INFO [FiscalPrinter] Чтение таблицы КМ (1 элементов)
2025.10.29 11:28:20.754 T:00000F40 INFO [FiscalPrinter] 1. [CRC = 0xEFD19FD0, 2106 = 15] 0104600494693359215<Hu.e.&NGY1r93FwcU
2025.10.29 11:28:20.755 T:00000F40 ERROR [FiscalPrinter] Объекту 0x07384190 присвоен код ошибки 409 [Некорректный код маркировки]
177. slava_1c 602 29.10.25 12:32 Сейчас в теме
Нет, так точно не сработает - в логе должен быть обычный текст, безо всяких \u001D.

А вот если лог просматриваешь в Notepad++, например, то там уже видишь символы.

пример:

2025.02.05 14:03:29.190 T: T:0000023C INFO [FiscalPrinter] input < 0;7;1;38;0;
2025.02.05 14:03:29.191 T: T:0000023C INFO [FiscalPrinter] > LIBFPTR_PARAM_COMMODITY_NAME (65631) = "TM00446100"
2025.02.05 14:03:29.191 T: T:0000023C INFO [FiscalPrinter] > 1212 (1212) = 1
2025.02.05 14:03:29.191 T: T:0000023C INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_TYPE (65826) = 256
2025.02.05 14:03:29.191 T: T:0000023C INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE (65760) = "0104603755648291215jZpjOcMaaFY991EE1992o/c7x/Mj2Yn77N2GhLzoG6fL8j+Waw09hAEWbW7v1YA="
2025.02.05 14:03:29.191 T: T:0000023C INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_STATUS (65846) = 1
2025.02.05 14:03:29.191 T: T:0000023C INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_WAIT_FOR_VALIDATION_RESULT (65845) = true
2025.02.05 14:03:29.191 T: T:0000023C INFO [FiscalPrinter] > LIBFPTR_PARAM_MARKING_PROCESSING_MODE (65852) = 0
2025.02.05 14:03:29.191 T: T:0000023C INFO [FiscalPrinter] libfptr_begin_marking_code_validation()
178. YA_34252528 29.10.25 12:39 Сейчас в теме
В логе выглядит так
Прикрепленные файлы:
179. YA_34252528 29.10.25 12:41 Сейчас в теме
При регистрации тоже берет код с символом
180. YA_34252528 29.10.25 12:43 Сейчас в теме
и какой код отправлять на валидацию и потом на регистрацию?

у атола написано, что код должен быть таким:
0104600494693359215<Hu.e.&NGY1r\u001D93FwcU

Но так он не проходит
181. slava_1c 602 29.10.25 13:04 Сейчас в теме
на скриншоте -- код верный.
Его же вставляем в разрешительный режим

На счет экранирования символов в АТОЛе - не видел у него таких надписей. Возможно это при передачи через JSON - тогда справедливо.

У меня в описании - использование именно команд драйвера - я передаю код как есть, с символами 29 в качестве разделителей
182. YA_34252528 29.10.25 13:19 Сейчас в теме
(181)
На счет экранирования символов в АТОЛе - не видел у него таких надписей. Возможно это при передачи через JSON - тогда справедливо.


вот:

Общий алгоритм проведения чека с маркировкой в синхронном режиме

String mark = "014494550435306821QXYXSALGLMYQQ\u001D91EE06\u001D92YWCXbmK6­SN8vvwoxZFk7WAY8WoJNMGGr6Cgtiuja04c=";

// Запускаем проверку КМ в синхронном режиме с таймаутом 2 минуты (120000 миллисекунд)
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE_TYPE, Constants.LIBFPTR_MCT12_AUTO);
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE, mark);
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE_STATUS, Constants.LIBFPTR_MES_DRY_FOR_SALE);
fptr.setParam(Constants.LIBFPTR_PARAM_QUANTITY, 1.000);
fptr.setParam(Constants.LIBFPTR_PARAM_MEASUREMENT_UNIT, Constants.LIBFPTR_IU_PIECE);
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0);
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_FRACTIONAL_QUANTITY, "1/2");
fptr.setParam(Constants.LIBFPTR_PARAM_TIMEOUT, 120000);
fptr.beginMarkingCodeValidation();

// Выполнение данного потока останавливается до тех пор, пока не будет выполнена проверка КМ!

fptr.getMarkingCodeValidationStatus();
if (!fptr.getParamBool(Constants.LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY)) {
    break;
}
uint validationResult = fptr.getParamInt(Constants.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT);

// Подтверждаем реализацию товара с указанным КМ
fptr.acceptMarkingCode();

// ... Проверяем остальные КМ

// Формируем чек
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
fptr.openReceipt();

fptr.setParam(Constants.LIBFPTR_PARAM_COMMODITY_NAME, "Молоко");
fptr.setParam(Constants.LIBFPTR_PARAM_PRICE, 80);
fptr.setParam(Constants.LIBFPTR_PARAM_QUANTITY, 1.000);
fptr.setParam(Constants.LIBFPTR_PARAM_MEASUREMENT_UNIT, Constants.LIBFPTR_IU_PIECE);
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_FRACTIONAL_QUANTITY, "1/2");
fptr.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, Constants.LIBFPTR_TAX_VAT10);
fptr.setParam(1212, 33);
fptr.setParam(1214, 4);
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE, mark);
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE_STATUS, Constants.LIBFPTR_MES_DRY_FOR_SALE);
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT, validationResult);
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0);
fptr.registration();
Показать



Может есть другое описание?
Покажите, если не трудно, пожалуйста.
183. YA_34252528 29.10.25 13:24 Сейчас в теме
(181)
на скриншоте -- код верный.
Его же вставляем в разрешительный режим


Похоже, что так.

Но сначала нужна валидация,
Атол запоминает этот код и при регистрации позиции, подставляет его, но тут уже код оказывается не верным.

Подозреваю, где-то делаю неправильно, а где - не пойму.

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

Подскажете?
184. slava_1c 602 29.10.25 13:42 Сейчас в теме
Тогда наверное нужен кусок кода, может станет ясно - где ошибка. Потому что отличие разрешительного режима - только в добавлении функций проверки, а методология осталась прежней.
Еще раз обращу внимание на статью https://infostart.ru/1c/tools/2065151/ - там все подробно описано про разрешительный режим.
186. YA_34252528 29.10.25 16:18 Сейчас в теме
(184)
Тогда наверное нужен кусок кода, может станет ясно - где ошибка.

Спасибо большое, что помогаете, но я пока не понимаю, что делаю неправильно.

Попробую описать подробнее:

Валидация:

 code = "0104600494693359215rpZ2gYgKa6Wa93WGKq"  //(код с символом Chr(29))

выполняем:

_fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE_TYPE, Constants.LIBFPTR_MCT12_AUTO)
_fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE, code)
_fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE_STATUS, 1)
_fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_WAIT_FOR_VALIDATION_RESULT, true)
_fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0)
_fptr.beginMarkingCodeValidation()

validationResult = _fptr.getParamInt(Constants.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT)

_fptr.acceptMarkingCode()

//здесь все нормально, валидация проходит:
< LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_ERROR (65849) = 0
< 2106 (2106) = 15
LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT (65886) = 15

//запоминаем рез-тат валидации (15), после этого начинаем формирование чека.:

code = 0104600494693359215rpZ2gYgKa6Wa\u001D93WGKq

_fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE, code)
_fptr.setParam(_fptr.LIBFPTR_PARAM_MARKING_CODE_STATUS, 1)
_fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE_TYPE, Constants.LIBFPTR_MCT12_AUTO)
_fptr.setParam(_fptr.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT, 15)
_fptr.setParam(_fptr.LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0)
_fptr.setParam(Constants.LIBFPTR_PARAM_COMMODITY_NAME, "Вода ...")
_fptr.setParam(Constants.LIBFPTR_PARAM_QUANTITY, 1)
_fptr.setParam(Constants.LIBFPTR_PARAM_MEASUREMENT_UNIT, Constants.LIBFPTR_IU_PIECE)
_fptr.setParam(Constants.LIBFPTR_PARAM_PRICE, 107.00)
_fptr.setParam(1212, 1)
_fptr.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, LIBFPTR_TAX_VAT5)
_fptr.registration()
//получаем -1  (Ошибка Атол №409: Некорректный код маркировки)

//то есть, в это месте он берет код из своей таблицы, куда записал после успешной валидации и обзывает его некорректным

2025.10.29 11:28:20.754       T:00000F40 INFO  [FiscalPrinter] Чтение таблицы КМ (1 элементов)
2025.10.29 11:28:20.754       T:00000F40 INFO  [FiscalPrinter] 1. [CRC = 0xEFD19FD0, 2106 = 15] 0104600494693359215rpZ2gYgKa6Wa93WGKq
2025.10.29 11:28:20.755       T:00000F40 ERROR [FiscalPrinter] Объекту 0x07384190 присвоен код ошибки 409 [Некорректный код маркировки]

Показать
187. slava_1c 602 29.10.25 17:17 Сейчас в теме
(186)
1. А зачем нужно еще одно присвоение переменной code? Вы же уже присвоили код вверху.
2.
_fptr.setParam(Constants.LIBFPTR_PARAM_COMMODITY_NAME, "Вода ...")

Должно быть ПЕРЕД

_fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE, code)
189. YA_34252528 29.10.25 17:20 Сейчас в теме
(187)
А зачем нужно еще одно присвоение переменной code? Вы же уже присвоили код вверху.


Это происходит в разных методах.
Сначала - валидация, чтобы разрешить продажу, потом запускается создание и печать чека уже в другом методе
190. slava_1c 602 29.10.25 17:21 Сейчас в теме
(189) В любом случае - значение кода должно передаваться одинаковое.
191. YA_34252528 29.10.25 17:21 Сейчас в теме
(187)
Должно быть ПЕРЕД

_fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE, code)


Было и так, не помогало
194. slava_1c 602 29.10.25 17:30 Сейчас в теме
(191) Это обязательно. На счет отдельно проверки валидации - так, на сколько я помню, не работает.

Отправили на валидацию,
получили ответ и после
_fptr.acceptMarkingCode()
следом сразу идет
_fptr.setParam(FR.LIBFPTR_PARAM_COMMODITY_NAME,"....")
188. slava_1c 602 29.10.25 17:19 Сейчас в теме
(186)
_fptr.setParam(_fptr.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT, 15)


Вместо
_fptr.setParam(_fptr.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT, 15)

Правильно так:

_fptr.setParam(_fptr.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT, validationResult)
192. YA_34252528 29.10.25 17:22 Сейчас в теме
(188)
Правильно так:

_fptr.setParam(_fptr.LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT, validationResult)


у меня в коде так и есть
185. slava_1c 602 29.10.25 13:43 Сейчас в теме
да, и кассовый модуль должен быть обновлен конечно.
193. YA_34252528 29.10.25 17:30 Сейчас в теме
Судя по логам, все это, что вы отметили, проходит.
Не проходит только код марки, полученный из таблицы Атол, куда он записывается Атолом при валидации
195. slava_1c 602 29.10.25 17:45 Сейчас в теме
(193) Хорошо, поменяйте последовательность:

1. Открываете чек

Открываем цикл товаров

2. _fptr.setParam(FR.LIBFPTR_PARAM_COMMODITY_NAME,"....")
3. Производим валидацию марки
4. _fptr.setParam(FR.LIBFPTR_PARAM_COMMODITY_NAME,"....")
5. все остальные действия с этой же маркой и ценами
6. регистрация

Закрываем цикл товаров

7. закрываем чек
196. YA_34252528 29.10.25 18:16 Сейчас в теме
(195)
Попробую завтра.

А как быть, если товар не прошел валидацию, а в чеке один товар?
Отменять чек?
197. slava_1c 602 29.10.25 18:53 Сейчас в теме
(196) Конечно, _fptr.CancelReceipt()
198. YA_34252528 29.10.25 19:09 Сейчас в теме
199. YA_34252528 31.10.25 11:42 Сейчас в теме
(195)

Валидация прошла
Регистрация позиции - вроде бы тоже

2025.10.31 11:07:09.933       T:000003A4 INFO  [FiscalPrinter] < LIBFPTR_PARAM_RECEIPT_SIZE (65904) = 310
2025.10.31 11:07:09.933       T:000003A4 INFO  [FiscalPrinter] < LIBFPTR_PARAM_RECEIPT_PERCENTAGE_SIZE (65935) = 1
2025.10.31 11:07:09.954       T:000003A4 INFO  [FiscalPrinter] > LIBFPTR_PARAM_COMMODITY_NAME (65631) = ""Аква минерале 0,5 л""
2025.10.31 11:07:09.954       T:000003A4 INFO  [FiscalPrinter] > LIBFPTR_PARAM_QUANTITY (65633) = 1
2025.10.31 11:07:09.954       T:000003A4 INFO  [FiscalPrinter] > LIBFPTR_PARAM_MEASUREMENT_UNIT (65851) = LIBFPTR_IU_PIECE (0)
2025.10.31 11:07:09.954       T:000003A4 INFO  [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE (65760) = "0104600494693335215g=Y'II"Gl!o&93lbZP"
2025.10.31 11:07:09.954       T:000003A4 INFO  [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_STATUS (65846) = LIBFPTR_MES_PIECE_FOR_SALE (5)
2025.10.31 11:07:09.955       T:000003A4 INFO  [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_TYPE (65826) = LIBFPTR_MCT12_AUTO (256)
2025.10.31 11:07:09.955       T:000003A4 INFO  [FiscalPrinter] > LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT (65886) = 15
2025.10.31 11:07:09.955       T:000003A4 INFO  [FiscalPrinter] > LIBFPTR_PARAM_MARKING_PROCESSING_MODE (65852) = 0
2025.10.31 11:07:09.955       T:000003A4 INFO  [FiscalPrinter] > LIBFPTR_PARAM_PRICE (65632) = 107
2025.10.31 11:07:09.955       T:000003A4 INFO  [FiscalPrinter] > 1212 (1212) = 1
2025.10.31 11:07:09.955       T:000003A4 INFO  [FiscalPrinter] > LIBFPTR_PARAM_TAX_TYPE (65569) = LIBFPTR_TAX_VAT5 (9)
2025.10.31 11:07:09.955       T:000003A4 INFO  [FiscalPrinter] libfptr_registration()  [0x071062A0]
2025.10.31 11:07:09.956       T:000003A4 INFO  [FiscalPrinter] output > 01
2025.10.31 11:07:09.956       T:000003A4 INFO  [Transport] send fiscal (43) 43 40 30 31 (4 bytes total)
2025.10.31 11:07:09.958       T:000003A4 INFO  [Transport] recv fiscal (43) 43 30 30 30 3B 37 3B 31 3B 33 38 3B 30 3B (14 bytes total)
2025.10.31 11:07:09.959       T:000003A4 INFO  [FiscalPrinter] input  < 0;7;1;38;0;
2025.10.31 11:07:09.959       T:000003A4 INFO  [FiscalPrinter] output > 17
2025.10.31 11:07:09.959       T:000003A4 INFO  [Transport] send fiscal (44) 44 40 31 37 (4 bytes total)
2025.10.31 11:07:09.965       T:000003A4 INFO  [Transport] recv fiscal (44) 44 30 30 33 31 31 30 32 35 30 38 33 32 31 39 3B (16 bytes total)
2025.10.31 11:07:09.966       T:000003A4 INFO  [FiscalPrinter] input  < 311025083219;
2025.10.31 11:07:09.966       T:000003A4 INFO  [FiscalPrinter] output > 34
2025.10.31 11:07:09.966       T:000003A4 INFO  [Transport] send fiscal (45) 45 40 33 34 (4 bytes total)
2025.10.31 11:07:09.970       T:000003A4 INFO  [Transport] recv fiscal (45) 45 30 30 34 3B 34 3B 34 3B 33 36 33 3B (13 bytes total)
2025.10.31 11:07:09.970       T:000003A4 INFO  [FiscalPrinter] input  < 4;4;4;363;
2025.10.31 11:07:09.970       T:000003A4 INFO  [FiscalPrinter] Чтение таблицы КМ (1 элементов)
2025.10.31 11:07:09.971       T:000003A4 INFO  [FiscalPrinter] 1. [CRC = 0x4DD30770, 2106 = 15] 0104600494693335215g=Y'II"Gl!o&93lbZP
2025.10.31 11:07:09.971       T:000003A4 INFO  [FiscalPrinter] output > bQ0;0;5;15;0104600494693335215g=Y'II"Gl!o&[1Dh]93lbZP;
2025.10.31 11:07:09.971       T:000003A4 INFO  [Transport] send fiscal (46) 46 40 62 51 30 3B 30 3B 35 3B 31 35 3B 30 31 30 34 36 30 30 34 39 34 36 39 33 33 33 35 32 31 35 67 3D 59 27 49 49 22 47 6C 21 6F 26 1D 39 33 6C 62 5A 50 3B (52 bytes total)
2025.10.31 11:07:10.092       T:000003A4 INFO  [Transport] recv fiscal (46) 46 30 30 (3 bytes total)
2025.10.31 11:07:10.092       T:000003A4 INFO  [FiscalPrinter] input  < 
2025.10.31 11:07:10.092       T:000003A4 INFO  [FiscalPrinter] output > aA<[08h][01h][00h][00h];0;
2025.10.31 11:07:10.092       T:000003A4 INFO  [Transport] send fiscal (47) 47 40 61 41 3C 08 01 00 00 3B 30 3B (12 bytes total)
2025.10.31 11:07:10.099       T:000003A4 INFO  [Transport] recv fiscal (47) 47 30 30 (3 bytes total)
2025.10.31 11:07:10.099       T:000003A4 INFO  [FiscalPrinter] input  < 
2025.10.31 11:07:10.099       T:000003A4 INFO  [FiscalPrinter] output > bR"Аква минерале 0,5 л";107;1;107;7;0;4;1;
2025.10.31 11:07:10.099       T:000003A4 INFO  [Transport] send fiscal (48) 48 40 62 52 22 80 AA A2 A0 20 AC A8 AD A5 E0 A0 AB A5 20 30 2C 35 20 AB 22 3B 31 30 37 3B 31 3B 31 30 37 3B 37 3B 30 3B 34 3B 31 3B (44 bytes total)
2025.10.31 11:07:10.228       T:000003A4 INFO  [Transport] recv fiscal (48) 48 30 30 (3 bytes total)
2025.10.31 11:07:10.228       T:000003A4 INFO  [FiscalPrinter] input  < 
2025.10.31 11:07:10.228       T:000003A4 INFO  [FiscalPrinter] output > 01
2025.10.31 11:07:10.228       T:000003A4 INFO  [Transport] send fiscal (49) 49 40 30 31 (4 bytes total)
2025.10.31 11:07:10.232       T:000003A4 INFO  [Transport] recv fiscal (49) 49 30 30 30 3B 37 3B 34 30 39 37 3B 36 33 3B 30 3B (17 bytes total)
2025.10.31 11:07:10.232       T:000003A4 INFO  [FiscalPrinter] input  < 0;7;4097;63;0;
2025.10.31 11:07:10.233       T:000003A4 INFO  [FiscalPrinter] output > 17
2025.10.31 11:07:10.233       T:000003A4 INFO  [Transport] send fiscal (4A) 4A 40 31 37 (4 bytes total)
2025.10.31 11:07:10.237       T:000003A4 INFO  [Transport] recv fiscal (4A) 4A 30 30 33 31 31 30 32 35 30 38 33 32 31 39 3B (16 bytes total)
2025.10.31 11:07:10.237       T:000003A4 INFO  [FiscalPrinter] input  < 311025083219;
2025.10.31 11:07:10.237       T:000003A4 INFO  [FiscalPrinter] output > 01
2025.10.31 11:07:10.237       T:000003A4 INFO  [Transport] send fiscal (4B) 4B 40 30 31 (4 bytes total)
2025.10.31 11:07:10.241       T:000003A4 INFO  [Transport] recv fiscal (4B) 4B 30 30 30 3B 37 3B 34 30 39 37 3B 36 33 3B 30 3B (17 bytes total)
2025.10.31 11:07:10.241       T:000003A4 INFO  [FiscalPrinter] input  < 0;7;4097;63;0;
2025.10.31 11:07:10.242       T:000003A4 INFO  [FiscalPrinter] output > 17
2025.10.31 11:07:10.242       T:000003A4 INFO  [Transport] send fiscal (4C) 4C 40 31 37 (4 bytes total)
2025.10.31 11:07:10.245       T:000003A4 INFO  [Transport] recv fiscal (4C) 4C 30 30 33 31 31 30 32 35 30 38 33 32 31 39 3B (16 bytes total)
2025.10.31 11:07:10.246       T:000003A4 INFO  [FiscalPrinter] input  < 311025083219;
2025.10.31 11:07:10.246       T:000003A4 INFO  [FiscalPrinter] < LIBFPTR_PARAM_RECEIPT_SIZE (65904) = 426
2025.10.31 11:07:10.246       T:000003A4 INFO  [FiscalPrinter] < LIBFPTR_PARAM_RECEIPT_PERCENTAGE_SIZE (65935) = 1
2025.10.31 11:07:10.253       T:000003A4 ERROR [COM-OBJECT] Неподдерживаемый тип параметра в COM-обертке: 24593
2025.10.31 11:08:02.916       T:000003A4 INFO  [FiscalPrinter] libfptr_close()  [0x071062A0]
2025.10.31 11:08:02.987  P50LOG:00000ABC INFO  [FiscalPrinter] Завершение выполнения потока  P50LOG:00000ABC
2025.10.31 11:08:02.997 P50POLL:00000CE0 INFO  [FiscalPrinter] Завершение выполнения потока P50POLL:00000CE0
Показать


Однако, в конце получаю ошибку

Судя по всему, эта ошибка происходит здесь:
   _fptr.setParam(1261, industryInfo)


т.е., после регистрации позиции при попытке отправить уведомление, которое формируется так:
_fptr.setParam(1262, "020")
_fptr.setParam(1263, "14.12.2018")
_fptr.setParam(1264, "1556")
_fptr.setParam(1265, "tm=mdlp&sid=00000000105200")
_fptr.utilFormTlv()
industryInfo = _fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE)
Прикрепленные файлы:
200. slava_1c 602 07.11.25 01:59 Сейчас в теме
(199) Если это не описка то 1261 это неверный тег. Верный 1260.
Если это клякса, тогда опять последовательность:
1. Сначала мы получаем сведения о разрешительном режиме по всем строкам. Запоминаем значения industryInfo в таблицу.

Затем начинаем пробивать чек в цикле:

1 валидация,
2. название,
3. остальные реквизиты строки продажи
4. результат валидации.
5. инфо о разрешительном режиме,
6. регистрация

см 167
Для отправки сообщения требуется регистрация/авторизация