Страница 1 из 1

Новое в версиях

Добавлено: 01 авг 2018, 02:48
Audim
2.2.10.25 от 28.10.2021 новое в версии: ФФД 1.2 для Терминал-ФА

Добавлена поддержка ФФД 1.2 протокола КИТ (КАСБИ)
КИТ Онлайн-Ф, Терминал-ФА

Изменения в API: Команда получения счетчиков ФН:

Для ФФД 1.1 Ввели счетчики в ФН.
Но производители ККТ все ни как не хотели это реализовывать.
И вот в прошивках для ФФД 1.2 у всех появились эти команды.

Команда "GetСounters" (Применима только для ККТ работающих по ФФД 1.2 )

Код: Выделить всё

{
        // Команда серверу
        Command: "GetСounters",
        // ИНН ККМ для поиска. Если "" то ККМ ищется только по NumDevice,
        // Если NumDevice = 0 а InnKkm заполнено то ККМ ищется только по InnKkm
        InnKkm: "",
        // Система налогообложения (СНО) для поиска ККТ, Можно не указывать, или = "" - любое СНО
        TaxVariant: "",
        // Номер устройства. Если 0 то первое не блокированное на сервере
        NumDevice: NumDevice,
        // Уникальный идентификатор команды. Любая строка из 40 символов - должна быть уникальна для каждой подаваемой команды
        // По этому идентификатору можно запросить результат выполнения команды
        // Поле не обязательно
        IdCommand: guid()
    }
Возвращает вот такой ответ:

Код: Выделить всё

{
	"Сounters": [
	{
		"СountersType": "Total",
		"ReceiptType": "Shell",
		"Count": 1,
		"Sum": 3.02,
		"Cash": 0.0,
		"ElectronicPayment": 3.02,
		"AdvancePayment": 0.0,
		"Credit": 0.0,
		"CashProvision": 0.0,
		"Tax20": 0.5,
		"Tax10": 0.0,
		"Tax0": 0.0,
		"TaxNo": 0.02,
		"Tax120": 0.0,
		"Tax110": 0.0,
		"CorrectionsCount": 1,
		"CorrectionsSum": 3.02
	}, {
		"СountersType": "Total",
		"ReceiptType": "ShellReturn",
		"Count": 1,
		"Sum": 3.02,
		"Cash": 0.0,
		"ElectronicPayment": 3.02,
		"AdvancePayment": 0.0,
		"Credit": 0.0,
		"CashProvision": 0.0,
		"Tax20": 0.5,
		"Tax10": 0.0,
		"Tax0": 0.0,
		"TaxNo": 0.02,
		"Tax120": 0.0,
		"Tax110": 0.0,
		"CorrectionsCount": 0,
		"CorrectionsSum": 0.0
	}, {
		"СountersType": "Total",
		"ReceiptType": "Buy",
		"Count": 0,
		"Sum": 0.0,
		"Cash": 0.0,
		"ElectronicPayment": 0.0,
		"AdvancePayment": 0.0,
		"Credit": 0.0,
		"CashProvision": 0.0,
		"Tax20": 0.0,
		"Tax10": 0.0,
		"Tax0": 0.0,
		"TaxNo": 0.0,
		"Tax120": 0.0,
		"Tax110": 0.0,
		"CorrectionsCount": 0,
		"CorrectionsSum": 0.0
	}, {
		"СountersType": "Total",
		"ReceiptType": "BuyReturn",
		"Count": 0,
		"Sum": 0.0,
		"Cash": 0.0,
		"ElectronicPayment": 0.0,
		"AdvancePayment": 0.0,
		"Credit": 0.0,
		"CashProvision": 0.0,
		"Tax20": 0.0,
		"Tax10": 0.0,
		"Tax0": 0.0,
		"TaxNo": 0.0,
		"Tax120": 0.0,
		"Tax110": 0.0,
		"CorrectionsCount": 0,
		"CorrectionsSum": 0.0
	}, {
		"СountersType": "Shift",
		"ReceiptType": "Shell",
		"Count": 1,
		"Sum": 3.02,
		"Cash": 0.0,
		"ElectronicPayment": 3.02,
		"AdvancePayment": 0.0,
		"Credit": 0.0,
		"CashProvision": 0.0,
		"Tax20": 0.5,
		"Tax10": 0.0,
		"Tax0": 0.0,
		"TaxNo": 0.02,
		"Tax120": 0.0,
		"Tax110": 0.0,
		"CorrectionsCount": 1,
		"CorrectionsSum": 3.02
	}, {
		"СountersType": "Shift",
		"ReceiptType": "ShellReturn",
		"Count": 1,
		"Sum": 3.02,
		"Cash": 0.0,
		"ElectronicPayment": 3.02,
		"AdvancePayment": 0.0,
		"Credit": 0.0,
		"CashProvision": 0.0,
		"Tax20": 0.5,
		"Tax10": 0.0,
		"Tax0": 0.0,
		"TaxNo": 0.02,
		"Tax120": 0.0,
		"Tax110": 0.0,
		"CorrectionsCount": 0,
		"CorrectionsSum": 0.0
	}, {
		"СountersType": "Shift",
		"ReceiptType": "Buy",
		"Count": 0,
		"Sum": 0.0,
		"Cash": 0.0,
		"ElectronicPayment": 0.0,
		"AdvancePayment": 0.0,
		"Credit": 0.0,
		"CashProvision": 0.0,
		"Tax20": 0.0,
		"Tax10": 0.0,
		"Tax0": 0.0,
		"TaxNo": 0.0,
		"Tax120": 0.0,
		"Tax110": 0.0,
		"CorrectionsCount": 0,
		"CorrectionsSum": 0.0
	}, {
		"СountersType": "Shift",
		"ReceiptType": "BuyReturn",
		"Count": 0,
		"Sum": 0.0,
		"Cash": 0.0,
		"ElectronicPayment": 0.0,
		"AdvancePayment": 0.0,
		"Credit": 0.0,
		"CashProvision": 0.0,
		"Tax20": 0.0,
		"Tax10": 0.0,
		"Tax0": 0.0,
		"TaxNo": 0.0,
		"Tax120": 0.0,
		"Tax110": 0.0,
		"CorrectionsCount": 0,
		"CorrectionsSum": 0.0
	}],
	"Command": "GetСounters",
	"Error": "",
	"Warning": "",
	"Message": "",
	"Status": 0,
	"IdCommand": "f4836510-983c-85c5-1e72-11113ec4b997",
	"NumDevice": 5
}
Где:
"СountersType": итоги общие или по последней смене
"ReceiptType": тип чека - продажа, покупка, возвраты
"Count": Количество чеков
"Sum": Общая Сумма
"Cash": Сумма наличных
"ElectronicPayment": Сумма безналичных
"AdvancePayment": Сумма оплата авансом
"Credit": Сумма в кредит
"CashProvision": Сумма встречным представление
"Tax20": Сумма ДНС
"Tax10":Сумма ДНС
"Tax0": Сумма ДНС
"TaxNo": Сумма ДНС
"Tax120": Сумма ДНС
"Tax110": Сумма ДНС
"CorrectionsCount": Из них количество чеков коррекции
"CorrectionsSum": Из них сумма чеков коррекции


2.2.10.10 от 11.10.2021 новое в версии: ФФД 1.2

