- Форум
- Основной форум компании CARBIS
- R-Keeper 7
- R-Keeper 7 и фискальные регистраторы, а также чеки и пречеки
- Штрих М01ф Обибка 217 при оплате
-
30.06.2017, 10:15
#1
Сведущий
Штрих М01ф Обибка 217 при оплате
Добрый день
Поставил новый ФР
настроил через Rs232 , через универсальный драйвер, FiscRegTypeId 155 RK 7.5.7.65Фр кассой видится, можно распечатать X отчет, но при попытке провести оплату выдает следующую ошибку
Ошибка 217
Не получается напечатать чек: Ошибка фискальной печати: Операция: PrintFiscalReicept Ошибка 200
Логическая ошибка (0xC8) : wrong Item «Пирожок …» Tax index 0 value 0 ? but must in [1..4]
не фискальная часть печатается , фискальная нет
подскажите где я мог ошибиться
как исправить
-
30.06.2017, 10:38
#2
Разбирающийся
В налоговых ставках фискальный тип выставить больше нуля, согласно настройкам ФР
-
2 пользователей сказали cпасибо satan за это полезное сообщение:
Alisa (05.09.2019),ffff (05.07.2017)
-
05.07.2017, 15:08
#3
Сведущий
Забыл отписаться, помогло, только доступ туда имеет только дилер, пришлось звонить чтоб настройки сделали
-
09.08.2017, 09:34
#4
Разбирающийся
здравствуйте.
обновили семёрку до последней версии. теперь выходит такая же ошибка, хотя в налогах тип выставил. что не так?
Безымянный.jpg
заработало. запустил сервер как приложение и запросил справочники.Последний раз редактировалось Raziel38; 09.08.2017 в 10:08.
Похожие темы
-
Ответов: 2
Последнее сообщение: 19.06.2015, 18:28
-
Ответов: 6
Последнее сообщение: 18.09.2013, 19:10
-
Ответов: 6
Последнее сообщение: 29.12.2012, 08:45
-
Ответов: 2
Последнее сообщение: 01.04.2012, 00:45

Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
- BB коды Вкл.
- Смайлы Вкл.
- [IMG] код Вкл.
- [VIDEO] код Вкл.
- HTML код Выкл.
Правила форума
Ошибки фискального накопителя: расшифровка кодов и способы устранения
Согласно требованиям Федерального закона 54-Ф3, владельцы бизнеса должны применять кассовую технику совместно с фискальным накопителем (ФН). Устройство предназначено для шифрования и хранения сведений о совершенных продажах (фискальных данных) и их отправки ОФД (оператору фискальных данных) для последующей передачи ФНС.
При работе с кассой могут возникать сбои, причинами которых нередко становятся неполадки, связанные с ФН. В таких случаях на чековой бумаге распечатается код ошибки, расшифровав который, можно понять причину возникшей проблемы. В статье рассмотрим, что обозначают коды ошибок ФН, и методы их устранения.
Замена фискального накопителя. Квалифицированные консультации круглосуточно!
Оставьте заявку и получите консультацию в течение 5 минут.
Ошибка ФН 211: как исправить
Код 211 оповещает о некорректном формате сохранения чеков в ФН. Причин может быть несколько:
- связь с накопителем прервана по причине его отсоединения от онлайн-кассы;
- поврежден шлейф, подсоединяющий ФН к кассовому аппарату;
- ФН не фискализирован или его архив закрыт.
Решение. Сначала нужно убедиться в том, что накопитель установлен в соответствующий отсек верно, а целостность шлейфа не нарушена. Затем необходимо проверить статус накопителя, распечатав отчет «Информация о ККТ». Если напротив строки «Фискальный режим закрыт» стоит значение «Да», архив ФН закрыт и требуется установить новый накопитель.
Ошибка ФН 212: как устранить
Неполадка сигнализирует о том, что накопитель находится в неверном состоянии. Рассмотрим возможные причины проблемы и способы ее решения:
- Совершена попытка закрытия смены, которая еще не открывалась. Необходимо выполнить перезагрузку кассы и еще раз открытие смены.
- Соединение с ФН не установлено — обеспечить физическое подсоединение накопителя к ККМ.
- Онлайн-касса не зарегистрирована — поставить ККТ на учет в ФНС.
Если проблема не устранилась, возможно, испорчен сам накопитель либо шлейф подключения его к кассе. Требуется отнести кассовый аппарат в ремонтный центр.
Мы готовы помочь!
Задайте свой вопрос специалисту в конце статьи. Отвечаем быстро и по существу. К комментариям
Как исправить ошибку ФН 217 на ККМ
При открытии смены и выполнении прочих операций фиксируются время и дата. Затем они отражаются в чеках. При сбое настроек может возникнуть ошибка 217.
Причина. Попытка передачи ФД с более ранним временем либо датой, чем те, что указаны в последнем принятом чеке.
Решение. Выставить верную дату и время. Для проверки времени последних чеков рекомендуется распечатать отчет, отображающий состояние расчетов. Для предупреждения неполадки при открытии смены, необходимо проверять актуальность значений даты и времени.
Ошибка ФН 235: как исправить
При формировании ФД кассовый аппарат передает их оператору. Если отправка невозможна (например, нарушена связь с ОФД или торговля осуществляется в уличных условиях, где нет возможности подключения к интернету), передача откладывается. Любой чек должен быть отправлен оператору не позднее 30 суток с момента проведения продажи. По истечении этого срока ФН блокируется.
Причина. Превышено время хранения фискальных данных.
Решение. Отправить все проведенные чеки ОФД. Наладить интернет-соединение и убедиться, что срок действия договора с оператором не истек.
Как устранить ошибку ФН 234
Каждый накопитель содержит в себе ключ фискального признака, находящегося в криптопроцессоре. Он предотвращает фальсификацию фискальных данных и обеспечивает ее безопасность. Поскольку ФН имеет ограниченный срок использования (13, 15 или 36 месяцев), по истечении этого периода происходит исчерпание ресурса КС на кассовом аппарате.
Причина. Срок работы КС ФН истек.
Решение. Выполнить закрытие архива ФН и заменить его новым устройством.
Подберем ФН для вашего бизнеса и заменим за 1 день!
Оставьте заявку и получите консультацию.
Другие ошибки фискального накопителя
Расшифровка других кодов неполадок фискального накопителя представлена в таблице.
Код ошибки | Причина | Решение |
210 | Произошел сбой при обмене информацией с накопителем на уровне интерфейса | Проверить подсоединение ФН к кассе в соответствующем отсеке. Убедиться в целостности шлейфа. Если не удается ликвидировать неисправность — отнести устройство в центр техобслуживания |
213 | Неисправимая неполадка ФН | Закрыть архив неисправного накопителя; установить новый |
214 | Ошибка контрольной суммы | Сменить ФН, предварительно закрыв архив |
218 | В накопителе нет искомого документа | Провести поиск документа по его номеру. Найти его можно в личном кабинете ОФД или сверить с тем, что указан в чеке |
219 | Итог чека переполнен | Требуется замена накопителя |
225, 255 | Номер накопителя, указанный в настройках ККТ, не совпадает с фактическим | Вписать корректный номер ФН |
231 | Неверные параметры команды накопителя. Возможно, ФН не подходит для данного типа системы налогообложения или вида торговой деятельности. Например, при ОСНО нельзя использовать накопитель с 36-месячным сроком работы | Проверить правильность выбора СНО и убедиться в соответствии торговой деятельности требованиям к применению ФН |
215 | Закончился срок службы ФН (он составляет 13,15 или 36 месяцев) | Закрыть архив, согласно инструкции по эксплуатации, заменить ФН |
216 | Эксплуатационный срок ФН еще не подошел к концу, но память заполнена | Заменить ФН после закрытия архива |
232 | Превышение объема фискального документа. Ошибка означает, что количество позиций в чеке превышено | Удалить лишние позиции. При необходимости провести операцию двумя чеками |
233 | Отсутствует транспортная связь с ФН | Восстановить связь с ОФД и повторить запрос |
236 | Невозможен прием сообщения от оператора ФД | Проверить правильность заполнения реквизитов ОФД в настройках ККТ |
237 | Накопитель содержит неотправленные фискальные данные | Подключить ККМ к интернету. Все сведения о продажах автоматически отправятся оператору ФД |
238 | Другие ошибки | Расширенную информацию о неполадке можно получить, задав команду чтения регистра 55, согласно инструкции по эксплуатации ККМ |
Не все сбои, возникающие при работе с ККТ, связаны с поломкой ФН. Часто проблема кроется в самой кассе — при этом код неисправности выводится на дисплей аппарата. Также возможны трудности с кассовыми программами. Например, в «1С: Розница» при открытии смены часто возникает следующая неполадка: «Ошибка определения доступных касс ККМ. Не смогли определить доступные кассы ККМ». Решение проблем с ККТ и кассовыми программами можно доверить специалистам или устранить их самостоятельно с помощью инструкции по эксплуатации.
Подберем фискальный накопитель для вашего бизнеса. Доставим в любую точку РФ!
Оставьте заявку и получите консультацию в течение 5 минут.
Оцените, насколько полезна была информация в статье?
Наш каталог продукции
У нас Вы найдете широкий ассортимент товаров в сегментах
кассового, торгового, весового, банковского и офисного оборудования.
Посмотреть весь каталог
Другие статьи
- Главная
- Полезная информация
- Самоучитель
- Ошибки
Работая с программно-аппаратным комплексом «Р-Кипер», иногда приходится наблюдать всевозможные ошибки. Они могут появляться в различных ситуациях, при сбое в работе аппаратной или программной частях. Что же могло стать причиной такого отказа системы? Попробуем разобраться в этом самостоятельно. В категории приведены наиболее частые коды ошибок в работе программно-аппаратного комплекса R-Keeper.
Ошибки кассовой станции «Р-Кипер»
0 — Не запущен Paradox
Плохой путь в LOCAL или *.LCK.
1— Не могу найти файл cashes.db
2—Нет конфигурации этой станции
В базу данных необходимо добавить имя данного юнита
4—Не могу найти файл базы printers.db
5—Не могу найти файл базы usplink.db
6—Не могу найти файл streams.db
7—Не могу найти файл services.db
9—FF менее 2-х потоков
10—Не могу найти файл system.db
11—Не могу найти директорию «BMPFONTPATH»
12—Не могу найти директорию «DATABASE»
13—Не могу найти директорию «RESULTS»
14—Пустое меню
15—Нет персонала
Добавить персонал
16— Ошибка статьи расходов
16-1—Категория блюда в списке отсутствует
Добавить категорию блюд
17—Защита N 4
18—Сеть не найдена
Проверить подключение к сети
19— Не найден файл базы local.db
Не читаемый файл local.db, следует его перезаписать
20—Нет категорий для блюда
Назначить категории по блюду
21—Файл eoday.db не открывается
22— Совершение работы, после закрытия дня
23— Таблица не открывается
Нужно запустить CORE
24—Имя в сети не возможно получить при запуске системы
Конфликт имен (запущен кассовый сервер с таким же именем)
25—GET, PUT, APPEND не прошел
Проблема с сетью
26—reccount
27—Нет C:dosshare.exe
28—Нарушение контроля версий по SHARE
29—Контроль количества записей
30—Не грузится PXSAVE
31—Не могу найти карту для этого чека
32—Имя ресурса для внутренней печати не верно
34—Ошибка внутренней печати таблиц БД
35—Файлы поддержки языка не найдены
36—Доступное меню не найдено
37—Версии клиентских станций несоответствуют
199—Runtime проблемы с DLL
126—Проблемы с аппаратной частью (железо)
127—Не читается оперативная память, не правильные настройки BIOS и прочее
Вероятно многие встречались с таким вот «партизаном» при старте или завершении приложения:
Очень информативное сообщение, сразу понятна причина ошибки, место и способ ее решения.
Впрочем, если без шуток, что это вообще такое?
Конечно-же это исключение, но ни тип исключения, ни его описание нам не доступны — просто «Runtime error 217» и адрес, а дальше сами…
Если честно, раньше я как-то даже не задумывался по поводу данного исключения, т.к. в моих проектах оно явление редкое, пока однажды у целой череды пользователей не начала воспроизводится именно 217-я ошибка.
Впрочем, даже тогда я не пошел по правильному пути и просто добавил дополнительный уровень логирования в проект, по результатам которого достаточно оперативно нашел причину и исправил ее.
Но, по сути, я просто потратил свое время…
И тратил бы его в дальнейшем, если бы на днях со мной не связался Виктор Федоренков и не рассказал о своих мыслях по поводу ошибки за номером 217.
Теория и анализ проблемы
Без теории нам никуда, иначе можем уткнуться в пределы собственных знаний.
Поэтому начнем, конечно, с теоретической части.
Для начала я немного освежил мои представления об ошибках в принципе, перечитав часть статьи «Обработка ошибок — глава 1.2.2» за авторством Александра Алексеева, откуда вынес информацию о том, что ошибка 217 будет отображена в том случае, если не инициализирован модуль SysUtils, причем это у Александра проиллюстрированно достаточно наглядно:
Открыть картинку в полный размер…
На основании данной картинки можно сделать грубый вывод: пока SysUtils жив — все исключения должны отображаться в нормальном виде, о чем идет отдельное упоминание:
Например, если вы видите сообщение о runtime-ошибке, то, судя по приведённой схеме, маловероятно, чтобы ошибка возникла в обработчиках событий на форме. Зато гораздо вероятнее, что она возникает, скажем, в какой-то секции finalization (которая выполняется после секции finalization модуля SysUtils) или в назначенной процедуре ExitProcessProc. Но, разумеется, причина ошибки может сидеть где угодно — в том числе и в упоминаемых обработчиках событий.
Ну что-ж давайте проверим, пишем код, в котором SysUtils должна быть финализирована позже модуля Unit1, в котором искусственно генерируем исключение:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
initialization
finalization
raise Exception.Create('finalization exception');
end.
Билдим, запускаем, закрываем форму и… Runtime error 217.
Утверждение о том, что 217 отображается после финализации SysUtils полностью верное, но давайте-ка посмотрим на сам код финализации:
procedure FinalizeUnits;
...
begin
...
Count := InitContext.InitCount;
Table := InitContext.InitTable^.UnitInfo;
...
try
while Count > 0 do
begin
Dec(Count);
InitContext.InitCount := Count;
P := Table^[Count].FInit;
if Assigned(P) then
...
TProc(P)();
...
end;
end;
except
FinalizeUnits; { try to finalize the others }
raise;
end;
end;
Смотрите что происходит: в процедуре FinalizeUnits вызываются все финализирующие процедуры, адреса которых расположены в массиве InitContext.InitTable^.UnitInfo в том порядке, в котором происходила их инициализация, т.е. самые первые расположены в начале массива (а финализация идет с конца).
Где-то в самом низу расположен и SysUtils + System, ну а мы, с нашим модулем Unit1 где-то в самом верху.
Но вдруг происходит исключение в нашем модуле и «бабах», порядок катарсиса нарушен.
После «бабах» FinalizeUnits вызывается повторно, пропуская наш модуль, вызвавший исключение, вследствие чего разрушается SysUtils и разные, встречающиеся по пути, class destructor-ы, до кучи грохается System с менеджером памяти (сидящий одним из первых в начале списка), после чего идет контрольный выстрел в лоб — RAISE, вот тут-то мы и приплыли — здравствуй 217.
А что если произойдет исключение в секции инициализации любого модуля?
Да все тоже самое:
procedure InitUnits;
...
begin
...
try
...
except
FinalizeUnits;
raise;
end;
end;
Делаем вывод: любое необработанное исключение в секциях инициализации или финализации будет приводить к потере описания исключения и приводить к ошибке 217.
На этом с теорией, думаю, закончим.
Имея на руках понимание о причине возникновения Runtime error 217, попробуем получить на руки более привычный нам вариант сообщения об исключении.
Отключаем финализацию модулей
В самом начале обсуждения Виктором был предложен достаточно эффективный способ обхода данной ошибки.
Его анализ заключался в следующем: общая инициализация обработчика исключений производится в процедуре InitExceptions модуля SysUtils, а финализация вызовом DoneExceptions.
Если каким либо образом отключить вызов DoneExceptions плюс не дать разрушиться менеджеру памяти, заблокировав вызов блока финализации System — на руки мы получим сообщение об исключении в приемлимом виде.
Как вариант решения был предложен следующий код, который нужно подключить к файлу проекта самым первым модулем (будет работать начиная с D2005 и выше):
unit suShowExceptionsInInitializeSections;
interface
uses
SysUtils;
implementation
uses
Windows;
//Получение структуры PackageInfo нашего приложения
//В System она находится в переменной InitTable, но не видна из других модулей
function GetInitTable: PackageInfo;
var
Lib: PLibModule;
TypeInfo: PPackageTypeInfo;
begin
Result := nil;
Lib := LibModuleList;
if not Assigned(Lib) then
Exit;
//Если загружено несколько модулей (BPL пакетов), то выходим,
//я не изучал как работает механизм загрузки/выгрузки BPL, поэтому на всякий
//случай выходим
if Assigned(Lib^.Next) then
Exit;
Typeinfo := Lib^.TypeInfo;
if Assigned(TypeInfo) then
begin
//Мы имеем TPackageTypeInfo
//Теперь по нему можно получить PackageInfo
//Воспользуемся особенностями компилятора.
//В IDA видно, что ссылка TypeInfo указывает на середину структуры
//PackageInfo программы
//Поэтому для того что бы вычислить PackageInfo нужно вычесть из адреса
//TypeInfo смещение этого поля
Result := PackageInfo(PByte(TypeInfo) - (LongWord(@PackageInfoTable(nil^).TypeInfo)));
end;
end;
//Отключить секцию финализации для всех модулей
procedure DisableAllFinalization;
var
Loop: Integer;
OldProtect: LongWord;
InitTable: PackageInfo;
Table: PUnitEntryTable;
begin
InitTable := GetInitTable;
if Assigned(InitTable) then
begin
Table := InitTable^.UnitInfo;
if Assigned(Table) then
//Разрешаем изменять структуру в которой хранятся ссылки на инициализаю/финализацию всех юнитов
if VirtualProtect(Table, SizeOf(PackageUnitEntry) * InitTable^.UnitCount,
PAGE_READWRITE, OldProtect) then
for Loop := 0 to InitTable^.UnitCount - 1 do
Table^[Loop].FInit := nil;
end;
end;
initialization
finalization
//Сейчас идет финализация всех модулей, модуль SysUtils создан раньше, поэтому
//он еще не финализирован. Наша задача здесь не дать ему финализироваться,
//Как и другим модулям которые он использует (интересует только System),
//это нужно для правильной отработки обработчиков исключений.
//Сюда мы можем попасть по двум причинам
//1. Произошел Exception во время инициализации каком-то модуля
//2. Нормальное завершение программы
//
//Мы не будем определять причину, так как процесс все равно завершается, а ОС
//сама освободит занятые ресурсы после смерти процесса.
//Но нужно иметь ввиду, данную технику использовать в DLL нельзя, что бы не
//допускать утечек памяти
if IsLibrary then
Exit;
//Мы не можем выборочно заблокировать финализацию юнитов по их имени
//так как нет соответствующих данных в RTTI. Тем не менее, мы можем отключить
//финализацию всех юнитов, которые идут в списке до этого
//модуля. Таким образом если данный модуль расположить первым в DPR файле,
//то мы минимизируем утечки.
//Вычислять адрес процедуры финализации данного юнита не обязательно,
//ведь к моменту выполнения данного кода уже финализированы все следующие юниты.
//Поэтому просто заблокируем финализцию всех оставшихся
DisableAllFinalization;
end.
Если честно — аплодировал стоя.
Вот он: хак в самом грязном виде как он есть — такие вещи могут делать только те, кто действительно понимает, чем это грозит
И данный модуль вывел работу нашего IT отдела примерно на три часа — это была жесткая дискуссия
Но, впрочем, давайте разберем логику работы данного кода:
Суть его проста, необходимо выйти на данные о загруженных модулях (включая BPL) в том виде, в котором их понимает Delphi приложение. Это было сделано посредством доступа к началу однонаправленного списка структур TLibModule. Первым элементом списка будет структура, описывающая текущий образ, откуда нам нужно всего-то и получить данные о структуре UnitInfo, которая содержит в себе данные как о количестве инициализированных модулей, так и об адресах их процедур инициализации и финализации в виде записи PackageUnitEntry.
Блокирование финализации модулей происходит посредством присвоения параметру FInit значения nil у каждой записи PackageUnitEntry.
При обниливании данного параметра FinalizeUnits не сможет произвести вызов обработчика и в итоге тот самый raise, о котором я писал выше, сможет достаточно корректно произвести отображение возникшего исключения.
Но вот дальше все сложнее.
Пытаемся причесать хорошую мысль
Идея здравая и причины понятны, но вот как-же так, ресурсы все-же не освобождены, FastMem перестанет нормально работать (она собирает утечки как раз при финализации), да и совместимости маловато, к примеру, как я и сказал выше, под Delphi 7 данный код вообще работать не сможет.
После первого часа обсуждений в IT отделе мы даже умудрились прийти и к такому выводу: «да и хрен с ними с SysUtils и System — что-то критичного они за собой не несут».
А потом, опять начали спорить — ну не устраивал нас этот подход, вроде все хорошо, но не аккуратненько как-то.
Рассматривались даже варианты прямого сплайсинга блоков финализации и до кучи деструктора Exception — но дополнительный хак, на уже существующий хак не устраивал вообще никого.
И тут, сидя в отладчике и прогоняя код по 70-му разу пришла мысля.
Дык эта… а как вообще выводится сообщение о произошедшем исключении?
А выводится оно посредством передачи управления на ExceptHandler, в коде которого нет ничего секретного.
А что мы делаем убирая финализацию модулей?
Правильно, заставляем вызваться его-же.
Попробуем-ка проэмулировать вызов ExceptHandler.
Пишем тестовый юнит и подключаем его к проекту самым первым:
unit Test;
interface
uses
SysUtils;
var
E: Exception;
implementation
initialization
finalization
E := AcquireExceptionObject;
if E <> nil then
begin
ShowException(E, ExceptAddr);
E.Free;
Halt(1);
end;
end.
Запускаем на выполнение и…
Получилось.
Встроившись в цикл финализации, мы отобразили произошедшее исключение и продолжили финализацию дальше вызовом Halt(1).
В итоге задача решена, грамотно и документировано, и совместимо с Delphi 7, но…
А не развить ли идею?
Есть такое понятие, как «наведенные ошибки», т.е. ошибки произошедшие из-за того что перед ними тоже произошла ошибка.
Ну к примеру, функция А, которая должна возвращать экземпляр некоего класса и функция Б, использующая этот экземпляр в работе. К примеру в функции А произошло необработанное исключение (например нет доступа к файлу) и она не создала класс, а потом где-то гораздо позже по коду приложения процедура Б выполняет обращение к этому экземпляру и в итоге происходит Access Violation.
Тоже самое может произойти и в процедурах инициализации/финализации, причем исключение, произошедшее в финализации скроет от нас саму причину.
Для демонстрации напишем вот такой код, в котором при инициализации приложения будет создаваться некий логер, в который будут писаться этапы работы приложения, а в финализации будет запись о завершении работы.
Для генерации исключения заставим логер создаваться по несуществующему пути:
uses
Classes;
var
Logger: TFileStream;
const
StartLog: AnsiString = 'Начало работы приложения' + sLineBreak;
EndLog: AnsiString = 'Работа приложения завершена' + sLineBreak;
implementation
initialization
Logger := TFileStream.Create('A:MyLog,txt', fmCreate);
Logger.WriteBuffer(StartLog[1], Length(StartLog));
finalization
Logger.WriteBuffer(EndLog[1], Length(EndLog));
Logger.Free;
end.
Мало у кого в системе присутствует диск «А» поэтому результатом этого кода будет либо «Runtime error 216» (именно 216, а не 217), либо, если подключим код из предыдущей главы:
Exception EAccessViolation in module Project2.exe at 001B1593.
Access violation at address 005B1593 in module ‘Project2.exe’. Read of address 00000000.
А ведь причина то кроется в самом первом исключении, которое нами не отображается и с наскока разобраться в причине ошибки не получится.
Для того чтобы исправить эту несправедливость, можно немного причесать код и довести его до вот такого состояния:
unit ShowExceptSample;
interface
uses
SysUtils,
Classes;
implementation
type
PRaiseFrame = ^TRaiseFrame;
TRaiseFrame = packed record
NextRaise: PRaiseFrame;
ExceptAddr: Pointer;
ExceptObject: TObject;
ExceptionRecord: PExceptionRecord;
end;
var
// Указатель на вершину списка исключений
CurrentRaiseList: Pointer = nil;
// Функция возвращяет текущее исключение со стека
function GetNextException: Pointer;
begin
if CurrentRaiseList = nil then CurrentRaiseList := RaiseList;
if CurrentRaiseList <> nil then
begin
Result := PRaiseFrame(CurrentRaiseList)^.ExceptObject;
PRaiseFrame(CurrentRaiseList)^.ExceptObject := nil;
CurrentRaiseList := PRaiseFrame(CurrentRaiseList)^.NextRaise;
end
else
Result := nil;
end;
var
ExceptionStack: TList;
E: Exception;
initialization
finalization
// Смотрим, есть ли вообще исключения?
E := GetNextException;
if E <> nil then
begin
ExceptionStack := TList.Create;
try
// если есть, собираем о них информацию
while E <> nil do
begin
ExceptionStack.Add(E);
E := GetNextException;
end;
// и отображаем их в том порядке, в котором они произошли
while ExceptionStack.Count > 0 do
begin
E := ExceptionStack[ExceptionStack.Count - 1];
ExceptionStack.Delete(ExceptionStack.Count - 1);
ShowException(E, ExceptAddr);
E.Free;
end;
finally
ExceptionStack.Free;
end;
// финализируем все что осталось
Halt(1);
end;
end.
Здесь идея проста, функция GetNextException по сути повторяет вызов AcquireExceptionObject, но после своего вызова не теряет ссылку на следующее в очереди исключение, а запоминает адрес следующего фрейма во внешней переменной.
После чего все исключения заносятся в список (самое последнее будет первым в списке) и выводятся программисту с соблюдением очередности, в результате чего нам будет сразу понятно, что сначала произошло вот это:
И уже только после него пошли всякие там AV.
Теперь по поводу остальных кодов ошибок.
Почему я начал именно с «Runtime error 217»?
Ну потому что она наиболее легко воспроизводима, а так технически, используя выше приведенный модуль, мы получим на руки вполне нормальное описание всех возможных Runtime ошибок, коих в наличии у нас вон сколько:
reMap: array [TRunTimeError] of Byte = (
0, { reNone }
203, { reOutOfMemory }
204, { reInvalidPtr }
200, { reDivByZero }
201, { reRangeError }
{ 210 Abstract error }
215, { reIntOverflow }
207, { reInvalidOp }
200, { reZeroDivide }
205, { reOverflow }
206, { reUnderflow }
219, { reInvalidCast }
216, { reAccessViolation }
218, { rePrivInstruction }
217, { reControlBreak }
202, { reStackOverflow }
220, { reVarTypeCast }
221, { reVarInvalidOp }
222, { reVarDispatch }
223, { reVarArrayCreate }
224, { reVarNotArray }
225, { reVarArrayBounds }
{ 226 Thread init failure }
227, { reAssertionFailed }
0, { reExternalException not used here; in SysUtils }
228, { reIntfCastError }
229, { reSafeCallError }
235, { reMonitorNotLocked }
236 { reNoMonitorSupport }
{$IFDEF PC_MAPPED_EXCEPTIONS}
{ 230 Reserved by the compiler for unhandled exceptions }
{$ENDIF PC_MAPPED_EXCEPTIONS}
{$IF defined(PC_MAPPED_EXCEPTIONS) or defined(STACK_BASED_EXCEPTIONS)}
{ 231 Too many nested exceptions }
{$ENDIF}
{$IF Defined(LINUX) or Defined(MACOS)}
{ 232 Fatal signal raised on a non-Delphi thread }
,
233 { reQuit }
{$ENDIF LINUX or MACOS}
{$IFDEF POSIX}
,
234 { reCodesetConversion }
{$ENDIF POSIX}
,
237, { rePlatformNotImplemented }
238 { reObjectDisposed }
);
Итог
Вот таким небрежным кодом, мы можем получить то, о чем нам не хочет говорить ошибка под кодом 217.
Впрочем, я не думаю что этот подход будет незнаком опытным программистам.
Скорее всего это — здравствуй велосипед, ибо вероятнее всего данная проблема кем-то уже решалась ранее, но я просто не знал о данном решении.
А если нет — значит буду вторым.
Отдельный респект соавтору и вдохновителю данной статьи — Виктору Федоренкову.
Удачи.
В соответствии с предписаниями ФЗ №54, собственники бизнеса должны использовать контрольно-кассовые машины (далее — ККМ) нового образца, имеющие фискальный накопитель (далее — ФН), а также возможность выхода в интернет. Устройство используется для кодирования и записи сведений о совершённых кассовых операциях, а также для последующей их отправки оператору фискальных данных (далее — ОФД). После обработки полученных данных, оператор передаёт их в ФНС.
При работе на ККМ пользователь может периодически сталкиваться с неполадками ,связанными с ФН. Тогда касса печатает на документе код ошибки, который указывает пользователю на ту или иную проблему. Ниже мы расскажем о том, что значат конкретные кода ошибок ФН и разберём пути их решения.
Пути решения ошибки ФН 211
Ошибка ФН 211 сообщает пользователю о неправильном формате хранения документов в ФН.
Причины возникновения ошибки:
-
Соединение с ФН было потеряно по причине того, что он был отсоединён от ККМ.
-
Повредился шлейф, соединяющий ФН с ККМ.
-
Накопитель не был фискализован, либо был закрыт архив ФН.
Пути решения неполадок. Для начала пользователю необходимо проверить, что ФН подключён, а шлейф, которым он подсоединён, цел. После чего следует осуществить проверку статуса ФН, выпустив отчёт «Информация о ККТ». Если в строке «Фискальный режим закрыт» выставлено «Да», это означает, что ФН был закрыт, и необходимо произвести его замену, поставив новый.
Пути решения ошибки ФН 212
Ошибка сообщает о том, что ФН имеет неверное состояние. Разберём вероятные причины данной ошибки и пути их решения:
-
Пользователь попытался закрыть смену, хотя она ещё не была открыта. Требуется осуществить перезагрузку устройства, после чего заново открыть смену.
-
Соединения с ФН не установлено – требуется убедиться в том, что чип подсоединён к ККМ.
-
ККМ не зарегистрирована – зарегистрировать ККМ в ФНС.
Если после всех манипуляций проблема не была решена, это может значить, что ФН был сломан, либо шлейф не подсоединён к ККМ. В таком случае необходимо отнести аппарат в сервисный центр.
Пути решения ошибки ФН 217
Во время открытия смены, либо осуществления других кассовых операций, ККМ фиксирует время и дату, после чего отображает эти данные в ФД. В случае если происходит сбой хронометрических данных, возникает ошибка 217. Причиной этому может послужить ситуация, когда ККМ передаёт чек с более ранним временем или датой, чем те, что были проставлены на последнем принятом ФД.
Для исправления ситуации пользователю необходимо выставить в настройках правильное время и дату. Чтобы узнать, какое время проставлено в последних ФД, пользователю необходимо выпустить отчет, в котором отображено состояние расчётов. Чтобы предупредить неполадки при открытии смены, требуется убедиться в правильности значений даты и времени.
Пути решения ошибки ФН 235
При создании ФД, ККМ перенаправляет их ОФД. Если пересылка невозможна (к примеру, отсутствует связь с оператором, либо торговля ведётся на улице, где нельзя подсоединиться к сети), то устройство откладывает пересылку. Все ФД должны пересылаться ОФД на позже одного месяца с момента операции, если же чек не будет отправлен вовремя, чип заблокируется.
Причиной данной ошибки может послужить превышение времени хранения данных.
Для исправления ситуации, требуется переслать все проведённые ФД оператору. Настроить интернет-соединение и проверить, не истёк ли срок действия соглашения с ОФД.
Пути решения ошибки ФН 234
Все ФН содержат в себе ключ фискального признака, который находится в криптопроцессоре. Он не позволяет сфальсифицировать ФД и гарантирует безопасность информации. ФН имеет ограниченный срок работы (13, 15 и 36 месяцев), и когда этот срок выходит, устройство блокируется.
Причиной ошибки 234 является окончание срока работы или ресурса памяти ФН.
Для исправления ситуации требуется произвести закрытие архива, после чего заменить чип новым.
Другие ошибки фискального накопителя
Ниже в таблице мы привели кода других популярных ошибок, причины их возникновения и пути решения.
Код ошибки |
Причина возникновения |
Пути решения |
210 |
Во время обмена данными с ФН на уровне интерфейса случился сбой |
Убедиться в том, что ФН подключён к ККМ, а также проверить целостность шлейфа. Если исправить неполадку не вышло, необходимо отнести устройство в сервисный центр. |
213 |
Ошибка ФН неисправен |
Требуется произвести закрытие архива и заменить нерабочий чип новым |
214 |
Ошибка контрольной суммы |
Требуется произвести закрытие архива и заменить нерабочий чип новым |
218 |
Запрашиваемый документ не найден |
Проверить, правильно ли внесён номер документа и повторить запрос |
219 |
Итог ФД переполнен |
Необходимо произвести замену ФН |
225, 255 |
Номер ФН, внесённый в настройки ККМ, не совпадает с фактическим |
Указать правильный номер ФН |
231 |
Неправильные характеристики команды накопителя. Вероятно ФН не подходит для используемого вида налоговой системы или типа торговой деятельности. К примеру, при OCHO нельзя пользоваться ФН со сроком действия 36 месяцев |
Убедиться в корректности выбранного налогового режима, а также в соответствии торговой деятельности предписаниям по использованию ФН |
215 |
Истек срок действия ФН |
Требуется произвести закрытие архива и заменить чип новым |
216 |
Переполнена фактическая память ФН |
Требуется произвести закрытие архива и заменить чип новым |
232 |
Был превышен объём ФД. Ошибка говорит о том, что количество позиций в ФД превышено |
Убрать лишние строки. В случае необходимости, разбить покупку на два или более ФД |
233 |
Нет соединения с ФН |
Восстановить соединение с оператором, после чего попробовать повторить запрос |
236 |
Нельзя получить сообщение от ОФД |
Проверить, корректно ли заполнены реквизиты оператора в настройках ККМ |
237 |
В памяти ФН содержатся непреданные ФД |
Подсоедините ККМ к сети, после чего все данные о совершённых кассовых операциях будут пересланы ОФД |
238 |
Иные ошибки |
Расширенные данные о неполадке можно получить, выставив команду чтения регистра 55, в соответствии с руководством по использованию ККМ |
Не все неполадки, которые возникают во время использования ККМ, могут быть связаны с поломкой ФН. Иногда неполадка может заключаться в самой ККМ – при этом код ошибки отображается на экране устройства. Также трудности в работе могут возникнуть из-за сбоев кассового ПО. К примеру, в «1С: Розница» при открытии смены может возникнуть такая неполадка, как: «Ошибка определения доступных касс ККМ. Не смогли определить доступные кассы ККМ». В случае появления данного сообщения ,лучше обратиться за помощью к специалистам сервисного центра.
Наш каталог продукции
У нас Вы найдете широкий ассортимент товаров в сегментах кассового, торгового, весового, банковского и офисного оборудования
Те, кто работает с онлайн-кассами, уже могли столкнуться с тем, что фискальный накопитель (ФН) может выдавать ошибку. Что удобно, обычно ФН в этот момент печатает на чековой ленте код ошибки – при этом номера при одинаковой ошибке будут совпадать у разных касс независимо от производителя. Т.е. перечень кодов ошибок у касс «Эвотор» будет таким же, как у ККТ «АТОЛ», Viki Print и т.д.
Мы разберем самые популярные ошибки фискального накопителя, в числе которых ошибки с кодом 235, 234, 231, 210, 211 и 212.
Ошибка ФН с кодом 235 «Ресурс хранения данных исчерпан»
Ошибка 235 означает, что на фискальном накопителе есть запись, которая в течение 30 дней не была отправлена ОФД. Если такая запись есть, закрыть смену невозможно, а работа кассы блокируется.
Чтобы решить ошибку, проверьте:
- Связь с оператором фискальных данных;
- Наличие интернет-соединения;
- Исправность фискального накопителя.
Чтобы проверить связь с ОФД, необходимо снять отчет по диагностике соединения с ОФД. Данный отчет должен содержать информацию о том, сколько чеков не было передано, с какого числа и состояние канала связи.
Причинами неполадок могут быть неверно указанные реквизиты ОФД, неоплата тарифа или истекший срок договора с оператором, либо проблемы на сервере ОФД.
Если причина в неполадках с Интернетом, нужно проверить следующее:
- Настройки инициализации и соединения с маршрутизатором, исправность проводного или беспроводного соединения.
- Работу SIM-карты: установлена ли она, исправна.
- Средства на балансе сотового оператора или интернет-провайдера.
- Работоспособность оборудования на стороне провайдера – для этого обратитесь в техподдержку обслуживающей вас компании.
- Для касс «АТОЛ» – проверить, установлено ли приложение EthernetOverUSB либо EthernetOverTransport и корректность его работы.
- Для касс VikiPrint – проверить, запущенно ли приложение ComProxy и корректность его работы.
- Для касс «Штрих-М» – проверить корректность настройки RNDIS.
Если ни один из пунктов не помог обнаружить проблему, и срок гарантии ФН не истек, то неисправность может быть в самом фискальном накопителе (но это крайне редкий случай). В этом случае можно обратиться в сервисный центр для замены ФН по гарантии.
Ошибка ФН с кодом 234 «Исчерпан ресурс криптопроцессора ФН»
Если на фискальном регистраторе появилась ошибка 234 «Исчерпан ресурс криптографического сопроцессора ФН» (или «Исчерпан ресурс КС») — это значить что истек срок действия ФН и его необходимо заменить.
Сделать это можно следующим образом:
- посмотреть дату и время последнего документа в ФН;
- перевести дату в кассе на день последнего чека, время — на время несколько позже последнего документы;
- закрыть смену при необходимости;
- дождаться отправки всех документов в ОФД;
- закрыть архив ФН;
- зарегистрировать кассу с новым установленным ФН.
Если не получится сделать самостоятельно, необходимо обратиться в обслуживающую организацию.
Ошибка ФН с кодом 231 «Некорректное значение параметров команды ФН»
Такая ошибка может возникнуть, если вы попытается установить фискальный накопитель, не подходящий для вашего вида торговой деятельности или типа налогообложения. Например, если вы занимаетесь торговлей на общей системе налогообложения, то вы не сможете использовать ФН на 36 месяцев.
Убедитесь, что вы выбрали подходящий по параметрам ФН и проверьте корректность передачи системы налогообложения.
Ошибка ФН с кодом 210 «Ошибка обмена с ФН на уровне интерфейса I2C»
Проверьте, подключен ли фискальный накопитель к онлайн-кассе: он либо отключился от нее, либо неисправен шлейф подключения. Если неисправен шлейф, его нужно будет заменить в сервисном центре.
Также причиной ошибки 210 может стать переполнение внутреннего буфера фискального накопителя. Такое может произойти, если накопитель больше месяца не использовался, а потом было пробито много чеков. В таком случае после включения кассового нужно подождать 10-15 минут.
Третий вариант – устарела прошивка фискального накопителя, потребуется ее обновить.
Либо сам механизм ФН вышел из строя, о чем точнее вы можете узнать в сервисном центре.
Ошибка ФН с кодом 211 «Ошибка формата передачи ФН»
Эта ошибка может возникнуть в двух случаях:
- Если фискальных накопитель отсоединился от кассы (нужно проверить подключение).
- Сломался шлейф для подключения ФН, нужно его заменить.
Ошибка ФН с кодом 212 «Неверное состояние ФН»
Вот основные причины, по которым может возникнуть ошибка с кодом 212:
- Попытка закрыть смену, которая не была открыта. Чтобы это исправить, нужно выключить онлайн-кассу, включить и открыть смену.
- Возможно, нет связи с фискальным накопителем: нужно проверить, подключен ли шлейф к ФН и к самой онлайн-кассе.
- Ошибки при регистрации кассового аппарата могут привести к некорректной работе ФН.
- Может быть неисправен сам фискальный накопитель или шлейф для подключения к онлайн-ККТ.
Ошибки ФН с кодами 213, 214, 215 и 216
Может помочь перезагрузка кассового аппарата по питанию.
Если это не помогло для решения этих ошибок нужно закрыть архив фискального накопителя и заменить ФН.
Ошибка ФН с кодом 217 «В ФН переданы неверная дата или время»
Нужно проверить, верно ли выставлены в кассе параметры даты и времени и настроить их верно.
Ошибка ФН с кодом 218 «В ФН нет запрошенных данных»
Ошибка может возникнуть при попытке найти документ, которого нет в накопителе. При поиске документов ориентируетесь на номер фискального документа.
Ошибка ФН с кодом 219 «Переполнение ФН (итог чека)»
Фискальный накопитель переполнен, его требуется заменить.
Ошибки ФН с кодами 225, 255 «Неверный номер ФН»
Скорее всего, номер ФН, вписанный в настройки кассы, не совпадает с реальным номером накопителя. Нужно указать правильный номер.
Ошибка ФН с кодом 232 «Превышение размеров данных ФН, передаваемых в формате TLV»
Количество данных, которые ФН может отправить одним пакетом, ограничен. Такая ошибка может возникнуть, если кассир пытается пробить чек со слишком большим количеством позиций.
Ошибка ФН с кодом 233 «Нет транспортного соединения с ФН»
Чтобы убрать эту ошибку, нужно установить транспортное соединение с оператором фискальных данных, затем отправить на ФН соответствующую команду.
Ошибка ФН с кодом 236 «Сообщение от ОФД не может быть принято ФН»
Причиной может послужить неверно указанные параметры ОФД, их нужно исправить.
Ошибка ФН с кодом 237 «В ФН есть неотправленные фискальные документы»
Настройте подключение кассы к Интернету и убедитесь, что все данные с ФН отправлены ОФД. Проверить это поможет отчет о текущем состоянии расчетов.
Ошибка ФН с кодом 238
Этот код означает, что узнать более подробную информацию об ошибке можно с помощью команды чтения регистра 55.
Не хотите останавливать работу кассы и разбираться с возникающими ошибками фискального накопителя? Оформите договор регулярного сопровождения – все проблемы с ошибками ФН решит технический специалист из авторизованного сервисного центра!
Подключить техподдержку
Причину отказа работы системы R-Keeper поможет выявить код ошибки, выдаваемый программой:
Код |
Ошибка |
Устранение |
0 |
Не запущен PARADOX |
Часто плохой путь в LOCAL или плохие *.LCK. |
1 |
Нет файла CASHES.DB |
|
2 |
Нет конфигурации этой станции |
Необходимо добавить имя данного юнита в БД. |
4 |
Не найден файл PRINTERS.DB |
|
5 |
Не найден файл USPLINK.DB |
|
6 |
Не найден файл STREAMS.DB |
|
7 |
Не найден файл SERVICES.DB |
|
8 |
Не найден файл PRINTERS.DB |
|
9 |
Для FF менее 2-х потоков |
|
10 |
Не найден файл SYSTEM.DB |
|
11 |
Нет директории «BMPFONTPATH» |
|
12 |
Нет директории DATABASE |
|
13 |
Нет директории RESULTS |
|
14 |
Пустое меню |
Как правило, говорит о том, что меню, которое закачалось из базы данных кассовым сервером пустое. Необходимо завести меню в менеджере R-Keeper. |
15 |
Нет персонала |
Завести персонал. |
16 |
Проблемы со статьями расходов |
|
16-1 |
Категория блюда в списке отсутствует (название блюда указано в сообщении) |
|
17 |
Защита N 4 |
|
18 |
Проблемы с сетью |
|
19 |
Не открылся LOCAL.DB |
Битый LOCAL.DB необходимо его перезаписать. |
20 |
Нет категории для блюда |
Для блюда, которое пытаются пробить, отсутствует категория. Выбирается в меню блюда без категорий. Если же блюда без категорий отсутствуют, то категории данным блюдам надо назначить. Если этого не получается, то надо править базу. |
21 |
Не открылся EODAY.DB |
|
22 |
Попытка работать после закрытия дня |
Говорит о том, что день на этой кассе уже закрыт, и работать на ней нельзя до закрытия всего дня на сервере. Если надо отменить закрытие, закидывается чистый EODAY.DB. |
23 |
Не открылась таблица |
Следует запустить COR. |
24 |
Сетевое имя не получено при запуске |
Говорит о том, что в сети присутствует уже такое имя. Запущен кассовый сервер с таким же кассовым именем. |
25 |
GET, PUT, APPEND не прошел |
Проблемы с сетевым подключением. КАК вариант не работает сетевая карта или неверные пути. |
26 |
RECCOUNT |
Не прошел. |
27 |
Нет C:DOSSHARE.EXE |
|
28 |
Контроль версий файлов нарушен по SHARE |
|
29 |
Контроль количества записей |
|
30 |
Не прошел PXSAVE |
|
31 |
Не найдена карта для этого чека (при CARDPAY) |
|
32 |
Неверное имя ресурса для внутренней печати |
|
33 |
Ошибка создания таблиц внутренней печати |
|
34 |
День сервера закрыт или начато закрытие. |
Перегрузить сервер. Сервер прекратит закрытие дня и его надо будет закрыть вновь предварительно проверив дату и баланс. Скорее всего, говорит о том, что главную кассу, на которой закрывали день, слишком быстро выключили и включили. |
35 |
Не найден файл языковой поддержки |
|
36 |
Не найдено доступного меню |
Говорит о том, что отсутствует доступ к меню на данной станции и она не может найти меню предназначенной для нее. Проверьте в редакторе «МЕНЮ». «ДОСТУП К МЕНЮ» имеется ли для станции хоть одно свободное меню. |
37 |
Несоответствие версий станции и клиента |
Необходимо привести версии в соответствие. |
199 |
Как RUNTIME проблемы с DLL |
|
126 |
«Железо» |
|
127 |
«Железо» |
Проблемы с памятью, с настройками BIOS и т.п. |