Работа с драйвером ФР "Штрих-М" на уровне протокола

23.05.16

Интеграция - ККМ

Для работы со своими фискальными регистраторами компания «Штрих-М» написала свой драйвер «Штрих-М: Драйвер ФР».
А для интеграции с программами семейства 1С компании «Штрих-М» пришлось подготовить дополнительный драйвер, который довольно сложно называется: «ПО «ШТРИХ-М: Драйвер ФР» в соответствии с «требованиями к разработке драйверов для фискальных регистраторов» компании 1С».
Это предыстория. А история в том, что, используя драйвер 1С, невозможно выполнить некоторые команды, которые имеет стандартный драйвер «Штрих-М». Например, вывести штрих код.

Скачать файлы

Наименование Файл Версия Размер
Примеры работы с DeviceControlHEX
.epf 7,24Kb
44
.epf 7,24Kb 44 Скачать
Проверка наличности в кассе
.epf 5,60Kb
13
.epf 5,60Kb 13 Скачать

 Для решения таких ситуаций, когда возможностей драйвера 1С не хватает, есть несколько решений:

  1. Отказаться от драйвера 1С и полностью перейти на драйвер «Штрих-М»
  2. В нужные моменты отключать драйвер 1С, подключать драйвер «Штрих-М», выполнять нужные команды, отключать драйвер «Штрих-М», подключать драйвер 1С.
  3. Использовать низкоуровневые команды с помощью метода DeviceControlHEX.

Пункты 1 и  2 мне показались достаточно неудобными, поэтому переходим к пункту 3.

Сначала описание метода, которое дает 1С:

DeviceControlHEX (DeviceID, TxData, RxData): WordBool УправлениеУстройствомХекс (ИДУстройства, ВхДанные, ВыхДанные)

Команда аналогична команде DeviceControl. Передает низкоуровневую команду устройству. Отличие заключается в том, что входные и выходные данные передаются в виде HEX-строки.

Параметры:

DeviceID: WideString [IN]

 ИДУстройства [ВХ]

Идентификатор устройства

TxData:

WideString [IN]

ВхДанные [ВХ]

Последовательность байт команды, передаваемой в ФР. (см. описание протокола). Например, для команды «гудок» последовательность будет такая (в шестнадцатеричном виде): «13 1E 00 00 00». То есть, последовательность начинается с кода команды (в данном случае «13»), за ним следуют параметры команды (в данном случае – пароль оператора: «1E 00 00 00»). Последовательность задается в виде строки в HEX-формате (разделенные пробелами двузначные шестнадцатеричные числа). RxData: Integer [OUT] ВыхДанные [ВЫХ] Строка с последовательностью байт ответа ФР. Также возвращается в HEX-формате. Возвращаемое значение: Метод возвращает True в случае успешного выполнения операции, в случае ошибки – False

Теперь можно потренироваться в употреблении этого метода.

Приведу пример печати штрих-кода EAN13 с помощью данного метода.

Для этого заглянем в мануал под названием «Протокол работы ФР». Там написано:

Печать штрих-кода

Команда: C2H. Длина сообщения: 10 байт.

Пароль оператора (4 байта)

Штрих-код (5 байт) 000000000000…999999999999

Ответ: С2H. Длина сообщения: 3 байта.

Код ошибки (1 байт)

Порядковый номер оператора (1 байт) 1…30

Получаем такую функцию, для печать штрих-кода:

Функция DeviceControlHEX_ПечатьШтрихкода(Объект, РезультатКоманды, Штрихкод)Экспорт
	//Исходный штрих-код: 
	//2000988614846 
	//Отсекаем контрольный символ: 
	//200098861484 
	//Переводим в шестнадцатеричное 
	//2E96D251AC 
	//Меняем порядок: 
	//AC 51 D2 96 2E 
	
	ШтрихкодФР = Лев(Штрихкод, СтрДлина(Штрихкод) - 1);
	ШтрихкодФР = ЧислоВФорматеФР(ШтрихкодФР);
	
	
	КомандаКВыполнению = 	"C2" +
				" 1E 00 00 00" +
				ШтрихкодФР;
							
	КомандаВыполнена = Объект.Драйвер.DeviceControlHEX(Объект.ИДУстройства, КомандаКВыполнению, РезультатКоманды);
	