Добавлена поддержка ФФД 1.2 для некоторых ККТ
Протокол АТОЛ (Платформа 5) (ФФД 1.2):
Протокол ШТРИХ-М (ФФД 1.2):
Протокол RR-Electro (ФФД 1.2):
Протокол РИТЕЙЛ (ФФД 1.2):
Протокол Paykiosk.ru (ФФД 1.2):
Протокол Dreamkas (Viki Print) (ФФД 1.2):
На подходе Протокол КИТ (КАСБИ).


Изменения в API маркировки:

Код маркировки для ФФД 1.2 нужно передавать в точности такой какой он пришел со сканера!
Пример: BarCode: "0104300943734342212413195240818240640291ffd092MDEwNDMwMDk0MzczNDM",
При этом сканер не должен "Съедать" управляющие символы.
Вы можете протестировать свой сканер здесь: https://xn--80ajghhoc2aj1c8b.xn--p1ai/barcode/

В JSON структуре "Register" фискальной строки изменено поле - структура:
Добавлено Поле "AcceptOnBad" для ККТ работающих по ФФД 1.2:

Код: Выделить всё

GoodCodeData: {
        // штрих-код маркировки товара со сканера
        BarCode: "0104300943734342212413195240818240640291ffd092MDEwNDMwMDk0MzczNDM",
        // Проверять содержит ли ШК кода маркировки идентификатор экземпляра товара (если вообще не указать - true)
        // Для некоторых товаров нужно передавать ШК EAN-13, тогда это поле устанавливайте в 'false'
        ContainsSerialNumber: true
	// Все равно регистрировать чек даже если код маркировки не прошел проверку
        // Только для работы по ФФД 1.2
        AcceptOnBad: true
}
Смысл: если какой-то код маркировки не прошел проверку в ККТ то чек все равно можно напечатать.
В строке в чеке будет знак [-M] - который это и означает.
ОФД не будет такой код маркировки выводить из оборота.

Добавлена новая команда "ValidationMarkingCode" для ККТ работающих по ФФД 1.2
Данной командой можно проверить коды маркировки в ККТ

При этом некоторые коды (которые в себе содержат крипто-подпись)(например обувные) будут проверены ККТ офлайн.
А все другие коды будут проверятся ККТ через ОФД.
Что соответственно будет занимать некоторое время.

Пример команды:

Код: Выделить всё

	{
        // Команда серверу
        Command: "ValidationMarkingCode",
        
       //***********************************************************************************************************
        // ПОЛЯ ПОИСКА УСТРОЙСТВА
        //***********************************************************************************************************
        // Номер устройства. Если 0 то первое не блокированное на сервере
        // Не рекомендовано для использования. 
        // Рекомендуем для поиска ККТ задавать InnKkm и TaxVariant !!!!!!
        NumDevice: NumDevice,
        // ИНН ККМ для поиска. Если "" то ККМ ищется только по NumDevice,
        // Если NumDevice = 0 а InnKkm заполнено то ККМ ищется только по InnKkm
        InnKkm: "",
        // Система налогообложения (СНО) для поиска ККТ, Можно не указывать, или = "" - любое СНО
        TaxVariant: "",
        // Заводской номер ККМ для поиска. Если "" то ККМ ищется только по NumDevice,
        KktNumber: "",
        // **********************************************************************************************************

        // Список кодов маркировки
        "GoodCodeDatas": [
            {
                // Наименование товара - справочно, можно не передавать
                "Name": "Тестовый товар 1",
                // штрих-код маркировки товара со сканера (нужно настроить сканер так чтобы не проглатывал управляющие символы)
                // Поддерживаются ШК: 
                // Без идентификатора экземпляра товара: EAN8, EAN13, ITF14
                // С идентификатором экземпляра товара: GS1, ШК шуб, ШК табачной продукции., ЕГАИС-2, ЕГАИС-3
                "Barcode": "010460708021818721&dAIMqnpEQnQ!\u001d910058\u001d921gx+7D2jIWGSo6LLr1FMGiETo7Ez6k4ag9D8FZwEmJqIWtivlAGjqEP8OspoVeIKiP4OkzmSCzRXmEUygvkKQw=="
            },
            {
                // Наименование товара - справочно, можно не передавать
                "Name": "Тестовый товар 2",
                // штрих-код маркировки товара со сканера (нужно настроить сканер так чтобы не проглатывал управляющие символы)
                // Поддерживаются ШК: 
                // Без идентификатора экземпляра товара: EAN8, EAN13, ITF14
                // С идентификатором экземпляра товара: GS1, ШК шуб, ШК табачной продукции., ЕГАИС-2, ЕГАИС-3
                "Barcode": "01046100301415342100000!&\u001d8005106000\u001d93yikZ"
            },
        ],

        // Уникальный идентификатор команды. Любая строка из 40 символов - должна быть уникальна для каждой подаваемой команды
        // По этому идентификатору можно запросить результат выполнения команды
        IdCommand: "g34344gs4ws",
    }
Вернется вот такой ответ:

Код: Выделить всё

	{
        "MarkingCodeValidation": [
            {
                "Name": "Тестовый товар 1",
                "BarCode": "010460708021818721&dAIMqnpEQnQ!\u001d910058\u001d921gx+7D2jIWGSo6LLr1FMGiETo7Ez6k4ag9D8FZwEmJqIWtivlAGjqEP8OspoVeIKiP4OkzmSCzRXmEUygvkKQw==",
                // Результат проверки КМ в ФН (тег 2106)
                "ValidationResult": 16,
                "DecryptionResult": "[М] Проверка КП КМ не выполнена, статус товара ОИСМ не проверен (ККТ функционирует в автономном режиме); ФН не содержит ключ проверки кода проверки этого КМ"
            },
            {
                "Name": "Тестовый товар 2",
                "BarCode": "01046100301415342100000!&\u001d8005106000\u001d93yikZ",
                // Результат проверки КМ в ФН (тег 2106)
                "ValidationResult": 16,
                "DecryptionResult": "[М] Проверка КП КМ не выполнена, статус товара ОИСМ не проверен (ККТ функционирует в автономном режиме); КМ данного типа не подлежит проверке в ФН"
            }
        ],
        "Command": "ValidationMarkingCode",
        "Error": "",
        "Warning": "",
        "Message": "",
        "Status": 0,
        "IdCommand": "",
        "NumDevice": 7
    }
Состояния битов в значении реквизита "ValidationResult" (тег 2106)

Код: Выделить всё

0 бит:	"0" - код маркировки не был проверен ФН и (или) ОИСМ
	"1" - код маркировки проверен
1 бит:	"0" - результат проверки КП КМ отрицательный или код маркировки не был проверен
	"1" - результат проверки КП КМ положительный
2 бит:	"0" - сведения о статусе товара от ОИСМ не получены
	"1" - проверка статуса ОИСМ выполнена
3 бит:	"0" - от ОИСМ получены сведения, что планируемый статус товара некорректен или сведения о статусе товара от ОИСМ не получены
	"1" - от ОИСМ получены сведения, что планируемый статус товара корректен
4 бит:	"0" - результат проверки КП КМ и статуса товара сформирован ККТ, работающей в режиме передачи данных
	"1" - результат проверки КП КМ сформирован ККТ, работающей в автономном режиме
5 бит: - 7	Заполняются нулями

Логика работы такая (по мнению авторов ФЗ-54):

1. Перед регистрацией чека Вы должны подать команду "ValidationMarkingCode" в которой передать все коды маркировки которые есть в чеке.
2. kkmserver через ККТ проверяет эти коды и возвращает Вам результат проверки.
3. Если есть коды маркировки которые не прошли проверку Вы должны спросить у покупателя согласен ли он на это.
4. Если Да то Вы передаете эти коды маркировки в чек с пометкой в поле "AcceptOnBad: true".
Тогда чек напечатается.

ЗЫ: Коды маркировки в команде регистрации чека не проверяются если они ранее проверены командой "ValidationMarkingCode"
После регистрации чека все проверенные коды маркировки сбрасываются из памяти ККТ

Но вот мне кажется вы не будете работать по такой схеме. Поэтому:

Поэтому можно без команды "ValidationMarkingCode" передать все коды маркировки сразу в чек.
И в зависимости от "AcceptOnBad" коды маркировки не прошедшие проверку применятся или не применятся.
И соответственно весь чек или будет зарегистрирован или не будет.

Вообще это нарушение закона (без вопроса покупателю) - на Ваше усмотрение.


Изменения в API подачи команд на терминал:

Добавлено поле ИНН для поиска.
Если "" или не указано то ищется только по NumDevice,
[/code]InnKkm: "1234567890"[/code]

В настройках терминала можно ввести этот ИНН.
Но если в настройках терминала указана ККТ где будут печататься слип-чеки то ИНН терминала возьмётся оттуда (если он явно не указан в "InnKkm"


Изменился механизм привязки лицензии:

Теперь при покупке лицензии нужно указать ИНН на который регистрировала ККТ.
Тогда новые версии kkmserver будут автоматически получать такие лицензии без email-а и пароля.
Соответственно если лицензия на ИНН - то с ней могут работать не ограниченное количество kkmserver привязанными в них ККТ с этой ИНН.
И если к одному kkmserver-у настроено несколько ККТ с одним ИНН - то все они будут работать по одной лицензии.
А вот ККТ с разными ИНН-ми будут требовать соответствующего количества лицензий по ИНН.

При установке новой версии вместо старой, на которой была получена лицензия по email-у и пароля - произойдет привязка таких лицензий к ИНН и далее лицензия будет получатся автоматом даже после переустановки kkmsrver.

Для клиентов у которых сублицензирование:
Вы с лицензиями продолжаете работать через email.
Но клиентские ПК будут привязываться не через серийник а через ИНН ККТ.

Все это сделано для того чтобы уйти вообще от получения лицензии в kkmserver.

Для Эвоторов лицензия вообще не нужна будет.


2.1.40.10 от 12.09.2020 новое в версии: Работа ККТ по СОМ-портам

Изменено работа с COM портами для ККТ

Наконец-то попал мне в руки ПК - на котором ККТ работающая по COM-порту глючила.
То есть связь, то ошибка передачи пакета...
Попытка разобраться с причиной ошибки не к чему не привела - проходил отладчиком вплоть до вызова из Net.Framework системного API windows - все правильно, ошибок нет.
Та-же самая ККТ у меня на ПК работает без замечаний.
А на работе та-же ККТ дает сбои в обмене.
Не зависит от версии Windows.
Не зависит от версии и производителя ККТ.
Магия сынок...
И чем дальше тем больше таких клиентов возникает.

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

В новой версии если ККТ работает по СОМ-порту то он захватывается в kkmserver, и не отпускается до конца работы.

При такой работе нельзя будет работать параллельно из других программ с ККТ.
Если очень нужно - в настройках устройств появился крыжик "Не закрывать COM порт" - вот им можно воспользоваться в таких случаях.

Так-же побочным эффектом такой работы может стать не возможным подключится к ККТ через ДТО.
Для таких случаях добавил в меню kkmserver команды на Отключение/Подключение устройств.
По команде "Устройства: Отключить/Подключить" все устройства буду отключены от kkmserver.
После этого можно будет работать с ДТО.
Далее нужно будет опять вызвать команду "Устройства: Отключить/Подключить" - все устройства подключатся в kkmserver.

Добавлено контекстное меню в иконку kkmserver в трее
Из этого мену можно будет вызвать различные команды (в том числе по подключению и отключению устройств)

Почти такое-же меню будет добавлено в иконку расширения браузера.



2.1.38.10 от 21.07.2020 новое в версии: Net.FrameWork 4.8 и Передача кода маркировки (Честный знак/КИЗ) товаров по ШК

Изменена версия Net.FrameWork
Из за поддержки Windows-7 я долго не переводил kkmserver на свежие версии Net.FrameWork
Но вот сегодня случилось: браузеры обновились и перестали открывать сайты по устаревшим протоколам TLS.
Раньше они требовали один раз указать что сайт нужно открывать по устаревшему протоколу.
Сегодня они требуют такое подтверждение каждый день.
Чтобы kkmserver мог хоть как-то работать на Window-7 перевел его на Net.FrameWork 4.8

На Win-8, Win-10 не скажется вообще ни как (Net.FrameWork 4.8 там уже давно прилетел с обновлениями)

А вот на Win-7 если система не пропатчена всеми обновлениями Net.FrameWork 4.8 нету.
После установки kkmserver ver. 2.1.38.10 он может попросить установить Net.FrameWork 4.8.
И не факт что Net.FrameWork 4.8 установится!
Если не встанет то придется натягивать все обновления на Win-7.
Сори за неудобства но по другому ни как....


Передача кода маркировки (Честный знак/КИЗ) товаров по ШК

Изменился API в части передачи кода маркировки.

Очень сложное законодательство получилось в части маркированного товара.
Разные виды товаров маркируются по разному.
Разные правила генерации ШК кодов маркировки:
Табак, алкоголь, лекарства, шубы, обувь и пр. - и все НЕ СОВМЕСТИМО между собой.
Плюс накладываются еще разные версии маркировки одного и того-же вида товаров.

ШК в формате GS1 довольно трудно распарсирить:
Есть много полей применения фиксированного размера.
И для таких полей нужно знать точно размер каждого, а всего полей за сотню...

Короче клоака полная...

Чтобы хоть как-то облегчить жизнь простого программиста сделано следующее:
Вам не нужно более парсирить ШК различных товаров а просто передавать в команде отсканированный сканером ШК.

Изменения в API расширения для браузеров:
Изменена функция "AddRegisterString"

Код: Выделить всё

    var DataStr = Data.AddRegisterString(
        "Сапоги женские DF-3099-1",  // Наименование Товара(64 символа)
        3,  // Количество (3 знака после запятой)
        100, // Цена Без Скидки (2 знака после запятой)
        0.01,  // Сумма Строки (2 знака после запятой)
        -1, // Ставка НДС(0(НДС 0%), 10(НДС 10%), 20(НДС 20%), -1(НДС не облагается), 120 (НДС 20/120), 110 (НДС 10/110))
        0, // Отдел
         "1254789547853", // Код товара EAN13 - не обязательно
        4,  // Признак способа расчета. тег ОФД 1214. Для ФФД.1.05 и выше обязательное поле
        1,  // Признак предмета расчета. тег ОФД 1212. Для ФФД.1.05 и выше обязательное поле

        // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!	
        //штрих - код маркировки товара со сканера 
        "0104300943734342212413195240818240640291ffd092MDEwNDMwMDk0MzczNDM",
        // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!	

        "пара", // Единица измерения предмета расчета. Можно не указывать
        "156", // Цифровой код страны происхождения товара (CountryOfOrigin) в соответствии с Общероссийским классификатором стран мира 3 симв. Тег 1230
        "54180656/1345865/3435625/23", // Регистрационный номер таможенной декларации (CustomsDeclaration) 32 симв. Тег 1231
        0.01, // Сумма акциза (ExciseAmount) с учетом копеек, включенная в стоимость предмета расчета Тег 1229
        "Тест-доп.реквизит" // Дополнительный реквизит предмета расчета тег 1191, Только для ФФД 1.1 !
    );
Изменения в API расширения http запросов:
В JSON структуре "Register" фискальной строки изменено поле - структура:

Код: Выделить всё

GoodCodeData: {
        // штрих-код маркировки товара со сканера
        BarCode: "0104300943734342212413195240818240640291ffd092MDEwNDMwMDk0MzczNDM",
        // Проверять содержит ли ШК кода маркировки идентификатор экземпляра товара (если вообще не указать - true)
        // Для некоторых товаров нужно передавать ШК EAN-13, тогда это поле устанавливайте в 'false'
        ContainsSerialNumber: true
}
Внимание!
Сканер нужно настроить так чтобы он не съедал управляющие символы.
Разные сканеры по разному их передают в строку ШК:
Кто просто байтом, другие могут экранировать строками: "\x1d", "\u001d", "\x001d", "<FNC1>", "<GS>"

Примеры ШК коды которые поддерживаются:
EAN-8:
  • "46120441"
EAN-13:
  • "2900001462105"
ITF14:
  • "02900001462105"
GS1, в качестве разделителей полей символы '(' и ')'
  • "(01)12345678901231(253)1234567890123(8003)1234567890123456(10)12345678901234567890(21)12345678"
GS1 (обувь), в качестве разделителей полей символ '\x1d' (в виде байта)
  • "0104300943734342212413195240818240640291ffd092MDEwNDMwMDk0MzczNDM"
GS1, в качестве разделителей полей строка "\u001d"
  • "010460043993125621JgXJ5.T\u001d8005112000\u001d930001\u001d923zbrLA ==\u001d24014276281"
GS1, в качестве разделителей полей строка "\\u001d" (с символом экранизации \)
  • "010460043993125621JgXJ5.T\\u001d8005112000\\u001d930001\\u001d923zbrLA ==\\u001d24014276281"
GS1, в качестве разделителей полей строка "\x1d"
  • "010460406000600021N4N57RSCBUZTQ\x1d2403004002910161218\x1d1724010191ffd0\x1d92tIAF/YVoU4roQS3M/m4"
GS1, в качестве разделителей полей строка "\x1d" (с символом экранизации \)
  • "010460406000600021N4N57RSCBUZTQ\\x1d2403004002910161218\\x1d1724010191ffd0\\x1d92tIAF/YVoU4roQS3M/m4"
GS1, в качестве разделителей полей строка "\x001d"
  • "010460406000600021N4N57RSCBUZTQ\x001d2403004002910161218\x001d1724010191ffd0\x001d92tIAF/YVoU4roQS3M/m4"
GS1, в качестве разделителей полей строка "\x001d" (с символом экранизации \)
  • "010460406000600021N4N57RSCBUZTQ\\x001d2403004002910161218\\x001d1724010191ffd0\\x001d92tIAF/YVoU4roQS3M/m4"
GS1 (лекарство), в качестве разделителей полей строка "<FNC1>"
  • "<FNC1>0108691234567890211323424679<FNC1>1707011910AX785910BC"
GS1, в качестве разделителей полей строка "<GS> " (с пробелом!!!!!!!)
  • "0183525492885520210000000859314<GS> 91ee05<GS> 92r7fLjLdSQBRRL8KgReiJ0mgdFWhlR9gsfe1QS3ibhck="
GS, 1 в качестве разделителей полей строка "<GS> "
  • "0183525492885520210000000859314<GS>91ee05<GS>92r7fLjLdSQBRRL8KgReiJ0mgdFWhlR9gsfe1QS3ibhck="
GS1, в качестве разделителей полей символ '\x1d' (поле 21 фиксированной длины (13) - без символа разделителя в конце - есть и такое!!)
  • "010460620309891021MCEb6/r890123800511700093EBBm240FA068592.14"
Шубы (20 знаков)
  • "RU-430301-ABCDEF1234"
Табак (29 знаков)
  • "00000046186195Xp4k=xyAQDPtFEa"
Табак (25 знаков)
  • "00000046186195Xp4k=xyAQDP"
ЕГАИС 2.0 (25 знаков)
  • "22N00002NU5DBKYDOT17ID980726019019608CW1A4XR5EJ7JKFX50FHHGV92ZR2GZRZ"
ЕГАИС 3.0 (25 знаков)
  • "136222000058810918QWERDFEWT5123456YGHFDSWERT56YUIJHGFDSAERTYUIOKJ8HGFVCXZSDLKJHGFDSAOIPLMNBGHJYTRDFGHJKIREWSDFGHJIOIUTDWQASDFRETYUIUYGTREDFGHUYTREWQWE"
Если Вы обнаружите что какой-то ШК Маркировки (Именно маркировки!) в kkmserver не поддерживается:
Выложите в этой теме фотку (именно фотку а не строку со сканера - я сканерам не доверяю :) ) такого ШК.
Я обязательно добавлю поддержку такого ШК маркировки.

