Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
08 ноя 2025, 12:59

Краткий пример программной печати чека на ККМ

Автор skillful, 30 окт 2025, 10:29

0 Пользователей и 1 гость просматривают эту тему.

skillful

Добрый день. Появилась задача из самописной конфигурации печатать чеки на фискальном ККМ Штрих-м. Начало кода получилось таким:
Попытка

//Макет обработки
Обработка =  РеквизитФормыВЗначение("Объект");
Макет = Обработка.ПолучитьМакет("Poscenter_drvkkt_1c_46");

Адрес = ПоместитьВоВременноеХранилище(Макет);
    ПодключитьВнешнююКомпоненту(Адрес, "ИнтеграционнаяКомпонента", ТипВнешнейКомпоненты.Native);

    ОбъектКкм = Новый("AddIn.ИнтеграционнаяКомпонента.PoscenterDrvKKT1C"); //Программный идентификатор (Синоним макета)
                                             
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

ОбъектКкм - получен без ошибок, а вот дальше затык. У кого есть простенький пример для печати чека, поделитесь пожалуйста.

Сам я пробовал так:
    НовыйФормат = Истина;
НомерЛУ     = 1;
Электронно  = Ложь;
ВыходныеДанные = "";

ДанныеЧека = "
|<?xml version=""1.0"" encoding=""UTF-8""?>
|<CheckPackage>
| <Parameters OperationType=""2"" TaxationSystem=""2"" CashierName=""ФИО"" CustomerEmail="""" SenderEmail=""notice@shtrih.ru"" CustomerPhone="""" OperationOnline=""false"">
| <CustomerDetail/>
| <AgentData/>
| <VendorData/>
| </Parameters>
| <Positions>
| <TextString Text=""------------------------------------------------""/>
| <TextString Text=""Клуб печати чеков:                              ""/>
| <TextString Text=""------------------------------------------------""/>
| <FiscalString Name=""Пакет майка 53x41x50"" Quantity=""1"" PriceWithDiscount=""10"" AmountWithDiscount=""10"" DiscountAmount="""" Department=""1"" VATRate=""none"" PaymentMethod=""4"" CalculationSubject=""1"" VATAmount=""0"" MeasureOfQuantity=""0"">
| <AgentData/>
| <VendorData/>
| </FiscalString>
| <TextString CustomsDeclaration="""" CountryOfOrigin="""" Text=""                                                ""/>
| <TextString Text=""------------------------------------------------""/>
| </Positions>
| <Payments Cash=""10"" ElectronicPayment=""0"" PostPayment=""0"" PrePayment=""0"" Barter=""0""/>
|</CheckPackage>";


Результат = "";

Попытка

Ответ = ОбъектКкм.СформироватьЧек(НомерЛУ, Электронно, ДанныеЧека, ВыходныеДанные);

Если НЕ Ответ = Истина Тогда
ОбъектКкм.ПолучитьОшибку(Результат);
КонецЕсли;
Исключение
Результат = (НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.СформироватьЧек>.'") + Символы.ПС + ОписаниеОшибки());

Сообщить("Ошибка фискализации чека. Причина: " + Строка(Результат));

КонецПопытки;

Результат - "FFFFFFF7h, Некорректное значение параметра "DeviceID""







Максим75

skillful, проще будет поставщику этого программного рро написать, чтобы поделились кодом простенького чека, или сказали куда штрих-код добавить в строке.

просто Вы не передаете в данных чека номер устройства, ведь каждый пРРО имеет свой уникальный ай-ди, вот его где-то надо передать, чтобы сервер поставщика услуг по этому рро мог отделить Ваши чеки от не Ваших.

skillful

    ДанныеЧека = "
    |<?xml version=""1.0"" encoding=""UTF-8""?>
    |<CheckPackage>
    |    <Parameters OperationType=""2"" TaxationSystem=""2"" CashierName=""ФИО"" CustomerEmail="""" SenderEmail=""notice@shtrih.ru"" CustomerPhone="""" OperationOnline=""false"">
    |        <CustomerDetail/>
    |        <AgentData/>
    |        <VendorData/>
    |    </Parameters>
    |    <Positions>
    |        <TextString Text=""------------------------------------------------""/>
    |        <TextString Text=""Клуб печати чеков:                              ""/>
    |        <TextString Text=""------------------------------------------------""/>
    |        <FiscalString Name=""Пакет майка 53x41x50"" Quantity=""1"" PriceWithDiscount=""10"" AmountWithDiscount=""10"" DiscountAmount="""" Department=""1"" VATRate=""none"" PaymentMethod=""4"" CalculationSubject=""1"" VATAmount=""0"" MeasureOfQuantity=""0"">
    |            <AgentData/>
    |            <VendorData/>
    |        </FiscalString>
    |        <TextString CustomsDeclaration="""" CountryOfOrigin="""" Text=""                                                ""/>
    |        <TextString Text=""------------------------------------------------""/>
    |    </Positions>
    |    <Payments Cash=""10"" ElectronicPayment=""0"" PostPayment=""0"" PrePayment=""0"" Barter=""0""/>
    |</CheckPackage>";