КонецФункции
Вспомогательные функции:   
Функция ЧислоВФорматеФР(_Число)
	
	Если _Число = 0 Тогда
		Возврат " 00";
	КонецЕсли;
	
	// десятичное число в шестнадцатеричное
	Шестнадцатеричное = Строка(DecToHex(_Число));
	
	// Если один символ, добавим 0
	Если СтрДлина(Шестнадцатеричное) = 1 Тогда
		Шестнадцатеричное = "0" + Шестнадцатеричное;
	КонецЕсли;
	
	// Если длина не четная добавить ноль
	Если СтрДлина(Шестнадцатеричное) % 2 <> 0 Тогда
		Шестнадцатеричное = Шестнадцатеричное + "0";
	КонецЕсли;
	
	ЧислоФР = "";
	Пока СтрДлина(Шестнадцатеричное) > 0 Цикл
		
		ЧислоФР = ЧислоФР + " " + Прав(Шестнадцатеричное, 2);
		Шестнадцатеричное = Лев(Шестнадцатеричное, СтрДлина(Шестнадцатеричное) - 2);
		
	КонецЦикла;
	
	Возврат ЧислоФР;
	
КонецФункции
Функция DecToHex(Знач _Число)

	База = 16;
	Результат = "";
	Пока _Число <> 0 Цикл
		Поз =_Число % База;
		Результат = Сред("0123456789ABCDEF", Поз + 1, 1) + Результат;
		_Число = Цел(_Число / База);
	КонецЦикла;

	Возврат Результат;

КонецФункции // DecToHex()
 
 
Пример еще одной функции, печатающей произвольный текст нужным шрифтом:
Функция DeviceControlHEX_СтрокиДаннымШрифтом(Объект, РезультатКоманды, Стр, НомерШрифта)Экспорт
	// Номер штрифта от 1 до 7
	
	//Печать строки данным шрифтом
	//Команда: 2FH. Длина сообщения: 47 байт. 
	//Пароль оператора(4 байта) 
	//Флаги(1 байт) Бит0 – контрольная лента, Бит1
	//Номер шрифта(1 байт) 0…255 
	//Печатаемые символы(40 байт) 
	//Ответ: 2FH. Длина сообщения: 3 байта. 
	//Код ошибки(1 байт) 
	//Порядковый номер оператора(1 байт) 1…30 
	
	СтрФР = СтрокаВФорматеФР(Стр);
	
	КомандаКВыполнению = 	"2F" +
				" 1E 00 00 00" + 
				" 01" +
				" 0" + НомерШрифта +
				СтрФР;
	КомандаВыполнена = Объект.Драйвер.DeviceControlHEX(Объект.ИДУстройства, КомандаКВыполнению, РезультатКоманды);
	
	Возврат КомандаВыполнена;	
	
КонецФункции
 
 
Получается, что если немного напрячься, можно выполнить любою команду, заложенную в "Протоколе работы ФР".
Замечание: насколько я знаю, метод появился с версии драйвера 4.10
Изменения: Добавлена обработка с реальными примерами работы с методом DeviceControlHEX.
Обновление 23.05.2016 
Добавлен пример проверки наличности в кассе перед записью чека возврата.
Т.к. время от времени бывали ситуации когда документ "ЧекККМ в информационной базе провелся, а чек на ФР не пробился.

DeviceControlHEX

См. также

54-ФЗ. Очередь печати для ККМ. Обработки для подключения онлайн-касс к 1С 8 (поддержка Маркировки) + Эмулятор + ФФД 1.2

ККМ Кассовые операции Розничная торговля Платформа 1С v8.3 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 или интернет. Поддержка маркировки.

5400 руб.

25.05.2015    307953    1785    2979    

979

Печать кассовых чеков на одну ККМ с нескольких рабочих мест для 1С:УТ11.х, КА2.х, Розница 2.х, УНФ, ERP 2.х, БП 3, БГУ2

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

Расширение конфигурации для УТ 11.4, 11.5, КА 2.4, 2.5, Розница 3.0, 2.3 и 2.2, УНФ 1.6, УНФ 3x, ERP 2.4, 2.5, БП 3, БГУ2 (Управляемые формы) позволяет выполнять печать кассовых чеков на одну ККМ 54-ФЗ с нескольких рабочих мест. НИКАКИХ НАСТРОЕК В РАЗРАБОТКЕ - ПОДКЛЮЧИЛ И ПЕЧАТАЙ. Если у вас несколько отделов и одна ККМ - печатайте на одной ККМ! Если у вас две ККМ и одна поломалась - печатайте на одной ККМ, пока ремонтируете другую!