Команда Проверки ШК кода маркировки товара
Добавил новую команды к kkmserver для проверки ШК маркировки - чтобы можно было проверить ШК до регистрации чека.
И не получить ошибку во время регистрации чек или чтобы не профукать вывод из оборота маркированного товара
https://kkmserver.ru/KkmServer#PrimerAd ... odCodeData


2.1.36.10 от 28.03.2020 новое в версии:

1. Восстановил режимы TLS по запросу клиента - поддерживаются все версии SSL/TLS.
В FireFox тоже все ок.

2. Добавил корректную работу по IP6.
т.е. kkmserver на 1 порту сразу держит соединения и по IP4 и по IP6.

3. kkmserver теперь открывает сразу три порта - порт который указан в настройках + НомерПорта +1 и НомерПорта +2.

Пример если у Вас в настройках указан 5893 то:
5893 - http или https (в зависимости от настройки сертификата)
5894 - Всегда https (сертификат по умолчанию на 'localhost')
5895 - Всегда http

т.е. если Вы работаете не через расширение (что само по себе не хорошо) то вам нужен https протокол.
Сразу можете коннектится на 5894 - он всегда по https.
C другой стороны если из за прав не открывается https - то вы всегда сможете зайти на http://localhost:5895/Settings/ - для настройки.


2.1.35.10 от 12.03.2020 новое в версии:

Режим TLS 1.2:

Сегодня FireFox подложил небольшую свинью:
В последней версии отключены по умолчанию режим TLS 1.0/1.1.
Их пока еще можно включить в настройках.
Но как написано и это не на долго.