ДанныеЧека и ДвоичныеДанные (Которые хранятся в макете Poscenter_drvkkt_1c_46) взяты из другой самописной конфигурации и там чек пробивается на этом же ккм, а в моей БД ошибка ((

skillful

skillful, еще заметил, что переменная "ВыходныеДанные" из рабочей базы заполнена
<?xml version="1.0"?>
<DocumentOutputParameters>
  <Parameters ShiftNumber="290" CheckNumber="6165" ShiftClosingCheckNumber="3" AddressSiteInspections="www.nalog.gov.ru" FiscalSign="29955556510" DateTime="2025-10-30T16:22:00" PrintError="false"/>
</DocumentOutputParameters>

Ответ = ОбъектКкм.СформироватьЧек(НомерЛУ, Электронно, ДанныеЧека, ВыходныеДанные);
А в моей БД переменная "ВыходныеДанные" - пустая.

Максим75

skillful, потому и заполнена, что чек напечатан. там и заполняются данные по чеку.
у Вас похоже ОбъектККм в одной и во второй немного разные. Видимо как раз ай-дихи устройства и не хватает.
И не понимает для какого устройства чек создавать. Печать то уже дело пятое, вначале чек должен на платформе создаться, а уже потом на принтер чека пойти.

skillful

Максим75,
ПараметрыПодключения = Новый Структура;
 
    ПараметрыПодключения.Вставить("AccessPassword", "0");
    ПараметрыПодключения.Вставить("BaudRate", "9600");
    ПараметрыПодключения.Вставить("Bits", "8");
    ПараметрыПодключения.Вставить("IPAddress", "192.168.1.12");
    ПараметрыПодключения.Вставить("IPPort", 7780);
    ПараметрыПодключения.Вставить("MACAddress", "");
    ПараметрыПодключения.Вставить("Model", "62");
    ПараметрыПодключения.Вставить("OfdPort", "NONE");
    ПараметрыПодключения.Вставить("Parity", "0");
    ПараметрыПодключения.Вставить("Port", "TCPIP");
    ПараметрыПодключения.Вставить("Protocol", "0");
    ПараметрыПодключения.Вставить("StopBits", "0");
    ПараметрыПодключения.Вставить("UserPassword", "30");
    ПараметрыПодключения.Вставить("Идентификатор", "Штрих-М: ККТ с передачей данных");
    ПараметрыПодключения.Вставить("DeviceID", "00084431100052232");
   
                                   //00084431100052232 - рег. номер
                                   //01094300060074159 - завод. номер
                                   //73814408004050245  - завод номер ФН
 
    Для Каждого Параметр Из ПараметрыПодключения Цикл
   
        Попытка
            Ответ = ОбъектКкм.УстановитьПараметр(Параметр.Ключ, Параметр.Значение)
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
   
    КонецЦикла;


Пробовал заполнить ПараметрыПодключения ПараметрыПодключения.Вставить("DeviceID", "00084431100052232");
Все равно такая же ошибка

skillful


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск