Ошибка 217 r keeper не получается напечатать чек

Добрый день Поставил новый ФР настроил через Rs232 , через универсальный драйвер, FiscRegTypeId 155 RK 7.5.7.65 Фр кассой видится, можно распечатать X отчет, но при попытке провести оплату выдает следующую ошибку Ошибка 217 Не получается напечатать чек: Ошибка фискальной печати: Операция: PrintFiscalReicept Ошибка 200 Логическая ошибка (0xC8) : wrong Item "Пирожок ..." Tax index 0 value 0 ? but must in
  • Главная
  • Форум
  • Основной форум компании CARBIS
  • R-Keeper 7
  • R-Keeper 7 и фискальные регистраторы, а также чеки и пречеки
  • Штрих М01ф Обибка 217 при оплате

  1. 30.06.2017, 10:15


    #1

    ffff вне форума


    Сведущий


    Штрих М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]

    не фискальная часть печатается , фискальная нет

    подскажите где я мог ошибиться
    как исправить


  2. 30.06.2017, 10:38


    #2

    satan вне форума


    Разбирающийся


    В налоговых ставках фискальный тип выставить больше нуля, согласно настройкам ФР


  3. 2 пользователей сказали cпасибо satan за это полезное сообщение:

    Alisa (05.09.2019),ffff (05.07.2017)


  4. 05.07.2017, 15:08


    #3

    ffff вне форума


    Сведущий


    Забыл отписаться, помогло, только доступ туда имеет только дилер, пришлось звонить чтоб настройки сделали


  5. 09.08.2017, 09:34


    #4

    Raziel38 вне форума


    Разбирающийся


    здравствуйте.
    обновили семёрку до последней версии. теперь выходит такая же ошибка, хотя в налогах тип выставил. что не так?
    Безымянный.jpg
    заработало. запустил сервер как приложение и запросил справочники.

    Последний раз редактировалось Raziel38; 09.08.2017 в 10:08.


Похожие темы

  1. Ответов: 2

    Последнее сообщение: 19.06.2015, 18:28

  2. Ответов: 6

    Последнее сообщение: 18.09.2013, 19:10

  3. Ответов: 6

    Последнее сообщение: 29.12.2012, 08:45

  4. Ответов: 2

    Последнее сообщение: 01.04.2012, 00:45


Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
  • BB коды Вкл.
  • Смайлы Вкл.
  • [IMG] код Вкл.
  • [VIDEO] код Вкл.
  • HTML код Выкл.

Правила форума

Ошибки фискального накопителя: расшифровка кодов и способы устранения

Согласно требованиям Федерального закона 54-Ф3, владельцы бизнеса должны применять кассовую технику совместно с фискальным накопителем (ФН). Устройство предназначено для шифрования и хранения сведений о совершенных продажах (фискальных данных) и их отправки ОФД (оператору фискальных данных) для последующей передачи ФНС.

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

Замена фискального накопителя. Квалифицированные консультации круглосуточно!

Оставьте заявку и получите консультацию в течение 5 минут.

Ошибка ФН 211: как исправить

Код 211 оповещает о некорректном формате сохранения чеков в ФН. Причин может быть несколько:

  • связь с накопителем прервана по причине его отсоединения от онлайн-кассы;
  • поврежден шлейф, подсоединяющий ФН к кассовому аппарату;
  • ФН не фискализирован или его архив закрыт.

Решение. Сначала нужно убедиться в том, что накопитель установлен в соответствующий отсек верно, а целостность шлейфа не нарушена. Затем необходимо проверить статус накопителя, распечатав отчет «Информация о ККТ». Если напротив строки «Фискальный режим закрыт» стоит значение «Да», архив ФН закрыт и требуется установить новый накопитель.

Ошибка ФН 212: как устранить

Неполадка сигнализирует о том, что накопитель находится в неверном состоянии. Рассмотрим возможные причины проблемы и способы ее решения:

  1. Совершена попытка закрытия смены, которая еще не открывалась. Необходимо выполнить перезагрузку кассы и еще раз открытие смены.
  2. Соединение с ФН не установлено — обеспечить физическое подсоединение накопителя к ККМ.
  3. Онлайн-касса не зарегистрирована — поставить ККТ на учет в ФНС.

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

Мы готовы помочь!

Задайте свой вопрос специалисту в конце статьи. Отвечаем быстро и по существу. К комментариям

Как исправить ошибку ФН 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.

Ошибки в 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.jpg

Пути решения ошибки ФН 211

Ошибка ФН 211 сообщает пользователю о неправильном формате хранения документов в ФН. 

Причины возникновения ошибки:

  • Соединение с ФН было потеряно по причине того, что он был отсоединён от ККМ.

  • Повредился шлейф, соединяющий ФН с ККМ. 

  • Накопитель не был фискализован, либо был закрыт архив ФН.

Пути решения неполадок. Для начала пользователю необходимо проверить, что ФН подключён, а шлейф, которым он подсоединён, цел. После чего следует осуществить проверку статуса ФН, выпустив отчёт «Информация о ККТ». Если в строке «Фискальный режим закрыт» выставлено «Да», это означает, что ФН был закрыт, и необходимо произвести его замену, поставив новый.

Пути решения ошибки ФН 212.jpg

Пути решения ошибки ФН 212

Ошибка сообщает о том, что ФН имеет неверное состояние. Разберём вероятные причины данной ошибки и пути их решения:

  • Пользователь попытался закрыть смену, хотя она ещё не была открыта. Требуется осуществить перезагрузку устройства, после чего заново открыть смену. 

  • Соединения с ФН не установлено – требуется убедиться в том, что чип подсоединён к ККМ.

  • ККМ не зарегистрирована – зарегистрировать ККМ в ФНС.

Если после всех манипуляций проблема не была решена, это может значить, что ФН был сломан, либо шлейф не подсоединён к ККМ. В таком случае необходимо отнести аппарат в сервисный центр. 

Пути решения ошибки ФН 217

Во время открытия смены, либо осуществления других кассовых операций, ККМ фиксирует время и дату, после чего отображает эти данные в ФД. В случае если происходит сбой хронометрических данных, возникает ошибка 217. Причиной этому может послужить ситуация, когда ККМ передаёт чек с более ранним временем или датой, чем те, что были проставлены на последнем принятом ФД.

Для исправления ситуации пользователю необходимо выставить в настройках правильное время и дату. Чтобы узнать, какое время проставлено в последних ФД, пользователю необходимо выпустить отчет, в котором отображено состояние расчётов. Чтобы предупредить неполадки при открытии смены, требуется убедиться в правильности значений даты и времени.      

Пути решения ошибки ФН 235.jpg

Пути решения ошибки ФН 235

При создании ФД, ККМ перенаправляет их ОФД. Если пересылка невозможна (к примеру, отсутствует связь с оператором, либо торговля ведётся на улице, где нельзя подсоединиться к сети), то устройство откладывает пересылку. Все ФД должны пересылаться ОФД на позже одного месяца с момента операции, если же чек не будет отправлен вовремя, чип заблокируется.

Причиной данной ошибки может послужить превышение времени хранения данных. 

Для исправления ситуации, требуется переслать все проведённые ФД оператору. Настроить интернет-соединение и проверить, не истёк ли срок действия соглашения с ОФД. 

Пути решения ошибки ФН 234.jpg

Пути решения ошибки ФН 234

Все ФН содержат в себе ключ фискального признака, который находится в криптопроцессоре. Он не позволяет сфальсифицировать ФД и гарантирует безопасность информации. ФН имеет ограниченный срок работы (13, 15 и 36 месяцев), и когда этот срок выходит, устройство блокируется.    

Причиной ошибки 234 является окончание срока работы или ресурса памяти ФН.

Для исправления ситуации требуется произвести закрытие архива, после чего заменить чип новым.

Другие ошибки фискального накопителя.jpg

Другие ошибки фискального накопителя

Ниже в таблице мы привели кода других популярных ошибок, причины их возникновения и пути решения.

Код ошибки

Причина возникновения

Пути решения

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 дней не была отправлена ОФД. Если такая запись есть, закрыть смену невозможно, а работа кассы блокируется.

Чтобы решить ошибку, проверьте:

  • Связь с оператором фискальных данных;
  • Наличие интернет-соединения;
  • Исправность фискального накопителя.

Чтобы проверить связь с ОФД, необходимо снять отчет по диагностике соединения с ОФД. Данный отчет должен содержать информацию о том, сколько чеков не было передано, с какого числа и состояние канала связи.

Причинами неполадок могут быть неверно указанные реквизиты ОФД, неоплата тарифа или истекший срок договора с оператором, либо проблемы на сервере ОФД.

Если причина в неполадках с Интернетом, нужно проверить следующее:

  1. Настройки инициализации и соединения с маршрутизатором, исправность проводного или беспроводного соединения.
  2. Работу SIM-карты: установлена ли она, исправна.
  3. Средства на балансе сотового оператора или интернет-провайдера.
  4. Работоспособность оборудования на стороне провайдера – для этого обратитесь в техподдержку обслуживающей вас компании.
  5. Для касс «АТОЛ» – проверить, установлено ли приложение EthernetOverUSB либо EthernetOverTransport и корректность его работы.
  6. Для касс VikiPrint – проверить, запущенно ли приложение ComProxy и корректность его работы.
  7. Для касс «Штрих-М» – проверить корректность настройки RNDIS.

Если ни один из пунктов не помог обнаружить проблему, и срок гарантии ФН не истек, то неисправность может быть в самом фискальном накопителе (но это крайне редкий случай). В этом случае можно обратиться в сервисный центр для замены ФН по гарантии.

Ошибка ФН с кодом 234 «Исчерпан ресурс криптопроцессора ФН»

Если на фискальном регистраторе появилась ошибка 234 «Исчерпан ресурс криптографического сопроцессора ФН» (или «Исчерпан ресурс КС») — это значить что истек срок действия ФН и его необходимо заменить.

Сделать это можно следующим образом:

  1. посмотреть дату и время последнего документа в ФН;
  2. перевести дату в кассе на день последнего чека, время — на время несколько позже последнего документы;
  3. закрыть смену при необходимости;
  4. дождаться отправки всех документов в ОФД;
  5. закрыть архив ФН;
  6. зарегистрировать кассу с новым установленным ФН.

Если не получится сделать самостоятельно, необходимо обратиться в обслуживающую организацию.

Ошибка ФН с кодом 231 «Некорректное значение параметров команды ФН»

Такая ошибка может возникнуть, если вы попытается установить фискальный накопитель, не подходящий для вашего вида торговой деятельности или типа налогообложения. Например, если вы занимаетесь торговлей на общей системе налогообложения, то вы не сможете использовать ФН на 36 месяцев.

Убедитесь, что вы выбрали подходящий по параметрам ФН и проверьте корректность передачи системы налогообложения.

Ошибка ФН с кодом 210 «Ошибка обмена с ФН на уровне интерфейса I2C»

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

Также причиной ошибки 210 может стать переполнение внутреннего буфера фискального накопителя. Такое может произойти, если накопитель больше месяца не использовался, а потом было пробито много чеков. В таком случае после включения кассового нужно подождать 10-15 минут.

Третий вариант – устарела прошивка фискального накопителя, потребуется ее обновить.

Либо сам механизм ФН вышел из строя, о чем точнее вы можете узнать в сервисном центре.

Ошибка ФН с кодом 211 «Ошибка формата передачи ФН»

Эта ошибка может возникнуть в двух случаях:

  1. Если фискальных накопитель отсоединился от кассы (нужно проверить подключение).
  2. Сломался шлейф для подключения ФН, нужно его заменить.

Ошибка ФН с кодом 212 «Неверное состояние ФН»

Вот основные причины, по которым может возникнуть ошибка с кодом 212:

  1. Попытка закрыть смену, которая не была открыта. Чтобы это исправить, нужно выключить онлайн-кассу, включить и открыть смену.
  2. Возможно, нет связи с фискальным накопителем: нужно проверить, подключен ли шлейф к ФН и к самой онлайн-кассе.
  3. Ошибки при регистрации кассового аппарата могут привести к некорректной работе ФН.
  4. Может быть неисправен сам фискальный накопитель или шлейф для подключения к онлайн-ККТ.

Ошибки ФН с кодами 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

Не найден файл языковой поддержки
(работает как RUNTIME)

36

Не найдено доступного меню

Говорит о том, что отсутствует доступ к меню на данной станции и она не может найти меню предназначенной для нее. Проверьте в редакторе «МЕНЮ». «ДОСТУП К МЕНЮ» имеется ли для станции хоть одно свободное меню.

37

Несоответствие версий станции и клиента

Необходимо привести версии в соответствие.

199

Как RUNTIME проблемы с DLL

126

«Железо»

127

«Железо»

Проблемы с памятью, с настройками BIOS  и т.п.

Понравилась статья? Поделить с друзьями:
  • Ошибка 212006 опель зафира
  • Ошибка 2162 при отправке смс мтс
  • Ошибка 2127 гранта 16 клапанная
  • Ошибка 212 эвотор как исправить фнс
  • Ошибка 211965 astra h