В kkmserver до этого стоял режим автоматического выбора версии SSL.
Но вот выявился баг: FireFox запрашивает версии SSL у kkmserver и почему-то выбирает TLS 1.0 который сам же и не поддерживает.
Баг проявляется на Net.Framework версии ниже чем 4.7.
Т.е. Win7 в пролете.
И это баг внутри фраймворка - до него не дотянутся...

Чтобы оставить совместимость с Win7 и + не требовать переустановки Net.Framework принудительно включил в kkmserver TLS 1.2

Какие могут быть проблемы у клиентов:
- Если клиент ооооччччееень давно не обновлял браузер - придется ему обновить его.
- Если в Вашем приложении при установке соединения с kkmserver Вы принудительно включаете версию не TLS 1.2.

Атол "Платформа-5" - USB порт:

Добавил в протокол Атол "Платформа-5" режим всязи с ККТ по USB.
Причем для USB можно поставить порт - "Автоматически".
Тогда даже если при подключении нового оборудования у ККТ сменится порт - все будет работать.
Но!
Если у Вас к ПК подключено 2 или более ККТ Атол - тогда все рано нужно будет указать порт вручную.

Атол "Платформа-5" - Linux и MacOs:

В связи с постепенным переползанием всех моделей Атолов на новые прошивки "Платформа-5"
Добавил поддержку Атол "Платформа-5" в дистрибутивах kkmserver для Linux и MacOs



2.1.34.10 от 27.02.2020 новое в версии:

Добавлена поддержка ККТ Эвотор

Эвотры довольно сильно отличаются от обычных ККТ.
Это накладывает ограничения на функционал этих ККТ в kkmserver:

1. Команда регистрации чека НЕ выполняется полностью автоматически.
Вам нужно на Эвоторе указать как чек оплачен, и уже после этого чек напечатается.
2. Команды внесения/изъятия денег не регистрирует чек, а открывает окно на дисплее эвотора - уже из которого и можно зарегистрировать эти чеки.
3. Команда Х-Отчета не печатает отчет, а открывает окно на дисплее эвотора - уже из которого и можно распечатать отчет.
4. Команда открытия денежного ящика не поддерживается.
5. Команда регистрации ККТ не поддерживается.
6. Команда получения данных чеков не поддерживается.

Стоимость: Стоимость приложения устанавливаемое в Эвотор минимально-разрешенная компанией для этот типа приложений 800 р/мес.
Ниже не удалось договорится - не хотят ни в какую.
При использовании в kkmserver только ККТ Эвотор - покупать лицензию на kkmserver НЕ НУЖНО, только оплата за приложение на сайте Эвотора.
Приложение в магазине Эвотора: https://market.evotor.ru/store/apps/5ad ... 1fb17eea0f

Для разработчиков:
Т.к. пользователь в эвоторе может изменить тип оплаты чека то разработчикам нужно из ответа о регистрации чека загружать типы произведенных оплат.
В ответе при регистрации чека добавлены поля:

Код: Выделить всё

"Cash": 0, // Оплачено наличными
"ElectronicPayment": 3.02, // Оплачено электронно
"AdvancePayment": 0, // Оплачено предоплатой (зачетом аванса) 
"Credit": 0, // постоплатой(в кредит)
"CashProvision": 0, // встречным предоставлением (сертификаты, др. мат.ценности)
Настройка ККТ Эвотор: https://kkmserver.ru/WiKi/SettingEvotor


Добавлено расширение в магазин Microsoft Edge Addons:
https://microsoftedge.microsoft.com/add ... gbfjclefed



2.1.32.10 от 24.12.2019 новое в версии:

Добавлена возможность настройки печати слип-чеков эквайринговых терминалов
Для тех эквайринговых терминалов у которых нет встроенного принтера добавлена возможность настройки печати слип-чеков на указанную ККТ.
Позволит быстрее провести интеграцию с эквайринговыми терминалами

"IdCommand" команды при ошибке менять не обязательно
Раньше если команда была выполнена с ошибкой нужно было сменить "IdCommand" для повторного выполнения команды.
теперь если команда выполнилась с ошибкой менять "IdCommandу" не нужно.
Т.е. можно один раз присвоить чеку ID и по нему выполнять регистрацию.

Убрал обязательность указания ИНН кассира
Достали!! Убрал.
На ККТ со старыми прошивками возможны ошибки - если ИНН кассира не указан ИНН может подтянутся из внутренних настроек ККТ или просто будет выдана ошибка - будьте внимательны.
И на некоторых моделях ККТ и с новой прошивкой ККТ может не регистрировать чек без ИНН кассира - будет выдавать ошибку.
И все равно юристы говорят что если ККТ не в платежном автомате и не для интернет-расчетов - ИНН кассира обязателен.!



2.1.29.25 от 15.09.2019 новое в версии:

Добавлена поддержка Платформа 5 от атола.
Платформа 5 - это новые прошивки для ККТ.
Пока только АТОЛ-1Ф.
Но постепенно такие прошивки должны появится для всех моделей ККТ.

Особенности: при работе через USB создается только 1 СОМ порт.
Соответственно и EoU запускать и настраивать не нужно.
Но Атол не дает описание низкоуровневого протокола - поэтому работа только через ДТО (драйвер торгового оборудования) Атола.

Для Windows - нужны ДТО Атол x32, Для Linux - нужны ДТО Атол x64


2.1.29.20 от 01.09.2019 новое в версии:

Добавлена поддержка тегов:
1084: Дополнительный реквизит пользователя
1085: Наименование дополнительного реквизита пользователя
1086: Значение дополнительного реквизита пользователя
1192: Дополнительный реквизит чека
1191: Дополнительный реквизит предмета расчета, Только для ФФД 1.1 !

Изменения в API расширения для браузеров:

Код: Выделить всё

В данных чека:
var Data = KkmServer.GetDataCheck(...);
.....
// Дополнительный реквизит пользователя тег ОФД 1084
Data.UserAttribute = {
     // Наименование дополнительного реквизита пользователя тег ОД 1085
     Name: "Поле-тест",
     // Значение дополнительного реквизита пользователя тег ОФД 1086
     Value: "Тестовое значение"
};
// Дополнительный реквизит чека тег 1192
Data.AdditionalAttribute = "Тест";
....

// Добавление печати фискальной строки
 var DataStr = Data.AddRegisterString(
         .....
        // Сумма акциза (ExciseAmount) с учетом копеек, включенная в стоимость предмета расчета Тег 1229
        0.01,
        // Дополнительный реквизит предмета расчета тег 1191, Только для ФФД 1.1 !
        "Тест-доп.реквизит"
);

Изменения в API расширения http запросов:

Код: Выделить всё

В данных чека:
....
// Дополнительный реквизит пользователя тег ОФД 1084
UserAttribute: {
      // Наименование дополнительного реквизита пользователя тег ОД 1085
      Name: "Поле-тест",
      // Значение дополнительного реквизита пользователя тег ОФД 1086
      Value: "Тестовое значение"
},
// Дополнительный реквизит чека тег 1192
AdditionalAttribute: "Тест",
....

В данных фискальной строки (Register):
.....
// Дополнительный реквизит предмета расчета тег 1191, Только для ФФД 1.1 !
 AdditionalAttribute: "Тест-доп.реквизит",
