У ФР с ЭКЛЗ система команд расширенная для работы с ЭКЛЗ
Помогите пожалуйста. На фискальном регистраторе ПРИМ-08ТК из новой поставки появилась необъяснимая проблема. При печати ПНД и опросах статуса устройство подвисает. Код ответа библиотеки FC61. В документации прямо не значится. Наиболее похожий F461- таймаут обмена.
F461 таймаут передачи (ERROR_COUNTER_TIMEOUT + 0xF000)
FС61 таймаут приема (ERROR_COUNTER_TIMEOUT + 0xF800)
Опросы статуса при переходе в режим ПНД не работают.
Программа для работы с принтером - довольно-таки большая, использует всякие разные библиотеки (в том числе для работы с btrieve, с фискальным регистратором и пр. ), поэтому пересобирать все под WIN32 видится не целесообразным. Возможно ли пересобрать под WIN32 только одну библиотеку и использовать ее?
Связать DOS и WIN32 невозможно. Или работаем в DOS или WIN32.
Для стабильной работы необходимо:
1. Использовать XP вместо 2000
2. Не использовать BlockWrite, а работать с портами напрямую.
В azimuth.inc нашел, помимо StartReceipt, ItemReceipt и TotalReceipt также StartReceiptPlus, ItemReceiptPlus и TotalReceiptPlus. У них у всех добавлен параметр FreeField, которого вроде бы нет в соответ. командах регистратора. К чему бы это? Можно ли этим пользоваться? Для чего, например?
Команды GetStatus и GetStatusPlus выполняют запросы DLE согласно инстркуции по программированию. Особенность этих команд - возможность узнать, чем занят ФР, когда команда выполняется (когда ответ еще не пришел).
Например, если после передачи команды не пришел ответ в течении таймаута.
Используя GetStatusPlus, можно узнать, что команда распознана и выполняется или не распознана. Те можно еще подождать или не ждать.
Просьба добавить в библиотеку AZIMUTH.DLL функции работы с Произвольным нефискальным документом который печатается на подкладном Листе.
// Select slip
Function SlipSelectFDoc: Integer; export; stdcall; far; external 'azimuth.dll' name 'SlipSelectFDoc';
// Eject slip
Function SlipEjectFDoc: Integer; export;
stdcall; far; external 'azimuth.dll' name 'SlipEjectFDoc';
К сожалению, не могу найти, где задается позиция поля регистрационного номера. Функция AddPosField(.) управляет серийным номером, номером документа, датой, временем, инн, суммой, но не регистрационным номером. Возможно, какая-то еще возможность есть?
Вся необходимая информация приведена в файле dll.inc, примеры вызовов библиотеки в f_test.pas. Для того, чтобы понять, как печатаются документы, необходимо ознакомиться с инструкцией по программированию и описанию библиотеки.
У меня проект не очень корректно открывается, возможно несовместимость версий софта, моя конфигурация WinXP+Delphi7.
Функция OpenFiscalDoc. В ней в качестве 3-его параметра идет "направление печати" - 0 или 1. Однако смена этого байта дает разворот печати на 180 градусов, а не на 90, как хотелось бы. Как все же развернуть печать?
Для работы с ФР Прим-07Ф мы используем вашу библиотеку для MS DOS для Borland Pascal При печати чека процедурой PrintFiscalReceipt иногда возвращается код ошибки 165 ($A5). Однако ФР отрабатывает команду корректно и нормально (безошибочно) закрывает чек и сумма заносится в фискальную память. Чек, закрытый при возникновении 165 ошибки, ничем не отличается от нормально закрытых чеков.
Можно сделать так:
1. Проверить, что команда в ФР завершена
2. Получить ответ на последнею команду
Как это реализовать:
// проверяем, состояние регистратора, TRUE может принять команду, FALSE занят или выключен
function IsCommandReady : Boolean;
var B:Byte;
begin
if GetStatus = 0 then // запрос состояния
begin B:=GetCmdState; // получить байт состояния
if ( B and $04 <> $04 ) then IsCommandReady:=True // команда не посылалась (TRUE)
else IsCommandReady:= ( B and $08 = $08 ); // команда посылалась, проверяем ее состояние(TRUE/FALSE)
end;
else isCommandReady:=False; // регистратор выключен (FALSE)end;
if Res = 165 then
begin
while true do
begin
if IsCommandReady then begin
Res:=GetLastAnswer break; end; end; end;
Каким образом, используя библиотеку azimuth.dll, получить сквозной порядковый номер документа фискального регистратора?
Да, все верно, но если это ПРИМ, то менять не советую, а если ND77, то эти параметры должны соответствовать установкам переключателей на задней панели принтера.
GetLastDllError возвращает код ошибки. Есть ли список этих ошибок?
Да, на самом деле это ошибка 461 (Windows), но библиотека специально добавляет F000, чтобы можно было отличить, в случае приема она добавляет F800, чтобы можно было отличить прием от передачи.
При выполнении каких команд и в каких случаях выдается ошибка 22 (16h)? (Я ее получал при XReport, ToCash, FromCash, ShiftClose, PrintFiscalSlip/Reciept)
Скорее всего это проблема с принтером, отсюда возможно и остальные проблемы с подкладным документом, может не до конца одет разъем на плате контроллера. В нормальных условиях это происходить не должно. Фактически после передачи всей информации Фр передает команду, которая вернет ответ только в том случае, когда буфер будет пуст. Скорее всего вот этот то ответ и не получает контроллер.
GetStatusPlus - выполняется в любой момент, даже когда ФР обрабатывает команду, те послали команду в ФР и можно посылать GetStatusPlus сколько угодно раз. При этом полный ответ на команду можно получить только через GetLastAnswer или GetSerialAnswer, практически нет между ними отличия, только первая еще проверяет ID последней команды.GetStatus - выполняется только если есть ответ от ФР, те когда ФР ожидает команду. Отличия этих двух функция в том, что одна выполниться при любом состоянии линии DSR, другая только при активном. Если в библиотеке нет GetStatusPlus, то значит она всетаки есть, ноназвана GetStatus.
Как мне получить текущий статус регистратора: с помощью GetStatus, GetStatusPlus или GetResources. И какому по счету полю в нужной команде соответствует текущий статус?
Статус возвращается в каждой команде.Используйте функции:
Function GetFldInt(Num:Byte): Integer;stdcall; far; external 'azimuth.dll' name 'GetFldInt';
// Get field as Float for mony functions
Function GetFldFloat(Num:Byte): Extended;stdcall; far; external 'azimuth.dll' name 'GetFldFloat';
// Get field as string for all functions
Function GetFldStr(Num:Byte;Field:PChar):PChar;stdcall; far; external 'azimuth.dll' name 'GetFldStr';
// Get field as Word for all functionsFunction GetFldWord(Num:Byte): Integer;stdcall; far; external 'azimuth.dll' name 'GetFldWord';
// Get field as string for all functions
Function GetFldByte(Num:Byte): Integer;stdcall; far; external 'azimuth.dll' name 'GetFldByte';
Для получения данных из ответа. Для GetResources эти функции тоже подходят.
Функции
GetStatus, GetStatusPlus
используются для получения статуса, но немного другого, аналог команд DLE 0 - 5.
GetStatusPlus может быть использована когда Вы не получили ответа отФР.
GetStatus - только если команда успешно завершилась.
После них нужно выполнить GetStatusNum для получения соответствующегополя статуса.
При каком состоянии регистратора возможны команды <Установка пароля>, <Установка заголовка чека>, <Установка окончания чека>?
Есть 2 понятия - сеанс и смена. Сеанс открывается когда выполняется команда Начало сеанса, это требуется только после включения питания. Это можно разрешить/запретить - опционно.Открытие смены - может происходить 3-мя путями, - любым документом (кроме начала сеанса), первым фискальным, спец. командой – открытие смены - опционно.
PrintFDoc
Печать произвольного НЕ ФИСКАЛЬНОГО документа, в простонародии команда0х70.
PrintFiscalReceipt
Печать произвольного ФИСКАЛЬНОГО ДОКУМЕНТА, команда 0х73.
PrintFiscalReceiptPlus
Печать произвольного ФИСКАЛЬНОГО ДОКУМЕНТА, команда 0х75 - работа сотделами (для авиации).
Можно ли в методе ItemReceipt, писать несколько строк в поле WareName (те есть товары с длинным названием и желание печатать их в несколько строк на чеке)
Эти функции используются только если табло находится в составе ФР.Те такие конфигурации: ПК-ТАБЛО-ФР или ПК-ФР-ТАБЛО. Если Вы подключили табло к другому COM порту, то Вам нужно иметь что-то вроде моей библиотеки для вывода данных в СОМ порт.
Источник = CreateObject("AzimuthOLE.Functions");
Источник.OpenDll('AERF','COM2','Иванов','True');
Источник.OpenFDoc();Источник.PrintFDoc('Пример',7); Источник.CloseFDoc(); При ФР молчит, но 1с ошибки не выдает, что говорит о том что библиотека подключилась, но функции неработают.
В Вашем примере Я не вижу анализ GetLastDllError, все функции в OLEварианте это процедуры, те они не возвращают значения. Вам необходимоанализировать GetLastDllError для понимания того, каков результатвыполнения.
Кроме того, Вы неверно передаете параметры в функции Opendll.
OpenDLL(OpName,Psw,DevName:WideString; FlagOem:Integer)
Начните с такой последовательности команд:
Источник.Opendll('Скворцов','AERF','COM1',0);
Источник.StartSeans();
Источник.ShiftClose();
Источник.CloseDLL();
и не забудьте про GetLastDllError.
Правильно ли я понимаю, что OpenFiscalDoc - для печати фискальных чека/слипа.
Нет, не совсем так. Произвольный фискальный документ формируется в несколько этапов:
Установить параметры документа OpenFiscalDoc(0,0,1,1,2,1,40,3,24,StrToInt(Sum)); Установить позиции фиксированных реквизитов AddPosField(1,0,1, 1,12,1, 1,17,1, 2,20,1, 13,5,1, 10,0,1, 9,18,1); Добавить произвольные поля AddFreeField(1,0,1,3,0,"поле 1"); AddFreeField(n,0,1,3,0,"поле n"); Теперь печатаем то что сформировали на чеке PrintFiscalReceipt; или на слипе PrintFiscalSlip; Если функция PrintFiscalSlip или PrintFiscalReceipt вернет отрицательный рез-т ОБЯЗАТЕЛЬНО выполняем CloseFreeDoc.
OpenFDoc – для печати нефискального слипа, а как печатать нефискальный чек?
Нет, OpenFDoc для печати нефискального документа, а где, зависит от тех ESC команд которые вы пошлете вместе с данными. Причем есть 2 возможности, если данных мало, то используем FreeDoc, если данных много то можно перевести ФР в режим принтера (OpenFDoc), печатать строки (PrintFDoc или PrintOEMDoc или PrintOEMCRLFDoc), и возвращаемся в режим ФР (CloseFDoc). Отличия при печати: PrintFDoc - печатаем как есть(данные в DOS кодировке) PrintOEMDoc - печатаем с конвертированием из ANSI в ASCII (данные в Windows кодировке) PrintOEMCRLFDoc - тоже что 2 + добавляется CRLF в конце
Для печати документов я использую функции 71 и 73. Если напечатать подкладной, а затем чек, то первая строка чека, почему-то становится пятой. Если регистратор выключить и снова включить, то до первого подкладного чеки печатаются нормально, а потом строки чека снова сдвигаются на 4. Чем вызвано такое смещение и лечится ли оно?
Дело в том, что первые строки это заголовок. В произвольном документе его по умолчанию нет. Поэтому при печати этого документа присутствует пустое место на чеке. Чтобы этого избежать, можно воспользоваться опцией, которая включает стандартный заголовок в чек. См. команду 4С, второе слово.
Команда 94 (hex) возвращает код "Неверный формат поля" - 0201 (hex)
Значит команда передана не формате. Формат такой #02 AERF!94 #1c 9600 #1c 01 #1c 00 #1c #1c 01 #1c 00 #1c#03 E604
Нужно ли нам поддерживать команды налогового инспектора (04,05,06,08 (hex)) и если нет, то существует ли программное обеспечение (возможно поставляемое с фискальным регистратором) выполняющее эти операции?
Количество не ограничено, но возможно только при закрытой смене
Могу ли я понять результат операции в момент таймаута, можно ли точно определить, что чек НЕ ПРОШЕЛ? Или необходимо дождаться возобновления работы ККМ и уже тогда все станет ясно?
Если возник таймаут, можно воспользоваться функциями GetStatus, GetStatusNum:GetStatus - посылает реалтайм запрос на ФР (может выполняться в период между подачей команды и получения ответа из ФР). Описание ответа приведено в инструкции по программированию, раздел 3.5 "Запрос текущего статуса регистратора", думаю тебя будет интересовать пункт 3.5.1 "Текущее состояние выполнения команды". Впрочем остальные тоже не бесполезные. GetStatusNum - возвращает из ответа GetStatus конкретный байт статуса 1..6 - это соответственно DLE'0'.. DLE'5'.
Пожалуйста, объясните в чем отличие DLL'ных функций: DllComWrite и WriteComm.
Отличие в том, что DllComWrite ожидает ответ от регистратора. Т.е. эта функция может быть использована, если посылается какая-нибудь команда, которая сформирована самим пользователем. А WriteComm просто посылает данные в порт и ничего не ожидает.
Каким образом в DLL'ных функциях GetDate() и SetDate() происходит чтение и передача даты/времени "из" и "в" фискальный регистратор. Параметров-то у них нет...
SetDate() устанавливает в ФР СИСТЕМНУЮ дату, т.е. ту дату, что на компе, параметры для этого не требуются. библиотека сама может ее узнать. GetDate() получает дату из Фр, там всего ОДНА ;-))) дата. Поэтому тоже параметров нет.Что касается того, как получить эту дату. Здесь и в прочих командах ФР, что либо возвращающих, нужно пользоваться функциями GETFIELDХХХ (где XXX: BYTE, WORD, STR etc).Они, по номеру поля из ответа возвращают желаемое поле. Дополнительные поля в ответе начинаются с 5, 5 полей – это обязательные поля ответа. И есть в любом ответе от ФР
Можно ли использовать произвольный фискальный документ для приема платежей?
Если хочется в одном документе иметь несколько платежей, то это и сейчас никто не мешает сделать, платежи передаются как нефискальные произвольные G-поля, а сумму уже считаете сами, и передаете в ФР.
Хочу иметь список кодов ошибок (по-возможности последней версии) из ФР и их расшифровку на русском языке.
Чтобы удалить отдел необходимо сначала удалить в нем все товары - передать вместо названия пустую строку, таким же образом удаляется и сам отдел(отделы).
400 товаров или товарных групп. те всего 400. А сколько будет конкретно отделов, а сколько конкретно товаров определяешь сам. Может, например, быть 1 отдел и 399 товаров или 200 отделов и 200 товаров, по одному в каждом отделе.
К каждому отделу свои товары или для всех одинаковы?
Команда запроса статуса описана в самом начале инструкции по программированию (DLE 0-5). Эта команда отвечает немедленно, как и команда «Начало сеанса».
Каким образом оформляется возврат суммы клиенту в ПРИМ-07К?
Делается операция ВОЗВРАТ, тип операции 02. Можно сделать "Сторнирование продажи" 01. Эти операции делают одно и тоже, но для бухгалтерии разница есть. Возврат может быть проведен в любое время, а сторнирование только в течении смены, причем практически немедленно. Сторнирование - это ошибка оператора, Возврат - это возврат товара.
Можем мы в согласованный интерфейс добавить функцию, которая будет возвращать номер смены?
Можно, но при получении номера смены будет печататься чек.
Возможно ли, контролировать каким – либо образом состояние печатающего устройства, кроме проверки линии DSR, после переключения ККМ в режим принтера и до переключения ККМ в режим ККМ. Т.к. при сбое при печати в режиме принтера, ни какими действиями, кроме как включение-выключение ККМ, сигнал DSR восстановить не удается.
Нет, режим принтера не является приоритетным для ККМ, поэтому никакие ошибки, за исключением недопустимых ESC последовательностей не обрабатываются.
В описании денежного поля указано, что максимальный размер поля 14 разрядов, однако далее по тексту встречаются поля M с размером 18, надо ли это понимать как опечатку и считать, что денежные поля имеют максимальную длину 18 разрядов?
Это не обязательная команда, если ФР не запрограммирован на открытие смены СПЕЦ командой, тогда открыть смену можно только ей. В основном используется, если режим работы сменный.
Что означает команда "Закрытие смены" (и почему она относится к финансовым)?
Тоже самое что и Z, но ничего не обнуляет и не записывает, просто справка на текущий момент времени.
При печати Произвольного чека после стандартного на произвольном в первый раз не печатается заголовок (В звездочках), потом все вроде бы стабилизируется, до следующей смены типа чека. Как бороться с данной ситуацией?
Не совсем так, эти поля есть, например, в команде программирования видов оплат, другое дело, что это команда может не входить в инструкцию по программированию, поставляемую с ФР.
Любое ограничение на использование команд должно иметь какое-то обоснование, чем обосновано данное ограничение на 71-ю команду?
Ограничения на команду нет, необходимо просто вынимать бланк и вставлять его заново, в противном случае операция будет считаться не завершенной, а состояние принтера не допустимым для выполнения след. команды. Если бы мы не проверяли отсутствие бланка перед печатью, то мы бы столкнулись с массой проблем в сфере услуг, когда при оформлении коммунальных платежей несколько квитанций это вполне естественно. И вот как раз здесь возможна ситуация, когда на одном бланке появятся 2 оттиска от разных платежей, если бы мы не контролировали тракт. Однако, есть в ФР опция, которая позволяет ФР несколько иначе работать с подкладным документом - опция называется АВТОСЛИП. Это 10-й бит во 2 параметре команды 4С.
Как выполнить операцию сторнирование позиции в чеке, то есть отказаться от позиции, которая уже напечатана на принтере?
Смотря какой командой формировался чек, если 73, то только сторнированием всего чека. Если 10-15, то чтобы отменить позицию пропечатанную 11 командой, нужно выполнить эту же команду с отрицательным количеством.
Запоминаются ли параметры в памяти или при каждом включении ПРИМ-08ТК необходимо посылать команды инициализации (заголовки чека, типы шрифта, яркость печати и т.д.) ?
Доп. строки можно напечатать используя не документированное поле, которое может быть передано в команде, оно передается после последнего поля перед символом конца команды #03
Как сделать так, чтобы формат печати был одинаковым на обоих ФР? Может зона печати ПД прописывается в Файле инициализации Прикладной программы?
Что касается того, что печать все-таки отличается, то это зависит еще и от команды настройки ФР - 4С - УСТАНОВКА ПАРАМЕТРОВ ДОКУМЕНТОВ. Сравните настройки ФР используя команду ПОЛУЧЕНИЕ ПАРАМЕТРОВ ДОКУМЕНТОВ. Они 100% будут отличаться. Используя команду УСТАНОВКА ПАРАМЕТРОВ ДОКУМЕНТОВ установите те параметры, которые установлены в ФР с правильной для Вас ориентацией печати бланка.
Почему при формировании чека произвольными фискальными командами не печатается Окончание документа. Бит в Параметрах документа стоит и при закрытии смены Окончание Документа выводится?
Максимальное количество символов на ПД в матрице 7х9 - 88, в матрице 9х9 - 66. Кроме того, принтер поддерживает формат печати А5, а не А4 те рабочая зона при печати около 13 сантиметров ВСЕГО( а не 21 как в А4 ), на них можно разместить 88 символов.
ККМ БИС-01Ф часто затягивает хвостовую часть чековой ленты в приёмную щель. При этом нет никаких аварийных сигналов, чек получается испорченный, а повторить пробитие чека нет возможности.
Скорее всего используется тонкая бумага, поэтому при резке часть ее заминается, отсюда и эффект. У самого принтера реверса бумаги нет, поэтому командно провести это затягивание не представляется возможным.
Не могли бы Вы подробнее раскрыть суть примечания в п. 8.2 инструкции по программированию ПРИМ 07Ф. "Ответ на команду 'Установить режим принтера' регистратор посылает дважды".
Это означает, что для перевода ФР в режим принтера посылается команда в формате ФР №0х70, после этого ФР переходит в режим принтера и может принимать ESC последовательности. Для того, чтобы вернуться в режим ФР необходимо передать 2 ESC, как признак возвращения в режим ФР.
Регулярно при попытке печати на подкладном документе выдается сообщение "Неверное состояние"
Вы не вынимаете бланк, а посылаете след. команду, поэтому ФР возвращает код ошибки НЕВЕРНОЕ СОСТОЯНИЕ ПРИНТЕРА, код 28.
При работе с банковскими картами требуется печатать дополнительные чеки, так называемые чеки авторизации. Каким образом можно посреди фискального документа распечатать несколько копий нефискального? Или это можно делать только на подкладном? Или же фискальный документ вообще нельзя прерывать нефискальным и оформлять сначала платёжные слипы, а потом уже, по завершении всего чека в программе, оформлять весь чек разом в ККМ?
Если чек формируется командами 10-15, то там есть доп. поле 255 байт. В нем можно передать эту информацию. Если 71-73, то там есть понятие произвольного поля. Можно печатать сначала чек, потом, используя команду 70 все остальное.
Да, имея на руках ремонтную документацию с распределением памяти и сервисные программы.
Возможно ли, контролировать каким – либо образом состояние печатающего устройства, кроме проверки линии DSR, после переключения ККМ в режим принтера и до переключения ККМ в режим ККМ. Т.к. при сбое при печати в режиме принтера, ни какими действиями, кроме как включение-выключение ККМ, сигнал DSR восстановить не удается.
Максимальная толщина ~ 1 мм (сберкнижка) Размер листа по ширине 135 мм (мах) Имеет поворот на 90 градусов, этот режим используется для печати валютных справок.
Как получить отчет по смене с разбивкой по отделам,
Согласно ТТ к ККМ учет ведется в фискальной памяти только в рублях. Существующая практика магазинов беспошлинной торговли показала, что на чеке печатается сумма с валюте, курс пересчета в рубли и рублевая сумма.
Есть ли операция "ВОЗВРАТ ТОВАРА" по платежной КАРТЕ? В X-отчете не нашел такой операции.
Да, есть. Единственное, что может быть, что ФР не разрешено (по умолчанию) делать возврат при оплате картой. (см. инструкцию по программированию функцию 4а и функцию SetPayment в библиотеке).
Есть ли принципиальные отличия по внутренней обработке ПФД и стандартных ФД? То есть: не возникнут ли в дальнейшем проблемы с налоговиками, если ВСЕ плат. чеки будут печататься, как ПФД?
Для того, чтобы отменить товар в многотоварном чеке необходимо провести операцию, аналогичную продажи товара, только в поле количества поставить знак "-".
Как убрать печать пустых строк (очевидно 6 строк для заголовка документов)- нужно для экономии ленты.
Q: Открытие денежного ящика командой chr(5) идет только после команды начала сеанса. У меня ящик открылся только один раз когда я поставил после печати чека 2 команды: Начало сеанса, Открыть денежный ящик.
Начало сеанса это первая команда , которая должна посылаться на ФР после включения питания. Это можно отменить соотв. опцией. Тогда другие команды будут выполняться немедленно после включения питания.
Сохранение параметров документа происходит до выключения ФР после перепрограммирования или до следующего раза?
01- Сторнирование, это коррекция ошибки оператора в случае, когда например он ввел неверную сумму. Выполняется, пока клиент еще не заплатил. 02- Возврат денег за товар или услугу. 03- Коррекция ошибки при выполнении операции ВОЗВРАТ (см. выше)
Возник еще один вопрос, как в чеке заменить слова "РУБ" на "USD" или "EUR".
Статус принтера обновляется автоматически. Мы используем команду ASB (Auto Status Back), которая выполняется 1 раз после включения или сброса ККМ и автоматически изменяет статус принтера, если он изменится. Когда формируется ответ на команду статус берется как раз из того места, куда его записало прерывание.
В нормативных документах требуют на чеках и оттисках наличия "Признака фискального режима". Вы не подскажите, что это такое и как это настроить?
Коррекция даты по началу сеанса это опция, которая выполняет одноименное действие. Сейчас в ФР есть часы, раньше их не было, поэтому дата передавалась в каждой команде, сейчас это не требуется. Вообще то это рудимент от самого первого исполнения ФР. Эквивалент этой команды - команда установки даты-времени.
Может ли увеличиться надежность при понижении скорости передачи на COM порту.
У него не будет контрольной ленты, точнее она не будет оформляться. Все транзакции записываются в ЭКЛЗ, в любой момент данные из ЭКЛЗ могут быть распечатаны. В ФР добавлены новые команды для чтения ЭКЛЗ, сохранена полная совместимость.
Как наилучшим образом отлавливать ошибочные ситуации при работе с ПРИМ-07Ф такие, как открыта крышка, кончается/кончилась лента и т.п.
После передачи команды Вы можете воспользоваться командой запроса состояния ФР (коды DLE0- DLE5 (см. инструкцию по программированию)). Эти команды возвращают состояние и принтера в том числе. Если при выполнении команды открыть крышку, в ФР может возникнуть таймаут обмена с принтером и будет возвращен код ошибки. Завершение бумаги ФР отслеживает самостоятельно по следующему алгоритму, если бумага близка к концу и чек не открыт вернется ошибка, если уже открыт, то ошибка вернется только если появиться статус бумага закончена, те иными словами ФР даст допечатать чек.
Объясните, пожалуйста, почему в состоянии СКИДКА НА ИТОГ нельзя посылать команду РАСЧЕТ. Чем это грозит и почему работает тот порядок (не правильный), который я использую?
При оплате в кредит или по карте ФР зависнет. Вы пользуетесь оплатой наличными, поэтому все проходит. А почему работает, потому, что эту ситуацию ФР не контролирует, не учли такую комбинацию при разработке.
Объясните, пожалуйста, что такое Скидка по прейскурантной цене и для чего она нужна.
Скидка по прейскурантной цене отменяет сложную скидку, это происходит, когда на один и тот же товар проводится несколько скидок. В сложной скидки каждая последующая берется от текущей суммы товара, в случае прейскурантной цены каждая последующая скидка берется от цены товара, а не от текущей суммы.
Поле СУММА ДЕНЕГ В КАССЕ нарастает вместе с ПРОДАЖЕЙ! Так и должно быть? Что это поле значит?
Это поле должно равняться сумме денег в денежном ящике. При проверках НИ данный счетчик сравнивается с содержимым денежного ящика и при не совпадении. могут быть неприятности. Эта сумма перед закрытием смены должна инкассироваться (обнуляться) Вашей системой. Есть автоматическая инкассация(нужно установить опцию в ФР), тогда ФР будет делать это автоматически.
Что подразумевается под понятием подкладной печати.
Это печать подкладных документов, те квитанций, валютных справок, сберкнижек и пр.
После перепрограммирования ПЗУ в ФР "ПРИМ-07Ф", на панели индикации мерцает светодиод "ERROR", а программа AZ_TEST сообщает о неверном состоянии принтера.
Ошибка возникает в том случае если в области полей имеются символы с кодом менее 0х20 (пробел). В основном проблема связана с неправильной передачей строк, когда строка информации не заканчивается 0, в этом случае при использовании стандартных процедур копирования в область полей попадает "мусор", что и приводит к такой ошибке.Единственное, как это можно продиагностировать, использовать вариант библиотеки с ведением log файла. Там все сразу будет видно, где проблема.
при инициализации функции OpenDLL(), какие параметры COM порта она задет??.
Что означает признак "Имеет ли вид платежа 2-ю строку в названии" - имеется в виду (не)обязательность заполнения поля "Название платежной карты" в командах 13h и 23h или что-нибудь другое?
Реально используется только в 2 - это открытие смены и установка даты, во всех остальных - оставлены для совместимости с более ранними версиями ФР, которые не имели часов.
Нет ли функций для печати произвольных строк на чековой ленте?
Делаем ошибочно внесение некоторой суммы(ToCash) в фискальном режиме, после этого делаем(сразу же) инкасацию (FromCash) той же суммы не закрывая смены. Так вот, пропишется ли это дело в фискальную память и будет ли в фискальных отчетах налогового инспектора?
Это удобно когда идет печать только на подкладных документах, те ФР всегда находится в режиме ожидания ПД - мигает лампочка, и оператор не тратит время на ожидание переключения ФР в режим ПД. После печати ПД и изъятии бланка ФР снова возвращается в режим ПД.
"сумма в кассе" это сумма наличных, которая находится в денежном ящике. Те при проверке состояние этого счетчика должно равняться физическим деньгам в денежном ящике. На этот счетчик влияет операция продажи, возврата и сторнирования по наличным и операции внесение и инкассация.
При печати чека, печатается подсчет - цена * кол-во грамм! Как убрать это из чека? Не печатая произвольный фискальный документ?
Для этого надо высчитать сумму самостоятельно и передать ее в команде "ПРОДАЖА", а количество указать равное 1. Если в параметрах ФР установлено "Не печатать кол-во равное 1", получим требуемый результат.
Технология приемов платежей обусловлено программой с которой работает пользователи?
Заголовок документа ФР есть величина постоянная в течении смены, поэтому в заголовке документа изменять или добавлять какие либо поля не возможно. Под заголовком в ФР подразумевается 6 строк по 40 символов в начале документа.
прошу Вас выслать распайку переходника и инструкции для прошивки принтера БИС-01Ф с версии 1.06m до версии 2.01, т.к. после прошивки принтер при включении выдал ошибку 3710, F=5360, P=F5C0, S=652F
Он берется из принтера, и чтобы поменять его необходимо из ФР сделать принтер, загрузить заголовок и потом опять из принтера сделать ФР. Это возможно лишь при вскрытии ФР.
режим однонаправленной печати выбирается командой ESC U (n) Hex: 1B 55 n а режим двойного прохода командой ESC G (n) Hex: 1B 47 n
Если я задаю абсолютное смещение от начала строки, то это смещение берется слева или справа и как мне добиться начала печати слева и отступ брать тоже слева ?
Все зависит от положения переключателя номер 9 на блоке переключателей принтера (см. инструкцию по эксплуатации). В зависимости от его положения отступ будет формироваться или справа или слева, при этом и оттиски будут отличаться, будет наблюдаться зеркальное отображение. Напечатайте документ с включенным и выключенным 9 переключателем и сравните результаты, один из них вас устроит.
На ККМ "ПРИМ-07" мы регистрируем безналичный платеж. А потом отменяем его. Можно ли печатать в этом случае чек возврата?
Да, если запрограммировать этот вид оплаты на возможность выполнять такую операцию, по умолчанию это можно сделать только для наличных. Более подробно см. Инструкцию по программированию, команда 4А
Компьютер ОБЯЗАН ЖДАТЬ ответ (сразу вычитать из буфера все, что ему пошлет касса), или же, он может, выдав команду, проверить "а что там с предыдущей командой"?
Все зависит от того, под чем написано ПО, если это Windows, то с чтением можно и обождать, потому, как данные сначала будут приняты в буфер драйвера COM порта, затем уже средствами Windows API попадут в пользовательский буфер. Что касается DOS, то для такого, то для такого чтения требуется резидентный драйвер, который система может опрашивать в произвольные моменты НЕ СВЯЗАННЫЕ с моментами получения байтов сообщения.
Фискальный регистратор БИС работает только с одним ящиком. С двумя работают ПРИМ и АЗИМУТ, причем это только возможность самого принтера, поддерживается программно только один.
при печати по горизонтали 2 оттиск зашел в зону 1 оттиска. Расстояние между оттисками по горизонтали задавалось 5 (0500h) пробелам?
Ошибка в том, что этот параметр не расстояние между оттисками, а смещение второго оттиска слева, те смещение должно быть больше чем самая длинная строчка в левом оттиске!
Какая роль в обмене возлагается на "отличительный байт" команды? Что он призван отличать? Допустимо ли для простоты использовать один и тот же отличительный байт во всех командах?
Да, допустимо, но не желательно. Отличительный байт позволяет определить, на КАКУЮ команду пришел ответ. Те, вы посылаете команду, ответа не получили. потом идет понимание что произошло, вывод сообщений оператору. и при выдаче NAK вы получаете ответ, последний ответ. Если отличительный байт будет одинаковый, то не будет понятно, дошла ли ваша команда од ФР и выполнилась ли она.
Существует ли алгоритм организации процесса или образец для конкретного применения ? (например инициализация DLL, авторизация аппарата, ... и т.д. )
Работа ведется так. 1. Настраивается Фр, параметры документа, заголовок, трейлер итд. в DLL есть. 2. Далее работа оператора: а. Открывается смена (можно не открывать, зависит от технологии и как настроен ФР) б. Внесение денег (чтобы сумма в кассе Фр соответствовала сумме в денежном ящике у оператора) в. Чек за услуги, (в ПРИМ может быть 2-х видов произвольный и фиксированный) в БИС только фиксированный. г. Инкассация (может отсутствовать, если настроить Фр на автоматическую инкассацию при закрытии смены) д. Закрытие смены.е. Дополнительные отчеты командами произвольного не фискального документа (на ПРИМ могут печататься на чеке и подкладном листе). В течении смены могут быть выполнены неоднократно операции внесение,инкассация и Х-отчет. Работа с библиотекой всегда начинается с OPENDLL, далее START (может отсутствовать в зависимости от настройки, по умолчанию требуется всегда после переключение питания ФР)
Наши попытки воспользоваться ESC-командами из ND77 в режиме принтера не удались. Нельзя ли прислать несколько примеров с командами принтера ND77, в таком виде в котором они выглядят при работе с ФР.
Для работы в режиме принтера необходимо для начала изучить раздел произвольные документы, в частности как работает команда 70. Иными словами, вы должны передать команду для перехода в режим принтера, ПОЛУЧИТЬ ОТВЕТ, далее послать все, что хотелось послать и послать два ESC, для возврата из режима принтера.
Да может, начиная с версии 3.0000. Дело в том, что потребовалось оснащение платы контроллера памятью большего объема, поэтому схемотехнически эта версия не может лечь на платы с версиями 2.01-2.10 без переработки. Поэтому, если в Вашем регистраторе версия 3 и более, то эти функции там уже есть.
У нас появилась необходимость печатать чеки на ККМ Азимут в некоторую секцию.
Дело в том, что фискальный регистратор Азимут не имеет возможности дифференцированного учета по товарам и товарным группам. Для решения этого вопроса на ФР Азимут нам потребуется провести конструктивную модернизацию, те установить на плате память большего объема. Второй вариант, это замена ФР Азимут на ФР ПРИМ-07Ф. В фискальном регистраторе ПРИМ уже существует дифференцированный учет по товарам и товарным группам общим количеством до 400.
Как будет себя вести регистратор, если подкладной документ будет больше 1 страницы.
Если фискальный, то он только на 1 страницу. Если произвольный, то можно сказать принтеру, чтобы он отслеживал конец текущий страницы и просил следующую. Нужно кинуть $1B 'с4' $3С для этого.
Как будет себя вести регистратор, если подкладной документ если подкладной документ "замнет".
Если подкладной документ замнет, то все зависит от того когда. или вернет ошибку или не вернет, тогда уже оператор должен сторнировать документ и провести его повторно.
Не удалось напечатать подкладной документ на "Возврат". В чем может быть проблема?
Проблема в настройке! Есть бит, который отвечает за печать произвольного фискального документа по операциям, отличным от Продажи, его нужно установить. (бит 15 1-го слова)
На почте существуют следующие формы оплаты - НАЛИЧНЫМИ, ПЛАТЕЖНЫМИ ДОКУМЕНТАМИ, СЛУЖЕБНОЕ, можно ли это отразить в регистраторе?
К сожалению, никак, фирма WINCOR как раз боролась за скорость. В любом случае печать на прямом проходе позволит Вам существенно снизить выход бракованных квитанций при печати.
У меня при выполнении вашего кода на подкладном документе печатается на одном и том же месте Line1 и т.д., а строчки переводятся на чеке, т.е. чековая лента передвигается по 1 строчке после каждого выполнения команда печати.
Место печати подкладного документа и чека одно тоже, т.е. головка одна и может печататься либо чек, либо подкладной документ. При запросе подкладного документа раздается характерный щелочек и лампочка DOCUM начинает мигать. Если щелчка нет, вставить документ НЕВОЗМОЖНО.
Я посмотрел документацию по принтеру ND77 и , к сожалению, не нашел ESC последовательности для разворота печати на 90 градусов.
Дело в том, что переворота на 90 градусов на командном уровне не предусмотрено!!! Для печати с поворотом на 90 градусов применена технология, использующаяся при печати КАТАКАНы, т.е. 1 символ состоит из 2-х. Каждый символ, перевернутый на 90 градусов, занимает 2 знакоместа обыкновенного символа. Соответственно, при печати необходимо передать 2 кода, чтобы напечатать 1 символ. В общем случае процедура печать символа выглядит так:
Procedure PrintTextChar(c:char);
begin
{ Печать первой части символа }
BlockWritePrim(c,1);
BlockWritePrim(CharSpacing1,sizeof(CharSpacing1));
{ Печать второй части символа }
Inc(Byte(c));
BlockWritePrim(c,1);
BlockWritePrim(CharSpacing,sizeof(CharSpacing));
end;
где:
CharSpacing : array [0..2] of char = #$1B' '#$00;
CharSpacing1 : array [0..2] of char = #$1B' '#$07;
Минимальный шаг перемещения по вертикали у принтера ND77 составляет 1/144 inch, в то время как наше программное обеспечение использует шаг 1/180 inch.
В системе команд принтера ND77 есть команда "GSP"xy, где х-у желаемая величина перемещения(motion unit) по горизонтали и вертикали соответственно. По умолчанию х=150 у=144, но можно задать от 0 до 255.