3500 руб.

27.08.2018    112401    937    559    

804

Обработка 1С для печати чеков на кассе ККТ АТОЛ.ОНЛАЙН

ККМ Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Печать чеков по документам 1С РеализацияТоваровУслуг (РасходнаяНакладная) и КорректировкаРеализации. Соответствует требованиям 54-ФЗ. Одна облачная касса может использоваться всеми подразделениями организации, без привязки к рабочим местам. Электронные чеки отправляются на email клиента и всегда доступны в 1С, по требованию можно распечатать. Легкая настройка: после регистрации кассы на сайте АТОЛ.ОНЛАЙН, в обработке необходимо указать логин, пароль и идентификатор группы ККТ (берутся в личном кабинете АТОЛ.ОНЛАЙН). Одну кассу можно использовать с 1С при расчетах с физ. и юр. лицами и для интернет-магазина. HTTPS протокол интеграции API v4 / ФФД 1.05 или API v5 / ФФД 1.2.

14400 руб.

23.08.2022    9463    20    3    

15

SALE! 50%

Обмен между 1С:Розница и Frontol 6 по организациям (Розница - Фронтол)

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

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

1500 750 руб.

22.03.2019    74765    352    467    

147

UTM Proxy для УТМ ЕГАИС (или как не пропустить дубль алкогольной марки и недостачу на кассе + Контроль МРЦ)

Розничная торговля ККМ Обмен с ГосИС Розничная и сетевая торговля (FMCG) Россия Акцизы Платные (руб)

Что такое УТМ прокси? УТМ прокси - это универсальное программное обеспечение для борьбы с дублями марок алкогольной продукции при розничной продажи. Данное программное обеспечение - это своего рода "прокладка" между кассовым ПО и УТМ ЕГАИС. UTM Proxy работает с любыми кассами, вот некоторые из них: miniPOS, рабочие места кассиров в конфигурациях 1С (в том числе и базовые версии), Фронтол и другие...

2400 руб.

16.11.2016    48746    468    60    

23

Сервер ККМ (54-ФЗ, быстрая печать чеков из терминального сеанса, печать с нескольких ПК)

ККМ Кассовые операции Розничная торговля Платформа 1С v8.3 Конфигурации 1cv8 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Платные (руб)

"Сервер ККМ" позволяет приложениям работать с фискальными регистраторами из терминального сеанса Windows по локальной сети или интернет, организовать печать на одном ККМ с нескольких рабочих мест. Поддержка драйверов Атол, Штрих и VikiPrint. Поддержка 54-ФЗ. Поддержка ФФД 1.2. Подключается к 1С Торговля и склад 7.7, 1С:УТ 10/11, 1С:УНФ, 1С:Розница 1/2, 1С:БП 2/3, 1С КА 1/2., 1С:ERP, УПП

12000 руб.

02.09.2016    130949    281    191    

164

Выгрузка скидок и акций из 1С: Розница 2.3 и УТ 11.4, УТ 11.5, КА2(2.5) в Frontol 6

ККМ Платформа 1С v8.3 1С:Розница 2 1С:Управление торговлей 11 Россия Платные (руб)

При работе в связке Розница или УТ - Frontol многие сталкиваются с проблемой создания скидок и маркетинговых мероприятий в Frontol, типовыми средствами из 1С: Розницы не предусмотрено выгрузки и создания акции. Для создания акции или дисконтных карт во Frontol, требовалось заводить в каждом Frontolе, если у вас несколько рабочих мест, что неудобно. При помощи обработки можно выгружать и создавать акции прямо из 1С: Розницы и УТ на любое рабочее место (оффлайн оборудование), выгружать информацию о картах, клиентах и назначить скидки на виды карт, что значительно упрощает процесс создания акции, и это может делать любой обученный оператор (товаровед) или бухгалтер.

3360 руб.

30.11.2021    18768    60    76    

38

Заполнение авансовых отчетов и поступлений товаров по онлайн-чекам ФНС [Расширение для БП, КА2, ERP, УТ]

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