.....
Поддержка тегов по ККТ:
1192:
-Поддерживают: АТОЛ, ШТРИХ-М, СтарРус, RR-Electro, Micro-Pay (microteh), КИТ (Терминал-ФА), Dreamkas (Viki Print), Crystals (Pirit)
-Не поддерживают: -
1191:
-Поддерживают: АТОЛ, ШТРИХ-М, СтарРус, RR-Electro, КИТ (Терминал-ФА), Dreamkas (Viki Print), Crystals (Pirit)
-Не поддерживают: Micro-Pay (microteh)
1084 (1085, 1086):
-Поддерживают: АТОЛ, ШТРИХ-М, СтарРус, RR-Electro, Dreamkas (Viki Print), Crystals (Pirit)
-Не поддерживают: Micro-Pay (microteh), КИТ (Терминал-ФА)


2.1.29.12 от 01.08.2019 новое в версии:

Добавлена поддержка тега 1057 и данных агента и поставщика на весь чек

Изменения в API расширения для браузеров:

Код: Выделить всё

var Data = KkmServer.GetDataCheck(....)
...
// Добавление признаков агента и поставщика 
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"
);
Изменения в API расширения http запросов:

Код: Выделить всё

var Data = {
        // Команда серверу
        Command: "RegisterCheck",
        ....
        // Признак агента. Тег ОФД 1057. Поле не обязательное. Можно вообще не указывать.
        // 0: "Банковский платежный агент:" Оказание услуг пользователем, являющимся банковским платежным агентом
        // 1: "Банковский платежный субагент:" Оказание услуг пользователем, являющимся банковским платежным субагентом
        // 2: "Платежный агент:" Оказание услуг пользователем, являющимся платежным агентом
        // 3: "Платежный субагент:" Оказание услуг пользователем, являющимся платежным субагентом
        // 4: "Поверенный:" Оказание услуг пользователем, являющимся поверенным
        // 5: "Комиссионер:" Оказание услуг пользователем, являющимся комиссионером
        // 6: "Агент:" Оказание услуг пользователем, являющимся агентом и не являющимся банковским платежным агентом (субагентом), платежным агентом (субагентом), поверенным, комиссионером
        AgentSign: 2,
        // Данные агента. тег ОД 1223.
        // Поле не обязательное. Обязательно если установлено поле "AgentSign"
        // Можно вообще не указывать.
        AgentData: {
            // Операция платежного агента тег ОФД 1044
            PayingAgentOperation: "95315",
            // Телефон платежного агента тег ОФД 1073
            PayingAgentPhone: "+79995554422",
            // Телефон оператора по приему платежей  тег ОФД 1074
            ReceivePaymentsOperatorPhone: "", //"+72223334455",
            // Телефон оператора перевода тег ОФД 1075
            MoneyTransferOperatorPhone: "+74447776655",
            // Наименование оператора перевода тег ОФД 1026
            MoneyTransferOperatorName: "ООО Тестовая организация",
            // Адрес оператора перевода тег ОФД 1005
            MoneyTransferOperatorAddress: "Москва, зубовский бульвар 44",
            // ИНН оператора перевода тег ОФД 1016
            MoneyTransferOperatorVATIN: "430601071197"
        },
        // Данные поставщика платежного агента.
        // Поле не обязательное. 
        PurveyorData: {
            // Телефон поставщика тег ОД 1171
            PurveyorPhone: "+76662229955"
        },
        .....
}

2.1.29.10 от 23.07.2019 новое в версии:

Сервера и дистрибутивы подписаны валидным сертификатом.


2.1.28.18 от 07.07.2019 новое в версии:

Тарминал FA - на прошивке 1.0.30 поддерживает новые теги:
ClientInfo, ClientINN, GoodCodeData, CountryOfOrigin, CustomsDeclaration, ExciseAmount

В эмулятор эквайринга добавил:
Ширина строк 32 символа
Настройку имитации задержки (типа пока клиент вставит карту, наберет ПИН....) при выполнении команд оплаты


2.1.28.10 от 30.05.2019 новое в версии:

Добавил эмулятор эквайрингового терминала.

Добавлена поддержка новых тегов по 54-ФЗ:
Тег 1227: Наименование организации или фамилия, имя, отчество (при наличии), серия и номер паспорта покупателя(клиента)
Тег 1228: ИНН Организации или покупателя(клиента).

