Параметры
записи информации в фискальной памяти Меркурий 115Ф.
Автор
предупреждает, что данная информация написана исключительно
для целей ремонта и тестирования ККМ «Меркурий-115Ф»
и не несет ответственности за использование ее третьими
лицами в иных целях, как и за возможные проблемы, возникшие
у этих лиц в связи с применением данной информации.
Попался нам
как-то Мерк 115-й, щедро политый кофе. Вымыли, оттерли спиртом, высушили, но
пищит этот гаденыш НП, да еще и таким противным голосом - жуть. Прочитали
фискалку и нашли в области Z-отчетов
какой-то бред в виде большой полосы одинаковых закорючек в ровном узоре данных.
И пришлось нам постигать смысл сей информации.
После целого
дня перевода из Hex в Dec и обратно расшифровали
всю фискалку за исключением одного байта в конце каждого Z-отчета с ним мы проколупались еще
почти целый день, пока не заглянул к нам один очень умный человек и за две
минуты не расшифровал его (Оказалось все настолько просто, что долго плевались
от ощущения собственной тупости, что не смогли сразу догадаться).
После этого выправили мы все данные, и касса зажила
новой жизнью, как будто с ней ни чего и не происходило и никогда она не пила
кофе.
Ну а для тех, кто хочет также знать, что к чему в
ентом звере по имени БЛОК ФИСКАЛЬНОЙ ПАМЯТИ ККМ МЕРКУРИЙ – 115 Ф, привожу
результаты наших изысканий:
В начале идет
заводской номер кассы (Берутся все байты вместе) и количество снятых фискальных
отчетов:
Например № кассы 00123456-0001E240, а количество фискальных отчетов было 13 – 0D:
00000000:000000012C47000D¦0000000000000000
Затем дата
фискализации (Байты считаются по отдельности):
Например 01.01.04г.-010104 , 06
в конце строки – число цифр в пароле НИ (спасибо alex56 :-)
):
00000010:0000000000000000¦0000000001010406
Далее идет ИНН владельца
(Байты берутся группами по 3 – при фискализации и перерегистрации он и вводится
двумя половинами), а дальше в этой строке идет рег. номер кассы (Байты беруться
группами по 2 – тот же принцип), и последним идет пароль налогового инспектора
(Берутся все байты вместе):
Например ИНН 111111.111111-01 B2 07и01 B2 07, рег. номер 1111.1111-04 57 и 04 57 , пароль НИ
111111 - 01 B2
07:
00000020:0001B2070001B207¦045704570001B207
Далее идут
записи перерегистраций (если они были сделаны – максимум 4) для примера
реквизиты в перерегистрациях идут соответственно 1
– все двойки, 2 – все тройки, 3 – все четверки, 4
– все пятерки (цвета соответствуют строкам, где находятся данные по этим
перерегистрациям).
Зеленым
– первая половина регистрационного номера, салатовым
– вторая.
Фиолетовым
– пароль НИ, лиловым – количество цифр в
пароле НИ (здесь везде 6)
Тёмно-красным – №
фискального Z-отчета на момент регистрации. Он присутствует
и в записи первичной регистрации (адреса 30h:31h), но
там он всегда нулевой, т.к. ни одного фискального Z-отчета
на момент первой регистрации еще не снято.
(цвета отображены в версии для распечатки, скачать можно
по ссылке внизу страницы)
Затем до
адреса 000000F0 все
забито нулями, с адреса 00000100 начинаются записи Z-отчетов:
00000100:8101040098967F00¦98967F2000FFFFFF
Для примера будет одна
запись единственного Z-отчета. Первые 3 байта это дата, которая при переводе в
десятичную систему выглядит так: Первый байт – это день месяца + 128. Установленный
в единицу старший бит в байте дня - это признак работы
в копейках (деноминация). Если он в нуле, значит - работа
в рублях, без копеек. Старые версии (с матричным принтером)
при снятии фискального отчета, "натыкаясь"
на переход (была дата - с нулевым старшим битом, стала
- с единичным старшим битом) печатали строку: "Изменение
положения десятичной точки".(т.е.
убираем первый бит и видим день) далее месяц и год, в данном примере 01.01.04г.
Затем идет выручка за день (Берутся все байты вместе), здесь 99 999,99р. – 98 96 7F и возвраты за день (Берутся все байты
вместе), здесь 99 999,99р. – 98 96 7F, затем идет
контрольная сумма – здесь 20, а в конце записи
прописывается 00 – это признак последнего Z-отчета. Контрольная сумма
вычисляется следующим путем:
80 (Это те 128 которые присутствуют в дате) – 01 (Это 1 число месяца) – 01
(первый месяц) 04 (четвертый год) – AD (Сумма выручки
98+96+7F=1AD и
берем только один последний байт AD) – AD
(возврат за день - вычисляется также как и выручка) = FFFFFF20 – опять же берем последний байт - 20.
Если контрольная сумма посчитана неверно или нет 00
после последнего Z-отчета,
касса при включении будет пищать НП (когда при включении кассы горит test она как раз
и пересчитывает в фискалке все контрольные суммы и сверяет кол-во Z-ов с озушкой) и запускать
ее можно будет только через режим налогового инспектора. Z-отчеты идут подряд
без промежутков. После признака последнего Z-отчета идут FF до конца фискалки.
Количество
Z-отчетов прописывается в электронном журнале (ОЗУ) и при изменении их
количества там их надо тоже править (Чтобы она не пищала НП), а перед
количеством Z-отчетов
пишется количество снятых в смене контрольных лент, кол-во X-отчетов, затем после кол-ва Z-ов идет номер чека КЛ,общая сумма КЛ, сумма аннуляций и возвратов,
количество продаж (включая аннулированных), аннуляций и возвратов, например
контрольных лент было 1 – 01, X-ов было 1 – 01
и Z-ов было 10-000A, чек КЛ был под
№ 5 – 00 05, сумма на КЛ была 1,11 – 00 00 00 6Fсумма
аннуляций была 0,01 – 00 00 00 01, сумма
возвратов 0,01 – 00 00 00 01, количество продаж
3 – 00 03, из них аннулированных 1 – 00 01, возвратов 1 – 00
01:
00000010:010001000A000000¦00050000006F0000
00000020:0001000000010003¦0001000101919290
01
– это флаг вкл-выкл озвучивания нажатых клавиш – 01 вкл, 00 выкл. 91 92 90 – начало клише.
Если поставить
количество Z-отчетов
меньше, чем реально прописано в фискалке, то касса не будет обращать внимание
на те Z-отчеты, что
прописаны далее, и будет их затирать с каждым новым отчетом. Это кроме случая,
если надо поставить меньшую дату. Тут надо отключить на пару сек аккумулятор –
после включения касса сразу потребует ввести дату и время(Обычным путем дату в этом случае не
поставить), так вот – набрать нужную дату, закоротить 5-ю и 7-ю ноги у фискалки
или 2-ю и 4-ю на фискальном модуле, нажать ПИ, убрать перемычку и опять ПИ,
поставить время и ПИ – после этого на кассе дата и время пойдут сами, но если
понадобится подкорректировать, то пока не затрутся старые Z-отчеты (те которые записаны в фискалке
до изменения их количества в электронном журнале) надо будет повторять
вышеуказанную процедуру. Кстати если количество Z-отчетов сделать меньше, чем указано в
реквизитах последней перерегистрации, накопление на Z-тах будет обнуляться каждый раз и
равняться сумме Z-та
пока кол-во Z-ов не
перевалит за указанное указано в реквизитах последней перерегистрации, а если
попытаться установить дату, меньшую чем дата последней регистрации, даже если
она будет больше даты последнего Z-та, то надо провести вышеупомянутую операцию (ввод даты через
отключение аккумулятора и корочение контактов) (Все это может пригодиться, если
оператор ввел случайно неправильную дату и снял Z-отчет – а у наших клиентов это просто
болезнь какая-то – любят они кнопки на кассах нажимать, да года вводить из
далекого будущего и приходится отматывать дату назад и фискалку править) А
иначе если налоговая снимет фискальный отчет по датам выйдет полный бред –
например на кассе по случайке ввели 2020 год (Бывало и такое), поработали
недельку, а потом дату насильно назад отмотали, а когда налоговая проверяет
кассу – она как будто только до середины года работала, а дальше пусто. Объясняется
все просто – когда идет запрос по датам, касса натыкаясь на 2020 год
останавливается и не смотрит – было ли там что-то еще из подходящих ей по
выборке дат т.к. это по идее не возможно. В таких случаях надо снимать отчет по
номерам смен – но не будешь же у каждого такого нерадивого клиента записульки
оставлять…
Здесь же хранятся пароли
кассира и администратора (обычно пароля нет, а если стоит неизвестный пароль,
так проще закоротить 5-ю с 7-й ножки у фискалки или 2-ю и 4-ю на фискальном
модуле и войти без пароля, а потом запрограммировать нулевой пароль: пароль кассира программируется в
режиме ПРОГ 1ИТ набираешь 7 раз любую цифру - на экране только одна
закорючка n
останетси и ПИ, тоже самое с администратором только через 2ИТ).
Например
пароль кассира 111111 – 01 B2
07, а пароль администратора 222222 – 03 64 0E:
00000000:00000001B2070600¦03640E0600000000
06 после паролей – число
цифр в пароле
Далее в
журнале идет клише, которое программируется по клавише 4.
Например СТРОКА КЛИШЕ НОМЕР 11111
00000020: 0001000000010003¦0001000101919290
00000030:8E8A80208A8B8898¦85208D8E8C859020
00000040:3131313131010007¦0104000000000000
Клише можно
забить и самому – переводи коды из таблицы символов в HEX и все дела.
Потом идут
время (вначале минуты, потом часы) и дата первой покупки (начала смены) – после
Z-отчета обнуляется и
появляется после первой покупки (даже не завершенной) или X-отчета. Например время 00:01 – 01 00 и дата 7.01.04г. – 07
01 04
00000040:3131313131010007¦0104000000000000
Затем с адреса
00000050 идут записи продаж. Формат записи продаж такой: первый байт это сумма
часов во времени продаж и старшего бита, который принимает следующие виды: A0 – единичная продажа или
начало любого чека с множеством продаж (в примере A0+00(00 часов)= A0); 20 – означает продолжение продажи в
одном чеке (в примере 20); 60 – аннуляция в чеке (в примере 60) (при аннуляции
к минутам аннулируемой продажи прибавляется старший бит 80 – в примере A0 81); 80 – чек возврата (в
примере 80); C0 –
контрольная лента (в примере C0)
(пишется только время и если после снятия КЛ опять пробивать чеки он затирается
следующими записями продаж, как идет заполнение ОЗУ после переполнения и снятия
КЛ не знаю – слишком долго сидеть и набивать чеки для переполнения. Этим же
битом отмечается X-отчет,
только в отличие от КЛ пишется полностью время, почему он не стирается
следующим чеком и попадает в КЛ). Последняя запись продажи отмечается 00 00
(Если при не завершенном чеке сделать «выкл-вкл» касса напечатает «Чек не
действителен ххх» (xxx
– это идентификатор версии ПО ККМ), при этом в озу он сохранится без часов во
времени и на конце у него будет 00 FF вместо 00 00, следующим чеком эта запись будет затерта) .
Количество чеков, пробитых с начала смены или после последней КЛ ни где не
прописывается – считается просто по количеству записей, номер чека КЛ в начале
озу прописывается просто для того, чтобы касса начинала писать в следующую КЛ
только те чеки, что не вошли в предыдущую КЛ. В записи первого чека в смене нет
часов, только минуты, вместо часов всегда 00. После времени идет сумма продажи
(аннуляции или возврата) и 00. Например опишем одну продажу в 1р - 64, чек с продажей в 0,01р – 00
00 01, аннуляцией 0,01р – 00 00 01,
продажей в 0,10р – 00 00 0A, чек возврата 0,01р – 00 00 01, X-отчет и контрольную ленту, пробитые в 00:01 (00 01 , A0 81 , 60 01 , 20 01 , 80 01 , C0 01):
В конце озушки
с версией s8c пишутся 3 дополнительные
строки клише (программируются через 10, 11, 12), флаг размера шрифта (00 – крупный шрифт, 01
– мелкий, программируется через 8) процентные ставки НДС и НСП (программируются
через 20, 21, 22, 23), их сумма в чеке и общее накопление по кассе с момента
фискализации или перерегистрации.
Например общее накопление на
кассе было 23 461,53р. – 00 23 CCA9, три
дополнительные строки клише будут выглядеть так: СТРОКА
КЛИШЕ НОМЕР 22222, СТРОКА КЛИШЕ НОМЕР 33333
и СТРОКА КЛИШЕ НОМЕР 44444, ставка НДС1 = 11%
- 0B, НДС2 = 12% - 0C, НСП1 = 13% - 0D, НСП2 = 14% - 0E(нули, выделенные цветами ставок
налогов отмечают адреса, где прописываются суммы налогов пробитых в смене:
Я
бы отметил на Вашей странице одну неточность: то, что
названо номером перерегистрации, на самом деле - № фискального
Z-отчета на момент регистрации. Он присутствует и в
записи первичной регистрации (адреса 30h:31h), но там
он всегда нулевой, т.к. ни одного фискального Z-отчета
на момент первой регистрации еще не снято.
А
чтобы в дальнейшем не мучится с двоичными файлами сброшу
на "мыло" две программки: конвертирования
двоичного образа ФП «Меркурий-115Ф» в текстовый
файл и обратно.
Проект
не был коммерческим, писался для себя и далее не поддерживается,
так что о замеченных ошибках написать можно, но исправляться
они будут вряд ли.
В
связи с чем разрешаю выставить для всеобщего доступа.
Может
быть, то, что делают эти программы, уже написано другими:
не знаю. Все, что мне было нужно, писал сам, потому
мало интересовался творчеством других.
Автор
предупреждает, что данный пакет программ написан исключительно
для целей ремонта и тестирования ККМ «Меркурий-115Ф»
и не несет ответственности за использование ее третьими
лицами в иных целях, как и за возможные проблемы, возникшие
у этих лиц в связи с применением данных программ. Скачать
От:
Бывший г. Москва
Еще
одна, даже не поправка, а просто пояснение. Цитирую
с Вашей страницы:
"Первый
байт – это день месяца + 128 (т.е. убираем первый бит
и видим день)". Установленный в единицу старший
бит в байте дня - это признак работы в копейках (деноминация).
Если он в нуле, значит - работа в рублях, без копеек.
Старые версии (с матричным принтером) при снятии фискального
отчета, "натыкаясь" на переход (была дата
- с нулевым старшим битом, стала - с единичным старшим
битом) печатали строку: "Изменение положения десятичной
точки". В новых (после 98г.) ККМ такого перехода
естественым путем образоваться не могло, а искусственным
- не пробовал. Может быть, этот кусок программы и убрали
за ненадобностью