kkm Server. Печать чека товара

Используем KKM Server API для печати чека. Как правильно подключиться к системе KKM. Ниже привели пример кода который используем, нашли его в примере API на официальном сайте KKM. При его запуске печатается аннулированный чек без товара. Так же не печатается QR код

Печать производится по нажатию на кнопку:

<button class="btn btn-danger" onclick="RegisterCheck(1, 1, 1);">Печать чека</button>

Вот код обработчика:

function ExecuteSuccess(result) {
    $('#kkm-result').html(JSON.stringify(result));
}

// Печать чека
function RegisterCheck(NumDevice, TypeCheck, IsBarCode, Print) {

    // Подготовка данных команды, параметры (TypeCheck = 0, NumDevice = 0, InnKkm = "", CashierName = "")
    var Data = KkmServer.GetDataCheck(TypeCheck, NumDevice, "", "Kазакова Н.А.", "430601071197");

    //***********************************************************************************************************
    // ПОЛЯ ПОИСКА УСТРОЙСТВА
    //***********************************************************************************************************
    // Номер устройства. Если 0 то первое не блокированное на сервере
    Data.NumDevice = NumDevice;
    // ИНН ККМ для поиска. Если "" то ККМ ищется только по NumDevice,
    // Если NumDevice = 0 а InnKkm заполнено то ККМ ищется только по InnKkm
    Data.InnKkm = "";
    //---------------------------------------------
    // Заводской номер ККМ для поиска. Если "" то ККМ ищется только по NumDevice,
    Data.KktNumber = "";
    // **********************************************************************************************************

    // Время (сек) ожидания выполнения команды.
    //Если За это время команда не выполнилась в статусе вернется результат "NotRun" или "Run"
    //Проверить результат еще не выполненной команды можно командой "GetRezult"
    //Если не указано или 0 - то значение по умолчанию 60 сек.
    // Поле не обязательно. Это поле можно указывать во всех командах
    Data.Timeout = 30;
    // Это фискальный или не фискальный чек
    Data.IsFiscalCheck = true;
    // Тип чека;
    // 0 – продажа;                             10 – покупка;
    // 1 – возврат продажи;                     11 - возврат покупки;
    // 8 - продажа только по ЕГАИС (обычный чек ККМ не печатается)
    // 9 - возврат продажи только по ЕГАИС (обычный чек ККМ не печатается)
    Data.TypeCheck = TypeCheck;
    // Не печатать чек на бумагу
    Data.NotPrint = false; //true,
    // Количество копий документа
    Data.NumberCopies = 0;
    // Продавец, тег ОФД 1021
    Data.CashierName = "Kазакова Н.А.";
    // ИНН продавца тег ОФД 1203
    Data.CashierVATIN = "430601071197";
    // Телефон или е-Майл покупателя, тег ОФД 1008
    // Если чек не печатается (NotPrint = true) то указывать обязательно
    // Формат: Телефон +{Ц} Email {С}@{C}
    Data.ClientAddress = "[email protected]";
    // Покупатель (клиент) - наименование организации или фамилия, имя, отчество (при наличии), серия и номер паспорта покупателя(клиента). Тег 1227
    // Только с использованием наличных / электронных денежных средств и при выплате выигрыша, получении страховой премии или при страховой выплате.
    Data.ClientInfo = "Везучий В.В. РЕ-125486";
    // ИНН Организации или покупателя(клиента). Тег 1228
    // Только с использованием наличных / электронных денежных средств и при выплате выигрыша, получении страховой премии или при страховой выплате.
    Data.ClientINN = "502906602876";
    // Aдрес электронной почты отправителя чека тег ОФД 1117 (если задан при регистрации можно не указывать)
    // Формат: Email {С}@{C}
    Data.SenderEmail = "[email protected]";
    // Место расчетов, Тег ОФД 1187 (если не задано - берется из регистрационных данных ККТ)
    Data.PlaceMarket = "kkmserver.ru";
    // Система налогообложения (СНО) применяемая для чека
    // Если не указанно - система СНО настроенная в ККМ по умолчанию
    // 0: Общая ОСН
    // 1: Упрощенная УСН (Доход)
    // 2: Упрощенная УСН (Доход минус Расход)
    // 3: Единый налог на вмененный доход ЕНВД
    // 4: Единый сельскохозяйственный налог ЕСН
    // 5: Патентная система налогообложения
    // Комбинация разных СНО не возможна
    // Надо указывать если ККМ настроена на несколько систем СНО
    Data.TaxVariant = "";
    // Дополнительный реквизит пользователя тег ОФД 1084
    Data.UserAttribute = {
        // Наименование дополнительного реквизита пользователя тег ОД 1085
        Name: "Поле-тест",
        // Значение дополнительного реквизита пользователя тег ОФД 1086
        Value: "Тестовое значение"
    };
    // Дополнительный реквизит чека тег 1192
    Data.AdditionalAttribute = "Тест";

    // Это только для тестов:
    //Data.ClientId = "e1e0c5dbb395acecda9e3ed86a798755b21a53de"; //"541a9db930c2e90670898943",
    // Это только для тестов: Получение ключа суб-лицензии : ВНИМАНИЕ: ключ суб-лицензии вы должны генерить у себя на сервере!!!!
    //Data.KeySubLicensing = "";
    // КПП организации, нужно только для ЕГАИС
    Data.KPP = "782543005";

    // Если надо одновременно автоматически провести транзакцию через эквайринг 
    // Эквайринг будет задействован если: 1. чек фискальный, 2. оплата по "ElectronicPayment" не равна 0, 3. PayByProcessing = true
    // Использовать эквайринг: Null - из настроек на сервере, false - не будет, true - будет
    Data.PayByProcessing = false; //В тестовом чеке автоматический эквайринг выключен
    // Номер устройства для эквайринга - Null - из настроек на сервере, 0 - любое, число - номер конкретного устройства
    Data.NumDeviceByProcessing = null; 
    // Номер чека для эквайринга
    Data.ReceiptNumber = "TEST-1";
    // Печатать Слип-чек после чека (а не в чеке)
    PrintSlipAfterCheck = false;
    // Печатать Слип-чек дополнительно для кассира (основной слип-чек уже будет печататся в составе чека)
    Data.PrintSlipForCashier = true;
    //Если это чек возврата то возможны два поля для отмены транзакции (если не указано то по эквайрингу будет не отмена а возврат оплаты)
    Data.RRNCode = ""; // RRNCode из операции эквайринга. Только для отмены оплаты! Для Оплаты или возврата оплаты не заполнять!
    Data.AuthorizationCode = ""; // AuthorizationCode из операции эквайринга. Только для отмены оплаты! Для Оплаты или возврата оплаты не заполнять!

    // Добавление признаков агенте и поставщика 
    Data.AddDataAgent(
        // Признак агента (не обязательно), Тег 1057
        // 0: "Банковский платежный агент:" Оказание услуг пользователем, являющимся банковским платежным агентом
        // 1: "Банковский платежный субагент:" Оказание услуг пользователем, являющимся банковским платежным субагентом
        // 2: "Платежный агент:" Оказание услуг пользователем, являющимся платежным агентом
        // 3: "Платежный субагент:" Оказание услуг пользователем, являющимся платежным субагентом
        // 4: "Поверенный:" Оказание услуг пользователем, являющимся поверенным
        // 5: "Комиссионер:" Оказание услуг пользователем, являющимся комиссионером
        // 6: "Агент:" Оказание услуг пользователем, являющимся агентом и не являющимся банковским платежным агентом (субагентом), платежным агентом (субагентом), поверенным, комиссионером
        2,
        // Операция платежного агента тег 1044
        "95315",
        // Телефон платежного агента тег 1073
        "+79995554422",
        // Телефон оператора по приему платежей  тег 1074
        "+72223334455",
        // Телефон оператора перевода тег 1075
        "+74447776655",
        // Наименование оператора перевода тег 1026
        "ООО Тестовая организация",
        // Адрес оператора перевода тег 1005
        "Москва, зубовский бульвар 44",
        // ИНН оператора перевода тег 1016
        "430601071197",
        // Телефон поставщика тег 1171
        "+76662229955"
    );
   

    // Добавление печати текста по полям

    //При вставке в текст символов ">#10#<" строка при печати выровнеется по центру, где 10 - это на сколько меньше станет строка ККТ
    Data.AddTextString(">#2#<ООО \"Рога и копыта\"", 1);
                                 // При вставке в текст в середину строки символов "<#10#>" Левая часть строки будет выравнена по левому краю, правая по правому, где 10 - это на сколько меньше станет строка ККТ
                                 // При вставке в текст в середину строки символов "<#10#>>" Левая часть строки будет выравнена по правому краю, правая по правому, где 10 - отступ от правого клая
                                 Data.AddTextString("<<->>");
    Data.AddTextString("Пример №1:<#10#>154,41");
    Data.AddTextString("2-рое поле:<#10#>4,00");
    Data.AddTextString("<<->>");
    Data.AddTextString("Пример №2:<#8#>>4,00");
    Data.AddTextString("2-рое поле:<#8#>>1544,00");

    // Добавление печати текста шрифтом и интенсивностью
    // Data.AddTextString(Data, Текст, Font(1-4, 0 - по настройкам ККМ), Intensity(1-15, 0 - по настройкам ККМ);
    Data.AddTextString("<<->>");
    Data.AddTextString("Шрифт № 1", 1, 15);
    Data.AddTextString("Шрифт № 2", 2, 10);
    Data.AddTextString("Шрифт № 3", 3, 5);
    Data.AddTextString("Шрифт № 4", 4, 15);
    Data.AddTextString("<<->>");

    // Добавление печати фискальной строки
    var DataStr = Data.AddRegisterString(
        // НаименованиеТовара(64 символа)
        "Сапоги женские DF-3099-1",
        // Количество (3 знака после запятой)
        1,
        // ЦенаБезСкидки (2 знака после запятой)
        1,
        // СуммаСтроки (2 знака после запятой)
        0.01,
        // СтавкаНДС(0(НДС 0%), 10(НДС 10%), 20(НДС 20%), -1(НДС не облагается), 120 (НДС 20/120), 110 (НДС 10/110))
        -1,
        // Отдел
        0,
        // Код товара EAN13 - не обязательно
        "1254789547853",
        // Признак способа расчета. тег ОФД 1214. Для ФФД.1.05 и выше обязательное поле
        // 1: "ПРЕДОПЛАТА 100% (Полная предварительная оплата до момента передачи предмета расчета)"
        // 2: "ПРЕДОПЛАТА (Частичная предварительная оплата до момента передачи предмета расчета)"
        // 3: "АВАНС"
        // 4: "ПОЛНЫЙ РАСЧЕТ (Полная оплата, в том числе с учетом аванса в момент передачи предмета расчета)"
        // 5: "ЧАСТИЧНЫЙ РАСЧЕТ И КРЕДИТ (Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит )"
        // 6: "ПЕРЕДАЧА В КРЕДИТ (Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит)"
        // 7: "ОПЛАТА КРЕДИТА (Оплата предмета расчета после его передачи с оплатой в кредит )"
        4,
        // Признак предмета расчета. тег ОФД 1212. Для ФФД.1.05 и выше обязательное поле
        // 1: "ТОВАР (наименование и иные сведения, описывающие товар)"
        // 2: "ПОДАКЦИЗНЫЙ ТОВАР (наименование и иные сведения, описывающие товар)"
        // 3: "РАБОТА (наименование и иные сведения, описывающие работу)"
        // 4: "УСЛУГА (наименование и иные сведения, описывающие услугу)"
        // 5: "СТАВКА АЗАРТНОЙ ИГРЫ (при осуществлении деятельности по проведению азартных игр)"
        // 6: "ВЫИГРЫШ АЗАРТНОЙ ИГРЫ (при осуществлении деятельности по проведению азартных игр)"
        // 7: "ЛОТЕРЕЙНЫЙ БИЛЕТ (при осуществлении деятельности по проведению лотерей)"
        // 8: "ВЫИГРЫШ ЛОТЕРЕИ (при осуществлении деятельности по проведению лотерей)"
        // 9: "ПРЕДОСТАВЛЕНИЕ РИД (предоставлении прав на использование результатов интеллектуальной деятельности или средств индивидуализации)"
        // 10: "ПЛАТЕЖ (аванс, задаток, предоплата, кредит, взнос в счет оплаты, пени, штраф, вознаграждение, бонус и иной аналогичный предмет расчета)"
        // 11: "АГЕНТСКОЕ ВОЗНАГРАЖДЕНИЕ (вознаграждение (банковского)платежного агента/субагента, комиссионера, поверенного или иным агентом)"
        // 12: "СОСТАВНОЙ ПРЕДМЕТ РАСЧЕТА (предмет расчета, состоящем из предметов, каждому из которых может быть присвоено вышестоящее значение"
        // 13: "ИНОЙ ПРЕДМЕТ РАСЧЕТА (предмет расчета, не относящемуся к предметам расчета, которым может быть присвоено вышестоящее значение"
        // 14: "ИМУЩЕСТВЕННОЕ ПРАВО" (передача имущественных прав)
        // 15: "ВНЕРЕАЛИЗАЦИОННЫЙ ДОХОД"
        // 16: "СТРАХОВЫЕ ВЗНОСЫ" (суммы расходов, уменьшающих сумму налога (авансовых платежей) в соответствии с пунктом 3.1 статьи 346.21 Налогового кодекса Российской Федерации)
        // 17: "ТОРГОВЫЙ СБОР" (суммы уплаченного торгового сбора)
        // 18: "КУРОРТНЫЙ СБОР"
        // 19: "ЗАЛОГ"
        1,
        //штрих - код маркировки товара со сканера(нужно настроить сканер так чтобы не проглатывал управляющие символы)
        //КИЗ(контрольный идентификационный знак) товарной номенклатуры Тег ОФД 1162(честный знак), можно не указывать
        // Поддерживаются ШК: 
        // Без идентификатора экземпляра товара: EAN8, EAN13, ITF14
        // С идентификатором экземпляра товара: GS1, ШК шуб, ШК табачной продукции., ЕГАИС-2, ЕГАИС-3
        //Описание применимых ШК
        "0104300943734342212413195240818240640291ffd092MDEwNDMwMDk0MzczNDM",
        // Единица измерения предмета расчета. Можно не указывать
        "пара",
        // Цифровой код страны происхождения товара (CountryOfOrigin) в соответствии с Общероссийским классификатором стран мира 3 симв. Тег 1230
        "156",
        // Регистрационный номер таможенной декларации (CustomsDeclaration) 32 симв. Тег 1231
        "54180656/1345865/3435625/23",
        // Сумма акциза (ExciseAmount) с учетом копеек, включенная в стоимость предмета расчета Тег 1229
        0.01,
        // Дополнительный реквизит предмета расчета тег 1191, Только для ФФД 1.1 !
        "Тест-доп.реквизит"
    );

    // Добавляет в последнею строку Код товарной номенклатуры
    // КИЗ (контрольный идентификационный знак) товарной номенклатуры Тег ОФД 1162 (честный знак), можно не указывать
    // !!!!Команда нужна если в команде  Data.AddRegisterString не добавили КИЗ
    //Data.MarkingCode(
    //    // штрих-код маркировки товара со сканера (нужно настроить сканер так чтобы не проглатывал управляющие символы)
    //    // Поддерживаются ШК: 
    //    // Без идентификатора экземпляра товара: EAN8, EAN13, ITF14
    //    // С идентификатором экземпляра товара: GS1, ШК шуб, ШК табачной продукции., ЕГАИС-2, ЕГАИС-3
    //    "0104300943734342212413195240818240640291ffd092MDEwNDMwMDk0MzczNDM",
    //    // Проверять содержит ли ШК кода маркировки идентификатор экземпляра товара (если вообше не указать - true)
    //    // Для некоторых товаров нужно передавать ШК EAN-13, тогда это поле устанавливайте в 'false'
    //    true
    //);

    // DataStr.EGAIS = {
    //     Barcode: "22N0000154NUCPRZ3R8381461004001003499NKAQ0ZBUVDNV62JQAR69PEV878RO93V",
    //     Ean: "3423290167937",
    //     Volume: 0.7500,
    // };

    // Добавляет в последнею строку признак агента (не обязательно), Тег 1222.
    // Поле не обязательное. Можно вообще не указывать.
    // 0: "Банковский платежный агент:" Оказание услуг пользователем, являющимся банковским платежным агентом
    // 1: "Банковский платежный субагент:" Оказание услуг пользователем, являющимся банковским платежным субагентом
    // 2: "Платежный агент:" Оказание услуг пользователем, являющимся платежным агентом
    // 3: "Платежный субагент:" Оказание услуг пользователем, являющимся платежным субагентом
    // 4: "Поверенный:" Оказание услуг пользователем, являющимся поверенным
    // 5: "Комиссионер:" Оказание услуг пользователем, являющимся комиссионером
    // 6: "Агент:" Оказание услуг пользователем, являющимся агентом и не являющимся банковским платежным агентом (субагентом), платежным агентом (субагентом), поверенным, комиссионером
    Data.AddAgentSign(2);
    // Добавляет в последнею строку данные агента (не обязательно)
    Data.AddAgentData(
        // Операция платежного агента тег 1044
        "95315",
        // Телефон платежного агента тег 1073
        "+79995554422",
        // Телефон оператора по приему платежей  тег 1074
        "+72223334455",
        // Телефон оператора перевода тег 1075
        "+74447776655",
        // Наименование оператора перевода тег 1026
        "ООО Рога и копыта",
        // Адрес оператора перевода тег 1005
        "Москва, зубовский бульвар 44",
        // ИНН оператора перевода тег 1016
        "430601071197"
        );
        // Добавляет в последнею строку данные поставщика (не обязательно)
        Data.AddPurveyorData(
        // Телефон поставщика тег 1171
        "+76662229955",
        // Наименование поставщика ОФД 1225
        "ООО 'Гаражик в деревне'",
        // ИНН поставщика тег 1226
        "430601071197"
    );

    // Добавление печати штрихкода
    // Data.AddBarcodeString(ТипШтрихКода ("EAN13", "CODE39", "CODE128", "QR", "PDF417", "1254789547853"), ШтрихКод);
    Data.AddBarcodeString("EAN13", "1254789547853");
    Data.AddTextString("<<->>");

    Data.AddTextString("Это мега крутой товар. Продается во всех магазинах страны. Покупайте только у нас", 4, 0);

    // Добавление печати еще одной фискальной строки
    Data.AddRegisterString("Шаровары мужские красные: НИМБУС-2000", 1, 1, 0.01, 1, 1, "1254789547853", 1, 1);

    // Добавляет в последнею строку Код товарной номенклатуры
    Data.AddGoodCodeData("02", "04630037591316", "sgEdK2y5");

    // Добавление печати штрихкода
    // Data.AddBarcodeString(ТипШтрихКода ("EAN13", "CODE39", "CODE128", "QR", "PDF417", "1254789547853"), ШтрихКод);
    // Data.AddBarcodeString("QR", "12345DFG Proba pera, Print barcode 1234567890.");
    // Data.AddBarcodeString("PDF417", "12345DFG Proba pera, Print barcode 1234567890.");

    // Наличная оплата (2 знака после запятой)
    Data.Cash = 100;
    // Сумма электронной оплаты (2 знака после запятой)
    Data.ElectronicPayment = 0.01;
    // Сумма из предоплаты (зачетом аванса) (2 знака после запятой)
    Data.AdvancePayment = 0;
    // Сумма постоплатой(в кредит) (2 знака после запятой)
    Data.Credit = 0;
    // Сумма оплаты встречным предоставлением (сертификаты, др. мат.ценности) (2 знака после запятой)
    Data.CashProvision = 0;


    //#if Relese
    // Скидываем данные об агенте - т.к.у Вас неверняка ККТ не зарегистрирована как Агент.
    Data.AgentSign = null;
    Data.AgentData = null;
    Data.PurveyorData = null;
    //#endif
    for (var i = 0; i < Data.CheckStrings.length; i++) {
        if (Data.CheckStrings[i] != undefined && Data.CheckStrings[i].Register != undefined) {
            Data.CheckStrings[i].Register.AgentSign = null;
            Data.CheckStrings[i].Register.AgentData = null;
            Data.CheckStrings[i].Register.PurveyorData = null;
        };
    };

    // Вызов команды
    OldIdCommand = Data.Execute(ExecuteSuccess).IdCommand;

    // Возвращается JSON:
    //{
    //    "CheckNumber": 3,           // Номер документа
    //    "SessionNumber": 1,         // Номер смены
    //    "SessionCheckNumber": 1,    // Номер чека в смене
    //    "URL": "https://ofd-ya.ru/getFiscalDoc?kktRegId=0000000000061716&fiscalSign=839499349",
    //    "QRCode": "t=20190101T195300&s=0.03&fn=9999078900002838&i=3&fp=839499349&n=1",
    //    "Command": "RegisterCheck",
    //    "Cash": 0, // Оплачено наличными
    //    "ElectronicPayment": 3.02, // Оплачено электронноо
    //    "AdvancePayment": 0, // Оплачено предоплатой (зачетом аванса)
    //    "Credit": 0, // постоплатой(в кредит)
    //    "CashProvision": 0, // встречным предоставлением (сертификаты, др. мат.ценности)
    //    "Error": "", // Текст ошибки если была - обязательно показать пользователю - по содержанию ошибки можно в 90% случаях понять как ее устранять
    //    "Message": "", // Сообщение пользователю - Если строка не пустая - ее нужно отобразить пользователю
    //    "Status": 0, // Ok = 0, Run(Запущено на выполнение) = 1, Error = 2, NotFound(устройство не найдено) = 3, NotRun = 4
    //    "IdCommand": "dd261969-4190-1125-26cd-aaf5c213c0e3",
    //    "NumDevice": 2
    //}

}

Ответы (0 шт):