Изменения в API расширения для браузеров:
После вызова: var Data = KkmServer.GetDataCheck(...... можно добавить поля:

Код: Выделить всё

// Тег 1227: Покупатель (клиент) - наименование организации или фамилия, имя, отчество (при наличии), серия и номер паспорта.
// Только с использованием наличных / электронных денежных средств 
// и при выплате выигрыша, получении страховой премии или при страховой выплате.
Data.ClientInfo = "Везучий В.В. РЕ-125486";
// Тег 1228: ИНН Организации или покупателя(клиента). Тег 1228
// Только с использованием наличных / электронных денежных средств 
// и при выплате выигрыша, получении страховой премии или при страховой выплате.
Data.ClientINN = "502906602876"; 
Изменения в API расширения http запросов:
В JSON структуре чека можно добавить поля:

Код: Выделить всё

// Тег 1227: Покупатель (клиент) - наименование организации или фамилия, имя, отчество (при наличии), серия и номер паспорта.
// Только с использованием наличных / электронных денежных средств 
// и при выплате выигрыша, получении страховой премии или при страховой выплате.
ClientInfo: "Везучий В.В. РЕ-125486",
// Тег 1228: ИНН Организации или покупателя(клиента). Тег 1228
// Только с использованием наличных / электронных денежных средств 
// и при выплате выигрыша, получении страховой премии или при страховой выплате.
ClientINN: "502906602876", 
Поддерживаемые протоколы ККТ:
  • Atol: ККТ с передачей данных в ОФД (54-ФЗ)
    Штрих-М: ККТ с передачей данных в ОФД (54-ФЗ)
    Micro-Pay (microteh.ru): ККТ с передачей данных в ОФД (54-ФЗ)
Остальные не поддерживаются из за того что у них ПОКА нет в прошивке возможности передать эти теги.

Так-же добавлена поддержка новых тегов в фискальных строках:
Тег 1230: Цифровой код страны происхождения товара в соответствии с Общероссийским классификатором стран мира 3 симв.
Тег 1231: Регистрационный номер таможенной декларации 32 симв.
Тег 1229: Сумма акциза с учетом копеек, включенная в стоимость предмета расчета.

Изменения в API расширения для браузеров:
В функции "AddRegisterString()" добавлены 3 новых НЕОБЯЗАТЕЛЬНЫХ параметра:

Код: Выделить всё

AddRegisterString(
   Name, Quantity, Price, Amount, Department, Tax, EAN13, EGAIS, SignMethodCalculation, SignCalculationObject, MeasurementUnit,
   GoodCodeData, AgentSign, AgentData, PurveyorData,
   // Тег 1230: Цифровой код страны происхождения товара в соответствии с Общероссийским классификатором стран мира 3 симв. 
   CountryOfOrigin,                        
   // Тег 1231: Регистрационный номер таможенной декларации 32 симв. 
   CustomsDeclaration,                 
   // Тег 1229: Сумма акциза с учетом копеек, включенная в стоимость предмета расчета.
   ExciseAmount                         
);
Изменения в API расширения http запросов:
В JSON структуре "Register" фискальной строки можно добавить поля:

Код: Выделить всё

// Тег 1230: Цифровой код страны происхождения товара в соответствии с Общероссийским классификатором стран мира 3 симв. 
CountryOfOrigin: "156",                       
// Тег 1231: Регистрационный номер таможенной декларации 32 симв. 
CustomsDeclaration: "54180656/1345865/3435625/23",                  
// Тег 1229: Сумма акциза с учетом копеек, включенная в стоимость предмета расчета.
ExciseAmount: 0.01,                        
Поддерживаемые протоколы ККТ:
  • Atol: ККТ с передачей данных в ОФД (54-ФЗ)
    Micro-Pay (microteh.ru): ККТ с передачей данных в ОФД (54-ФЗ)
Остальные не поддерживаются из за того что у них ПОКА нет в прошивке возможности передать эти теги.

В JSON результата добавлено поле: "Warning"
В этом поле будут выдаваться различные предупреждения.
Например если в команде были указаны некоторые поля а ККТ не поддерживает то в этом поле будет возвращен текст:
"Warning": "Не поддерживается передача поля CountryOfOrigin"


2.1.27.10 от 11.04.2019 новое в версии: Маркировка товаров (Честный знак / КИЗ)

Добавлена поддержка передачи "Кода маркировки товара" (он-же КИЗ "контрольный идентификационный знак", он же "Честный знак")
При передаче фискальной строки можно так-же указать этот КИЗ.
ККТ передаст эту информацию в ОФД как тег 1162.
И по нему ОФД передаст информацию в систему ИСМП https://ismp.crpt.ru,
а та уже дальше по различным системам учета маркированного товара.
Это нужно для автоматического вывода маркированного товара из оборота.

Сейчас поддерживаются следующие товары:
  • Изделия из меха
    Лекарственные препараты
    Табачная продукция
    Обувные товары.
Поддерживаемые протоколы ККТ:
  • Atol: ККТ с передачей данных в ОФД (54-ФЗ)
    Штрих-М: ККТ с передачей данных в ОФД (54-ФЗ)
    RR-Electro: ККТ с передачей данных в ОФД (54-ФЗ)
    Paykiosk.ru: ККТ с передачей данных в ОФД (54-ФЗ)
    СтарРус: ККТ с передачей данных в ОФД (54-ФЗ)
    Micro-Pay (microteh.ru): ККТ с передачей данных в ОФД (54-ФЗ)
    Dreamkas (Viki Print): ККТ с передачей данных в ОФД (54-ФЗ)
    Crystals (Pirit): ККТ с передачей данных в ОФД (54-ФЗ)
    Эмулятор: ККТ с передачей данных в ОФД (54-ФЗ)
НЕ поддерживаемые протоколы ККТ:
  • КИТ (КАСБИ): ККТ с передачей данных в ОФД (54-ФЗ)
    Искра (Прим): ККТ с передачей данных в ОФД (54-ФЗ)
Не поддерживаются из за того что у них ПОКА нет в прошивке возможности передать тег 1162

Изменения в API расширения для браузеров:
После регистрации фискальной строки функцией "AddRegisterString"
нужно вызвать функцию:

Код: Выделить всё

Data.AddGoodCodeData(
  // Тип товара. Список значений: "02" – изделия из меха, "03 - Лекарственные препараты", "05" - табачная продукция, "1520" - обувные товары
  "05",
  // Глобальный идентификатор торговой единицы (GTIN) - поле 01 в GS1
  "98765432101234",
  // Серийный номер КИЗ - поле 21 в GS1
  "ABC1234"
);
Изменения в API расширения http запросов:
В JSON структуре "Register" фискальной строки нужно добавить поле - структуру:

Код: Выделить всё

GoodCodeData: {
  // Тип товара. Список значений: "02" – изделия из меха, "03 - Лекарственные препараты", "05" - табачная продукция, "1520" - обувные товары
  StampType: "02",
  // Глобальный идентификатор торговой единицы (GTIN) - поле 01 в GS1
  GTIN: "04630037591316",
  // Серийный номер КИЗ - поле 21 в GS1
  SerialNumber: "sgEdK2y5"
}
Для понимания того что нас ждет в будущем:
https://xn--80ajghhoc2aj1c8b.xn--p1ai/business/


2.1.26.18 от 24.03.2019 новое в версии:

1. Добавлен протокл эквайринговых терминалов ARCUS-2 (Beta), пока только под Windows.
Если кто-нибудь даст дистрибутив Arcus-а под Linux - сделаю и на нем.

2. Добавил в настройки ККТ крыжик "Установка даты и времени ККТ":
Если он установлен то при закрытии смены дата и время будут установлены в ККТ по времени ПК.
Если на ККТ используется время другой временной зоны - выключите эту функцию.
Почему - "При закрытии смены" а не "при открытии смены"?
Потому что на некоторых ККТ (например Атол) смена открывается автоматом и мне не перехватить это событие.
А вот "закрытие смены" есть везде.


2.1.26.10 от 11.03.2019 новое в версии:

1. Для Принтеров чеков сделана эмуляция регистрации чека.
Есть возможность настроить шаблон чека.
Т.е. на принтер чеков теперь можно подавать точно такие-же команды регистрации чеков как и на ККТ.
Сама по себе эта возможность будет не очень полезна и даже после июля незаконна, но см. п.2.

2. Маршрутизация команд ККТ на другой kkmserver (допустим в облаке)
Т.е. можно на локальном kkmserver для определенного устройства (Принтера чеков или ККТ допустим без ФН) настроить вот так:
- команды поданные на это устройство будут смаршрутизированны на другой kkmserver.
- удаленный kkmserver выполнит регистрацию чека на своем ККТ и вернет фискальные данные чека
- на локальном kkmserver сэмулируется текст чека со всеми фискальными полями и будет напечатан.

Это даст возможность держать в "облаке" один ККТ а бумажные чеки печатать локально на принтерах чеков или на не нужных ККТ без ФН.
При этом такие чеки будут абсолютно законны, т.к. в них содержатся все необходимые фискальные поля. (Закон такое разрешает)

Таким-же образом сработают и остальные команды ККТ: Закрытие/Открытие смены, Внесение/Изъятие ДС, Чеки коррекции.

Для включения маршрутизации сначала включите режим эмуляции чеков.


2.1.25.29 от 06.03.2019 новое в версии:

В команде регистрации чека добавлено поле "PlaceMarket" - место расчетов (тег 1187)
Поле не обязательное, можно не указывать.
Если не указано - то место расчетов берется из данных регистрации ККТ.
Поле применяется например:
- для указания сайта ИМ если ККТ обслуживает сразу несколько ИМ.
- При разъездной торговле

Внимание! Реализовано пока только для ККТ "Атолов" и "MicroPay"
Когда другие производители добавят эту возможность у себя - реализую и у них.


2.1.25.25 от 07.02.2019 новое в версии:

1. В настройки ККТ добавил настройку номера устройства эквайринга (когда эквайринг работает из команды на регистрацию чека)
2. В команду на регистрацию чека добавлено не обязательное поле "NumDeviceByProcessing" через которое можно указать номер устройства для эквайринга.
Null - из настроек на сервере, 0 - любое устройство, число - номер конкретного устройства

2.1.22.19 от 21.09.2018 новое в версии:

1. Добавлен протокол эквайринговых терминалов INPAS (Бета)


2.1.22.17 от 12.09.2018 новое в версии:

1. В обратный вызов по HTTP протоколу добавил заголовки User_Agent, Referer
2. Исправлена ошибка для старых Атолов
3. Исправлена ошибка с полем "UnitName" при получении списка устройств.


2.1.22.14 от 22.08.2018 новое в версии:

В новой версии:

Наконец-то знающие люди подсказали как совместить в одном exe файле терминальное и windows приложение.
Оказалось что это довольно непростая задача.
Именно из за этого мне в свое время пришлось разделить kkmserver на два отдельных продукта: Собственно kkmserver и компонента для расширения.
При этом было очень много ошибок при настройке ПО - когда были запущены сразу и KkmServer и компонента расширения - при этом все конфликтовало между собой.

Теперь я смог в одном приложении совместить сам KKT сервер (работающий по протоколу HTTP/HTTPS) и работу как нативной компоненты для браузеров (работающий по протоколу connectNative).

Соответственно Компонента расширения (но не само расширение - не путать) уходит в небытие.
Ее место занимает KkmServer.

При установке новой версии KkmServer-а он (KkmServer) зарегистрирует на себя вызовы из расширения для браузеров.
Так-же при установке KkmServer скопирует настройки из старой компоненты расширения в следующих случаях:
- если KkmServer до этого не был установлен
- если в настройках KkmServer не настроено ни одного устройства.
В этих случаях настройки копируются из ранее установленной компоненты расширения.

В других случаях может потребоваться (если стояли сразу и Kkmserver и компонента расширения но нужны настройки именно из компоненты) в ручную скопировать файл настройки:
C:\Program Files (x86)\KkmServer.ru\AddIn\Settings\SettingsServ.ini
в KkmServer:
C:\Program Files (x86)\KkmServer.ru\KkmServer\Settings

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

Так-же реализована крос-KkmServer-ая работа :)
Подробнее тут: https://kkmserver.ru/WiKi/StartServer