Позволяет загружать онлайн чеки в формате JSON из официального мобильного приложения "Проверка чеков ФНС" и заполнять документы «Авансовый отчет» и «Приобретение товаров». Помощник заполнения поможет найти /создать номенклатуру и номенклатуру поставщика по указанным настройкам и перенесет данные чеков в документы учетной системы. Данные чеков из мобильного приложения можно выгружать как по каждому чеку в отдельности, так и выпиской за период.

5400 руб.

09.06.2020    30077    110    39    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. bigmal 39 23.03.16 08:18 Сейчас в теме
Мсье знает толк в извращениях! (с) ))

Переход на работу по упомянутому выше пункту №1, на порядок проще, быстрее и правильнее, чем извращаться с HEX-ами. Ну, разве что для овладения использования данного метода от 1С, но не более того :)
2. JohnyDeath 301 23.03.16 08:26 Сейчас в теме
(1) bigmal, конечно проще, но с оговоркой, что нужные методы есть в родном драйвере.
Я также использовал и п.2 и п.3 при разработке печати на подкладных документах.
Подробностей уже и не вспомню, но точно также приходилось играть с HEX-ами. Ес-но, предварительно общался со службой поддержки Штрих-М. Именно они мне сказали, что HEX в некоторых случаях - единственный вариант.
3. dmt 66 23.03.16 12:29 Сейчас в теме
(1) bigmal, возможно и так :-), но я могу привести свои аргументы.

1. Используя решение из пункта 3. можно решить все необходимые вопросы с минимальными изменениями типового кода.
Для меня это было принципиально важно.
2. Переписать все функции на другой драйвер, это не такое и быстрое решение, с учетом возможных последствий...
Надо и писать нормально :-) и тестировать.
3. Ну и как уже упомянул комрад JohnyDeath, работа напрямую с протоколом позволяет все что описано в протоколе.
7. webester 26 27.05.16 13:35 Сейчас в теме
(1)Дописать одну функцию или переписать весь функционал работы с ФР? Хм какой сложный выбор...
4. dmt 66 28.03.16 03:44 Сейчас в теме
Добавил примеры. В том числе как в человекочитабельном виде получать строковые данные от ФР.
5. kostik_love 306 28.03.16 05:17 Сейчас в теме
А почему бы не связаться с ребятами из "Штрих-М" и подать заявку на доработку драйвера «ПО «ШТРИХ-М: Драйвер ФР» в соответствии с «требованиями к разработке драйверов для фискальных регистраторов» компании 1С»- что бы в следующей версии все нужные вам функции были.
а пункты 1, 2, 3 - получается временное решение.
6. dmt 66 28.03.16 05:50 Сейчас в теме
(5) kostik_love, потому что именно на форуме Штриха от сотрудников Штриха я и получил ответ использовать DeviceControlHEX.
8. al2ko 71 22.12.16 23:16 Сейчас в теме
Бодрого времени суток. Пробовал данный метод на версии драйвера 4.13 и получил сообщение:
{ВнешняяОбработка.ШтрихМФискальныеРегистраторы.МодульОбъекта(921)}: Метод объекта не обнаружен (DeviceControlHEX)
КомандаВыполнена = Объект.Драйвер.DeviceControlHEX(Объект.ИДУстройства, КомандаКВыполнению, РезультатКоманды);
У вас на какой версии работает?
9. dmt 66 23.12.16 08:34 Сейчас в теме
Привет!
На кассах стоит 4.10.
Но, насколько я помню работала и на 4.12.

А что за конфигурация? Название обработки намекает, что это УТ 11 или Розница 2.
Насколько я понимаю в этих конфигурациях логика работы торгового оборудования немного изменена.

Отсюда пара вопросов:
1. Объект это действительно объект? :-)
2. Драйвер действительно драйвер Штриха (DrvFR), а не DrvFR1C?
10. al2ko 71 23.12.16 14:29 Сейчас в теме
Бодрого времени суток.
Конфигурация УТ 10.3. Для проверки засунул код в стандартную обработку фискального регистратора ShtrihMFiscalPrinters_v2.
Драйвер наверно используется DrvFR1C из стандартной обработки.
Мне нужно в момент закрытия чека узнать подитог и назначить скидку суммой, а стандартные команды согласно "требований к разработке драйверов для фискальных регистраторов компании 1С" этого не умеют, переписывать конфигурацию не хочу.
Мне показалось что представленный тобой способ подойдет.
11. dmt 66 25.12.16 05:43 Сейчас в теме
(10) Привет!
Затестил 4.13. У меня тоже не взлетело.
Ошибок не выдает. И даже частично печатает. Но частично.
12. pomestnik 50 27.12.16 19:50 Сейчас в теме
А у меня другая печаль).Медленная печать с rdp. Весь штриховский форум кишит сообщениями что надо добавить
BeginDocument и EndDocument для буферизации.
Но в DrvFR1C их нету.. .
И костыль описанный тобой тут не всунуть ибо мне воздействовать на сам драйвер надо... Я правильно понимаю ?