2.1.21.10 от 31.07.2018 новое в версии:

В новой версии:

1. Добавлена возможность печати не-фискальных чеков на ККТ.
В настройках ККТ появилось два поля:
-"Фискальный/Не-фискальный чек" - собственно выбор какой чек печатать - фискальный или нет.
-"Шаблон не фискального чека" - текстовое поле в котом находится описание шаблона чека.

2. Добавлена поддержка ККТ "Искра"
Поддерживаемые модели: ПРИМ 06-Ф, ПРИМ 08-Ф, ПРИМ 88-Ф, ПРИМ 07-Ф - Бета версия!


2.1.20.16 от 16.07.2018 новое в версии:

1. kkmserver теперь не будет "забывать" ИНН, заводской номер и СНО у ККТ даже если она временно не доступна и не прошла инициализацию при старте.
При подаче на нее команды по этим полям она будет найдена и сервер попытается проинициализировать такую ККТ.
Должно помочь тем кто выключает ККТ и забывает включить.

2. Выложен новый драйвер для 1с: драйвер поддерживает ревизию API 2002.
Этот API 1с не опубликовала, но он уже во всю используется в ее конфигурациях.
Позволяет работать с ККТ по ФФД 1.05/1.1
Если конфигурация относительно старая - то я оставил ссылку на предыдущий драйвер. Но он работает с ККТ только по ФФД 1.0
Так-же в драйвер добавлена поддержка 64-битного тонкого клиента.

2.1.15.10 (11.01.2017) Новое в версии

1. В продукты kkmserver/расширение добавлена возможность работы с эквайринговыми терминалами:

Пока только терминалы сбербанка РФ.
Внутренний драйвер свой собственный - встроенный.
Работает через Pilot_nt.dll, который входит в поставку ПО сбера для терминала.
И эта DLL НЕ COM.Object (как SBRFCOM.dll или sbrf.dll) а нативная windows.
Соответственно она не требует регистрации и ее намного проще настроить.

API работы с эквайриногом в kkmserver точно-такой-же как и в unitserver.
В "Расширении" API расширен - в инжектируемый скрипт добавлены функции работы с эквайрингом.


2: Во всех продуктах добавлена возможность автоматического проведения транзакции по платежной карте через эквайринг при регистрации чека:

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

Алгоритм работы такой:
1. Если регистрируемый чек фискальный, в нем есть оплата "ElectronicPayment" и взведен флаг "PayByProcessing" то:
2. Создается и выполняется команда на проведение оплаты через эквайринг. Сумма оплаты = "ElectronicPayment".
2.1 Если транзакция не прошла возвращается ошибка
3. Если транзакция прошла то в данные чека внедряется текст слип-чека (он будет напечатан сразу после шапки чека)
4. Производится регистрация чека.
5. Если регистрация чека успешна то:
5.1 Если нужно печатается дополнительный Слип-чек для кассира (если указан флаг "PrintSlipForCashier")
5.2 В результат выполнения команды регистрации чека дополнительно вставляется структура "RezultProcessing" с данными по проведению транзакции оплаты
6 Если чек не удалось зарегистрировать то:
6.1 Создается команда на аварийную отмену транзакции (Для этого на некоторых терминалах потребуется повторная авторизация платежной карты, на некоторых не потребуется)
6.2 Система возвращает результат транзакции


2.1.18.30 от 28.05.2018 новое в версии:

Только-что выложил версию 2.1.18.30 от 28.05.2018

В этой версии я откатился у VikiPrint к прошивке 660-664 т.к. 670 прошивку отозвали.
Если будите ставить эту версию - откатите у себя до 664.
По ощущениям 664 работает стабильнее чем 670.


2.1.15.10 (11.01.2017) Новое в версии


1. В продукты kkmserver/расширение добавлена возможность работы с эквайринговыми терминалами:

Пока только терминалы сбербанка РФ.
Внутренний драйвер свой собственный - встроенный.
Работает через Pilot_nt.dll, который входит в поставку ПО сбера для терминала.
И эта DLL НЕ COM.Object (как SBRFCOM.dll или sbrf.dll) а нативная windows.
Соответственно она не требует регистрации и ее намного проще настроить.

API работы с эквайриногом в kkmserver точно-такой-же как и в unitserver.
В "Расширении" API расширен - в инжектируемый скрипт добавлены функции работы с эквайрингом.


2: Во всех продуктах добавлена возможность автоматического проведения транзакции по платежной карте через эквайринг при регистрации чека:

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

Алгоритм работы такой:
1. Если регистрируемый чек фискальный, в нем есть оплата "ElectronicPayment" и взведен флаг "PayByProcessing" то:
2. Создается и выполняется команда на проведение оплаты через эквайринг. Сумма оплаты = "ElectronicPayment".
2.1 Если транзакция не прошла возвращается ошибка
3. Если транзакция прошла то в данные чека внедряется текст слип-чека (он будет напечатан сразу после шапки чека)
4. Производится регистрация чека.
5. Если регистрация чека успешна то:
5.1 Если нужно печатается дополнительный Слип-чек для кассира (если указан флаг "PrintSlipForCashier")
5.2 В результат выполнения команды регистрации чека дополнительно вставляется структура "RezultProcessing" с данными по проведению транзакции оплаты
6 Если чек не удалось зарегистрировать то:
6.1 Создается команда на аварийную отмену транзакции (Для этого на некоторых терминалах потребуется повторная авторизация платежной карты, на некоторых не потребуется)
6.2 Система возвращает результат транзакции