p.s. интересно можно ли декомпильнуть и пересобрать дллку эту =\

13. dmt 66 28.12.16 13:02 Сейчас в теме
(12) По идее, костыль может все что может протокол "Протокол работы ФР".
Описание протокола можно посмотреть тут:
ftp://ftp.shtrih-m.ru/download/FR/Doc/ProtocolFR_1_12.pdf
14. anrahell 8 19.02.17 13:07 Сейчас в теме
// Функция переводит обычную cтроку в шестнадцатеричное представление
// Параметры:
// ТекстСообщения - Строка - Текст сообщения
// ТипКодировки - Число - Тип кодировки (1 - каждый символ представляется 2 байтами, 0 - 1 байтом)
// Возвращаемое значение: Строка - Строка после перекодировки
//
Функция Str2Hex(ТекстСообщения, ТипКодировки)
СтрокаЗнаков = "";
Если ТипКодировки = 1 Тогда
ДлинаКодаСимвола = 4;
Иначе
ДлинаКодаСимвола = 2;
КонецЕсли;
Для К = 1 По СтрДлина(ТекстСообщения) Цикл
СтрокаЗнаков = СтрокаЗнаков + Padl(DecToHex(КодСимвола(Сред(ТекстСообщения, К, 1))), ДлинаКодаСимвола, "0");
КонецЦикла;
Возврат СтрокаЗнаков;
КонецФункции // Str2Hex()

// Функция переводит cтроку из шестнадцатеричного представления в обычную строку
// Параметры:
// СтрокаСимволов - Строка - Текст в шестнадцатеричном виде
// ПризнакКода - Строка - Тип кодировки ("0" - каждый символ представляется 1 байтами, "1" - 2 байтами)
// Возвращаемое значение: Строка - Строка после перекодировки
//
Функция StrHexToStr(СтрокаСимволов, ПризнакКода) Экспорт
Если Число(ПризнакКода) = 0 Тогда
КоличествоСимволов = 2;
Иначе
КоличествоСимволов = 4;
КонецЕсли;
к = 1;
Результат = "";
Пока к < СтрДлина(СтрокаСимволов) Цикл
Строка = Сред(СтрокаСимволов, к, КоличествоСимволов);
Результат = Результат + Символ(HexToDec(Строка));
к = к + КоличествоСимволов;
КонецЦикла;
Возврат Результат;
КонецФункции // StrHexToStr()
15. ardn 587 16.01.18 00:09 Сейчас в теме
Подскажите, можно ли воспользоваться данным методом в текущих конфигурациях, где общение программы с устройством идет через компоненту 1С? Не вижу там команды DeviceControlHEX...
16. bigmal 39 16.01.18 07:44 Сейчас в теме
(15) Юрий, в компоненте а-ля 1С нет практически ничего. Это заусенец на верхушке айсберга в сравнении с возможностями нормального драйвера ))
17. dmt 66 21.01.18 09:39 Сейчас в теме
(15) В компоненте DrvFR1C такой метод есть, в SMDrvFR1C20 для ККТ такого метода нет.
18. Strange Device 307 03.07.18 14:12 Сейчас в теме
А с Атоллами ничего подобного не проделывали? Столкнулся с бедой, что при переходе с 8-ых драйверов Атолла на 9-е перестал работать код печати ШК, который раньше работал, вот ищу пути решения проблемы...
19. man-1982 14.03.19 16:15 Сейчас в теме
Подскажите, а как отлаживать такие обработки для фискальников и для ККМ? На примере ут 10.3
Сейчас делаю так, произвел изменения во внешней обработки и потом загрузил ее в справочники ОбработкиТО. Проверил, если не взлетело то опять подправляю и загружаю.
Может есть какой то метод, чтобы в 10.3 не выгружать и загружать обработки каждый раз, может они могут подхватываться прямо из кода? Из встроенных обработок конфигуратора?
Оставьте свое сообщение