NAV Navbar
C++ Python Java Android ObjC C# Delphi Go Duktape

Общая информация

Драйвер контрольно-кассовой техники v.10 (дККТ10) - интеграционный компонент, предоставляющий удобный API (программный интерфейс) для работы с контрольно-кассовой техникой (ККТ) для самых популярных программных и аппаратных платформ и языков программирования. В их числе операционные системы Linux, Windows, macOS, Android и iOS, архитектуры i386, amd64 и arm.

За счет того, что драйвер разработан на языках C/С++ и имеет C-API, его подключение к любым официально неподдерживаемым языкам программирования осуществляется очень просто.

В данной документации приведены примеры использования драйвера на следующих языках:

Для интеграции, помимо драйвера ККТ, можно использовать основанные на нем приложения:

Минимальные поддерживаемые версии ОС:

Дистрибутивы

Windows

Дистрибутив для Windows (x86, x64) построен на базе NSIS и включает в себя:

Тихий режим

Дистрибутив поддерживает тихую установку. Для этого необходимо его запустить с ключем /S. В тихом режиме по умолчанию устанавливаются только те компоненты, от установки которых отказаться нельзя. Установкой остальных компонентов можно управлять с помощью ключей инсталлятора:

При тихой установке инсталлятор может вернуть следующие ошибки (ErrorLevel):

Linux

Для Linux предоставляются deb- и rpm-пакеты под архитектуры x86, x64, arm64 и armhf:

macOS

Для macOS предоставляется dmg-пакет с тестовым приложением, а также фреймворк с библиотеками драйвера. Тестовое приложение не зависит от наличия установленного фреймворка драйвера и может работать без него.

Настройки логирования

Состав файла fptr10_log.properties по умолчанию. ${WORK_DIRECTORY} - рабочий каталог драйвера.

log4cpp.rootCategory=ERROR, file
log4cpp.category.FiscalPrinter=INFO, file
log4cpp.category.Transport=INFO, file
log4cpp.category.EthernetOverTransport=INFO, ofd
log4cpp.category.DeviceDebug=INFO, device_debug
log4cpp.category.1C=INFO, file1C

log4cpp.appender.console=ConsoleAppender
log4cpp.appender.console.layout=PatternLayout
log4cpp.appender.console.layout.ConversionPattern=%d{%Y.%m.%d %H:%M:%S.%l} T:%t %-5p [%c] %m%n

log4cpp.appender.file=DailyRollingFileAppender
log4cpp.appender.file.fileName=${WORK_DIRECTORY}/logs/fptr10.log
log4cpp.appender.file.maxDaysKeep=14
log4cpp.appender.file.layout=PatternLayout
log4cpp.appender.file.layout.ConversionPattern=%d{%Y.%m.%d %H:%M:%S.%l} T:%t %-5p [%c] %m%n

log4cpp.appender.ofd=DailyRollingFileAppender
log4cpp.appender.ofd.fileName=${WORK_DIRECTORY}/logs/ofd.log
log4cpp.appender.ofd.maxDaysKeep=14
log4cpp.appender.ofd.layout=PatternLayout
log4cpp.appender.ofd.layout.ConversionPattern=%d{%Y.%m.%d %H:%M:%S.%l} T:%t %-5p [%c] %m%n

log4cpp.appender.device_debug=DailyRollingFileAppender
log4cpp.appender.device_debug.fileName=${WORK_DIRECTORY}/logs/device_debug.log
log4cpp.appender.device_debug.maxDaysKeep=14
log4cpp.appender.device_debug.layout=PatternLayout
log4cpp.appender.device_debug.layout.ConversionPattern=%d{%Y.%m.%d %H:%M:%S.%l} T:%t %-5p [%c] %m%n

log4cpp.appender.fptr1C=DailyRollingFileAppender
log4cpp.appender.fptr1C.fileName=${WORK_DIRECTORY}/logs/fptr1C.log
log4cpp.appender.fptr1C.maxDaysKeep=14
log4cpp.appender.fptr1C.layout=PatternLayout
log4cpp.appender.fptr1C.layout.ConversionPattern=%d{%Y.%m.%d %H:%M:%S.%l} T:%t %-5p [%c] %m%n

На ОС Android ко всем категориям добавляется LogCatAppender

log4cpp.appender.logcat=LogCatAppender
log4cpp.appender.logcat.layout=PatternLayout
log4cpp.appender.logcat.layout.ConversionPattern=T:%t %-5p [%c] %m%n

На ОС iOS ко всем категориям добавляется NSLogAppender

log4cpp.appender.nslog=NSLogAppender
log4cpp.appender.nslog.layout=PatternLayout
log4cpp.appender.nslog.layout.ConversionPattern=T:%t %-5p [%c] %m%n

При первом запуске драйвер создает файл с настройками логирования в рабочем каталоге драйвера:

Также драйвер предоставляет возможность указать явно расположение файла fptr10_log.properties при работе на ОС Windows, Linux и MacOS. Для этого пользователю нужно задать переменную среды с названием DTO10_LOG_CONFIG_FILE и значением полного пути к файлу (например, C:\fptr10_log.properties). Файл в этом случае должен существовать заранее и быть корректно сформирован.

Для логирования используется библиотека log4cpp, описание файла настроек можно прочитать на её сайте (http://log4cpp.sourceforge.net/). Здесь будет приведено короткое описание настройки, а также список тегов (категорий логов), по которым драйвер производит логирование.

С помощью log4cpp, драйвер позволяет логировать информацию следующим образом:

Для каждой категории можно настроить подробность логирования. На данный момент поддерживаются следующие:

В случае с категориями Transport и FiscalPrinter на уровне INFO в логе фиксируется базовая информация об обмене с ККТ, а на уровне DEBUG - подробная информация об обмене. Для категорий, отвечающих за каналы обмена (USB, COM и т.п.) не рекомендуется включать логирования без особой надобности, т.к. это может замедлить и нарушить таймауты обмена с ККТ.

Специфичные настройки каждого из Appender-ов представлены в таблице ниже:

Appender Описание Параметры Описание параметров
RollingFileAppender Логирование в файл с ротацией по размеру fileName Путь к файлу лога
maxFileSize Максимальный размер файла лога до ротации
maxBackupIndex Максимальное количество файлов логов
DailyRollingFileAppender Логирование в файл с ротацией по времени (раз в день, в полночь) fileName Путь к файлу лога
maxDaysKeep Количество файлов для хранения
ConsoleAppender Логирование в консоль (stdout)
LogCatAppender Логирование в logcat
NSLogAppender Логирование в Apple System Log

Дополнительно, к каждому из Appender-ов можно добавить формат выводимых строк лога - Layout. Тип Layout-а нужно записать в параметр layout Appender-а и указать его настройки. Ниже приведено описание формата PatternLayout:

Поддерживаемые теги (категории) для настройки:

Начало работы с драйвером

Подключение к проекту

C/C++

Для использования драйвера из проекта, написанного на C/C++, нужно добавить в зависимости к нему библиотеку fptr10.dll (libfptr10.so) соответствующей архитектуры и подключить заголовочный файл libfptr10.h. Для C++ можно использовать отдельную обертку.

Python

Для использования драйвера из Python-проекта, необходимо подключить модуль libfptr10.py. Модуль может сам обнаружить установленный через инсталлятор драйвер. Минимальные поддерживаемые версии Python - 2.6 и 3.0.

Java

Для подключения драйвера к Java-проекту необходимо подключить библиотеку libfptr10.jar, а также обеспечить нахождение нативных компонентов (libfptr10.so / fptr10.dll и их зависимостей) в java.library.path. Библиотека может сама обнаружить установленный через инсталлятор драйвер. Минимальная поддерживаемая версия Java - 1.6.

Android

Для подключения драйвера к Android-проекту необходимо импортировать в проект библиотеку libfptr10.aar. В данной библиотеке (Android Archive, AAR) содержатся нативные библиотеки под все аппаратные платформы Android, а также набор Activity для настройки драйвера. Минимальная поддерживаемая версия Android - 4.0 (API 14).

iOS

Для подключения драйвера к iOS-проекту необходимо добавить в проект фреймворк fptr10.framework и использовать заголовочный файл libfptr10_objc.h. Минимальная поддерживаемая версия iOS - 8. Фреймворк поставляется в следующих сборках:

Фреймворк включает в себя:

Для удобства отладки можно объединить несколько сборок библиотеки fptr10 в одну с помощью lipo:

lipo -create -output <итоговый файл> <входной файл 1> <входной файл 2> ...

macOS

Для подключения драйвера к macOS-проекту необходимо добавить в проект фреймворк fptr10.framework и использовать заголовочный файл libfptr10_objc.h. Также можно установить фреймворк в стандартные каталоги (например, /Library/Frameworks) и использовать другие языковые обертки:

.NET

Для подключения драйвера к .NET-проекту необходимо добавить в проект библиотеку Atol.Drivers10.Fptr.dll. Библиотека может сама обнаружить установленный через инсталлятор драйвер. Минимальная поддерживаемая версия .NET - 2.0. Поддерживается только Windows.

COM-объект

Для подключения драйвера как COM-объект необходимо зарегистрировать в системе библиотеку addin_fptr10_x86.dll (addin_fptr10_x64.dll в случае 64-битного приложения) с помощью команды regsvr32.exe. Библиотека может сама обнаружить установленный через инсталлятор драйвер. Также инсталлятор автоматически регистрирует компонент заданной архитектуры в процессе установки. В проекте необходимо создать объект типа ActiveX (или OLE) класса AddIn.Fptr10. В данной документации описаны примеры работы с драйвером в виде OLE-объекта на языке Delphi.

Go

Для подключения драйвера к проекту на Go необходимо добавить в каталог src проекта пакет fptr10 (atol.ru/drivers10/fptr). Go-обертка распространяется ввиде исходных кодов. Пакет fptr10 может самостоятельно обнаружить установленный через инсталлятор драйвера.

Инициализация драйвера

Инициализация драйвера

#include "libfptr10.h"

libfptr_handle fptr;
libfptr_create(&fptr);
from libfptr10 import IFptr
import os

LIBRARY_PATH = os.path.dirname(os.path.abspath(__file__))

fptr = IFptr(os.path.join(LIBRARY_PATH, "fptr10.dll"))
import ru.atol.drivers10.fptr.Fptr;
import ru.atol.drivers10.fptr.IFptr;

IFptr fptr = new Fptr();
import ru.atol.drivers10.fptr.Fptr;
import ru.atol.drivers10.fptr.IFptr;

IFptr fptr = new Fptr(getApplicationContext());
IFptr *fptr = [[IFptr alloc] init];
using Atol.Drivers10.Fptr;

IFptr fptr = new Fptr();
var
    fptr: OleVariant;
begin
    fptr := CreateOleObject('AddIn.Fptr10');
end;
import "atol.ru/drivers10/fptr"

# Можно сделать так
fptr := fptr10.New()
if fptr == nil {
    return errors.New("Не удалось загрузить драйвер ККТ")
}

# Либо так
fptr, err := fptr10.NewSafe()
if err != nil {
    return err
}
Инициализация не требуется, методы драйвера доступны через глобальный объект Fptr

В начале работы необходимо инициализировать рабочий экземпляр драйвера.

Все дальнейшие операции производятся именно над этим экземпляром.

Запрос версии драйвера

Запрос версии драйвера

char *version = libfptr_get_version_string();
version = fptr.version()
String version = fptr.version();
String version = fptr.version();
NSString *version = [fptr version];
String version = fptr.version();
var
    version: String;
begin
    version = fptr.version();
end;
version := fptr.Version()
version = Fptr.version();

Драйвер позволяет получить свою версию в виде строки.

Деинициализация драйвера

Деинициализация драйвера

libfptr_destroy(&fptr);
del fptr
fptr.destroy();
fptr.destroy();
[fptr release];
fptr.destroy();
fptr := Unassigned
fptr.Destroy()
Не требуется

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

Настройка драйвера

Настройка драйвера, способ первый

wchar_t settings[1024] = {0};
swprintf(&settings[0], 1024, L"{\"%ls\": %d, \"%ls\": %d, \"%ls\": \"%ls\", \"%ls\": %d}",
    LIBFPTR_SETTING_MODEL, LIBFPTR_MODEL_ATOL_AUTO,
    LIBFPTR_SETTING_PORT, LIBFPTR_PORT_COM,
    LIBFPTR_SETTING_COM_FILE, L"COM5",
    LIBFPTR_SETTING_BAUDRATE, LIBFPTR_PORT_BR_115200)
libfptr_set_settings(fptr, settings);
# Можно передать как строку
settings = "{{\"{}\": {}, \"{}\": {}, \"{}\": \"{}\", \"{}\": {}}}".format(
    IFptr.LIBFPTR_SETTING_MODEL, IFptr.LIBFPTR_MODEL_ATOL_AUTO,
    IFptr.LIBFPTR_SETTING_PORT, IFptr.LIBFPTR_PORT_COM,
    IFptr.LIBFPTR_SETTING_COM_FILE, "COM5",
    IFptr.LIBFPTR_SETTING_BAUDRATE, IFptr.LIBFPTR_PORT_BR_115200)
fptr.setSettings(settings)

# А можно как dict
settings = {
    IFptr.LIBFPTR_SETTING_MODEL: IFptr.LIBFPTR_MODEL_ATOL_AUTO,
    IFptr.LIBFPTR_SETTING_PORT: IFptr.LIBFPTR_PORT_COM,
    IFptr.LIBFPTR_SETTING_COM_FILE: "COM5",
    IFptr.LIBFPTR_SETTING_BAUDRATE: IFptr.LIBFPTR_PORT_BR_115200
}
fptr.setSettings(settings)
settings = String.format("{\"%s\": %d, \"%s\": %d, \"%s\": \"%s\", \"%s\": %d}",
    IFptr.LIBFPTR_SETTING_MODEL, IFptr.LIBFPTR_MODEL_ATOL_AUTO,
    IFptr.LIBFPTR_SETTING_PORT, IFptr.LIBFPTR_PORT_COM,
    IFptr.LIBFPTR_SETTING_COM_FILE, "COM5",
    IFptr.LIBFPTR_SETTING_BAUDRATE, IFptr.LIBFPTR_PORT_BR_115200);
fptr.setSettings(settings);
settings = String.format("{\"%s\": %d, \"%s\": %d, \"%s\": \"%s\", \"%s\": %d}",
    IFptr.LIBFPTR_SETTING_MODEL, IFptr.LIBFPTR_MODEL_ATOL_AUTO,
    IFptr.LIBFPTR_SETTING_PORT, IFptr.LIBFPTR_PORT_COM,
    IFptr.LIBFPTR_SETTING_COM_FILE, "COM5",
    IFptr.LIBFPTR_SETTING_BAUDRATE, IFptr.LIBFPTR_PORT_BR_115200);
fptr.setSettings(settings);
NSString *settings = [NSString stringWithFormat:@"{\"%@\": %d, \"%@\": %d, \"%@\": \"%@\", \"%@\": %d}",
    LIBFPTR_SETTING_MODEL, LIBFPTR_MODEL_ATOL_AUTO,
    LIBFPTR_SETTING_PORT, LIBFPTR_PORT_TCPIP,
    LIBFPTR_SETTING_IPADDRESS, @"192.168.1.110",
    LIBFPTR_SETTING_IPPORT, 5555];
[fptr setSettings:settings];
settings = String.Format("{\"{0}\": {1}, \"{2}\": {3}, \"{4}\": \"{5}\", \"{6}\": {7}}",
    Constants.LIBFPTR_SETTING_MODEL, Constants.LIBFPTR_MODEL_ATOL_AUTO,
    Constants.LIBFPTR_SETTING_PORT, Constants.LIBFPTR_PORT_COM,
    Constants.LIBFPTR_SETTING_COM_FILE, "COM5",
    Constants.LIBFPTR_SETTING_BAUDRATE, Constants.LIBFPTR_PORT_BR_115200);
fptr.setSettings(settings);
var 
    settings: String;
begin
  settings := Format('{"%s": %s, "%s": %s, "%s": "%s", "%s": %s}',
    [fptr.LIBFPTR_SETTING_MODEL, IntToStr(fptr.LIBFPTR_MODEL_ATOL_AUTO),
    fptr.LIBFPTR_SETTING_PORT, IntToStr(fptr.LIBFPTR_PORT_COM),
    fptr.LIBFPTR_SETTING_COM_FILE, 'COM5',
    fptr.LIBFPTR_SETTING_BAUDRATE, IntToStr(fptr.LIBFPTR_PORT_BR_115200)]);
  fptr.setSettings(settings);
end;
settings := fmt.Sprintf("{ \"%v\": %d, \"%v\": %d, \"%v\": \"%s\", \"%v\": %d }",
    fptr10.LIBFPTR_SETTING_MODEL, fptr10.LIBFPTR_MODEL_ATOL_AUTO,
    fptr10.LIBFPTR_SETTING_PORT, fptr10.LIBFPTR_PORT_COM,
    fptr10. LIBFPTR_SETTING_COM_FILE, "COM5",
    fptr10.LIBFPTR_SETTING_BAUDRATE, fptr10.LIBFPTR_PORT_BR_115200)
fptr.SetSettings(settings)
// Метод недоступен

Настройка драйвера, способ второй

libfptr_set_single_setting(fptr, LIBFPTR_SETTING_MODEL, std::to_wstring(LIBFPTR_MODEL_ATOL_AUTO).c_str());
libfptr_set_single_setting(fptr, LIBFPTR_SETTING_PORT, std::to_wstring(LIBFPTR_PORT_COM).c_str());
libfptr_set_single_setting(fptr, LIBFPTR_SETTING_COM_FILE, L"COM5");
libfptr_set_single_setting(fptr, LIBFPTR_SETTING_BAUDRATE, LIBFPTR_PORT_BR_115200);
libfptr_apply_single_settings(fptr);
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_MODEL, str(IFptr.LIBFPTR_MODEL_ATOL_AUTO))
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_PORT, str(IFptr.LIBFPTR_PORT_COM))
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_COM_FILE, "COM5")
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_BAUDRATE, str(IFptr.LIBFPTR_PORT_BR_115200))
fptr.applySingleSettings()
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_MODEL, String.valueOf(IFptr.LIBFPTR_MODEL_ATOL_AUTO));
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_PORT, String.valueOf(IFptr.LIBFPTR_PORT_COM));
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_COM_FILE, "COM5");
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_BAUDRATE, String.valueOf(IFptr.LIBFPTR_PORT_BR_115200));
fptr.applySingleSettings();
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_MODEL, String.valueOf(IFptr.LIBFPTR_MODEL_ATOL_AUTO));
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_PORT, String.valueOf(IFptr.LIBFPTR_PORT_COM));
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_COM_FILE, "COM5");
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_BAUDRATE, String.valueOf(IFptr.LIBFPTR_PORT_BR_115200));
fptr.applySingleSettings();
[fptr setSingleSetting:LIBFPTR_SETTING_MODEL, value:[NSString stringWithFormat:@"%d", LIBFPTR_MODEL_ATOL_AUTO]];
[fptr setSingleSetting:LIBFPTR_SETTING_PORT, value:[NSString stringWithFormat:@"%d", LIBFPTR_PORT_TCPIP));
[fptr setSingleSetting:LIBFPTR_SETTING_IPADDRESS, value:@"192.168.1.110");
[fptr setSingleSetting:LIBFPTR_SETTING_IPPORT, value:[NSString stringWithFormat:@"%d", 5555]];
[fptr applySingleSettings];
fptr.setSingleSetting(Constants.LIBFPTR_SETTING_MODEL, Constants.LIBFPTR_MODEL_ATOL_AUTO.ToString());
fptr.setSingleSetting(Constants.LIBFPTR_SETTING_PORT, Constants.LIBFPTR_PORT_COM.ToString());
fptr.setSingleSetting(Constants.LIBFPTR_SETTING_COM_FILE, "COM5");
fptr.setSingleSetting(Constants.LIBFPTR_SETTING_BAUDRATE, Constants.LIBFPTR_PORT_BR_115200.ToString());
fptr.applySingleSettings();
begin
    fptr.setSingleSetting(fptr.LIBFPTR_SETTING_MODEL, IntToStr(fptr.LIBFPTR_MODEL_ATOL_AUTO));
    fptr.setSingleSetting(fptr.LIBFPTR_SETTING_PORT, IntToStr(fptr.LIBFPTR_PORT_COM));
    fptr.setSingleSetting(fptr.LIBFPTR_SETTING_COM_FILE, 'COM5');
    fptr.setSingleSetting(fptr.LIBFPTR_SETTING_BAUDRATE, IntToStr(fptr.LIBFPTR_PORT_BR_115200));
    fptr.applySingleSettings;
end;
fptr.SetSingleSetting(fptr10.LIBFPTR_SETTING_MODEL, strconv.Itoa(fptr10.LIBFPTR_MODEL_ATOL_AUTO))
fptr.SetSingleSetting(fptr10.LIBFPTR_SETTING_PORT, strconv.Itoa(fptr10.LIBFPTR_PORT_COM))
fptr.SetSingleSetting(fptr10.LIBFPTR_SETTING_COM_FILE, "COM5")
fptr.SetSingleSetting(fptr10.LIBFPTR_SETTING_BAUDRATE, strconv.Itoa(fptr10.LIBFPTR_PORT_BR_115200))
fptr.ApplySingleSettings()
// Метод недоступен

Настройка через вызов окна настройки

libfptr_show_properties(fptr, LIBFPTR_GUI_PARENT_NATIVE, <дескриптор окна>);
fptr.showProperties(IFptr.LIBFPTR_GUI_PARENT_NATIVE, <дескриптор окна>)
fptr.showProperties(IFptr.LIBFPTR_GUI_PARENT_NATIVE, <дескриптор окна>);
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  private static final int REQUEST_SHOW_SETTINGS = 1;
  private IFptr fptr;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // ....
    // Создание объекта драйвера
    fptr = new Fptr(getApplication());

    // Вызываем Activity настройки
    findViewById(R.id.btnShowSettings).setOnClickListener(new View.OnClickListener {
        @Override
        public void onClick(View view) {
          Intent intent = new Intent(getApplication(), SettingsActivity.class);
          // Передаем текущие настройки в SettingsActivity.
          // Если не передать - будет показана SettingsActivity с настройками по умолчанию
          intent.putExtra(SettingsActivity.DEVICE_SETTINGS, fptr.getSettings());
          startActivityForResult(intent, REQUEST_SHOW_SETTINGS);
        }
      }
    );
  }

  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SHOW_SETTINGS && resultCode == Activity.RESULT_OK) {
      // Записываем настройки в объект
      fptr.setSettings(data.getStringExtra(SettingsActivity.DEVICE_SETTINGS));
    }
  }
}
// Не поддерживается
fptr.showProperties(Constants.LIBFPTR_GUI_PARENT_NATIVE, <дескриптор окна>);
begin
    fptr.showProperties(fptr.LIBFPTR_GUI_PARENT_NATIVE, <дескриптор окна>);
end;
fptr.ShowProperties(fptr10.LIBFPTR_GUI_PARENT_NATIVE, <дескриптор окна>)
// Метод недоступен

Для того, чтобы начать работу с ККТ, требуется настроить соединение с устройством. Есть несколько способов передать в драйвер настройки.

Первый способ - передача всех настроек в виде json. Способ удобен тем, что настройки в таком виде можно запросить у драйвера, сохранить, и при следующей работе с ККТ передать их в драйвер заново как есть. При передаче настроек драйвер разорвет связь с ККТ, если она установлена, изменит настройки и подключится заново.

Второй способ - передача настроек по одной с их применением в конце. Результат будет идентичен первому способу.

Третий способ - вызов окна настройки связи с ККТ. В случае использования метода showProperties() требуется передать дескриптор родительского окна для отображения модального диалога и указать его тип.

Для передачи дескриптора родительского окна типа QWidget (Qt) требуется указать тип окна LIBFPTR_GUI_PARENT_QT.

Для передачи дескриптора родительского окна типа HWND (WinApi) требуется указать тип окна LIBFPTR_GUI_PARENT_NATIVE. Использование типа окна LIBFPTR_GUI_PARENT_NATIVE на Linux на данный момент не поддерживается.

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

Метод возвращает следующие значения:

Выгрузка настроек

Выгрузка настроек, способ первый

std::vector<wchar_t> settings(1024);
int size = libfptr_get_settings(fptr, &settings[0], settings.size());
if (size > settings.size())
{
    settings.resize(size);
    libfptr_get_settings(fptr, &settings[0], settings.size());
}
# getSettings() возвращает dict
settings = fptr.getSettings()

# getSettingsStr() возвращает строку
settings = fptr.getSettingsStr()
String settings = fptr.getSettings();
String settings = fptr.getSettings();
NSString *settings = [fptr getSettings];
String settings = fptr.getSettings();
var
    settings: String;
begin
    settings := fptr.getSettings;
end;
settings := fptr.GetSettings()
settings = Fptr.getSettings();

Выгрузка настроек, способ второй (на примере получения IP-адреса и порта)

std::wstring ipAddress, ipPort;

std::vector<wchar_t> setting(1024);
int size = libfptr_get_single_setting(fptr, LIBFPTR_SETTING_IPADDRESS, &setting[0], setting.size());
if (size > settings.size())
{
    setting.resize(size);
    libfptr_get_single_setting(fptr, LIBFPTR_SETTING_IPADDRESS, &setting[0], setting.size());
}
ipAddress = std::wstring(&setting[0]);

int size = libfptr_get_single_setting(fptr, LIBFPTR_SETTING_IPPORT, &setting[0], setting.size());
if (size > settings.size())
{
    setting.resize(size);
    libfptr_get_single_setting(fptr, LIBFPTR_SETTING_IPPORT, &setting[0], setting.size());
}
ipPort = std::wstring(&setting[0]);
ipAddress = fptr.getSingleSetting(IFptr.LIBFPTR_SETTING_IPADDRESS)
ipPort = fptr.getSingleSetting(IFptr.LIBFPTR_SETTING_IPPORT)
String ipAddress = fptr.getSingleSetting(IFptr.LIBFPTR_SETTING_IPADDRESS);
String ipPort = fptr.getSingleSetting(IFptr.LIBFPTR_SETTING_IPPORT);
String ipAddress = fptr.getSingleSetting(IFptr.LIBFPTR_SETTING_IPADDRESS);
String ipPort = fptr.getSingleSetting(IFptr.LIBFPTR_SETTING_IPPORT);
NSString *ipAddress = [fptr getSingleSetting:LIBFPTR_SETTING_IPADDRESS];
NSString *ipPort = [fptr getSingleSetting:LIBFPTR_SETTING_IPPORT];
String ipAddress = fptr.getSingleSetting(Constants.LIBFPTR_SETTING_IPADDRESS);
String ipPort = fptr.getSingleSetting(Constants.LIBFPTR_SETTING_IPPORT);
var
    ipAddress:  String;
    ipPort:     String;
begin
    ipAddress   := fptr.getSingleSetting(fptr.LIBFPTR_SETTING_IPADDRESS);
    ipPort      := fptr.getSingleSetting(fptr.LIBFPTR_SETTING_IPPORT);
end;
ipAddress := fptr.GetSingleSetting(fptr10.LIBFPTR_SETTING_IPADDRESS)
ipPort := fptr.GetSingleSetting(fptr10.LIBFPTR_SETTING_IPPORT)
ipAddress = Fptr.getSingleSetting(Fptr.LIBFPTR_SETTING_IPADDRESS);
ipPort = Fptr.getSingleSetting(Fptr.LIBFPTR_SETTING_IPPORT);

Выгрузить настройки также можно двумя способами.

Первый позволяет получить все настройки разом в виде json.

Используя второй способ, можно получить отдельно значение каждой настройки.

Список настроек

Все настройки можно поделить на две категории.

К первой относятся общие настройки драйвера, которые отвечают непосредственно за его поведение.

Это следующие настройки:

Ко второй относятся настройки связи с ККТ.

Настройка обмена с ОФД

Как было указано выше, в драйвере есть возможность предоставить для ККТ канал обмена с ОФД средствами хоста, на котором драйвер используется. Для этого служит настройка LIBFPTR_SETTING_OFD_CHANNEL.

Ниже представлена таблица, показывающая, при каких настройках связи с ОФД в самой ККТ какую настройку в драйвере выбрать.

Настройка ККТ Настройка драйвера Пояснение
USB (EoU) LIBFPTR_OFD_CHANNEL_NONE Для работы требуется утилита EoU. Драйвер в обмене не участвует.
Ethernet LIBFPTR_OFD_CHANNEL_NONE Для работы требуется, чтобы ККТ была подключена к сети через Ethernet-кабель. Драйвер в обмене не участвует.
Wi-Fi LIBFPTR_OFD_CHANNEL_NONE Для работы требуется, чтобы ККТ была подключена к сети через Wi-Fi. Драйвер в обмене не участвует.
GSM-модем LIBFPTR_OFD_CHANNEL_NONE Для работы требуется, чтобы в ККТ была установлена SIM-карта. Драйвер в обмене не участвует.
EthernetOverTransport LIBFPTR_OFD_CHANNEL_PROTO В этом случае для пеередачи данных в ОФД будет использоваться канал хоста, на котором установлен драйвер. Для работы требуется, чтобы драйвер постоянно держал соединение с ККТ.

Методы и параметры драйвера

Установка целочисленного параметра

libfptr_set_param_int(fptr, LIBFPTR_PARAM_TAX_TYPE, LIBFPTR_TAX_VAT18);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
[fptr setParam:LIBFPTR_PARAM_TAX_TYPE, intParam:LIBFPTR_TAX_VAT18];
fptr.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, Constants.LIBFPTR_TAX_VAT18);
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_TAX_TYPE, fptr.LIBFPTR_TAX_VAT18);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAX_TYPE, fptr10.LIBFPTR_TAX_VAT18)
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_VAT18);

Установка целочисленного реквизита ФН (без печати на чековой ленте)

libfptr_set_non_printable_param_int(fptr, 1229, 500);
fptr.setNonPrintableParam(1229, 500)
fptr.setNonPrintableParam(1229, 500);
fptr.setNonPrintableParam(1229, 500);
[fptr setNonPrintableParam:1229, intParam:500];
fptr.setNonPrintableParam(1229, 500);
begin
    fptr.setNonPrintableParam(1229, 500);
end;
fptr.SetNonPrintableParam(1229, 500)
Fptr.setParam(1229, 500);

Установка дробного параметра

libfptr_set_param_double(fptr, LIBFPTR_PARAM_PRICE, 123.45);
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 123.45)
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 123.45);
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 123.45);
[fptr setParam:LIBFPTR_PARAM_PRICE, doubleParam:123.45];
fptr.setParam(Constants.LIBFPTR_PARAM_PRICE, 123.45);
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_PRICE, 123.45);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_PRICE, 500)
Fptr.setParam(Fptr.LIBFPTR_PARAM_PRICE, 500);

Установка логического параметра

libfptr_set_param_bool(fptr, LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, true);
fptr.setParam(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, True)
fptr.setParam(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, true);
fptr.setParam(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, true);
[fptr setParam:LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, boolParam:true];
fptr.setParam(Constants.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, true);
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, True);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, true)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, true);

Установка строкового параметра

libfptr_set_param_str(fptr, LIBFPTR_PARAM_COMMODITY_NAME, L"Товар");
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар")
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
[fptr setParam:LIBFPTR_PARAM_COMMODITY_NAME, NSStringParam:@"Товар"];
fptr.setParam(Constants.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_COMMODITY_NAME, 'Товар');
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_COMMODITY_NAME, "Товар")
Fptr.setParam(Fptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");

Установка строкового реквизита ФН (без печати на чековой ленте)

libfptr_set_non_printable_param_str(fptr, 1191, L"Позиция №1");
fptr.setNonPrintableParam(1191, "Позиция №1")
fptr.setNonPrintableParam(1191, "Позиция №1");
fptr.setNonPrintableParam(1191, "Позиция №1");
[fptr setNonPrintableParam:1191, NSStringParam:@"Позиция №1"];
fptr.setNonPrintableParam(1191, "Позиция №1");
begin
    fptr.setNonPrintableParam(1191, 'Позиция №1');
end;
fptr.SetNonPrintableParam(1191, "Позиция №1")
Fptr.setNonPrintableParam(1191, "Позиция №1");

Установка параметра дата / время

time_t t = time(NULL);
struct tm tm = *localtime(&t);
libfptr_set_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATE_TIME, datetime.datetime.now())
Calendar c = Calendar.getInstance();
fptr.setParam(IFptr.LIBFPTR_PARAM_DATE_TIME, c.getTime());
Calendar c = Calendar.getInstance();
fptr.setParam(IFptr.LIBFPTR_PARAM_DATE_TIME, c.getTime());
NSDate *now = [NSDate date];
[fptr setParam:LIBFPTR_PARAM_DATE_TIME, NSDateParam:now];
fptr.setParam(Constants.LIBFPTR_PARAM_DATE_TIME, DateTime.Now);
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATE_TIME, date);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATE_TIME, time.Now())
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATE_TIME, Date.now());

Установка массива байтов

uchar command[] = {0x91, 0x13, 0x00, 0x00};
libfptr_set_param_bytearray(fptr, LIBFPTR_PARAM_COMMAND_BUFFER, 
                            &command[0], sizeof(command) / sizeof(command[0]));
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMAND_BUFFER, [0x91, 0x13, 0x00, 0x00])
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMAND_BUFFER, new byte[]{0x91, 0x13, 0x00, 0x00});
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMAND_BUFFER, new byte[]{0x91, 0x13, 0x00, 0x00});
uchar command[] = {0x91, 0x13, 0x00, 0x00};
[fptr setParam:LIBFPTR_PARAM_COMMAND_BUFFER, NSDataParam:[NSData dataWithBytes:(const void*)command length:sizeof(command)]];
fptr.setParam(Constants.LIBFPTR_PARAM_COMMAND_BUFFER, new byte[]{0x91, 0x13, 0x00, 0x00});
var
    command_byte_array:    Array[0 .. 3] of Byte = ($91, $13, $00, $00);
    command_variant:       Variant;
    i:                     Integer;
begin
    command_variant := VarArrayCreate([0, high(command_byte_array)], varByte);
    for i := VarArrayLowBound(command_variant, 1) to VarArrayHighBound(command_variant, 1) do
    begin
        VarArrayPut(command_variant, command_byte_array[i], [i]);
    end;
    fptr.setParam(fptr.LIBFPTR_PARAM_COMMAND_BUFFER, command_variant);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_COMMAND_BUFFER, []byte{0x91, 0x13, 0x00, 0x00})
Fptr.setParam(Fptr.LIBFPTR_PARAM_COMMAND_BUFFER, new Uint8Array([0x91, 0x13, 0x00, 0x00]));

Установка байтового реквизита ФН (без печати на чековой ленте)

libfptr_set_param_str(fptr, 1085, L"Название реквизита");
libfptr_set_param_str(fptr, 1086, L"Значение реквизита");
libfptr_util_form_tlv(fptr);

std::vector<uchar> userAttribute(128);
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &userAttribute[0], userAttribute.size());
if (size > userAttribute.size())
{
    userAttribute.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &userAttribute[0], userAttribute.size());
}
userAttribute.resize(size);

// ...
libfptr_set_non_printable_param_bytearray(fptr, 1084, &userAttribute[0], userAttribute.size());
fptr.setParam(1085, "Название реквизита");
fptr.setParam(1086, "Значение реквизита");
fptr.utilFormTlv()
userAttribute = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)

# ...
fptr.setNonPrintableParam(1084, userAttribute)
fptr.setParam(1085, "Название реквизита");
fptr.setParam(1086, "Значение реквизита");
fptr.utilFormTlv();
byte[] userAttribute = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);

// ...
fptr.setNonPrintableParam(1084, userAttribute);
fptr.setParam(1085, "Название реквизита");
fptr.setParam(1086, "Значение реквизита");
fptr.utilFormTlv();
byte[] userAttribute = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);

// ...
fptr.setNonPrintableParam(1084, userAttribute);
[fptr setParam:1085, NSStringParam:@"Название реквизита"];
[fptr setParam:1086, NSStringParam:@"Значение реквизита"];
[fptr utilFormTlv];
NSData *userAttribute = [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE];

// ...
[fptr setNonPrintableParam:1084, NSDataParam:userAttribute];
fptr.setParam(1085, "Название реквизита");
fptr.setParam(1086, "Значение реквизита");
fptr.utilFormTlv();
byte[] userAttribute = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE);

// ...
fptr.setNonPrintableParam(1084, userAttribute);
var
    userAttribute: Variant;
begin
    fptr.setParam(1085, 'Название реквизита');
    fptr.setParam(1086, 'Значение реквизита');
    fptr.utilFormTlv;

    userAttribute := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);

    // ...

    fptr.setNonPrintableParam(1084, userAttribute);
end;
fptr.SetParam(1085, "Название реквизита")
fptr.SetParam(1086, "Значение реквизита")
fptr.UtilFormTlv()
userAttribute := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE)

// ...
fptr.SetNonPrintableParam(1084, userAttribute)
Fptr.setParam(1085, "Название реквизита");
Fptr.setParam(1086, "Значение реквизита");
Fptr.utilFormTlv();
userAttribute = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE);

// ....
Fptr.setNonPrintableParam(1084, userAttribute);

Получение целочисленного параметра

uint lineLength = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
lineLength = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH)
// На самом деле драйвер возвращает unsigned int, но, из-за отсутствия в Java unsigned-типов, возвращается long
long lineLength = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
// На самом деле драйвер возвращает unsigned int, но, из-за отсутствия в Java unsigned-типов, возвращается long
long lineLength = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
uint lineLength = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_LINE_LENGTH];
uint lineLength = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
var
    lineLength: Longint;
begin
    lineLength := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
end;
lineLength := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH)
lineLength = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);

Получение дробного параметра

double cashSum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
cashSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
double cashSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
double cashSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
double cashSum = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
double cashSum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    cashSum: Double;
begin
    cashSum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
cashSum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
cashSum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Получение логического параметра

bool coverOpened = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_COVER_OPENED) != 0);
coverOpened = fptr.getParamBool(IFptr.LIBFPTR_PARAM_COVER_OPENED)
boolean coverOpened = fptr.getParamBool(IFptr.LIBFPTR_PARAM_COVER_OPENED);
boolean coverOpened = fptr.getParamBool(IFptr.LIBFPTR_PARAM_COVER_OPENED);
bool coverOpened = [fptr getParamBool:LIBFPTR_PARAM_COVER_OPENED];
bool coverOpened = fptr.getParamBool(Constants.LIBFPTR_PARAM_COVER_OPENED);
var
    coverOpened: LongBool;
begin
    coverOpened := fptr.getParamBool(fptr.LIBFPTR_PARAM_COVER_OPENED);
end;
coverOpened := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_COVER_OPENED)
coverOpened = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_COVER_OPENED);

Получение строкового параметра

std::vector<wchar_t> str(64);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
if (size > str.size())
{
    unitVersion.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
}
std::wstring unitVersion = std::wstring(&str[0]);
unitVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION)
String unitVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
String unitVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
NSString *unitVersion = [fptr getParamString:LIBFPTR_PARAM_UNIT_VERSION];
String unitVersion = fptr.getParamString(Constants.LIBFPTR_PARAM_UNIT_VERSION);
var
    unitVersion: String;
begin
    unitVersion := fptr.getParamString(fptr.LIBFPTR_PARAM_UNIT_VERSION);
end;
unitVersion := fptr.GetParamString(fptr10.LIBFPTR_PARAM_UNIT_VERSION)
unitVersion = Fptr.getParamString(Fptr.LIBFPTR_PARAM_UNIT_VERSION);

Получение параметра дата / время

int year, month, day, hour, minute, second;
libfptr_get_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, &year, &month, &day, &hour, &minute, &second);
dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
Date dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
Date dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
NSDate *dateTime = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];
DateTime dateTime = fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);
var
    dateTime: TDateTime;
begin
    dateTime := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);
end;
dateTime := fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_DATE_TIME)
dateTime = Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME);

Получение массива байтов

std::vector<uchar> commandAnswer(32);
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_ANSWER_BUFFER, 
                                       &commandAnswer[0], commandAnswer.size());
if (size > commandAnswer.size())
{
    commandAnswer.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_ANSWER_BUFFER, 
                                &commandAnswer[0], commandAnswer.size());
}
commandAnswer.resize(size);
commandAnswer = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_ANSWER_BUFFER)
byte[] commandAnswer = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_ANSWER_BUFFER);
byte[] commandAnswer = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_ANSWER_BUFFER);
NSData *commandAnswer = [fptr getParamByteArray:LIBFPTR_PARAM_ANSWER_BUFFER];
byte[] commandAnswer = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_ANSWER_BUFFER);
var
    commandAnswer: Variant;
begin
    commandAnswer := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_ANSWER_BUFFER);
end;
commandAnswer := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_ANSWER_BUFFER)
commandAnswer = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_ANSWER_BUFFER);

Работа с ККТ производится с помощью методов и их параметров.

Каждый метод, в зависимости от своих параметров, выполняет определенные операции с устройством. Параметры бывают входные и выходные. Входные параметры влияют на выполняемую операцию, а выходные - это её результат.

Список входных параметров очищается сразу после выполнения метода. Список выходных - перед выполнением следующего.

Каждый метод возвращает 0, если метод выполнился удачно, и -1, если произошла ошибка. Исключение - showProperties(), который дополнительно возвращает значение 1.

Параметры бывают следующих типов:

Описания параметров представлены в описании каждого метода.

При работе с драйвером в виде COM-объекта поддерживаются (с помощью типа VARIANT) следующие типы параметров:

При работе с драйвером из Go-обертки поддерживаются (с помощью типа interface{}) следующие типы параметров:

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

Обработка ошибок

Вызов метода

if (libfptr_print_text(fptr) < 0)
{
    int errorCode = libfptr_error_code(fptr);

    std::vector<wchar_t> errorDescription(32);
    int size = libfptr_error_description(fptr, &errorDescription[0], errorDescription.size());
    if (size > errorDescription.size())
    {
        errorDescription.resize(size);
        libfptr_error_description(fptr, &errorDescription[0], errorDescription.size());
    }

    std::wcout << L"Ошибка - " 
               << errorCode 
               << L" [" << std::wstring(&errorDescription[0]) << L"]" 
               << std::endl;
}
if fptr.printText() < 0:
    print("{} [{}]".format(fptr.errorCode(), fptr.errorDescription()))
if (fptr.printText() < 0) {
    System.out.println(String.format("%d [%s]", fptr.errorCode(), fptr.errorDescription()));
}
if (fptr.printText() < 0) {
    Log.d(TAG, String.format("%d [%s]", fptr.errorCode(), fptr.errorDescription()));
}
if ([fptr printText] < 0) {
    NSLog(@"%d [%@]", [fptr errorCode], [fptr errorDescription]);
}
if (fptr.printText() < 0) {
    Console.WriteLine(String.Format("{0} [{1}]", fptr.errorCode(), fptr.errorDescription()));
}
begin
    if fptr.printText < 0 then
        showmessage('"' + IntToStr(fptr.errorCode) + ' [' + fptr.errorDescription + ']"');
end;
if err := fptr.PrintText(); err != nil {
    switch e := err.(type) {
    case *fptr10.Error:
        log.Println(e)
        return
    }
}

log.Println(fptr.ErrorCode())
log.Println(fptr.ErrorDescription())
if (Fptr.printText() < 0) {
    Fptr.logWrite("FiscalPrinter", Fptr.LIBFPTR_LOG_ERROR, Fptr.errorCode().toString() + " [" + Fptr.errorDescription() + "]");
}

Каждый метод драйвера возвращает индикатор результата выполнения. Этот индикатор может принимать значения 0 и -1.

В случае, если индикатор не равен 0, выполнение метода завершилось с ошибкой и есть возможность получить подробности о ней. Для этого у драйвера можно запросить код последней ошибки (метод errorCode()) и её текстовое описание (метод errorDescription()).

В случае с Go, метод возвращает error с типом fptr10.Error, в котором содержатся код ошибки и описание ошибки.

Драйвер хранит информацию об ошибке до следующего вызова метода - после него информация об ошибке обновляется. Для явного сброса информации о последней ошибки нужно использовать метод resetError().

Список кодов ошибок приведен в приложении Список кодов ошибок.

Соединение с ККТ

Установка соединения с ККТ

libfptr_open(fptr);
fptr.open()
fptr.open();
fptr.open();
[fptr open];
fptr.open();
begin
    fptr.open;
end;
fptr.Open()
// Метод недоступен

Проверка состояния логического соединения

bool isOpened = (libfptr_is_opened(fptr) != 0);
isOpened = fptr.isOpened()
boolean isOpened = fptr.isOpened();
boolean isOpened = fptr.isOpened();
bool isOpened = [fptr isOpened];
bool isOpened = fptr.isOpened();
var
    isOpened: LongBool;
begin
    isOpened := fptr.isOpened;
end;
isOpened := fptr.IsOpened()
// Метод недоступен

Завершение соединения с ККТ

libfptr_close(fptr);
fptr.close()
fptr.close();
fptr.close();
[fptr close];
fptr.close();
begin
    fptr.close;
end;
fptr.Close()
// Метод недоступен

После настройки рабочего экземпляра можно подключиться к ККТ. Для этого требуется вызвать метод open(). После подключения к ККТ можно выполнять различные операции с ККТ, а также, при соответствующих настройках, драйвер организует для ККТ канал для обмена с ОФД. До вызова данного метода все другие операции с ККТ будет завершаться с ошибкой LIBFPTR_ERROR_CONNECTION_DISABLED.

Чтобы узнать состояние соединения, нужно использовать метод isOpened(). Результат метода не отражает текущее состояние подключения - если с ККТ была разорвана связь, то метод все также будет возвращать true, но методы, выполняющие какие-либо операции над ККТ, будут возвращать ошибку LIBFPTR_ERROR_NO_CONNECTION.

Для завершения соединения с ККТ нужно вызвать метод close(). драйвер вернется в изначальное состояние, как до вызова open(). Канал с ОФД, установленный с его помощью, будет закрыт и отправка документов в ОФД будет прервана.

Запрос информации о ККТ

У ККТ можно запрашивать различную информацию, в том числе текущее состояние, значения счетчиков и общую информацию. Для этого нужно вызвать метод queryData() с определенными параметрами.

Общая информация и статус

Запрос общей информации и статуса ККТ

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_STATUS);
libfptr_query_data(fptr);

uint operatorID         = libfptr_get_param_int(fptr, LIBFPTR_PARAM_OPERATOR_ID);
uint logicalNumber      = libfptr_get_param_int(fptr, LIBFPTR_PARAM_LOGICAL_NUMBER);
uint shiftState         = libfptr_get_param_int(fptr, LIBFPTR_PARAM_SHIFT_STATE);
uint model              = libfptr_get_param_int(fptr, LIBFPTR_PARAM_MODEL);
uint mode               = libfptr_get_param_int(fptr, LIBFPTR_PARAM_MODE);
uint submode            = libfptr_get_param_int(fptr, LIBFPTR_PARAM_SUBMODE);
uint receiptNumber      = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_NUMBER);
uint documentNumber     = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER);
uint shiftNumber        = libfptr_get_param_int(fptr, LIBFPTR_PARAM_SHIFT_NUMBER);
uint receiptType        = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE);
uint lineLength         = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
uint lineLengthPix      = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX);

double receiptSum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_RECEIPT_SUM);

bool isFiscalDevice         = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_FISCAL) != 0);
bool isFiscalFN             = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_FN_FISCAL) != 0);
bool isFNPresent            = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_FN_PRESENT) != 0);
bool isInvalidFN            = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_INVALID_FN) != 0);
bool isCashDrawerOpened     = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_CASHDRAWER_OPENED) != 0);
bool isPaperPresent         = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT) != 0);
bool isPaperNearEnd         = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_PAPER_NEAR_END) != 0);
bool isCoverOpened          = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_COVER_OPENED) != 0);
bool isPrinterConnectionLost= (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_PRINTER_CONNECTION_LOST) != 0);
bool isPrinterError         = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_PRINTER_ERROR) != 0);
bool isCutError             = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_CUT_ERROR) != 0);
bool isPrinterOverheat      = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_PRINTER_OVERHEAT) != 0);
bool isDeviceBlocked        = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_BLOCKED) != 0)

int year, month, day, hour, minute, second;
libfptr_get_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, &year, &month, &day, &hour, &minute, &second);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, &str[0], str.size());
}
std::wstring serialNumber = std::wstring(&str[0]);

size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_MODEL_NAME, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_MODEL_NAME, &str[0], str.size());
}
std::wstring modelName = std::wstring(&str[0]);

size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
}
std::wstring firmwareVersion = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STATUS)
fptr.queryData()

operatorID      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_OPERATOR_ID)
logicalNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_LOGICAL_NUMBER)
shiftState      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_STATE)
model           = fptr.getParamInt(IFptr.LIBFPTR_PARAM_MODEL)
mode            = fptr.getParamInt(IFptr.LIBFPTR_PARAM_MODE)
submode         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SUBMODE)
receiptNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_NUMBER)
documentNumber  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)
shiftNumber     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER)
receiptType     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE)
lineLength      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH)
lineLengthPix   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX)

receiptSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPT_SUM)

isFiscalDevice          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FISCAL)
isFiscalFN              = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_FISCAL)
isFNPresent             = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_PRESENT)
isInvalidFN             = fptr.getParamBool(IFptr.LIBFPTR_PARAM_INVALID_FN)
isCashDrawerOpened      = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CASHDRAWER_OPENED)
isPaperPresent          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT)
isPaperNearEnd          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PAPER_NEAR_END)
isCoverOpened           = fptr.getParamBool(IFptr.LIBFPTR_PARAM_COVER_OPENED)
isPrinterConnectionLost = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PRINTER_CONNECTION_LOST)
isPrinterError          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PRINTER_ERROR)
isCutError              = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CUT_ERROR)
isPrinterOverheat       = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PRINTER_OVERHEAT)
isDeviceBlocked         = fptr.getParamBool(IFptr.LIBFPTR_PARAM_BLOCKED)

dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)

serialNumber    = fptr.getParamString(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER)
modelName       = fptr.getParamString(IFptr.LIBFPTR_PARAM_MODEL_NAME)
firmwareVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STATUS);
fptr.queryData();

long operatorID      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_OPERATOR_ID);
long logicalNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_LOGICAL_NUMBER);
long shiftState      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_STATE);
long model           = fptr.getParamInt(IFptr.LIBFPTR_PARAM_MODEL);
long mode            = fptr.getParamInt(IFptr.LIBFPTR_PARAM_MODE);
long submode         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SUBMODE);
long receiptNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_NUMBER);
long documentNumber  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
long shiftNumber     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER);
long receiptType     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE);
long lineLength      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
long lineLengthPix   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX);

double receiptSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPT_SUM);

boolean isFiscalDevice          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FISCAL);
boolean isFiscalFN              = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_FISCAL);
boolean isFNPresent             = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_PRESENT);
boolean isInvalidFN             = fptr.getParamBool(IFptr.LIBFPTR_PARAM_INVALID_FN);
boolean isCashDrawerOpened      = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CASHDRAWER_OPENED);
boolean isPaperPresent          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT);
boolean isPaperNearEnd          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PAPER_NEAR_END);
boolean isCoverOpened           = fptr.getParamBool(IFptr.LIBFPTR_PARAM_COVER_OPENED);
boolean isPrinterConnectionLost = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PRINTER_CONNECTION_LOST);
boolean isPrinterError          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PRINTER_ERROR);
boolean isCutError              = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CUT_ERROR);
boolean isPrinterOverheat       = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PRINTER_OVERHEAT);
boolean isDeviceBlocked         = fptr.getParamBool(IFptr.LIBFPTR_PARAM_BLOCKED);

Date dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);

String serialNumber    = fptr.getParamString(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER);
String modelName       = fptr.getParamString(IFptr.LIBFPTR_PARAM_MODEL_NAME);
String firmwareVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STATUS);
fptr.queryData();

long operatorID      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_OPERATOR_ID);
long logicalNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_LOGICAL_NUMBER);
long shiftState      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_STATE);
long model           = fptr.getParamInt(IFptr.LIBFPTR_PARAM_MODEL);
long mode            = fptr.getParamInt(IFptr.LIBFPTR_PARAM_MODE);
long submode         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SUBMODE);
long receiptNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_NUMBER);
long documentNumber  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
long shiftNumber     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER);
long receiptType     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE);
long lineLength      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
long lineLengthPix   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX);

double receiptSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPT_SUM);

boolean isFiscalDevice          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FISCAL);
boolean isFiscalFN              = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_FISCAL);
boolean isFNPresent             = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_PRESENT);
boolean isInvalidFN             = fptr.getParamBool(IFptr.LIBFPTR_PARAM_INVALID_FN);
boolean isCashDrawerOpened      = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CASHDRAWER_OPENED);
boolean isPaperPresent          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT);
boolean isPaperNearEnd          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PAPER_NEAR_END);
boolean isCoverOpened           = fptr.getParamBool(IFptr.LIBFPTR_PARAM_COVER_OPENED);
boolean isPrinterConnectionLost = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PRINTER_CONNECTION_LOST);
boolean isPrinterError          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PRINTER_ERROR);
boolean isCutError              = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CUT_ERROR);
boolean isPrinterOverheat       = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PRINTER_OVERHEAT);
boolean isDeviceBlocked         = fptr.getParamBool(IFptr.LIBFPTR_PARAM_BLOCKED);

Date dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);

String serialNumber    = fptr.getParamString(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER);
String modelName       = fptr.getParamString(IFptr.LIBFPTR_PARAM_MODEL_NAME);
String firmwareVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_STATUS];
[fptr queryData];

uint operatorID      = [fptr getParamInt:LIBFPTR_PARAM_OPERATOR_ID];
uint logicalNumber   = [fptr getParamInt:LIBFPTR_PARAM_LOGICAL_NUMBER];
uint shiftState      = [fptr getParamInt:LIBFPTR_PARAM_SHIFT_STATE];
uint model           = [fptr getParamInt:LIBFPTR_PARAM_MODEL];
uint mode            = [fptr getParamInt:LIBFPTR_PARAM_MODE];
uint submode         = [fptr getParamInt:LIBFPTR_PARAM_SUBMODE];
uint receiptNumber   = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_NUMBER];
uint documentNumber  = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENT_NUMBER];
uint shiftNumber     = [fptr getParamInt:LIBFPTR_PARAM_SHIFT_NUMBER];
uint receiptType     = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_TYPE];
uint lineLength      = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_LINE_LENGTH];
uint lineLengthPix   = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX];

double receiptSum = [fptr getParamDouble:LIBFPTR_PARAM_RECEIPT_SUM];

bool isFiscalDevice          = [fptr getParamBool:LIBFPTR_PARAM_FISCAL];
bool isFiscalFN              = [fptr getParamBool:LIBFPTR_PARAM_FN_FISCAL];
bool isFNPresent             = [fptr getParamBool:LIBFPTR_PARAM_FN_PRESENT];
bool isInvalidFN             = [fptr getParamBool:LIBFPTR_PARAM_INVALID_FN];
bool isCashDrawerOpened      = [fptr getParamBool:LIBFPTR_PARAM_CASHDRAWER_OPENED];
bool isPaperPresent          = [fptr getParamBool:LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT];
bool isPaperNearEnd          = [fptr getParamBool:LIBFPTR_PARAM_PAPER_NEAR_END];
bool isCoverOpened           = [fptr getParamBool:LIBFPTR_PARAM_COVER_OPENED];
bool isPrinterConnectionLost = [fptr getParamBool:LIBFPTR_PARAM_PRINTER_CONNECTION_LOST];
bool isPrinterError          = [fptr getParamBool:LIBFPTR_PARAM_PRINTER_ERROR];
bool isCutError              = [fptr getParamBool:LIBFPTR_PARAM_CUT_ERROR];
bool isPrinterOverheat       = [fptr getParamBool:LIBFPTR_PARAM_PRINTER_OVERHEAT];
bool isDeviceBlocked         = [fptr getParamBool:LIBFPTR_PARAM_BLOCKED];

NSDate *dateTime = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];

NSString *serialNumber    = [fptr getParamString:LIBFPTR_PARAM_SERIAL_NUMBER];
NSString *modelName       = [fptr getParamString:LIBFPTR_PARAM_MODEL_NAME];
NSString *firmwareVersion = [fptr getParamString:LIBFPTR_PARAM_UNIT_VERSION];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_STATUS);
fptr.queryData();

uint operatorID      = fptr.getParamInt(Constants.LIBFPTR_PARAM_OPERATOR_ID);
uint logicalNumber   = fptr.getParamInt(Constants.LIBFPTR_PARAM_LOGICAL_NUMBER);
uint shiftState      = fptr.getParamInt(Constants.LIBFPTR_PARAM_SHIFT_STATE);
uint model           = fptr.getParamInt(Constants.LIBFPTR_PARAM_MODEL);
uint mode            = fptr.getParamInt(Constants.LIBFPTR_PARAM_MODE);
uint submode         = fptr.getParamInt(Constants.LIBFPTR_PARAM_SUBMODE);
uint receiptNumber   = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_NUMBER);
uint documentNumber  = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER);
uint shiftNumber     = fptr.getParamInt(Constants.LIBFPTR_PARAM_SHIFT_NUMBER);
uint receiptType     = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_TYPE);
uint lineLength      = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
uint lineLengthPix   = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX);

double receiptSum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_RECEIPT_SUM);

bool isFiscalDevice          = fptr.getParamBool(Constants.LIBFPTR_PARAM_FISCAL);
bool isFiscalFN              = fptr.getParamBool(Constants.LIBFPTR_PARAM_FN_FISCAL);
bool isFNPresent             = fptr.getParamBool(Constants.LIBFPTR_PARAM_FN_PRESENT);
bool isInvalidFN             = fptr.getParamBool(Constants.LIBFPTR_PARAM_INVALID_FN);
bool isCashDrawerOpened      = fptr.getParamBool(Constants.LIBFPTR_PARAM_CASHDRAWER_OPENED);
bool isPaperPresent          = fptr.getParamBool(Constants.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT);
bool isPaperNearEnd          = fptr.getParamBool(Constants.LIBFPTR_PARAM_PAPER_NEAR_END);
bool isCoverOpened           = fptr.getParamBool(Constants.LIBFPTR_PARAM_COVER_OPENED);
bool isPrinterConnectionLost = fptr.getParamBool(Constants.LIBFPTR_PARAM_PRINTER_CONNECTION_LOST);
bool isPrinterError          = fptr.getParamBool(Constants.LIBFPTR_PARAM_PRINTER_ERROR);
bool isCutError              = fptr.getParamBool(Constants.LIBFPTR_PARAM_CUT_ERROR);
bool isPrinterOverheat       = fptr.getParamBool(Constants.LIBFPTR_PARAM_PRINTER_OVERHEAT);
bool isDeviceBlocked         = fptr.getParamBool(Constants.LIBFPTR_PARAM_BLOCKED);

DateTime dateTime = fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);

String serialNumber    = fptr.getParamString(Constants.LIBFPTR_PARAM_SERIAL_NUMBER);
String modelName       = fptr.getParamString(Constants.LIBFPTR_PARAM_MODEL_NAME);
String firmwareVersion = fptr.getParamString(Constants.LIBFPTR_PARAM_UNIT_VERSION);
var
    operatorID:       Longint;
    logicalNumber:    Longint;
    shiftState:       Longint;
    model:            Longint;
    mode:             Longint;
    submode:          Longint;
    receiptNumber:    Longint;
    documentNumber:   Longint;
    shiftNumber:      Longint;
    receiptType:      Longint;
    lineLength:       Longint;
    lineLengthPix:    Longint;

    receiptSum: Double;

    isFiscalDevice:          LongBool;
    isFiscalFN:              LongBool;
    isFNPresent:             LongBool;
    isInvalidFN:             LongBool;
    isCashDrawerOpened:      LongBool;
    isPaperPresent:          LongBool;
    isPaperNearEnd:          LongBool;
    isCoverOpened:           LongBool;
    isPrinterConnectionLost: LongBool;
    isPrinterError:          LongBool;
    isCutError:              LongBool;
    isPrinterOverheat:       LongBool;
    isDeviceBlocked:         LongBool;

    dateTime: TDateTime;

    serialNumber:       String;
    modelName:          String;
    firmwareVersion:    String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_STATUS);
    fptr.queryData;

    operatorID      := fptr.getParamInt(fptr.LIBFPTR_PARAM_OPERATOR_ID);
    logicalNumber   := fptr.getParamInt(fptr.LIBFPTR_PARAM_LOGICAL_NUMBER);
    shiftState      := fptr.getParamInt(fptr.LIBFPTR_PARAM_SHIFT_STATE);
    model           := fptr.getParamInt(fptr.LIBFPTR_PARAM_MODEL);
    mode            := fptr.getParamInt(fptr.LIBFPTR_PARAM_MODE);
    submode         := fptr.getParamInt(fptr.LIBFPTR_PARAM_SUBMODE);
    receiptNumber   := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_NUMBER);
    documentNumber  := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
    shiftNumber     := fptr.getParamInt(fptr.LIBFPTR_PARAM_SHIFT_NUMBER);
    receiptType     := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);
    lineLength      := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
    lineLengthPix   := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX);

    receiptSum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_RECEIPT_SUM);

    isFiscalDevice          := fptr.getParamBool(fptr.LIBFPTR_PARAM_FISCAL);
    isFiscalFN              := fptr.getParamBool(fptr.LIBFPTR_PARAM_FN_FISCAL);
    isFNPresent             := fptr.getParamBool(fptr.LIBFPTR_PARAM_FN_PRESENT);
    isInvalidFN             := fptr.getParamBool(fptr.LIBFPTR_PARAM_INVALID_FN);
    isCashDrawerOpened      := fptr.getParamBool(fptr.LIBFPTR_PARAM_CASHDRAWER_OPENED);
    isPaperPresent          := fptr.getParamBool(fptr.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT);
    isPaperNearEnd          := fptr.getParamBool(fptr.LIBFPTR_PARAM_PAPER_NEAR_END);
    isCoverOpened           := fptr.getParamBool(fptr.LIBFPTR_PARAM_COVER_OPENED);
    isPrinterConnectionLost := fptr.getParamBool(fptr.LIBFPTR_PARAM_PRINTER_CONNECTION_LOST);
    isPrinterError          := fptr.getParamBool(fptr.LIBFPTR_PARAM_PRINTER_ERROR);
    isCutError              := fptr.getParamBool(fptr.LIBFPTR_PARAM_CUT_ERROR);
    isPrinterOverheat       := fptr.getParamBool(fptr.LIBFPTR_PARAM_PRINTER_OVERHEAT);
    isDeviceBlocked         := fptr.getParamBool(fptr.LIBFPTR_PARAM_BLOCKED);

    dateTime := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);

    serialNumber    := fptr.getParamString(fptr.LIBFPTR_PARAM_SERIAL_NUMBER);
    modelName       := fptr.getParamString(fptr.LIBFPTR_PARAM_MODEL_NAME);
    firmwareVersion := fptr.getParamString(fptr.LIBFPTR_PARAM_UNIT_VERSION);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_STATUS)
fptr.QueryData()

operatorID      := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_OPERATOR_ID)
logicalNumber   := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_LOGICAL_NUMBER)
shiftState      := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_SHIFT_STATE)
model           := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_MODEL)
mode            := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_MODE)
submode         := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_SUBMODE)
receiptNumber   := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_NUMBER)
documentNumber  := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER)
shiftNumber     := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_SHIFT_NUMBER)
receiptType     := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE)
lineLength      := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH)
lineLengthPix   := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX)

receiptSum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_RECEIPT_SUM)

isFiscalDevice          := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_FISCAL)
isFiscalFN              := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_FN_FISCAL)
isFNPresent             := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_FN_PRESENT)
isInvalidFN             := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_INVALID_FN);
isCashDrawerOpened      := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_CASHDRAWER_OPENED)
isPaperPresent          := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT)
isPaperNearEnd          := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_PAPER_NEAR_END)
isCoverOpened           := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_COVER_OPENED)
isPrinterConnectionLost := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_PRINTER_CONNECTION_LOST)
isPrinterError          := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_PRINTER_ERROR)
isCutError              := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_CUT_ERROR)
isPrinterOverheat       := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_PRINTER_OVERHEAT)
isDeviceBlocked         := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_BLOCKED)

dateTime := fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_DATE_TIME)

serialNumber    := fptr.GetParamString(fptr10.LIBFPTR_PARAM_SERIAL_NUMBER)
modelName       := fptr.GetParamString(fptr10.LIBFPTR_PARAM_MODEL_NAME)
firmwareVersion := fptr.GetParamString(fptr10.LIBFPTR_PARAM_UNIT_VERSION)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_STATUS);
Fptr.queryData();

operatorID      = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_OPERATOR_ID);
logicalNumber   = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_LOGICAL_NUMBER);
shiftState      = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_SHIFT_STATE);
model           = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_MODEL);
mode            = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_MODE);
submode         = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_SUBMODE);
receiptNumber   = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_NUMBER);
documentNumber  = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
shiftNumber     = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_SHIFT_NUMBER);
receiptType     = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE);
lineLength      = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
lineLengthPix   = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX);

receiptSum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_RECEIPT_SUM);

isFiscalDevice          = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_FISCAL);
isFiscalFN              = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_FN_FISCAL);
isFNPresent             = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_FN_PRESENT);
isInvalidFN             = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_INVALID_FN);
isCashDrawerOpened      = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_CASHDRAWER_OPENED);
isPaperPresent          = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT);
isPaperNearEnd          = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_PAPER_NEAR_END);
isCoverOpened           = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_COVER_OPENED);
isPrinterConnectionLost = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_PRINTER_CONNECTION_LOST);
isPrinterError          = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_PRINTER_ERROR);
isCutError              = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_CUT_ERROR);
isPrinterOverheat       = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_PRINTER_OVERHEAT);
isDeviceBlocked         = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_BLOCKED);

dateTime = Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME);

serialNumber    = Fptr.getParamString(Fptr.LIBFPTR_PARAM_SERIAL_NUMBER);
modelName       = Fptr.getParamString(Fptr.LIBFPTR_PARAM_MODEL_NAME);
firmwareVersion = Fptr.getParamString(Fptr.LIBFPTR_PARAM_UNIT_VERSION);

Для запроса общей информации и статуса необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_STATUS.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_OPERATOR_ID Номер кассира int
LIBFPTR_PARAM_LOGICAL_NUMBER Номер ККТ в магазине int
LIBFPTR_PARAM_DATE_TIME Дата и время ККТ datetime
LIBFPTR_PARAM_FISCAL Флаг регистрации ККТ bool
LIBFPTR_PARAM_FN_FISCAL Флаг фискализации ФН bool
LIBFPTR_PARAM_FN_PRESENT Флаг наличия ФН в ККТ bool
LIBFPTR_PARAM_INVALID_FN Флаг корректности ФН bool
LIBFPTR_PARAM_SHIFT_STATE Состояние смены int
LIBFPTR_PARAM_CASHDRAWER_OPENED Денежный ящик открыт bool
LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT Наличие бумаги bool
LIBFPTR_PARAM_PAPER_NEAR_END Бумага скоро закончится. Если датчика скорого окончания бумаги в ККТ нет, то будет всегда возвращаться false bool
LIBFPTR_PARAM_COVER_OPENED Крышка открыта bool
LIBFPTR_PARAM_SERIAL_NUMBER Заводской номер ККТ string
LIBFPTR_PARAM_MODEL Номер модели ККТ int
LIBFPTR_PARAM_MODE Режим ККТ int
LIBFPTR_PARAM_SUBMODE Подрежим ККТ int
LIBFPTR_PARAM_RECEIPT_NUMBER Номер чека (внутренний счетчик ККТ) int
LIBFPTR_PARAM_DOCUMENT_NUMBER Номер документа (внутренний счетчик ККТ) int
LIBFPTR_PARAM_SHIFT_NUMBER Номер открытой смены или номер последней закрытой смены + 1 int
LIBFPTR_PARAM_RECEIPT_TYPE Тип открытого чека int
LIBFPTR_PARAM_RECEIPT_SUM Сумма текущего чека double
LIBFPTR_PARAM_RECEIPT_LINE_LENGTH Ширина чековой ленты, симв. int
LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX Ширина чековой ленты, пикс. int
LIBFPTR_PARAM_MODEL_NAME Название ККТ string
LIBFPTR_PARAM_UNIT_VERSION Версия ПО ККТ string
LIBFPTR_PARAM_PRINTER_CONNECTION_LOST Потеряно соединение с печатным механизмом bool
LIBFPTR_PARAM_PRINTER_ERROR Невосстановимая ошибка печатного механизма bool
LIBFPTR_PARAM_CUT_ERROR Ошибка отрезчика bool
LIBFPTR_PARAM_PRINTER_OVERHEAT Перегрев печатного механизма bool
LIBFPTR_PARAM_BLOCKED ККТ заблокирована из-за ошибок bool

Значение LIBFPTR_PARAM_CASH_DRAWER_STATUS может быть инвертировано по настройке LIBFPTR_SETTING_INVERT_CASH_DRAWER_STATUS.

Возможные значения для состояния смены (LIBFPTR_PARAM_SHIFT_STATE):

Возможные значения для типа открытого чека (LIBFPTR_PARAM_RECEIPT_TYPE):

Возможные значения для номера модели (LIBFPTR_PARAM_MODEL) представлены в разделе Список настроек.

Короткий запрос статуса ККТ

Короткий запрос статуса ККТ

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_SHORT_STATUS);
libfptr_query_data(fptr);

bool isCashDrawerOpened     = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_CASHDRAWER_OPENED) != 0);
bool isPaperPresent         = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT) != 0);
bool isPaperNearEnd         = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_PAPER_NEAR_END) != 0);
bool isCoverOpened          = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_COVER_OPENED) != 0);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SHORT_STATUS)
fptr.queryData()

isCashDrawerOpened      = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CASHDRAWER_OPENED)
isPaperPresent          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT)
isPaperNearEnd          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PAPER_NEAR_END)
isCoverOpened           = fptr.getParamBool(IFptr.LIBFPTR_PARAM_COVER_OPENED)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SHORT_STATUS);
fptr.queryData();

boolean isCashDrawerOpened      = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CASHDRAWER_OPENED);
boolean isPaperPresent          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT);
boolean isPaperNearEnd          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PAPER_NEAR_END);
boolean isCoverOpened           = fptr.getParamBool(IFptr.LIBFPTR_PARAM_COVER_OPENED);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SHORT_STATUS);
fptr.queryData();

boolean isCashDrawerOpened      = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CASHDRAWER_OPENED);
boolean isPaperPresent          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT);
boolean isPaperNearEnd          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_PAPER_NEAR_END);
boolean isCoverOpened           = fptr.getParamBool(IFptr.LIBFPTR_PARAM_COVER_OPENED);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_SHORT_STATUS];
[fptr queryData];

bool isCashDrawerOpened      = [fptr getParamBool:LIBFPTR_PARAM_CASHDRAWER_OPENED];
bool isPaperPresent          = [fptr getParamBool:LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT];
bool isPaperNearEnd          = [fptr getParamBool:LIBFPTR_PARAM_PAPER_NEAR_END];
bool isCoverOpened           = [fptr getParamBool:LIBFPTR_PARAM_COVER_OPENED];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_SHORT_STATUS);
fptr.queryData();

bool isCashDrawerOpened      = fptr.getParamBool(Constants.LIBFPTR_PARAM_CASHDRAWER_OPENED);
bool isPaperPresent          = fptr.getParamBool(Constants.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT);
bool isPaperNearEnd          = fptr.getParamBool(Constants.LIBFPTR_PARAM_PAPER_NEAR_END);
bool isCoverOpened           = fptr.getParamBool(Constants.LIBFPTR_PARAM_COVER_OPENED);
var
    isCashDrawerOpened:      LongBool;
    isPaperPresent:          LongBool;
    isPaperNearEnd:          LongBool;
    isCoverOpened:           LongBool;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_SHORT_STATUS);
    fptr.queryData;

    isCashDrawerOpened      := fptr.getParamBool(fptr.LIBFPTR_PARAM_CASHDRAWER_OPENED);
    isPaperPresent          := fptr.getParamBool(fptr.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT);
    isPaperNearEnd          := fptr.getParamBool(fptr.LIBFPTR_PARAM_PAPER_NEAR_END);
    isCoverOpened           := fptr.getParamBool(fptr.LIBFPTR_PARAM_COVER_OPENED);
end;
fptr.SetParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_SHORT_STATUS)
fptr.QueryData()

isCashDrawerOpened      := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_CASHDRAWER_OPENED)
isPaperPresent          := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT)
isPaperNearEnd          := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_PAPER_NEAR_END)
isCoverOpened           := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_COVER_OPENED)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_STATUS);
Fptr.queryData();

isCashDrawerOpened      = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_CASHDRAWER_OPENED);
isPaperPresent          = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT);
isPaperNearEnd          = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_PAPER_NEAR_END);
isCoverOpened           = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_COVER_OPENED);

Для короткого запроса статуса ККТ необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_SHORT_STATUS.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_CASHDRAWER_OPENED Денежный ящик открыт bool
LIBFPTR_PARAM_RECEIPT_PAPER_PRESENT Наличие бумаги bool
LIBFPTR_PARAM_PAPER_NEAR_END Бумага скоро закончится. Если датчика скорого окончания бумаги в ККТ нет, то будет всегда возвращаться false bool
LIBFPTR_PARAM_COVER_OPENED Крышка открыта bool

Значение LIBFPTR_PARAM_CASH_DRAWER_STATUS может быть инвертировано по настройке LIBFPTR_SETTING_INVERT_CASH_DRAWER_STATUS.

Сумма наличных в денежном ящике

Запрос суммы наличных в денежном ящике

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_CASH_SUM);
libfptr_query_data(fptr);

double cashSum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASH_SUM)
fptr.queryData()

cashSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASH_SUM);
fptr.queryData();

double cashSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASH_SUM);
fptr.queryData();

double cashSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_CASH_SUM];
[fptr queryData];

double cashSum = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_CASH_SUM);
fptr.queryData();

double cashSum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    cashSum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_CASH_SUM);
    fptr.queryData;

    cashSum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_CASH_SUM)
fptr.QueryData()

cashSum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CASH_SUM);
Fptr.queryData();

cashSum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Для запроса суммы наличности в денежном ящике необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_CASH_SUM.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SUM Сумма наличных в ДЯ double

Версия модуля

Запрос версии прошивки

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_UNIT_VERSION);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_UNIT_TYPE, LIBFPTR_UT_FIRMWARE);
libfptr_query_data(fptr);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
}
std::wstring firmwareVersion = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_FIRMWARE)
fptr.queryData()

firmwareVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_FIRMWARE);
fptr.queryData();

String firmwareVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_FIRMWARE);
fptr.queryData();

String firmwareVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_UNIT_VERSION];
[fptr setParam:LIBFPTR_PARAM_UNIT_TYPE, intParam:LIBFPTR_UT_FIRMWARE];
[fptr queryData];

NSString *firmwareVersion = [fptr getParamString:LIBFPTR_PARAM_UNIT_VERSION];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(Constants.LIBFPTR_PARAM_UNIT_TYPE, Constants.LIBFPTR_UT_FIRMWARE);
fptr.queryData();

String firmwareVersion = fptr.getParamString(Constants.LIBFPTR_PARAM_UNIT_VERSION);
var
    firmwareVersion: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_UNIT_VERSION);
    fptr.setParam(fptr.LIBFPTR_PARAM_UNIT_TYPE, fptr.LIBFPTR_UT_FIRMWARE);
    fptr.queryData;

    firmwareVersion := fptr.getParamString(fptr.LIBFPTR_PARAM_UNIT_VERSION);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_UNIT_VERSION)
fptr.SetParam(fptr10.LIBFPTR_PARAM_UNIT_TYPE, fptr10.LIBFPTR_UT_FIRMWARE)
fptr.QueryData()

firmwareVersion := fptr.GetParamString(fptr10.LIBFPTR_PARAM_UNIT_VERSION)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_UNIT_VERSION);
Fptr.setParam(Fptr.LIBFPTR_PARAM_UNIT_TYPE, Fptr.LIBFPTR_UT_FIRMWARE);
Fptr.queryData();

firmwareVersion = Fptr.getParamString(Fptr.LIBFPTR_PARAM_UNIT_VERSION);

Запрос версии конфигурации

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_UNIT_VERSION);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_UNIT_TYPE, LIBFPTR_UT_CONFIGURATION);
libfptr_query_data(fptr);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
}
std::wstring configurationVersion = std::wstring(&str[0]);

int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_RELEASE_VERSION, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_RELEASE_VERSION, &str[0], str.size());
}
std::wstring releaseVersion = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_CONFIGURATION)
fptr.queryData()

configurationVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION)
releaseVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_RELEASE_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_CONFIGURATION);
fptr.queryData();

String configurationVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
String releaseVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_RELEASE_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_CONFIGURATION);
fptr.queryData();

String configurationVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
String releaseVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_RELEASE_VERSION);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_UNIT_VERSION];
[fptr setParam:LIBFPTR_PARAM_UNIT_TYPE, intParam:LIBFPTR_UT_CONFIGURATION];
[fptr queryData];

NSString *configurationVersion = [fptr getParamString:LIBFPTR_PARAM_UNIT_VERSION];
NSString *releaseVersion = [fptr getParamString:LIBFPTR_PARAM_UNIT_RELEASE_VERSION];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(Constants.LIBFPTR_PARAM_UNIT_TYPE, Constants.LIBFPTR_UT_CONFIGURATION);
fptr.queryData();

String configurationVersion = fptr.getParamString(Constants.LIBFPTR_PARAM_UNIT_VERSION);
String releaseVersion = fptr.getParamString(Constants.LIBFPTR_PARAM_UNIT_RELEASE_VERSION);
var
    configurationVersion: String;
    releaseVersion: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_UNIT_VERSION);
    fptr.setParam(fptr.LIBFPTR_PARAM_UNIT_TYPE, fptr.LIBFPTR_UT_CONFIGURATION);
    fptr.queryData;

    configurationVersion := fptr.getParamString(fptr.LIBFPTR_PARAM_UNIT_VERSION);
    releaseVersion := fptr.getParamString(fptr.LIBFPTR_PARAM_UNIT_RELEASE_VERSION);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_UNIT_VERSION)
fptr.SetParam(fptr10.LIBFPTR_PARAM_UNIT_TYPE, fptr10.LIBFPTR_UT_CONFIGURATION)
fptr.QueryData()

configurationVersion    := fptr.GetParamString(fptr10.LIBFPTR_PARAM_UNIT_VERSION)
releaseVersion          := fptr.GetParamString(fptr10.LIBFPTR_PARAM_UNIT_RELEASE_VERSION)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_UNIT_VERSION);
Fptr.setParam(Fptr.LIBFPTR_PARAM_UNIT_TYPE, Fptr.LIBFPTR_UT_CONFIGURATION);
Fptr.queryData();

configurationVersion = Fptr.getParamString(Fptr.LIBFPTR_PARAM_UNIT_VERSION);
releaseVersion = Fptr.getParamString(Fptr.LIBFPTR_PARAM_UNIT_RELEASE_VERSION);

Запрос версии движка шаблонов

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_UNIT_VERSION);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_UNIT_TYPE, LIBFPTR_UT_TEMPLATES);
libfptr_query_data(fptr);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
}
std::wstring templatesVersion = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_TEMPLATES)
fptr.queryData()

templatesVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_TEMPLATES);
fptr.queryData();

String templatesVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_TEMPLATES);
fptr.queryData();

String templatesVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_UNIT_VERSION];
[fptr setParam:LIBFPTR_PARAM_UNIT_TYPE, intParam:LIBFPTR_UT_TEMPLATES];
[fptr queryData];

NSString *templatesVersion = [fptr getParamString:LIBFPTR_PARAM_UNIT_VERSION];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(Constants.LIBFPTR_PARAM_UNIT_TYPE, Constants.LIBFPTR_UT_TEMPLATES);
fptr.queryData();

String templatesVersion = fptr.getParamString(Constants.LIBFPTR_PARAM_UNIT_VERSION);
var
    templatesVersion: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_UNIT_VERSION);
    fptr.setParam(fptr.LIBFPTR_PARAM_UNIT_TYPE, fptr.LIBFPTR_UT_TEMPLATES);
    fptr.queryData;

    templatesVersion := fptr.getParamString(fptr.LIBFPTR_PARAM_UNIT_VERSION);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_UNIT_VERSION)
fptr.SetParam(fptr10.LIBFPTR_PARAM_UNIT_TYPE, fptr10.LIBFPTR_UT_TEMPLATES)
fptr.QueryData()

templatesVersion := fptr.GetParamString(fptr10.LIBFPTR_PARAM_UNIT_VERSION)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_UNIT_VERSION);
Fptr.setParam(Fptr.LIBFPTR_PARAM_UNIT_TYPE, Fptr.LIBFPTR_UT_TEMPLATES);
Fptr.queryData();

templatesVersion = Fptr.getParamString(Fptr.LIBFPTR_PARAM_UNIT_VERSION);

Запрос версии блока управления

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_UNIT_VERSION);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_UNIT_TYPE, LIBFPTR_UT_CONTROL_UNIT);
libfptr_query_data(fptr);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
}
std::wstring controlUnitVersion = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_CONTROL_UNIT)
fptr.queryData()

controlUnitVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_CONTROL_UNIT);
fptr.queryData();

String controlUnitVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_CONTROL_UNIT);
fptr.queryData();

String controlUnitVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_UNIT_VERSION];
[fptr setParam:LIBFPTR_PARAM_UNIT_TYPE, intParam:LIBFPTR_UT_CONTROL_UNIT];
[fptr queryData];

NSString *controlUnitVersion = [fptr getParamString:LIBFPTR_PARAM_UNIT_VERSION];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(Constants.LIBFPTR_PARAM_UNIT_TYPE, Constants.LIBFPTR_UT_CONTROL_UNIT);
fptr.queryData();

String controlUnitVersion = fptr.getParamString(Constants.LIBFPTR_PARAM_UNIT_VERSION);
var
    controlUnitVersion: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_UNIT_VERSION);
    fptr.setParam(fptr.LIBFPTR_PARAM_UNIT_TYPE, fptr.LIBFPTR_UT_CONTROL_UNIT);
    fptr.queryData;

    controlUnitVersion := fptr.getParamString(fptr.LIBFPTR_PARAM_UNIT_VERSION);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_UNIT_VERSION)
fptr.SetParam(fptr10.LIBFPTR_PARAM_UNIT_TYPE, fptr10.LIBFPTR_UT_CONTROL_UNIT)
fptr.QueryData()

controlUnitVersion := fptr.GetParamString(fptr10.LIBFPTR_PARAM_UNIT_VERSION)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_UNIT_VERSION);
Fptr.setParam(Fptr.LIBFPTR_PARAM_UNIT_TYPE, Fptr.LIBFPTR_UT_CONTROL_UNIT);
Fptr.queryData();

controlUnitVersion = Fptr.getParamString(Fptr.LIBFPTR_PARAM_UNIT_VERSION);

Запрос версии загрузчика

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_UNIT_VERSION);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_UNIT_TYPE, LIBFPTR_UT_BOOT);
libfptr_query_data(fptr);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
}
std::wstring bootVersion = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_BOOT)
fptr.queryData()

bootVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_BOOT);
fptr.queryData();

String bootVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_UNIT_TYPE, IFptr.LIBFPTR_UT_BOOT);
fptr.queryData();

String bootVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_UNIT_VERSION];
[fptr setParam:LIBFPTR_PARAM_UNIT_TYPE, intParam:LIBFPTR_UT_BOOT];
[fptr queryData];

NSString *bootVersion = [fptr getParamString:LIBFPTR_PARAM_UNIT_VERSION];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_UNIT_VERSION);
fptr.setParam(Constants.LIBFPTR_PARAM_UNIT_TYPE, Constants.LIBFPTR_UT_BOOT);
fptr.queryData();

String bootVersion = fptr.getParamString(Constants.LIBFPTR_PARAM_UNIT_VERSION);
var
    bootVersion: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_UNIT_VERSION);
    fptr.setParam(fptr.LIBFPTR_PARAM_UNIT_TYPE, fptr.LIBFPTR_UT_BOOT);
    fptr.queryData;

    bootVersion := fptr.getParamString(fptr.LIBFPTR_PARAM_UNIT_VERSION);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_UNIT_VERSION)
fptr.SetParam(fptr10.LIBFPTR_PARAM_UNIT_TYPE, fptr10.LIBFPTR_UT_BOOT)
fptr.QueryData()

bootVersion := fptr.GetParamString(fptr10.LIBFPTR_PARAM_UNIT_VERSION)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_UNIT_VERSION);
Fptr.setParam(Fptr.LIBFPTR_PARAM_UNIT_TYPE, Fptr.LIBFPTR_UT_BOOT);
Fptr.queryData();

bootVersion = Fptr.getParamString(Fptr.LIBFPTR_PARAM_UNIT_VERSION);

Для запроса версии модуля необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_UNIT_VERSION и указать один из модулей в параметре LIBFPTR_PARAM_UNIT_TYPE:

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_UNIT_VERSION Версия модуля string
LIBFPTR_PARAM_UNIT_RELEASE_VERSION Версия релиза (только для запроса LIBFPTR_UT_CONFIGURATION) string

Параметры массива картинок

Запрос параметров картинок

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_PICTURES_ARRAY_INFO);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_PICTURES_ARRAY_INFO)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_PICTURES_ARRAY_INFO);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_PICTURES_ARRAY_INFO);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_PICTURES_ARRAY_INFO];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_PICTURES_ARRAY_INFO);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_COUNT);
var
    count:  Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_PICTURES_ARRAY_INFO);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_PICTURES_ARRAY_INFO)
fptr.QueryData()

count := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_PICTURES_ARRAY_INFO);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_COUNT);

Для запроса параметров массива картинок необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_PICTURES_ARRAY_INFO.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_COUNT Количество картинок int

Параметры картинки в памяти

Запрос параметров картинки в памяти ККТ

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_PICTURE_INFO);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_PICTURE_NUMBER, 1);
libfptr_query_data(fptr);

int width = libfptr_get_param_int(fptr, LIBFPTR_PARAM_WIDTH);
int height = libfptr_get_param_int(fptr, LIBFPTR_PARAM_HEIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_PICTURE_INFO)
fptr.setParam(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1)
fptr.queryData()

width = fptr.getParamInt(IFptr.LIBFPTR_PARAM_WIDTH)
height = fptr.getParamInt(IFptr.LIBFPTR_PARAM_HEIGHT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_PICTURE_INFO);
fptr.setParam(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
fptr.queryData();

long width = fptr.getParamInt(IFptr.LIBFPTR_PARAM_WIDTH);
long height = fptr.getParamInt(IFptr.LIBFPTR_PARAM_HEIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_PICTURE_INFO);
fptr.setParam(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
fptr.queryData();

long width = fptr.getParamInt(IFptr.LIBFPTR_PARAM_WIDTH);
long height = fptr.getParamInt(IFptr.LIBFPTR_PARAM_HEIGHT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_PICTURE_INFO];
[fptr setParam:LIBFPTR_PARAM_PICTURE_NUMBER, intParam:1];
[fptr queryData];

uint width = [fptr getParamInt:LIBFPTR_PARAM_WIDTH];
uint height = [fptr getParamInt:LIBFPTR_PARAM_HEIGHT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_PICTURE_INFO);
fptr.setParam(Constants.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
fptr.queryData();

uint width = fptr.getParamInt(Constants.LIBFPTR_PARAM_WIDTH);
uint height = fptr.getParamInt(Constants.LIBFPTR_PARAM_HEIGHT);
var
    width:  Longint;
    height: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_PICTURE_INFO);
    fptr.setParam(fptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
    fptr.queryData;

    width  := fptr.getParamInt(fptr.LIBFPTR_PARAM_WIDTH);
    height := fptr.getParamInt(fptr.LIBFPTR_PARAM_HEIGHT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_PICTURE_INFO)
fptr.SetParam(fptr10.LIBFPTR_PARAM_PICTURE_NUMBER, 1)
fptr.QueryData()

width  := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_WIDTH)
height := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_HEIGHT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_PICTURE_INFO);
Fptr.setParam(Fptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
Fptr.queryData();

width = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_WIDTH);
height = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_HEIGHT);

Для запроса параметров картинки из памяти ККТ необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_PICTURE_INFO и указать номер картинки в параметре LIBFPTR_PARAM_PICTURE_NUMBER.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_WIDTH Ширина картинки, пикс. int
LIBFPTR_PARAM_HEIGHT Высота картинки, пикс. int

Состояние кода защиты

Запрос состояния кода защиты / лицензии

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_LICENSE_ACTIVATED);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_LICENSE_NUMBER, 4);
libfptr_query_data(fptr);

bool entered = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_LICENSE_ENTERED) != 0);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_LICENSE_ACTIVATED)
fptr.setParam(IFptr.LIBFPTR_PARAM_LICENSE_NUMBER, 4)
fptr.queryData()

entered = fptr.getParamBool(IFptr.LIBFPTR_PARAM_LICENSE_ENTERED)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_LICENSE_ACTIVATED);
fptr.setParam(IFptr.LIBFPTR_PARAM_LICENSE_NUMBER, 4);
fptr.queryData();

boolean entered = fptr.getParamBool(IFptr.LIBFPTR_PARAM_LICENSE_ENTERED);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_LICENSE_ACTIVATED);
fptr.setParam(IFptr.LIBFPTR_PARAM_LICENSE_NUMBER, 4);
fptr.queryData();

boolean entered = fptr.getParamBool(IFptr.LIBFPTR_PARAM_LICENSE_ENTERED);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_LICENSE_ACTIVATED];
[fptr setParam:LIBFPTR_PARAM_LICENSE_NUMBER, intParam:4];
[fptr queryData];

bool entered = [fptr getParamBool:LIBFPTR_PARAM_LICENSE_ENTERED];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_LICENSE_ACTIVATED);
fptr.setParam(Constants.LIBFPTR_PARAM_LICENSE_NUMBER, 4);
fptr.queryData();

bool entered = fptr.getParamBool(Constants.LIBFPTR_PARAM_LICENSE_ENTERED);
var
    entered: LongBool;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_LICENSE_ACTIVATED);
    fptr.setParam(fptr.LIBFPTR_PARAM_LICENSE_NUMBER, 4);
    fptr.queryData;

    entered := fptr.getParamBool(fptr.LIBFPTR_PARAM_LICENSE_ENTERED);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_LICENSE_ACTIVATED)
fptr.SetParam(fptr10.LIBFPTR_PARAM_LICENSE_NUMBER, 4)
fptr.QueryData();

entered := fptr.GetParamBool(Constants.LIBFPTR_PARAM_LICENSE_ENTERED)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_LICENSE_ACTIVATED);
Fptr.setParam(Fptr.LIBFPTR_PARAM_LICENSE_NUMBER, 1);
Fptr.queryData();

entered = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_LICENSE_ENTERED);

Для запроса состояни кода защиты / лицензии необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равнымLIBFPTR_DT_LICENSE_ACTIVATED и указать номер кода защиты / лицензии в параметре LIBFPTR_PARAM_LICENSE_NUMBER. После выполнения метода параметр LIBFPTR_PARAM_LICENSE_ENTERED примет значение true, если код защиты введен, и false, если нет.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_LICENSE_ENTERED Лицензия введена bool

Счетчики регистраций

Запрос суммы регистраций в чеках прихода (продажи)

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_REGISTRATIONS_SUM);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL);
libfptr_query_data(fptr);

double sum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_REGISTRATIONS_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
fptr.queryData()

sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_REGISTRATIONS_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_REGISTRATIONS_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_REGISTRATIONS_SUM];
[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL];
[fptr queryData];

double sum = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_REGISTRATIONS_SUM);
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    sum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_REGISTRATIONS_SUM);
    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL);
    fptr.queryData;

    sum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_REGISTRATIONS_SUM)
fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL)
fptr.QueryData()

sum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_REGISTRATIONS_SUM);
Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL);
Fptr.queryData();

sum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Запрос количества регистраций в чеках расхода (покупки)

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_REGISTRATIONS_COUNT);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_BUY);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_REGISTRATIONS_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_BUY)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_REGISTRATIONS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_BUY);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_REGISTRATIONS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_BUY);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_REGISTRATIONS_COUNT];
[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_BUY];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_REGISTRATIONS_COUNT);
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_BUY);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_REGISTRATIONS_COUNT);
    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_BUY);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_REGISTRATIONS_COUNT)
fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_BUY)
fptr.QueryData()

count := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_REGISTRATIONS_COUNT);
Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_BUY);
Fptr.queryData();

counted = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_COUNT);

Для запроса суммы регистраций необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_REGISTRATIONS_SUM и указать тип чека в параметре LIBFPTR_PARAM_RECEIPT_TYPE.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SUM Сумма регистраций double

Для запроса количества регистраций необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_REGISTRATIONS_COUNT и указать тип чека в параметре LIBFPTR_PARAM_RECEIPT_TYPE.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_COUNT Количество регистраций int

Тип чека (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Счетчики оплат

Запрос суммы наличных платежей в чеках прихода (продажи)

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_PAYMENT_SUM);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_PAYMENT_TYPE, LIBFPTR_PT_CASH);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL);
libfptr_query_data(fptr);

double sum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_PAYMENT_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH)
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
fptr.queryData()

sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_PAYMENT_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_PAYMENT_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_PAYMENT_SUM];
[fptr setParam:LIBFPTR_PARAM_PAYMENT_TYPE, intParam:LIBFPTR_PT_CASH];
[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL];
[fptr queryData];

double sum = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_PAYMENT_SUM);
fptr.setParam(Constants.LIBFPTR_PARAM_PAYMENT_TYPE, Constants.LIBFPTR_PT_CASH);
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    sum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_PAYMENT_SUM);
    fptr.setParam(fptr.LIBFPTR_PARAM_PAYMENT_TYPE, fptr.LIBFPTR_PT_CASH);
    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL);
    fptr.queryData;

    sum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_PAYMENT_SUM)
fptr.SetParam(fptr10.LIBFPTR_PARAM_PAYMENT_TYPE, fptr10.LIBFPTR_PT_CASH)
fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL)
fptr.QueryData()

sum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_PAYMENT_SUM);
Fptr.setParam(Fptr.LIBFPTR_PARAM_PAYMENT_TYPE, Fptr.LIBFPTR_PT_CASH);
Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL);
Fptr.queryData();

sum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Для запроса суммы платежей необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_PAYMENT_SUM и указать тип чека в параметре LIBFPTR_PARAM_RECEIPT_TYPE и способ расчета в параметре LIBFPTR_PARAM_PAYMENT_TYPE.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SUM Сумма оплат double

Тип чека (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Способ расчета (LIBFPTR_PARAM_PAYMENT_TYPE) может принимать следующие значения:

Счетчики внесений и выплат

Запрос суммы внесений

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_CASHIN_SUM);
libfptr_query_data(fptr);

double sum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASHIN_SUM)
fptr.queryData()

sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASHIN_SUM);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASHIN_SUM);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_CASHIN_SUM];
[fptr queryData];

double sum = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_CASHIN_SUM);
fptr.queryData();

double sum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    sum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_CASHIN_SUM);
    fptr.queryData;

    sum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_CASHIN_SUM)
fptr.QueryData()

sum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CASHIN_SUM);
Fptr.queryData();

sum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Запрос суммы выплат

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_CASHOUT_SUM);
libfptr_query_data(fptr);

double sum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASHOUT_SUM)
fptr.queryData()

sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASHOUT_SUM);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASHOUT_SUM);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_CASHOUT_SUM];
[fptr queryData];

double sum = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_CASHOUT_SUM);
fptr.queryData();

double sum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    sum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_CASHOUT_SUM);
    fptr.queryData;

    sum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_CASHOUT_SUM)
fptr.QueryData()

sum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CASHOUT_SUM);
Fptr.queryData();

sum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Запрос количества внесений

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_CASHIN_COUNT);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENTS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASHIN_COUNT)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASHIN_COUNT);
fptr.queryData;

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASHIN_COUNT);
fptr.queryData;

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_CASHIN_COUNT];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENTS_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_CASHIN_COUNT);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENTS_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_CASHIN_COUNT);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_CASHIN_COUNT)
fptr.QueryData()

count := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENTS_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CASHIN_COUNT);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);

Запрос количества выплат

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_CASHOUT_COUNT);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENTS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASHOUT_COUNT)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASHOUT_COUNT);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CASHOUT_COUNT);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_CASHOUT_COUNT];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENTS_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_CASHOUT_COUNT);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENTS_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_CASHOUT_COUNT);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_CASHOUT_COUNT)
fptr.QueryData()

count := fptr.GetParamInt(Constants.LIBFPTR_PARAM_DOCUMENTS_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CASHOUT_COUNT);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);

Для запроса суммы внесений или выплат необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_CASHIN_SUM (или LIBFPTR_DT_CASHOUT_SUM соответственно).

Результатом этих запросов будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SUM Сумма внесений/выплат double

Для запроса количества внесений или выплат необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_CASHIN_COUNT (или LIBFPTR_DT_CASHOUT_COUNT соответственно).

Результатом этих запросов будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DOCUMENTS_COUNT Количество документов внесений/выплат int

Сумма выручки

Запрос суммы выручки

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_REVENUE);
libfptr_query_data(fptr);

double revenue = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_REVENUE)
fptr.queryData()

revenue = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_REVENUE);
fptr.queryData();

double revenue = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_REVENUE);
fptr.queryData();

double revenue = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_REVENUE];
[fptr queryData];

double revenue = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_REVENUE);
fptr.queryData();

double revenue = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    revenue: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_REVENUE);
    fptr.queryData;

    revenue := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_REVENUE)
fptr.QueryData()

revenue := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_REVENUE);
Fptr.queryData();

revenue = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Для запроса суммы выручки необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_REVENUE.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SUM Сумма выручки double

Текущие дата и время ККТ

Запрос текущих даты и времени ККТ

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_DATE_TIME);
libfptr_query_data(fptr);

int year, month, day, hour, minute, second;
libfptr_get_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, &year, &month, &day, &hour, &minute, &second);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_DATE_TIME)
fptr.queryData()

# Тип переменной datetime - datetime.datetime
dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_DATE_TIME);
fptr.queryData();

Date dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_DATE_TIME);
fptr.queryData();

Date dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_DATE_TIME];
[fptr queryData];

NSDate *dateTime = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_DATE_TIME);
fptr.queryData();

DateTime dateTime = fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);
var
    dateTime:   TDateTime;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_DATE_TIME);
    fptr.queryData;

    dateTime := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_DATE_TIME)
fptr.QueryData()

dateTime := fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_DATE_TIME)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_DATE_TIME);
Fptr.queryData();

dateTime = Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME);

Для запроса текущих даты и времени в ККТ необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_DATE_TIME.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DATE_TIME Текущие дата и время в ККТ datetime

Состояние смены

Запрос состояния смены

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_SHIFT_STATE);
libfptr_query_data(fptr);

int state   = libfptr_get_param_int(fptr, LIBFPTR_PARAM_SHIFT_STATE);
int number  = libfptr_get_param_int(fptr, LIBFPTR_PARAM_SHIFT_NUMBER);
int year, month, day, hour, minute, second;
libfptr_get_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, &year, &month, &day, &hour, &minute, &second);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SHIFT_STATE)
fptr.queryData()

state       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_STATE)
number      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER)
# Тип переменной datetime - datetime.datetime
dateTime    = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SHIFT_STATE);
fptr.queryData();

long state       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_STATE);
long number      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER);
Date dateTime    = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SHIFT_STATE);
fptr.queryData();

long state       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_STATE);
long number      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER);
Date dateTime    = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_SHIFT_STATE];
[fptr queryData];

uint state          = [fptr getParamInt:LIBFPTR_PARAM_SHIFT_STATE];
uint number         = [fptr getParamInt:LIBFPTR_PARAM_SHIFT_NUMBER];
NSDate *dateTime    = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_SHIFT_STATE);
fptr.queryData();

uint state          = fptr.getParamInt(Constants.LIBFPTR_PARAM_SHIFT_STATE);
uint number         = fptr.getParamInt(Constants.LIBFPTR_PARAM_SHIFT_NUMBER);
DateTime dateTime   = fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);
var
    state:      Longint;
    number:     Longint;
    dateTime:   TDateTime;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_SHIFT_STATE);
    fptr.queryData;

    state       := fptr.getParamInt(fptr.LIBFPTR_PARAM_SHIFT_STATE);
    number      := fptr.getParamInt(fptr.LIBFPTR_PARAM_SHIFT_NUMBER);
    dateTime    := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_SHIFT_STATE)
fptr.QueryData()

state       := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_SHIFT_STATE)
number      := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_SHIFT_NUMBER)
dateTime    := fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_DATE_TIME)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_SHIFT_STATE);
Fptr.queryData();

state    = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_SHIFT_STATE);
number   = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_SHIFT_NUMBER);
dateTime = Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME);

Для запроса состояния смены необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_SHIFT_STATE.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SHIFT_STATE Состояние смены int
LIBFPTR_PARAM_SHIFT_NUMBER Номер смены int
LIBFPTR_PARAM_DATE_TIME Дата и время истечения текущей смены datetime

Состояние смены (LIBFPTR_PARAM_SHIFT_STATE) может принимать следующие значения:

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

Параметр LIBFPTR_PARAM_DATE_TIME имеет смысл только при открытой или истекшей смене.

Состояние чека

Запрос состояния чека

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_RECEIPT_STATE);
libfptr_query_data(fptr);

int receiptType     = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE);
int receiptNumber   = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_NUMBER);
int documentNumber  = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER);
int sum             = libfptr_get_param_double(fptr, LIBFPTR_PARAM_RECEIPT_SUM);
int remainder       = libfptr_get_param_double(fptr, LIBFPTR_PARAM_REMAINDER);
int change          = libfptr_get_param_double(fptr, LIBFPTR_PARAM_CHANGE);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_RECEIPT_STATE)
fptr.queryData()

receiptType     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE)
receiptNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_NUMBER)
documentNumber  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)
sum             = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPT_SUM)
remainder       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_REMAINDER)
change          = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_CHANGE)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_RECEIPT_STATE);
fptr.queryData();

long receiptType    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE);
long receiptNumber  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_NUMBER);
long documentNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
double sum          = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPT_SUM);
double remainder    = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_REMAINDER);
double change       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_CHANGE);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_RECEIPT_STATE);
fptr.queryData();

long receiptType    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE);
long receiptNumber  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_NUMBER);
long documentNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
double sum          = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPT_SUM);
double remainder    = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_REMAINDER);
double change       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_CHANGE);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_RECEIPT_STATE];
[fptr queryData];

uint receiptType        = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_TYPE];
uint receiptNumber      = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_NUMBER];
uint documentNumber     = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENT_NUMBER];
double documentNumber   = [fptr getParamDouble:LIBFPTR_PARAM_RECEIPT_SUM];
double remainder        = [fptr getParamDouble:LIBFPTR_PARAM_REMAINDER];
double change           = [fptr getParamDouble:LIBFPTR_PARAM_CHANGE];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_RECEIPT_STATE);
fptr.queryData();

uint receiptType    = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_TYPE);
uint receiptNumber  = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_NUMBER);
uint documentNumber = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER);
double sum          = fptr.getParamDouble(Constants.LIBFPTR_PARAM_RECEIPT_SUM);
double remainder    = fptr.getParamDouble(Constants.LIBFPTR_PARAM_REMAINDER);
double change       = fptr.getParamDouble(Constants.LIBFPTR_PARAM_CHANGE);
var
    receiptType:    Longint;
    receiptNumber:  Longint;
    documentNumber: Longint;
    sum:            Double;
    remainder:      Double;
    change:         Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_RECEIPT_STATE);
    fptr.queryData;

    receiptType     := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);
    receiptNumber   := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_NUMBER);
    documentNumber  := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
    sum             := fptr.getParamDouble(fptr.LIBFPTR_PARAM_RECEIPT_SUM);
    remainder       := fptr.getParamDouble(fptr.LIBFPTR_PARAM_REMAINDER);
    change          := fptr.getParamDouble(fptr.LIBFPTR_PARAM_CHANGE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_RECEIPT_STATE)
fptr.QueryData()

receiptType     := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE)
receiptNumber   := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_NUMBER)
documentNumber  := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER)
sum             := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_RECEIPT_SUM)
remainder       := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_REMAINDER)
change          := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_CHANGE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_RECEIPT_STATE);
Fptr.queryData();

receiptType    = fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE);
receiptNumber  = fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_NUMBER);
documentNumber = fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
sum            = fptr.getParamDouble(Fptr.LIBFPTR_PARAM_RECEIPT_SUM);
remainder      = fptr.getParamDouble(Fptr.LIBFPTR_PARAM_REMAINDER);
change         = fptr.getParamDouble(Fptr.LIBFPTR_PARAM_CHANGE);

Для запроса состояния чека необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_RECEIPT_STATE.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_RECEIPT_TYPE Тип чека int
LIBFPTR_PARAM_RECEIPT_NUMBER Номер чека int
LIBFPTR_PARAM_DOCUMENT_NUMBER Номер документа int
LIBFPTR_PARAM_RECEIPT_SUM Текущая сумма чека double
LIBFPTR_PARAM_REMAINDER Неоплаченный остаток double
LIBFPTR_PARAM_CHANGE Сдача по чеку double

Тип чека (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Значения счетчиков LIBFPTR_PARAM_RECEIPT_NUMBER и LIBFPTR_PARAM_DOCUMENT_NUMBER не относятся к фискальному накопителю и содержат значения внутренних счетчиков ККТ. Данные счетчики могут увеличиваться вместе с печатью нефискальных и служебных документов. Для получения номеров фискальных документов нужно использовать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_LAST_DOCUMENT.

Значения параметров LIBFPTR_PARAM_RECEIPT_SUM, LIBFPTR_PARAM_REMAINDER и LIBFPTR_PARAM_CHANGE актуальны только при открытом чеке.

Заводской номер

Запрос заводского номера

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_SERIAL_NUMBER);
libfptr_query_data(fptr);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, &str[0], str.size());
}
std::wstring serialNumber = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SERIAL_NUMBER)
fptr.queryData()

serialNumber = fptr.getParamString(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SERIAL_NUMBER);
fptr.queryData();

String serialNumber = fptr.getParamString(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SERIAL_NUMBER);
fptr.queryData();

String serialNumber = fptr.getParamString(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_SERIAL_NUMBER];
[fptr queryData];

NSString *serialNumber = [fptr getParamString:LIBFPTR_PARAM_SERIAL_NUMBER];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_SERIAL_NUMBER);
fptr.queryData();

String serialNumber = fptr.getParamString(Constants.LIBFPTR_PARAM_SERIAL_NUMBER);
var
    serialNumber: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_SERIAL_NUMBER);
    fptr.queryData;

    serialNumber = fptr.getParamString(fptr.LIBFPTR_PARAM_SERIAL_NUMBER);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_SERIAL_NUMBER)
fptr.QueryData()

serialNumber := fptr.GetParamString(fptr10.LIBFPTR_PARAM_SERIAL_NUMBER)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_SERIAL_NUMBER);
Fptr.queryData();

serialNumber = fptr.getParamString(Fptr.LIBFPTR_PARAM_SERIAL_NUMBER);

Для запроса заводского номера ККТ необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_SERIAL_NUMBER.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SERIAL_NUMBER Заводской номер string

Информация о модели ККТ

Запрос информации о модели ККТ

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_MODEL_INFO);
libfptr_query_data(fptr);

int model = libfptr_get_param_int(fptr, LIBFPTR_PARAM_MODEL);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_MODEL_NAME, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_MODEL_NAME, &str[0], str.size());
}
std::wstring modelName = std::wstring(&str[0]);

int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_UNIT_VERSION, &str[0], str.size());
}
std::wstring firmwareVersion = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_MODEL_INFO)
fptr.queryData()

model           = fptr.getParamInt(IFptr.LIBFPTR_PARAM_MODEL)
modelName       = fptr.getParamString(IFptr.LIBFPTR_PARAM_MODEL_NAME)
firmwareVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_MODEL_INFO);
fptr.queryData();

long model             = fptr.getParamInt(IFptr.LIBFPTR_PARAM_MODEL);
String modelName       = fptr.getParamString(IFptr.LIBFPTR_PARAM_MODEL_NAME);
String firmwareVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_MODEL_INFO);
fptr.queryData();

long model             = fptr.getParamInt(IFptr.LIBFPTR_PARAM_MODEL);
String modelName       = fptr.getParamString(IFptr.LIBFPTR_PARAM_MODEL_NAME);
String firmwareVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_MODEL_INFO];
[fptr queryData];

uint model                = [fptr getParamInt:LIBFPTR_PARAM_MODEL];
NSString *modelName       = [fptr getParamString:LIBFPTR_PARAM_MODEL_NAME];
NSString *firmwareVersion = [fptr getParamString:LIBFPTR_PARAM_UNIT_VERSION];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_MODEL_INFO);
fptr.queryData();

uint model             = fptr.getParamInt(Constants.LIBFPTR_PARAM_MODEL);
String modelName       = fptr.getParamString(Constants.LIBFPTR_PARAM_MODEL_NAME);
String firmwareVersion = fptr.getParamString(Constants.LIBFPTR_PARAM_UNIT_VERSION);
var
    model:              Longint;
    modelName:          String;
    firmwareVersion:    String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_MODEL_INFO);
    fptr.queryData;

    model                   := fptr.getParamInt(fptr.LIBFPTR_PARAM_MODEL);
    String modelName        := fptr.getParamString(fptr.LIBFPTR_PARAM_MODEL_NAME);
    String firmwareVersion  := fptr.getParamString(fptr.LIBFPTR_PARAM_UNIT_VERSION);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_MODEL_INFO)
fptr.QueryData()

model           := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_MODEL)
modelName       := fptr.GetParamString(fptr10.LIBFPTR_PARAM_MODEL_NAME)
firmwareVersion := fptr.GetParamString(fptr10.LIBFPTR_PARAM_UNIT_VERSION)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_MODEL_INFO);
Fptr.queryData();

model           = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_MODEL);
modelName       = Fptr.getParamString(Fptr.LIBFPTR_PARAM_MODEL_NAME);
firmwareVersion = Fptr.getParamString(Fptr.LIBFPTR_PARAM_UNIT_VERSION);

Для запроса информации о модели ККТ необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_MODEL_INFO.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_MODEL Номер модели ККТ int
LIBFPTR_PARAM_MODEL_NAME Наименование ККТ string
LIBFPTR_PARAM_UNIT_VERSION Версия ПО ККТ string

Возможные значения для номера модели (LIBFPTR_PARAM_MODEL) представлены в разделе Список настроек.

Ширина чековой ленты

Запрос ширины чековой ленты

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_RECEIPT_LINE_LENGTH);
libfptr_query_data(fptr);

int charLineLength  = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
int pixLineLength   = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_RECEIPT_LINE_LENGTH)
fptr.queryData()

charLineLength  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH)
pixLineLength   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_RECEIPT_LINE_LENGTH);
fptr.queryData();

long charLineLength  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
long pixLineLength   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_RECEIPT_LINE_LENGTH);
fptr.queryData();

long charLineLength  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
long pixLineLength   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_RECEIPT_LINE_LENGTH];
[fptr queryData];

uint charLineLength = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_LINE_LENGTH];
uint pixLineLength = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_RECEIPT_LINE_LENGTH);
fptr.queryData();

uint charLineLength  = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
uint pixLineLength   = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX);
var
    charLineLength: Longint;
    pixLineLength:  Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_RECEIPT_LINE_LENGTH);
    fptr.queryData;

    charLineLength  := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
    pixLineLength   := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_RECEIPT_LINE_LENGTH)
fptr.QueryData()

charLineLength  := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH)
pixLineLength   := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_RECEIPT_LINE_LENGTH);
Fptr.queryData();

charLineLength = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH);
pixLineLength  = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX);

Для запроса ширины чековой ленты необходимо вызвать метод queryData()** с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_RECEIPT_LINE_LENGTH.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_RECEIPT_LINE_LENGTH Ширина чековой ленты, симв. int
LIBFPTR_PARAM_RECEIPT_LINE_LENGTH_PIX Ширина чековой ленты, пикс. int

Ресурс отрезчика

Запрос постоянного ресурса отрезчика

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_CUTTER_RESOURCE);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_COUNTER_TYPE, LIBFPTR_CT_ROLLUP);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CUTTER_RESOURCE)
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_ROLLUP)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CUTTER_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_ROLLUP);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CUTTER_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_ROLLUP);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_CUTTER_RESOURCE];
[fptr setParam:LIBFPTR_PARAM_COUNTER_TYPE, intParam:LIBFPTR_CT_ROLLUP];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_CUTTER_RESOURCE);
fptr.setParam(Constants.LIBFPTR_PARAM_COUNTER_TYPE, Constants.LIBFPTR_CT_ROLLUP);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_CUTTER_RESOURCE);
    fptr.setParam(fptr.LIBFPTR_PARAM_COUNTER_TYPE, fptr.LIBFPTR_CT_ROLLUP);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_CUTTER_RESOURCE)
fptr.SetParam(fptr10.LIBFPTR_PARAM_COUNTER_TYPE, fptr10.LIBFPTR_CT_ROLLUP)
fptr.QueryData()

count := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CUTTER_RESOURCE);
Fptr.SetParam(Fptr.LIBFPTR_PARAM_COUNTER_TYPE, Fptr.LIBFPTR_CT_ROLLUP);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_COUNT);

Запрос сбрасываемого ресурса отрезчика

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_CUTTER_RESOURCE);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_COUNTER_TYPE, LIBFPTR_CT_RESETTABLE);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CUTTER_RESOURCE)
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_RESETTABLE)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CUTTER_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_RESETTABLE);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CUTTER_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_RESETTABLE);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_CUTTER_RESOURCE];
[fptr setParam:LIBFPTR_PARAM_COUNTER_TYPE, intParam:LIBFPTR_CT_RESETTABLE];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_CUTTER_RESOURCE);
fptr.setParam(Constants.LIBFPTR_PARAM_COUNTER_TYPE, Constants.LIBFPTR_CT_RESETTABLE);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_CUTTER_RESOURCE);
    fptr.setParam(fptr.LIBFPTR_PARAM_COUNTER_TYPE, fptr.LIBFPTR_CT_RESETTABLE);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_CUTTER_RESOURCE)
fptr.SetParam(fptr10.LIBFPTR_PARAM_COUNTER_TYPE, fptr10.LIBFPTR_CT_RESETTABLE)
fptr.QueryData()

count := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CUTTER_RESOURCE);
Fptr.SetParam(Fptr.LIBFPTR_PARAM_COUNTER_TYPE, Fptr.LIBFPTR_CT_RESETTABLE);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_COUNT);

Для запроса ресурса отрезчика необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_CUTTER_RESOURCE и указать тип счетчика LIBFPTR_PARAM_COUNTER_TYPE.

Тип счетчика (LIBFPTR_PARAM_COUNTER_TYPE) может принимать следующие значения:

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_COUNT Количество отрезов int

Ресурс шагового двигателя

Запрос постоянного ресурса ШД для всех шагов

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_STEP_RESOURCE);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_COUNTER_TYPE, LIBFPTR_CT_ROLLUP);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_STEP_COUNTER_TYPE, LIBFPTR_SCT_OVERALL);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STEP_RESOURCE)
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_ROLLUP)
fptr.setParam(IFptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, IFptr.LIBFPTR_SCT_OVERALL)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STEP_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_ROLLUP);
fptr.setParam(IFptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, IFptr.LIBFPTR_SCT_OVERALL);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STEP_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_ROLLUP);
fptr.setParam(IFptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, IFptr.LIBFPTR_SCT_OVERALL);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_STEP_RESOURCE];
[fptr setParam:LIBFPTR_PARAM_COUNTER_TYPE, intParam:LIBFPTR_CT_ROLLUP];
[fptr setParam:LIBFPTR_PARAM_STEP_COUNTER_TYPE, intParam:LIBFPTR_SCT_OVERALL];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_STEP_RESOURCE);
fptr.setParam(Constants.LIBFPTR_PARAM_COUNTER_TYPE, Constants.LIBFPTR_CT_ROLLUP);
fptr.setParam(Constants.LIBFPTR_PARAM_STEP_COUNTER_TYPE, Constants.LIBFPTR_SCT_OVERALL);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_STEP_RESOURCE);
    fptr.setParam(fptr.LIBFPTR_PARAM_COUNTER_TYPE, fptr.LIBFPTR_CT_ROLLUP);
    fptr.setParam(fptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, fptr.LIBFPTR_SCT_OVERALL);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_STEP_RESOURCE)
fptr.SetParam(fptr10.LIBFPTR_PARAM_COUNTER_TYPE, fptr10.LIBFPTR_CT_ROLLUP)
fptr.SetParam(fptr10.LIBFPTR_PARAM_STEP_COUNTER_TYPE, fptr10.LIBFPTR_SCT_OVERALL)
fptr.QueryData()

count := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CUTTER_RESOURCE);
Fptr.SetParam(Fptr.LIBFPTR_PARAM_COUNTER_TYPE, Fptr.LIBFPTR_CT_ROLLUP);
Fptr.SetParam(Fptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, Fptr.LIBFPTR_SCT_OVERALL);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_COUNT);

Запрос постоянного ресурса ШД для шагов вперед

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_STEP_RESOURCE);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_COUNTER_TYPE, LIBFPTR_CT_ROLLUP);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_STEP_COUNTER_TYPE, LIBFPTR_SCT_FORWARD);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STEP_RESOURCE)
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_ROLLUP)
fptr.setParam(IFptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, IFptr.LIBFPTR_SCT_FORWARD)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STEP_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_ROLLUP);
fptr.setParam(IFptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, IFptr.LIBFPTR_SCT_FORWARD);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STEP_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_ROLLUP);
fptr.setParam(IFptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, IFptr.LIBFPTR_SCT_FORWARD);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_STEP_RESOURCE];
[fptr setParam:LIBFPTR_PARAM_COUNTER_TYPE, intParam:LIBFPTR_CT_ROLLUP];
[fptr setParam:LIBFPTR_PARAM_STEP_COUNTER_TYPE, intParam:LIBFPTR_SCT_FORWARD];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_STEP_RESOURCE);
fptr.setParam(Constants.LIBFPTR_PARAM_COUNTER_TYPE, Constants.LIBFPTR_CT_ROLLUP);
fptr.setParam(Constants.LIBFPTR_PARAM_STEP_COUNTER_TYPE, Constants.LIBFPTR_SCT_FORWARD);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_STEP_RESOURCE);
    fptr.setParam(fptr.LIBFPTR_PARAM_COUNTER_TYPE, fptr.LIBFPTR_CT_ROLLUP);
    fptr.setParam(fptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, fptr.LIBFPTR_SCT_FORWARD);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_STEP_RESOURCE)
fptr.SetParam(fptr10.LIBFPTR_PARAM_COUNTER_TYPE, fptr10.LIBFPTR_CT_ROLLUP)
fptr.SetParam(fptr10.LIBFPTR_PARAM_STEP_COUNTER_TYPE, fptr10.LIBFPTR_SCT_FORWARD)
fptr.QueryData()

count := fptr.getParamInt(fptr10.LIBFPTR_PARAM_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CUTTER_RESOURCE);
Fptr.SetParam(Fptr.LIBFPTR_PARAM_COUNTER_TYPE, Fptr.LIBFPTR_CT_ROLLUP);
Fptr.SetParam(Fptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, Fptr.LIBFPTR_SCT_FORWARD);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_COUNT);

Запрос сбрасываемого ресурса ШД для всех шагов

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_STEP_RESOURCE);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_COUNTER_TYPE, LIBFPTR_CT_RESETTABLE);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_STEP_COUNTER_TYPE, LIBFPTR_SCT_OVERALL);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STEP_RESOURCE)
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_RESETTABLE)
fptr.setParam(IFptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, IFptr.LIBFPTR_SCT_OVERALL)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STEP_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_RESETTABLE);
fptr.setParam(IFptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, IFptr.LIBFPTR_SCT_OVERALL);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STEP_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_RESETTABLE);
fptr.setParam(IFptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, IFptr.LIBFPTR_SCT_OVERALL);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_STEP_RESOURCE];
[fptr setParam:LIBFPTR_PARAM_COUNTER_TYPE, intParam:LIBFPTR_CT_RESETTABLE];
[fptr setParam:LIBFPTR_PARAM_STEP_COUNTER_TYPE, intParam:LIBFPTR_SCT_OVERALL];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_STEP_RESOURCE);
fptr.setParam(Constants.LIBFPTR_PARAM_COUNTER_TYPE, Constants.LIBFPTR_CT_RESETTABLE);
fptr.setParam(Constants.LIBFPTR_PARAM_STEP_COUNTER_TYPE, Constants.LIBFPTR_SCT_OVERALL);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_STEP_RESOURCE);
    fptr.setParam(fptr.LIBFPTR_PARAM_COUNTER_TYPE, fptr.LIBFPTR_CT_RESETTABLE);
    fptr.setParam(fptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, fptr.LIBFPTR_SCT_OVERALL);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_STEP_RESOURCE)
fptr.SetParam(fptr10.LIBFPTR_PARAM_COUNTER_TYPE, fptr10.LIBFPTR_CT_RESETTABLE)
fptr.SetParam(fptr10.LIBFPTR_PARAM_STEP_COUNTER_TYPE, fptr10.LIBFPTR_SCT_OVERALL)
fptr.QueryData()

count := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CUTTER_RESOURCE);
Fptr.SetParam(Fptr.LIBFPTR_PARAM_COUNTER_TYPE, Fptr.LIBFPTR_CT_RESETTABLE);
Fptr.SetParam(Fptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, Fptr.LIBFPTR_SCT_OVERALL);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_COUNT);

Запрос сбрасываемого ресурса ШД для шагов вперед

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_STEP_RESOURCE);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_COUNTER_TYPE, LIBFPTR_CT_RESETTABLE);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_STEP_COUNTER_TYPE, LIBFPTR_SCT_FORWARD);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STEP_RESOURCE)
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_RESETTABLE)
fptr.setParam(IFptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, IFptr.LIBFPTR_SCT_FORWARD)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STEP_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_RESETTABLE);
fptr.setParam(IFptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, IFptr.LIBFPTR_SCT_FORWARD);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STEP_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_RESETTABLE);
fptr.setParam(IFptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, IFptr.LIBFPTR_SCT_FORWARD);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_STEP_RESOURCE];
[fptr setParam:LIBFPTR_PARAM_COUNTER_TYPE, intParam:LIBFPTR_CT_RESETTABLE];
[fptr setParam:LIBFPTR_PARAM_STEP_COUNTER_TYPE, intParam:LIBFPTR_SCT_FORWARD];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_STEP_RESOURCE);
fptr.setParam(Constants.LIBFPTR_PARAM_COUNTER_TYPE, Constants.LIBFPTR_CT_RESETTABLE);
fptr.setParam(Constants.LIBFPTR_PARAM_STEP_COUNTER_TYPE, Constants.LIBFPTR_SCT_FORWARD);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_STEP_RESOURCE);
    fptr.setParam(fptr.LIBFPTR_PARAM_COUNTER_TYPE, fptr.LIBFPTR_CT_RESETTABLE);
    fptr.setParam(fptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, fptr.LIBFPTR_SCT_FORWARD);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_STEP_RESOURCE)
fptr.SetParam(fptr10.LIBFPTR_PARAM_COUNTER_TYPE, fptr10.LIBFPTR_CT_RESETTABLE)
fptr.SetParam(fptr10.LIBFPTR_PARAM_STEP_COUNTER_TYPE, fptr10.LIBFPTR_SCT_FORWARD)
fptr.QueryData()

count := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CUTTER_RESOURCE);
Fptr.SetParam(Fptr.LIBFPTR_PARAM_COUNTER_TYPE, Fptr.LIBFPTR_CT_RESETTABLE);
Fptr.SetParam(Fptr.LIBFPTR_PARAM_STEP_COUNTER_TYPE, Fptr.LIBFPTR_SCT_FORWARD);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_COUNT);

Для запроса ресурса шагового двигателя необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_STEP_RESOURCE и указать тип счетчика LIBFPTR_PARAM_COUNTER_TYPE и тип счетчика шагов LIBFPTR_PARAM_STEP_COUNTER_TYPE.

Тип счетчика (LIBFPTR_PARAM_COUNTER_TYPE) может принимать следующие значения:

Тип счетчика шагов (LIBFPTR_PARAM_STEP_COUNTER_TYPE) может принимать следующие значения:

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_COUNT Количество шагов int

Ресурс ТПГ

Запрос постоянного ресурса ТПГ

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_TERMAL_RESOURCE);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_COUNTER_TYPE, LIBFPTR_CT_ROLLUP);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_TERMAL_RESOURCE)
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_ROLLUP)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_TERMAL_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_ROLLUP);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_TERMAL_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_ROLLUP);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_TERMAL_RESOURCE];
[fptr setParam:LIBFPTR_PARAM_COUNTER_TYPE, intParam:LIBFPTR_CT_ROLLUP];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_TERMAL_RESOURCE);
fptr.setParam(Constants.LIBFPTR_PARAM_COUNTER_TYPE, Constants.LIBFPTR_CT_ROLLUP);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_TERMAL_RESOURCE);
    fptr.setParam(fptr.LIBFPTR_PARAM_COUNTER_TYPE, fptr.LIBFPTR_CT_ROLLUP);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_TERMAL_RESOURCE)
fptr.SetParam(fptr10.LIBFPTR_PARAM_COUNTER_TYPE, fptr10.LIBFPTR_CT_ROLLUP)
fptr.QueryData()

count := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_TERMAL_RESOURCE);
Fptr.SetParam(Fptr.LIBFPTR_PARAM_COUNTER_TYPE, Fptr.LIBFPTR_CT_ROLLUP);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_COUNT);

Запрос сбрасываемого ресурса ТПГ

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_TERMAL_RESOURCE);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_COUNTER_TYPE, LIBFPTR_CT_RESETTABLE);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_TERMAL_RESOURCE)
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_RESETTABLE)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_TERMAL_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_RESETTABLE);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_TERMAL_RESOURCE);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNTER_TYPE, IFptr.LIBFPTR_CT_RESETTABLE);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_TERMAL_RESOURCE];
[fptr setParam:LIBFPTR_PARAM_COUNTER_TYPE, intParam:LIBFPTR_CT_RESETTABLE];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_TERMAL_RESOURCE);
fptr.setParam(Constants.LIBFPTR_PARAM_COUNTER_TYPE, Constants.LIBFPTR_CT_RESETTABLE);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_TERMAL_RESOURCE);
    fptr.setParam(fptr.LIBFPTR_PARAM_COUNTER_TYPE, fptr.LIBFPTR_CT_RESETTABLE);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_TERMAL_RESOURCE)
fptr.SetParam(fptr10.LIBFPTR_PARAM_COUNTER_TYPE, fptr10.LIBFPTR_CT_RESETTABLE)
fptr.QueryData()

count := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_TERMAL_RESOURCE);
Fptr.SetParam(Fptr.LIBFPTR_PARAM_COUNTER_TYPE, Fptr.LIBFPTR_CT_RESETTABLE);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_COUNT);

Для запроса ресурса ТПГ необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_TERMAL_RESOURCE и указать тип счетчика LIBFPTR_PARAM_COUNTER_TYPE.

Тип счетчика (LIBFPTR_PARAM_COUNTER_TYPE) может принимать следующие значения:

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_COUNT Ресурс int

Сумма налога за смену

Запрос суммы налога НДС 18% за смену для чеков прихода

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_SHIFT_TAX_SUM);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_TAX_TYPE, LIBFPTR_TAX_VAT18);
libfptr_query_data(fptr);

double sum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SHIFT_TAX_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18)
fptr.queryData()

sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SHIFT_TAX_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SHIFT_TAX_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_SHIFT_TAX_SUM];
[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL];
[fptr setParam:LIBFPTR_PARAM_TAX_TYPE, intParam:LIBFPTR_TAX_VAT18];
[fptr queryData];

double sum = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_SHIFT_TAX_SUM);
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
fptr.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, Constants.LIBFPTR_TAX_VAT18);
fptr.queryData();

double sum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    sum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_SHIFT_TAX_SUM);
    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL);
    fptr.setParam(fptr.LIBFPTR_PARAM_TAX_TYPE, fptr.LIBFPTR_TAX_VAT18);
    fptr.queryData;

    sum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_SHIFT_TAX_SUM)
fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL)
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAX_TYPE, fptr10.LIBFPTR_TAX_VAT18)
fptr.QueryData()

sum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_SHIFT_TAX_SUM);
Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL);
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_VAT18);
Fptr.queryData();

sum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Для запроса суммы налога за смену необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_SHIFT_TAX_SUM и указать тип чека LIBFPTR_PARAM_RECEIPT_TYPE и тип налога LIBFPTR_PARAM_TAX_TYPE.

Тип чека (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Тип налога (LIBFPTR_PARAM_TAX_TYPE) может принимать следующие значения:

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SUM Сумма налога double

Сумма налога за чек

Запрос суммы налога НДС 18% последнего чека

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_RECEIPT_TAX_SUM);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_TAX_TYPE, LIBFPTR_TAX_VAT18);
libfptr_query_data(fptr);

double sum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_RECEIPT_TAX_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18)
fptr.queryData()

sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_RECEIPT_TAX_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_RECEIPT_TAX_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_RECEIPT_TAX_SUM];
[fptr setParam:LIBFPTR_PARAM_TAX_TYPE, intParam:LIBFPTR_TAX_VAT18];
[fptr queryData];

double sum = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_RECEIPT_TAX_SUM);
fptr.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, Constants.LIBFPTR_TAX_VAT18);
fptr.queryData();

double sum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    sum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_RECEIPT_TAX_SUM);
    fptr.setParam(fptr.LIBFPTR_PARAM_TAX_TYPE, fptr.LIBFPTR_TAX_VAT18);
    fptr.queryData;

    sum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_RECEIPT_TAX_SUM)
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAX_TYPE, fptr10.LIBFPTR_TAX_VAT18)
fptr.QueryData()

sum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_RECEIPT_TAX_SUM);
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_VAT18);
Fptr.queryData();

sum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Для запроса суммы налога за чек необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_RECEIPT_TAX_SUM и указать тип налога LIBFPTR_PARAM_TAX_TYPE.

Тип налога (LIBFPTR_PARAM_TAX_TYPE) может принимать следующие значения:

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SUM Сумма налога double

Необнуляемая сумма

Запрос необнуляемой суммы по чекам прихода

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_NON_NULLABLE_SUM);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL);
libfptr_query_data(fptr);

double sum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_NON_NULLABLE_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
fptr.queryData()

sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_NON_NULLABLE_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_NON_NULLABLE_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_NON_NULLABLE_SUM];
[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL];
[fptr queryData];

double sum = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_NON_NULLABLE_SUM);
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    sum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_NON_NULLABLE_SUM);
    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL);
    fptr.queryData;

    sum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_NON_NULLABLE_SUM)
fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL)
fptr.QueryData()

sum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_NON_NULLABLE_SUM);
Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL);
Fptr.queryData();

sum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Запрос необнуляемой суммы по чекам прихода по оплатам наличными

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_NON_NULLABLE_SUM_BY_PAYMENTS);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_PAYMENT_TYPE, LIBFPTR_PT_CASH);
libfptr_query_data(fptr);

double sum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_NON_NULLABLE_SUM_BY_PAYMENTS)
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH)
fptr.queryData()

sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_NON_NULLABLE_SUM_BY_PAYMENTS);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_NON_NULLABLE_SUM_BY_PAYMENTS);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_NON_NULLABLE_SUM_BY_PAYMENTS];
[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL];
[fptr setParam:LIBFPTR_PARAM_PAYMENT_TYPE, intParam:LIBFPTR_PT_CASH];
[fptr queryData];

double sum = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_NON_NULLABLE_SUM_BY_PAYMENTS);
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
fptr.setParam(Constants.LIBFPTR_PARAM_PAYMENT_TYPE, Constants.LIBFPTR_PT_CASH);
fptr.queryData();

double sum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    sum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_NON_NULLABLE_SUM_BY_PAYMENTS);
    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL);
    fptr.setParam(fptr.LIBFPTR_PARAM_PAYMENT_TYPE, fptr.LIBFPTR_PT_CASH);
    fptr.queryData;

    sum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_NON_NULLABLE_SUM_BY_PAYMENTS)
fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL)
fptr.SetParam(fptr10.LIBFPTR_PARAM_PAYMENT_TYPE, fptr10.LIBFPTR_PT_CASH)
fptr.QueryData()

sum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_NON_NULLABLE_SUM_BY_PAYMENTS);
Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL);
fptr.SetParam(Fptr.LIBFPTR_PARAM_PAYMENT_TYPE, Fptr.LIBFPTR_PT_CASH);
Fptr.queryData();

sum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Для запроса необнуляемой суммы необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_NON_NULLABLE_SUM и указать тип чека LIBFPTR_PARAM_RECEIPT_TYPE.

Для запроса необнуляемой суммы по заданному типу оплаты необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_NON_NULLABLE_SUM_BY_PAYMENTS и указать тип чека LIBFPTR_PARAM_RECEIPT_TYPE.

Тип чека (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Способ расчета (LIBFPTR_PARAM_PAYMENT_TYPE) может принимать следующие значения:

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SUM Сумма налога double

Количество чеков

Запрос количества чеков прихода

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_RECEIPT_COUNT);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENTS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_RECEIPT_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_RECEIPT_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_RECEIPT_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_RECEIPT_COUNT];
[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENTS_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_RECEIPT_COUNT);
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENTS_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_RECEIPT_COUNT);
    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_RECEIPT_COUNT)
fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL)
fptr.QueryData()

count := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENTS_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_RECEIPT_COUNT);
Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);

Для запроса количества чеков необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_RECEIPT_COUNT и указать тип чека LIBFPTR_PARAM_RECEIPT_TYPE.

Тип чека (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DOCUMENTS_COUNT Количество чеков int

Количество отмененных чеков

Запрос количества отмененных чеков прихода

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_CANCELLATION_COUNT);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENTS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CANCELLATION_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CANCELLATION_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CANCELLATION_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_CANCELLATION_COUNT];
[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENTS_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_CANCELLATION_COUNT);
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENTS_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_CANCELLATION_COUNT);
    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_CANCELLATION_COUNT)
fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL)
fptr.QueryData()

count := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENTS_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CANCELLATION_COUNT);
Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);

Запрос общего количества отмененных чеков

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_CANCELLATION_COUNT_ALL);
libfptr_query_data(fptr);

int count = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENTS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CANCELLATION_COUNT_ALL)
fptr.queryData()

count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CANCELLATION_COUNT_ALL);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CANCELLATION_COUNT_ALL);
fptr.queryData();

long count = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_CANCELLATION_COUNT_ALL];
[fptr queryData];

uint count = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENTS_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_PARAM_DOCUMENTS_COUNT
fptr.queryData();

uint count = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENTS_COUNT);
var
    count: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
    fptr.queryData;

    count := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_CANCELLATION_COUNT_ALL)
fptr.QueryData()

count := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENTS_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CANCELLATION_COUNT_ALL);
Fptr.queryData();

count = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);

Для запроса количества отмененных чеков с заданным типом необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_CANCELLATION_COUNT и указать тип чека LIBFPTR_PARAM_RECEIPT_TYPE.

Тип чека (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Для запроса общего количества отмененных чеков необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_CANCELLATION_COUNT_ALL.

Результатом этих запросов будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DOCUMENTS_COUNT Количество чеков int

Сумма отмененных чеков

Запрос суммы отмененных чеков прихода

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_CANCELLATION_SUM);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL);
libfptr_query_data(fptr);

double sum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CANCELLATION_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
fptr.queryData()

sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CANCELLATION_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CANCELLATION_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_CANCELLATION_SUM];
[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL];
[fptr queryData];

double sum = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_CANCELLATION_SUM);
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    sum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_CANCELLATION_SUM_ALL);
    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL);
    fptr.queryData;

    sum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_CANCELLATION_SUM)
fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL)
fptr.QueryData()

sum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CANCELLATION_SUM);
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_RT_SELL);
Fptr.queryData();

sum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Запрос общей суммы отмененных чеков

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_CANCELLATION_SUM_ALL);
libfptr_query_data(fptr);

double sum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CANCELLATION_SUM_ALL)
fptr.queryData()

sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CANCELLATION_SUM_ALL);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_CANCELLATION_SUM_ALL);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_CANCELLATION_SUM_ALL];
[fptr queryData];

double sum = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_CANCELLATION_SUM_ALL);
fptr.queryData();

double sum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    sum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_CANCELLATION_SUM_ALL);
    fptr.queryData;

    sum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_CANCELLATION_SUM_ALL)
fptr.QueryData()

sum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_CANCELLATION_SUM_ALL);
Fptr.queryData();

sum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Для запроса суммы отмененных чеков с заданным типом необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_CANCELLATION_SUM и указать тип чека LIBFPTR_PARAM_RECEIPT_TYPE.

Тип чека (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Для запроса общей суммы отмененных чеков необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_CANCELLATION_SUM_ALL.

Результатом этих запросов будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SUM Сумма чеков double

Состояние источника питания

Запрос состояния аккумуляторов

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_POWER_SOURCE_STATE);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_POWER_SOURCE_TYPE, LIBFPTR_PST_BATTERY);
libfptr_query_data(fptr);

int charge      = libfptr_get_param_int(fptr, LIBFPTR_PARAM_BATTERY_CHARGE);
double voltage  = libfptr_get_param_double(fptr, LIBFPTR_PARAM_VOLTAGE);
bool useBattery = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_USE_BATTERY) != 0);
bool isCharging = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_BATTERY_CHARGING) != 0);
bool canPrint   = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_CAN_PRINT_WHILE_ON_BATTERY) != 0);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_POWER_SOURCE_STATE)
fptr.setParam(IFptr.LIBFPTR_PARAM_POWER_SOURCE_TYPE, IFptr.LIBFPTR_PST_BATTERY)
fptr.queryData()

charge      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_BATTERY_CHARGE)
voltage     = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_VOLTAGE)
useBattery  = fptr.getParamBool(IFptr.LIBFPTR_PARAM_USE_BATTERY)
isCharging  = fptr.getParamBool(IFptr.LIBFPTR_PARAM_BATTERY_CHARGING)
canPrint    = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CAN_PRINT_WHILE_ON_BATTERY)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_POWER_SOURCE_STATE);
fptr.setParam(IFptr.LIBFPTR_PARAM_POWER_SOURCE_TYPE, IFptr.LIBFPTR_PST_BATTERY);
fptr.queryData();

long charge         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_BATTERY_CHARGE);
double voltage      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_VOLTAGE);
boolean useBattery  = fptr.getParamBool(IFptr.LIBFPTR_PARAM_USE_BATTERY);
boolean isCharging  = fptr.getParamBool(IFptr.LIBFPTR_PARAM_BATTERY_CHARGING);
boolean canPrint    = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CAN_PRINT_WHILE_ON_BATTERY);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_POWER_SOURCE_STATE);
fptr.setParam(IFptr.LIBFPTR_PARAM_POWER_SOURCE_TYPE, IFptr.LIBFPTR_PST_BATTERY);
fptr.queryData();

long charge         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_BATTERY_CHARGE);
double voltage      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_VOLTAGE);
boolean useBattery  = fptr.getParamBool(IFptr.LIBFPTR_PARAM_USE_BATTERY);
boolean isCharging  = fptr.getParamBool(IFptr.LIBFPTR_PARAM_BATTERY_CHARGING);
boolean canPrint    = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CAN_PRINT_WHILE_ON_BATTERY);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_POWER_SOURCE_STATE];
[fptr setParam:LIBFPTR_PARAM_POWER_SOURCE_TYPE, intParam:LIBFPTR_PST_BATTERY];
[fptr queryData];

uint charge         = [fptr getParamInt:LIBFPTR_PARAM_BATTERY_CHARGE];
double voltage      = [fptr getParamDouble:LIBFPTR_PARAM_VOLTAGE];
bool useBattery     = [fptr getParamBool:LIBFPTR_PARAM_USE_BATTERY];
bool isCharging     = [fptr getParamBool:LIBFPTR_PARAM_BATTERY_CHARGING];
bool canPrint       = [fptr getParamBool:LIBFPTR_PARAM_CAN_PRINT_WHILE_ON_BATTERY];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_POWER_SOURCE_STATE);
fptr.setParam(Constants.LIBFPTR_PARAM_POWER_SOURCE_TYPE, Constants.LIBFPTR_PST_BATTERY);
fptr.queryData();

uint charge         = fptr.getParamInt(Constants.LIBFPTR_PARAM_BATTERY_CHARGE);
double voltage      = fptr.getParamDouble(Constants.LIBFPTR_PARAM_VOLTAGE);
bool useBattery     = fptr.getParamBool(Constants.LIBFPTR_PARAM_USE_BATTERY);
bool isCharging     = fptr.getParamBool(Constants.LIBFPTR_PARAM_BATTERY_CHARGING);
bool canPrint       = fptr.getParamBool(Constants.LIBFPTR_PARAM_CAN_PRINT_WHILE_ON_BATTERY);
var
    temperaturer:   Integer;
    voltage:        Double;
    useBattery:     LongBool;
    isCharging:     LongBool;
    canPrint:       LongBool;  
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_POWER_SOURCE_STATE);
    fptr.setParam(fptr.LIBFPTR_PARAM_POWER_SOURCE_TYPE, fptr.LIBFPTR_PST_BATTERY);
    fptr.queryData;

    charge          := fptr.getParamInt(fptr.LIBFPTR_PARAM_BATTERY_CHARGE);
    voltage         := fptr.getParamDouble(fptr.LIBFPTR_PARAM_VOLTAGE);
    useBattery      := fptr.getParamBool(fptr.LIBFPTR_PARAM_USE_BATTERY);
    isCharging      := fptr.getParamBool(fptr.LIBFPTR_PARAM_BATTERY_CHARGING);
    canPrint        := fptr.getParamBool(fptr.LIBFPTR_PARAM_CAN_PRINT_WHILE_ON_BATTERY);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_POWER_SOURCE_STATE)
fptr.SetParam(fptr10.LIBFPTR_PARAM_POWER_SOURCE_TYPE, fptr10.LIBFPTR_PST_BATTERY)
fptr.QueryData()

charge      := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_BATTERY_CHARGE)
voltage     := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_VOLTAGE)
useBattery  := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_USE_BATTERY)
isCharging  := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_BATTERY_CHARGING)
canPrint    := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_CAN_PRINT_WHILE_ON_BATTERY)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_POWER_SOURCE_STATE);
Fptr.setParam(Fptr.LIBFPTR_PARAM_POWER_SOURCE_TYPE, Fptr.LIBFPTR_PST_BATTERY);
Fptr.queryData();

charge     = fptr.getParamInt(Fptr.LIBFPTR_PARAM_BATTERY_CHARGE);
voltage    = fptr.getParamDouble(Fptr.LIBFPTR_PARAM_VOLTAGE);
useBattery = fptr.getParamBool(Fptr.LIBFPTR_PARAM_USE_BATTERY);
isCharging = fptr.getParamBool(Fptr.LIBFPTR_PARAM_BATTERY_CHARGING);
canPrint   = fptr.getParamBool(Fptr.LIBFPTR_PARAM_CAN_PRINT_WHILE_ON_BATTERY);

Для запроса состояния источника питания необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_POWER_SOURCE_STATE и указать тип источника LIBFPTR_PARAM_POWER_SOURCE_TYPE.

Тип источника (LIBFPTR_PARAM_POWER_SOURCE_TYPE) может принимать следующие значения:

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_BATTERY_CHARGE Заряд аккумулятора, проценты int
LIBFPTR_PARAM_VOLTAGE Напряжения источника питания, В. double
LIBFPTR_PARAM_USE_BATTERY Работа от аккумулятора bool
LIBFPTR_PARAM_BATTERY_CHARGING Аккумуляторы заряжаются bool
LIBFPTR_PARAM_CAN_PRINT_WHILE_ON_BATTERY ККТ может печатать при текущем заряде аккумулятора bool

Температура ТПГ

Запрос температуры ТПГ

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_PRINTER_TEMPERATURE);
libfptr_query_data(fptr);

int temperature = libfptr_get_param_int(fptr, LIBFPTR_PARAM_PRINTER_TEMPERATURE);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_PRINTER_TEMPERATURE)
fptr.queryData()

temperature = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PRINTER_TEMPERATURE)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_PRINTER_TEMPERATURE);
fptr.queryData();

long temperature = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PRINTER_TEMPERATURE);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_PRINTER_TEMPERATURE);
fptr.queryData();

long temperature = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PRINTER_TEMPERATURE);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_PRINTER_TEMPERATURE];
[fptr queryData];

uint temperature = [fptr getParamInt: LIBFPTR_PARAM_PRINTER_TEMPERATURE];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_PRINTER_TEMPERATURE);
fptr.queryData();

uint temperature = fptr.getParamInt(Constants.LIBFPTR_PARAM_PRINTER_TEMPERATURE);
var
    temperaturer: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_PRINTER_TEMPERATURE);
    fptr.queryData;

    temperature := fptr.getParamInt(fptr.LIBFPTR_PARAM_PRINTER_TEMPERATURE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_PRINTER_TEMPERATURE)
fptr.QueryData()

temperature := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_PRINTER_TEMPERATURE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_PRINTER_TEMPERATURE);
Fptr.queryData();

temperature = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_PRINTER_TEMPERATURE);

Для запроса температуры ТПГ необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_PRINTER_TEMPERATURE.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_PRINTER_TEMPERATURE Температура ТПГ, градусы int

Фатальные ошибки

Запрос фатальных ошибок

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_FATAL_STATUS);
libfptr_query_data(fptr);

bool noSerialNumber         = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_NO_SERIAL_NUMBER) != 0);
bool rtcFault               = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_RTC_FAULT) != 0);
bool settingsFault          = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_SETTINGS_FAULT) != 0);
bool counterFault           = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_COUNTERS_FAULT) != 0);
bool userMemoryFault        = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_USER_MEMORY_FAULT) != 0);
bool serviceCountersFault   = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_SERVICE_COUNTERS_FAULT) != 0);
bool attributesFault        = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_ATTRIBUTES_FAULT) != 0);
bool fnFault                = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_FN_FAULT) != 0);
bool invalidFN              = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_INVALID_FN) != 0);
bool hardFault              = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_HARD_FAULT) != 0);
bool memoryManagerFault     = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_MEMORY_MANAGER_FAULT) != 0);
bool scriptFault            = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_SCRIPTS_FAULT) != 0);
bool waitForReboot          = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_WAIT_FOR_REBOOT) != 0);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_FATAL_STATUS)
fptr.queryData()

noSerialNumber          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_NO_SERIAL_NUMBER)
rtcFault                = fptr.getParamBool(IFptr.LIBFPTR_PARAM_RTC_FAULT)
settingsFault           = fptr.getParamBool(IFptr.LIBFPTR_PARAM_SETTINGS_FAULT)
counterFault            = fptr.getParamBool(IFptr.LIBFPTR_PARAM_COUNTERS_FAULT)
userMemoryFault         = fptr.getParamBool(IFptr.LIBFPTR_PARAM_USER_MEMORY_FAULT)
serviceCountersFault    = fptr.getParamBool(IFptr.LIBFPTR_PARAM_SERVICE_COUNTERS_FAULT)
attributesFault         = fptr.getParamBool(IFptr.LIBFPTR_PARAM_ATTRIBUTES_FAULT)
fnFault                 = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_FAULT)
invalidFN               = fptr.getParamBool(IFptr.LIBFPTR_PARAM_INVALID_FN)
hardFault               = fptr.getParamBool(IFptr.LIBFPTR_PARAM_HARD_FAULT)
memoryManagerFault      = fptr.getParamBool(IFptr.LIBFPTR_PARAM_MEMORY_MANAGER_FAULT)
scriptFault             = fptr.getParamBool(IFptr.LIBFPTR_PARAM_SCRIPTS_FAULT)
waitForReboot           = fptr.getParamBool(IFptr.LIBFPTR_PARAM_WAIT_FOR_REBOOT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_FATAL_STATUS);
fptr.queryData();

boolean noSerialNumber          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_NO_SERIAL_NUMBER);
boolean rtcFault                = fptr.getParamBool(IFptr.LIBFPTR_PARAM_RTC_FAULT);
boolean settingsFault           = fptr.getParamBool(IFptr.LIBFPTR_PARAM_SETTINGS_FAULT);
boolean counterFault            = fptr.getParamBool(IFptr.LIBFPTR_PARAM_COUNTERS_FAULT);
boolean userMemoryFault         = fptr.getParamBool(IFptr.LIBFPTR_PARAM_USER_MEMORY_FAULT);
boolean serviceCountersFault    = fptr.getParamBool(IFptr.LIBFPTR_PARAM_SERVICE_COUNTERS_FAULT);
boolean attributesFault         = fptr.getParamBool(IFptr.LIBFPTR_PARAM_ATTRIBUTES_FAULT);
boolean fnFault                 = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_FAULT);
boolean invalidFN               = fptr.getParamBool(IFptr.LIBFPTR_PARAM_INVALID_FN);
boolean hardFault               = fptr.getParamBool(IFptr.LIBFPTR_PARAM_HARD_FAULT);
boolean memoryManagerFault      = fptr.getParamBool(IFptr.LIBFPTR_PARAM_MEMORY_MANAGER_FAULT);
boolean scriptFault             = fptr.getParamBool(IFptr.LIBFPTR_PARAM_SCRIPTS_FAULT);
boolean waitForReboot           = fptr.getParamBool(IFptr.LIBFPTR_PARAM_WAIT_FOR_REBOOT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_FATAL_STATUS);
fptr.queryData();

boolean noSerialNumber          = fptr.getParamBool(IFptr.LIBFPTR_PARAM_NO_SERIAL_NUMBER);
boolean rtcFault                = fptr.getParamBool(IFptr.LIBFPTR_PARAM_RTC_FAULT);
boolean settingsFault           = fptr.getParamBool(IFptr.LIBFPTR_PARAM_SETTINGS_FAULT);
boolean counterFault            = fptr.getParamBool(IFptr.LIBFPTR_PARAM_COUNTERS_FAULT);
boolean userMemoryFault         = fptr.getParamBool(IFptr.LIBFPTR_PARAM_USER_MEMORY_FAULT);
boolean serviceCountersFault    = fptr.getParamBool(IFptr.LIBFPTR_PARAM_SERVICE_COUNTERS_FAULT);
boolean attributesFault         = fptr.getParamBool(IFptr.LIBFPTR_PARAM_ATTRIBUTES_FAULT);
boolean fnFault                 = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_FAULT);
boolean invalidFN               = fptr.getParamBool(IFptr.LIBFPTR_PARAM_INVALID_FN);
boolean hardFault               = fptr.getParamBool(IFptr.LIBFPTR_PARAM_HARD_FAULT);
boolean memoryManagerFault      = fptr.getParamBool(IFptr.LIBFPTR_PARAM_MEMORY_MANAGER_FAULT);
boolean scriptFault             = fptr.getParamBool(IFptr.LIBFPTR_PARAM_SCRIPTS_FAULT);
boolean waitForReboot           = fptr.getParamBool(IFptr.LIBFPTR_PARAM_WAIT_FOR_REBOOT);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_FATAL_STATUS];
[fptr queryData];

bool noSerialNumber          = [fptr getParamBool:LIBFPTR_PARAM_NO_SERIAL_NUMBER];
bool rtcFault                = [fptr getParamBool:LIBFPTR_PARAM_RTC_FAULT];
bool settingsFault           = [fptr getParamBool:LIBFPTR_PARAM_SETTINGS_FAULT];
bool counterFault            = [fptr getParamBool:LIBFPTR_PARAM_COUNTERS_FAULT];
bool userMemoryFault         = [fptr getParamBool:LIBFPTR_PARAM_USER_MEMORY_FAULT];
bool serviceCountersFault    = [fptr getParamBool:LIBFPTR_PARAM_SERVICE_COUNTERS_FAULT];
bool attributesFault         = [fptr getParamBool:LIBFPTR_PARAM_ATTRIBUTES_FAULT];
bool fnFault                 = [fptr getParamBool:LIBFPTR_PARAM_FN_FAULT];
bool invalidFN               = [fptr getParamBool:LIBFPTR_PARAM_INVALID_FN];
bool hardFault               = [fptr getParamBool:LIBFPTR_PARAM_HARD_FAULT];
bool memoryManagerFault      = [fptr getParamBool:LIBFPTR_PARAM_MEMORY_MANAGER_FAULT];
bool scriptFault             = [fptr getParamBool:LIBFPTR_PARAM_SCRIPTS_FAULT];
bool waitForReboot           = [fptr getParamBool:LIBFPTR_PARAM_WAIT_FOR_REBOOT];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_FATAL_STATUS);
fptr.queryData();

bool noSerialNumber          = fptr.getParamBool(Constants.LIBFPTR_PARAM_NO_SERIAL_NUMBER);
bool rtcFault                = fptr.getParamBool(Constants.LIBFPTR_PARAM_RTC_FAULT);
bool settingsFault           = fptr.getParamBool(Constants.LIBFPTR_PARAM_SETTINGS_FAULT);
bool counterFault            = fptr.getParamBool(Constants.LIBFPTR_PARAM_COUNTERS_FAULT);
bool userMemoryFault         = fptr.getParamBool(Constants.LIBFPTR_PARAM_USER_MEMORY_FAULT);
bool serviceCountersFault    = fptr.getParamBool(Constants.LIBFPTR_PARAM_SERVICE_COUNTERS_FAULT);
bool attributesFault         = fptr.getParamBool(Constants.LIBFPTR_PARAM_ATTRIBUTES_FAULT);
bool fnFault                 = fptr.getParamBool(Constants.LIBFPTR_PARAM_FN_FAULT);
bool invalidFN               = fptr.getParamBool(Constants.LIBFPTR_PARAM_INVALID_FN);
bool hardFault               = fptr.getParamBool(Constants.LIBFPTR_PARAM_HARD_FAULT);
bool memoryManagerFault      = fptr.getParamBool(Constants.LIBFPTR_PARAM_MEMORY_MANAGER_FAULT);
bool scriptFault             = fptr.getParamBool(Constants.LIBFPTR_PARAM_SCRIPTS_FAULT);
bool waitForReboot           = fptr.getParamBool(Constants.LIBFPTR_PARAM_WAIT_FOR_REBOOT);
var
    noSerialNumber:         LongBool;
    rtcFault:               LongBool;
    settingsFault:          LongBool;
    counterFault:           LongBool;
    userMemoryFault:        LongBool;
    serviceCountersFault:   LongBool;
    attributesFault:        LongBool;
    fnFault:                LongBool;
    invalidFN:              LongBool;
    hardFault:              LongBool;
    memoryManagerFault:     LongBool;
    scriptFault:            LongBool;
    waitForReboot:          LongBool;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_FATAL_STATUS);
    fptr.queryData;

    noSerialNumber          := fptr.getParamBool(fptr.LIBFPTR_PARAM_NO_SERIAL_NUMBER);
    rtcFault                := fptr.getParamBool(fptr.LIBFPTR_PARAM_RTC_FAULT);
    settingsFault           := fptr.getParamBool(fptr.LIBFPTR_PARAM_SETTINGS_FAULT);
    counterFault            := fptr.getParamBool(fptr.LIBFPTR_PARAM_COUNTERS_FAULT);
    userMemoryFault         := fptr.getParamBool(fptr.LIBFPTR_PARAM_USER_MEMORY_FAULT);
    serviceCountersFault    := fptr.getParamBool(fptr.LIBFPTR_PARAM_SERVICE_COUNTERS_FAULT);
    attributesFault         := fptr.getParamBool(fptr.LIBFPTR_PARAM_ATTRIBUTES_FAULT);
    fnFault                 := fptr.getParamBool(fptr.LIBFPTR_PARAM_FN_FAULT);
    invalidFN               := fptr.getParamBool(fptr.LIBFPTR_PARAM_INVALID_FN);
    hardFault               := fptr.getParamBool(fptr.LIBFPTR_PARAM_HARD_FAULT);
    memoryManagerFault      := fptr.getParamBool(fptr.LIBFPTR_PARAM_MEMORY_MANAGER_FAULT);
    scriptFault             := fptr.getParamBool(fptr.LIBFPTR_PARAM_SCRIPTS_FAULT);
    waitForReboot           := fptr.getParamBool(fptr.LIBFPTR_PARAM_WAIT_FOR_REBOOT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_FATAL_STATUS)
fptr.QueryData()

noSerialNumber          := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_NO_SERIAL_NUMBER)
rtcFault                := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_RTC_FAULT)
settingsFault           := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_SETTINGS_FAULT)
counterFault            := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_COUNTERS_FAULT)
userMemoryFault         := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_USER_MEMORY_FAULT)
serviceCountersFault    := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_SERVICE_COUNTERS_FAULT)
attributesFault         := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_ATTRIBUTES_FAULT)
fnFault                 := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_FN_FAULT)
invalidFN               := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_INVALID_FN)
hardFault               := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_HARD_FAULT)
memoryManagerFault      := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_MEMORY_MANAGER_FAULT)
scriptFault             := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_SCRIPTS_FAULT)
waitForReboot           := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_WAIT_FOR_REBOOT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_FATAL_STATUS);
Fptr.queryData();

noSerialNumber       = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_NO_SERIAL_NUMBER);
rtcFault             = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_RTC_FAULT);
settingsFault        = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_SETTINGS_FAULT);
counterFault         = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_COUNTERS_FAULT);
userMemoryFault      = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_USER_MEMORY_FAULT);
serviceCountersFault = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_SERVICE_COUNTERS_FAULT);
attributesFault      = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_ATTRIBUTES_FAULT);
fnFault              = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_FN_FAULT);
invalidFN            = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_INVALID_FN);
hardFault            = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_HARD_FAULT);
memoryManagerFault   = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_MEMORY_MANAGER_FAULT);
scriptFault          = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_SCRIPTS_FAULT);
waitForReboot        = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_WAIT_FOR_REBOOT);

Для запроса фатальных ошибок необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_FATAL_STATUS.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_NO_SERIAL_NUMBER Не введен ЗН ККТ bool
LIBFPTR_PARAM_RTC_FAULT Ошибка часов реального времени bool
LIBFPTR_PARAM_SETTINGS_FAULT Ошибка настроек bool
LIBFPTR_PARAM_COUNTERS_FAULT Ошибка счетчиков bool
LIBFPTR_PARAM_USER_MEMORY_FAULT Ошибка пользовательской памяти bool
LIBFPTR_PARAM_SERVICE_COUNTERS_FAULT Ошибка сервисных регистров bool
LIBFPTR_PARAM_ATTRIBUTES_FAULT Ошибка реквизитов bool
LIBFPTR_PARAM_FN_FAULT Фатальная ошибка ФН bool
LIBFPTR_PARAM_INVALID_FN Установлен ФН из другой ККТ bool
LIBFPTR_PARAM_HARD_FAULT Фатальная аппаратная ошибка bool
LIBFPTR_PARAM_MEMORY_MANAGER_FAULT Ошибка диспетчера памяти bool
LIBFPTR_PARAM_SCRIPTS_FAULT Скрипты повреждены или отсутствуют bool
LIBFPTR_PARAM_WAIT_FOR_REBOOT Требуется перезагрузка bool

MAC-адрес Ethernet

Запрос MAC-адреса Ethernet

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_MAC_ADDRESS);
libfptr_query_data(fptr);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_MAC_ADDRESS, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_MAC_ADDRESS, &str[0], str.size());
}
std::wstring mac = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_MAC_ADDRESS)
fptr.queryData()

mac = fptr.getParamString(IFptr.LIBFPTR_PARAM_MAC_ADDRESS)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_MAC_ADDRESS);
fptr.queryData();

String mac = fptr.getParamString(IFptr.LIBFPTR_PARAM_MAC_ADDRESS);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_MAC_ADDRESS);
fptr.queryData();

String mac = fptr.getParamString(IFptr.LIBFPTR_PARAM_MAC_ADDRESS);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_MAC_ADDRESS];
[fptr queryData];

NSString *mac = [fptr getParamString: LIBFPTR_PARAM_MAC_ADDRESS];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_MAC_ADDRESS);
fptr.queryData();

String mac = fptr.getParamString(Constants.LIBFPTR_DT_MAC_ADDRESS);
var
    uptime: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_MAC_ADDRESS);
    fptr.queryData;

    mac := fptr.getParamString(fptr.LIBFPTR_DT_MAC_ADDRESS);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_MAC_ADDRESS)
fptr.QueryData()

mac := fptr.GetParamString(fptr10.LIBFPTR_PARAM_MAC_ADDRESS)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_MAC_ADDRESS);
Fptr.queryData();

mac = Fptr.getParamString(Fptr.LIBFPTR_DT_MAC_ADDRESS);

Для запроса MAC-адреса Ethernet необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_MAC_ADDRESS.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_MAC_ADDRESS MAC-адрес string

Время работы ККТ

Запрос времени работы ККТ

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_DEVICE_UPTIME);
libfptr_query_data(fptr);

uint uptime = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DEVICE_UPTIME);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_DEVICE_UPTIME)
fptr.queryData()

uptime = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DEVICE_UPTIME)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_DEVICE_UPTIME);
fptr.queryData();

long uptime = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DEVICE_UPTIME);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_DEVICE_UPTIME);
fptr.queryData();

long uptime = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DEVICE_UPTIME);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_DEVICE_UPTIME];
[fptr queryData];

uint uptime = [fptr getParamInt: LIBFPTR_PARAM_DEVICE_UPTIME];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_DEVICE_UPTIME);
fptr.queryData();

uint uptime = fptr.getParamInt(Constants.LIBFPTR_PARAM_DEVICE_UPTIME);
var
    uptime: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_DEVICE_UPTIME);
    fptr.queryData;

    uptime := fptr.getParamInt(fptr.LIBFPTR_PARAM_DEVICE_UPTIME);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_DEVICE_UPTIME)
fptr.QueryData()

uptime := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DEVICE_UPTIME)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_DEVICE_UPTIME);
Fptr.queryData();

uptime = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DEVICE_UPTIME);

Для запроса времени работы ККТ необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_DEVICE_UPTIME.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DEVICE_UPTIME Время работы ККТ, с. int

Суммы скидок и надбавок за смену

Запрос сумм скидок и надбавок за смену

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_DISCOUNT_AND_SURCHARGE_SUM);
libfptr_query_data(fptr);

double discountSum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_DISCOUNT_SUM);
double surchargeSum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SURCHARGE_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_DISCOUNT_AND_SURCHARGE_SUM)
fptr.queryData()

discountSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_DISCOUNT_SUM)
surchargeSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SURCHARGE_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_DISCOUNT_AND_SURCHARGE_SUM);
fptr.queryData();

double discountSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_DISCOUNT_SUM);
double surchargeSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SURCHARGE_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_DISCOUNT_AND_SURCHARGE_SUM);
fptr.queryData();

double discountSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_DISCOUNT_SUM);
double surchargeSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SURCHARGE_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_DISCOUNT_AND_SURCHARGE_SUM];
[fptr queryData];

double discountSum = [fptr getParamDouble:LIBFPTR_PARAM_DISCOUNT_SUM];
double surchargeSum = [fptr getParamDouble:LIBFPTR_PARAM_SURCHARGE_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_DISCOUNT_AND_SURCHARGE_SUM);
fptr.queryData();

double discountSum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_DISCOUNT_SUM);
double surchargeSum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SURCHARGE_SUM);
var
    discountSum: Double;
    surchargeSum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_DISCOUNT_AND_SURCHARGE_SUM);
    fptr.queryData;

    discountSum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_DISCOUNT_SUM);
    surchargeSum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SURCHARGE_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_DISCOUNT_AND_SURCHARGE_SUM)
fptr.QueryData()

discountSum     := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_DISCOUNT_SUM)
surchargeSum    := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SURCHARGE_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_DISCOUNT_AND_SURCHARGE_SUM);
Fptr.queryData();

discountSum = fptr.getParamDouble(Fptr.LIBFPTR_PARAM_DISCOUNT_SUM);
surchargeSum = fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SURCHARGE_SUM);

Для сумм скидок и надбавок за смену необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_DISCOUNT_AND_SURCHARGE_SUM.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DISCOUNT_SUM Сумма скидок за смену double
LIBFPTR_PARAM_SURCHARGE_SUM Сумма надбавок за смену double

Код привязки к личному кабинету

Запрос кода привязки к ЛК

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_LK_USER_CODE);
libfptr_query_data(fptr);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_LK_USER_CODE, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_LK_USER_CODE, &str[0], str.size());
}
std::wstring codeLK = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_LK_USER_CODE)
fptr.queryData()

codeLK = fptr.getParamString(IFptr.LIBFPTR_PARAM_LK_USER_CODE)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_LK_USER_CODE);
fptr.queryData();

String codeLK = fptr.getParamString(IFptr.LIBFPTR_PARAM_LK_USER_CODE);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_LK_USER_CODE);
fptr.queryData();

String codeLK = fptr.getParamString(IFptr.LIBFPTR_PARAM_LK_USER_CODE);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_LK_USER_CODE];
[fptr queryData];

NSString *codeLK = [fptr getParamString: LIBFPTR_PARAM_LK_USER_CODE];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_LK_USER_CODE);
fptr.queryData();

String codeLK = fptr.getParamString(Constants.LIBFPTR_PARAM_LK_USER_CODE);
var
    codeLK: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_LK_USER_CODE);
    fptr.queryData;

    codeLK := fptr.getParamString(fptr.LIBFPTR_PARAM_LK_USER_CODE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_LK_USER_CODE)
fptr.QueryData()

codeLK := fptr.GetParamString(fptr10.LIBFPTR_PARAM_LK_USER_CODE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_LK_USER_CODE);
Fptr.queryData();

codeLK = Fptr.getParamString(Fptr.LIBFPTR_PARAM_LK_USER_CODE);

Для запроса кода привязки ККТ к ЛК необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_LK_USER_CODE.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_LK_USER_CODE Код привязки к ЛК string

Дата и время последнего успешного обмена с ОФД

Запрос даты и времени последнего успешного обмена с ОФД

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_LAST_SENT_OFD_DOCUMENT_DATE_TIME);
libfptr_query_data(fptr);

int year, month, day, hour, minute, second;
ibfptr_get_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, &year, &month, &day, &hour, &minute, &second);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_LAST_SENT_OFD_DOCUMENT_DATE_TIME)
fptr.queryData()

# Тип переменной datetime - datetime.datetime
dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_LAST_SENT_OFD_DOCUMENT_DATE_TIME);
fptr.queryData();

Date dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_LAST_SENT_OFD_DOCUMENT_DATE_TIME);
fptr.queryData();

Date dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_LAST_SENT_OFD_DOCUMENT_DATE_TIME];
[fptr queryData];

NSDate *dateTime    = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_LAST_SENT_OFD_DOCUMENT_DATE_TIME);
fptr.queryData();

Date dateTime = fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);
var
    dateTime: TDateTime;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_LAST_SENT_OFD_DOCUMENT_DATE_TIME);
    fptr.queryData;

    dateTime := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_LAST_SENT_OFD_DOCUMENT_DATE_TIME)
fptr.QueryData()

dateTime := fptr.GetParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_LAST_SENT_OFD_DOCUMENT_DATE_TIME);
Fptr.queryData();

dateTime = Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME);

Для запроса даты и времени последнего успешного обмена с ОФД необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_LAST_SENT_OFD_DOCUMENT_DATE_TIME.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DATE_TIME Дата и время последнего успешного обмена с ОФД datetime

Текущая конфигурация Ethernet

Запрос текущей конфигурации Ethernet

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_ETHERNET_INFO);
libfptr_query_data(fptr);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_ETHERNET_IP, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_ETHERNET_IP, &str[0], str.size());
}
std::wstring ip = std::wstring(&str[0]);

size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_ETHERNET_MASK, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_ETHERNET_MASK, &str[0], str.size());
}
std::wstring mask = std::wstring(&str[0]);

size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_ETHERNET_GATEWAY, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_ETHERNET_GATEWAY, &str[0], str.size());
}
std::wstring gateway = std::wstring(&str[0]);

size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_ETHERNET_DNS_IP, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_ETHERNET_DNS_IP, &str[0], str.size());
}
std::wstring dns = std::wstring(&str[0]);

int timeout     = libfptr_get_param_int(fptr, LIBFPTR_PARAM_ETHERNET_CONFIG_TIMEOUT);
int port        = libfptr_get_param_int(fptr, LIBFPTR_PARAM_ETHERNET_PORT);

bool dhcp       = libfptr_get_param_bool(fptr, LIBFPTR_PARAM_ETHERNET_DHCP);
bool dnsStatic  = libfptr_get_param_bool(fptr, LIBFPTR_PARAM_ETHERNET_DNS_STATIC);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_ETHERNET_INFO)
fptr.queryData()

ip          = fptr.getParamString(IFptr.LIBFPTR_PARAM_ETHERNET_IP)
mask        = fptr.getParamString(IFptr.LIBFPTR_PARAM_ETHERNET_MASK)
gateway     = fptr.getParamString(IFptr.LIBFPTR_PARAM_ETHERNET_GATEWAY)
dns         = fptr.getParamString(IFptr.LIBFPTR_PARAM_ETHERNET_DNS_IP)

timeout     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_ETHERNET_CONFIG_TIMEOUT)
port        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_ETHERNET_PORT)

dhcp        = fptr.getParamBool(IFptr.LIBFPTR_PARAM_ETHERNET_DHCP)
dnsStatic   = fptr.getParamBool(IFptr.LIBFPTR_PARAM_ETHERNET_DNS_STATIC)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_ETHERNET_INFO);
fptr.queryData();

String ip           = fptr.getParamString(IFptr.LIBFPTR_PARAM_ETHERNET_IP);
String mask         = fptr.getParamString(IFptr.LIBFPTR_PARAM_ETHERNET_MASK);
String gateway      = fptr.getParamString(IFptr.LIBFPTR_PARAM_ETHERNET_GATEWAY);
String dns          = fptr.getParamString(IFptr.LIBFPTR_PARAM_ETHERNET_DNS_IP);

long timeout        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_ETHERNET_CONFIG_TIMEOUT);
long port           = fptr.getParamInt(IFptr.LIBFPTR_PARAM_ETHERNET_PORT);

boolean dhcp        = fptr.getParamBool(IFptr.LIBFPTR_PARAM_ETHERNET_DHCP);
boolean dnsStatic   = fptr.getParamBool(IFptr.LIBFPTR_PARAM_ETHERNET_DNS_STATIC);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_ETHERNET_INFO);
fptr.queryData();

String ip           = fptr.getParamString(IFptr.LIBFPTR_PARAM_ETHERNET_IP);
String mask         = fptr.getParamString(IFptr.LIBFPTR_PARAM_ETHERNET_MASK);
String gateway      = fptr.getParamString(IFptr.LIBFPTR_PARAM_ETHERNET_GATEWAY);
String dns          = fptr.getParamString(IFptr.LIBFPTR_PARAM_ETHERNET_DNS_IP);

long timeout        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_ETHERNET_CONFIG_TIMEOUT);
long port           = fptr.getParamInt(IFptr.LIBFPTR_PARAM_ETHERNET_PORT);

boolean dhcp        = fptr.getParamBool(IFptr.LIBFPTR_PARAM_ETHERNET_DHCP);
boolean dnsStatic   = fptr.getParamBool(IFptr.LIBFPTR_PARAM_ETHERNET_DNS_STATIC);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_ETHERNET_INFO];
[fptr queryData];

NSString *ip        = [fptr getParamString:LIBFPTR_PARAM_ETHERNET_IP];
NSString *mask      = [fptr getParamString:LIBFPTR_PARAM_ETHERNET_MASK];
NSString *gateway   = [fptr getParamString:LIBFPTR_PARAM_ETHERNET_GATEWAY];
NSString *dns       = [fptr getParamString:LIBFPTR_PARAM_ETHERNET_DNS_IP];

uint timeout        = [fptr getParamInt:LIBFPTR_PARAM_ETHERNET_CONFIG_TIMEOUT];
uint port           = [fptr getParamInt:LIBFPTR_PARAM_ETHERNET_PORT];

bool dhcp           = [fptr getParamBool:LIBFPTR_PARAM_ETHERNET_DHCP];
bool dnsStatic      = [fptr getParamBool:LIBFPTR_PARAM_ETHERNET_DNS_STATIC];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_ETHERNET_INFO);
fptr.queryData();

String ip =         fptr.getParamString(Constants.LIBFPTR_PARAM_ETHERNET_IP);
String mask =       fptr.getParamString(Constants.LIBFPTR_PARAM_ETHERNET_MASK);
String gateway =    fptr.getParamString(Constants.LIBFPTR_PARAM_ETHERNET_GATEWAY);
String dns =        fptr.getParamString(Constants.LIBFPTR_PARAM_ETHERNET_DNS_IP);

int timeout =       fptr.getParamInt(Constants.LIBFPTR_PARAM_ETHERNET_CONFIG_TIMEOUT);
int port =          fptr.getParamInt(Constants.LIBFPTR_PARAM_ETHERNET_PORT);

boolean dhcp =      fptr.getParamBool(Constants.LIBFPTR_PARAM_ETHERNET_DHCP);
boolean dnsStatic = fptr.getParamBool(Constants.LIBFPTR_PARAM_ETHERNET_DNS_STATIC);
var
    ip:         String;
    mask:       String;
    gateway:    String;
    dns:        String;

    timeout:    Longint;
    port:       Longint;

    dhcp:       LongBool;
    dnsStatic:  LongBool;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_ETHERNET_INFO);
    fptr.queryData;

    ip          := fptr.getParamString(fptr.LIBFPTR_PARAM_ETHERNET_IP);
    mask        := fptr.getParamString(fptr.LIBFPTR_PARAM_ETHERNET_MASK);
    gateway     := fptr.getParamString(fptr.LIBFPTR_PARAM_ETHERNET_GATEWAY);
    dns         := fptr.getParamString(fptr.LIBFPTR_PARAM_ETHERNET_DNS_IP);

    timeout     := fptr.getParamInt(fptr.LIBFPTR_PARAM_ETHERNET_CONFIG_TIMEOUT);
    port        := fptr.getParamInt(fptr.LIBFPTR_PARAM_ETHERNET_PORT);

    dhcp        := fptr.getParamBool(fptr.LIBFPTR_PARAM_ETHERNET_DHCP);
    dnsStatic   := fptr.getParamBool(fptr.LIBFPTR_PARAM_ETHERNET_DNS_STATIC);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_ETHERNET_INFO)
fptr.QueryData()

ip          := fptr.GetParamString(fptr10.LIBFPTR_PARAM_ETHERNET_IP)
mask        := fptr.GetParamString(fptr10.LIBFPTR_PARAM_ETHERNET_MASK)
gateway     := fptr.GetParamString(fptr10.LIBFPTR_PARAM_ETHERNET_GATEWAY)
dns         := fptr.GetParamString(fptr10.LIBFPTR_PARAM_ETHERNET_DNS_IP)

timeout     := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_ETHERNET_CONFIG_TIMEOUT)
port        := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_ETHERNET_PORT)

dhcp        := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_ETHERNET_DHCP)
dnsStatic   := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_ETHERNET_DNS_STATIC)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_ETHERNET_INFO);
Fptr.queryData();

ip =        Fptr.getParamString(Fptr.LIBFPTR_PARAM_ETHERNET_IP);
mask =      Fptr.getParamString(Fptr.LIBFPTR_PARAM_ETHERNET_MASK);
gateway =   Fptr.getParamString(Fptr.LIBFPTR_PARAM_ETHERNET_GATEWAY);
dns =       Fptr.getParamString(Fptr.LIBFPTR_PARAM_ETHERNET_DNS_IP);

timeout =   Fptr.getParamInt(Fptr.LIBFPTR_PARAM_ETHERNET_CONFIG_TIMEOUT);
port =      Fptr.getParamInt(Fptr.LIBFPTR_PARAM_ETHERNET_PORT);

dhcp =      Fptr.getParamBool(Fptr.LIBFPTR_PARAM_ETHERNET_DHCP);
dnsStatic = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_ETHERNET_DNS_STATIC);

Для запроса текущей конфигурации Ethernet необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_ETHERNET_INFO.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_ETHERNET_CONFIG_TIMEOUT Таймаут получения конфигурации из сети int
LIBFPTR_PARAM_ETHERNET_DHCP Получает ли ККТ настройки по DHCP bool
LIBFPTR_PARAM_ETHERNET_IP IP-адрес string
LIBFPTR_PARAM_ETHERNET_MASK Маска сети string
LIBFPTR_PARAM_ETHERNET_GATEWAY Шлюз string
LIBFPTR_PARAM_ETHERNET_PORT Порт int
LIBFPTR_PARAM_ETHERNET_DNS_IP Адрес сервера DNS string
LIBFPTR_PARAM_ETHERNET_DNS_STATIC Используется статичный DNS или получается из сети bool

Текущая конфигурация Wi-Fi

Запрос текущей конфигурации Wi-Fi

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_WIFI_INFO);
libfptr_query_data(fptr);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_WIFI_IP, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_WIFI_IP, &str[0], str.size());
}
std::wstring ip = std::wstring(&str[0]);

size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_WIFI_MASK, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_WIFI_MASK, &str[0], str.size());
}
std::wstring mask = std::wstring(&str[0]);

size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_WIFI_GATEWAY, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_WIFI_GATEWAY, &str[0], str.size());
}
std::wstring gateway = std::wstring(&str[0]);

int timeout     = libfptr_get_param_int(fptr, LIBFPTR_PARAM_WIFI_CONFIG_TIMEOUT);
int port        = libfptr_get_param_int(fptr, LIBFPTR_PARAM_WIFI_PORT);

bool dhcp       = libfptr_get_param_bool(fptr, LIBFPTR_PARAM_WIFI_DHCP);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_WIFI_INFO)
fptr.queryData()

ip          = fptr.getParamString(IFptr.LIBFPTR_PARAM_WIFI_IP)
mask        = fptr.getParamString(IFptr.LIBFPTR_PARAM_WIFI_MASK)
gateway     = fptr.getParamString(IFptr.LIBFPTR_PARAM_WIFI_GATEWAY)

timeout     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_WIFI_CONFIG_TIMEOUT)
port        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_WIFI_PORT)

dhcp        = fptr.getParamBool(IFptr.LIBFPTR_PARAM_WIFI_DHCP)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_WIFI_INFO);
fptr.queryData();

String ip           = fptr.getParamString(IFptr.LIBFPTR_PARAM_WIFI_IP);
String mask         = fptr.getParamString(IFptr.LIBFPTR_PARAM_WIFI_MASK);
String gateway      = fptr.getParamString(IFptr.LIBFPTR_PARAM_WIFI_GATEWAY);

long timeout        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_WIFI_CONFIG_TIMEOUT);
long port           = fptr.getParamInt(IFptr.LIBFPTR_PARAM_WIFI_PORT);

boolean dhcp        = fptr.getParamBool(IFptr.LIBFPTR_PARAM_WIFI_DHCP);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_WIFI_INFO);
fptr.queryData();

String ip           = fptr.getParamString(IFptr.LIBFPTR_PARAM_WIFI_IP);
String mask         = fptr.getParamString(IFptr.LIBFPTR_PARAM_WIFI_MASK);
String gateway      = fptr.getParamString(IFptr.LIBFPTR_PARAM_WIFI_GATEWAY);

long timeout        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_WIFI_CONFIG_TIMEOUT);
long port           = fptr.getParamInt(IFptr.LIBFPTR_PARAM_WIFI_PORT);

boolean dhcp        = fptr.getParamBool(IFptr.LIBFPTR_PARAM_WIFI_DHCP);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_WIFI_INFO];
[fptr queryData];

NSString *ip        = [fptr getParamString:LIBFPTR_PARAM_WIFI_IP];
NSString *mask      = [fptr getParamString:LIBFPTR_PARAM_WIFI_MASK];
NSString *gateway   = [fptr getParamString:LIBFPTR_PARAM_WIFI_GATEWAY];

uint timeout        = [fptr getParamInt:LIBFPTR_PARAM_WIFI_CONFIG_TIMEOUT];
uint port           = [fptr getParamInt:LIBFPTR_PARAM_WIFI_PORT];

bool dhcp           = [fptr getParamBool:LIBFPTR_PARAM_WIFI_DHCP];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_WIFI_INFO);
fptr.queryData();

String ip =         fptr.getParamString(Constants.LIBFPTR_PARAM_WIFI_IP);
String mask =       fptr.getParamString(Constants.LIBFPTR_PARAM_WIFI_MASK);
String gateway =    fptr.getParamString(Constants.LIBFPTR_PARAM_WIFI_GATEWAY);

int timeout =       fptr.getParamInt(Constants.LIBFPTR_PARAM_WIFI_CONFIG_TIMEOUT);
int port =          fptr.getParamInt(Constants.LIBFPTR_PARAM_WIFI_PORT);

boolean dhcp =      fptr.getParamBool(Constants.LIBFPTR_PARAM_WIFI_DHCP);
var
    ip:         String;
    mask:       String;
    gateway:    String;

    timeout:    Longint;
    port:       Longint;

    dhcp:       LongBool;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_WIFI_INFO);
    fptr.queryData;

    ip          := fptr.getParamString(fptr.LIBFPTR_PARAM_WIFI_IP);
    mask        := fptr.getParamString(fptr.LIBFPTR_PARAM_WIFI_MASK);
    gateway     := fptr.getParamString(fptr.LIBFPTR_PARAM_WIFI_GATEWAY);

    timeout     := fptr.getParamInt(fptr.LIBFPTR_PARAM_WIFI_CONFIG_TIMEOUT);
    port        := fptr.getParamInt(fptr.LIBFPTR_PARAM_WIFI_PORT);

    dhcp        := fptr.getParamBool(fptr.LIBFPTR_PARAM_WIFI_DHCP);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_WIFI_INFO)
fptr.QueryData()

ip          := fptr.GetParamString(fptr10.LIBFPTR_PARAM_WIFI_IP)
mask        := fptr.GetParamString(fptr10.LIBFPTR_PARAM_WIFI_MASK)
gateway     := fptr.GetParamString(fptr10.LIBFPTR_PARAM_WIFI_GATEWAY)

timeout     := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_WIFI_CONFIG_TIMEOUT)
port        := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_WIFI_PORT)

dhcp        := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_WIFI_DHCP)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_WIFI_INFO);
Fptr.queryData();

ip =        Fptr.getParamString(Fptr.LIBFPTR_PARAM_WIFI_IP);
mask =      Fptr.getParamString(Fptr.LIBFPTR_PARAM_WIFI_MASK);
gateway =   Fptr.getParamString(Fptr.LIBFPTR_PARAM_WIFI_GATEWAY);

timeout =   Fptr.getParamInt(Fptr.LIBFPTR_PARAM_WIFI_CONFIG_TIMEOUT);
port =      Fptr.getParamInt(Fptr.LIBFPTR_PARAM_WIFI_PORT);

dhcp =      Fptr.getParamBool(Fptr.LIBFPTR_PARAM_WIFI_DHCP);

Для запроса текущей конфигурации Wi-Fi необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_WIFI_INFO.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_WIFI_CONFIG_TIMEOUT Таймаут получения конфигурации из сети Wi-Fi int
LIBFPTR_PARAM_WIFI_DHCP Получает ли ККТ настройки по DHCP в сети Wi-Fi bool
LIBFPTR_PARAM_WIFI_IP IP-адрес в сети Wi-Fi string
LIBFPTR_PARAM_WIFI_MASK Маска сети Wi-Fi string
LIBFPTR_PARAM_WIFI_GATEWAY Шлюз в сети Wi-Fi string
LIBFPTR_PARAM_WIFI_PORT Порт в сети Wi-Fi int

Загруженный скрипт

Запрос информации о загруженном скрипте

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_SCRIPTS_INFO);
libfptr_query_data(fptr);

std::vector<wchar_t> str(64);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_SCRIPT_NAME, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_SCRIPT_NAME, &str[0], str.size());
}
std::wstring name = std::wstring(&str[0]);

std::vector<uchar> hash(32);
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_SCRIPT_HASH, &hash[0], hash.size());
if (size > hash.size())
{
    hash.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_SCRIPT_HASH, &hash[0], hash.size());
}
hash.resize(size);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SCRIPTS_INFO)
fptr.queryData()

name = fptr.getParamString(IFptr.LIBFPTR_PARAM_SCRIPT_NAME)
hash = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_SCRIPT_HASH)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SCRIPTS_INFO);
fptr.queryData();

String name = fptr.getParamString(IFptr.LIBFPTR_PARAM_SCRIPT_NAME);
byte[] hash = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_SCRIPT_HASH);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SCRIPTS_INFO);
fptr.queryData();

String name = fptr.getParamString(IFptr.LIBFPTR_PARAM_SCRIPT_NAME);
byte[] hash = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_SCRIPT_HASH);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_SCRIPTS_INFO];
[fptr queryData];

NSString *name = [fptr getParamString:LIBFPTR_PARAM_SCRIPT_NAME]
NSData *hash = [fptr getParamByteArray:LIBFPTR_PARAM_SCRIPT_HASH];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_SCRIPTS_INFO);
fptr.queryData();

String name = fptr.getParamString(Constants.LIBFPTR_PARAM_SCRIPT_NAME);
byte[] hash = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_SCRIPT_HASH);
var
    name: String;
    hash: Variant;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_SCRIPTS_INFO);
    fptr.queryData;

    name := fptr.getParamString(fptr.LIBFPTR_PARAM_SCRIPT_NAME);
    hash := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_SCRIPT_HASH);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_SCRIPTS_INFO)
fptr.QueryData()

name := fptr.GetParamString(IFptr.LIBFPTR_PARAM_SCRIPT_NAME);
hash := fptr.GetParamByteArray(IFptr.LIBFPTR_PARAM_SCRIPT_HASH);
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_SCRIPTS_INFO);
Fptr.queryData();

name = Fptr.getParamString(Fptr.LIBFPTR_PARAM_SCRIPT_NAME);
hash = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_SCRIPT_HASH);

Для запроса информации о загруженном в ККТ скрипте (шаблоне) необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_SCRIPTS_INFO.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SCRIPT_NAME Наименование скрипта string
LIBFPTR_PARAM_SCRIPT_HASH Хеш скрипта bytearray

Запрос доступен только для ККТ АТОЛ версий 5.X.

Сменный итог

Запрос сменного итога по чекам прихода

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_SHIFT_TOTALS);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL);
libfptr_query_data(fptr);

double sum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SHIFT_TOTALS)
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
fptr.queryData()

sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SHIFT_TOTALS);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_SHIFT_TOTALS);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_SUM);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_SHIFT_TOTALS];
[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL];
[fptr queryData];

double sum = [fptr getParamDouble:LIBFPTR_PARAM_SUM];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_SHIFT_TOTALS);
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
fptr.queryData();

double sum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_SUM);
var
    sum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_SHIFT_TOTALS);
    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL);
    fptr.queryData;

    sum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_SUM);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_SHIFT_TOTALS)
fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL)
fptr.QueryData()

sum := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_SUM)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_SHIFT_TOTALS);
Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL);
Fptr.queryData();

sum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_SUM);

Для запроса сменного итога необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_SHIFT_TOTALS и указать тип чека LIBFPTR_PARAM_RECEIPT_TYPE.

Тип чека (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SUM Сумма налога double

Регистрация кассира

Регистрация кассира

libfptr_set_param_str(fptr, 1021, L"Кассир Иванов И.");
libfptr_set_param_str(fptr, 1203, L"123456789047");
libfptr_operator_login(fptr); 
fptr.setParam(1021, "Кассир Иванов И.")
fptr.setParam(1203, "123456789047")
fptr.operatorLogin()
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();
[fptr setParam:1021, NSStringParam:@"Кассир Иванов И."];
[fptr setParam:1203, NSStringParam:@"123456789047"];
[fptr operatorLogin];
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();
begin
    fptr.setParam(1021, 'Кассир Иванов И.');
    fptr.setParam(1203, '123456789047');
    fptr.operatorLogin;
end;
fptr.SetParam(1021, "Кассир Иванов И.")
fptr.SetParam(1203, "123456789047")
fptr.OperatorLogin()
Fptr.setParam(1021, "Кассир Иванов И.");
Fptr.setParam(1203, "123456789047");
Fptr.operatorLogin();

Для регистрации кассира необходимо вызвать метод operatorLogin().

Операции со сменой

Открыть смену

Открытие смены

libfptr_set_param_str(fptr, 1021, L"Кассир Иванов И.");
libfptr_set_param_str(fptr, 1203, L"123456789047");
libfptr_operator_login(fptr);

libfptr_open_shift(fptr);

libfptr_check_document_closed();
// ...
fptr.setParam(1021, "Кассир Иванов И.")
fptr.setParam(1203, "123456789047")
fptr.operatorLogin()

fptr.openShift()

fptr.checkDocumentClosed()
# ...
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();

fptr.openShift();

fptr.checkDocumentClosed();
// ...
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();

fptr.openShift();

fptr.checkDocumentClosed();
// ...
[fptr setParam:1021, NSString:@"Кассир Иванов И."];
[fptr setParam:1203, NSString:@"123456789047"];
[fptr operatorLogin];

[fptr openShift];

[fptr checkDocumentClosed];
// ...
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();

fptr.openShift();

fptr.checkDocumentClosed();
// ...
begin
    fptr.setParam(1021, 'Кассир Иванов И.');
    fptr.setParam(1203, '123456789047');
    fptr.operatorLogin;

    fptr.openShift;

    fptr.checkDocumentClosed;
    // ...
end;
fptr.SetParam(1021, "Кассир Иванов И.")
fptr.SetParam(1203, "123456789047")
fptr.OperatorLogin()

fptr.OpenShift()

fptr.CheckDocumentClosed()
// ...
Fptr.setParam(1021, "Кассир Иванов И.");
Fptr.setParam(1203, "123456789047");
Fptr.operatorLogin();

Fptr.openShift();

Fptr.checkDocumentClosed();
// ...

Для открытия смены необходимо вызвать метод openShift(). Метод возвращает ошибку, если смена уже открыта. Открывать смену необязательно, т.к. она будет открыта первой фискальной операцией автоматически.

На некоторых ККТ возможно отключить печать отчета об открытии смены с помощью установки параметра LIBFPTR_PARAM_REPORT_ELECTRONICALLY в true. Если ККТ не поддерживает такой функционал, параметр будет проигнорирован и отчет будет напечатан.

Закрыть смену

Закрытие смены

libfptr_set_param_str(fptr, 1021, L"Кассир Иванов И.");
libfptr_set_param_str(fptr, 1203, L"123456789047");
libfptr_operator_login(fptr);

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_CLOSE_SHIFT);
libfptr_report(fptr);

libfptr_check_document_closed();
// ...
fptr.setParam(1021, "Кассир Иванов И.")
fptr.setParam(1203, "123456789047")
fptr.operatorLogin()

fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_CLOSE_SHIFT)
fptr.report()

fptr.checkDocumentClosed()
# ...
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();

fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_CLOSE_SHIFT);
fptr.report();

fptr.checkDocumentClosed();
// ...
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();

fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_CLOSE_SHIFT);
fptr.report();

fptr.checkDocumentClosed();
// ...
[fptr setParam:1021, NSString:@"Кассир Иванов И."];
[fptr setParam:1203, NSString:@"123456789047"];
[fptr operatorLogin];

[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_CLOSE_SHIFT];
[fptr report];

[fptr checkDocumentClosed];
// ...
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();

fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_CLOSE_SHIFT);
fptr.report();

fptr.checkDocumentClosed();
// ...
begin
    fptr.setParam(1021, 'Кассир Иванов И.');
    fptr.setParam(1203, '123456789047');
    fptr.operatorLogin;

    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_CLOSE_SHIFT);
    fptr.report;

    fptr.checkDocumentClosed;
    // ...
end;
fptr.SetParam(1021, "Кассир Иванов И.")
fptr.SetParam(1203, "123456789047")
fptr.OperatorLogin()

fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_CLOSE_SHIFT)
fptr.Report()

fptr.CheckDocumentClosed()
// ...
Fptr.setParam(1021, "Кассир Иванов И.");
Fptr.setParam(1203, "123456789047");
Fptr.operatorLogin();

Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_CLOSE_SHIFT);
Fptr.report();

Fptr.checkDocumentClosed();
// ...

Для закрытия смены требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_CLOSE_SHIFT Автоматически может напечататься так же и Z-отчет.

На некоторых ККТ возможно отключить печать отчета о закрытии смены с помощью установки параметра LIBFPTR_PARAM_REPORT_ELECTRONICALLY в true. Если ККТ не поддерживает такой функционал, параметр будет проигнорирован и отчет будет напечатан.

Операции с чеком

Общий алгоритм формирования чека

Формирование чека состоит из следующих операций:

Формирование чека коррекции (ФФД 1.0, 1.05) состоит из следующих операций:

Открыть чек

Открытие печатного чека

libfptr_set_param_str(fptr, 1021, L"Кассир Иванов И.");
libfptr_set_param_str(fptr, 1203, L"123456789047");
libfptr_operator_login(fptr); 

libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL);
libfptr_open_receipt(fptr);
fptr.setParam(1021, "Кассир Иванов И.")
fptr.setParam(1203, "123456789047")
fptr.operatorLogin()

fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
fptr.openReceipt()
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();

fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.openReceipt();
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();

fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.openReceipt();
[fptr setParam:1021, NSStringParam:@"Кассир Иванов И."];
[fptr setParam:1203, NSStringParam:@"123456789047"];
[fptr operatorLogin];

[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL];
[fptr openReceipt]
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();

fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
fptr.openReceipt();
begin
    fptr.setParam(1021, 'Кассир Иванов И.');
    fptr.setParam(1203, '123456789047');
    fptr.operatorLogin;

    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL);
    fptr.openReceipt;
end;
fptr.SetParam(1021, "Кассир Иванов И.")
fptr.SetParam(1203, "123456789047")
fptr.OperatorLogin()

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL)
fptr.OpenReceipt()
Fptr.setParam(1021, "Кассир Иванов И.");
Fptr.setParam(1203, "123456789047");
Fptr.operatorLogin();

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL);
Fptr.openReceipt();

Открытие чека возврата продажи с автоматическим расчетом НДС18

libfptr_set_param_str(fptr, 1021, L"Кассир Иванов И.");
libfptr_set_param_str(fptr, 1203, L"123456789047");
libfptr_operator_login(fptr);

libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL_RETURN);
libfptr_set_param_bool(fptr, LIBFPTR_PARAM_USE_VAT18, true);
libfptr_open_receipt(fptr);
fptr.setParam(1021, "Кассир Иванов И.")
fptr.setParam(1203, "123456789047")
fptr.operatorLogin()

fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL_RETURN)
fptr.setParam(IFptr.LIBFPTR_PARAM_USE_VAT18, True)
fptr.openReceipt()
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();

fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL_RETURN);
fptr.setParam(IFptr.LIBFPTR_PARAM_USE_VAT18, true);
fptr.openReceipt();
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();

fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL_RETURN);
fptr.setParam(IFptr.LIBFPTR_PARAM_USE_VAT18, true);
fptr.openReceipt();
[fptr setParam:1021, NSStringParam:@"Кассир Иванов И."];
[fptr setParam:1203, NSStringParam:@"123456789047"];
[fptr operatorLogin];

[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL_RETURN];
[fptr setParam:LIBFPTR_PARAM_USE_VAT18, boolParam:true];
[fptr openReceipt]
fptr.setParam(1021, "Кассир Иванов И.");
fptr.setParam(1203, "123456789047");
fptr.operatorLogin();

fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL_RETURN);
fptr.setParam(Constants.LIBFPTR_PARAM_USE_VAT18, true);
fptr.openReceipt();
begin
    fptr.setParam(1021, 'Кассир Иванов И.');
    fptr.setParam(1203, '123456789047');
    fptr.operatorLogin;

    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL_RETURN);
    fptr.setParam(fptr.LIBFPTR_PARAM_USE_VAT18, True);
    fptr.openReceipt;
end;
fptr.SetParam(1021, "Кассир Иванов И.")
fptr.SetParam(1203, "123456789047")
fptr.OperatorLogin()

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL_RETURN)
fptr.SetParam(fptr10.LIBFPTR_PARAM_USE_VAT18, true)
fptr.OpenReceipt()
Fptr.setParam(1021, "Кассир Иванов И.");
Fptr.setParam(1203, "123456789047");
Fptr.operatorLogin();

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USE_VAT18, true);
Fptr.openReceipt();

Открытие электронного чека

libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL);
libfptr_set_param_bool(fptr, LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY, true);
libfptr_set_param_str(fptr, 1008, L"client@mail.ru");
libfptr_open_receipt(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY, True)
fptr.setParam(1008, "client@mail.ru")
fptr.openReceipt()
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY, true);
fptr.setParam(1008, "client@mail.ru");
fptr.openReceipt();
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY, true);
fptr.setParam(1008, "client@mail.ru");
fptr.openReceipt();
[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL];
[fptr setParam:LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY, boolParam:true];
[fptr setParam:1008, NSStringParam:@"client@mail.ru"];
[fptr openReceipt]
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY, true);
fptr.setParam(1008, "client@mail.ru");
fptr.openReceipt();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL);
    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY, True);
    fptr.setParam(1008, 'client@mail.ru');
    fptr.openReceipt;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL)
fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY, true)
fptr.SetParam(1008, "client@mail.ru")
fptr.OpenReceipt()
Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USE_VAT18, true);
Fptr.setParam(1008, "client@mail.ru");
Fptr.openReceipt();

Открытие чека коррекции прихода (ФФД 1.0 и ФФД 1.05)

libfptr_set_param_str(fptr, 1177, L"Документ основания коррекции");
libfptr_set_param_datetime(fptr, 1178, 2018, 1, 2, 0, 0, 0);
libfptr_set_param_str(fptr, 1179, L"№1234");
libfptr_util_form_tlv(fptr);

std::vector<uchar> correctionInfo(128);
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, 
                                       &correctionInfo[0], correctionInfo.size());
if (size > correctionInfo.size())
{
    correctionInfo.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, 
                                &correctionInfo[0], correctionInfo.size());
}
correctionInfo.resize(size);

libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL_CORRECTION);
libfptr_set_param_int(fptr, 1173, 1);
libfptr_set_param_bytearray(fptr, 1174, &correctionInfo[0], correctionInfo.size());
libfptr_open_receipt(fptr);
fptr.setParam(1177, "Документ основания коррекции")
fptr.setParam(1178, datetime.datetime(2018, 1, 2))
fptr.setParam(1179, "№1234")
fptr.utilFormTlv()

correctionInfo = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)

fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL_CORRECTION)
fptr.setParam(1173, 1)
fptr.setParam(1174, correctionInfo)
fptr.openReceipt()
Calendar c = Calendar.getInstance();
c.set(2018, 1, 2);
fptr.setParam(1177, "Документ основания коррекции");
fptr.setParam(1178, c.getTime());
fptr.setParam(1179, "№1234");
fptr.utilFormTlv();
byte[] correctionInfo = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);

fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL_CORRECTION);
fptr.setParam(1173, 1);
fptr.setParam(1174, correctionInfo);
fptr.openReceipt();
Calendar c = Calendar.getInstance();
c.set(2018, 1, 2);
fptr.setParam(1177, "Документ основания коррекции");
fptr.setParam(1178, c.getTime());
fptr.setParam(1179, "№1234");
fptr.utilFormTlv();
byte[] correctionInfo = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);

fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL_CORRECTION);
fptr.setParam(1173, 1);
fptr.setParam(1174, correctionInfo);
fptr.openReceipt();
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:[2018 intValue]];
[components setMonth:[1 intValue]];
[components setDay:[2 intValue]];

[fptr setParam:1177, NSStringParam:@"Документ основания коррекции"];
[fptr setParam:1178, NSDateParam:[calendar dateFromComponents:components]];
[fptr setParam:1179, NSStringParam:@"№1234"];
[fptr utilFormTlv];
NSData *correctionInfo = [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE];

[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL_CORRECTION];
[fptr setParam:1173, intParam:1];
[fptr setParam:1174, NSDataParam:correctionInfo];
[fptr openReceipt];
DateTime date = new DateTime(2018, 1, 2);
fptr.setParam(1177, "Документ основания коррекции");
fptr.setParam(1178, date);
fptr.setParam(1179, "№1234");
fptr.utilFormTlv();
byte[] correctionInfo = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE);

fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL_CORRECTION);
fptr.setParam(1173, 1);
fptr.setParam(1174, correctionInfo);
fptr.openReceipt();
var
    date: TDateTime;
    correctionInfo: Variant;
begin
    date := StrToDate('02.01.2018');
    fptr.setParam(1177, 'Документ основания коррекции');
    fptr.setParam(1178, date);
    fptr.setParam(1179, '№1234');
    fptr.utilFormTlv;
    correctionInfo := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);

    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL_CORRECTION);
    fptr.setParam(1173, 1);
    fptr.setParam(1174, correctionInfo);
    fptr.openReceipt;
end;
fptr.SetParam(1177, "Документ основания коррекции")
fptr.SetParam(1178, time.date(2018, 1, 2, 0, 0, 0, 0, time.Now().Location()))
fptr.SetParam(1179, "№1234")
fptr.UtilFormTlv()

correctionInfo := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE)

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL_CORRECTION)
fptr.SetParam(1173, 1)
fptr.SetParam(1174, correctionInfo)
fptr.OpenReceipt()
Fptr.setParam(1177, "Документ основания коррекции");
Fptr.setParam(1178, new Date("2018-01-02T00:00:00"));
Fptr.setParam(1179, "№1234");
Fptr.utilFormTlv();

correctionInfo = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE);

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL_CORRECTION);
Fptr.setParam(1173, 1);
Fptr.setParam(1174, correctionInfo);
Fptr.openReceipt();

Для открытия чека требуется вызвать метод openReceipt() с указанием типа чека (параметр LIBFPTR_PARAM_RECEIPT_TYPE).

Тип чека (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Чтобы чек не печатался (электронный чек), нужно установить параметру LIBFPTR_PARAM_RECEIPT_ELECTRONICALLY значение true и передать реквизит 1008 (электронный адрес или телефон получателя).

Чтобы зарегистрировать документ возврата товаров, проданных со ставкой НДС 18% или НДС расчитанный 18/118 после 2019.01.01 00:00:00, можно выставить флаг LIBFPTR_PARAM_USE_VAT18. Подробнее в разделе Алгоритмы.

Также в данном методе можно передать следующие реквизиты (для всех чеков, кроме чеков коррекции):

Реквизит Описание Тип
1008 Электронный адрес / телефон получателя string
1227 Наименование получателя string
1228 ИНН получателя string
1117 Электронный адрес отправителя чека string
1055 Применяемая система налогообложения (СНО) int
1187 Место расчета string
1060 Адрес сайта ФНС string
1057 Признак агента int
1171 Телефон поставщика string
1044 Операция платежного агента string
1073 Телефон платежного агента (может повторяться несколько раз) string
1005 Адрес оператора перевода string
1016 ИНН оператора перевода string
1026 Наименование оператора перевода string
1075 Телефон оператора перевода (может повторяться несколько раз) string
1074 Телефон оператора по приему платежей (может повторяться несколько раз) string
1084 Дополнительный реквизит пользователя bytearray
1192 Дополнительный реквизит чека (БСО) string

Реквизит 1084 составной и состоит из следующих реквизитов:

Реквизит Описание Тип
1085 Наименование дополнительного реквизита пользователя string
1086 Значение дополнительного реквизита пользователя string

Реквизит 1055 может принимать следующие значения:

Реквизит 1057 может принимать следующие значения:

Для чеков коррекций допустимы следующие реквизиты:

Реквизит Описание Тип
1055 Применяемая система налогообложения int
1173 Тип коррекции int
1174 Основание для коррекции bytearray

Реквизит 1174 составной и состоит из следующих реквизитов:

Реквизит Описание Тип
1177 Наименование основания для коррекции string
1178 Дата совершения корректируемого расчета datetime
1179 Номер предписания налогового органа string

Результатом команды будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SHIFT_AUTO_OPENED true, если при выполнении операции была автоматически открыта смена в ККТ bool

Отменить чек

Отмена чека

libfptr_cancel_receipt(fptr);
fptr.cancelReceipt()
fptr.cancelReceipt();
fptr.cancelReceipt();
[fptr cancelReceipt]
fptr.cancelReceipt();
begin
    fptr.cancelReceipt;
end;
fptr.CancelReceipt()
Fptr.cancelReceipt();

Для отмены чека требуется вызвать метод cancelReceipt().

Зарегистрировать позицию

Регистрация позиции без указания суммы налога

libfptr_set_param_str(fptr, LIBFPTR_PARAM_COMMODITY_NAME, L"Товар");
libfptr_set_param_double(fptr, LIBFPTR_PARAM_PRICE, 100);
libfptr_set_param_double(fptr, LIBFPTR_PARAM_QUANTITY, 5.15);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_TAX_TYPE, LIBFPTR_TAX_VAT0);
libfptr_registration(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар")
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 100)
fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5.15)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT0)
fptr.registration()
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 100);
fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5.15);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT0);
fptr.registration();
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 100);
fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5.15);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT0);
fptr.registration();
[fptr setParam:LIBFPTR_PARAM_COMMODITY_NAME, NSStringParam:@"Товар"];
[fptr setParam:LIBFPTR_PARAM_PRICE, doubleParam:100];
[fptr setParam:LIBFPTR_PARAM_QUANTITY, doubleParam:5.15];
[fptr setParam:LIBFPTR_PARAM_TAX_TYPE, intParam:LIBFPTR_TAX_VAT0];
[fptr registration]
fptr.setParam(Constants.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
fptr.setParam(Constants.LIBFPTR_PARAM_PRICE, 100);
fptr.setParam(Constants.LIBFPTR_PARAM_QUANTITY, 5.15);
fptr.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, Constants.LIBFPTR_TAX_VAT10);
fptr.registration();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_COMMODITY_NAME, 'Товар');
    fptr.setParam(fptr.LIBFPTR_PARAM_PRICE, 100);
    fptr.setParam(fptr.LIBFPTR_PARAM_QUANTITY, 5.15);
    fptr.setParam(fptr.LIBFPTR_PARAM_TAX_TYPE, fptr.LIBFPTR_TAX_VAT0);
    fptr.registration;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_COMMODITY_NAME, "Товар")
fptr.SetParam(fptr10.LIBFPTR_PARAM_PRICE, 100)
fptr.SetParam(fptr10.LIBFPTR_PARAM_QUANTITY, 5.15)
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAX_TYPE, fptr10.LIBFPTR_TAX_VAT0)
fptr.Registration()
Fptr.setParam(Fptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
Fptr.setParam(Fptr.LIBFPTR_PARAM_PRICE, 100);
Fptr.setParam(Fptr.LIBFPTR_PARAM_QUANTITY, 5.15);
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_VAT10);
Fptr.registration();

Регистрация позиции с указанием суммы налога

libfptr_set_param_str(fptr, LIBFPTR_PARAM_COMMODITY_NAME, L"Товар");
libfptr_set_param_double(fptr, LIBFPTR_PARAM_PRICE, 100);
libfptr_set_param_double(fptr, LIBFPTR_PARAM_QUANTITY, 5.15);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_TAX_TYPE, LIBFPTR_TAX_VAT10);
libfptr_set_param_double(fptr, LIBFPTR_PARAM_TAX_SUM, 51.5);
libfptr_registration(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар")
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 100)
fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5.15)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT10)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_SUM, 51.5)
fptr.registration()
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 100);
fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5.15);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT10);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_SUM, 51.5);
fptr.registration();
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 100);
fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5.15);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT10);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_SUM, 51.5);
fptr.registration();
[fptr setParam:LIBFPTR_PARAM_COMMODITY_NAME, NSStringParam:@"Товар"];
[fptr setParam:LIBFPTR_PARAM_PRICE, doubleParam:100];
[fptr setParam:LIBFPTR_PARAM_QUANTITY, doubleParam:5.15];
[fptr setParam:LIBFPTR_PARAM_TAX_TYPE, intParam:LIBFPTR_TAX_VAT10];
[fptr setParam:LIBFPTR_PARAM_TAX_SUM, doubleParam:51.5];
[fptr registration]
fptr.setParam(Constants.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
fptr.setParam(Constants.LIBFPTR_PARAM_PRICE, 100);
fptr.setParam(Constants.LIBFPTR_PARAM_QUANTITY, 5.15);
fptr.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, Constants.LIBFPTR_TAX_VAT10);
fptr.setParam(Constants.LIBFPTR_PARAM_TAX_SUM, 51.5);
fptr.registration();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_COMMODITY_NAME, 'Товар');
    fptr.setParam(fptr.LIBFPTR_PARAM_PRICE, 100);
    fptr.setParam(fptr.LIBFPTR_PARAM_QUANTITY, 5.15);
    fptr.setParam(fptr.LIBFPTR_PARAM_TAX_TYPE, fptr.LIBFPTR_TAX_VAT0);
    fptr.setParam(fptr.LIBFPTR_PARAM_TAX_SUM, 51.5);
    fptr.registration;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_COMMODITY_NAME, "Товар")
fptr.SetParam(fptr10.LIBFPTR_PARAM_PRICE, 100)
fptr.SetParam(fptr10.LIBFPTR_PARAM_QUANTITY, 5.15)
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAX_TYPE, fptr10.LIBFPTR_TAX_VAT10)
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAX_SUM, 51.5)
fptr.Registration()
Fptr.setParam(Fptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
Fptr.setParam(Fptr.LIBFPTR_PARAM_PRICE, 100);
Fptr.setParam(Fptr.LIBFPTR_PARAM_QUANTITY, 5.15);
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_VAT10);
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_SUM, 51.5)
Fptr.registration();

Регистрация позиции без расчета суммы налога

libfptr_set_param_str(fptr, LIBFPTR_PARAM_COMMODITY_NAME, L"Товар");
libfptr_set_param_double(fptr, LIBFPTR_PARAM_PRICE, 100);
libfptr_set_param_double(fptr, LIBFPTR_PARAM_QUANTITY, 5.15);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_TAX_TYPE, LIBFPTR_TAX_VAT18);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_USE_ONLY_TAX_TYPE, true);
libfptr_registration(fptr);

// ...

libfptr_set_param_int(fptr, LIBFPTR_PARAM_TAX_TYPE, LIBFPTR_TAX_VAT18);
libfptr_set_param_double(fptr, LIBFPTR_PARAM_TAX_SUM, 78.56);
libfptr_receipt_tax(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар")
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 100)
fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5.15)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT0)
fptr.setParam(IFptr.LIBFPTR_PARAM_USE_ONLY_TAX_TYPE, True)
fptr.registration()

# ...

fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_SUM, 78.56)
fptr.receiptTax()
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 100);
fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5.15);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT0);
fptr.setParam(IFptr.LIBFPTR_PARAM_USE_ONLY_TAX_TYPE, true);
fptr.registration();

// ...

fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_SUM, 78.56);
fptr.receiptTax();
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 100);
fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5.15);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT0);
fptr.setParam(IFptr.LIBFPTR_PARAM_USE_ONLY_TAX_TYPE, true);
fptr.registration();

// ...

fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_SUM, 78.56);
fptr.receiptTax();
[fptr setParam:LIBFPTR_PARAM_COMMODITY_NAME, NSStringParam:@"Товар"];
[fptr setParam:LIBFPTR_PARAM_PRICE, doubleParam:100];
[fptr setParam:LIBFPTR_PARAM_QUANTITY, doubleParam:5.15];
[fptr setParam:LIBFPTR_PARAM_TAX_TYPE, intParam:LIBFPTR_TAX_VAT0];
[fptr setParam:LIBFPTR_PARAM_USE_ONLY_TAX_TYPE, boolParam:true];
[fptr registration]

// ...

[fptr setParam:LIBFPTR_PARAM_TAX_TYPE, intParam:LIBFPTR_TAX_VAT18];
[fptr setParam:LIBFPTR_PARAM_TAX_SUM, doubleParam:78.56];
[fptr receiptTax]
fptr.setParam(Constants.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
fptr.setParam(Constants.LIBFPTR_PARAM_PRICE, 100);
fptr.setParam(Constants.LIBFPTR_PARAM_QUANTITY, 5.15);
fptr.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, Constants.LIBFPTR_TAX_VAT0);
fptr.setParam(Constants.LIBFPTR_PARAM_USE_ONLY_TAX_TYPE, true);
fptr.registration();

// ...

fptr.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, Constants.LIBFPTR_TAX_VAT18);
fptr.setParam(Constants.LIBFPTR_PARAM_TAX_SUM, 78.56);
fptr.receiptTax();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_COMMODITY_NAME, 'Товар');
    fptr.setParam(fptr.LIBFPTR_PARAM_PRICE, 100);
    fptr.setParam(fptr.LIBFPTR_PARAM_QUANTITY, 5.15);
    fptr.setParam(fptr.LIBFPTR_PARAM_TAX_TYPE, fptr.LIBFPTR_TAX_VAT0);
    fptr.setParam(fptr.LIBFPTR_PARAM_USE_ONLY_TAX_TYPE, True);
    fptr.registration;

    // ...

    fptr.setParam(fptr.LIBFPTR_PARAM_TAX_TYPE, fptr.LIBFPTR_TAX_VAT18);
    fptr.setParam(fptr.LIBFPTR_PARAM_TAX_SUM, 78.56);
    fptr.receiptTax;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_COMMODITY_NAME, "Товар")
fptr.SetParam(fptr10.LIBFPTR_PARAM_PRICE, 100)
fptr.SetParam(fptr10.LIBFPTR_PARAM_QUANTITY, 5.15)
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAX_TYPE, fptr10.LIBFPTR_TAX_VAT0)
fptr.SetParam(fptr10.LIBFPTR_PARAM_USE_ONLY_TAX_TYPE, true)
fptr.Registration()

// ...

fptr.SetParam(fptr10.LIBFPTR_PARAM_TAX_TYPE, fptr10.LIBFPTR_TAX_VAT18)
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAX_SUM, 78.56)
fptr.ReceiptTax()
Fptr.setParam(Fptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
Fptr.setParam(Fptr.LIBFPTR_PARAM_PRICE, 100);
Fptr.setParam(Fptr.LIBFPTR_PARAM_QUANTITY, 5.15);
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_VAT10);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USE_ONLY_TAX_TYPE, true);
Fptr.registration();

// ...

Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_VAT18)
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_SUM, 78.56)
Fptr.receiptTax()

Регистрация позиции с агентом и поставщиком

libfptr_set_param_str(fptr, 1005, L"Улица Свободы, д.1");
libfptr_set_param_str(fptr, 1016, L"123456789047");
libfptr_set_param_str(fptr, 1026, L"ООО Оператор");
libfptr_set_param_str(fptr, 1075, L"+79161234567");
libfptr_set_param_str(fptr, 1075, L"+79169876543");
libfptr_util_form_tlv(fptr);

std::vector<uchar> agentInfo(128);
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, 
                                       &agentInfo[0], agentInfo.size());
if (size > agentInfo.size())
{
    agentInfo.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, 
                                &agentInfo[0], agentInfo.size());
}
agentInfo.resize(size);

libfptr_set_param_str(fptr, 1171, L"+79113456789");
libfptr_set_param_str(fptr, 1225, L"ООО Поставщик");
libfptr_util_form_tlv(fptr);

std::vector<uchar> suplierInfo;
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, 
                                       &suplierInfo[0], suplierInfo.size());
if (size > suplierInfo.size())
{
    suplierInfo.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, 
                                &suplierInfo[0], suplierInfo.size());
}
suplierInfo.resize(size);

libfptr_set_param_str(fptr, LIBFPTR_PARAM_COMMODITY_NAME, L"Товар");
libfptr_set_param_double(fptr, LIBFPTR_PARAM_PRICE, 100);
libfptr_set_param_double(fptr, LIBFPTR_PARAM_QUANTITY, 5.15);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_TAX_TYPE, LIBFPTR_TAX_VAT18);
libfptr_set_param_int(fptr, 1222, LIBFPTR_AT_ANOTHER);
libfptr_set_param_bytearray(fptr, 1223, &agentInfo[0]. agentInfo.size());
libfptr_set_param_str(fptr, 1226, L"123456789047");
libfptr_set_param_bytearray(fptr, 1224, &suplierInfo[0]. suplierInfo.size());
libfptr_registration(fptr);
fptr.setParam(1005, "Улица Свободы, д.1")
fptr.setParam(1016, "123456789047")
fptr.setParam(1026, "ООО Оператор")
fptr.setParam(1075, "+79161234567")
fptr.setParam(1075, "+79169876543")
fptr.utilFormTlv()
agentInfo = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)

fptr.setParam(1171, "+79113456789")
fptr.setParam(1225, "ООО Поставщик")
fptr.utilFormTlv()
suplierInfo = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)

fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар")
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 100)
fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5.15)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18)
fptr.setParam(1222, IFptr.LIBFPTR_AT_ANOTHER)
fptr.setParam(1223, agentInfo)
fptr.setParam(1226, "123456789047")
fptr.setParam(1224, suplierInfo)
fptr.registration()
fptr.setParam(1005, "Улица Свободы, д.1");
fptr.setParam(1016, "123456789047");
fptr.setParam(1026, "ООО Оператор");
fptr.setParam(1075, "+79161234567");
fptr.setParam(1075, "+79169876543");
fptr.utilFormTlv();
byte[] agentInfo = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);

fptr.setParam(1171, "+79113456789");
fptr.setParam(1225, "ООО Поставщик");
fptr.utilFormTlv();
byte[] suplierInfo = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);

fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 100);
fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5.15);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
fptr.setParam(1222, IFptr.LIBFPTR_AT_ANOTHER);
fptr.setParam(1223, agentInfo);
fptr.setParam(1226, "123456789047");
fptr.setParam(1224, suplierInfo);
fptr.registration();
fptr.setParam(1005, "Улица Свободы, д.1");
fptr.setParam(1016, "123456789047");
fptr.setParam(1026, "ООО Оператор");
fptr.setParam(1075, "+79161234567");
fptr.setParam(1075, "+79169876543");
fptr.utilFormTlv();
byte[] agentInfo = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);

fptr.setParam(1171, "+79113456789");
fptr.setParam(1225, "ООО Поставщик");
fptr.utilFormTlv();
byte[] suplierInfo = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);

fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 100);
fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5.15);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
fptr.setParam(1222, IFptr.LIBFPTR_AT_ANOTHER);
fptr.setParam(1223, agentInfo);
fptr.setParam(1226, "123456789047");
fptr.setParam(1224, suplierInfo);
fptr.registration();
[fptr setParam:1005, NSStringParam:@"Улица Свободы, д.1"];
[fptr setParam:1016, NSStringParam:@"123456789047"];
[fptr setParam:1026, NSStringParam:@"ООО Оператор"];
[fptr setParam:1075, NSStringParam:@"+79161234567"];
[fptr setParam:1075, NSStringParam:@"+79169876543"];
[fptr utilFormTlv];
NSData *agentInfo = [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE];

[fptr setParam:1171, NSStringParam:@"+79113456789"];
[fptr setParam:1225, NSStringParam:@"ООО Поставщик"];
[fptr utilFormTlv];
NSData *suplierInfo = [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE];

[fptr setParam:LIBFPTR_PARAM_COMMODITY_NAME, NSStringParam:@"Товар"];
[fptr setParam:LIBFPTR_PARAM_PRICE, doubleParam:100];
[fptr setParam:LIBFPTR_PARAM_QUANTITY, doubleParam:5.15];
[fptr setParam:LIBFPTR_PARAM_TAX_TYPE, intParam:LIBFPTR_TAX_VAT18];
[fptr setParam:1222, intParam:LIBFPTR_AT_ANOTHER];
[fptr setParam:1223, NSDataParam:agentInfo];
[fptr setParam:1226, NSStringParam:@"123456789047"];
[fptr setParam:1224, NSDataParam:suplierInfo];
[fptr registration]
fptr.setParam(1005, "Улица Свободы, д.1");
fptr.setParam(1016, "123456789047");
fptr.setParam(1026, "ООО Оператор");
fptr.setParam(1075, "+79161234567");
fptr.setParam(1075, "+79169876543");
fptr.utilFormTlv();
byte[] agentInfo = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE);

fptr.setParam(1171, "+79113456789");
fptr.setParam(1225, "ООО Поставщик");
fptr.utilFormTlv();
byte[] suplierInfo = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE);

fptr.setParam(Constants.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
fptr.setParam(Constants.LIBFPTR_PARAM_PRICE, 100);
fptr.setParam(Constants.LIBFPTR_PARAM_QUANTITY, 5.15);
fptr.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, Constants.LIBFPTR_TAX_VAT18);
fptr.setParam(1222, Constants.LIBFPTR_AT_ANOTHER);
fptr.setParam(1223, agentInfo);
fptr.setParam(1226, "123456789047");
fptr.setParam(1224, suplierInfo);
fptr.registration();
var
    agentInfo:      Variant;
    suplierInfo:    Variant;
begin
    fptr.setParam(1005, 'Улица Свободы, д.1');
    fptr.setParam(1016, '123456789047');
    fptr.setParam(1026, 'ООО Оператор');
    fptr.setParam(1075, '+79161234567');
    fptr.setParam(1075, '+79169876543');
    fptr.utilFormTlv;
    agentInfo := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);

    fptr.setParam(1171, '+79113456789');
    fptr.setParam(1225, 'ООО Поставщик');
    fptr.utilFormTlv;
    suplierInfo := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);

    fptr.setParam(fptr.LIBFPTR_PARAM_COMMODITY_NAME, 'Товар');
    fptr.setParam(fptr.LIBFPTR_PARAM_PRICE, 100);
    fptr.setParam(fptr.LIBFPTR_PARAM_QUANTITY, 5.15);
    fptr.setParam(fptr.LIBFPTR_PARAM_TAX_TYPE, fptr.LIBFPTR_TAX_VAT18);
    fptr.setParam(1222, fptr.LIBFPTR_AT_ANOTHER);
    fptr.setParam(1223, agentInfo);
    fptr.setParam(1226, '123456789047');
    fptr.setParam(1224, suplierInfo);
    fptr.registration;
end;
fptr.SetParam(1005, "Улица Свободы, д.1")
fptr.SetParam(1016, "123456789047")
fptr.SetParam(1026, "ООО Оператор")
fptr.SetParam(1075, "+79161234567")
fptr.SetParam(1075, "+79169876543")
fptr.UtilFormTlv()
agentInfo := fptr.getParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE)

fptr.SetParam(1171, "+79113456789")
fptr.SetParam(1225, "ООО Поставщик")
fptr.UtilFormTlv()
suplierInfo := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE)

fptr.SetParam(fptr10.LIBFPTR_PARAM_COMMODITY_NAME, "Товар")
fptr.SetParam(fptr10.LIBFPTR_PARAM_PRICE, 100)
fptr.SetParam(fptr10.LIBFPTR_PARAM_QUANTITY, 5.15)
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAX_TYPE, fptr10.LIBFPTR_TAX_VAT18)
fptr.SetParam(1222, fptr10.LIBFPTR_AT_ANOTHER)
fptr.SetParam(1223, agentInfo)
fptr.SetParam(1226, "123456789047")
fptr.SetParam(1224, suplierInfo)
fptr.Registration()
Fptr.setParam(1005, "Улица Свободы, д.1");
Fptr.setParam(1016, "123456789047");
Fptr.setParam(1026, "ООО Оператор");
Fptr.setParam(1075, "+79161234567");
Fptr.setParam(1075, "+79169876543");
Fptr.utilFormTlv();
agentInfo = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE);

Fptr.setParam(1171, "+79113456789");
Fptr.setParam(1225, "ООО Поставщик");
Fptr.utilFormTlv();
suplierInfo = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE);

Fptr.setParam(Fptr.LIBFPTR_PARAM_COMMODITY_NAME, "Товар");
Fptr.setParam(Fptr.LIBFPTR_PARAM_PRICE, 100);
Fptr.setParam(Fptr.LIBFPTR_PARAM_QUANTITY, 5.15);
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_VAT18);
Fptr.setParam(1222, Constants.LIBFPTR_AT_ANOTHER);
Fptr.setParam(1223, agentInfo);
Fptr.setParam(1226, "123456789047");
Fptr.setParam(1224, suplierInfo);
Fptr.registration();

Для регистрации позиции требуется вызвать метод registration().

Обязательными входными параметрами для метода являются:

Тип налога (LIBFPTR_PARAM_TAX_TYPE) может принимать следующие значения:

При передаче только этих параметров будет произведена регистрация товара с расчетом полной суммы позиции и суммы налога на стороне ККТ.

Ниже представлен список дополнительных параметров позиции (могут не поддерживаться в ККТ - в этом случае будет выдана ошибка):

Также в данном методе можно передать следущие реквизиты ФН:

Реквизит Описание Тип
1162 Код товара bytearray
1191 Дополнительный реквизит предмета расчета string
1197 Единицы измерения предмета расчета string
1212 Признак предмета расчета int
1214 Признак способа расчета int
1222 Признак агента по предмету расчета int
1223 Данные агента bytearray
1224 Данные поставщика bytearray
1226 ИНН поставщика string
1229 Акциз double
1230 Код страны происхождения string
1231 Номер таможенной декларации string

Реквизит 1222 может принимать следующие значения:

Реквизит 1223 составной и состоит из следующих реквизитов:

Реквизит Описание Тип
1005 Адрес оператора перевода string
1016 ИНН оператора перевода string
1026 Наименование оператора перевода string
1044 Операция платежного агента string
1073 Телефон платежного агента (может повторяться несколько раз) string
1074 Телефон оператора по приему платежей (может повторяться несколько раз) string
1075 Телефон оператора перевода (может повторяться несколько раз) string

Реквизит 1224 составной и состоит из следующих реквизитов:

Реквизит Описание Тип
1171 Телефон поставщика (может повторяться несколько раз) string
1225 Наименование поставщика string

Результатом команды будет следующая информация:

Параметр Описание Тип
1162 значение реквизита 1162 (код товара), если был передан параметр LIBFPTR_PARAM_MARKING_CODE bytearray

Зарегистрировать оплату

Оплата чека

libfptr_set_param_int(fptr, LIBFPTR_PARAM_PAYMENT_TYPE, LIBFPTR_PT_CASH);
libfptr_set_param_double(fptr, LIBFPTR_PARAM_PAYMENT_SUM, 100.00);
libfptr_payment(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH)
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_SUM, 100.00)
fptr.payment()
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH);
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_SUM, 100.00);
fptr.payment();
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH);
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_SUM, 100.00);
fptr.payment();
[fptr setParam:LIBFPTR_PARAM_PAYMENT_TYPE, intParam:LIBFPTR_PT_CASH];
[fptr setParam:LIBFPTR_PARAM_PAYMENT_SUM, doubleParam:100.00];
[fptr payment]
fptr.setParam(Constants.LIBFPTR_PARAM_PAYMENT_TYPE, Constants.LIBFPTR_PT_CASH);
fptr.setParam(Constants.LIBFPTR_PARAM_PAYMENT_SUM, 100.00);
fptr.payment();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_PAYMENT_TYPE, fptr.LIBFPTR_PT_CASH);
    fptr.setParam(fptr.LIBFPTR_PARAM_PAYMENT_SUM, 100.00);
    fptr.payment;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_PAYMENT_TYPE, fptr10.LIBFPTR_PT_CASH)
fptr.SetParam(fptr10.LIBFPTR_PARAM_PAYMENT_SUM, 100.00)
fptr.Payment()
Fptr.setParam(Fptr.LIBFPTR_PARAM_PAYMENT_TYPE, Fptr.LIBFPTR_PT_CASH);
Fptr.setParam(Fptr.LIBFPTR_PARAM_PAYMENT_SUM, 100.00);
Fptr.payment();

Для регистрации оплаты чека требуется вызвать метод payment(), передав способ расчета в параметре LIBFPTR_PARAM_PAYMENT_TYPE и сумму расчета в параметре LIBFPTR_PARAM_PAYMENT_SUM.

Способ расчета (LIBFPTR_PARAM_PAYMENT_TYPE) может принимать следующие значения:

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_REMAINDER Неоплаченный остаток чека double
LIBFPTR_PARAM_CHANGE Сдача по чеку double

Зарегистрировать налог на чек

Регистрация налога на чек

libfptr_set_param_int(fptr, LIBFPTR_PARAM_TAX_TYPE, LIBFPTR_TAX_VAT18);
libfptr_set_param_double(fptr, LIBFPTR_PARAM_TAX_SUM, 100.00);
libfptr_receipt_tax(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_SUM, 100.00)
fptr.receiptTax()
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_SUM, 100.00);
fptr.receiptTax();
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_SUM, 100.00);
fptr.receiptTax();
[fptr setParam:LIBFPTR_PARAM_TAX_TYPE, intParam:LIBFPTR_TAX_VAT18];
[fptr setParam:LIBFPTR_PARAM_TAX_SUM, doubleParam:100.00];
[fptr receiptTax]
fptr.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, Constants.LIBFPTR_TAX_VAT18);
fptr.setParam(Constants.LIBFPTR_PARAM_TAX_SUM, 100.00);
fptr.receiptTax();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_TAX_TYPE, fptr.LIBFPTR_TAX_VAT18);
    fptr.setParam(fptr.LIBFPTR_PARAM_TAX_SUM, 100.00);
    fptr.receiptTax;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAX_TYPE, fptr10.LIBFPTR_TAX_VAT18)
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAX_SUM, 100.00)
fptr.ReceiptTax()
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_VAT18);
Fptr.setParam(Fptr.LIBFPTR_PARAM_PAYMENT_SUM, 100.00);
Fptr.receiptTax();

Для регистрации налога на чек требуется вызвать метод receiptTax(), передав тип налога в параметре LIBFPTR_PARAM_TAX_TYPE и сумму налога в параметре LIBFPTR_PARAM_TAX_SUM.

Тип налога (LIBFPTR_PARAM_TAX_TYPE) может принимать следующие значения:

Зарегистрировать итог

Регистрация итога чека

libfptr_set_param_double(fptr, LIBFPTR_PARAM_SUM, 1000.00);
libfptr_receipt_total(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_SUM, 1000.00)
fptr.receiptTotal()
fptr.setParam(IFptr.LIBFPTR_PARAM_SUM, 1000.00);
fptr.receiptTotal();
fptr.setParam(IFptr.LIBFPTR_PARAM_SUM, 1000.00);
fptr.receiptTotal();
[fptr setParam:LIBFPTR_PARAM_SUM, intParam:1000.00];
[fptr receiptTotal]
fptr.setParam(Constants.LIBFPTR_PARAM_SUM, 1000.00);
fptr.receiptTotal();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_SUM, 1000.00);
    fptr.receiptTotal;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_SUM, 1000.00)
fptr.ReceiptTotal()
Fptr.setParam(Fptr.LIBFPTR_PARAM_SUM, 1000.00);
Fptr.receiptTotal();

Для регистрации итога чека требуется вызвать метод receiptTotal(), передав сумму чека в параметре LIBFPTR_PARAM_SUM.

Допускается регистрация итога меньше суммы чека, но только в рамках копеек. Т.е., если общая сумма чека равна 1000.57, то можно зарегистрировать итог от 1000.00 до 1000.57.

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

Закрыть чек

Закрытие частично оплаченного или неоплаченного чека

libfptr_set_param_int(fptr, LIBFPTR_PARAM_PAYMENT_TYPE, LIBFPTR_PT_ELECTRONICALLY);
libfptr_close_receipt(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_ELECTRONICALLY)
fptr.closeReceipt()
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_ELECTRONICALLY);
fptr.closeReceipt();
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_ELECTRONICALLY);
fptr.closeReceipt();
[fptr setParam:LIBFPTR_PARAM_PAYMENT_TYPE, intParam:LIBFPTR_PT_ELECTRONICALLY];
[fptr closeReceipt]
fptr.setParam(Constants.LIBFPTR_PARAM_PAYMENT_TYPE, Constants.LIBFPTR_PT_ELECTRONICALLY);
fptr.closeReceipt();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_PAYMENT_TYPE, fptr.LIBFPTR_PT_ELECTRONICALLY);
    fptr.closeReceipt;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_PAYMENT_TYPE, fptr10.LIBFPTR_PT_ELECTRONICALLY)
fptr.CloseReceipt()
Fptr.setParam(Fptr.LIBFPTR_PARAM_PAYMENT_TYPE, Fptr.LIBFPTR_PT_ELECTRONICALLY);
Fptr.closeReceipt();

Закрытие полностью оплаченного чека

libfptr_close_receipt(fptr);
fptr.closeReceipt()
fptr.closeReceipt();
fptr.closeReceipt();
[fptr closeReceipt]
fptr.closeReceipt();
begin
    fptr.closeReceipt;
end;
fptr.CloseReceipt()
Fptr.closeReceipt();

Для закрытия чека требуется вызвать метод closeReceipt().

Если чек оплачен не полность или не оплачен совсем (не зарегистрирована ни одна оплата), то чек будет автоматически оплачен / доплачен заданным в параметре LIBFPTR_PARAM_PAYMENT_TYPE типом оплаты и закрыт. Если в этом случае способ расчета не передан, будет использован наличный способ расчета (LIBFPTR_PT_CASH). Если чек уже полностью оплачен, то значение параметра LIBFPTR_PARAM_PAYMENT_TYPE ни на что не влияет.

Проверить закрытие документа

Проверка закрытия документа (на примере закрытия фискального чека)

// Вспомогательная функция для чтения текста ошибки
std::wstring getErrorDescription(libfptr_handle fptr)
{
    std::vector<wchar_t> str(32);
    int size = libfptr_error_description(fptr, &str[0], str.size());
    if (size > str.size())
    {
        str.resize(size);
        libfptr_error_description(fptr, &str[0], str.size());
    }
    return std::wstring(&str[0]);
}

libfptr_close_receipt(fptr);

while (libfptr_check_document_closed(fptr) < 0) {
  // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
  std::wcout << getErrorDescription(fptr) << std::endl;
  continue;
}

if (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_DOCUMENT_CLOSED) == 0) {
  // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
  libfptr_cancel_receipt(fptr);
  return;
}

if (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_DOCUMENT_PRINTED) == 0) {
  // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
  while (libfptr_continue_print(fptr) < 0) {
    // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
    std::wcout << L"Не удалось напечатать документ (Ошибка \""<< getErrorDescription(fptr) << L"\"). Устраните неполадку и повторите."; 
    continue;
  }
}
fptr.closeReceipt()

while fptr.checkDocumentClosed() < 0:
  # Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
  print(fptr.errorDescription())
  continue

if not fptr.getParamBool(IFptr.LIBFPTR_PARAM_DOCUMENT_CLOSED):
  # Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
  fptr.cancelReceipt()
  return

if not fptr.getParamBool(IFptr.LIBFPTR_PARAM_DOCUMENT_PRINTED):
  # Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
  while fptr.continuePrint() < 0:
    # Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
    print('Не удалось напечатать документ (Ошибка "%s"). Устраните неполадку и повторите.', fptr.errorDescription())
    continue
fptr.closeReceipt();

while (fptr.checkDocumentClosed() < 0) {
    // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
    System.out.println(fptr.errorDescription());
    continue;
}

if (!fptr.getParamBool(IFptr.LIBFPTR_PARAM_DOCUMENT_CLOSED)) {
    // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
    fptr.cancelReceipt();
    return;
}

if (!fptr.getParamBool(IFptr.LIBFPTR_PARAM_DOCUMENT_PRINTED)) {
    // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
    while (fptr.continuePrint() < 0) {
        // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
        System.out.println(String.format("Не удалось напечатать документ (Ошибка \"%s\"). Устраните неполадку и повторите.", fptr.errorDescription()));
        continue;
    }
}
fptr.closeReceipt();

while (fptr.checkDocumentClosed() < 0) {
    // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
    Log.d(TAG, fptr.errorDescription());
    continue;
}

if (!fptr.getParamBool(IFptr.LIBFPTR_PARAM_DOCUMENT_CLOSED)) {
    // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
    fptr.cancelReceipt();
    return;
}

if (!fptr.getParamBool(IFptr.LIBFPTR_PARAM_DOCUMENT_PRINTED)) {
    // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
    while (fptr.continuePrint() < 0) {
        // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
        Log.d(TAG, String.format("Не удалось напечатать документ (Ошибка \"%s\"). Устраните неполадку и повторите.", fptr.errorDescription()));
        continue;
    }
}
[fptr closeReceipt];

while ([fptr checkDocumentClosed] < 0) {
    // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
    NSLog([fptr errorDescription]);
    continue;
}

if (![fptr getParamBool:LIBFPTR_PARAM_DOCUMENT_CLOSED]) {
    // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
    [fptr cancelReceipt];
    return;
}

if (![fptr getParamBool:LIBFPTR_PARAM_DOCUMENT_PRINTED]) {
    // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
    while ([fptr continuePrint] < 0) {
        // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
        NSLog(@"Не удалось напечатать документ (Ошибка \"%@\"). Устраните неполадку и повторите.", [fptr errorDescription]);
        continue;
    }
}
fptr.closeReceipt();

while (fptr.checkDocumentClosed() < 0)
{
    // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
    Console.WriteLine(fptr.errorDescription());
    continue;
}

if (!fptr.getParamBool(Constants.LIBFPTR_PARAM_DOCUMENT_CLOSED))
{
    // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
    fptr.cancelReceipt();
    return;
}

if (!fptr.getParamBool(Constants.LIBFPTR_PARAM_DOCUMENT_PRINTED))
{
    // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
    while (fptr.continuePrint() < 0)
    {
        // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
        Console.WriteLine(String.Format("Не удалось напечатать документ (Ошибка \"{0}\"). Устраните неполадку и повторите.", fptr.errorDescription()));
        continue;
    }
}
begin
    fptr.closeReceipt;

    While fptr.checkDocumentClosed <> 0 do
    begin
        // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
        showmessage(fptr.errorDescription);
        Continue;
    end;

    if not fptr.getParamBool(fptr.LIBFPTR_PARAM_DOCUMENT_CLOSED) then
    begin
        // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
        fptr.cancelReceipt;
        exit;
    end;

    if not fptr.getParamBool(fptr.LIBFPTR_PARAM_DOCUMENT_PRINTED) then
    begin
        // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
        While fptr.continuePrint <> 0 do
        begin
            // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
            showmessage('Не удалось напечатать документ (Ошибка "' + fptr.errorDescription + '"). Устраните неполадку и повторите.');
            Continue;
        end;
    end;
end;
fptr.CloseReceipt()

for fptr.CheckDocumentClosed() < 0 {
  // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
  log.Println(fptr.ErrorDescription())
  continue
}

if !fptr.GetParamBool(fptr10.LIBFPTR_PARAM_DOCUMENT_CLOSED) {
  // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
  fptr.CancelReceipt()
  return
}

if !fptr.GetParamBool(fptr10.LIBFPTR_PARAM_DOCUMENT_PRINTED) {
  // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
  for fptr.ContinuePrint() < 0 {
    // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
    log.Printf("Не удалось напечатать документ (Ошибка "%s"). Устраните неполадку и повторите.", fptr.ErrorDescription())
    continue
  }
}
Fptr.closeReceipt();

while (Fptr.checkDocumentClosed() < 0) {
    // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
    Fptr.logWrite("FiscalPrinter", Fptr.LIBFPTR_LOG_ERROR, Fptr.errorDescription());
    continue;
}

if (!Fptr.getParamBool(Fptr.LIBFPTR_PARAM_DOCUMENT_CLOSED))
{
    // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
    Fptr.cancelReceipt();
    return;
}

if (!Fptr.getParamBool(Fptr.LIBFPTR_PARAM_DOCUMENT_PRINTED))
{
    // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
    while (Fptr.continuePrint() < 0)
    {
        // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
        Fptr.logWrite("FiscalPrinter", Fptr.LIBFPTR_LOG_ERROR, "Не удалось напечатать документ (Ошибка \"" +
            Fptr.errorDescription() + "\"). Устраните неполадку и повторите.");
        continue;
    }
}

В ряде ситуаций (окончание бумаги, потеря связи с ККТ в момент регистрации документа) состояние документа остается неизвестным. Он может закрыться в ФН (что является необратимой операцией), но не напечататься на чековой ленте. Данный метод сверяет счетчики ККТ с сохраненными до закрытия документа копиями и вычисляет, закрылся ли он, а также проверяет состояние печати документа. Объект драйвера не должен разрушаться, создаваться заново и перенастраиваться между вызовами методов закрытия / формирования документа и checkDocumentClosed() для корректной работы метода.

Метод применим для следующих типов документов:

Если какой-то из документов формируется автоматически (например, открытие смены при формировании первого чека в смене), то метод checkDocumentClosed() его учитывать не будет.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DOCUMENT_CLOSED Документ закрылся bool
LIBFPTR_PARAM_DOCUMENT_PRINTED Документ допечатался bool

Допечатать документ

Допечатывание документа

libfptr_continue_print(fptr);
fptr.continuePrint()
fptr.continuePrint();
fptr.continuePrint();
[fptr continuePrint];
fptr.continuePrint();
begin
    fptr.continuePrint;
end;
fptr.ContinuePrint()
Fptr.continuePrint();

Для допечатывания фискального документа требуется вызвать метод continuePrint().

Внесения и выплаты

Внесение

Внесение

libfptr_set_param_double(fptr, LIBFPTR_PARAM_SUM, 100.00);
libfptr_cash_income(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_SUM, 100.00)
fptr.cashIncome()
fptr.setParam(IFptr.LIBFPTR_PARAM_SUM, 100.00);
fptr.cashIncome();
fptr.setParam(IFptr.LIBFPTR_PARAM_SUM, 100.00);
fptr.cashIncome();
[fptr setParam:LIBFPTR_PARAM_SUM doubleParam:100.00];
[fptr cashIncome];
fptr.setParam(Constants.LIBFPTR_PARAM_SUM, 100.00);
fptr.cashIncome();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_SUM, 100.00);
    fptr.cashIncome;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_SUM, 100.00)
fptr.CashIncome()
Fptr.setParam(Fptr.LIBFPTR_PARAM_SUM, 100.00);
Fptr.cashIncome();

Для регистрации внесения требуется вызвать метод cashIncome() и указать сумму внесения в параметре LIBFPTR_PARAM_SUM.

Результатом команды будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SHIFT_AUTO_OPENED true, если при выполнении операции была автоматически открыта смена в ККТ bool

Выплата

Выплата

libfptr_set_param_double(fptr, LIBFPTR_PARAM_SUM, 100.00);
libfptr_cash_outcome(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_SUM, 100.00)
fptr.cashOutcome()
fptr.setParam(IFptr.LIBFPTR_PARAM_SUM, 100.00);
fptr.cashOutcome();
fptr.setParam(IFptr.LIBFPTR_PARAM_SUM, 100.00);
fptr.cashOutcome();
[fptr setParam:LIBFPTR_PARAM_SUM doubleParam:100.00];
[fptr cashOutcome];
fptr.setParam(Constants.LIBFPTR_PARAM_SUM, 100.00);
fptr.cashOutcome();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_SUM, 100.00);
    fptr.cashOutcome;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_SUM, 100.00)
fptr.CashOutcome()
Fptr.setParam(Fptr.LIBFPTR_PARAM_SUM, 100.00);
Fptr.cashOutcome();

Для регистрации выплаты требуется вызвать метод cashOutcome() и указать сумму выплаты в параметре LIBFPTR_PARAM_SUM.

Результатом команды будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SHIFT_AUTO_OPENED true, если при выполнении операции была автоматически открыта смена в ККТ bool

Печать отчетов

Для печати отчета необходим заполнить тип отчета (параметр LIBFPTR_PARAM_REPORT_TYPE) и дополнительные параметры отчета (если они требуются) и вызвать метод report().

X-отчет

X-отчет

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_X);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_X)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_X);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_X);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_X];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_X);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_X);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_X)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);
Fptr.report();

Для печати X-отчета требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_X.

Копия последнего документа

Копия последнего документа

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_LAST_DOCUMENT);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_LAST_DOCUMENT)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_LAST_DOCUMENT);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_LAST_DOCUMENT);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_LAST_DOCUMENT];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_LAST_DOCUMENT);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_LAST_DOCUMENT);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_LAST_DOCUMENT)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_LAST_DOCUMENT);
Fptr.report();

Для печати копии последнего документа требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_LAST_DOCUMENT.

Отчет о состоянии расчетов

Отчет о состоянии расчетов

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_OFD_EXCHANGE_STATUS);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_OFD_EXCHANGE_STATUS)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_OFD_EXCHANGE_STATUS);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_OFD_EXCHANGE_STATUS);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_OFD_EXCHANGE_STATUS];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_OFD_EXCHANGE_STATUS);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_OFD_EXCHANGE_STATUS);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_OFD_EXCHANGE_STATUS)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_OFD_EXCHANGE_STATUS);
Fptr.report();

Для печати отчета о состоянии расчетов требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_OFD_EXCHANGE_STATUS.

Демо-печать

Демо-печать

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_KKT_DEMO);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_KKT_DEMO)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_KKT_DEMO);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_KKT_DEMO);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_KKT_DEMO];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_KKT_DEMO);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_KKT_DEMO);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_KKT_DEMO)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_KKT_DEMO);
Fptr.report();

Для демо-печати требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_KKT_DEMO.

Печать информации о ККТ

Печать информации о ККТ

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_KKT_INFO);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_KKT_INFO)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_KKT_INFO);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_KKT_INFO);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_KKT_INFO];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_KKT_INFO);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_KKT_INFO);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_KKT_INFO)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_KKT_INFO);
Fptr.report();

Для печати информации о ККТ требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_KKT_INFO.

Диагностика соединения с ОФД

Диагностика соединения с ОФД

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_OFD_TEST);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_OFD_TEST)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_OFD_TEST);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_OFD_TEST);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_OFD_TEST];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_OFD_TEST);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_OFD_TEST);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_OFD_TEST)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_OFD_TEST);
Fptr.report();

Для печати лиагностики соединения с ОФД требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_OFD_TEST.

Печать документа из ФН

Печать документа из ФН

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_FN_DOC_BY_NUMBER);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_DOC_BY_NUMBER)
fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_DOC_BY_NUMBER);
fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_DOC_BY_NUMBER);
fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_FN_DOC_BY_NUMBER];
[fptr setParam:LIBFPTR_PARAM_DOCUMENT_NUMBER, intParam:12];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_FN_DOC_BY_NUMBER);
fptr.setParam(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_DOC_BY_NUMBER);
    fptr.setParam(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_FN_DOC_BY_NUMBER)
fptr.SetParam(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_FN_DOC_BY_NUMBER);
Fptr.SetParam(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
Fptr.report();

Для печати документа из архива фискального накопителя требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_FN_DOC_BY_NUMBER.

Для указания номер документа используется параметр LIBFPTR_PARAM_DOCUMENT_NUMBER.

Отчет количеств

Отчет количеств

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_QUANTITY);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_QUANTITY)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_QUANTITY);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_QUANTITY);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_QUANTITY];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_QUANTITY);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_QUANTITY);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_QUANTITY)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_QUANTITY);
Fptr.report();

Для печати отчета количеств требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_QUANTITY.

Отчет по секциям

Отчет по секциям

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_DEPARTMENTS);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_DEPARTMENTS)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_DEPARTMENTS);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_DEPARTMENTS);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_DEPARTMENTS];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_DEPARTMENTS);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_DEPARTMENTS);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_DEPARTMENTS)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_DEPARTMENTS);
Fptr.report();

Для печати отчета по секциям требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_DEPARTMENTS.

Отчет по кассирам

Отчет по кассирам

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_OPERATORS);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_OPERATORS)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_OPERATORS);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_OPERATORS);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_OPERATORS];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_OPERATORS);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_OPERATORS);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_OPERATORS)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_OPERATORS);
Fptr.report();

Для печати отчета по кассирам требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_OPERATORS.

Отчет по часам

Отчет по часам

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_HOURS);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_HOURS)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_HOURS);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_HOURS);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_HOURS];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_HOURS);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_HOURS);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_HOURS)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_HOURS);
Fptr.report();

Для печати отчета по часам требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_HOURS.

Печать итогов регистрации / перерегистрации

Печать итогов регистрации / перерегистрации

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_FN_REGISTRATIONS);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_REGISTRATIONS)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_REGISTRATIONS);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_REGISTRATIONS);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_FN_REGISTRATIONS];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_FN_REGISTRATIONS);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_REGISTRATIONS);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_FN_REGISTRATIONS)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_FN_REGISTRATIONS);
Fptr.report();

Для печати итогов регистрации/перерегистрации требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_FN_REGISTRATIONS.

Счетчики итогов смены

Счетчики итогов смены

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_FN_SHIFT_TOTAL_COUNTERS);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_SHIFT_TOTAL_COUNTERS)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_SHIFT_TOTAL_COUNTERS);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_SHIFT_TOTAL_COUNTERS);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_FN_SHIFT_TOTAL_COUNTERS];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_FN_SHIFT_TOTAL_COUNTERS);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_SHIFT_TOTAL_COUNTERS);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_FN_SHIFT_TOTAL_COUNTERS)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_FN_SHIFT_TOTAL_COUNTERS);
Fptr.report();

Для печати счетчиков итогов смены требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_FN_SHIFT_TOTAL_COUNTERS.

Счетчики итогов ФН

Счетчики итогов ФН

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_FN_TOTAL_COUNTERS);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_TOTAL_COUNTERS)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_TOTAL_COUNTERS);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_TOTAL_COUNTERS);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_FN_TOTAL_COUNTERS];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_FN_TOTAL_COUNTERS);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_TOTAL_COUNTERS);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_FN_TOTAL_COUNTERS)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_FN_TOTAL_COUNTERS);
Fptr.report();

Для печати счетчиков итогов ФН требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_FN_TOTAL_COUNTERS.

Счетчики по непереданным документам

Счетчики по непереданным документам

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_FN_NOT_SENT_DOCUMENTS_COUNTERS);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_NOT_SENT_DOCUMENTS_COUNTERS)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_NOT_SENT_DOCUMENTS_COUNTERS);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_FN_NOT_SENT_DOCUMENTS_COUNTERS);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_FN_NOT_SENT_DOCUMENTS_COUNTERS];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_FN_NOT_SENT_DOCUMENTS_COUNTERS);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_FN_NOT_SENT_DOCUMENTS_COUNTERS);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_FN_NOT_SENT_DOCUMENTS_COUNTERS)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_FN_NOT_SENT_DOCUMENTS_COUNTERS);
Fptr.report();

Для печати счетчиков по непереданным документам требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_FN_NOT_SENT_DOCUMENTS_COUNTERS.

Отчет по товарам по СНО

Отчет по товарам по СНО

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_COMMODITIES_BY_TAXATION_TYPES);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_COMMODITIES_BY_TAXATION_TYPES)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_COMMODITIES_BY_TAXATION_TYPES);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_COMMODITIES_BY_TAXATION_TYPES);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_COMMODITIES_BY_TAXATION_TYPES];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_COMMODITIES_BY_TAXATION_TYPES);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_COMMODITIES_BY_TAXATION_TYPES);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_COMMODITIES_BY_TAXATION_TYPES)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_COMMODITIES_BY_TAXATION_TYPES);
Fptr.report();

Для печати отчета по товарам по СНО требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_COMMODITIES_BY_TAXATION_TYPES.

Отчет по товарам по отделам

Отчет по товарам по отделам

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_COMMODITIES_BY_DEPARTMENTS);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_COMMODITIES_BY_DEPARTMENTS)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_COMMODITIES_BY_DEPARTMENTS);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_COMMODITIES_BY_DEPARTMENTS);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_COMMODITIES_BY_DEPARTMENTS];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_COMMODITIES_BY_DEPARTMENTS);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_COMMODITIES_BY_DEPARTMENTS);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_COMMODITIES_BY_DEPARTMENTS)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_COMMODITIES_BY_DEPARTMENTS);
Fptr.report();

Для печати отчета по товарам по отделам требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_COMMODITIES_BY_DEPARTMENTS.

Отчет по товарам по суммам

Отчет по товарам по суммам

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_COMMODITIES_BY_SUMS);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_COMMODITIES_BY_SUMS)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_COMMODITIES_BY_SUMS);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_COMMODITIES_BY_SUMS);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_COMMODITIES_BY_SUMS];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_COMMODITIES_BY_SUMS);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_COMMODITIES_BY_SUMS);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_COMMODITIES_BY_SUMS)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_COMMODITIES_BY_SUMS);
Fptr.report();

Для печати отчета по товарам по суммам требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_COMMODITIES_BY_SUMS.

Начать служебный отчет

Начать служебный отчет

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_START_SERVICE);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_START_SERVICE)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_START_SERVICE);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_START_SERVICE);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_START_SERVICE];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_START_SERVICE);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_START_SERVICE);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_START_SERVICE)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_START_SERVICE);
Fptr.report();

Для начала формирования служебного отчета требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_START_SERVICE.

Для его завершения необходимо вызвать метод endNonfiscalDocument().

Отчет по скидкам

Отчет по скидкам

libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_DISCOUNTS);
libfptr_report(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_DISCOUNTS)
fptr.report()
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_DISCOUNTS);
fptr.report();
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_DISCOUNTS);
fptr.report();
[fptr setParam:LIBFPTR_PARAM_REPORT_TYPE, intParam:LIBFPTR_RT_DISCOUNTS];
[fptr report];
fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_DISCOUNTS);
fptr.report();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_DISCOUNTS);
    fptr.report;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_DISCOUNTS)
fptr.Report()
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_DISCOUNTS);
Fptr.report();

Для печати отчета по скидкам требуется вызвать метод report() с типом отчета LIBFPTR_PARAM_REPORT_TYPE равным LIBFPTR_RT_DISCOUNTS.

Запрос информации из ФН

Значение реквизита регистрации

Запрос значения реквизита регистрации

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_TAG_VALUE);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_TAG_NUMBER, 1018);
libfptr_fn_query_data(fptr);

std::vector<wchar_t> str(32);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_TAG_VALUE, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_TAG_VALUE, &str[0], str.size());
}
std::wstring companyVATIN = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_TAG_VALUE)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_NUMBER, 1018)
fptr.fnQueryData()

companyVATIN = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_VALUE)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_TAG_VALUE);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_NUMBER, 1018);
fptr.fnQueryData();

String companyVATIN = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_VALUE);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_TAG_VALUE);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_NUMBER, 1018);
fptr.fnQueryData();

String companyVATIN = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_VALUE);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_TAG_VALUE];
[fptr setParam:LIBFPTR_PARAM_TAG_NUMBER, intParam:1018];
[fptr fnQueryData];

NSString* companyVATIN = [fptr getParamString:LIBFPTR_PARAM_TAG_VALUE]
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_TAG_VALUE);
fptr.setParam(Constants.LIBFPTR_PARAM_TAG_NUMBER, 1018);
fptr.fnQueryData();

String companyVATIN = fptr.getParamString(Constants.LIBFPTR_PARAM_TAG_VALUE);
var
    companyVATIN: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_TAG_VALUE);
    fptr.setParam(fptr.LIBFPTR_PARAM_TAG_NUMBER, 1018);
    fptr.fnQueryData;

    companyVATIN := fptr.getParamString(fptr.LIBFPTR_PARAM_TAG_VALUE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_TAG_VALUE)
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAG_NUMBER, 1018)
fptr.FnQueryData()

companyVATIN := fptr.GetParamString(fptr10.LIBFPTR_PARAM_TAG_VALUE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_TAG_VALUE);
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAG_NUMBER, 1018);
Fptr.fnQueryData();

companyVATIN = Fptr.getParamString(Fptr.LIBFPTR_PARAM_TAG_VALUE);

Для запроса одного из реквизитов регистрации требуется вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_TAG_VALUE и указать номер реквизита LIBFPTR_PARAM_TAG_NUMBER.

После выполнения метода значение реквизита можно прочитать из параметра LIBFPTR_PARAM_TAG_VALUE. Тип параметра зависит от номера реквизита.

Список доступных к запросу реквизитов представлен в описании запроса Регистрационные данные.

В отличии от запроса LIBFPTR_FNDT_REGISTRATION_TLV, данные считываются преимущественно из кеша параметров ККТ.

Чтение реквизита регистрации по номеру отчета

Чтение реквизита регистрации

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_REGISTRATION_TLV);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_REGISTRATION_NUMBER, 1);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_TAG_NUMBER, 1018);
libfptr_fn_query_data(fptr);

uint tagNumber = libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_NUMBER);
uint tagType = libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_TYPE);

std::vector<wchar_t> str(32);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_TAG_VALUE, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_TAG_VALUE, &str[0], str.size());
}
std::wstring companyVATIN = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_REGISTRATION_TLV)
fptr.setParam(IFptr.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_NUMBER, 1018)
fptr.fnQueryData()

tagName      = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME)
tagType      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE)
companyVATIN = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_VALUE)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_REGISTRATION_TLV);
fptr.setParam(IFptr.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_NUMBER, 1018);
fptr.fnQueryData();

String tagName      = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME);
long tagType        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE);
String companyVATIN = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_VALUE);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_REGISTRATION_TLV);
fptr.setParam(IFptr.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_NUMBER, 1018);
fptr.fnQueryData();

String tagName      = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME);
long tagType        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE);
String companyVATIN = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_VALUE);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_REGISTRATION_TLV];
[fptr setParam:LIBFPTR_PARAM_REGISTRATION_NUMBER, intParam:1];
[fptr setParam:LIBFPTR_PARAM_TAG_NUMBER, intParam:1018];
[fptr fnQueryData];

NSString *tagName      = [fptr getParamString:LIBFPTR_PARAM_TAG_NAME];
uint tagType           = [fptr getParamInt:LIBFPTR_PARAM_TAG_TYPE];
NSString* companyVATIN = [fptr getParamString:LIBFPTR_PARAM_TAG_VALUE]
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_REGISTRATION_TLV);
fptr.setParam(Constants.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1);
fptr.setParam(Constants.LIBFPTR_PARAM_TAG_NUMBER, 1018);
fptr.fnQueryData();

String tagName      = fptr.getParamString(Constants.LIBFPTR_PARAM_TAG_NAME);
uint tagType        = fptr.getParamInt(Constants.LIBFPTR_PARAM_TAG_TYPE);
String companyVATIN = fptr.getParamString(Constants.LIBFPTR_PARAM_TAG_VALUE);
var
    tagName:      String;
    tagType:      Integer;
    companyVATIN: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_REGISTRATION_TLV);
    fptr.setParam(fptr.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1);
    fptr.setParam(fptr.LIBFPTR_PARAM_TAG_NUMBER, 1018);
    fptr.fnQueryData;

    tagName      := fptr.getParamString(fptr.LIBFPTR_PARAM_TAG_NAME);
    tagType      := fptr.getParamInt(fptr.LIBFPTR_PARAM_TAG_TYPE);
    companyVATIN := fptr.getParamString(fptr.LIBFPTR_PARAM_TAG_VALUE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_REGISTRATION_TLV)
fptr.SetParam(fptr10.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1)
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAG_NUMBER, 1018)
fptr.FnQueryData()

tagName      := fptr.GetParamString(fptr10.LIBFPTR_PARAM_TAG_NAME)
tagType      := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_TAG_TYPE)
companyVATIN := fptr.GetParamString(fptr10.LIBFPTR_PARAM_TAG_VALUE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_REGISTRATION_TLV);
Fptr.setParam(Fptr.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1);
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAG_NUMBER, 1018);
Fptr.fnQueryData();

tagName      = Fptr.getParamString(Fptr.LIBFPTR_PARAM_TAG_NAME);
tagType      = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_TAG_TYPE);
companyVATIN = Fptr.getParamString(Fptr.LIBFPTR_PARAM_TAG_VALUE);

Для запроса одного из реквизитов регистрации требуется вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_REGISTRATION_TLV и указать номер реквизита LIBFPTR_PARAM_TAG_NUMBER и порядковый номер регистрации LIBFPTR_PARAM_REGISTRATION_NUMBER.

После выполнения метода доступны следущие выходные параметры:

Параметр Описание Тип
LIBFPTR_PARAM_TAG_VALUE Значение реквизита Зависит от номера реквизита
LIBFPTR_PARAM_TAG_TYPE Тип реквизита int
LIBFPTR_PARAM_TAG_NAME Название реквизита string
LIBFPTR_PARAM_TAG_IS_COMPLEX true, если реквизит составной bool
LIBFPTR_PARAM_TAG_IS_REPEATABLE true, если реквизит может повторяться bool

Реквизит можно сразу считать в удобном для обработки виде. Для этого нужно ориентироваться на значение параметра LIBFPTR_PARAM_TAG_TYPE, и, в зависимости от него, использовать методы для чтения разных типов параметров - getParamInt(), getParamBool(), getParamDouble() и т.п.

В отличии от запроса LIBFPTR_FNDT_TAG_VALUE, данные считываются напрямую из ФН. Закешированные значения из ККТ не учитываются.

Регистрационные данные

Запрос реквизитов регистрации ККТ

// Вспомогательная функция для чтения строковых параметров
std::wstring readStringAttribute(libfptr_handle fptr, int paramNumber) {
    std::vector<wchar_t> str(32);
    int size = libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    if (size > str.size()) {
        str.resize(size);
        libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    }
    return std::wstring(&str[0]);
}

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_REG_INFO);
libfptr_fn_query_data(fptr);

int taxationTypes                   = libfptr_get_param_int(fptr, 1062);
int agentSign                       = libfptr_get_param_int(fptr, 1057);
int ffdVersion                      = libfptr_get_param_int(fptr, 1209);

bool autoModeSign                   = (libfptr_get_param_bool(fptr, 1001) != 0);
bool offlineModeSign                = (libfptr_get_param_bool(fptr, 1002) != 0);
bool encryptionSign                 = (libfptr_get_param_bool(fptr, 1056) != 0);
bool internetSign                   = (libfptr_get_param_bool(fptr, 1108) != 0);
bool serviceSign                    = (libfptr_get_param_bool(fptr, 1109) != 0);
bool bsoSign                        = (libfptr_get_param_bool(fptr, 1110) != 0);
bool lotterySign                    = (libfptr_get_param_bool(fptr, 1126) != 0);
bool gamblingSign                   = (libfptr_get_param_bool(fptr, 1193) != 0);
bool exciseSign                     = (libfptr_get_param_bool(fptr, 1207) != 0);
bool machineInstallationSign        = (libfptr_get_param_bool(fptr, 1221) != 0);

std::wstring fnsUrl                 = readStringAttribute(fptr, 1060);
std::wstring organizationAddress    = readStringAttribute(fptr, 1009);
std::wstring organizationVATIN      = readStringAttribute(fptr, 1018);
std::wstring organizationName       = readStringAttribute(fptr, 1048);
std::wstring organizationEmail      = readStringAttribute(fptr, 1117);
std::wstring paymentsAddress        = readStringAttribute(fptr, 1187);
std::wstring registrationNumber     = readStringAttribute(fptr, 1037);
std::wstring machineNumber          = readStringAttribute(fptr, 1036);
std::wstring ofdVATIN               = readStringAttribute(fptr, 1017);
std::wstring ofdName                = readStringAttribute(fptr, 1046);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_REG_INFO)
fptr.fnQueryData()

taxationTypes               = fptr.getParamInt(1062)
agentSign                   = fptr.getParamInt(1057)
ffdVersion                  = fptr.getParamInt(1209)

autoModeSign                = fptr.getParamBool(1001)
offlineModeSign             = fptr.getParamBool(1002)
encryptionSign              = fptr.getParamBool(1056)
internetSign                = fptr.getParamBool(1108)
serviceSign                 = fptr.getParamBool(1109)
bsoSign                     = fptr.getParamBool(1110)
lotterySign                 = fptr.getParamBool(1126)
gamblingSign                = fptr.getParamBool(1193)
exciseSign                  = fptr.getParamBool(1207)
machineInstallationSign     = fptr.getParamBool(1221)

fnsUrl                      = fptr.getParamString(1060)
organizationVATIN           = fptr.getParamString(1018)
organizationName            = fptr.getParamString(1048)
organizationEmail           = fptr.getParamString(1117)
paymentsAddress             = fptr.getParamString(1187)
registrationNumber          = fptr.getParamString(1037)
machineNumber               = fptr.getParamString(1036)
ofdVATIN                    = fptr.getParamString(1017)
ofdName                     = fptr.getParamString(1046)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_REG_INFO);
fptr.fnQueryData();

long taxationTypes               = fptr.getParamInt(1062);
long agentSign                   = fptr.getParamInt(1057);
long ffdVersion                  = fptr.getParamInt(1209);

boolean autoModeSign             = fptr.getParamBool(1001);
boolean offlineModeSign          = fptr.getParamBool(1002);
boolean encryptionSign           = fptr.getParamBool(1056);
boolean internetSign             = fptr.getParamBool(1108);
boolean serviceSign              = fptr.getParamBool(1109);
boolean bsoSign                  = fptr.getParamBool(1110);
boolean lotterySign              = fptr.getParamBool(1126);
boolean gamblingSign             = fptr.getParamBool(1193);
boolean exciseSign               = fptr.getParamBool(1207);
boolean machineInstallationSign  = fptr.getParamBool(1221);

String fnsUrl                    = fptr.getParamString(1060);
String organizationVATIN         = fptr.getParamString(1018);
String organizationName          = fptr.getParamString(1048);
String organizationEmail         = fptr.getParamString(1117);
String paymentsAddress           = fptr.getParamString(1187);
String registrationNumber        = fptr.getParamString(1037);
String machineNumber             = fptr.getParamString(1036);
String ofdVATIN                  = fptr.getParamString(1017);
String ofdName                   = fptr.getParamString(1046);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_REG_INFO);
fptr.fnQueryData();

long taxationTypes               = fptr.getParamInt(1062);
long agentSign                   = fptr.getParamInt(1057);
long ffdVersion                  = fptr.getParamInt(1209);

boolean autoModeSign             = fptr.getParamBool(1001);
boolean offlineModeSign          = fptr.getParamBool(1002);
boolean encryptionSign           = fptr.getParamBool(1056);
boolean internetSign             = fptr.getParamBool(1108);
boolean serviceSign              = fptr.getParamBool(1109);
boolean bsoSign                  = fptr.getParamBool(1110);
boolean lotterySign              = fptr.getParamBool(1126);
boolean gamblingSign             = fptr.getParamBool(1193);
boolean exciseSign               = fptr.getParamBool(1207);
boolean machineInstallationSign  = fptr.getParamBool(1221);

String fnsUrl                    = fptr.getParamString(1060);
String organizationVATIN         = fptr.getParamString(1018);
String organizationName          = fptr.getParamString(1048);
String organizationEmail         = fptr.getParamString(1117);
String paymentsAddress           = fptr.getParamString(1187);
String registrationNumber        = fptr.getParamString(1037);
String machineNumber             = fptr.getParamString(1036);
String ofdVATIN                  = fptr.getParamString(1017);
String ofdName                   = fptr.getParamString(1046);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_REG_INFO];
[fptr fnQueryData];

uint taxationTypes            = [fptr getParamInt:1062];
uint agentSign                = [fptr getParamInt:1057];
uint ffdVersion               = [fptr getParamInt:1209];

bool autoModeSign             = [fptr getParamBool:1001];
bool offlineModeSign          = [fptr getParamBool:1002];
bool encryptionSign           = [fptr getParamBool:1056];
bool internetSign             = [fptr getParamBool:1108];
bool serviceSign              = [fptr getParamBool:1109];
bool bsoSign                  = [fptr getParamBool:1110];
bool lotterySign              = [fptr getParamBool:1126];
bool gamblingSign             = [fptr getParamBool:1193];
bool exciseSign               = [fptr getParamBool:1207];
bool machineInstallationSign  = [fptr getParamBool:1221];

NSString *fnsUrl              = [fptr getParamString:1060];
NSString *organizationVATIN   = [fptr getParamString:1018];
NSString *organizationName    = [fptr getParamString:1048];
NSString *organizationEmail   = [fptr getParamString:1117];
NSString *paymentsAddress     = [fptr getParamString:1187];
NSString *registrationNumber  = [fptr getParamString:1037];
NSString *machineNumber       = [fptr getParamString:1036];
NSString *ofdVATIN            = [fptr getParamString:1017];
NSString *ofdName             = [fptr getParamString:1046];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_REG_INFO);
fptr.fnQueryData();

uint taxationTypes             = fptr.getParamInt(1062);
uint agentSign                 = fptr.getParamInt(1057);
uint ffdVersion                = fptr.getParamInt(1209);

bool autoModeSign              = fptr.getParamBool(1001);
bool offlineModeSign           = fptr.getParamBool(1002);
bool encryptionSign            = fptr.getParamBool(1056);
bool internetSign              = fptr.getParamBool(1108);
bool serviceSign               = fptr.getParamBool(1109);
bool bsoSign                   = fptr.getParamBool(1110);
bool lotterySign               = fptr.getParamBool(1126);
bool gamblingSign              = fptr.getParamBool(1193);
bool exciseSign                = fptr.getParamBool(1207);
bool machineInstallationSign   = fptr.getParamBool(1221);

String fnsUrl                  = fptr.getParamString(1060);
String organizationVATIN       = fptr.getParamString(1018);
String organizationName        = fptr.getParamString(1048);
String organizationEmail       = fptr.getParamString(1117);
String paymentsAddress         = fptr.getParamString(1187);
String registrationNumber      = fptr.getParamString(1037);
String machineNumber           = fptr.getParamString(1036);
String ofdVATIN                = fptr.getParamString(1017);
String ofdName                 = fptr.getParamString(1046);
var
    taxationTypes:            Longint;
    agentSign:                Longint;
    ffdVersion:               Longint;

    autoModeSign:             LongBool;
    offlineModeSign:          LongBool;
    encryptionSign:           LongBool;
    internetSign:             LongBool;
    serviceSign:              LongBool;
    bsoSign:                  LongBool;
    lotterySign:              LongBool;
    gamblingSign:             LongBool;
    exciseSign:               LongBool;
    machineInstallationSign:  LongBool;

    fnsUrl:                   String;
    organizationVATIN:        String;
    organizationName:         String;
    organizationEmail:        String;
    paymentsAddress:          String;
    registrationNumber:       String;
    machineNumber:            String;
    ofdVATIN:                 String;
    ofdName:                  String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_REG_INFO);
    fptr.fnQueryData;

    taxationTypes             := fptr.getParamInt(1062);
    agentSign                 := fptr.getParamInt(1057);
    ffdVersion                := fptr.getParamInt(1209);

    autoModeSign              := fptr.getParamBool(1001);
    offlineModeSign           := fptr.getParamBool(1002);
    encryptionSign            := fptr.getParamBool(1056);
    internetSign              := fptr.getParamBool(1108);
    serviceSign               := fptr.getParamBool(1109);
    bsoSign                   := fptr.getParamBool(1110);
    lotterySign               := fptr.getParamBool(1126);
    gamblingSign              := fptr.getParamBool(1193);
    exciseSign                := fptr.getParamBool(1207);
    machineInstallationSign   := fptr.getParamBool(1221);

    fnsUrl                    := fptr.getParamString(1060);
    organizationVATIN         := fptr.getParamString(1018);
    organizationName          := fptr.getParamString(1048);
    organizationEmail         := fptr.getParamString(1117);
    paymentsAddress           := fptr.getParamString(1187);
    registrationNumber        := fptr.getParamString(1037);
    machineNumber             := fptr.getParamString(1036);
    ofdVATIN                  := fptr.getParamString(1017);
    ofdName                   := fptr.getParamString(1046);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_REG_INFO)
fptr.FnQueryData()

taxationTypes             := fptr.GetParamInt(1062)
agentSign                 := fptr.GetParamInt(1057)
ffdVersion                := fptr.GetParamInt(1209)

autoModeSign              := fptr.GetParamBool(1001)
offlineModeSign           := fptr.GetParamBool(1002)
encryptionSign            := fptr.GetParamBool(1056)
internetSign              := fptr.GetParamBool(1108)
serviceSign               := fptr.GetParamBool(1109)
bsoSign                   := fptr.GetParamBool(1110)
lotterySign               := fptr.GetParamBool(1126)
gamblingSign              := fptr.GetParamBool(1193)
exciseSign                := fptr.GetParamBool(1207)
machineInstallationSign   := fptr.GetParamBool(1221)

fnsUrl                    := fptr.GetParamString(1060)
organizationVATIN         := fptr.GetParamString(1018)
organizationName          := fptr.GetParamString(1048)
organizationEmail         := fptr.GetParamString(1117)
paymentsAddress           := fptr.GetParamString(1187)
registrationNumber        := fptr.GetParamString(1037)
machineNumber             := fptr.GetParamString(1036)
ofdVATIN                  := fptr.GetParamString(1017)
ofdName                   := fptr.GetParamString(1046)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_REG_INFO);
Fptr.fnQueryData();

taxationTypes             = fptr.getParamInt(1062);
agentSign                 = fptr.getParamInt(1057);
ffdVersion                = fptr.getParamInt(1209);

autoModeSign              = fptr.getParamBool(1001);
offlineModeSign           = fptr.getParamBool(1002);
encryptionSign            = fptr.getParamBool(1056);
internetSign              = fptr.getParamBool(1108);
serviceSign               = fptr.getParamBool(1109);
bsoSign                   = fptr.getParamBool(1110);
lotterySign               = fptr.getParamBool(1126);
gamblingSign              = fptr.getParamBool(1193);
exciseSign                = fptr.getParamBool(1207);
machineInstallationSign   = fptr.getParamBool(1221);

fnsUrl                    = fptr.getParamString(1060);
organizationVATIN         = fptr.getParamString(1018);
organizationName          = fptr.getParamString(1048);
organizationEmail         = fptr.getParamString(1117);
paymentsAddress           = fptr.getParamString(1187);
registrationNumber        = fptr.getParamString(1037);
machineNumber             = fptr.getParamString(1036);
ofdVATIN                  = fptr.getParamString(1017);
ofdName                   = fptr.getParamString(1046);

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
1060 Адрес сайта ФНС string
1009 Адрес расчетов string
1018 ИНН организации string
1048 Название организации string
1062 Системы налогообложения int
1117 E-mail организации string
1057 Признак агента int
1187 Адрес места расчетов string
1037 Регистрационный номер устройства string
1209 Версия ФФД int
1001 Признак автоматического режима bool
1036 Номер автомата string
1002 Признак автономного режима bool
1056 Признак шифрования bool
1108 Признак ККТ для расчетов в сети Интернет bool
1109 Признак расчетов за услуги bool
1110 Признак АС БСО bool
1126 Признак проведения лотерей bool
1193 Признак проведения азартных игр bool
1207 Признак подакцизного товара bool
1221 Признак установки принтера в автомате bool
1017 ИНН ОФД string
1046 Название ОФД string

Значение реквизита 1062 (системы налогообложения) - битовое поле, значениями которого являются одно или несколько из следующих значений:

Значение реквизита 1057 (признак агента) - битовое поле, значениями которого являются одно или несколько из следующих значений:

Реквизит 1209 (версия ФФД) может принимать следующие значения:

Статус информационного обмена

Запрос статуса информационного обмена

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_OFD_EXCHANGE_STATUS);
libfptr_fn_query_data(fptr);

int exchangeStatus      = libfptr_get_param_int(fptr, LIBFPTR_PARAM_OFD_EXCHANGE_STATUS);
int unsentCount         = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENTS_COUNT);
int firstUnsentNumber   = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER);
int ofdMessageRead      = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_OFD_MESSAGE_READ) != 0);
int year, month, day, hour, minute, second;
libfptr_get_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, &year, &month, &day, &hour, &minute, &second);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS)
fptr.fnQueryData()

exchangeStatus      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_OFD_EXCHANGE_STATUS)
unsentCount         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT)
firstUnsentNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)
ofdMessageRead      = fptr.getParamBool(IFptr.LIBFPTR_PARAM_OFD_MESSAGE_READ)
dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS);
fptr.fnQueryData();

long exchangeStatus      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_OFD_EXCHANGE_STATUS);
long unsentCount         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
long firstUnsentNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
boolean ofdMessageRead   = fptr.getParamBool(IFptr.LIBFPTR_PARAM_OFD_MESSAGE_READ);
Date dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS);
fptr.fnQueryData();

long exchangeStatus      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_OFD_EXCHANGE_STATUS);
long unsentCount         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
long firstUnsentNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
boolean ofdMessageRead   = fptr.getParamBool(IFptr.LIBFPTR_PARAM_OFD_MESSAGE_READ);
Date dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_OFD_EXCHANGE_STATUS];
[fptr fnQueryData];

uint exchangeStatus     = [fptr getParamInt:LIBFPTR_PARAM_OFD_EXCHANGE_STATUS];
uint unsentCount        = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENTS_COUNT];
uint firstUnsentNumber  = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENT_NUMBER];
bool ofdMessageRead     = [fptr getParamBool:LIBFPTR_PARAM_OFD_MESSAGE_READ];
NSDate *dateTime        = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS);
fptr.fnQueryData();

uint exchangeStatus     = fptr.getParamInt(Constants.LIBFPTR_PARAM_OFD_EXCHANGE_STATUS);
uint unsentCount        = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENTS_COUNT);
uint firstUnsentNumber  = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER);
bool ofdMessageRead     = fptr.getParamBool(Constants.LIBFPTR_PARAM_OFD_MESSAGE_READ);
DateTime dateTime       = fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);
var
    exchangeStatus:     Longint;
    unsentCount:        Longint;
    firstUnsentNumber:  Longint;
    ofdMessageRead:     LongBool;
    dateTime:           TDateTime;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS);
    fptr.fnQueryData;

    exchangeStatus      := fptr.getParamInt(fptr.LIBFPTR_PARAM_OFD_EXCHANGE_STATUS);
    unsentCount         := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
    firstUnsentNumber   := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
    ofdMessageRead      := fptr.getParamBool(fptr.LIBFPTR_PARAM_OFD_MESSAGE_READ);
    dateTime            := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS)
fptr.FnQueryData()

exchangeStatus     := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_OFD_EXCHANGE_STATUS)
unsentCount        := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENTS_COUNT)
firstUnsentNumber  := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER)
ofdMessageRead     := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_OFD_MESSAGE_READ)
dateTime           := fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_DATE_TIME)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS);
Fptr.fnQueryData();

exchangeStatus     = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_OFD_EXCHANGE_STATUS);
unsentCount        = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
firstUnsentNumber  = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
ofdMessageRead     = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_OFD_MESSAGE_READ);
dateTime           = Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME);

Для запроса cтатуса информационного обмена с ОФД необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_OFD_EXCHANGE_STATUS.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_OFD_EXCHANGE_STATUS Статус информационного обмена int
Битовое поле:
  • бит 0 - транспортное соединение установлено
  • бит 1 – есть сообщение для передачи в ОФД
  • бит 2 – ожидание ответного сообщения (квитанции) от ОФД
  • бит 3 – есть команда от ОФД
  • бит 4 – изменились настройки соединения с ОФД
  • бит 5 – ожидание ответа на команду от ОФД
LIBFPTR_PARAM_DOCUMENTS_COUNT Количество неотправленных документов int
LIBFPTR_PARAM_DOCUMENT_NUMBER Номер первого неотправленного документа int
LIBFPTR_PARAM_DATE_TIME Дата и время первого неотправленного документа datetime
LIBFPTR_PARAM_OFD_MESSAGE_READ Флаг наличия сообщения для ОФД bool

Информация о ФН

Запрос информации и статуса ФН

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_FN_INFO);
libfptr_fn_query_data(fptr);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, &str[0], str.size());
}
std::wstring fnSerial = std::wstring(&str[0]);

size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_FN_VERSION, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_FN_VERSION, &str[0], str.size());
}
std::wstring fnVersion = std::wstring(&str[0]);

int fnType              = libfptr_get_param_int(fptr, LIBFPTR_PARAM_FN_TYPE);
int fnState             = libfptr_get_param_int(fptr, LIBFPTR_PARAM_FN_STATE);
int fnFlags             = libfptr_get_param_int(fptr, LIBFPTR_PARAM_FN_FLAGS);

bool fnNeedReplacement   = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_FN_NEED_REPLACEMENT) != 0);
bool fnExhausted         = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_FN_RESOURCE_EXHAUSTED) != 0);
bool fnMemoryOverflow    = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_FN_MEMORY_OVERFLOW) != 0);
bool fnOfdTimeout        = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_FN_OFD_TIMEOUT) != 0);
bool fnCriticalError     = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_FN_CRITICAL_ERROR) != 0);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_FN_INFO)
fptr.fnQueryData()

fnSerial            = fptr.getParamString(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER)
fnVersion           = fptr.getParamString(IFptr.LIBFPTR_PARAM_FN_VERSION)

fnType              = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_TYPE)
fnState             = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_STATE)
fnFlags             = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_FLAGS)

fnNeedReplacement   = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_NEED_REPLACEMENT)
fnExhausted         = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_RESOURCE_EXHAUSTED)
fnMemoryOverflow    = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_MEMORY_OVERFLOW)
fnOfdTimeout        = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_OFD_TIMEOUT)
fnCriticalError     = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_CRITICAL_ERROR)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_FN_INFO);
fptr.fnQueryData();

String fnSerial             = fptr.getParamString(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER);
String fnVersion            = fptr.getParamString(IFptr.LIBFPTR_PARAM_FN_VERSION);

long fnType                 = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_TYPE);
long fnState                = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_STATE);
long fnFlags                = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_FLAGS);

boolean fnNeedReplacement   = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_NEED_REPLACEMENT);
boolean fnExhausted         = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_RESOURCE_EXHAUSTED);
boolean fnMemoryOverflow    = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_MEMORY_OVERFLOW);
boolean fnOfdTimeout        = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_OFD_TIMEOUT);
boolean fnCriticalError     = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_CRITICAL_ERROR);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_FN_INFO);
fptr.fnQueryData();

String fnSerial             = fptr.getParamString(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER);
String fnVersion            = fptr.getParamString(IFptr.LIBFPTR_PARAM_FN_VERSION);

long fnType                 = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_TYPE);
long fnState                = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_STATE);
long fnFlags                = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_FLAGS);

boolean fnNeedReplacement   = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_NEED_REPLACEMENT);
boolean fnExhausted         = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_RESOURCE_EXHAUSTED);
boolean fnMemoryOverflow    = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_MEMORY_OVERFLOW);
boolean fnOfdTimeout        = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_OFD_TIMEOUT);
boolean fnCriticalError     = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FN_CRITICAL_ERROR);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_FN_INFO];
[fptr fnQueryData];

NSString *fnSerial          = [fptr getParamString:LIBFPTR_PARAM_SERIAL_NUMBER];
NSString *fnVersion         = [fptr getParamString:LIBFPTR_PARAM_FN_VERSION];

uint fnType                 = [fptr getParamInt:LIBFPTR_PARAM_FN_TYPE];
uint fnState                = [fptr getParamInt:LIBFPTR_PARAM_FN_STATE];
uint fnFlags                = [fptr getParamInt:LIBFPTR_PARAM_FN_FLAGS];

bool fnNeedReplacement      = [fptr getParamBool:LIBFPTR_PARAM_FN_NEED_REPLACEMENT];
bool fnExhausted            = [fptr getParamBool:LIBFPTR_PARAM_FN_RESOURCE_EXHAUSTED];
bool fnMemoryOverflow       = [fptr getParamBool:LIBFPTR_PARAM_FN_MEMORY_OVERFLOW];
bool fnOfdTimeout           = [fptr getParamBool:LIBFPTR_PARAM_FN_OFD_TIMEOUT];
bool fnCriticalError        = [fptr getParamBool:LIBFPTR_PARAM_FN_CRITICAL_ERROR];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_FN_INFO);
fptr.fnQueryData();

String fnSerial          = fptr.getParamString(Constants.LIBFPTR_PARAM_SERIAL_NUMBER);
String fnVersion         = fptr.getParamString(Constants.LIBFPTR_PARAM_FN_VERSION);

uint fnType              = fptr.getParamInt(Constants.LIBFPTR_PARAM_FN_TYPE);
uint fnState             = fptr.getParamInt(Constants.LIBFPTR_PARAM_FN_STATE);
uint fnFlags             = fptr.getParamInt(Constants.LIBFPTR_PARAM_FN_FLAGS);

bool fnNeedReplacement   = fptr.getParamBool(Constants.LIBFPTR_PARAM_FN_NEED_REPLACEMENT);
bool fnExhausted         = fptr.getParamBool(Constants.LIBFPTR_PARAM_FN_RESOURCE_EXHAUSTED);
bool fnMemoryOverflow    = fptr.getParamBool(Constants.LIBFPTR_PARAM_FN_MEMORY_OVERFLOW);
bool fnOfdTimeout        = fptr.getParamBool(Constants.LIBFPTR_PARAM_FN_OFD_TIMEOUT);
bool fnCriticalError     = fptr.getParamBool(Constants.LIBFPTR_PARAM_FN_CRITICAL_ERROR);
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_FN_INFO)
fptr.FnQueryData()

fnSerial            := fptr.getParamString(fptr10.LIBFPTR_PARAM_SERIAL_NUMBER)
fnVersion           := fptr.getParamString(fptr10.LIBFPTR_PARAM_FN_VERSION)

fnType              := fptr.getParamInt(fptr10.LIBFPTR_PARAM_FN_TYPE)
fnState             := fptr.getParamInt(fptr10.LIBFPTR_PARAM_FN_STATE)
fnFlags             := fptr.getParamInt(fptr10.LIBFPTR_PARAM_FN_FLAGS)

fnNeedReplacement   := fptr.getParamBool(fptr10.LIBFPTR_PARAM_FN_NEED_REPLACEMENT)
fnExhausted         := fptr.getParamBool(fptr10.LIBFPTR_PARAM_FN_RESOURCE_EXHAUSTED)
fnMemoryOverflow    := fptr.getParamBool(fptr10.LIBFPTR_PARAM_FN_MEMORY_OVERFLOW)
fnOfdTimeout        := fptr.getParamBool(fptr10.LIBFPTR_PARAM_FN_OFD_TIMEOUT)
fnCriticalError     := fptr.getParamBool(fptr10.LIBFPTR_PARAM_FN_CRITICAL_ERROR)
var
    fnSerial            String;
    fnVersion:          String;
    fnType:             Longint;
    fnState:            Longint;
    fnFlags:            Longint;
    fnNeedReplacement:  LongBool;
    fnExhausted         LongBool;
    fnMemoryOverflow    LongBool;
    fnOfdTimeout        LongBool;
    fnCriticalError     LongBool;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_FN_INFO);
    fptr.fnQueryData;

    fnSerial            := fptr.getParamString(fptr.LIBFPTR_PARAM_SERIAL_NUMBER);
    fnVersion           := fptr.getParamString(fptr.LIBFPTR_PARAM_FN_VERSION);

    fnType              := fptr.getParamInt(fptr.LIBFPTR_PARAM_FN_TYPE);
    fnState             := fptr.getParamInt(fptr.LIBFPTR_PARAM_FN_STATE);
    fnFlags             := fptr.getParamInt(fptr.LIBFPTR_PARAM_FN_FLAGS);

    fnNeedReplacement   := fptr.getParamBool(fptr.LIBFPTR_PARAM_FN_NEED_REPLACEMENT);
    fnExhausted         := fptr.getParamBool(fptr.LIBFPTR_PARAM_FN_RESOURCE_EXHAUSTED);
    fnMemoryOverflow    := fptr.getParamBool(fptr.LIBFPTR_PARAM_FN_MEMORY_OVERFLOW);
    fnOfdTimeout        := fptr.getParamBool(fptr.LIBFPTR_PARAM_FN_OFD_TIMEOUT);
    fnCriticalError     := fptr.getParamBool(fptr.LIBFPTR_PARAM_FN_CRITICAL_ERROR);
end;
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_FN_INFO);
Fptr.fnQueryData();

fnSerial            = Fptr.getParamString(Fptr.LIBFPTR_PARAM_SERIAL_NUMBER);
fnSerial            = Fptr.getParamString(Fptr.LIBFPTR_PARAM_SERIAL_NUMBER);
fnVersion           = Fptr.getParamString(Fptr.LIBFPTR_PARAM_FN_VERSION);

fnType              = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_FN_TYPE);
fnState             = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_FN_STATE);
fnFlags             = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_FN_FLAGS);

fnNeedReplacement   = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_FN_NEED_REPLACEMENT);
fnExhausted         = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_FN_RESOURCE_EXHAUSTED);
fnMemoryOverflow    = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_FN_MEMORY_OVERFLOW);
fnOfdTimeout        = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_FN_OFD_TIMEOUT);
fnCriticalError     = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_FN_CRITICAL_ERROR);

Для запроса информации и статуса ФН необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_FN_INFO.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_SERIAL_NUMBER Серийный номер ФН string
LIBFPTR_PARAM_FN_VERSION Версия ФН string
LIBFPTR_PARAM_FN_TYPE Тип ФН int
LIBFPTR_PARAM_FN_STATE Состояние ФН int
LIBFPTR_PARAM_FN_FLAGS Нерасшифрованный байт флагов ФН int
LIBFPTR_PARAM_FN_NEED_REPLACEMENT Требуется срочная замена ФН bool
LIBFPTR_PARAM_FN_RESOURCE_EXHAUSTED Исчерпан ресурс ФН bool
LIBFPTR_PARAM_FN_MEMORY_OVERFLOW Память ФН переполнена bool
LIBFPTR_PARAM_FN_OFD_TIMEOUT Превышено время ожидания ответа от ОФД bool
LIBFPTR_PARAM_FN_CRITICAL_ERROR Критическая ошибка ФН bool

Тип ФН (LIBFPTR_PARAM_FN_TYPE) может принимать следующие значения:

Состояние ФН (LIBFPTR_PARAM_FN_STATE) может принимать следующие значения:

Информация о последней регистрации / перерегистрации

Запрос информации о последней регистрации / перерегистрации

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_LAST_REGISTRATION);
libfptr_fn_query_data(fptr);

int documentNumber      = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER);
int registrationsCount  = libfptr_get_param_int(fptr, LIBFPTR_PARAM_REGISTRATIONS_COUNT);
int year, month, day, hour, minute, second;
libfptr_get_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, &year, &month, &day, &hour, &minute, &second);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_LAST_REGISTRATION)
fptr.fnQueryData()

documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)
registrationsCount  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_REGISTRATIONS_COUNT)
dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_LAST_REGISTRATION);
fptr.fnQueryData();

long documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
long registrationsCount  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_REGISTRATIONS_COUNT);
Date dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_LAST_REGISTRATION);
fptr.fnQueryData();

long documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
long registrationsCount  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_REGISTRATIONS_COUNT);
Date dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_LAST_REGISTRATION];
[fptr fnQueryData];

uint documentNumber      = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENT_NUMBER];
uint registrationsCount  = [fptr getParamInt:LIBFPTR_PARAM_REGISTRATIONS_COUNT];
NSDate *dateTime         = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_LAST_REGISTRATION);
fptr.fnQueryData();

uint documentNumber      = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER);
uint registrationsCount  = fptr.getParamInt(Constants.LIBFPTR_PARAM_REGISTRATIONS_COUNT);
DateTime dateTime        = fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);
var
    documentNumber:         Longint;
    registrationsCount:     Longint;
    dateTime:               TDateTime;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_LAST_REGISTRATION);
    fptr.fnQueryData;

    documentNumber      := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
    registrationsCount  := fptr.getParamInt(fptr.LIBFPTR_PARAM_REGISTRATIONS_COUNT);
    dateTime            := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_LAST_REGISTRATION)
fptr.FnQueryData()

documentNumber      := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER)
registrationsCount  := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_REGISTRATIONS_COUNT)
dateTime            := fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_DATE_TIME)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_LAST_REGISTRATION);
Fptr.fnQueryData();

documentNumber      = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
registrationsCount  = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_REGISTRATIONS_COUNT);
dateTime            = Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME);

Для запроса информации о последней регистрации / перерегистрации необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_LAST_REGISTRATION.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DOCUMENT_NUMBER Номер документа int
LIBFPTR_PARAM_REGISTRATIONS_COUNT Номер регистрации / перерегистрации int
LIBFPTR_PARAM_DATE_TIME Дата и время документа datetime

Информация о последнем чеке

Запрос информации о последнем чеке

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_LAST_RECEIPT);
libfptr_fn_query_data(fptr);

int documentNumber      = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER);
int receiptType         = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE);

double receiptSum       = libfptr_get_param_double(fptr, LIBFPTR_PARAM_RECEIPT_SUM);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_FISCAL_SIGN, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_FISCAL_SIGN, &str[0], str.size());
}
std::wstring fiscalSign = std::wstring(&str[0]);

int year, month, day, hour, minute, second;
libfptr_get_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, &year, &month, &day, &hour, &minute, &second);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_LAST_RECEIPT)
fptr.fnQueryData()

documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)
receiptType         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE)

receiptSum          = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPT_SUM)

fiscalSign          = fptr.getParamString(IFptr.LIBFPTR_PARAM_FISCAL_SIGN)

dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_LAST_RECEIPT);
fptr.fnQueryData();

long documentNumber     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
long receiptType        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE);

double receiptSum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPT_SUM);

String fiscalSign       = fptr.getParamString(IFptr.LIBFPTR_PARAM_FISCAL_SIGN);

Date dateTime           = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_LAST_RECEIPT);
fptr.fnQueryData();

long documentNumber     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
long receiptType        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE);

double receiptSum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPT_SUM);

String fiscalSign       = fptr.getParamString(IFptr.LIBFPTR_PARAM_FISCAL_SIGN);

Date dateTime           = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_LAST_RECEIPT];
[fptr fnQueryData];

uint documentNumber     = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENT_NUMBER];
uint receiptType        = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_TYPE];

double receiptSum       = [fptr getParamDouble:LIBFPTR_PARAM_RECEIPT_SUM];

NSString *fiscalSign    = [fptr getParamString:LIBFPTR_PARAM_FISCAL_SIGN];

NSDate *dateTime        = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_LAST_RECEIPT);
fptr.fnQueryData();

uint documentNumber     = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER);
uint receiptType        = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_TYPE);

double receiptSum       = fptr.getParamDouble(Constants.LIBFPTR_PARAM_RECEIPT_SUM);

String fiscalSign       = fptr.getParamString(Constants.LIBFPTR_PARAM_FISCAL_SIGN);

DateTime dateTime       = fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);
var
    documentNumber: Longint;
    receiptType:    Longint;
    receiptSum:     Double;
    fiscalSign:     String;
    dateTime:       TDateTime;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_LAST_RECEIPT);
    fptr.fnQueryData;

    documentNumber  := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
    receiptType     := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);

    receiptSum      := fptr.getParamDouble(fptr.LIBFPTR_PARAM_RECEIPT_SUM);

    fiscalSign      := fptr.getParamString(fptr.LIBFPTR_PARAM_FISCAL_SIGN);

    dateTime        := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_LAST_RECEIPT)
fptr.FnQueryData()

documentNumber     := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER)
receiptType        := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE)

receiptSum         := fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_RECEIPT_SUM)

fiscalSign         := fptr.GetParamString(fptr10.LIBFPTR_PARAM_FISCAL_SIGN)

dateTime           := fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_DATE_TIME)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_LAST_RECEIPT);
Fptr.fnQueryData();

documentNumber     = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
receiptType        = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE);

receiptSum         = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_RECEIPT_SUM);

fiscalSign         = Fptr.getParamString(Fptr.LIBFPTR_PARAM_FISCAL_SIGN);

dateTime           = Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME);

Для запроса информации о последнем чеке в ФН необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_LAST_RECEIPT.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DOCUMENT_NUMBER Номер документа int
LIBFPTR_PARAM_RECEIPT_TYPE Тип чека int
LIBFPTR_PARAM_RECEIPT_SUM Сумма чека double
LIBFPTR_PARAM_FISCAL_SIGN Фискальный признак документа string
LIBFPTR_PARAM_DATE_TIME Дата и время документа datetime

Тип чека (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Информация о последнем документе

Запрос информации о последнем фискальном документе

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_LAST_DOCUMENT);
libfptr_fn_query_data(fptr);

int documentNumber      = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_FISCAL_SIGN, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_FISCAL_SIGN, &str[0], str.size());
}
std::wstring fiscalSign = std::wstring(&str[0]);

int year, month, day, hour, minute, second;
libfptr_get_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, &year, &month, &day, &hour, &minute, &second);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_LAST_DOCUMENT)
fptr.fnQueryData()

documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)

fiscalSign          = fptr.getParamString(IFptr.LIBFPTR_PARAM_FISCAL_SIGN)

dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_LAST_DOCUMENT);
fptr.fnQueryData();

long documentNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);

String fiscalSign   = fptr.getParamString(IFptr.LIBFPTR_PARAM_FISCAL_SIGN);

Date dateTime       = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_LAST_DOCUMENT);
fptr.fnQueryData();

long documentNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);

String fiscalSign   = fptr.getParamString(IFptr.LIBFPTR_PARAM_FISCAL_SIGN);

Date dateTime       = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_LAST_DOCUMENT];
[fptr fnQueryData];

uint documentNumber     = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENT_NUMBER];

NSString *fiscalSign    = [fptr getParamString:LIBFPTR_PARAM_FISCAL_SIGN];

NSDate *dateTime        = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_LAST_DOCUMENT);
fptr.fnQueryData();

uint documentNumber = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER);

String fiscalSign   = fptr.getParamString(Constants.LIBFPTR_PARAM_FISCAL_SIGN);

DateTime dateTime   = fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);
var
    documentNumber: Longint;
    fiscalSign:     String;
    dateTime:       TDateTime;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_LAST_DOCUMENT);
    fptr.fnQueryData;

    documentNumber  := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);

    fiscalSign      := fptr.getParamString(fptr.LIBFPTR_PARAM_FISCAL_SIGN);

    dateTime        := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);
end;
fptr.SetParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_LAST_DOCUMENT)
fptr.FnQueryData()

documentNumber := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER)

fiscalSign     := fptr.GetParamString(fptr10.LIBFPTR_PARAM_FISCAL_SIGN)

dateTime       := fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_DATE_TIME)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_LAST_DOCUMENT);
Fptr.fnQueryData();

documentNumber     = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);

fiscalSign         = Fptr.getParamString(Fptr.LIBFPTR_PARAM_FISCAL_SIGN);

dateTime           = Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME);

Для запроса информации о последнем чеке в ФН необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_LAST_DOCUMENT.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DOCUMENT_NUMBER Номер документа int
LIBFPTR_PARAM_FISCAL_SIGN Фискальный признак документа string
LIBFPTR_PARAM_DATE_TIME Дата и время документа datetime

Информация о смене

Запрос информации о текущей смене в ФН

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_SHIFT);
libfptr_fn_query_data(fptr);

int receiptNumber   = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_NUMBER);
int shiftNumber     = libfptr_get_param_int(fptr, LIBFPTR_PARAM_SHIFT_NUMBER);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_SHIFT)
fptr.fnQueryData()

receiptNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_NUMBER)
shiftNumber        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_SHIFT);
fptr.fnQueryData();

long receiptNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_NUMBER);
long shiftNumber        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_SHIFT);
fptr.fnQueryData();

long receiptNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_NUMBER);
long shiftNumber        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_SHIFT];
[fptr fnQueryData];

uint receiptNumber     = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_NUMBER];
uint shiftNumber       = [fptr getParamInt:LIBFPTR_PARAM_SHIFT_NUMBER];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_SHIFT);
fptr.fnQueryData();

uint receiptNumber     = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_NUMBER);
uint shiftNumber       = fptr.getParamInt(Constants.LIBFPTR_PARAM_SHIFT_NUMBER);
var
    receiptNumber:  Longint;
    shiftNumber:    Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_SHIFT);
    fptr.fnQueryData;

    receiptNumber   := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_NUMBER);
    shiftNumber     := fptr.getParamInt(fptr.LIBFPTR_PARAM_SHIFT_NUMBER);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_SHIFT)
fptr.FnQueryData()

receiptNumber     := fptr.getParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_NUMBER)
shiftNumber       := fptr.getParamInt(fptr10.LIBFPTR_PARAM_SHIFT_NUMBER)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_SHIFT);
Fptr.fnQueryData();

receiptNumber     = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_NUMBER);
shiftNumber       = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_SHIFT_NUMBER);

Для запроса информации о смене в ФН необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_SHIFT.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_RECEIPT_NUMBER Количество чеков за смену int
LIBFPTR_PARAM_SHIFT_NUMBER Номер смены int

Количество ФД за смену

Запрос количества ФД за смену

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_DOCUMENTS_COUNT_IN_SHIFT);
libfptr_fn_query_data(fptr);

int documentsCount = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENTS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_DOCUMENTS_COUNT_IN_SHIFT)
fptr.fnQueryData()

documentsCount = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_DOCUMENTS_COUNT_IN_SHIFT);
fptr.fnQueryData();

long documentsCount = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_DOCUMENTS_COUNT_IN_SHIFT);
fptr.fnQueryData();

long documentsCount = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_DOCUMENTS_COUNT_IN_SHIFT];
[fptr fnQueryData];

uint documentsCount = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENTS_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_DOCUMENTS_COUNT_IN_SHIFT);
fptr.fnQueryData();

uint documentsCount = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENTS_COUNT);
var
    documentsCount: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_DOCUMENTS_COUNT_IN_SHIFT);
    fptr.fnQueryData;

    documentsCount := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_DOCUMENTS_COUNT_IN_SHIFT)
fptr.FnQueryData()

documentsCount := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENTS_COUNT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_DOCUMENTS_COUNT_IN_SHIFT);
Fptr.fnQueryData();

documentsCount = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);

Для запроса количества фискальных документов за смену необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_DOCUMENTS_COUNT_IN_SHIFT.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DOCUMENTS_COUNT Количество ФД за смену int

Версии ФФД

Запрос версий ФФД

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_FFD_VERSIONS);
libfptr_fn_query_data(fptr);

int deviceFfdVersion   = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DEVICE_FFD_VERSION);
int fnFfdVersion       = libfptr_get_param_int(fptr, LIBFPTR_PARAM_FN_FFD_VERSION);
int maxFnFfdVersion    = libfptr_get_param_int(fptr, LIBFPTR_PARAM_FN_MAX_FFD_VERSION);
int ffdVersion         = libfptr_get_param_int(fptr, LIBFPTR_PARAM_FFD_VERSION);
int maxFfdVersion      = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DEVICE_MAX_FFD_VERSION);
int minFfdVersion      = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DEVICE_MIN_FFD_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_FFD_VERSIONS)
fptr.fnQueryData()

deviceFfdVersion    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DEVICE_FFD_VERSION)
fnFfdVersion        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_FFD_VERSION)
maxFnFfdVersion     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_MAX_FFD_VERSION)
ffdVersion          = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FFD_VERSION)
maxFfdVersion       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DEVICE_MAX_FFD_VERSION)
minFfdVersion       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DEVICE_MIN_FFD_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_FFD_VERSIONS);
fptr.fnQueryData();

long deviceFfdVersion    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DEVICE_FFD_VERSION);
long fnFfdVersion        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_FFD_VERSION);
long maxFnFfdVersion     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_MAX_FFD_VERSION);
long ffdVersion          = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FFD_VERSION);
long maxFfdVersion       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DEVICE_MAX_FFD_VERSION);
long minFfdVersion       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DEVICE_MIN_FFD_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_FFD_VERSIONS);
fptr.fnQueryData();

long deviceFfdVersion    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DEVICE_FFD_VERSION);
long fnFfdVersion        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_FFD_VERSION);
long maxFnFfdVersion     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_MAX_FFD_VERSION);
long ffdVersion          = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FFD_VERSION);
long maxFfdVersion       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DEVICE_MAX_FFD_VERSION);
long minFfdVersion       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DEVICE_MIN_FFD_VERSION);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_FFD_VERSIONS];
[fptr fnQueryData];

uint deviceFfdVersion    = [fptr getParamInt:LIBFPTR_PARAM_DEVICE_FFD_VERSION];
uint fnFfdVersion        = [fptr getParamInt:LIBFPTR_PARAM_FN_FFD_VERSION];
uint maxFnFfdVersion     = [fptr getParamInt:LIBFPTR_PARAM_FN_MAX_FFD_VERSION];
uint ffdVersion          = [fptr getParamInt:LIBFPTR_PARAM_FFD_VERSION];
uint maxFfdVersion       = [fptr getParamInt:LIBFPTR_PARAM_DEVICE_MAX_FFD_VERSION];
uint minFfdVersion       = [fptr getParamInt:LIBFPTR_PARAM_DEVICE_MIN_FFD_VERSION];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_FFD_VERSIONS);
fptr.fnQueryData();

uint deviceFfdVersion    = fptr.getParamInt(Constants.LIBFPTR_PARAM_DEVICE_FFD_VERSION);
uint fnFfdVersion        = fptr.getParamInt(Constants.LIBFPTR_PARAM_FN_FFD_VERSION);
uint maxFnFfdVersion     = fptr.getParamInt(Constants.LIBFPTR_PARAM_FN_MAX_FFD_VERSION);
uint ffdVersion          = fptr.getParamInt(Constants.LIBFPTR_PARAM_FFD_VERSION);
uint maxFfdVersion       = fptr.getParamInt(Constants.LIBFPTR_PARAM_DEVICE_MAX_FFD_VERSION);
uint minFfdVersion       = fptr.getParamInt(Constants.LIBFPTR_PARAM_DEVICE_MIN_FFD_VERSION);
var
    deviceFfdVersion:   Longint;
    fnFfdVersion:       Longint;
    maxFnFfdVersion:    Longint;
    ffdVersion:         Longint;
    maxFfdVersion:      Longint;
    minFfdVersion:      Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_FFD_VERSIONS);
    fptr.fnQueryData;

    deviceFfdVersion    := fptr.getParamInt(fptr.LIBFPTR_PARAM_DEVICE_FFD_VERSION);
    fnFfdVersion        := fptr.getParamInt(fptr.LIBFPTR_PARAM_FN_FFD_VERSION);
    maxFnFfdVersion     := fptr.getParamInt(fptr.LIBFPTR_PARAM_FN_MAX_FFD_VERSION);
    ffdVersion          := fptr.getParamInt(fptr.LIBFPTR_PARAM_FFD_VERSION);
    maxFfdVersion       := fptr.getParamInt(fptr.LIBFPTR_PARAM_DEVICE_MAX_FFD_VERSION);
    minFfdVersion       := fptr.getParamInt(fptr.LIBFPTR_PARAM_DEVICE_MIN_FFD_VERSION);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_FFD_VERSIONS)
fptr.FnQueryData()

deviceFfdVersion    := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DEVICE_FFD_VERSION)
fnFfdVersion        := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_FN_FFD_VERSION)
maxFnFfdVersion     := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_FN_MAX_FFD_VERSION)
ffdVersion          := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_FFD_VERSION)
maxFfdVersion       := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DEVICE_MAX_FFD_VERSION)
minFfdVersion       := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DEVICE_MIN_FFD_VERSION)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_FFD_VERSIONS);
Fptr.fnQueryData();

deviceFfdVersion    = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DEVICE_FFD_VERSION);
fnFfdVersion        = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_FN_FFD_VERSION);
maxFnFfdVersion     = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_FN_MAX_FFD_VERSION);
ffdVersion          = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_FFD_VERSION);
maxFfdVersion       = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DEVICE_MAX_FFD_VERSION);
minFfdVersion       = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DEVICE_MIN_FFD_VERSION);

Для запроса информации о версиях ФФД необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_FFD_VERSIONS.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DEVICE_FFD_VERSION Версия ФФД ККТ int
LIBFPTR_PARAM_FN_FFD_VERSION Версия ФФД ФН int
LIBFPTR_PARAM_FN_MAX_FFD_VERSION Максимальная версия ФФД ФН int
LIBFPTR_PARAM_FFD_VERSION Версия ФФД int
LIBFPTR_PARAM_DEVICE_MAX_FFD_VERSION Максимальная версия ФФД ККТ int
LIBFPTR_PARAM_DEVICE_MIN_FFD_VERSION Минимальная версия ФФД ККТ int

Указанные выше версии ФФД принимают следующие значения:

Срок действия ФН

Запрос срока действия ФН

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_VALIDITY);
libfptr_fn_query_data(fptr);

int registrationsRemain = libfptr_get_param_int(fptr, LIBFPTR_PARAM_REGISTRATIONS_REMAIN);
int registrationsCount  = libfptr_get_param_int(fptr, LIBFPTR_PARAM_REGISTRATIONS_COUNT);
int year, month, day, hour, minute, second;
libfptr_get_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, &year, &month, &day, &hour, &minute, &second);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_VALIDITY)
fptr.fnQueryData()

registrationsRemain = fptr.getParamInt(IFptr.LIBFPTR_PARAM_REGISTRATIONS_REMAIN)
registrationsCount  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_REGISTRATIONS_COUNT)
dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_VALIDITY);
fptr.fnQueryData();

long registrationsRemain = fptr.getParamInt(IFptr.LIBFPTR_PARAM_REGISTRATIONS_REMAIN);
long registrationsCount  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_REGISTRATIONS_COUNT);
Date dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_VALIDITY);
fptr.fnQueryData();

long registrationsRemain = fptr.getParamInt(IFptr.LIBFPTR_PARAM_REGISTRATIONS_REMAIN);
long registrationsCount  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_REGISTRATIONS_COUNT);
Date dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_VALIDITY];
[fptr fnQueryData];

uint registrationsRemain    = [fptr getParamInt:LIBFPTR_PARAM_REGISTRATIONS_REMAIN];
uint registrationsCount     = [fptr getParamInt:LIBFPTR_PARAM_REGISTRATIONS_COUNT];
NSDate *dateTime            = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_VALIDITY);
fptr.fnQueryData();

uint registrationsRemain = fptr.getParamInt(Constants.LIBFPTR_PARAM_REGISTRATIONS_REMAIN);
uint registrationsCount  = fptr.getParamInt(Constants.LIBFPTR_PARAM_REGISTRATIONS_COUNT);
DateTime dateTime        = fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);
var
    registrationsRemain:    Longint;
    registrationsCount:     Longint;
    dateTime:               TDateTime;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_VALIDITY);
    fptr.fnQueryData;

    registrationsRemain := fptr.getParamInt(fptr.LIBFPTR_PARAM_REGISTRATIONS_REMAIN);
    registrationsCount  := fptr.getParamInt(fptr.LIBFPTR_PARAM_REGISTRATIONS_COUNT);
    dateTime:           := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_VALIDITY)
fptr.FnQueryData()

registrationsRemain := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_REGISTRATIONS_REMAIN)
registrationsCount  := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_REGISTRATIONS_COUNT)
dateTime            := fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_DATE_TIME)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_VALIDITY);
Fptr.fnQueryData();

registrationsRemain = Fptr.getParamInt(Constants.LIBFPTR_PARAM_REGISTRATIONS_REMAIN);
registrationsCount  = Fptr.getParamInt(Constants.LIBFPTR_PARAM_REGISTRATIONS_COUNT);
dateTime            = Fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);

Для запроса срока действия ФН необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_VALIDITY.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DATE_TIME Срок действия ФН datetime
LIBFPTR_PARAM_REGISTRATIONS_COUNT Сделано перерегистраций int
LIBFPTR_PARAM_REGISTRATIONS_REMAIN Осталось перерегистраций int

Оставшиеся дни работы ФН

Запрос оставшихся дней работы ФН

int year, month, day, hour, minute, second;

libfptr_set_param_int(fptr, LIBFPTR_PARAM_DATA_TYPE, LIBFPTR_DT_DATE_TIME);
libfptr_query_data(fptr);
libfptr_get_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, &year, &month, &day, &hour, &minute, &second);

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_VALIDITY_DAYS);
libfptr_set_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, year, month, day, hour, minute, second);
libfptr_fn_query_data(fptr);
int daysRemain = libfptr_get_param_int(fptr, LIBFPTR_PARAM_FN_DAYS_REMAIN);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_DATE_TIME)
fptr.queryData()
dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)

fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_VALIDITY_DAYS)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATE_TIME, dateTime)
fptr.fnQueryData()
daysRemain = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_DAYS_REMAIN)
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_DATE_TIME);
fptr.queryData();
Date dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);

fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_VALIDITY_DAYS);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATE_TIME, dateTime);
fptr.fnQueryData();
long daysRemain = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_DAYS_REMAIN);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_DATE_TIME);
fptr.queryData();
Date dateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);

fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_VALIDITY_DAYS);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATE_TIME, dateTime);
fptr.fnQueryData();
long daysRemain = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_DAYS_REMAIN);
[fptr setParam:LIBFPTR_PARAM_DATA_TYPE, intParam:LIBFPTR_DT_DATE_TIME];
[fptr queryData];
NSDate *dateTime = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];

[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_VALIDITY_DAYS];
[fptr setParam:LIBFPTR_PARAM_DATE_TIME, NSDateParam:dateTime];
[fptr fnQueryData];
uint daysRemain = [fptr getParamInt:LIBFPTR_PARAM_FN_DAYS_REMAIN];
fptr.setParam(Constants.LIBFPTR_PARAM_DATA_TYPE, Constants.LIBFPTR_DT_DATE_TIME);
fptr.queryData();
DateTime dateTime = fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);

fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_VALIDITY_DAYS);
fptr.setParam(Constants.LIBFPTR_PARAM_DATE_TIME, dateTime);
fptr.fnQueryData();
uint daysRemain = fptr.getParamInt(Constants.LIBFPTR_PARAM_FN_DAYS_REMAIN);
var
    registrationsRemain:    Longint;
    registrationsCount:     Longint;
    dateTime:               TDateTime;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_DATE_TIME);
    fptr.queryData;
    dateTime := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);

    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_VALIDITY_DAYS);
    fptr.setParam(fptr.LIBFPTR_PARAM_DATE_TIME, dateTime);
    fptr.fnQueryData;
    daysRemain := fptr.getParamInt(fptr.LIBFPTR_PARAM_FN_DAYS_REMAIN);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATA_TYPE, fptr10.LIBFPTR_DT_DATE_TIME)
fptr.QueryData()
dateTime := fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_DATE_TIME)

fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_VALIDITY_DAYS)
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATE_TIME, dateTime)
fptr.FnQueryData()
daysRemain := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_FN_DAYS_REMAIN)
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_DATE_TIME);
Fptr.queryData();
dateTime = Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME);

Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_VALIDITY_DAYS);
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATE_TIME, dateTime);
Fptr.fnQueryData();
daysRemain = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_FN_DAYS_REMAIN);

Для запроса количества дней, оставшегося до окончания срока действия ФН, необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_VALIDITY_DAYS и передать дату, от которой считать дни, в параметре LIBFPTR_PARAM_DATE_TIME. В параметр LIBFPTR_PARAM_FN_DAYS_REMAIN запишется оставшееся количество дней.

Значение времени в параметре LIBFPTR_PARAM_DATE_TIME игнорируется.

В случае, если переданая дата больше, чем срок действия ФН, параметр LIBFPTR_PARAM_FN_DAYS_REMAIN будет иметь значение 0.

Ошибки обмена с ОФД

Запрос ошибок обмена с ОФД

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_ERRORS);
libfptr_fn_query_data(fptr);

std::vector<wchar_t> str(1024);
int size = 0;

int networkError    = libfptr_get_param_int(fptr, LIBFPTR_PARAM_NETWORK_ERROR);
size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_NETWORK_ERROR_TEXT, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_NETWORK_ERROR_TEXT, &str[0], str.size());
}
std::wstring networkErrorText = std::wstring(&str[0]);

int ofdError        = libfptr_get_param_int(fptr, LIBFPTR_PARAM_OFD_ERROR);
size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_OFD_ERROR_TEXT, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_OFD_ERROR_TEXT, &str[0], str.size());
}
std::wstring ofdErrorText = std::wstring(&str[0]);

int fnError         = libfptr_get_param_int(fptr, LIBFPTR_PARAM_FN_ERROR);
size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_FN_ERROR_TEXT, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_FN_ERROR_TEXT, &str[0], str.size());
}
std::wstring fnErrorText = std::wstring(&str[0]);

int documentNumber  = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER);
int commandCode     = libfptr_get_param_int(fptr, LIBFPTR_PARAM_COMMAND_CODE);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_ERRORS)
fptr.fnQueryData()

networkError        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_NETWORK_ERROR)
networkErrorText    = fptr.getParamString(IFptr.LIBFPTR_PARAM_NETWORK_ERROR_TEXT)

ofdError            = fptr.getParamInt(IFptr.LIBFPTR_PARAM_OFD_ERROR)
ofdErrorText        = fptr.getParamString(IFptr.LIBFPTR_PARAM_OFD_ERROR_TEXT)

fnError             = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_ERROR)
fnErrorText         = fptr.getParamString(IFptr.LIBFPTR_PARAM_FN_ERROR_TEXT)

documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)
commandCode         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COMMAND_CODE)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_ERRORS);
fptr.fnQueryData();

long networkError        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_NETWORK_ERROR);
String networkErrorText  = fptr.getParamString(IFptr.LIBFPTR_PARAM_NETWORK_ERROR_TEXT);

long ofdError            = fptr.getParamInt(IFptr.LIBFPTR_PARAM_OFD_ERROR);
String ofdErrorText      = fptr.getParamString(IFptr.LIBFPTR_PARAM_OFD_ERROR_TEXT);

long fnError             = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_ERROR);
String fnErrorText       = fptr.getParamString(IFptr.LIBFPTR_PARAM_FN_ERROR_TEXT);

long documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
long commandCode         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COMMAND_CODE);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_ERRORS);
fptr.fnQueryData();

long networkError        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_NETWORK_ERROR);
String networkErrorText  = fptr.getParamString(IFptr.LIBFPTR_PARAM_NETWORK_ERROR_TEXT);

long ofdError            = fptr.getParamInt(IFptr.LIBFPTR_PARAM_OFD_ERROR);
String ofdErrorText      = fptr.getParamString(IFptr.LIBFPTR_PARAM_OFD_ERROR_TEXT);

long fnError             = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_ERROR);
String fnErrorText       = fptr.getParamString(IFptr.LIBFPTR_PARAM_FN_ERROR_TEXT);

long documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
long commandCode         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COMMAND_CODE);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_ERRORS];
[fptr fnQueryData];

uint networkError           = [fptr getParamInt:LIBFPTR_PARAM_NETWORK_ERROR];
NSString *networkErrorText  = [fptr getParamString:LIBFPTR_PARAM_NETWORK_ERROR_TEXT];

uint ofdError               = [fptr getParamInt:LIBFPTR_PARAM_OFD_ERROR];
NSString *ofdErrorText      = [fptr getParamString:LIBFPTR_PARAM_OFD_ERROR_TEXT];

uint fnError                = [fptr getParamInt:LIBFPTR_PARAM_FN_ERROR];
NSString *fnErrorText       = [fptr getParamString:LIBFPTR_PARAM_FN_ERROR_TEXT];

uint documentNumber         = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENT_NUMBER];
uint commandCode            = [fptr getParamInt:LIBFPTR_PARAM_COMMAND_CODE];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_ERRORS);
fptr.fnQueryData();

uint networkError        = fptr.getParamInt(Constants.LIBFPTR_PARAM_NETWORK_ERROR);
String networkErrorText  = fptr.getParamString(Constants.LIBFPTR_PARAM_NETWORK_ERROR_TEXT);

uint ofdError            = fptr.getParamInt(Constants.LIBFPTR_PARAM_OFD_ERROR);
String ofdErrorText      = fptr.getParamString(Constants.LIBFPTR_PARAM_OFD_ERROR_TEXT);

uint fnError             = fptr.getParamInt(Constants.LIBFPTR_PARAM_FN_ERROR);
String fnErrorText       = fptr.getParamString(Constants.LIBFPTR_PARAM_FN_ERROR_TEXT);

uint documentNumber      = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER);
uint commandCode         = fptr.getParamInt(Constants.LIBFPTR_PARAM_COMMAND_CODE);
var
    networkError:       Longint;
    networkErrorText:   String;
    ofdError:           Longint;
    ofdErrorText:       String;
    fnError:            Longint;
    fnErrorText:        String;
    documentNumber:     Longint;
    commandCode:        Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_ERRORS);
    fptr.fnQueryData;

    networkError        := fptr.getParamInt(fptr.LIBFPTR_PARAM_NETWORK_ERROR);
    networkErrorText:   := fptr.getParamString(fptr.LIBFPTR_PARAM_NETWORK_ERROR_TEXT);

    ofdError:           := fptr.getParamInt(fptr.LIBFPTR_PARAM_OFD_ERROR);
    ofdErrorText:       := fptr.getParamString(fptr.LIBFPTR_PARAM_OFD_ERROR_TEXT);

    fnError:            := fptr.getParamInt(fptr.LIBFPTR_PARAM_FN_ERROR);
    fnErrorText:        := fptr.getParamString(fptr.LIBFPTR_PARAM_FN_ERROR_TEXT);

    documentNumber:     := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
    commandCode:        := fptr.getParamInt(fptr.LIBFPTR_PARAM_COMMAND_CODE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_ERRORS)
fptr.FnQueryData()

networkError        := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_NETWORK_ERROR)
networkErrorText    := fptr.GetParamString(fptr10.LIBFPTR_PARAM_NETWORK_ERROR_TEXT)

ofdError            := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_OFD_ERROR)
ofdErrorText        := fptr.GetParamString(fptr10.LIBFPTR_PARAM_OFD_ERROR_TEXT)

fnError             := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_FN_ERROR)
fnErrorText         := fptr.GetParamString(fptr10.LIBFPTR_PARAM_FN_ERROR_TEXT)

documentNumber      := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER)
commandCode         := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_COMMAND_CODE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_ERRORS);
Fptr.fnQueryData();

networkError        = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_NETWORK_ERROR);
networkErrorText    = Fptr.getParamString(Fptr.LIBFPTR_PARAM_NETWORK_ERROR_TEXT);

ofdError            = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_OFD_ERROR);
ofdErrorText        = Fptr.getParamString(Fptr.LIBFPTR_PARAM_OFD_ERROR_TEXT);

fnError             = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_FN_ERROR);
fnErrorText         = Fptr.getParamString(Fptr.LIBFPTR_PARAM_FN_ERROR_TEXT);

documentNumber      = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
commandCode         = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_COMMAND_CODE);

Для запроса ошибок обмена с ОФД необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_ERRORS.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_NETWORK_ERROR Код ошибки сети int
LIBFPTR_PARAM_NETWORK_ERROR_TEXT Текст ошибки сети string
LIBFPTR_PARAM_OFD_ERROR Код ошибки ОФД int
LIBFPTR_PARAM_OFD_ERROR_TEXT Текст ошибки ОФД string
LIBFPTR_PARAM_FN_ERROR Код ошибки ФН int
LIBFPTR_PARAM_FN_ERROR_TEXT Текст ошибки ФН string
LIBFPTR_PARAM_DOCUMENT_NUMBER Номер ФД, на котором произошла ошибка int
LIBFPTR_PARAM_COMMAND_CODE Команда ФН, на которой произошла ошибка int

Квитанция ОФД

Запрос квитанции ОФД

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_TICKET_BY_DOC_NUMBER);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
libfptr_fn_query_data(fptr);

int documentNumber  = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER);

int year, month, day, hour, minute, second;
libfptr_get_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, &year, &month, &day, &hour, &minute, &second);

std::vector<uchar> ofdFiscalSign(128);
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_OFD_FISCAL_SIGN, 
                                       &ofdFiscalSign[0], ofdFiscalSign.size());
if (size > ofdFiscalSign.size())
{
    ofdFiscalSign.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_OFD_FISCAL_SIGN, 
                                &ofdFiscalSign[0], ofdFiscalSign.size());
}
ofdFiscalSign.resize(size);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_TICKET_BY_DOC_NUMBER)
fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12)
fptr.fnQueryData()

documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)
dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
ofdFiscalSign       = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_OFD_FISCAL_SIGN)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_TICKET_BY_DOC_NUMBER);
fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
fptr.fnQueryData();

long documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
Date dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
byte[] ofdFiscalSign     = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_OFD_FISCAL_SIGN);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_TICKET_BY_DOC_NUMBER);
fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
fptr.fnQueryData();

long documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
Date dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
byte[] ofdFiscalSign     = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_OFD_FISCAL_SIGN);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_TICKET_BY_DOC_NUMBER];
[fptr setParam:LIBFPTR_PARAM_DOCUMENT_NUMBER, intParam:12];
[fptr fnQueryData];

uint documentNumber     = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENT_NUMBER];
NSDate* dateTime        = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];
NSData* ofdFiscalSign   = [fptr getParamByteArray:LIBFPTR_PARAM_OFD_FISCAL_SIGN];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_TICKET_BY_DOC_NUMBER);
fptr.setParam(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
fptr.fnQueryData();

uint documentNumber      = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER);
DateTime dateTime        = fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);
byte[] ofdFiscalSign     = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_OFD_FISCAL_SIGN);
var
    documentNumber: Longint;
    dateTime:       TDateTime;
    ofdFiscalSign:  Variant;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_TICKET_BY_DOC_NUMBER);
    fptr.setParam(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
    fptr.fnQueryData;

    documentNumber  := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
    dateTime        := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);
    ofdFiscalSign   := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_OFD_FISCAL_SIGN);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_TICKET_BY_DOC_NUMBER)
fptr.SetParam(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12)
fptr.FnQueryData()

documentNumber    := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER)
dateTime          := fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_DATE_TIME)
ofdFiscalSign     := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_OFD_FISCAL_SIGN)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_TICKET_BY_DOC_NUMBER);
fptr.SetParam(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
Fptr.fnQueryData();

documentNumber  = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
dateTime        = Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME);
ofdFiscalSign   = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_OFD_FISCAL_SIGN);

Для запроса квитанции ОФД необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_TICKET_BY_DOC_NUMBER и указать номер документа в параметре LIBFPTR_PARAM_DOCUMENT_NUMBER.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_DATE_TIME Дата и время из квитанции ОФД (UTC) datetime
LIBFPTR_PARAM_DOCUMENT_NUMBER Номер ФД из квитанции int
LIBFPTR_PARAM_OFD_FISCAL_SIGN Фискальный признак ОФД bytearray

Информация о документе

Запрос информации о документе

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_DOCUMENT_BY_NUMBER);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER, 24);
libfptr_fn_query_data(fptr);

int documentType    = libfptr_get_param_int(fptr, LIBFPTR_PARAM_FN_DOCUMENT_TYPE);
int documentNumber  = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER);
bool hasOfdTicket   = (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_HAS_OFD_TICKET) != 0);

int year, month, day, hour, minute, second;
libfptr_get_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, &year, &month, &day, &hour, &minute, &second);

std::vector<wchar_t> str(1024);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_FISCAL_SIGN, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_FISCAL_SIGN, &str[0], str.size());
}
std::wstring fiscalSign = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_DOCUMENT_BY_NUMBER)
fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 24)
fptr.fnQueryData()

documentType        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_DOCUMENT_TYPE)
documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)
hasOfdTicket        = fptr.getParamBool(IFptr.LIBFPTR_PARAM_HAS_OFD_TICKET)
dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
fiscalSign          = fptr.getParamString(IFptr.LIBFPTR_PARAM_FISCAL_SIGN)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_DOCUMENT_BY_NUMBER);
fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 24);
fptr.fnQueryData();

long documentType        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_DOCUMENT_TYPE);
long documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
boolean hasOfdTicket     = fptr.getParamBool(IFptr.LIBFPTR_PARAM_HAS_OFD_TICKET);
Date dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
String fiscalSign        = fptr.getParamString(IFptr.LIBFPTR_PARAM_FISCAL_SIGN);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_DOCUMENT_BY_NUMBER);
fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 24);
fptr.fnQueryData();

long documentType        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_DOCUMENT_TYPE);
long documentNumber      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
boolean hasOfdTicket     = fptr.getParamBool(IFptr.LIBFPTR_PARAM_HAS_OFD_TICKET);
Date dateTime            = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME);
String fiscalSign        = fptr.getParamString(IFptr.LIBFPTR_PARAM_FISCAL_SIGN);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_DOCUMENT_BY_NUMBER];
[fptr setParam:LIBFPTR_PARAM_DOCUMENT_NUMBER, intParam:24];
[fptr fnQueryData];

uint documentType        = [fptr getParamInt:LIBFPTR_PARAM_FN_DOCUMENT_TYPE];
uint documentNumber      = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENT_NUMBER];
bool hasOfdTicket        = [fptr getParamBool:LIBFPTR_PARAM_HAS_OFD_TICKET];
NSDate *dateTime         = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];
NSString *fiscalSign     = [fptr getParamString:LIBFPTR_PARAM_FISCAL_SIGN];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_DOCUMENT_BY_NUMBER);
fptr.setParam(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER, 24);
fptr.fnQueryData();

uint documentType        = fptr.getParamInt(Constants.LIBFPTR_PARAM_FN_DOCUMENT_TYPE);
uint documentNumber      = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER);
bool hasOfdTicket        = fptr.getParamBool(Constants.LIBFPTR_PARAM_HAS_OFD_TICKET);
DateTime dateTime        = fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME);
String fiscalSign        = fptr.getParamString(Constants.LIBFPTR_PARAM_FISCAL_SIGN);
var
    documentNumber: Longint;
    hasOfdTicket:   LongBool;
    dateTime:       TDateTime;
    fiscalSign:     String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_DOCUMENT_BY_NUMBER);
    fptr.setParam(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 24);
    fptr.fnQueryData;

    documentType    := fptr.getParamInt(fptr.LIBFPTR_PARAM_FN_DOCUMENT_TYPE);
    documentNumber  := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
    hasOfdTicket    := fptr.getParamBool(fptr.LIBFPTR_PARAM_HAS_OFD_TICKET);
    dateTime        := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);
    fiscalSign      := fptr.getParamString(fptr.LIBFPTR_PARAM_FISCAL_SIGN);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_DOCUMENT_BY_NUMBER)
fptr.SetParam(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER, 24)
fptr.FnQueryData()

documentType        := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_FN_DOCUMENT_TYPE)
documentNumber      := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER)
hasOfdTicket        := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_HAS_OFD_TICKET)
dateTime            := fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_DATE_TIME)
fiscalSign          := fptr.GetParamString(fptr10.LIBFPTR_PARAM_FISCAL_SIGN)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_DOCUMENT_BY_NUMBER);
Fptr.setParam(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 24);
Fptr.fnQueryData();

documentType    = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_FN_DOCUMENT_TYPE);
documentNumber  = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
hasOfdTicket    = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_HAS_OFD_TICKET);
dateTime        = Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME);
fiscalSign      = Fptr.getParamString(Fptr.LIBFPTR_PARAM_FISCAL_SIGN);

Для запроса информации о фискальном документе необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_DOCUMENT_BY_NUMBER и указать номер документа в параметре LIBFPTR_PARAM_DOCUMENT_NUMBER.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_FN_DOCUMENT_TYPE Тип документа int
LIBFPTR_PARAM_DATE_TIME Дата и время документа datetime
LIBFPTR_PARAM_DOCUMENT_NUMBER Номер ФД int
LIBFPTR_PARAM_HAS_OFD_TICKET Флаг наличия подтверждения ОФД bool
LIBFPTR_PARAM_FISCAL_SIGN Фискальный признак string

Параметр LIBFPTR_PARAM_FN_DOCUMENT_TYPE может принимать следующие значения:

Дополнительные выходные параметры зависят от значения LIBFPTR_PARAM_FN_DOCUMENT_TYPE.

Выходные параметры для отчета регистрации:

Параметр Описание Тип Комментарий
1018 ИНН организации string
1037 Регистрационный номер устройства string
1062 Системы налогообложения int
1001 Признак автоматического режима bool
1002 Признак автономного режима bool
1056 Признак шифрования bool
1108 Признак ККТ для расчетов в сети Интернет bool
1109 Признак расчетов за услуги bool
1110 Признак АС БСО bool
1126 Признак проведения лотерей bool Только ФФД 1.1
1193 Признак проведения азартных игр bool Только ФФД 1.1
1207 Признак подакцизного товара bool Только ФФД 1.1
1221 Признак установки принтера в автомате bool Только ФФД 1.1
1017 ИНН ОФД string Только ФФД 1.1

Выходные параметры для отчета перерегистрации:

Параметр Описание Тип Комментарий
1018 ИНН организации string
1037 Регистрационный номер устройства string
1062 Системы налогообложения int
1001 Признак автоматического режима bool
1002 Признак автономного режима bool
1056 Признак шифрования bool
1108 Признак ККТ для расчетов в сети Интернет bool
1109 Признак расчетов за услуги bool
1110 Признак АС БСО bool
1101 Причина перерегистрации int Только ФФД 1.0 и 1.05
1126 Признак проведения лотерей bool Только ФФД 1.1
1193 Признак проведения азартных игр bool Только ФФД 1.1
1207 Признак подакцизного товара bool Только ФФД 1.1
1221 Признак установки принтера в автомате bool Только ФФД 1.1
1017 ИНН ОФД string Только ФФД 1.1
1205 Коды причин перерегистрации int Только ФФД 1.1

Выходные параметры для отчета о закрытии ФН:

Параметр Описание Тип
1018 ИНН организации string
1037 Регистрационный номер устройства string

Выходные параметры для отчетов об открытии / закрытии смены:

Параметр Описание Тип
1038 или LIBFPTR_PARAM_SHIFT_NUMBER Номер смены int

Выходные параметры для чеков и БСО:

Параметр Описание Тип
1054 Признак расчета int
1020 Сумма расчета double

Выходные параметры для отчета о состоянии расчетов:

Параметр Описание Тип
1097 Количество непереданных ФД int
1098 Дата первого из непереданных ФД datetime

Значение реквизита 1062 (системы налогообложения) - битовое поле, значениями которого являются одно или несколько из следующих значений:

Возможные значения реквизитов 1101 и 1205 приведены в разделе Перерегистрация ККТ.

Возможные значения для реквизита 1054 (признак расчета):

Детализация ошибки ФН

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_ERROR_DETAIL);
libfptr_fn_query_data(fptr);

std::vector<uchar> details(128);
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_FN_ERROR_DATA,
                                       &details[0], details.size());
if (size > details.size())
{
    details.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_FN_ERROR_DATA,
                                &details[0], details.size());
}
details.resize(size);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_ERROR_DETAIL)
fptr.fnQueryData()

details = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_FN_ERROR_DATA)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_ERROR_DETAIL);
fptr.fnQueryData();

byte[] details = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_FN_ERROR_DATA);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_ERROR_DETAIL);
fptr.fnQueryData();

byte[] details = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_FN_ERROR_DATA);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_ERROR_DETAIL];
[fptr fnQueryData];

NSData *details = [fptr getParamDateTime:LIBFPTR_PARAM_FN_ERROR_DATA];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_ERROR_DETAIL);
fptr.fnQueryData();

byte[] details = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_FN_ERROR_DATA);
var
    details: Variant;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_ERROR_DETAIL);
    fptr.fnQueryData;

    details := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_FN_ERROR_DATA);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_ERROR_DETAIL)
fptr.FnQueryData()

details := fptr.getParamByteArray(Constants.LIBFPTR_PARAM_FN_ERROR_DATA)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_ERROR_DETAIL);
Fptr.fnQueryData();

details = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_FN_DOCUMENT_TYPE);

Для запроса детализации ошибки ФН необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_ERROR_DETAIL.

Детализация ошибки будет доступна в выходном параметре LIBFPTR_PARAM_FN_ERROR_DATA.

Ресурс памяти ФН

Запрос ресурса памяти ФН

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_FREE_MEMORY);
libfptr_fn_query_data(fptr);

uint documentsCount = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENTS_COUNT);
uint freeMemory     = libfptr_get_param_int(fptr, LIBFPTR_PARAM_FREE_MEMORY);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_FREE_MEMORY)
fptr.fnQueryData()

documentsCount = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT)
freeMemory     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FREE_MEMORY)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_FREE_MEMORY);
fptr.fnQueryData();

long documentsCount = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
long freeMemory     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FREE_MEMORY);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_FREE_MEMORY);
fptr.fnQueryData();

long documentsCount = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
long freeMemory     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FREE_MEMORY);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_FREE_MEMORY];
[fptr fnQueryData];

uint documentsCount = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENTS_COUNT];
uint freeMemory     = [fptr getParamInt:LIBFPTR_PARAM_FREE_MEMORY];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_FREE_MEMORY);
fptr.fnQueryData();

uint documentsCount = fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENTS_COUNT);
uint freeMemory     = fptr.getParamInt(Constants.LIBFPTR_PARAM_FREE_MEMORY);
var
    documentNumber, documentType: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_FREE_MEMORY);
    fptr.fnQueryData;

    documentsCount := fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
    freeMemory     := fptr.getParamInt(fptr.LIBFPTR_PARAM_FREE_MEMORY);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_FREE_MEMORY)
fptr.FnQueryData()

documentsCount := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENTS_COUNT)
freeMemory     := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_FREE_MEMORY)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_FREE_MEMORY);
Fptr.fnQueryData();

documentsCount = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
freeMemory     = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_FREE_MEMORY);

Для запроса ресурса свободной памяти ФН необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_FREE_MEMORY.

Детализация ошибки будет доступна в выходном параметре LIBFPTR_PARAM_FN_ERROR_DATA.

Выходные параметры:

Параметр Описание Тип
LIBFPTR_PARAM_DOCUMENTS_COUNT Ресурс данных 5-летнего хранения. Приблизительное количество документов, которое можно создать в ФН int
LIBFPTR_PARAM_FREE_MEMORY Ресурс данных 30-дневного хранения. Размер свободной области (в килобайтах) для записи документов. После 30 дней работы значение может колебаться возле постоянного уровня int

Счетчики ФН

В ФН 1.1 доступны следующие счетчики:

Счетчики итогов операций

Чтение счетчиков итогов операций ФН по типу расчета

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_TOTALS);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_COUNTERS_TYPE, LIBFPTR_FNCT_SHIFT);
libfptr_fn_query_data(fptr);

uint receipts         = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPTS_COUNT);
uint corrections      = libfptr_get_param_int(fptr, LIBFPTR_PARAM_CORRECTIONS_COUNT);

double receiptsSum    = libfptr_get_param_double(fptr, LIBFPTR_PARAM_RECEIPTS_SUM);
double correctionsSum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_CORRECTIONS_SUM);

double cashSum        = libfptr_get_param_double(fptr, LIBFPTR_PARAM_PAYMENTS_SUM_CASH);
double noncashSum     = libfptr_get_param_double(fptr, LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY);
double prepaidSum     = libfptr_get_param_double(fptr, LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID);
double creditSum      = libfptr_get_param_double(fptr, LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT);
double barterSum      = libfptr_get_param_double(fptr, LIBFPTR_PARAM_PAYMENTS_SUM_OTHER);

double vat20Sum       = libfptr_get_param_double(fptr, LIBFPTR_PARAM_TAXES_SUM_VAT20);
double vat10Sum       = libfptr_get_param_double(fptr, LIBFPTR_PARAM_TAXES_SUM_VAT10);
double vat120Sum      = libfptr_get_param_double(fptr, LIBFPTR_PARAM_TAXES_SUM_VAT120);
double vat110Sum      = libfptr_get_param_double(fptr, LIBFPTR_PARAM_TAXES_SUM_VAT110);
double vat0Sum        = libfptr_get_param_double(fptr, LIBFPTR_PARAM_TAXES_SUM_VAT0);
double vatNoSum       = libfptr_get_param_double(fptr, LIBFPTR_PARAM_TAXES_SUM_NO);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_TOTALS)
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, IFptr.LIBFPTR_FNCT_SHIFT)
fptr.fnQueryData()

receipts       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT)
corrections    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_CORRECTIONS_COUNT)

receiptsSum    = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPTS_SUM)
correctionsSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_CORRECTIONS_SUM)

cashSum        = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_CASH)
noncashSum     = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY)
prepaidSum     = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID)
creditSum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT)
barterSum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER)

vat20Sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT20)
vat10Sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT10)
vat120Sum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT120)
vat110Sum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT110)
vat0Sum        = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT0)
vatNoSum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_NO)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_TOTALS);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, IFptr.LIBFPTR_FNCT_SHIFT);
fptr.fnQueryData();

long receipts         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
long corrections      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);

double receiptsSum    = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPTS_SUM);
double correctionsSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_CORRECTIONS_SUM);

double cashSum        = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_CASH);
double noncashSum     = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY);
double prepaidSum     = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID);
double creditSum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT);
double barterSum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER);

double vat20Sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT20);
double vat10Sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT10);
double vat120Sum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT120);
double vat110Sum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT110);
double vat0Sum        = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT0);
double vatNoSum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_NO);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_TOTALS);
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, IFptr.LIBFPTR_FNCT_SHIFT);
fptr.fnQueryData();

long receipts         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
long corrections      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);

double receiptsSum    = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPTS_SUM);
double correctionsSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_CORRECTIONS_SUM);

double cashSum        = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_CASH);
double noncashSum     = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY);
double prepaidSum     = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID);
double creditSum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT);
double barterSum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER);

double vat20Sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT20);
double vat10Sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT10);
double vat120Sum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT120);
double vat110Sum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT110);
double vat0Sum        = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT0);
double vatNoSum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_NO);
[fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE, intParam:LIBFPTR_FNDT_TOTALS];
[fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE, intParam:LIBFPTR_RT_SELL];
[fptr setParam:LIBFPTR_PARAM_FN_COUNTERS_TYPE, intParam:LIBFPTR_FNCT_SHIFT];
[fptr fnQueryData];

uint receipts         = [fptr getParamInt:LIBFPTR_PARAM_RECEIPTS_COUNT];
uint corrections      = [fptr getParamInt:LIBFPTR_PARAM_CORRECTIONS_COUNT];

double receiptsSum    = [fptr getParamDouble:LIBFPTR_PARAM_RECEIPTS_SUM];
double correctionsSum = [fptr getParamDouble:LIBFPTR_PARAM_CORRECTIONS_SUM];

double cashSum        = [fptr getParamDouble:LIBFPTR_PARAM_PAYMENTS_SUM_CASH];
double noncashSum     = [fptr getParamDouble:LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY];
double prepaidSum     = [fptr getParamDouble:LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID];
double creditSum      = [fptr getParamDouble:LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT];
double barterSum      = [fptr getParamDouble:LIBFPTR_PARAM_PAYMENTS_SUM_OTHER];

double vat20Sum       = [fptr getParamDouble:LIBFPTR_PARAM_TAXES_SUM_VAT20];
double vat10Sum       = [fptr getParamDouble:LIBFPTR_PARAM_TAXES_SUM_VAT10];
double vat120Sum      = [fptr getParamDouble:LIBFPTR_PARAM_TAXES_SUM_VAT120];
double vat110Sum      = [fptr getParamDouble:LIBFPTR_PARAM_TAXES_SUM_VAT110];
double vat0Sum        = [fptr getParamDouble:LIBFPTR_PARAM_TAXES_SUM_VAT0];
double vatNoSum       = [fptr getParamDouble:LIBFPTR_PARAM_TAXES_SUM_NO];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_TOTALS);
fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
fptr.setParam(Constants.LIBFPTR_PARAM_FN_COUNTERS_TYPE, Constants.LIBFPTR_FNCT_SHIFT);
fptr.fnQueryData();

uint receipts         = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPTS_COUNT);
uint corrections      = fptr.getParamInt(Constants.LIBFPTR_PARAM_CORRECTIONS_COUNT);

double receiptsSum    = fptr.getParamDouble(Constants.LIBFPTR_PARAM_RECEIPTS_SUM);
double correctionsSum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_CORRECTIONS_SUM);

double cashSum        = fptr.getParamDouble(Constants.LIBFPTR_PARAM_PAYMENTS_SUM_CASH);
double noncashSum     = fptr.getParamDouble(Constants.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY);
double prepaidSum     = fptr.getParamDouble(Constants.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID);
double creditSum      = fptr.getParamDouble(Constants.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT);
double barterSum      = fptr.getParamDouble(Constants.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER);

double vat20Sum       = fptr.getParamDouble(Constants.LIBFPTR_PARAM_TAXES_SUM_VAT20);
double vat10Sum       = fptr.getParamDouble(Constants.LIBFPTR_PARAM_TAXES_SUM_VAT10);
double vat120Sum      = fptr.getParamDouble(Constants.LIBFPTR_PARAM_TAXES_SUM_VAT120);
double vat110Sum      = fptr.getParamDouble(Constants.LIBFPTR_PARAM_TAXES_SUM_VAT110);
double vat0Sum        = fptr.getParamDouble(Constants.LIBFPTR_PARAM_TAXES_SUM_VAT0);
double vatNoSum       = fptr.getParamDouble(Constants.LIBFPTR_PARAM_TAXES_SUM_NO);
var
    type, receipts, corrections: Integer;
    cashSum, noncashSum, prepaidSum, creditSum, barterSum: Double;
    vat20Sum, vat10Sum, vat120Sum, vat110Sum, vat0Sum, vatNoSum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_TOTALS);
    fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL);
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, fptr.LIBFPTR_FNCT_SHIFT);
    fptr.fnQueryData;

    receipts       := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
    corrections    := fptr.getParamInt(fptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);

    receiptsSum    := fptr.getParamDouble(fptr.LIBFPTR_PARAM_RECEIPTS_SUM);
    correctionsSum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_CORRECTIONS_SUM);

    cashSum        := fptr.getParamDouble(fptr.LIBFPTR_PARAM_PAYMENTS_SUM_CASH);
    noncashSum     := fptr.getParamDouble(fptr.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY);
    prepaidSum     := fptr.getParamDouble(fptr.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID);
    creditSum      := fptr.getParamDouble(fptr.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT);
    barterSum      := fptr.getParamDouble(fptr.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER);

    vat20Sum       := fptr.getParamDouble(fptr.LIBFPTR_PARAM_TAXES_SUM_VAT20);
    vat10Sum       := fptr.getParamDouble(fptr.LIBFPTR_PARAM_TAXES_SUM_VAT10);
    vat120Sum      := fptr.getParamDouble(fptr.LIBFPTR_PARAM_TAXES_SUM_VAT120);
    vat110Sum      := fptr.getParamDouble(fptr.LIBFPTR_PARAM_TAXES_SUM_VAT110);
    vat0Sum        := fptr.getParamDouble(fptr.LIBFPTR_PARAM_TAXES_SUM_VAT0);
    vatNoSum       := fptr.getParamDouble(fptr.LIBFPTR_PARAM_TAXES_SUM_NO);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_TOTALS)
fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL)
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_COUNTERS_TYPE, fptr10.LIBFPTR_FNCT_SHIFT)
fptr.FnQueryData()

receipts       = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPTS_COUNT)
corrections    = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_CORRECTIONS_COUNT)

receiptsSum    = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_RECEIPTS_SUM)
correctionsSum = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_CORRECTIONS_SUM)

cashSum        = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_PAYMENTS_SUM_CASH)
noncashSum     = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY)
prepaidSum     = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID)
creditSum      = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT)
barterSum      = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER)

vat20Sum       = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_TAXES_SUM_VAT20)
vat10Sum       = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_TAXES_SUM_VAT10)
vat120Sum      = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_TAXES_SUM_VAT120)
vat110Sum      = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_TAXES_SUM_VAT110)
vat0Sum        = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_TAXES_SUM_VAT0)
vatNoSum       = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_TAXES_SUM_NO)
Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_TYPE, Fptr.LIBFPTR_FNDT_TOTALS);
Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL);
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, Fptr.LIBFPTR_FNCT_SHIFT);
Fptr.fnQueryData();

receipts       = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
corrections    = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);

receiptsSum    = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_RECEIPTS_SUM);
correctionsSum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_CORRECTIONS_SUM);

cashSum        = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_PAYMENTS_SUM_CASH);
noncashSum     = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY);
prepaidSum     = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID);
creditSum      = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT);
barterSum      = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER);

vat20Sum       = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_TAXES_SUM_VAT20);
vat10Sum       = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_TAXES_SUM_VAT10);
vat120Sum      = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_TAXES_SUM_VAT120);
vat110Sum      = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_TAXES_SUM_VAT110);
vat0Sum        = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_TAXES_SUM_VAT0);
vatNoSum       = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_TAXES_SUM_NO);

Для запроса счетчиков итогов операций ФН по заданному типу расчетов необходимо вызвать метод fnQueryData() с типом запроса LIBFPTR_PARAM_FN_DATA_TYPE равным LIBFPTR_FNDT_TOTALS и передать тип расчета в параметре LIBFPTR_PARAM_RECEIPT_TYPE и тип счетчиков ФН в параметре LIBFPTR_PARAM_FN_COUNTERS_TYPE.

Выходные параметры:

Параметр Описание Тип
LIBFPTR_PARAM_RECEIPTS_COUNT Общее количество чеков (включая коррекции) int
LIBFPTR_PARAM_CORRECTIONS_COUNT Количество коррекций int
LIBFPTR_PARAM_RECEIPTS_SUM Итоговая сумма чеков (включая коррекции) double
LIBFPTR_PARAM_CORRECTIONS_SUM Сумма коррекций double
LIBFPTR_PARAM_PAYMENTS_SUM_CASH Сумма наличных оплат double
LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY Сумма безналичных оплат double
LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID Сумма оплат авансом double
LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT Сумма оплат кредитом double
LIBFPTR_PARAM_PAYMENTS_SUM_OTHER Сумма оплат встречным предоставлением double
LIBFPTR_PARAM_TAXES_SUM_VAT20 Сумма НДС 20% double
LIBFPTR_PARAM_TAXES_SUM_VAT10 Сумма НДС 10% double
LIBFPTR_PARAM_TAXES_SUM_VAT120 Сумма НДС 20/120 double
LIBFPTR_PARAM_TAXES_SUM_VAT110 Сумма НДС 10/110 double
LIBFPTR_PARAM_TAXES_SUM_VAT0 Сумма НДС 0% double
LIBFPTR_PARAM_TAXES_SUM_NO Сумма без НДС double

Чтение счетчиков итогов операций ФН

// Вспомогательная функция для чтения строковых параметров
std::wstring readStringAttribute(libfptr_handle fptr, int paramNumber) {
    std::vector<wchar_t> str(32);
    int size = libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    if (size > str.size()) {
        str.resize(size);
        libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    }
    return std::wstring(&str[0]);
}

// Вспомогательная функция чтения следующей записи
int readNextRecord(libfptr_handle fptr, const std::wstring &recordsID) {
    libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
    return libfptr_read_next_record(fptr);
}

libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECORDS_TYPE, LIBFPTR_RT_FN_SUM_COUNTERS);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_COUNTERS_TYPE, LIBFPTR_FNCT_SHIFT);
libfptr_begin_read_records(handle);
std::wstring recordsID = readStringAttribute(fptr, LIBFPTR_PARAM_RECORDS_ID);
uint shiftNumber       = libfptr_get_param_int(fptr, LIBFPTR_PARAM_SHIFT_NUMBER);
uint receiptsAll       = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPTS_COUNT);
uint correctionsAll    = libfptr_get_param_int(fptr, LIBFPTR_PARAM_CORRECTIONS_COUNT);

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{    
    uint receiptType      = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE);

    uint receipts         = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPTS_COUNT);
    uint corrections      = libfptr_get_param_int(fptr, LIBFPTR_PARAM_CORRECTIONS_COUNT);

    double receiptsSum    = libfptr_get_param_double(fptr, LIBFPTR_PARAM_RECEIPTS_SUM);
    double correctionsSum = libfptr_get_param_double(fptr, LIBFPTR_PARAM_CORRECTIONS_SUM);

    double cashSum        = libfptr_get_param_double(fptr, LIBFPTR_PARAM_PAYMENTS_SUM_CASH);
    double noncashSum     = libfptr_get_param_double(fptr, LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY);
    double prepaidSum     = libfptr_get_param_double(fptr, LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID);
    double creditSum      = libfptr_get_param_double(fptr, LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT);
    double barterSum      = libfptr_get_param_double(fptr, LIBFPTR_PARAM_PAYMENTS_SUM_OTHER);

    double vat20Sum       = libfptr_get_param_double(fptr, LIBFPTR_PARAM_TAXES_SUM_VAT20);
    double vat10Sum       = libfptr_get_param_double(fptr, LIBFPTR_PARAM_TAXES_SUM_VAT10);
    double vat120Sum      = libfptr_get_param_double(fptr, LIBFPTR_PARAM_TAXES_SUM_VAT120);
    double vat110Sum      = libfptr_get_param_double(fptr, LIBFPTR_PARAM_TAXES_SUM_VAT110);
    double vat0Sum        = libfptr_get_param_double(fptr, LIBFPTR_PARAM_TAXES_SUM_VAT0);
    double vatNoSum       = libfptr_get_param_double(fptr, LIBFPTR_PARAM_TAXES_SUM_NO);
}

libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
libfptr_end_read_records(fptr);
# Вспомогательная функция чтения следующей записи
def readNextRecord(fptr, recordsID):
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.readNextRecord()

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_SUM_COUNTERS)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, IFptr.LIBFPTR_FNCT_SHIFT)
fptr.beginReadRecords()
recordsID      = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID)
shiftNumber    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER)
receiptsAll    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT)
correctionsAll = fptr.getParamInt(IFptr.LIBFPTR_PARAM_CORRECTIONS_COUNT)

while readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK:    
    receiptType    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE)

    receipts       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT)
    corrections    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_CORRECTIONS_COUNT)

    receiptsSum    = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPTS_SUM)
    correctionsSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_CORRECTIONS_SUM)

    cashSum        = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_CASH)
    noncashSum     = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY)
    prepaidSum     = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID)
    creditSum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT)
    barterSum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER)

    vat20Sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT20)
    vat10Sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT10)
    vat120Sum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT120)
    vat110Sum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT110)
    vat0Sum        = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT0)
    vatNoSum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_NO)

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.endReadRecords()
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_SUM_COUNTERS);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, IFptr.LIBFPTR_FNCT_SHIFT);
fptr.beginReadRecords();
String recordsID    = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);
long shiftNumber    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER);
long receiptsAll    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
long correctionsAll = fptr.getParamInt(IFptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    long receiptType      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE);

    long receipts         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
    long corrections      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);

    double receiptsSum    = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPTS_SUM);
    double correctionsSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_CORRECTIONS_SUM);

    double cashSum        = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_CASH);
    double noncashSum     = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY);
    double prepaidSum     = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID);
    double creditSum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT);
    double barterSum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER);

    double vat20Sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT20);
    double vat10Sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT10);
    double vat120Sum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT120);
    double vat110Sum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT110);
    double vat0Sum        = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT0);
    double vatNoSum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_NO);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_SUM_COUNTERS);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, IFptr.LIBFPTR_FNCT_SHIFT);
fptr.beginReadRecords();
String recordsID    = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);
long shiftNumber    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER);
long receiptsAll    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
long correctionsAll = fptr.getParamInt(IFptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    long receiptType      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE);

    long receipts         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
    long corrections      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);

    double receiptsSum    = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPTS_SUM);
    double correctionsSum = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_CORRECTIONS_SUM);

    double cashSum        = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_CASH);
    double noncashSum     = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY);
    double prepaidSum     = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID);
    double creditSum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT);
    double barterSum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER);

    double vat20Sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT20);
    double vat10Sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT10);
    double vat120Sum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT120);
    double vat110Sum      = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT110);
    double vat0Sum        = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_VAT0);
    double vatNoSum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAXES_SUM_NO);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr *fptr, NSString *recordsID) {
    [fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
    return [fptr readNextRecord];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_TYPE, intParam:LIBFPTR_RT_FN_SUM_COUNTERS];
[fptr setParam:LIBFPTR_PARAM_FN_COUNTERS_TYPE, intParam:LIBFPTR_FNCT_SHIFT];
[fptr beginReadRecords];
NSString *recordsID = [fptr getParamString:LIBFPTR_PARAM_RECORDS_ID];
uint shiftNumber    = [fptr getParamInt:LIBFPTR_PARAM_SHIFT_NUMBER];
uint receiptsAll    = [fptr getParamInt:LIBFPTR_PARAM_RECEIPTS_COUNT];
uint correctionsAll = [fptr getParamInt:LIBFPTR_PARAM_CORRECTIONS_COUNT];

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{    
    uint receiptType      = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_TYPE];

    uint receipts         = [fptr getParamInt:LIBFPTR_PARAM_RECEIPTS_COUNT];
    uint corrections      = [fptr getParamInt:LIBFPTR_PARAM_CORRECTIONS_COUNT];

    double receiptsSum    = [fptr getParamDouble:LIBFPTR_PARAM_RECEIPTS_SUM];
    double correctionsSum = [fptr getParamDouble:LIBFPTR_PARAM_CORRECTIONS_SUM];

    double cashSum        = [fptr getParamDouble:LIBFPTR_PARAM_PAYMENTS_SUM_CASH];
    double noncashSum     = [fptr getParamDouble:LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY];
    double prepaidSum     = [fptr getParamDouble:LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID];
    double creditSum      = [fptr getParamDouble:LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT];
    double barterSum      = [fptr getParamDouble:LIBFPTR_PARAM_PAYMENTS_SUM_OTHER];

    double vat20Sum       = [fptr getParamDouble:LIBFPTR_PARAM_TAXES_SUM_VAT20];
    double vat10Sum       = [fptr getParamDouble:LIBFPTR_PARAM_TAXES_SUM_VAT10];
    double vat120Sum      = [fptr getParamDouble:LIBFPTR_PARAM_TAXES_SUM_VAT120];
    double vat110Sum      = [fptr getParamDouble:LIBFPTR_PARAM_TAXES_SUM_VAT110];
    double vat0Sum        = [fptr getParamDouble:LIBFPTR_PARAM_TAXES_SUM_VAT0];
    double vatNoSum       = [fptr getParamDouble:LIBFPTR_PARAM_TAXES_SUM_NO];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
[fptr endReadRecords];
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_TYPE, Constants.LIBFPTR_RT_FN_SUM_COUNTERS);
fptr.setParam(Constants.LIBFPTR_PARAM_FN_COUNTERS_TYPE, Constants.LIBFPTR_FNCT_SHIFT);
fptr.beginReadRecords();
String recordsID    = fptr.getParamString(Constants.LIBFPTR_PARAM_RECORDS_ID);
uint shiftNumber    = fptr.getParamInt(Constants.LIBFPTR_PARAM_SHIFT_NUMBER);
uint receiptsAll    = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPTS_COUNT);
uint correctionsAll = fptr.getParamInt(Constants.LIBFPTR_PARAM_CORRECTIONS_COUNT);

while (readNextRecord(fptr, recordsID) == Constants.LIBFPTR_OK) {
    uint receiptType      = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_TYPE);

    uint receipts         = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPTS_COUNT);
    uint corrections      = fptr.getParamInt(Constants.LIBFPTR_PARAM_CORRECTIONS_COUNT);

    double receiptsSum    = fptr.getParamDouble(Constants.LIBFPTR_PARAM_RECEIPTS_SUM);
    double correctionsSum = fptr.getParamDouble(Constants.LIBFPTR_PARAM_CORRECTIONS_SUM);

    double cashSum        = fptr.getParamDouble(Constants.LIBFPTR_PARAM_PAYMENTS_SUM_CASH);
    double noncashSum     = fptr.getParamDouble(Constants.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY);
    double prepaidSum     = fptr.getParamDouble(Constants.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID);
    double creditSum      = fptr.getParamDouble(Constants.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT);
    double barterSum      = fptr.getParamDouble(Constants.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER);

    double vat20Sum       = fptr.getParamDouble(Constants.LIBFPTR_PARAM_TAXES_SUM_VAT20);
    double vat10Sum       = fptr.getParamDouble(Constants.LIBFPTR_PARAM_TAXES_SUM_VAT10);
    double vat120Sum      = fptr.getParamDouble(Constants.LIBFPTR_PARAM_TAXES_SUM_VAT120);
    double vat110Sum      = fptr.getParamDouble(Constants.LIBFPTR_PARAM_TAXES_SUM_VAT110);
    double vat0Sum        = fptr.getParamDouble(Constants.LIBFPTR_PARAM_TAXES_SUM_VAT0);
    double vatNoSum       = fptr.getParamDouble(Constants.LIBFPTR_PARAM_TAXES_SUM_NO);
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
function readNextRecord(fptr: OleVariant; recordsID: String): integer;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    Result := fptr.readNextRecord;
end;

var
    receiptsAll, correctionsAll, shiftNumber, receiptType, receipts, corrections: Integer;
    receiptsSum, correctionsSum: Double;
    cashSum, noncashSum, prepaidSum, creditSum, barterSum: Double;
    vat20Sum, vat10Sum, vat120Sum, vat110Sum, vat0Sum, vatNoSum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_TYPE, fptr.LIBFPTR_RT_FN_SUM_COUNTERS);
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, fptr.LIBFPTR_FNCT_SHIFT);
    fptr.beginReadRecords;
    recordsID      := fptr.getParamString(fptr.LIBFPTR_PARAM_RECORDS_ID);
    shiftNumber    := fptr.getParamInt(fptr.LIBFPTR_PARAM_SHIFT_NUMBER);
    receiptsAll    := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
    correctionsAll := fptr.getParamInt(fptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);

    While readNextRecord(fptr, recordsID) = fptr.LIBFPTR_OK do
    begin
        receiptType    := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);

        receipts       := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
        corrections    := fptr.getParamInt(fptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);

        receiptsSum    := fptr.getParamDouble(fptr.LIBFPTR_PARAM_RECEIPTS_SUM);
        correctionsSum := fptr.getParamDouble(fptr.LIBFPTR_PARAM_CORRECTIONS_SUM);

        cashSum        := fptr.getParamDouble(fptr.LIBFPTR_PARAM_PAYMENTS_SUM_CASH);
        noncashSum     := fptr.getParamDouble(fptr.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY);
        prepaidSum     := fptr.getParamDouble(fptr.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID);
        creditSum      := fptr.getParamDouble(fptr.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT);
        barterSum      := fptr.getParamDouble(fptr.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER);

        vat20Sum       := fptr.getParamDouble(fptr.LIBFPTR_PARAM_TAXES_SUM_VAT20);
        vat10Sum       := fptr.getParamDouble(fptr.LIBFPTR_PARAM_TAXES_SUM_VAT10);
        vat120Sum      := fptr.getParamDouble(fptr.LIBFPTR_PARAM_TAXES_SUM_VAT120);
        vat110Sum      := fptr.getParamDouble(fptr.LIBFPTR_PARAM_TAXES_SUM_VAT110);
        vat0Sum        := fptr.getParamDouble(fptr.LIBFPTR_PARAM_TAXES_SUM_VAT0);
        vatNoSum       := fptr.getParamDouble(fptr.LIBFPTR_PARAM_TAXES_SUM_NO);
    end;

    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    fptr.endReadRecords;
end;
// Вспомогательная функция чтения следующей записи
func readNextRecord(fptr *fptr10.IFptr, recordsID string) error {
    fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.ReadNextRecord()
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_TYPE, fptr10.LIBFPTR_RT_FN_SUM_COUNTERS)
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_COUNTERS_TYPE, fptr10.LIBFPTR_FNCT_SHIFT);
fptr.BeginReadRecords()
recordsID      := fptr.GetParamString(fptr10.LIBFPTR_PARAM_RECORDS_ID)
shiftNumber    := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_SHIFT_NUMBER)
receiptsAll    := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPTS_COUNT)
correctionsAll := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_CORRECTIONS_COUNT)

for readNextRecord(fptr, recordsID) == nil {
    receiptType    = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE)

    receipts       = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPTS_COUNT)
    corrections    = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_CORRECTIONS_COUNT)

    receiptsSum    = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_RECEIPTS_SUM)
    correctionsSum = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_CORRECTIONS_SUM)

    cashSum        = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_PAYMENTS_SUM_CASH)
    noncashSum     = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY)
    prepaidSum     = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID)
    creditSum      = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT)
    barterSum      = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER)

    vat20Sum       = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_TAXES_SUM_VAT20)
    vat10Sum       = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_TAXES_SUM_VAT10)
    vat120Sum      = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_TAXES_SUM_VAT120)
    vat110Sum      = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_TAXES_SUM_VAT110)
    vat0Sum        = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_TAXES_SUM_VAT0)
    vatNoSum       = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_TAXES_SUM_NO)
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.EndReadRecords()
// Вспомогательная функция чтения следующей записи
function readNextRecord(recordsID) {
    Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return Fptr.readNextRecord();
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_TYPE, Fptr.LIBFPTR_RT_FN_SUM_COUNTERS);
Fptr.SetParam(Fptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, Fptr.LIBFPTR_FNCT_SHIFT);
Fptr.beginReadRecords();
recordsID      = Fptr.getParamString(Fptr.LIBFPTR_PARAM_RECORDS_ID);
shiftNumber    = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_SHIFT_NUMBER);
receiptsAll    = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
correctionsAll = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);

while (readNextRecord(recordsID) == Fptr.LIBFPTR_OK) {
    receiptType    = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE);

    receipts       = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
    corrections    = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);

    receiptsSum    = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_RECEIPTS_SUM);
    correctionsSum = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_CORRECTIONS_SUM);

    cashSum        = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_PAYMENTS_SUM_CASH);
    noncashSum     = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY);
    prepaidSum     = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID);
    creditSum      = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT);
    barterSum      = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_PAYMENTS_SUM_OTHER);

    vat20Sum       = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_TAXES_SUM_VAT20);
    vat10Sum       = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_TAXES_SUM_VAT10);
    vat120Sum      = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_TAXES_SUM_VAT120);
    vat110Sum      = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_TAXES_SUM_VAT110);
    vat0Sum        = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_TAXES_SUM_VAT0);
    vatNoSum       = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_TAXES_SUM_NO);
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
Fptr.endReadRecords();

Также можно запросить счетчики итогов сразу по всем типам расчетов. Для этого нужно вызвать метод beginReadRecords() с типом данных LIBFPTR_PARAM_RECORDS_TYPE равным LIBFPTR_RT_FN_SUM_COUNTERS. В параметре LIBFPTR_PARAM_FN_COUNTERS_TYPE нужно указать тип счетчиков.

Выходным параметрами будут следующие значения:

Параметр Описание Тип
LIBFPTR_PARAM_SHIFT_NUMBER Номер смены int
LIBFPTR_PARAM_RECEIPTS_COUNT Общее количество чеков (включая коррекции) int
LIBFPTR_PARAM_CORRECTIONS_COUNT Количество коррекций int

Каждый успешный вызов метода readNextRecord() заполняет следующие параметры:

Параметр Описание Тип
LIBFPTR_PARAM_RECEIPT_TYPE Тип расчета int
LIBFPTR_PARAM_RECEIPTS_COUNT Общее количество чеков (включая коррекции) int
LIBFPTR_PARAM_CORRECTIONS_COUNT Количество коррекций int
LIBFPTR_PARAM_RECEIPTS_SUM Итоговая сумма чеков (включая коррекции) double
LIBFPTR_PARAM_CORRECTIONS_SUM Сумма коррекций double
LIBFPTR_PARAM_PAYMENTS_SUM_CASH Сумма наличных оплат double
LIBFPTR_PARAM_PAYMENTS_SUM_ELECTRONICALLY Сумма безналичных оплат double
LIBFPTR_PARAM_PAYMENTS_SUM_PREPAID Сумма оплат авансом double
LIBFPTR_PARAM_PAYMENTS_SUM_CREDIT Сумма оплат кредитом double
LIBFPTR_PARAM_PAYMENTS_SUM_OTHER Сумма оплат встречным предоставлением double
LIBFPTR_PARAM_TAXES_SUM_VAT20 Сумма НДС 20% double
LIBFPTR_PARAM_TAXES_SUM_VAT10 Сумма НДС 10% double
LIBFPTR_PARAM_TAXES_SUM_VAT120 Сумма НДС 20/120 double
LIBFPTR_PARAM_TAXES_SUM_VAT110 Сумма НДС 10/110 double
LIBFPTR_PARAM_TAXES_SUM_VAT0 Сумма НДС 0% double
LIBFPTR_PARAM_TAXES_SUM_NO Сумма без НДС double

Тип расчета (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Тип счетчиков ФН (LIBFPTR_PARAM_FN_COUNTERS_TYPE) может принимать следующие значения:

Счетчики количеств операций

Чтение счетчиков количеств операций ФН

// Вспомогательная функция для чтения строковых параметров
std::wstring readStringAttribute(libfptr_handle fptr, int paramNumber) {
    std::vector<wchar_t> str(32);
    int size = libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    if (size > str.size()) {
        str.resize(size);
        libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    }
    return std::wstring(&str[0]);
}

// Вспомогательная функция чтения следующей записи
int readNextRecord(libfptr_handle fptr, const std::wstring &recordsID) {
    libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
    return libfptr_read_next_record(fptr);
}

libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECORDS_TYPE, LIBFPTR_RT_FN_QUANTITY_COUNTERS);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_COUNTERS_TYPE, LIBFPTR_FNCT_SHIFT);
libfptr_begin_read_records(handle);
std::wstring recordsID = readStringAttribute(fptr, LIBFPTR_PARAM_RECORDS_ID);
uint shiftNumber       = libfptr_get_param_int(fptr, LIBFPTR_PARAM_SHIFT_NUMBER);
uint countAll          = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPTS_COUNT);

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{    
    uint receiptType = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE);
    uint count       = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPTS_COUNT);
    uint corrections = libfptr_get_param_int(fptr, LIBFPTR_PARAM_CORRECTIONS_COUNT);
}

libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
libfptr_end_read_records(fptr);
# Вспомогательная функция чтения следующей записи
def readNextRecord(fptr, recordsID):
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.readNextRecord()

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_QUANTITY_COUNTERS)
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, IFptr.LIBFPTR_FNCT_SHIFT)
fptr.beginReadRecords()
recordsID   = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID)
shiftNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER)
countAll    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT)

while readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK:
    receiptType = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE)
    count       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT)
    corrections = fptr.getParamInt(IFptr.LIBFPTR_PARAM_CORRECTIONS_COUNT)

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.endReadRecords()
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_QUANTITY_COUNTERS);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, IFptr.LIBFPTR_FNCT_SHIFT);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);
long shiftNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER);
long countAll    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    long receiptType = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE);
    long count       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
    long corrections = fptr.getParamInt(IFptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_QUANTITY_COUNTERS);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, IFptr.LIBFPTR_FNCT_SHIFT);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);
long shiftNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_NUMBER);
long countAll    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    long receiptType = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE);
    long count       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
    long corrections = fptr.getParamInt(IFptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr *fptr, NSString *recordsID) {
    [fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
    return [fptr readNextRecord];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_TYPE, intParam:LIBFPTR_RT_FN_QUANTITY_COUNTERS];
[fptr setParam:LIBFPTR_PARAM_FN_COUNTERS_TYPE, intParam:LIBFPTR_FNCT_SHIFT];
[fptr beginReadRecords];
NSString *recordsID = [fptr getParamString:LIBFPTR_PARAM_RECORDS_ID];
uint shiftNumber    = [fptr getParamInt:LIBFPTR_PARAM_SHIFT_NUMBER];
uint countAll       = [fptr getParamInt:LIBFPTR_PARAM_RECEIPTS_COUNT];

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{    
    uint receiptType = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_TYPE];
    uint count       = [fptr getParamInt:LIBFPTR_PARAM_RECEIPTS_COUNT];
    uint corrections = [fptr getParamInt:LIBFPTR_PARAM_CORRECTIONS_COUNT];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
[fptr endReadRecords];
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_TYPE, Constants.LIBFPTR_RT_FN_QUANTITY_COUNTERS);
fptr.setParam(Constants.LIBFPTR_PARAM_FN_COUNTERS_TYPE, Constants.LIBFPTR_FNCT_SHIFT);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(Constants.LIBFPTR_PARAM_RECORDS_ID);
uint shiftNumber = fptr.getParamInt(Constants.LIBFPTR_PARAM_SHIFT_NUMBER);
uint countAll    = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPTS_COUNT);

while (readNextRecord(fptr, recordsID) == Constants.LIBFPTR_OK) {
    uint receiptType = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_TYPE);
    uint count       = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPTS_COUNT);
    uint corrections = fptr.getParamInt(Constants.LIBFPTR_PARAM_CORRECTIONS_COUNT);
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
function readNextRecord(fptr: OleVariant; recordsID: String): integer;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    Result := fptr.readNextRecord;
end;

var
    receiptType, count, countAll, shiftNumber: Integer;
    sum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_TYPE, fptr.LIBFPTR_RT_FN_QUANTITY_COUNTERS);
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, fptr.LIBFPTR_FNCT_SHIFT);
    fptr.beginReadRecords;
    recordsID   := fptr.getParamString(fptr.LIBFPTR_PARAM_RECORDS_ID);
    shiftNumber := fptr.getParamInt(fptr.LIBFPTR_PARAM_SHIFT_NUMBER);
    countAll    := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);

    While readNextRecord(fptr, recordsID) = fptr.LIBFPTR_OK do
    begin
        receiptType := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);
        count       := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
        corrections := fptr.getParamInt(fptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);
    end;

    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    fptr.endReadRecords;
end;
// Вспомогательная функция чтения следующей записи
func readNextRecord(fptr *fptr10.IFptr, recordsID string) error {
    fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.ReadNextRecord()
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_TYPE, fptr10.LIBFPTR_RT_FN_QUANTITY_COUNTERS)
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_COUNTERS_TYPE, fptr10.LIBFPTR_FNCT_SHIFT)
fptr.BeginReadRecords()
recordsID   := fptr.GetParamString(fptr10.LIBFPTR_PARAM_RECORDS_ID)
shiftNumber := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_SHIFT_NUMBER)
countAll    := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPTS_SUM)

for readNextRecord(fptr, recordsID) == nil {
    receiptType = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE)
    count       = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPTS_COUNT)
    corrections = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_CORRECTIONS_COUNT)
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.EndReadRecords()
// Вспомогательная функция чтения следующей записи
function readNextRecord(recordsID) {
    Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return Fptr.readNextRecord();
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_TYPE, Fptr.LIBFPTR_RT_FN_QUANTITY_COUNTERS);
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_COUNTERS_TYPE, Fptr.LIBFPTR_FNCT_SHIFT);
Fptr.beginReadRecords();
recordsID   = Fptr.getParamString(Fptr.LIBFPTR_PARAM_RECORDS_ID);
shiftNumber = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_SHIFT_NUMBER);
countAll    = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);

while (readNextRecord(recordsID) == Fptr.LIBFPTR_OK) {
    receiptType = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE);
    count       = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
    corrections = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_CORRECTIONS_COUNT);
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
Fptr.endReadRecords();

Для чтения счетчиков количеств операций ФН необходимо вызвать метод beginReadRecords() с типом данных LIBFPTR_PARAM_RECORDS_TYPE равным LIBFPTR_RT_FN_QUANTITY_COUNTERS. В параметре LIBFPTR_PARAM_FN_COUNTERS_TYPE нужно указать тип счетчиков.

Выходным параметрами будут следующие значения:

Параметр Описание Тип
LIBFPTR_PARAM_SHIFT_NUMBER Номер смены int
LIBFPTR_PARAM_RECEIPTS_COUNT Общее количество чеков (включая коррекции) int

Каждый успешный вызов метода readNextRecord() заполняет следующие параметры:

Параметр Описание Тип
LIBFPTR_PARAM_RECEIPT_TYPE Тип расчета int
LIBFPTR_PARAM_RECEIPTS_COUNT Общее количество чеков (включая коррекции) int
LIBFPTR_PARAM_CORRECTIONS_COUNT Количество коррекций int

Тип расчета (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Тип счетчиков ФН (LIBFPTR_PARAM_FN_COUNTERS_TYPE) может принимать следующие значения:

Счетчики итогов непереданных документов

Чтение счетчиков итогов непереданных документов ФН

// Вспомогательная функция для чтения строковых параметров
std::wstring readStringAttribute(libfptr_handle fptr, int paramNumber) {
    std::vector<wchar_t> str(32);
    int size = libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    if (size > str.size()) {
        str.resize(size);
        libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    }
    return std::wstring(&str[0]);
}

// Вспомогательная функция чтения следующей записи
int readNextRecord(libfptr_handle fptr, const std::wstring &recordsID) {
    libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
    return libfptr_read_next_record(fptr);
}

libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECORDS_TYPE, LIBFPTR_RT_FN_UNSENT_DOCS_COUNTERS);
libfptr_begin_read_records(handle);
std::wstring recordsID = readStringAttribute(fptr, LIBFPTR_PARAM_RECORDS_ID);
uint countAll = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPTS_COUNT);

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{    
    uint receiptType = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE);
    uint count       = libfptr_get_param_int(fptr, LIBFPTR_PARAM_RECEIPTS_COUNT);
    double sum       = libfptr_get_param_double(fptr, LIBFPTR_PARAM_RECEIPTS_SUM);
}

libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
libfptr_end_read_records(fptr);
# Вспомогательная функция чтения следующей записи
def readNextRecord(fptr, recordsID):
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.readNextRecord()

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_UNSENT_DOCS_COUNTERS)
fptr.beginReadRecords()
recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID)
countAll = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT)

while readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK:
    receiptType = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE)
    count       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT)
    sum         = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPTS_SUM)

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.endReadRecords()
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_UNSENT_DOCS_COUNTERS);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);
long countAll = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    long receiptType = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE);
    long count       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
    double sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPTS_SUM);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_UNSENT_DOCS_COUNTERS);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);
long countAll = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    long receiptType = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE);
    long count       = fptr.getParamInt(IFptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
    double sum       = fptr.getParamDouble(IFptr.LIBFPTR_PARAM_RECEIPTS_SUM);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr *fptr, NSString *recordsID) {
    [fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
    return [fptr readNextRecord];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_TYPE, intParam:LIBFPTR_RT_FN_UNSENT_DOCS_COUNTERS];
[fptr beginReadRecords];
NSString *recordsID = [fptr getParamString:LIBFPTR_PARAM_RECORDS_ID];
uint countAll = [fptr getParamInt:LIBFPTR_PARAM_RECEIPTS_COUNT];

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{    
    uint receiptType = [fptr getParamInt:LIBFPTR_PARAM_RECEIPT_TYPE];
    uint count       = [fptr getParamInt:LIBFPTR_PARAM_RECEIPTS_COUNT];
    double sum       = [fptr getParamDouble:LIBFPTR_PARAM_RECEIPTS_SUM];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
[fptr endReadRecords];
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_TYPE, Constants.LIBFPTR_RT_FN_UNSENT_DOCS_COUNTERS);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(Constants.LIBFPTR_PARAM_RECORDS_ID);
uint countAll = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPTS_COUNT);

while (readNextRecord(fptr, recordsID) == Constants.LIBFPTR_OK) {
    uint receiptType = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_TYPE);
    uint count       = fptr.getParamInt(Constants.LIBFPTR_PARAM_RECEIPTS_COUNT);
    double sum       = fptr.getParamDouble(Constants.LIBFPTR_PARAM_RECEIPTS_SUM);
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
function readNextRecord(fptr: OleVariant; recordsID: String): integer;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    Result := fptr.readNextRecord;
end;

var
    receiptType, count, countAll: Integer;
    sum: Double;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_TYPE, fptr.LIBFPTR_RT_FN_UNSENT_DOCS_COUNTERS);
    fptr.beginReadRecords;
    recordsID := fptr.getParamString(fptr.LIBFPTR_PARAM_RECORDS_ID);
    countAll := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);

    While readNextRecord(fptr, recordsID) = fptr.LIBFPTR_OK do
    begin
        receiptType := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPT_TYPE);
        count       := fptr.getParamInt(fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
        sum         := fptr.getParamDouble(fptr.LIBFPTR_PARAM_RECEIPTS_SUM);
    end;

    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    fptr.endReadRecords;
end;
// Вспомогательная функция чтения следующей записи
func readNextRecord(fptr *fptr10.IFptr, recordsID string) error {
    fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.ReadNextRecord()
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_TYPE, fptr10.LIBFPTR_RT_FN_UNSENT_DOCS_COUNTERS)
fptr.BeginReadRecords()
recordsID := fptr.GetParamString(fptr10.LIBFPTR_PARAM_RECORDS_ID)
countAll := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPTS_COUNT)

for readNextRecord(fptr, recordsID) == nil {
    receiptType = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE)
    count       = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_RECEIPTS_COUNT)
    sum         = fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_RECEIPTS_SUM)
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.EndReadRecords()
// Вспомогательная функция чтения следующей записи
function readNextRecord(recordsID) {
    Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return Fptr.readNextRecord();
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_TYPE, Fptr.LIBFPTR_RT_FN_UNSENT_DOCS_COUNTERS);
Fptr.beginReadRecords();
recordsID = Fptr.getParamString(Fptr.LIBFPTR_PARAM_RECORDS_ID);
countAll = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);

while (readNextRecord(recordsID) == Fptr.LIBFPTR_OK) {
    receiptType = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE);
    count       = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_RECEIPTS_COUNT);
    sum         = Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_RECEIPTS_SUM);
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
Fptr.endReadRecords();

Для чтения счетчиков количеств операций ФН необходимо вызвать метод beginReadRecords() с типом данных LIBFPTR_PARAM_RECORDS_TYPE равным LIBFPTR_RT_FN_UNSENT_DOCS_COUNTERS.

Выходным параметрами будут следующие значения:

Параметр Описание Тип
LIBFPTR_PARAM_RECEIPTS_COUNT Общее количество чеков (включая коррекции) int

Каждый успешный вызов метода readNextRecord() заполняет следующие параметры:

Параметр Описание Тип
LIBFPTR_PARAM_RECEIPT_TYPE Тип расчета int
LIBFPTR_PARAM_RECEIPTS_COUNT Общее количество чеков (включая коррекции) int
LIBFPTR_PARAM_RECEIPTS_SUM Итоговая сумма чеков (включая коррекции) double

Тип расчета (LIBFPTR_PARAM_RECEIPT_TYPE) может принимать следующие значения:

Регистрация ККТ

Регистрация ККТ

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_OPERATION_TYPE, LIBFPTR_FNOP_REGISTRATION);

libfptr_set_param_str(fptr, 1060, L"www.nalog.ru");

libfptr_set_param_str(fptr, 1009, L"Улица свободы, 42");
libfptr_set_param_str(fptr, 1018, L"135792468001");
libfptr_set_param_str(fptr, 1048, L"Иванов Иван Иванович");
libfptr_set_param_int(fptr, 1062, LIBFPTR_TT_OSN | LIBFPTR_TT_PATENT);
libfptr_set_param_str(fptr, 1117, L"my-company@mail.ru");
libfptr_set_param_int(fptr, 1057, LIBFPTR_AT_BANK_PAYING_AGENT | LIBFPTR_AT_PAYING_AGENT | LIBFPTR_AT_ATTORNEY);

libfptr_set_param_str(fptr, 1187, L"Улица свободы, 45");
libfptr_set_param_str(fptr, 1037, L"12345678900987654321");
libfptr_set_param_int(fptr, 1209, LIBFPTR_FFD_1_0_5);
libfptr_set_param_bool(fptr, 1001, false);
libfptr_set_param_str(fptr, 1036, L"513");
libfptr_set_param_bool(fptr, 1002, false);
libfptr_set_param_bool(fptr, 1056, false);
libfptr_set_param_bool(fptr, 1108, false);
libfptr_set_param_bool(fptr, 1109, false);
libfptr_set_param_bool(fptr, 1110, false);
libfptr_set_param_bool(fptr, 1126, false);
libfptr_set_param_bool(fptr, 1193, true);
libfptr_set_param_bool(fptr, 1207, false);
libfptr_set_param_bool(fptr, 1221, false);

libfptr_set_param_str(fptr, 1017, L"9715260691");
libfptr_set_param_str(fptr, 1046, L"ООО \"Эвотор ОФД\"");

libfptr_fn_operation(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_OPERATION_TYPE, IFptr.LIBFPTR_FNOP_REGISTRATION)

fptr.setParam(1060, "www.nalog.ru")

fptr.setParam(1009, "Улица свободы, 42")
fptr.setParam(1018, "135792468001")
fptr.setParam(1048, "Иванов Иван Иванович")
fptr.setParam(1062, IFptr.LIBFPTR_TT_OSN | IFptr.LIBFPTR_TT_PATENT)
fptr.setParam(1117, "my-company@mail.ru")
fptr.setParam(1057, IFptr.LIBFPTR_AT_BANK_PAYING_AGENT | IFptr.LIBFPTR_AT_PAYING_AGENT | IFptr.LIBFPTR_AT_ATTORNEY)

fptr.setParam(1187, "Улица свободы, 45")
fptr.setParam(1037, "12345678900987654321")
fptr.setParam(1209, IFptr.LIBFPTR_FFD_1_0_5)
fptr.setParam(1001, False)
fptr.setParam(1036, "513")
fptr.setParam(1002, False)
fptr.setParam(1056, False)
fptr.setParam(1108, False)
fptr.setParam(1109, False)
fptr.setParam(1110, False)
fptr.setParam(1126, False)
fptr.setParam(1193, True)
fptr.setParam(1207, False)
fptr.setParam(1221, False)

fptr.setParam(1017, "9715260691")
fptr.setParam(1046, "ООО \"Эвотор ОФД\"")

fptr.fnOperation()
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_OPERATION_TYPE, IFptr.LIBFPTR_FNOP_REGISTRATION);

fptr.setParam(1060, "www.nalog.ru");

fptr.setParam(1009, "Улица свободы, 42");
fptr.setParam(1018, "135792468001");
fptr.setParam(1048, "Иванов Иван Иванович");
fptr.setParam(1062, IFptr.LIBFPTR_TT_OSN | IFptr.LIBFPTR_TT_PATENT);
fptr.setParam(1117, "my-company@mail.ru");
fptr.setParam(1057, IFptr.LIBFPTR_AT_BANK_PAYING_AGENT | IFptr.LIBFPTR_AT_PAYING_AGENT | IFptr.LIBFPTR_AT_ATTORNEY);

fptr.setParam(1187, "Улица свободы, 45");
fptr.setParam(1037, "12345678900987654321");
fptr.setParam(1209, IFptr.LIBFPTR_FFD_1_0_5);
fptr.setParam(1001, false);
fptr.setParam(1036, "513");
fptr.setParam(1002, false);
fptr.setParam(1056, false);
fptr.setParam(1108, false);
fptr.setParam(1109, false);
fptr.setParam(1110, false);
fptr.setParam(1126, false);
fptr.setParam(1193, true);
fptr.setParam(1207, false);
fptr.setParam(1221, false);

fptr.setParam(1017, "9715260691");
fptr.setParam(1046, "ООО \"Эвотор ОФД\"");

fptr.fnOperation()
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_OPERATION_TYPE, IFptr.LIBFPTR_FNOP_REGISTRATION);

fptr.setParam(1060, "www.nalog.ru");

fptr.setParam(1009, "Улица свободы, 42");
fptr.setParam(1018, "135792468001");
fptr.setParam(1048, "Иванов Иван Иванович");
fptr.setParam(1062, IFptr.LIBFPTR_TT_OSN | IFptr.LIBFPTR_TT_PATENT);
fptr.setParam(1117, "my-company@mail.ru");
fptr.setParam(1057, IFptr.LIBFPTR_AT_BANK_PAYING_AGENT | IFptr.LIBFPTR_AT_PAYING_AGENT | IFptr.LIBFPTR_AT_ATTORNEY);

fptr.setParam(1187, "Улица свободы, 45");
fptr.setParam(1037, "12345678900987654321");
fptr.setParam(1209, IFptr.LIBFPTR_FFD_1_0_5);
fptr.setParam(1001, false);
fptr.setParam(1036, "513");
fptr.setParam(1002, false);
fptr.setParam(1056, false);
fptr.setParam(1108, false);
fptr.setParam(1109, false);
fptr.setParam(1110, false);
fptr.setParam(1126, false);
fptr.setParam(1193, true);
fptr.setParam(1207, false);
fptr.setParam(1221, false);

fptr.setParam(1017, "9715260691");
fptr.setParam(1046, "ООО \"Эвотор ОФД\"");

fptr.fnOperation();
[fptr setParam:LIBFPTR_PARAM_FN_OPERATION_TYPE, intParam:LIBFPTR_FNOP_REGISTRATION];

[fptr setParam:1060, NSStringParam:@"www.nalog.ru"];

[fptr setParam:1009, NSStringParam:@"Улица свободы, 42"];
[fptr setParam:1018, NSStringParam:@"135792468001"];
[fptr setParam:1048, NSStringParam:@"Иванов Иван Иванович"];
[fptr setParam:1062, intParam:LIBFPTR_TT_OSN | LIBFPTR_TT_PATENT];
[fptr setParam:1117, NSStringParam:@"my-company@mail.ru"];
[fptr setParam:1057, intParam:LIBFPTR_AT_BANK_PAYING_AGENT | LIBFPTR_AT_PAYING_AGENT | LIBFPTR_AT_ATTORNEY];

[fptr setParam:1187, NSStringParam:@"Улица свободы, 45"];
[fptr setParam:1037, NSStringParam:@"12345678900987654321"];
[fptr setParam:1209, intParam:LIBFPTR_FFD_1_0_5];
[fptr setParam:1001, boolParam:false];
[fptr setParam:1036, NSStringParam:@"513"];
[fptr setParam:1002, boolParam:false];
[fptr setParam:1056, boolParam:false];
[fptr setParam:1108, boolParam:false];
[fptr setParam:1109, boolParam:false];
[fptr setParam:1110, boolParam:false];
[fptr setParam:1126, boolParam:false];
[fptr setParam:1193, boolParam:true];
[fptr setParam:1207, boolParam:false];
[fptr setParam:1221, boolParam:false];

[fptr setParam:1017, NSStringParam:@"9715260691"];
[fptr setParam:1046, NSStringParam:@"ООО \"Эвотор ОФД\""];

[fptr fnOperation];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_OPERATION_TYPE, Constants.LIBFPTR_FNOP_REGISTRATION);

fptr.setParam(1060, "www.nalog.ru");

fptr.setParam(1009, "Улица свободы, 42");
fptr.setParam(1018, "135792468001");
fptr.setParam(1048, "Иванов Иван Иванович");
fptr.setParam(1062, Constants.LIBFPTR_TT_OSN | Constants.LIBFPTR_TT_PATENT);
fptr.setParam(1117, "my-company@mail.ru");
fptr.setParam(1057, Constants.LIBFPTR_AT_BANK_PAYING_AGENT | Constants.LIBFPTR_AT_PAYING_AGENT | Constants.LIBFPTR_AT_ATTORNEY);

fptr.setParam(1187, "Улица свободы, 45");
fptr.setParam(1037, "12345678900987654321");
fptr.setParam(1209, Constants.LIBFPTR_FFD_1_0_5);
fptr.setParam(1001, false);
fptr.setParam(1036, "513");
fptr.setParam(1002, false);
fptr.setParam(1056, false);
fptr.setParam(1108, false);
fptr.setParam(1109, false);
fptr.setParam(1110, false);
fptr.setParam(1126, false);
fptr.setParam(1193, true);
fptr.setParam(1207, false);
fptr.setParam(1221, false);

fptr.setParam(1017, "9715260691");
fptr.setParam(1046, "ООО \"Эвотор ОФД\"");

fptr.fnOperation();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_OPERATION_TYPE, fptr.LIBFPTR_FNOP_REGISTRATION);

    fptr.setParam(1060, 'www.nalog.ru');

    fptr.setParam(1009, 'Улица свободы, 42');
    fptr.setParam(1018, '135792468001');
    fptr.setParam(1048, 'Иванов Иван Иванович');
    fptr.setParam(1062, fptr.LIBFPTR_TT_OSN or fptr.LIBFPTR_TT_PATENT);
    fptr.setParam(1117, 'my-company@mail.ru');
    fptr.setParam(1057, fptr.LIBFPTR_AT_BANK_PAYING_AGENT or fptr.LIBFPTR_AT_PAYING_AGENT or fptr.LIBFPTR_AT_ATTORNEY);

    fptr.setParam(1187, 'Улица свободы, 45');
    fptr.setParam(1037, '12345678900987654321');
    fptr.setParam(1209, fptr.LIBFPTR_FFD_1_0_5);
    fptr.setParam(1001, False);
    fptr.setParam(1036, '513');
    fptr.setParam(1002, False);
    fptr.setParam(1056, False);
    fptr.setParam(1108, False);
    fptr.setParam(1109, False);
    fptr.setParam(1110, False);
    fptr.setParam(1126, False);
    fptr.setParam(1193, True);
    fptr.setParam(1207, False);
    fptr.setParam(1221, False);

    fptr.setParam(1017, '9715260691');
    fptr.setParam(1046, 'ООО "Эвотор ОФД"');

    fptr.fnOperation;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_OPERATION_TYPE, fptr10.LIBFPTR_FNOP_REGISTRATION)

fptr.SetParam(1060, "www.nalog.ru")

fptr.SetParam(1009, "Улица свободы, 42")
fptr.SetParam(1018, "135792468001")
fptr.SetParam(1048, "Иванов Иван Иванович")
fptr.SetParam(1062, fptr10.LIBFPTR_TT_OSN | fptr10.LIBFPTR_TT_PATENT)
fptr.SetParam(1117, "my-company@mail.ru")
fptr.SetParam(1057, fptr10.LIBFPTR_AT_BANK_PAYING_AGENT | fptr10.LIBFPTR_AT_PAYING_AGENT | fptr10.LIBFPTR_AT_ATTORNEY)

fptr.SetParam(1187, "Улица свободы, 45")
fptr.SetParam(1037, "12345678900987654321")
fptr.SetParam(1209, fptr10.LIBFPTR_FFD_1_0_5)
fptr.SetParam(1001, false)
fptr.SetParam(1036, "513")
fptr.SetParam(1002, false)
fptr.SetParam(1056, false)
fptr.SetParam(1108, false)
fptr.SetParam(1109, false)
fptr.SetParam(1110, false)
fptr.SetParam(1126, false)
fptr.SetParam(1193, true)
fptr.SetParam(1207, false)
fptr.SetParam(1221, false)

fptr.SetParam(1017, "9715260691")
fptr.SetParam(1046, "ООО \"Эвотор ОФД\"")

fptr.FnOperation()
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_OPERATION_TYPE, Fptr.LIBFPTR_FNOP_REGISTRATION);

Fptr.setParam(1060, "www.nalog.ru");

Fptr.setParam(1009, "Улица свободы, 42");
Fptr.setParam(1018, "135792468001");
Fptr.setParam(1048, "Иванов Иван Иванович");
Fptr.setParam(1062, Fptr.LIBFPTR_TT_OSN | Fptr.LIBFPTR_TT_PATENT);
Fptr.setParam(1117, "my-company@mail.ru");
Fptr.setParam(1057, Fptr.LIBFPTR_AT_BANK_PAYING_AGENT | Fptr.LIBFPTR_AT_PAYING_AGENT | Fptr.LIBFPTR_AT_ATTORNEY);

Fptr.setParam(1187, "Улица свободы, 45");
Fptr.setParam(1037, "12345678900987654321");
Fptr.setParam(1209, Constants.LIBFPTR_FFD_1_0_5);
Fptr.setParam(1001, false);
Fptr.setParam(1036, "513");
Fptr.setParam(1002, false);
Fptr.setParam(1056, false);
Fptr.setParam(1108, false);
Fptr.setParam(1109, false);
Fptr.setParam(1110, false);
Fptr.setParam(1126, false);
Fptr.setParam(1193, true);
Fptr.setParam(1207, false);
Fptr.setParam(1221, false);

Fptr.setParam(1017, "9715260691");
Fptr.setParam(1046, "ООО \"Эвотор ОФД\"");

Fptr.fnOperation();

Для регистрации ККТ необходимо вызвать метод fnOperation() с типом операции LIBFPTR_PARAM_FN_OPERATION_TYPE равным LIBFPTR_FNOP_REGISTRATION. Также необходимо указать параметры регистрации:

Параметр Описание Тип
1060 Адрес сайта ФНС string
1009 Адрес расчетов string
1018 ИНН организации string
1048 Название организации string
1062 Системы налогообложения int
1117 E-mail организации string
1057 Признак агента int
1187 Адрес места расчетов string
1037 Регистрационный номер устройства string
1209 Версия ФФД int
1001 Признак автоматического режима bool
1036 Номер автомата string
1002 Признак автономного режима bool
1056 Признак шифрования bool
1108 Признак ККТ для расчетов в сети Интернет bool
1109 Признак расчетов за услуги bool
1110 Признак АС БСО bool
1126 Признак проведения лотерей bool
1193 Признак проведения азартных игр bool
1207 Признак подакцизного товара bool
1221 Признак установки в автомате bool
1017 ИНН ОФД string
1046 Название ОФД string

Значение реквизита 1062 (системы налогообложения) - битовое поле, значениями которого являются одно или несколько из следующих значений:

Значение реквизита 1057 (признак агента) - битовое поле, значениями которого являются одно или несколько из следующих значений:

Реквизит 1209 (версия ФФД) может принимать следующие значения:

На некоторых ККТ возможно отключить печать отчета о регистрации ККТ с помощью установки параметра LIBFPTR_PARAM_REPORT_ELECTRONICALLY в true. Если ККТ не поддерживает такой функционал, параметр будет проигнорирован и отчет будет напечатан.

Перерегистрация ККТ

Для перерегистрации ККТ необходимо вызвать метод fnOperation() с типом операции LIBFPTR_PARAM_FN_OPERATION_TYPE равным LIBFPTR_FNOP_CHANGE_PARAMETERS. Список параметров перерегистрации приведен в разделе Регистрация ККТ.

В случае работы по ФФД 1.0 и 1.05 требуется указать причину перерегистрации в реквизите 1101, который может принимать следующие значения:

В случае работы по ФФД 1.1 требуется указать причины перерегистрации в реквизите 1205 (битовое поле), который может принимать следующие значения:

На некоторых ККТ возможно отключить печать отчета о перерегистрации ККТ с помощью установки параметра LIBFPTR_PARAM_REPORT_ELECTRONICALLY в true. Если ККТ не поддерживает такой функционал, параметр будет проигнорирован и отчет будет напечатан.

Замена ФН

Для регистрации замены ФН необходимо вызвать метод fnOperation() с типом операции LIBFPTR_PARAM_FN_OPERATION_TYPE равным LIBFPTR_FNOP_CHANGE_FN. Список параметров перерегистрации приведен в разделе Регистрация ККТ.

В случае работы по ФФД 1.1 требуется указать причины перерегистрации в реквизите 1205 (битовое поле). Список возможных значений приведен в разделе Перерегистрация ККТ.

На некоторых ККТ возможно отключить печать отчета о регистрации замены ФН с помощью установки параметра LIBFPTR_PARAM_REPORT_ELECTRONICALLY в true. Если ККТ не поддерживает такой функционал, параметр будет проигнорирован и отчет будет напечатан.

Закрытие ФН

Закрытие ФН

libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_OPERATION_TYPE, LIBFPTR_FNOP_CLOSE_ARCHIVE);
libfptr_fn_operation(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_OPERATION_TYPE, IFptr.LIBFPTR_FNOP_CLOSE_ARCHIVE)
fptr.fnOperation()
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_OPERATION_TYPE, IFptr.LIBFPTR_FNOP_CLOSE_ARCHIVE);
fptr.fnOperation();
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_OPERATION_TYPE, IFptr.LIBFPTR_FNOP_CLOSE_ARCHIVE);
fptr.fnOperation();
[fptr setParam:LIBFPTR_PARAM_FN_OPERATION_TYPE, intParam:LIBFPTR_FNOP_CLOSE_ARCHIVE];
[fptr fnOperation];
fptr.setParam(Constants.LIBFPTR_PARAM_FN_OPERATION_TYPE, Constants.LIBFPTR_FNOP_CLOSE_ARCHIVE);
fptr.fnOperation();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FN_OPERATION_TYPE, fptr.LIBFPTR_FNOP_CLOSE_ARCHIVE);
    fptr.fnOperation;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_OPERATION_TYPE, fptr10.LIBFPTR_FNOP_CLOSE_ARCHIVE)
fptr.FnOperation()
Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_OPERATION_TYPE, Fptr.LIBFPTR_FNOP_CLOSE_ARCHIVE);
Fptr.fnOperation();

Для закрытия ФН необходимо вызвать метод fnOperation() с типом операции LIBFPTR_PARAM_FN_OPERATION_TYPE равным LIBFPTR_FNOP_CLOSE_ARCHIVE.

На некоторых ККТ возможно отключить печать отчета о закрытии ФН с помощью установки параметра LIBFPTR_PARAM_REPORT_ELECTRONICALLY в true. Если ККТ не поддерживает такой функционал, параметр будет проигнорирован и отчет будет напечатан.

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

Печать клише

Печать клише

libfptr_print_cliche(fptr);
fptr.printCliche()
fptr.printCliche();
fptr.printCliche();
[fptr printCliche];
fptr.printCliche();
begin
    fptr.printCliche;
end;
fptr.PrintCliche()
Fptr.printCliche();

Для печати запрограммированного в ККТ клише необходимо вызвать метод printCliche().

Клише автоматически печатается при закрытии всех документов (и фискальных, и нефискальных).

Открытие нефискального документа

Открытие нефискального документа

libfptr_begin_nonfiscal_document(fptr);
fptr.beginNonfiscalDocument()
fptr.beginNonfiscalDocument();
fptr.beginNonfiscalDocument();
[fptr beginNonfiscalDocument];
fptr.beginNonfiscalDocument();
begin
    fptr.beginNonfiscalDocument;
end;
fptr.BeginNonfiscalDocument()
Fptr.beginNonfiscalDocument();

Для открытия нефискального документа необходимо вызвать метод beginNonfiscalDocument().

Закрытие нефискального документа

Закрытие нефискального документа

libfptr_end_nonfiscal_document(fptr);
fptr.endNonfiscalDocument()
fptr.endNonfiscalDocument();
fptr.endNonfiscalDocument();
[fptr endNonfiscalDocument];
fptr.endNonfiscalDocument();
begin
    fptr.endNonfiscalDocument;
end;
fptr.EndNonfiscalDocument()
Fptr.endNonfiscalDocument();

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

libfptr_set_param_bool(fptr, LIBFPTR_PARAM_PRINT_FOOTER, false);
libfptr_end_nonfiscal_document(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_PRINT_FOOTER, False)
fptr.endNonfiscalDocument()
fptr.setParam(IFptr.LIBFPTR_PARAM_PRINT_FOOTER, false);
fptr.endNonfiscalDocument();
fptr.setParam(IFptr.LIBFPTR_PARAM_PRINT_FOOTER, false);
fptr.endNonfiscalDocument();
[fptr setParam:LIBFPTR_PARAM_PRINT_FOOTER, boolParam:false];
[fptr endNonfiscalDocument];
fptr.setParam(Constants.LIBFPTR_PARAM_PRINT_FOOTER, false);
fptr.endNonfiscalDocument();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_PRINT_FOOTER, False);
    fptr.endNonfiscalDocument;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_PRINT_FOOTER, false)
fptr.EndNonfiscalDocument()
Fptr.setParam(Fptr.LIBFPTR_PARAM_PRINT_FOOTER, false);
Fptr.endNonfiscalDocument();

Для закрытия нефискального документа необходимо вызвать метод endNonfiscalDocument().

Параметр Описание Тип Значение по умолчанию
LIBFPTR_PARAM_PRINT_FOOTER Печатать подвал документа bool true

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

Печать текста

Печать строки

libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"Строка");
libfptr_print_text(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка")
fptr.printText()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка");
fptr.printText();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка");
fptr.printText();
[fptr setParam:LIBFPTR_PARAM_TEXT, NSStringParam:@"Строка"];
[fptr printText];
fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "Строка");
fptr.printText();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'Строка');
    fptr.printText;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "Строка")
fptr.PrintText()
Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "Строка");
Fptr.printText();

Печать строки с выравниванием по центру

libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"Строка");
libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_CENTER);
libfptr_print_text(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка")
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
fptr.printText()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
fptr.printText();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
fptr.printText();
[fptr setParam:LIBFPTR_PARAM_TEXT, NSStringParam:@"Строка"];
[fptr setParam:LIBFPTR_PARAM_ALIGNMENT, intParam:LIBFPTR_ALIGNMENT_CENTER];
[fptr printText];
fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "Строка");
fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_CENTER);
fptr.printText();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'Строка');
    fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_CENTER);
    fptr.printText;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "Строка")
fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_CENTER)
fptr.PrintText()
Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "Строка");
fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Fptr.LIBFPTR_ALIGNMENT_CENTER);
Fptr.printText();

Печать строки с форматированием

libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"Строка");
libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_RIGHT);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_FONT, 2);
libfptr_set_param_bool(fptr, LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, true);
libfptr_set_param_bool(fptr, LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT, true);
libfptr_print_text(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка")
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT)
fptr.setParam(IFptr.LIBFPTR_PARAM_FONT, 2)
fptr.setParam(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, True)
fptr.setParam(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT, True)
fptr.printText()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_FONT, 2);
fptr.setParam(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, true);
fptr.setParam(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT, true);
fptr.printText();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_FONT, 2);
fptr.setParam(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, true);
fptr.setParam(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT, true);
fptr.printText();
[fptr setParam:LIBFPTR_PARAM_TEXT, NSStringParam:@"Строка"];
[fptr setParam:LIBFPTR_PARAM_ALIGNMENT, intParam:LIBFPTR_ALIGNMENT_RIGHT];
[fptr setParam:LIBFPTR_PARAM_FONT, intParam:2];
[fptr setParam:LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, boolParam:true];
[fptr setParam:LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT, boolParam:true];
[fptr printText];
fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "Строка");
fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(Constants.LIBFPTR_PARAM_FONT, 2);
fptr.setParam(Constants.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, true);
fptr.setParam(Constants.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT, true);
fptr.printText();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'Строка');
    fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_RIGHT);
    fptr.setParam(fptr.LIBFPTR_PARAM_FONT, 2);
    fptr.setParam(fptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, True);
    fptr.setParam(fptr.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT, True);
    fptr.printText;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "Строка")
fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_RIGHT)
fptr.SetParam(fptr10.LIBFPTR_PARAM_FONT, 2)
fptr.SetParam(fptr10.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, true)
fptr.SetParam(fptr10.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT, true)
fptr.PrintText()
Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "Строка");
Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Fptr.LIBFPTR_ALIGNMENT_RIGHT);
Fptr.setParam(Fptr.LIBFPTR_PARAM_FONT, 2);
Fptr.setParam(Fptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH, true);
Fptr.setParam(Fptr.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT, true);
Fptr.printText();

Промотка чековой ленты на одну строку (пустую)

libfptr_print_text(fptr);
fptr.printText()
fptr.printText();
fptr.printText();
[fptr printText];
fptr.printText();
begin
    fptr.printText;
end;
fptr.PrintText()
Fptr.printText();

Для печати строки необходимо вызвать метод printText() и задать следующие параметры:

Параметр Описание Тип Значение по умолчанию
LIBFPTR_PARAM_TEXT Строка для печати string Пустая строка
LIBFPTR_PARAM_ALIGNMENT Выравнивание int LIBFPTR_ALIGNMENT_LEFT
LIBFPTR_PARAM_TEXT_WRAP Перенос строки int LIBFPTR_TW_NONE
LIBFPTR_PARAM_FONT Номер шрифта int Стандартный для ККТ шрифт
LIBFPTR_PARAM_FONT_DOUBLE_WIDTH Двойная ширина bool false
LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT Двойная высота bool false
LIBFPTR_PARAM_LINESPACING Межстрочный интервал int Стандартный для ККТ интервал
LIBFPTR_PARAM_BRIGHTNESS Яркость int Стандартная для ККТ яркость
LIBFPTR_PARAM_STORE_IN_JOURNAL Сохранять в электронном журнале bool Если печать происходит в открытом чеке, true. Иначе false

Выравнивание LIBFPTR_PARAM_ALIGNMENT может принимать следующие значения:

Перенос LIBFPTR_PARAM_TEXT_WRAP может принимать следующие значения:

Порядок переноса строк:

Возможные значения остальных параметров зависят от модели ККТ. Если какие-то из параметров не удается применить к строке на используемой ККТ, ошибки выдано не будет и параметр не применится.

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

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

libfptr_set_param_str(fptr, LIBFPTR_PARAM_BARCODE, L"123456789012");
libfptr_set_param_int(fptr, LIBFPTR_PARAM_BARCODE_TYPE, LIBFPTR_BT_EAN_13);
libfptr_print_barcode(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE, "123456789012")
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE_TYPE, IFptr.LIBFPTR_BT_EAN_13)
fptr.printBarcode()
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE, "123456789012");
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE_TYPE, IFptr.LIBFPTR_BT_EAN_13);
fptr.printBarcode();
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE, "123456789012");
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE_TYPE, IFptr.LIBFPTR_BT_EAN_13);
fptr.printBarcode();
[fptr setParam:LIBFPTR_PARAM_BARCODE, NSStringParam:@"123456789012"];
[fptr setParam:LIBFPTR_PARAM_BARCODE_TYPE, intParam:LIBFPTR_BT_EAN_13];
[fptr printBarcode];
fptr.setParam(Constants.LIBFPTR_PARAM_BARCODE, "123456789012");
fptr.setParam(Constants.LIBFPTR_PARAM_BARCODE_TYPE, Constants.LIBFPTR_BT_EAN_13);
fptr.printBarcode();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_BARCODE, '123456789012');
    fptr.setParam(fptr.LIBFPTR_PARAM_BARCODE_TYPE, fptr.LIBFPTR_BT_EAN_13);
    fptr.printBarcode;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_BARCODE, "123456789012")
fptr.SetParam(fptr10.LIBFPTR_PARAM_BARCODE_TYPE, fptr10.LIBFPTR_BT_EAN_13)
fptr.PrintBarcode()
Fptr.setParam(Fptr.LIBFPTR_PARAM_BARCODE, "123456789012");
Fptr.setParam(Fptr.LIBFPTR_PARAM_BARCODE_TYPE, Fptr.LIBFPTR_BT_EAN_13);
Fptr.printBarcode();

Для печати штрихкода необходимо вызвать метод printBarcode() и задать следующие обязательные параметры:

Параметр Описание Тип
LIBFPTR_PARAM_BARCODE Данные штрихкода string
LIBFPTR_PARAM_BARCODE_TYPE Тип штрихкода int

Тип штрихкода LIBFPTR_PARAM_BARCODE_TYPE может принимать следующие значения:

По умолчанию штрихкод печатается по левому краю, без увеличения.

Также можно изменить параметры печати штрихкода с помощью следующих параметров:

Параметр Описание Тип
LIBFPTR_PARAM_ALIGNMENT Выравнивание штрихкода int
LIBFPTR_PARAM_SCALE Коэффициент увеличения штрихкода int
LIBFPTR_PARAM_LEFT_MARGIN Дополнительный отступ слева int
LIBFPTR_PARAM_BARCODE_INVERT Инверсия цвета bool

Для одномерных штрихкодов дополнительно можно задать следующие параметры:

Параметр Описание Тип
LIBFPTR_PARAM_HEIGHT Высота штрихкода, пикс. int
LIBFPTR_PARAM_BARCODE_PRINT_TEXT Флаг печати данных ШК bool

Для QR-кода дополнительно можно задать следующие параметры:

Параметр Описание Тип
LIBFPTR_PARAM_BARCODE_CORRECTION Коррекция QR-кода int
LIBFPTR_PARAM_BARCODE_VERSION Версия QR-кода int

Для PDF-417 дополнительно можно задать следующие параметры:

Параметр Описание Тип
LIBFPTR_PARAM_BARCODE_CORRECTION Коррекция PDF417 int
LIBFPTR_PARAM_BARCODE_COLUMNS Количество столбцов PDF417 int

Для AZTEC дополнительно можно задать следующие параметры:

Параметр Описание Тип
LIBFPTR_PARAM_BARCODE_CORRECTION Коррекция Aztec int
LIBFPTR_PARAM_BARCODE_VERSION Версия Aztec int

Выравнивание LIBFPTR_PARAM_ALIGNMENT может принимать следующие значения:

Коррекция штрихкода LIBFPTR_PARAM_BARCODE_CORRECTION может принимать следующие значения:

Печать GS1-128

Печать GS1-128

libfptr_set_param_str(fptr, LIBFPTR_PARAM_BARCODE, L"[01]98898765432106[3202]012345[15]991231");
libfptr_set_param_int(fptr, LIBFPTR_PARAM_BARCODE_TYPE, LIBFPTR_BT_GS1_128);
libfptr_print_barcode(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE, "[01]98898765432106[3202]012345[15]991231")
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE_TYPE, IFptr.LIBFPTR_BT_GS1_128)
fptr.printBarcode()
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE, "[01]98898765432106[3202]012345[15]991231");
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE_TYPE, IFptr.LIBFPTR_BT_GS1_128);
fptr.printBarcode();
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE, "[01]98898765432106[3202]012345[15]991231");
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE_TYPE, IFptr.LIBFPTR_BT_GS1_128);
fptr.printBarcode();
[fptr setParam:LIBFPTR_PARAM_BARCODE, NSStringParam:@"[01]98898765432106[3202]012345[15]991231"];
[fptr setParam:LIBFPTR_PARAM_BARCODE_TYPE, intParam:LIBFPTR_BT_GS1_128];
[fptr printBarcode];
fptr.setParam(Constants.LIBFPTR_PARAM_BARCODE, "[01]98898765432106[3202]012345[15]991231");
fptr.setParam(Constants.LIBFPTR_PARAM_BARCODE_TYPE, Constants.LIBFPTR_BT_GS1_128);
fptr.printBarcode();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_BARCODE, '[01]98898765432106[3202]012345[15]991231');
    fptr.setParam(fptr.LIBFPTR_PARAM_BARCODE_TYPE, fptr.LIBFPTR_BT_GS1_128);
    fptr.printBarcode;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_BARCODE, "[01]98898765432106[3202]012345[15]991231")
fptr.SetParam(fptr10.LIBFPTR_PARAM_BARCODE_TYPE, fptr10.LIBFPTR_BT_GS1_128)
fptr.PrintBarcode()
Fptr.setParam(Fptr.LIBFPTR_PARAM_BARCODE, "[01]98898765432106[3202]012345[15]991231");
Fptr.setParam(Fptr.LIBFPTR_PARAM_BARCODE_TYPE, Fptr.LIBFPTR_BT_GS1_128);
Fptr.printBarcode();

Для корректного формирования GS1-128 требуется передача AI (Application Identifiers), которые объясняют, как интерпретировать данные, идущие следом. При печати AI заключаются в круглые скобки. Но, т.к. по стандарту, штрихкод GS1-128 может содержать круглые скобки в данных, в драйвер требуется передавать AI, заключенные в квадратные скобки.

Например, такой ШК может иметь вид [01]98898765432106[3202]012345[15]991231. При этом, напечатан будет текст (01)98898765432106(3202)012345(15)991231.

Печать картинки

Печать картинки

libfptr_set_param_str(fptr, LIBFPTR_PARAM_FILENAME, L"C:\\picture.png");
libfptr_print_picture(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, r"C:\picture.png")
fptr.printPicture()
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, "C:\\picture.png");
fptr.printPicture();
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, "/storage/emulated/0/picture.png");
fptr.printPicture();
[fptr setParam:LIBFPTR_PARAM_FILENAME, NSStringParam:@"/Users/user/picture.png"];
[fptr printPicture];
fptr.setParam(Constants.LIBFPTR_PARAM_FILENAME, "C:\\picture.png");
fptr.printPicture();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FILENAME, 'C:\\picture.png');
    fptr.printPicture;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FILENAME, "C:\\picture.png")
fptr.PrintPicture()
Fptr.setParam(Fptr.LIBFPTR_PARAM_FILENAME, "C:\\picture.png");
Fptr.printBarcode();

Для печати картинки необходимо вызвать метод printPicture() и задать путь к файлу картинки в параметре LIBFPTR_PARAM_FILENAME. Поддерживаются картинки в форматах bmp и png без прозрачности.

Дополнительно можно передать следующие параметры печати:

Параметр Описание Тип
LIBFPTR_PARAM_ALIGNMENT Выравнивание картинки int
LIBFPTR_PARAM_SCALE_PERCENT Масштаб, в процентах int
LIBFPTR_PARAM_LEFT_MARGIN Дополнительный отступ слева int

Выравнивание LIBFPTR_PARAM_ALIGNMENT может принимать следующие значения:

Печать пиксельного буфера

Печать пиксельного буфера

// pixels - Массив пикселей (unsigned char[])
// width - Ширина одной строки пикселей

libfptr_set_param_bytearray(fptr, LIBFPTR_PARAM_PIXEL_BUFFER, &pixels[0], sizeof(pixels));
libfptr_set_param_int(fptr, LIBFPTR_PARAM_WIDTH, width);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_SCALE_PERCENT, 100);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPEAT_NUMBER, 50);
libfptr_print_pixel_buffer(fptr);
# pixels - Массив пикселей (bytearray)
# width - Ширина одной строки пикселей

fptr.setParam(IFptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels)
fptr.setParam(IFptr.LIBFPTR_PARAM_WIDTH, width)
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 100)
fptr.setParam(IFptr.LIBFPTR_PARAM_REPEAT_NUMBER, 50)
fptr.printPixelBuffer()
// pixels - Массив пикселей (byte[])
// width - Ширина одной строки пикселей

fptr.setParam(IFptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
fptr.setParam(IFptr.LIBFPTR_PARAM_WIDTH, width);
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 100);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPEAT_NUMBER, 50);
fptr.printPixelBuffer();
// pixels - Массив пикселей (byte[])
// width - Ширина одной строки пикселей

fptr.setParam(IFptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
fptr.setParam(IFptr.LIBFPTR_PARAM_WIDTH, width);
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 100);
fptr.setParam(IFptr.LIBFPTR_PARAM_REPEAT_NUMBER, 50);
fptr.printPixelBuffer();
// pixels - Массив пикселей (NSData*)
// width - Ширина одной строки пикселей

[fptr setParam:LIBFPTR_PARAM_PIXEL_BUFFER, NSDataParam:pixels];
[fptr setParam:LIBFPTR_PARAM_WIDTH, intParam:width];
[fptr setParam:LIBFPTR_PARAM_ALIGNMENT, intParam:LIBFPTR_ALIGNMENT_CENTER];
[fptr setParam:LIBFPTR_PARAM_SCALE_PERCENT, intParam:100];
[fptr setParam:LIBFPTR_PARAM_REPEAT_NUMBER, intParam:50];
[fptr printPixelBuffer];
// pixels - Массив пикселей (byte[])
// width - Ширина одной строки пикселей

fptr.setParam(Constants.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
fptr.setParam(Constants.LIBFPTR_PARAM_WIDTH, width);
fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_CENTER);
fptr.setParam(Constants.LIBFPTR_PARAM_SCALE_PERCENT, 100);
fptr.setParam(Constants.LIBFPTR_PARAM_REPEAT_NUMBER, 50);
fptr.printPixelBuffer();
// pixels - Массив пикселей (Array of Byte)
// width - Ширина одной строки пикселей

fptr.setParam(fptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
fptr.setParam(fptr.LIBFPTR_PARAM_WIDTH, width);
fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_CENTER);
fptr.setParam(fptr.LIBFPTR_PARAM_SCALE_PERCENT, 100);
fptr.setParam(fptr.LIBFPTR_PARAM_REPEAT_NUMBER, 50);
fptr.printPixelBuffer;
// pixels - Массив пикселей ([]byte)
// width - Ширина одной строки пикселей

fptr.SetParam(fptr10.LIBFPTR_PARAM_PIXEL_BUFFER, pixels)
fptr.SetParam(fptr10.LIBFPTR_PARAM_WIDTH, width)
fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_CENTER)
fptr.SetParam(fptr10.LIBFPTR_PARAM_SCALE_PERCENT, 100)
fptr.SetParam(fptr10.LIBFPTR_PARAM_REPEAT_NUMBER, 50)
fptr.PrintPixelBuffer()
// pixels - Массив пикселей (Uint8Array)
// width - Ширина одной строки пикселей

Fptr.setParam(Fptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
Fptr.setParam(Fptr.LIBFPTR_PARAM_WIDTH, width);
Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Fptr.LIBFPTR_ALIGNMENT_CENTER);
Fptr.setParam(Fptr.LIBFPTR_PARAM_SCALE_PERCENT, 100);
Fptr.setParam(Fptr.LIBFPTR_PARAM_REPEAT_NUMBER, 50);
Fptr.printPixelBuffer();

Для печати пиксельного буфера необходимо вызвать метод printPixelBuffer(). Можно печатать как одиночные пиксельные строки, так и полноценные монохромные изображения. Обязательные входные параметры:

Дополнительно можно передать следующие параметры:

Параметр Описание Тип
LIBFPTR_PARAM_ALIGNMENT Выравнивание буфера пикселей int
LIBFPTR_PARAM_SCALE_PERCENT Масштаб, в процентах int
LIBFPTR_PARAM_LEFT_MARGIN Дополнительный отступ слева int
LIBFPTR_PARAM_REPEAT_NUMBER Количество повторов печати буфера int

Выравнивание LIBFPTR_PARAM_ALIGNMENT может принимать следующие значения:

LIBFPTR_PARAM_REPEAT_NUMBER можно применять для печати одномерных ШК, формирование которых драйвер не поддерживает.

Подробнее о формате массива пикселей в приложении.

Печать картинки из памяти

Печать картинки из памяти

libfptr_set_param_int(fptr, LIBFPTR_PARAM_PICTURE_NUMBER, 1);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_CENTER);
libfptr_print_picture_by_number(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1)
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
fptr.printPictureByNumber()
fptr.setParam(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
fptr.printPictureByNumber();
fptr.setParam(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
fptr.printPictureByNumber();
[fptr setParam:LIBFPTR_PARAM_PICTURE_NUMBER, intParam:1];
[fptr setParam:LIBFPTR_PARAM_ALIGNMENT, intParam:LIBFPTR_ALIGNMENT_CENTER];
[fptr printPictureByNumber];
fptr.setParam(Constants.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_CENTER);
fptr.printPictureByNumber();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
    fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_CENTER);
    fptr.printPictureByNumber;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_PICTURE_NUMBER, 1)
fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_CENTER)
fptr.PrintPictureByNumber()
Fptr.setParam(Fptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Fptr.LIBFPTR_ALIGNMENT_CENTER);
Fptr.printPictureByNumber();

Для печати картинки из памяти ККТ необходимо вызвать метод printPictureByNumber() и задать номер картинки в параметре LIBFPTR_PARAM_PICTURE_NUMBER.

Дополнительно можно передать следующие параметры печати:

Параметр Описание Тип
LIBFPTR_PARAM_ALIGNMENT Выравнивание картинки int
LIBFPTR_PARAM_LEFT_MARGIN Дополнительный отступ слева int

Выравнивание LIBFPTR_PARAM_ALIGNMENT может принимать следующие значения:

Печать текста рядом с ШК

Ожидаемый результат

| ████████   Строка 1 |
| ██    ██   Строка 2 |
| █ (QR) █   Строка 3 |
| ██     █   Строка 4 |
| ████████   Строка 5 |

Печать текста рядом с ШК

libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"Строка 1");
libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_RIGHT);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_DEFER, LIBFPTR_DEFER_OVERLAY);
libfptr_print_text(fptr);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"Строка 2");
libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_RIGHT);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_DEFER, LIBFPTR_DEFER_OVERLAY);
libfptr_print_text(fptr);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"Строка 3");
libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_RIGHT);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_DEFER, LIBFPTR_DEFER_OVERLAY);
libfptr_print_text(fptr);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"Строка 4");
libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_RIGHT);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_DEFER, LIBFPTR_DEFER_OVERLAY);
libfptr_print_text(fptr);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"Строка 5");
libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_RIGHT);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_DEFER, LIBFPTR_DEFER_OVERLAY);
libfptr_print_text(fptr);

libfptr_set_param_str(fptr, LIBFPTR_PARAM_BARCODE, L"https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
libfptr_set_param_int(fptr, LIBFPTR_PARAM_BARCODE_TYPE, LIBFPTR_BT_QR);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_LEFT);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_SCALE, 4);
libfptr_print_barcode(fptr);

fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 1")
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY)
fptr.printText()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 2")
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY)
fptr.printText()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 3")
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY)
fptr.printText()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 4")
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY)
fptr.printText()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 5")
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT)
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY)
fptr.printText()

fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7")
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE_TYPE, IFptr.LIBFPTR_BT_QR)
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_LEFT)
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE, 4)
fptr.printBarcode()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 1");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 2");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 3");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 4");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 5");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText();

fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE_TYPE, IFptr.LIBFPTR_BT_QR);
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_LEFT);
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE, 4);
fptr.printBarcode();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 1");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 2");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 3");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 4");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "Строка 5");
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_DEFER, IFptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText();

fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE_TYPE, IFptr.LIBFPTR_BT_QR);
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_LEFT);
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE, 4);
fptr.printBarcode();
[fptr setParam(LIBFPTR_PARAM_TEXT, NSStringParam:@"Строка 1"];
[fptr setParam(LIBFPTR_PARAM_ALIGNMENT, intParam:LIBFPTR_ALIGNMENT_RIGHT];
[fptr setParam(LIBFPTR_PARAM_DEFER, intParam:LIBFPTR_DEFER_OVERLAY];
[fptr printText];
[fptr setParam(LIBFPTR_PARAM_TEXT, NSStringParam:@"Строка 2"];
[fptr setParam(LIBFPTR_PARAM_ALIGNMENT, intParam:LIBFPTR_ALIGNMENT_RIGHT];
[fptr setParam(LIBFPTR_PARAM_DEFER, intParam:LIBFPTR_DEFER_OVERLAY];
[fptr printText];
[fptr setParam(LIBFPTR_PARAM_TEXT, NSStringParam:@"Строка 3"];
[fptr setParam(LIBFPTR_PARAM_ALIGNMENT, intParam:LIBFPTR_ALIGNMENT_RIGHT];
[fptr setParam(LIBFPTR_PARAM_DEFER, intParam:LIBFPTR_DEFER_OVERLAY];
[fptr printText];
[fptr setParam(LIBFPTR_PARAM_TEXT, NSStringParam:@"Строка 4"];
[fptr setParam(LIBFPTR_PARAM_ALIGNMENT, intParam:LIBFPTR_ALIGNMENT_RIGHT];
[fptr setParam(LIBFPTR_PARAM_DEFER, intParam:LIBFPTR_DEFER_OVERLAY];
[fptr printText];
[fptr setParam(LIBFPTR_PARAM_TEXT, NSStringParam:@"Строка 5"];
[fptr setParam(LIBFPTR_PARAM_ALIGNMENT, intParam:LIBFPTR_ALIGNMENT_RIGHT];
[fptr setParam(LIBFPTR_PARAM_DEFER, intParam:LIBFPTR_DEFER_OVERLAY];
[fptr printText];

[fptr setParam(LIBFPTR_PARAM_BARCODE, NSStringParam:@"https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7"];
[fptr setParam(LIBFPTR_PARAM_BARCODE_TYPE, intParam:LIBFPTR_BT_QR];
[fptr setParam(LIBFPTR_PARAM_ALIGNMENT, intParam:LIBFPTR_ALIGNMENT_LEFT];
[fptr setParam:LIBFPTR_PARAM_SCALE, intParam:4];
[fptr printBarcode];
fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "Строка 1");
fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(Constants.LIBFPTR_PARAM_DEFER, Constants.LIBFPTR_DEFER_OVERLAY);
fptr.printText();
fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "Строка 2");
fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(Constants.LIBFPTR_PARAM_DEFER, Constants.LIBFPTR_DEFER_OVERLAY);
fptr.printText();
fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "Строка 3");
fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(Constants.LIBFPTR_PARAM_DEFER, Constants.LIBFPTR_DEFER_OVERLAY);
fptr.printText();
fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "Строка 4");
fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(Constants.LIBFPTR_PARAM_DEFER, Constants.LIBFPTR_DEFER_OVERLAY);
fptr.printText();
fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "Строка 5");
fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(Constants.LIBFPTR_PARAM_DEFER, Constants.LIBFPTR_DEFER_OVERLAY);
fptr.printText();

fptr.setParam(Constants.LIBFPTR_PARAM_BARCODE, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
fptr.setParam(Constants.LIBFPTR_PARAM_BARCODE_TYPE, Constants.LIBFPTR_BT_QR);
fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_LEFT);
fptr.setParam(Constants.LIBFPTR_PARAM_SCALE, 4);
fptr.printBarcode();
fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'Строка 1');
fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(fptr.LIBFPTR_PARAM_DEFER, fptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText;
fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'Строка 2');
fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(fptr.LIBFPTR_PARAM_DEFER, fptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText;
fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'Строка 3');
fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(fptr.LIBFPTR_PARAM_DEFER, fptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText;
fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'Строка 4');
fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(fptr.LIBFPTR_PARAM_DEFER, fptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText;
fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'Строка 5');
fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_RIGHT);
fptr.setParam(fptr.LIBFPTR_PARAM_DEFER, fptr.LIBFPTR_DEFER_OVERLAY);
fptr.printText;

fptr.setParam(fptr.LIBFPTR_PARAM_BARCODE, 'https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7');
fptr.setParam(fptr.LIBFPTR_PARAM_BARCODE_TYPE, fptr.LIBFPTR_BT_QR);
fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_LEFT);
fptr.setParam(fptr.LIBFPTR_PARAM_SCALE, 4);
fptr.printBarcode;
fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "Строка 1")
fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_RIGHT)
fptr.SetParam(fptr10.LIBFPTR_PARAM_DEFER, fptr10.LIBFPTR_DEFER_OVERLAY)
fptr.PrintText()
fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "Строка 2")
fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_RIGHT)
fptr.SetParam(fptr10.LIBFPTR_PARAM_DEFER, fptr10.LIBFPTR_DEFER_OVERLAY)
fptr.PrintText()
fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "Строка 3")
fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_RIGHT)
fptr.SetParam(fptr10.LIBFPTR_PARAM_DEFER, fptr10.LIBFPTR_DEFER_OVERLAY)
fptr.PrintText()
fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "Строка 4")
fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_RIGHT)
fptr.SetParam(fptr10.LIBFPTR_PARAM_DEFER, fptr10.LIBFPTR_DEFER_OVERLAY)
fptr.PrintText()
fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "Строка 5")
fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_RIGHT)
fptr.SetParam(fptr10.LIBFPTR_PARAM_DEFER, fptr10.LIBFPTR_DEFER_OVERLAY)
fptr.PrintText()

fptr.SetParam(fptr10.LIBFPTR_PARAM_BARCODE, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7")
fptr.SetParam(fptr10.LIBFPTR_PARAM_BARCODE_TYPE, fptr10.LIBFPTR_BT_QR)
fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_LEFT)
fptr.SetParam(fptr10.LIBFPTR_PARAM_SCALE, 4)
fptr.PrintBarcode()
Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "Строка 1");
Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_RIGHT);
Fptr.setParam(Fptr.LIBFPTR_PARAM_DEFER, Constants.LIBFPTR_DEFER_OVERLAY);
Fptr.printText();
Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "Строка 2");
Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_RIGHT);
Fptr.setParam(Fptr.LIBFPTR_PARAM_DEFER, Constants.LIBFPTR_DEFER_OVERLAY);
Fptr.printText();
Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "Строка 3");
Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_RIGHT);
Fptr.setParam(Fptr.LIBFPTR_PARAM_DEFER, Constants.LIBFPTR_DEFER_OVERLAY);
Fptr.printText();
Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "Строка 4");
Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_RIGHT);
Fptr.setParam(Fptr.LIBFPTR_PARAM_DEFER, Constants.LIBFPTR_DEFER_OVERLAY);
Fptr.printText();
Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "Строка 5");
Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_RIGHT);
Fptr.setParam(Fptr.LIBFPTR_PARAM_DEFER, Constants.LIBFPTR_DEFER_OVERLAY);
Fptr.printText();

Fptr.setParam(Fptr.LIBFPTR_PARAM_BARCODE, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
Fptr.setParam(Fptr.LIBFPTR_PARAM_BARCODE_TYPE, Fptr.LIBFPTR_BT_QR);
Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Fptr.LIBFPTR_ALIGNMENT_LEFT);
Fptr.setParam(Fptr.LIBFPTR_PARAM_SCALE, 4);
Fptr.printBarcode();

Если ККТ позволяет, то можно напечатать текст рядом со штрихкодом. Для этого нужно передать в драйвер текст (printText()), указав флаг отложенной печати c наложением ШК поверх текста (LIBFPTR_PARAM_DEFER = LIBFPTR_DEFER_OVERLAY), после чего вызвать метод printBarcode(). На данный момент работает только с QR-кодами.

Ни драйвер, ни ККТ, не следят за тем, наложится текст на ШК или нет. Распределение ШК и текста в пространстве лежит на разработчике.

Чтение данных

Для чтения данных из ККТ или ФН нужно использовать методы beginReadRecords(), readNextRecord() и endReadRecords(). Для того, чтобы позволить использовать цикл beginReadRecords() - readNextRecord() - endReadRecords() внутри другого такого же цикла вызовов, можно передавать в методы readNextRecord() и endReadRecords() параметр LIBFPTR_PARAM_RECORDS_ID, получаемый из метода beginReadRecords(). В таком случае вложенные вызовы не будут конфликтовать.

Если параметр не передать, методы readNextRecord() и endReadRecords() будут использовать последнюю активную сессию чтения данных, начатую вызовом beginReadRecords().

Последний чек

Построчное чтение последнего чека из ККТ

// Вспомогательная функция для чтения строковых параметров
std::wstring readStringAttribute(libfptr_handle fptr, int paramNumber) {
    std::vector<wchar_t> str(32);
    int size = libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    if (size > str.size()) {
        str.resize(size);
        libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    }
    return std::wstring(&str[0]);
}

// Вспомогательная функция чтения следующей записи
int readNextRecord(libfptr_handle fptr, const std::wstring &recordsID) {
    libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
    return libfptr_read_next_record(fptr);
}

libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECORDS_TYPE, LIBFPTR_RT_LAST_DOCUMENT_LINES);
libfptr_begin_read_records(handle);
std::wstring recordsID = readStringAttribute(fptr, LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{
    std::wstring textLine = readStringAttribute(fptr, LIBFPTR_PARAM_TEXT);

    uint font = libfptr_get_param_int(fptr, LIBFPTR_PARAM_FONT);
    uint linespacing = libfptr_get_param_int(fptr, LIBFPTR_PARAM_LINESPACING);
    uint brightness = libfptr_get_param_int(fptr, LIBFPTR_PARAM_BRIGHTNESS);
    bool doubleWidth = libfptr_get_param_bool(fptr, LIBFPTR_PARAM_FONT_DOUBLE_WIDTH) != 0;
    bool doubleHeight = libfptr_get_param_bool(fptr, LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT) != 0;
}

libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
libfptr_end_read_records(fptr);
# Вспомогательная функция окончания чтения записей
def endReadRecords(fptr, recordsID):
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.endReadRecords()

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_LAST_DOCUMENT_LINES)
fptr.beginReadRecords()
recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID)

while readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK:
    textLine        = fptr.getParamString(IFptr.LIBFPTR_PARAM_TEXT)
    font            = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FONT)
    linespacing     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_LINESPACING)
    brightness      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_BRIGHTNESS)
    doubleWidth     = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH)
    doubleHeight    = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT)

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.endReadRecords()
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_LAST_DOCUMENT_LINES);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    String textLine         = fptr.getParamString(IFptr.LIBFPTR_PARAM_TEXT);
    long font               = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FONT);
    long linespacing        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_LINESPACING);
    long brightness         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_BRIGHTNESS);
    boolean doubleWidth     = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH);
    boolean doubleHeight    = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_LAST_DOCUMENT_LINES);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    String textLine         = fptr.getParamString(IFptr.LIBFPTR_PARAM_TEXT);
    long font               = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FONT);
    long linespacing        = fptr.getParamInt(IFptr.LIBFPTR_PARAM_LINESPACING);
    long brightness         = fptr.getParamInt(IFptr.LIBFPTR_PARAM_BRIGHTNESS);
    boolean doubleWidth     = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH);
    boolean doubleHeight    = fptr.getParamBool(IFptr.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr *fptr, NSString *recordsID) {
    [fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
    return [fptr readNextRecord];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_TYPE, intParam:LIBFPTR_RT_LAST_DOCUMENT_LINES];
[fptr beginReadRecords];
NSString *recordsID = [fptr getParamString:LIBFPTR_PARAM_RECORDS_ID];

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{
    NSString *textLine  = [fptr getParamString:LIBFPTR_PARAM_TEXT];
    uint font           = [fptr getParamInt:LIBFPTR_PARAM_FONT];
    uint linespacing    = [fptr getParamInt:LIBFPTR_PARAM_LINESPACING];
    uint brightness     = [fptr getParamInt:LIBFPTR_PARAM_BRIGHTNESS];
    bool doubleWidth    = [fptr getParamBool:LIBFPTR_PARAM_FONT_DOUBLE_WIDTH];
    bool doubleHeight   = [fptr getParamBool:LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
[fptr endReadRecords]
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_TYPE, Constants.LIBFPTR_RT_LAST_DOCUMENT_LINES);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(Constants.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == Constants.LIBFPTR_OK) {
    String textLine         = fptr.getParamString(Constants.LIBFPTR_PARAM_TEXT);
    long font               = fptr.getParamInt(Constants.LIBFPTR_PARAM_FONT);
    long linespacing        = fptr.getParamInt(Constants.LIBFPTR_PARAM_LINESPACING);
    long brightness         = fptr.getParamInt(Constants.LIBFPTR_PARAM_BRIGHTNESS);
    boolean doubleWidth     = fptr.getParamBool(Constants.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH);
    boolean doubleHeight    = fptr.getParamBool(Constants.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT);
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
function readNextRecord(fptr: OleVariant; recordsID: String): integer;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    Result := fptr.readNextRecord;
end;

var
    recordsID: String;
    documentType: Longint;
    documentSize: Longint;
    textLine: String;
    font: Longint;
    linespacing: Longint;
    brightness: Longint;
    doubleWidth: LongBool;
    doubleHeight: LongBool;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_TYPE, fptr.LIBFPTR_RT_LAST_DOCUMENT_LINES);
    fptr.beginReadRecords;
    recordsID := fptr.getParamString(fptr.LIBFPTR_PARAM_RECORDS_ID);

    While readNextRecord(fptr, recordsID) = fptr.LIBFPTR_OK do
    begin
        textLine        := fptr.getParamString(fptr.LIBFPTR_PARAM_TEXT);
        font            := fptr.getParamInt(fptr.LIBFPTR_PARAM_FONT);
        linespacing     := fptr.getParamInt(fptr.LIBFPTR_PARAM_LINESPACING);
        brightness      := fptr.getParamInt(fptr.LIBFPTR_PARAM_BRIGHTNESS);
        doubleWidth     := fptr.getParamBool(fptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH);
        doubleHeight    := fptr.getParamBool(fptr.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT);
    end;

    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    fptr.endReadRecords;
end;
// Вспомогательная функция чтения следующей записи
func readNextRecord(fptr *fptr10.IFptr, recordsID string) error {
    fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.ReadNextRecord()
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_TYPE, fptr10.LIBFPTR_RT_LAST_DOCUMENT_LINES)
fptr.BeginReadRecords()
recordsID := fptr.GetParamString(fptr10.LIBFPTR_PARAM_RECORDS_ID)

for readNextRecord(fptr, recordsID) == nil {
    textLine        := fptr.GetParamString(fptr10.LIBFPTR_PARAM_TEXT)
    font            := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_FONT)
    linespacing     := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_LINESPACING)
    brightness      := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_BRIGHTNESS)
    doubleWidth     := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH)
    doubleHeight    := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT)
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.EndReadRecords()
// Вспомогательная функция чтения следующей записи
function readNextRecord(recordsID) {
    Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return Fptr.readNextRecord();
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_TYPE, Fptr.LIBFPTR_RT_LAST_DOCUMENT_LINES);
Fptr.beginReadRecords();
var recordsID = Fptr.getParamString(Constants.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(recordsID) == Fptr.LIBFPTR_OK) {
    textLine     = fptr.getParamString(Fptr.LIBFPTR_PARAM_TEXT);
    font         = fptr.getParamInt(Fptr.LIBFPTR_PARAM_FONT);
    linespacing  = fptr.getParamInt(Fptr.LIBFPTR_PARAM_LINESPACING);
    brightness   = fptr.getParamInt(Fptr.LIBFPTR_PARAM_BRIGHTNESS);
    doubleWidth  = fptr.getParamBool(Fptr.LIBFPTR_PARAM_FONT_DOUBLE_WIDTH);
    doubleHeight = fptr.getParamBool(Fptr.LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT);
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
Fptr.endReadRecords();

Для чтения последнего чека в строковом виде необходимо вызвать метод beginReadRecords() с типом данных LIBFPTR_PARAM_RECORDS_TYPE равным LIBFPTR_RT_LAST_DOCUMENT_LINES. Выходные параметры отсутствуют.

Каждый успешный вызов метода readNextRecord() заполняет следующие параметры:

Параметр Описание Тип
LIBFPTR_PARAM_TEXT Строка текста string
LIBFPTR_PARAM_FONT Шрифт int
LIBFPTR_PARAM_LINESPACING Межстрочный интервал int
LIBFPTR_PARAM_BRIGHTNESS Яркость int
LIBFPTR_PARAM_FONT_DOUBLE_WIDTH Двойная ширина bool
LIBFPTR_PARAM_FONT_DOUBLE_HEIGHT Двойная высота bool

Документ из ФН

Чтение документа из ФН в виде TLV-структур

// Вспомогательная функция для чтения строковых параметров
std::wstring readStringAttribute(libfptr_handle fptr, int paramNumber) {
    std::vector<wchar_t> str(32);
    int size = libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    if (size > str.size()) {
        str.resize(size);
        libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    }
    return std::wstring(&str[0]);
}

// Вспомогательная функция чтения следующей записи
int readNextRecord(libfptr_handle fptr, const std::wstring &recordsID) {
    libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
    return libfptr_read_next_record(fptr);
}

libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECORDS_TYPE, LIBFPTR_RT_FN_DOCUMENT_TLVS);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
libfptr_begin_read_records(handle);
libfptr_fn_document_type documentType = libfptr_get_param_int(fptr, LIBFPTR_PARAM_FN_DOCUMENT_TYPE);
int documentSize = libfptr_get_param_int(fptr, LIBFPTR_PARAM_COUNT);
std::wstring recordsID = readStringAttribute(fptr, LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{
    std::vector<uchar> tagValue(32);
    int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &tagValue[0], tagValue.size());
    if (size > tagValue.size())
    {
        tagValue.resize(size);
        libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &tagValue[0], tagValue.size());
    }
    tagValue.resize(size);

    std::vector<char> str(32);
    size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_TAG_NAME, &str[0], str.size());
    if (size > str.size())
    {
        str.resize(size);
        libfptr_get_param_str(fptr, LIBFPTR_PARAM_TEXT, &str[0], str.size());
    }
    std::wstring tagName = std::wstring(&str[0]);

    uint tagType = libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_TYPE);
    uint tagNumber = libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_NUMBER);
}

libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
libfptr_end_read_records(fptr);
# Вспомогательная функция чтения следующей записи
def readNextRecord(fptr, recordsID):
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.readNextRecord()

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_DOCUMENT_TLVS)
fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12)
fptr.beginReadRecords()
documentType = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_DOCUMENT_TYPE)
documentSize = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT)
recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID)

while readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK:
    tagValue    = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)
    tagNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER)
    tagName     = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME)
    tagType     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE)

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.endReadRecords()
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_DOCUMENT_TLVS);
fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
fptr.beginReadRecords();
long documentType = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_DOCUMENT_TYPE);
long documentSize = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    byte[] tagValue = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
    long tagNumber  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER);
    String tagName  = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME);
    long tagType    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_DOCUMENT_TLVS);
fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
fptr.beginReadRecords();
long documentType = fptr.getParamInt(IFptr.LIBFPTR_PARAM_FN_DOCUMENT_TYPE);
long documentSize = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    byte[] tagValue = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
    long tagNumber  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER);
    String tagName  = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME);
    long tagType    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr *fptr, NSString *recordsID) {
    [fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
    return [fptr readNextRecord];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_TYPE, intParam:LIBFPTR_RT_FN_DOCUMENT_TLVS];
[fptr setParam:LIBFPTR_PARAM_DOCUMENT_NUMBER, intParam:12];
[fptr beginReadRecords];
uint documentType = [fptr getParamInt:LIBFPTR_PARAM_FN_DOCUMENT_TYPE];
uint documentSize = [fptr getParamInt:LIBFPTR_PARAM_COUNT];
NSString *recordsID = [fptr getParamString:LIBFPTR_PARAM_RECORDS_ID];

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{
    NSData *tagValue    = [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE];
    uint tagNumber      = [fptr getParamInt:LIBFPTR_PARAM_TAG_NUMBER];
    NSString *tagName   = [fptr getParamString:LIBFPTR_PARAM_TAG_NAME];
    uint tagType        = [fptr getParamInt:LIBFPTR_PARAM_TAG_TYPE];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
[fptr endReadRecords];
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_TYPE, Constants.LIBFPTR_RT_FN_DOCUMENT_TLVS);
fptr.setParam(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
fptr.beginReadRecords();
uint documentType = fptr.getParamInt(Constants.LIBFPTR_PARAM_FN_DOCUMENT_TYPE);
uint documentSize = fptr.getParamInt(Constants.LIBFPTR_PARAM_COUNT);
String recordsID = fptr.getParamString(Constants.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == Constants.LIBFPTR_OK) {
    byte[] tagValue = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE);
    uint tagNumber  = fptr.getParamInt(Constants.LIBFPTR_PARAM_TAG_NUMBER);
    String tagName  = fptr.getParamString(Constants.LIBFPTR_PARAM_TAG_NAME);
    uint tagType    = fptr.getParamInt(Constants.LIBFPTR_PARAM_TAG_TYPE);
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
function readNextRecord(fptr: OleVariant; recordsID: String): integer;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    Result := fptr.readNextRecord;
end;

var
    recordsID: String;
    documentType:   Integer;
    documentSize:   Integer;
    tagValue:       Variant;
    tagNumber:      Integer;
    tagName:        String;
    tagType:        Integer;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_TYPE, fptr.LIBFPTR_RT_FN_DOCUMENT_TLVS);
    fptr.setParam(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
    fptr.beginReadRecords;
    documentType := fptr.getParamInt(fptr.LIBFPTR_PARAM_FN_DOCUMENT_TYPE);
    documentSize := fptr.getParamInt(fptr.LIBFPTR_PARAM_COUNT);
    recordsID := fptr.getParamString(fptr.LIBFPTR_PARAM_RECORDS_ID);

    While readNextRecord(fptr, recordsID) = fptr.LIBFPTR_OK do
    begin
        tagValue    := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);
        tagNumber   := fptr.getParamInt(fptr.LIBFPTR_PARAM_TAG_NUMBER);
        tagName     := fptr.getParamString(fptr.LIBFPTR_PARAM_TAG_NAME);
        tagType     := fptr.getParamInt(fptr.LIBFPTR_PARAM_TAG_TYPE);
    end;

    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    fptr.endReadRecords;
end;
// Вспомогательная функция чтения следующей записи
func readNextRecord(fptr *fptr10.IFptr, recordsID string) error {
    fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.ReadNextRecord()
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_TYPE, fptr10.LIBFPTR_RT_FN_DOCUMENT_TLVS)
fptr.SetParam(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12)
fptr.BeginReadRecords()
documentType := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_FN_DOCUMENT_TYPE)
documentSize := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_COUNT)
recordsID := fptr.GetParamString(fptr10.LIBFPTR_PARAM_RECORDS_ID)

for readNextRecord(fptr, recordsID) == nil {
    tagValue    := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE)
    tagNumber   := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_TAG_NUMBER)
    tagName     := fptr.GetParamString(fptr10.LIBFPTR_PARAM_TAG_NAME)
    tagType     := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_TAG_TYPE)
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.EndReadRecords()
// Вспомогательная функция чтения следующей записи
function readNextRecord(recordsID) {
    Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return Fptr.readNextRecord();
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_TYPE, Fptr.LIBFPTR_RT_FN_DOCUMENT_TLVS);
Fptr.setParam(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 12);
Fptr.beginReadRecords();
documentType = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_FN_DOCUMENT_TYPE);
documentSize = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_COUNT);
recordsID = Fptr.getParamString(Fptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(recordsID) == Fptr.LIBFPTR_OK) {
    tagValue  = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE);
    tagNumber = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_TAG_NUMBER);
    tagName   = Fptr.getParamString(Fptr.LIBFPTR_PARAM_TAG_NAME);
    tagType   = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_TAG_TYPE);
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
Fptr.endReadRecords();

Для чтения документа из ФН по номеру необходимо вызвать метод beginReadRecords() с типом данных LIBFPTR_PARAM_RECORDS_TYPE равным LIBFPTR_RT_FN_DOCUMENT_TLVS и указать номер ФД для чтения в параметре LIBFPTR_PARAM_DOCUMENT_NUMBER.

Выходные параметры метода следущие:

Параметр Описание Тип
LIBFPTR_PARAM_FN_DOCUMENT_TYPE Тип документа int
LIBFPTR_PARAM_COUNT Размер документа, б. int

Параметр LIBFPTR_PARAM_FN_DOCUMENT_TYPE может принимать следующие значения:

Каждый успешный вызов метода readNextRecord() возвращает данные TLV-структуры верхнего уровня и заполняет следующие параметры:

Параметр Описание Тип
LIBFPTR_PARAM_TAG_NUMBER Номер реквизита int
LIBFPTR_PARAM_TAG_VALUE Значение реквизита Зависит от номера реквизита
LIBFPTR_PARAM_TAG_TYPE Тип реквизита int
LIBFPTR_PARAM_TAG_NAME Название реквизита string
LIBFPTR_PARAM_TAG_IS_COMPLEX true, если реквизит составной bool
LIBFPTR_PARAM_TAG_IS_REPEATABLE true, если реквизит может повторяться bool

Реквизит можно сразу считать в удобном для обработки виде. Для этого нужно ориентироваться на значение параметра LIBFPTR_PARAM_TAG_TYPE, и, в зависимости от него, использовать методы для чтения разных типов параметров - getParamInt(), getParamBool(), getParamDouble() и т.п.

Список лицензий / кодов защиты

Чтение введенных лицензий / кодов защиты

// Вспомогательная функция для чтения строковых параметров
std::wstring readStringAttribute(libfptr_handle fptr, int paramNumber) {
    std::vector<wchar_t> str(32);
    int size = libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    if (size > str.size()) {
        str.resize(size);
        libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    }
    return std::wstring(&str[0]);
}

// Вспомогательная функция чтения следующей записи
int readNextRecord(libfptr_handle fptr, const std::wstring &recordsID) {
    libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
    return libfptr_read_next_record(fptr);
}

libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECORDS_TYPE, LIBFPTR_RT_LICENSES);
libfptr_begin_read_records(handle);
std::wstring recordsID = readStringAttribute(fptr, LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{
    uint id = libfptr_get_param_int(fptr, LIBFPTR_PARAM_LICENSE_NUMBER);
    std::wstring name = readStringAttribute(fptr, LIBFPTR_PARAM_LICENSE_NAME);
}

libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
libfptr_end_read_records(fptr);
# Вспомогательная функция чтения следующей записи
def readNextRecord(fptr, recordsID):
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.readNextRecord()

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_LICENSES)
fptr.beginReadRecords()
recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID)

while readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK:
    id = fptr.getParamInt(IFptr.LIBFPTR_PARAM_LICENSE_NUMBER)
    name = fptr.getParamString(IFptr.LIBFPTR_PARAM_LICENSE_NAME)

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.endReadRecords()
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_LICENSES);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    long id = fptr.getParamInt(IFptr.LIBFPTR_PARAM_LICENSE_NUMBER);
    String name = fptr.getParamString(IFptr.LIBFPTR_PARAM_LICENSE_NAME);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_LICENSES);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    long id = fptr.getParamInt(IFptr.LIBFPTR_PARAM_LICENSE_NUMBER);
    String name = fptr.getParamString(IFptr.LIBFPTR_PARAM_LICENSE_NAME);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr *fptr, NSString *recordsID) {
    [fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
    return [fptr readNextRecord];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_TYPE, intParam:LIBFPTR_RT_LICENSES];
[fptr beginReadRecords];
NSString *recordsID = [fptr getParamString:LIBFPTR_PARAM_RECORDS_ID];

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{
    uint id = [fptr getParamInt:LIBFPTR_PARAM_LICENSE_NUMBER];
    NSString *name = [fptr getParamString:LIBFPTR_PARAM_LICENSE_NAME];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
[fptr endReadRecords];
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_TYPE, Constants.LIBFPTR_RT_LICENSES);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(Constants.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == Constants.LIBFPTR_OK) {
    long id = fptr.getParamInt(Constants.LIBFPTR_PARAM_LICENSE_NUMBER);
    String name = fptr.getParamString(Constants.LIBFPTR_PARAM_LICENSE_NAME);
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
function readNextRecord(fptr: OleVariant; recordsID: String): integer;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    Result := fptr.readNextRecord;
end;

var
    recordsID, name: String;
    id: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_TYPE, fptr.LIBFPTR_RT_LICENSES);
    fptr.beginReadRecords;
    recordsID := fptr.getParamString(fptr.LIBFPTR_PARAM_RECORDS_ID);

    While readNextRecord(fptr, recordsID) = fptr.LIBFPTR_OK do
    begin
        id := fptr.getParamInt(fptr.LIBFPTR_PARAM_LICENSE_NUMBER);
        name := fptr.getParamString(fptr.LIBFPTR_PARAM_LICENSE_NAME);
    end;

    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    fptr.endReadRecords;
end;
// Вспомогательная функция чтения следующей записи
func readNextRecord(fptr *fptr10.IFptr, recordsID string) error {
    fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.ReadNextRecord()
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_TYPE, fptr10.LIBFPTR_RT_LICENSES)
fptr.BeginReadRecords()
recordsID := fptr.GetParamString(fptr10.LIBFPTR_PARAM_RECORDS_ID)

for readNextRecord(fptr, recordsID) == nil {
    id := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_LICENSE_NUMBER)
    name := fptr.GetParamString(fptr10.LIBFPTR_PARAM_LICENSE_NAME)
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.EndReadRecords()
// Вспомогательная функция чтения следующей записи
function readNextRecord(recordsID) {
    Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return Fptr.readNextRecord();
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_TYPE, Fptr.LIBFPTR_RT_LICENSES);
Fptr.beginReadRecords();
var recordsID = fptr.getParamString(Fptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(recordsID) == Fptr.LIBFPTR_OK) {
    id = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_LICENSE_NUMBER);
    name = fptr.getParamString(Fptr.LIBFPTR_PARAM_LICENSE_NAME);
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
Fptr.endReadRecords();

Для чтения списка введенных лицензий / кодов защиты необходимо вызвать метод beginReadRecords() с типом данных LIBFPTR_PARAM_RECORDS_TYPE равным LIBFPTR_RT_LICENSES. Выходные параметры отсутствуют.

Каждый успешный вызов метода readNextRecord() заполняет следующие параметры:

Параметр Описание Тип
LIBFPTR_PARAM_LICENSE_NUMBER Номер кода защиты / лицензии int
LIBFPTR_PARAM_LICENSE_NAME Наименование кода защиты / лицензии string

Чтение документов регистрации

Чтение документов регистрации из ФН в виде TLV-структур

// Вспомогательная функция для чтения строковых параметров
std::wstring readStringAttribute(libfptr_handle fptr, int paramNumber) {
    std::vector<wchar_t> str(32);
    int size = libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    if (size > str.size()) {
        str.resize(size);
        libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    }
    return std::wstring(&str[0]);
}

// Вспомогательная функция чтения следующей записи
int readNextRecord(libfptr_handle fptr, const std::wstring &recordsID) {
    libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
    return libfptr_read_next_record(fptr);
}

libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECORDS_TYPE, LIBFPTR_RT_FN_REGISTRATION_TLVS);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_REGISTRATION_NUMBER, 1);
libfptr_begin_read_records(handle);
std::wstring recordsID = readStringAttribute(fptr, LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{
    std::vector<uchar> tagValue(32);
    int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &tagValue[0], tagValue.size());
    if (size > tagValue.size())
    {
        tagValue.resize(size);
        libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &tagValue[0], tagValue.size());
    }
    tagValue.resize(size);

    std::vector<char> str(32);
    size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_TAG_NAME, &str[0], str.size());
    if (size > str.size())
    {
        str.resize(size);
        libfptr_get_param_str(fptr, LIBFPTR_PARAM_TEXT, &str[0], str.size());
    }
    std::wstring tagName = std::wstring(&str[0]);

    uint tagNumber = libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_NUMBER);
    uint tagType = libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_TYPE);
}

libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
libfptr_end_read_records(fptr);
# Вспомогательная функция чтения следующей записи
def readNextRecord(fptr, recordsID):
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.readNextRecord()

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_REGISTRATION_TLVS)
fptr.setParam(IFptr.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1)
fptr.beginReadRecords()
recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID)

while readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK:
    tagValue    = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)
    tagNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER)
    tagName     = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME)
    tagType     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE)

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.endReadRecords()
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_REGISTRATION_TLVS);
fptr.setParam(IFptr.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    byte[] tagValue = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
    long tagNumber  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER);
    String tagName  = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME);
    long tagType    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_REGISTRATION_TLVS);
fptr.setParam(IFptr.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    byte[] tagValue = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
    long tagNumber  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER);
    String tagName  = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME);
    long tagType    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr *fptr, NSString *recordsID) {
    [fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
    return [fptr readNextRecord];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_TYPE, intParam:LIBFPTR_RT_FN_REGISTRATION_TLVS];
[fptr setParam:LIBFPTR_PARAM_REGISTRATION_NUMBER, intParam:1];
[fptr beginReadRecords];
NSString *recordsID = [fptr getParamString:LIBFPTR_PARAM_RECORDS_ID];

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{
    NSData *tagValue    = [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE];
    uint tagNumber      = [fptr getParamInt:LIBFPTR_PARAM_TAG_NUMBER];
    NSString *tagName   = [fptr getParamString:LIBFPTR_PARAM_TAG_NAME];
    uint tagType        = [fptr getParamInt:LIBFPTR_PARAM_TAG_TYPE];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
[fptr endReadRecords];
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_TYPE, Constants.LIBFPTR_RT_FN_REGISTRATION_TLVS);
fptr.setParam(Constants.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1);
fptr.beginReadRecords();
String recordsID = fptr.getParamString(Constants.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == Constants.LIBFPTR_OK) {
    byte[] tagValue = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE);
    uint tagNumber  = fptr.getParamInt(Constants.LIBFPTR_PARAM_TAG_NUMBER);
    String tagName  = fptr.getParamString(Constants.LIBFPTR_PARAM_TAG_NAME);
    uint tagType    = fptr.getParamInt(Constants.LIBFPTR_PARAM_TAG_TYPE);
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
function readNextRecord(fptr: OleVariant; recordsID: String): integer;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    Result := fptr.readNextRecord;
end;

var
    recordsID:      String;
    tagValue:       Variant;
    tagNumber:      Integer;
    tagName:        String;
    tagType:        Integer;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_TYPE, fptr.LIBFPTR_RT_FN_REGISTRATION_TLVS);
    fptr.setParam(fptr.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1);
    fptr.beginReadRecords;
    recordsID := fptr.getParamString(fptr.LIBFPTR_PARAM_RECORDS_ID);

    While readNextRecord(fptr, recordsID) = fptr.LIBFPTR_OK do
    begin
        tagValue    := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);
        tagNumber   := fptr.getParamInt(fptr.LIBFPTR_PARAM_TAG_NUMBER);
        tagName     := fptr.getParamString(fptr.LIBFPTR_PARAM_TAG_NAME);
        tagType     := fptr.getParamInt(fptr.LIBFPTR_PARAM_TAG_TYPE);
    end;

    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    fptr.endReadRecords;
end;
// Вспомогательная функция чтения следующей записи
func readNextRecord(fptr *fptr10.IFptr, recordsID string) error {
    fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.ReadNextRecord()
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_TYPE, fptr10.LIBFPTR_RT_FN_REGISTRATION_TLVS)
fptr.SetParam(fptr10.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1)
fptr.BeginReadRecords()
recordsID := fptr.GetParamString(fptr10.LIBFPTR_PARAM_RECORDS_ID)

for readNextRecord(fptr, recordsID) == nil {
    tagValue    = fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE)
    tagNumber   = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_TAG_NUMBER)
    tagName     = fptr.GetParamString(fptr10.LIBFPTR_PARAM_TAG_NAME)
    tagType     = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_TAG_TYPE)
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.EndReadRecords()
// Вспомогательная функция чтения следующей записи
function readNextRecord(recordsID) {
    Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return Fptr.readNextRecord();
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_TYPE, Fptr.LIBFPTR_RT_FN_REGISTRATION_TLVS);
Fptr.setParam(Fptr.LIBFPTR_PARAM_REGISTRATION_NUMBER, 1);
Fptr.beginReadRecords();
recordsID = Fptr.getParamString(Fptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(recordsID) == Fptr.LIBFPTR_OK) {
    tagValue  = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE);
    tagNumber = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_TAG_NUMBER);
    tagName   = Fptr.getParamString(Fptr.LIBFPTR_PARAM_TAG_NAME);
    tagType   = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_TAG_TYPE);
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
Fptr.endReadRecords();

Для чтения документа регистрации из ФН по номеру необходимо вызвать метод beginReadRecords() с типом данных LIBFPTR_PARAM_RECORDS_TYPE равным LIBFPTR_RT_FN_REGISTRATION_TLVS и указать порядковый номер регистрации в параметре LIBFPTR_PARAM_REGISTRATION_NUMBER.

Каждый успешный вызов метода readNextRecord() возвращает данные TLV-структуры верхнего уровня и заполняет следующие параметры:

Параметр Описание Тип
LIBFPTR_PARAM_TAG_NUMBER Номер реквизита int
LIBFPTR_PARAM_TAG_VALUE Значение реквизита Зависит от номера реквизита
LIBFPTR_PARAM_TAG_TYPE Тип реквизита int
LIBFPTR_PARAM_TAG_NAME Название реквизита string
LIBFPTR_PARAM_TAG_IS_COMPLEX true, если реквизит составной bool
LIBFPTR_PARAM_TAG_IS_REPEATABLE true, если реквизит может повторяться bool

Тип реквизита (LIBFPTR_PARAM_TAG_TYPE) может принимать следующие значения:

Реквизит можно сразу считать в удобном для обработки виде. Для этого нужно ориентироваться на значение параметра LIBFPTR_PARAM_TAG_TYPE, и, в зависимости от него, использовать методы для чтения разных типов параметров - getParamInt(), getParamBool(), getParamDouble() и т.п.

Разбор составного реквизита

Разбор составного реквизита

// Вспомогательная функция для чтения строковых параметров
std::wstring readStringAttribute(libfptr_handle fptr, int paramNumber) {
    std::vector<wchar_t> str(32);
    int size = libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    if (size > str.size()) {
        str.resize(size);
        libfptr_get_param_str(fptr, paramNumber, &str[0], str.size());
    }
    return std::wstring(&str[0]);
}

// Вспомогательная функция чтения следующей записи
int readNextRecord(libfptr_handle fptr, const std::wstring &recordsID) {
    libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
    return libfptr_read_next_record(fptr);
}

uchar attr[] = { 0x93, 0x04, 0x0C, 0x00, 0x2B, 0x37, 0x39, 0x32,
                 0x34, 0x31, 0x32, 0x33, 0x31, 0x32, 0x31, 0x33,
                 0xC9, 0x04, 0x09, 0x00, 0x8F, 0xAE, 0xE1, 0xE2, 
                 0xA0, 0xA2, 0xE9, 0xA8, 0xAA };
libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECORDS_TYPE, LIBFPTR_RT_PARSE_COMPLEX_ATTR);
libfptr_set_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, 1);
libfptr_begin_read_records(handle);
std::wstring recordsID = readStringAttribute(fptr, LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{
    std::vector<uchar> tagValue(32);
    int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &tagValue[0], tagValue.size());
    if (size > tagValue.size())
    {
        tagValue.resize(size);
        libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &tagValue[0], tagValue.size());
    }
    tagValue.resize(size);

    std::vector<char> str(32);
    size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_TAG_NAME, &str[0], str.size());
    if (size > str.size())
    {
        str.resize(size);
        libfptr_get_param_str(fptr, LIBFPTR_PARAM_TEXT, &str[0], str.size());
    }
    std::wstring tagName = std::wstring(&str[0]);

    uint tagNumber = libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_NUMBER);
    uint tagType = libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_TYPE);
}

libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
libfptr_end_read_records(fptr);
# Вспомогательная функция чтения следующей записи
def readNextRecord(fptr, recordsID):
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.readNextRecord()

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_PARSE_COMPLEX_ATTR)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_VALUE, [0x93, 0x04, 0x0C, 0x00, 0x2B, 0x37, 0x39, 0x32,
                                              0x34, 0x31, 0x32, 0x33, 0x31, 0x32, 0x31, 0x33,
                                              0xC9, 0x04, 0x09, 0x00, 0x8F, 0xAE, 0xE1, 0xE2, 
                                              0xA0, 0xA2, 0xE9, 0xA8, 0xAA ])
fptr.beginReadRecords()
recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID)

while readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK:
    tagValue    = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)
    tagNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER)
    tagName     = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME)
    tagType     = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE)

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.endReadRecords()
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_PARSE_COMPLEX_ATTR);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_VALUE, new byte[]{0x93, 0x04, 0x0C, 0x00, 0x2B, 0x37, 0x39, 0x32,
                                                        0x34, 0x31, 0x32, 0x33, 0x31, 0x32, 0x31, 0x33,
                                                        0xC9, 0x04, 0x09, 0x00, 0x8F, 0xAE, 0xE1, 0xE2, 
                                                        0xA0, 0xA2, 0xE9, 0xA8, 0xAA });
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    byte[] tagValue = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
    long tagNumber  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER);
    String tagName  = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME);
    long tagType    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_PARSE_COMPLEX_ATTR);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_VALUE, new byte[]{0x93, 0x04, 0x0C, 0x00, 0x2B, 0x37, 0x39, 0x32,
                                                        0x34, 0x31, 0x32, 0x33, 0x31, 0x32, 0x31, 0x33,
                                                        0xC9, 0x04, 0x09, 0x00, 0x8F, 0xAE, 0xE1, 0xE2,
                                                        0xA0, 0xA2, 0xE9, 0xA8, 0xAA });
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    byte[] tagValue = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
    long tagNumber  = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER);
    String tagName  = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME);
    long tagType    = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr *fptr, NSString *recordsID) {
    [fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
    return [fptr readNextRecord];
}

uchar attr[] = { 0x93, 0x04, 0x0C, 0x00, 0x2B, 0x37, 0x39, 0x32,
                    0x34, 0x31, 0x32, 0x33, 0x31, 0x32, 0x31, 0x33,
                    0xC9, 0x04, 0x09, 0x00, 0x8F, 0xAE, 0xE1, 0xE2, 
                    0xA0, 0xA2, 0xE9, 0xA8, 0xAA };
[fptr setParam:LIBFPTR_PARAM_RECORDS_TYPE, intParam:LIBFPTR_RT_PARSE_COMPLEX_ATTR];
[fptr setParam:LIBFPTR_PARAM_TAG_VALUE, NSDataParam:[NSData dataWithBytes:(const void*)attr length:sizeof(attr)]];
[fptr beginReadRecords];
NSString *recordsID = [fptr getParamString:LIBFPTR_PARAM_RECORDS_ID];

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{
    NSData *tagValue    = [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE];
    uint tagNumber      = [fptr getParamInt:LIBFPTR_PARAM_TAG_NUMBER];
    NSString *tagName   = [fptr getParamString:LIBFPTR_PARAM_TAG_NAME];
    uint tagType        = [fptr getParamInt:LIBFPTR_PARAM_TAG_TYPE];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
[fptr endReadRecords];
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_TYPE, Constants.LIBFPTR_RT_PARSE_COMPLEX_ATTR);
fptr.setParam(Constants.LIBFPTR_PARAM_TAG_VALUE, new byte[]{0x93, 0x04, 0x0C, 0x00, 0x2B, 0x37, 0x39, 0x32,
                                                            0x34, 0x31, 0x32, 0x33, 0x31, 0x32, 0x31, 0x33,
                                                            0xC9, 0x04, 0x09, 0x00, 0x8F, 0xAE, 0xE1, 0xE2, 
                                                            0xA0, 0xA2, 0xE9, 0xA8, 0xAA });
fptr.beginReadRecords();
String recordsID = fptr.getParamString(Constants.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == Constants.LIBFPTR_OK) {
    byte[] tagValue = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE);
    uint tagNumber  = fptr.getParamInt(Constants.LIBFPTR_PARAM_TAG_NUMBER);
    String tagName  = fptr.getParamString(Constants.LIBFPTR_PARAM_TAG_NAME);
    uint tagType    = fptr.getParamInt(Constants.LIBFPTR_PARAM_TAG_TYPE);
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
function readNextRecord(fptr: OleVariant; recordsID: String): integer;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    Result := fptr.readNextRecord;
end;

var
    recordsID:      String;
    tagValue:       Variant;
    tagNumber:      Integer;
    tagName:        String;
    tagType:        Integer;
    array:          Array[0 .. 28] of Byte = ($93, $04, $0C, $00, $2B, $37, $39, $32,
                                              $34, $31, $32, $33, $31, $32, $31, $33,
                                              $C9, $04, $09, $00, $8F, $AE, $E1, $E2, 
                                              $A0, $A2, $E9, $A8, $AA);
    arrayVariant:   Variant;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_TYPE, fptr.LIBFPTR_RT_PARSE_COMPLEX_ATTR);

    arrayVariant := VarArrayCreate([0, high(array)], varByte);
    for i := VarArrayLowBound(arrayVariant, 1) to VarArrayHighBound(arrayVariant, 1) do
    begin
        VarArrayPut(arrayVariant, array[i], [i]);
    end;
    fptr.setParam(fptr.LIBFPTR_PARAM_TAG_VALUE, arrayVariant);
    fptr.beginReadRecords;
    recordsID := fptr.getParamString(fptr.LIBFPTR_PARAM_RECORDS_ID);

    While readNextRecord(fptr, recordsID) = fptr.LIBFPTR_OK do
    begin
        tagValue    := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);
        tagNumber   := fptr.getParamInt(fptr.LIBFPTR_PARAM_TAG_NUMBER);
        tagName     := fptr.getParamString(fptr.LIBFPTR_PARAM_TAG_NAME);
        tagType     := fptr.getParamInt(fptr.LIBFPTR_PARAM_TAG_TYPE);
    end;

    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    fptr.endReadRecords;
end;
// Вспомогательная функция чтения следующей записи
func readNextRecord(fptr *fptr10.IFptr, recordsID string) error {
    fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.ReadNextRecord()
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_TYPE, fptr10.LIBFPTR_RT_PARSE_COMPLEX_ATTR)
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAG_VALUE, []byte{0x93, 0x04, 0x0C, 0x00, 0x2B, 0x37, 0x39, 0x32,
                                                     0x34, 0x31, 0x32, 0x33, 0x31, 0x32, 0x31, 0x33,
                                                     0xC9, 0x04, 0x09, 0x00, 0x8F, 0xAE, 0xE1, 0xE2, 
                                                     0xA0, 0xA2, 0xE9, 0xA8, 0xAA })
fptr.BeginReadRecords()
recordsID := fptr.GetParamString(fptr10.LIBFPTR_PARAM_RECORDS_ID)

for readNextRecord(fptr, recordsID) == nil {
    tagValue    = fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE)
    tagNumber   = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_TAG_NUMBER)
    tagName     = fptr.GetParamString(fptr10.LIBFPTR_PARAM_TAG_NAME)
    tagType     = fptr.GetParamInt(fptr10.LIBFPTR_PARAM_TAG_TYPE)
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.EndReadRecords()
// Вспомогательная функция чтения следующей записи
function readNextRecord(recordsID) {
    Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return Fptr.readNextRecord();
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_TYPE, Fptr.LIBFPTR_RT_PARSE_COMPLEX_ATTR);
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAG_VALUE, new Uint8Array([0x93, 0x04, 0x0C, 0x00, 0x2B, 0x37, 0x39, 0x32,
                                                            0x34, 0x31, 0x32, 0x33, 0x31, 0x32, 0x31, 0x33,
                                                            0xC9, 0x04, 0x09, 0x00, 0x8F, 0xAE, 0xE1, 0xE2, 
                                                            0xA0, 0xA2, 0xE9, 0xA8, 0xAA]));
Fptr.beginReadRecords();
recordsID = Fptr.getParamString(Fptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(recordsID) == Fptr.LIBFPTR_OK) {
    tagValue  = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE);
    tagNumber = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_TAG_NUMBER);
    tagName   = Fptr.getParamString(Fptr.LIBFPTR_PARAM_TAG_NAME);
    tagType   = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_TAG_TYPE);
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
Fptr.endReadRecords();

Для разбора массива байтов со значением составного реквизита необходимо вызвать метод beginReadRecords() с типом данных LIBFPTR_PARAM_RECORDS_TYPE равным LIBFPTR_RT_PARSE_COMPLEX_ATTR и указать значение реквизита в LIBFPTR_PARAM_TAG_VALUE.

Каждый успешный вызов метода readNextRecord() возвращает значение одного реквизита:

Параметр Описание Тип
LIBFPTR_PARAM_TAG_NUMBER Номер реквизита int
LIBFPTR_PARAM_TAG_VALUE Значение реквизита Зависит от номера реквизита
LIBFPTR_PARAM_TAG_TYPE Тип реквизита int
LIBFPTR_PARAM_TAG_NAME Название реквизита string
LIBFPTR_PARAM_TAG_IS_COMPLEX true, если реквизит составной bool
LIBFPTR_PARAM_TAG_IS_REPEATABLE true, если реквизит может повторяться bool

Тип реквизита (LIBFPTR_PARAM_TAG_TYPE) может принимать следующие значения:

Реквизит можно сразу считать в удобном для обработки виде. Для этого нужно ориентироваться на значение параметра LIBFPTR_PARAM_TAG_TYPE, и, в зависимости от него, использовать методы для чтения разных типов параметров - getParamInt(), getParamBool(), getParamDouble() и т.п.

Служебные операции

Выключение ККТ

Выключение ККТ

libfptr_device_poweroff(fptr);
fptr.devicePoweroff()
fptr.devicePoweroff();
fptr.devicePoweroff();
[fptr devicePoweroff];
fptr.devicePoweroff();
begin
    fptr.devicePoweroff;
end;
fptr.DevicePoweroff()
Fptr.devicePoweroff();

Для выключения ККТ необходимо вызвать метод devicePoweroff().

Перезагрузка ККТ

Перезагрузка ККТ

libfptr_device_reboot(fptr);
fptr.deviceReboot()
fptr.deviceReboot();
fptr.deviceReboot();
[fptr deviceReboot];
fptr.deviceReboot();
begin
    fptr.deviceReboot;
end;
fptr.DeviceReboot()
Fptr.deviceReboot();

Для перезагрузки ККТ необходимо вызвать метод deviceReboot().

Общее гашение

Общее гашение

libfptr_reset_summary(fptr);
fptr.resetSummary()
fptr.resetSummary();
fptr.resetSummary();
[fptr resetSummary];
fptr.resetSummary();
begin
    fptr.resetSummary;
end;
fptr.ResetSummary()
Fptr.resetSummary();

Для выполнения общего гашения необходимо вызвать метод resetSummary().

Начальная инициализация ККТ

Начальная инициализация ККТ

libfptr_set_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, L"0010840000011");
libfptr_set_param_str(fptr, LIBFPTR_PARAM_MAC_ADDRESS, L"11:22:33:44:55:66");
libfptr_set_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, 2018, 3, 18, 12, 30, 00);
libfptr_init_device(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "0010840000011")
fptr.setParam(IFptr.LIBFPTR_PARAM_MAC_ADDRESS, "11:22:33:44:55:66")
fptr.setParam(IFptr.LIBFPTR_PARAM_DATE_TIME, datetime.datetime(2018, 3, 18, 12, 30, 00))
fptr.initDevice()
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "0010840000011");
fptr.setParam(IFptr.LIBFPTR_PARAM_MAC_ADDRESS, "11:22:33:44:55:66");
Calendar c = Calendar.getInstance();
c.set(2018, 3, 18, 12, 30, 00);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATE_TIME, c.getTime());
fptr.initDevice();
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "0010840000011");
fptr.setParam(IFptr.LIBFPTR_PARAM_MAC_ADDRESS, "11:22:33:44:55:66");
Calendar c = Calendar.getInstance();
c.set(2018, 3, 18, 12, 30, 00);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATE_TIME, c.getTime());
fptr.initDevice();
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:[2018 intValue]];
[components setMonth:[3 intValue]];
[components setDay:[18 intValue]];
[components setHour:[12 intValue]];
[components setMinute:[30 intValue]];
[components setSecond:[00 intValue]];

[fptr setParam:LIBFPTR_PARAM_SERIAL_NUMBER, NSStringParam:@"0010840000011"];
[fptr setParam:LIBFPTR_PARAM_MAC_ADDRESS, NSStringParam:@"11:22:33:44:55:66"];
[fptr setParam:LIBFPTR_PARAM_DATE_TIME, NSDateParam:[calendar dateFromComponents:components]];
[fptr initDevice];
fptr.setParam(Constants.LIBFPTR_PARAM_SERIAL_NUMBER, "0010840000011");
fptr.setParam(Constants.LIBFPTR_PARAM_MAC_ADDRESS, "11:22:33:44:55:66");
fptr.setParam(Constants.LIBFPTR_PARAM_DATE_TIME, new DateTime(2018, 3, 18, 12, 30, 0));
fptr.initDevice();
var
    date: TDateTime;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_SERIAL_NUMBER, '0010840000011');
    fptr.setParam(fptr.LIBFPTR_PARAM_MAC_ADDRESS, '11:22:33:44:55:66');
    date := StrToDateTime('18.03.2018 12:30:00');
    fptr.setParam(fptr.LIBFPTR_PARAM_DATE_TIME, date);
    fptr.initDevice;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_SERIAL_NUMBER, "0010840000011")
fptr.SetParam(fptr10.LIBFPTR_PARAM_MAC_ADDRESS, "11:22:33:44:55:66")
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATE_TIME, time.Date(2018, 3, 18, 12, 30, 0, 0, time.Now().Location()))
fptr.InitDevice()
Fptr.setParam(Fptr.LIBFPTR_PARAM_SERIAL_NUMBER, "0010840000011");
Fptr.setParam(Fptr.LIBFPTR_PARAM_MAC_ADDRESS, "11:22:33:44:55:66");
Fptr.setParam(Constants.LIBFPTR_PARAM_DATE_TIME, new Date("2018-03-18T12:30:00));
Fptr.initDevice();

Для выполнения начальной инициализации необходимо вызвать метод initDevice() и передать следующие параметры инициализации:

Параметр Описание Тип
LIBFPTR_PARAM_SERIAL_NUMBER Заводской номер string
LIBFPTR_PARAM_MAC_ADDRESS MAC-адрес string
LIBFPTR_PARAM_DATE_TIME Дата и время datetime
LIBFPTR_PARAM_FULL_RESET Выполнять общую очистку памяти bool

Технологическое обнуление

Технологическое обнуление

libfptr_reset_settings(fptr);
fptr.resetSettings()
fptr.resetSettings();
fptr.resetSettings();
[fptr resetSettings];
fptr.resetSettings();
begin
    fptr.resetSettings;
end;
fptr.ResetSettings()
Fptr.resetSettings();

Для выполнения технологического обнуления необходимо вызвать метод resetSettings().

Технологическое обнуление включает в себя:

Установка даты и времени

Установка даты и времени

libfptr_set_param_datetime(fptr, LIBFPTR_PARAM_DATE_TIME, 2018, 3, 18, 12, 30, 00);
libfptr_write_date_time(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATE_TIME, datetime.datetime(2018, 3, 18, 12, 30, 00))
fptr.writeDateTime()
Calendar c = Calendar.getInstance();
c.set(2018, 3, 18, 12, 30, 00);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATE_TIME, c.getTime());
fptr.writeDateTime();
Calendar c = Calendar.getInstance();
c.set(2018, 3, 18, 12, 30, 00);
fptr.setParam(IFptr.LIBFPTR_PARAM_DATE_TIME, c.getTime());
fptr.writeDateTime();
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:[2018 intValue]];
[components setMonth:[3 intValue]];
[components setDay:[18 intValue]];
[components setHour:[12 intValue]];
[components setMinute:[30 intValue]];
[components setSecond:[00 intValue]];

[fptr setParam:LIBFPTR_PARAM_DATE_TIME, NSDateParam:[calendar dateFromComponents:components]];
[fptr writeDateTime];
fptr.setParam(Constants.LIBFPTR_PARAM_DATE_TIME, new DateTime(2018, 3, 18, 12, 30, 0));
fptr.writeDateTime();
var
    date: TDateTime;
begin
    date := StrToDateTime('18.03.2018 12:30:00');
    fptr.setParam(fptr.LIBFPTR_PARAM_DATE_TIME, date);
    fptr.writeDateTime;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_DATE_TIME, time.Date(2018, 3, 18, 12, 30, 0, 0, time.Now().Location()))
fptr.WriteDateTime()
Fptr.setParam(Fptr.LIBFPTR_PARAM_DATE_TIME, new Date("2018-03-18T12:30:00));
Fptr.writeDateTime();

Для ввода даты и времени необходимо вызвать метод writeDateTime() и передать дату и время в параметре LIBFPTR_PARAM_DATE_TIME.

Запись лицензии

Запись лицензии

libfptr_set_param_int(fptr, LIBFPTR_PARAM_LICENSE_NUMBER, 4);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_LICENSE, L"1234567890");
libfptr_write_license(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_LICENSE_NUMBER, 4)
fptr.setParam(IFptr.LIBFPTR_PARAM_LICENSE, "1234567890")
fptr.writeLicense()
fptr.setParam(IFptr.LIBFPTR_PARAM_LICENSE_NUMBER, 4);
fptr.setParam(IFptr.LIBFPTR_PARAM_LICENSE, "1234567890");
fptr.writeLicense();
fptr.setParam(IFptr.LIBFPTR_PARAM_LICENSE_NUMBER, 4);
fptr.setParam(IFptr.LIBFPTR_PARAM_LICENSE, "1234567890");
fptr.writeLicense();
[fptr setParam:LIBFPTR_PARAM_LICENSE_NUMBER, intParam:4];
[fptr setParam:LIBFPTR_PARAM_LICENSE, NSString:@"1234567890"];
[fptr writeLicense];
fptr.setParam(Constants.LIBFPTR_PARAM_LICENSE_NUMBER, 4);
fptr.setParam(Constants.LIBFPTR_PARAM_LICENSE, "1234567890");
fptr.writeLicense();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_LICENSE_NUMBER, 4);
    fptr.setParam(fptr.LIBFPTR_PARAM_LICENSE, '1234567890');
    fptr.writeLicense;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_LICENSE_NUMBER, 4)
fptr.SetParam(fptr10.LIBFPTR_PARAM_LICENSE, "1234567890")
fptr.WriteLicense()
Fptr.setParam(Fptr.LIBFPTR_PARAM_LICENSE_NUMBER, 4);
Fptr.setParam(Fptr.LIBFPTR_PARAM_LICENSE, "1234567890");
Fptr.writeLicense();

Для записи кода защиты / лицензии в ККТ необходимо вызвать метод writeLicense() и передать идентификатор лицензии (код защиты) в параметре LIBFPTR_PARAM_LICENSE и тип лицензии (номер кода защиты) в параметре LIBFPTR_PARAM_LICENSE_NUMBER.

Прочие методы

Выполнение команды

Выполнение команды

uchar command[4] = {0x91, 0x13, 0x00, 0x00};
libfptr_set_param_int(fptr, LIBFPTR_PARAM_TIMEOUT_ENQ, 10000);
libfptr_set_param_bytearray(fptr, LIBFPTR_PARAM_COMMAND_BUFFER, command, sizeof(command) / sizeof(command[0]));
libfptr_run_command(fptr);

std::vector<uchar> answer(16);
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_ANSWER_BUFFER, &answer[0], answer.size());
if (size > answer.size())
{
    answer.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_ANSWER_BUFFER, &answer[0], answer.size());
}
answer.resize(size);
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMAND_BUFFER, [0x91, 0x13, 0x00, 0x00])
fptr.setParam(IFptr.LIBFPTR_PARAM_TIMEOUT_ENQ, 10000)
fptr.runCommand()

answer = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_ANSWER_BUFFER)
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMAND_BUFFER, new byte[]{0x91, 0x13, 0x00, 0x00});
fptr.setParam(IFptr.LIBFPTR_PARAM_TIMEOUT_ENQ, 10000);
fptr.runCommand();

byte[] answer = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_ANSWER_BUFFER);
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMAND_BUFFER, new byte[]{0x91, 0x13, 0x00, 0x00});
fptr.setParam(IFptr.LIBFPTR_PARAM_TIMEOUT_ENQ, 10000);
fptr.runCommand();

byte[] answer = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_ANSWER_BUFFER);
uchar command[4] = {0x91, 0x13, 0x00, 0x00};
[fptr setParam:LIBFPTR_PARAM_COMMAND_BUFFER, NSDataParam:[NSData dataWithBytes:(const void*)command length:sizeof(command)]];
[fptr setParam:LIBFPTR_PARAM_TIMEOUT_ENQ, intParam:10000];
[fptr runCommand];

NSData *answer = [fptr getParamByteArray:LIBFPTR_PARAM_ANSWER_BUFFER];
byte[] command = new byte[]{0x91, 0x13, 0x00, 0x00};
fptr.setParam(Constants.LIBFPTR_PARAM_COMMAND_BUFFER, command);
fptr.setParam(Constants.LIBFPTR_PARAM_TIMEOUT_ENQ, 10000);
fptr.runCommand();

byte[] answer = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_ANSWER_BUFFER);
var
    command_byte_array:    Array[0 .. 3] of Byte = ($91, $13, $00, $00);
    command_variant:       Variant;
    i:                     Integer;
    answer:                Variant;
begin
    command_variant := VarArrayCreate([0, high(command_byte_array)], varByte);
    for i := VarArrayLowBound(command_variant, 1) to VarArrayHighBound(command_variant, 1) do
    begin
        VarArrayPut(command_variant, command_byte_array[i], [i]);
    end;
    fptr.setParam(fptr.LIBFPTR_PARAM_COMMAND_BUFFER, command_variant));
    fptr.setParam(fptr.LIBFPTR_PARAM_TIMEOUT_ENQ, 10000);
    fptr.runCommand;

    answer := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_ANSWER_BUFFER);
end;
command := []byte{0x91, 0x13, 0x00, 0x00}
fptr.SetParam(fptr10.LIBFPTR_PARAM_COMMAND_BUFFER, command)
fptr.SetParam(fptr10.LIBFPTR_PARAM_TIMEOUT_ENQ, 10000)
fptr.RunCommand()

answer := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_ANSWER_BUFFER)
command = new Uint8Array([0x91, 0x13, 0x00, 0x00]);
Fptr.setParam(Fptr.LIBFPTR_PARAM_COMMAND_BUFFER, command);
Fptr.setParam(Fptr.LIBFPTR_PARAM_TIMEOUT_ENQ, 10000);
Fptr.runCommand();

answer = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_ANSWER_BUFFER);

Для выполнения произвольной команды ККТ необходимо вызвать метод runCommand() и передать ему команду в параметре LIBFPTR_PARAM_COMMAND_BUFFER и время ожидания ответа на команду в параметре LIBFPTR_PARAM_TIMEOUT_ENQ. Также можно не дожидаться ответа, если передать параметр LIBFPTR_PARAM_NO_NEED_ANSWER, равный true.

Отрезка ЧЛ

Отрезка чековой ленты

libfptr_cut(fptr);
fptr.cut()
fptr.cut();
fptr.cut();
[fptr cut];
fptr.cut();
begin
    fptr.cut;
end;
fptr.Cut()
Fptr.cut();

Для отрезки чековой ленты необходимо вызвать метод cut(). Дополнительно можно указать тип отрезки в параметре LIBFPTR_PARAM_CUT_TYPE. Если параметр не указан, драйвер сам определит способ отрезки.

Выравнивание LIBFPTR_PARAM_CUT_TYPE может принимать следующие значения:

Промотка ЧЛ

Промотка чековой ленты

libfptr_line_feed(fptr);
fptr.lineFeed()
fptr.lineFeed();
fptr.lineFeed();
[fptr lineFeed];
fptr.lineFeed();
begin
    fptr.lineFeed;
end;
fptr.LineFeed()
Fptr.lineFeed();

Для промотки чековой ленты необходимо вызвать метод lineFeed().

Звуковой сигнал

Звуковой сигнал

libfptr_beep(fptr);
fptr.beep()
fptr.beep();
fptr.beep();
[fptr beep];
fptr.beep();
begin
    fptr.beep;
end;
fptr.Beep()
Fptr.beep();

Для подачи звукового сигнала необходимо вызвать метод beep().

Дополнительно можно передать следующие параметры для настройки звукового сигнала:

Параметр Описание Тип
LIBFPTR_PARAM_FREQUENCY Частота, Гц. int
LIBFPTR_PARAM_DURATION Длительность, мс. int

Открытие ДЯ

Открытие денежного ящика

libfptr_open_drawer(fptr);
fptr.openDrawer()
fptr.openDrawer();
fptr.openDrawer();
[fptr openDrawer];
fptr.openDrawer();
begin
    fptr.openDrawer;
end;
fptr.OpenDrawer()
Fptr.openDrawer();

Для открытия денежного ящика, подключенного к ККТ, необходимо вызвать метод openDrawer().

Дополнительно можно передать следующие параметры для настройки открытия денежного ящика:

Параметр Описание Тип
LIBFPTR_PARAM_DRAWER_ON_TIMEOUT Длительность включения, мс. int
LIBFPTR_PARAM_DRAWER_OFF_TIMEOUT Длительность задержки, мс. int
LIBFPTR_PARAM_DRAWER_ON_QUANTITY Количество импульсов int

Разбор кода маркировки

Разбор кода маркировки (на примере "RU-401301-AAA02770301")

uchar mark[] = {0x52, 0x55, 0x2D, 0x34, 0x30,
                0x31, 0x33, 0x30, 0x31, 0x2d,
                0x41, 0x41, 0x41, 0x30, 0x32,
                0x37, 0x37, 0x30, 0x33, 0x30,
                0x31};
libfptr_set_param_bytearray(fptr, LIBFPTR_PARAM_MARKING_CODE, &agentInfo[0], agentInfo.size());
libfptr_parse_marking_code(fptr);

std::vector<uchar> tag1162(32);
int size = libfptr_get_param_bytearray(fptr, 1162, &tag1162[0], tag1162.size());
if (size > tag1162.size())
{
    tag1162.resize(size);
    size = libfptr_get_param_bytearray(fptr, 1162, &tag1162[0], tag1162.size());
}
tag1162.resize(size);
fptr.setParam(IFptr.LIBFPTR_PARAM_MARKING_CODE, [0x52, 0x55, 0x2D, 0x34, 0x30,
                                                 0x31, 0x33, 0x30, 0x31, 0x2d,
                                                 0x41, 0x41, 0x41, 0x30, 0x32,
                                                 0x37, 0x37, 0x30, 0x33, 0x30,
                                                 0x31])
fptr.parseMarkingCode()
tag1162 = fptr.getParamByteArray(1162)
fptr.setParam(IFptr.LIBFPTR_PARAM_MARKING_CODE, new byte[]{0x52, 0x55, 0x2D, 0x34, 0x30,
                                                           0x31, 0x33, 0x30, 0x31, 0x2d,
                                                           0x41, 0x41, 0x41, 0x30, 0x32,
                                                           0x37, 0x37, 0x30, 0x33, 0x30,
                                                           0x31);
fptr.parseMarkingCode();
byte[] tag1162 = fptr.getParamByteArray(1162);
fptr.setParam(IFptr.LIBFPTR_PARAM_MARKING_CODE, new byte[]{0x52, 0x55, 0x2D, 0x34, 0x30,
                                                           0x31, 0x33, 0x30, 0x31, 0x2d,
                                                           0x41, 0x41, 0x41, 0x30, 0x32,
                                                           0x37, 0x37, 0x30, 0x33, 0x30,
                                                           0x31);
fptr.parseMarkingCode();
byte[] tag1162 = fptr.getParamByteArray(1162);
uchar mark[] = {0x52, 0x55, 0x2D, 0x34, 0x30,
                0x31, 0x33, 0x30, 0x31, 0x2d,
                0x41, 0x41, 0x41, 0x30, 0x32,
                0x37, 0x37, 0x30, 0x33, 0x30,
                0x31};
[fptr setParam:LIBFPTR_PARAM_MARKING_CODE, NSDataParam:[NSData dataWithBytes:(const void*)mark length:sizeof(mark)]];
[fptr parseMarkingCode];
NSData *tag1162 = [fptr getParamByteArray:1162];
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE, new byte[]{0x52, 0x55, 0x2D, 0x34, 0x30,
                                                               0x31, 0x33, 0x30, 0x31, 0x2d,
                                                               0x41, 0x41, 0x41, 0x30, 0x32,
                                                               0x37, 0x37, 0x30, 0x33, 0x30,
                                                               0x31});
fptr.parseMarkingCode();
byte[] tag1162 = fptr.getParamByteArray(1162);
var
    tag1162:  Variant;
    mark:     Array[0 .. 31] of Byte = ($52, $55, $2D, $34, $30,
                                        $31, $33, $30, $31, $2d,
                                        $41, $41, $41, $30, $32,
                                        $37, $37, $30, $33, $30,
                                        $31);
    mark_var: Variant;
    i:        Integer;
begin
    mark_var := VarArrayCreate([0, high(mark)], varByte);
    for i := VarArrayLowBound(mark_var, 1) to VarArrayHighBound(mark_var, 1) do
    begin
        VarArrayPut(mark_var, mark[i], [i]);
    end;
    fptr.setParam(fptr.LIBFPTR_PARAM_MARKING_CODE, mark_var);

    fptr.parseMarkingCode
    tag1162 := fptr.getParamByteArray(1162);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_MARKING_CODE, []byte{0x52, 0x55, 0x2D, 0x34, 0x30,
                                                        0x31, 0x33, 0x30, 0x31, 0x2d,
                                                        0x41, 0x41, 0x41, 0x30, 0x32,
                                                        0x37, 0x37, 0x30, 0x33, 0x30,
                                                        0x31})
fptr.ParseMarkingCode()
tag1162 := fptr.GetParamByteArray(1162)
fptr.setParam(Constants.LIBFPTR_PARAM_MARKING_CODE, new Uint8Array([0x52, 0x55, 0x2D, 0x34, 0x30,
                                                                    0x31, 0x33, 0x30, 0x31, 0x2d,
                                                                    0x41, 0x41, 0x41, 0x30, 0x32,
                                                                    0x37, 0x37, 0x30, 0x33, 0x30,
                                                                    0x31]));
Fptr.parseMarkingCode();
tag1162 = fptr.getParamByteArray(1162);

Для разбора кода маркировки необходимо вызвать метод parseMarkingCode() и указать в параметре LIBFPTR_PARAM_MARKING_CODE значение штрихкода. Сформированное на его базе значение реквизита 1162 будет записано в параметр 1162.

Формирование составного реквизита

Формирование составной TLV-структуры (на примере данных агента)

libfptr_set_param_str(fptr, 1005, L"ул. Свободы, 13");
libfptr_set_param_str(fptr, 1016, L"123456789047");
libfptr_set_param_str(fptr, 1026, L"Оператор 1");
libfptr_set_param_str(fptr, 1044, L"Оплата");
libfptr_set_param_str(fptr, 1073, L"+79121234567");
libfptr_set_param_str(fptr, 1074, L"+79121234568");
libfptr_set_param_str(fptr, 1074, L"+79121234574");
libfptr_set_param_str(fptr, 1075, L"+79121234569");
libfptr_util_form_tlv(fptr);

std::vector<uchar> agentInfo(128);
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &agentInfo[0], agentInfo.size());
if (size > agentInfo.size())
{
    agentInfo.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &agentInfo[0], agentInfo.size());
}
agentInfo.resize(size);

// ...
libfptr_set_param_bytearray(fptr, 1223, &agentInfo[0], agentInfo.size());
fptr.setParam(1005, "ул. Свободы, 13")
fptr.setParam(1016, "123456789047")
fptr.setParam(1026, "Оператор 1")
fptr.setParam(1044, "Оплата")
fptr.setParam(1073, "+79121234567")
fptr.setParam(1074, "+79121234568")
fptr.setParam(1074, "+79121234574")
fptr.setParam(1075, "+79121234569")
fptr.utilFormTlv()

agentInfo = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)

# ...
fptr.setParam(1223, agentInfo)
fptr.setParam(1005, "ул. Свободы, 13");
fptr.setParam(1016, "123456789047");
fptr.setParam(1026, "Оператор 1");
fptr.setParam(1044, "Оплата");
fptr.setParam(1073, "+79121234567");
fptr.setParam(1074, "+79121234568");
fptr.setParam(1074, "+79121234574");
fptr.setParam(1075, "+79121234569");
fptr.utilFormTlv();

byte[] agentInfo = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);

// ...
fptr.setParam(1223, agentInfo);
fptr.setParam(1005, "ул. Свободы, 13");
fptr.setParam(1016, "123456789047");
fptr.setParam(1026, "Оператор 1");
fptr.setParam(1044, "Оплата");
fptr.setParam(1073, "+79121234567");
fptr.setParam(1074, "+79121234568");
fptr.setParam(1074, "+79121234574");
fptr.setParam(1075, "+79121234569");
fptr.utilFormTlv();

byte[] agentInfo = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);

// ...
fptr.setParam(1223, agentInfo);
[fptr setParam:1005, NSStringParam:@"ул. Свободы, 13"];
[fptr setParam:1016, NSStringParam:@"123456789047"];
[fptr setParam:1026, NSStringParam:@"Оператор 1"];
[fptr setParam:1044, NSStringParam:@"Оплата"];
[fptr setParam:1073, NSStringParam:@"+79121234567"];
[fptr setParam:1074, NSStringParam:@"+79121234568"];
[fptr setParam:1074, NSStringParam:@"+79121234574"];
[fptr setParam:1075, NSStringParam:@"+79121234569"];
[fptr utilFormTlv];

NSData *agentInfo = [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE];

// ...
[fptr setParam:1223, NSDataParam:agentInfo];
fptr.setParam(1005, "ул. Свободы, 13");
fptr.setParam(1016, "123456789047");
fptr.setParam(1026, "Оператор 1");
fptr.setParam(1044, "Оплата");
fptr.setParam(1073, "+79121234567");
fptr.setParam(1074, "+79121234568");
fptr.setParam(1074, "+79121234574");
fptr.setParam(1075, "+79121234569");
fptr.utilFormTlv();

byte[] agentInfo = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE);

// ...
fptr.setParam(1223, agentInfo);
var
    agentInfo: Variant;
begin
    fptr.setParam(1005, 'ул. Свободы, 13');
    fptr.setParam(1016, '123456789047');
    fptr.setParam(1026, 'Оператор 1');
    fptr.setParam(1044, 'Оплата');
    fptr.setParam(1073, '+79121234567');
    fptr.setParam(1074, '+79121234568');
    fptr.setParam(1074, '+79121234574');
    fptr.setParam(1075, '+79121234569');
    fptr.utilFormTlv;

    agentInfo := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);

    // ...
    fptr.setParam(1223, agentInfo);
end;
fptr.SetParam(1005, "ул. Свободы, 13")
fptr.SetParam(1016, "123456789047")
fptr.SetParam(1026, "Оператор 1")
fptr.SetParam(1044, "Оплата")
fptr.SetParam(1073, "+79121234567")
fptr.SetParam(1074, "+79121234568")
fptr.SetParam(1074, "+79121234574")
fptr.SetParam(1075, "+79121234569")
fptr.UtilFormTlv()

agentInfo := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE)

// ...
fptr.SetParam(1223, agentInfo)
Fptr.setParam(1005, "ул. Свободы, 13");
Fptr.setParam(1016, "123456789047");
Fptr.setParam(1026, "Оператор 1");
Fptr.setParam(1044, "Оплата");
Fptr.setParam(1073, "+79121234567");
Fptr.setParam(1074, "+79121234568");
Fptr.setParam(1074, "+79121234574");
Fptr.setParam(1075, "+79121234569");
Fptr.utilFormTlv();

agentInfo = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE);

// ...
Fptr.setParam(1223, agentInfo);

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

Формирование списка настроек

Формирование списка возможных значений для настройки LIBFPTR_SETTING_MODEL (модель ККТ)

libfptr_set_param_str(fptr, LIBFPTR_PARAM_MAPPING_KEY, LIBFPTR_SETTING_MODEL);
libfptr_util_mapping(fptr);

std::vector<wchar_t> models(256);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_MAPPING_VALUE, &models[0], models.size());
if (size > models.size())
{
    models.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_MAPPING_VALUE, &models[0], models.size());
}
fptr.setParam(IFptr.LIBFPTR_PARAM_MAPPING_KEY, IFptr.LIBFPTR_SETTING_MODEL)
fptr.utilMapping()

models = fptr.getParamString(IFptr.LIBFPTR_PARAM_MAPPING_VALUE)
fptr.setParam(IFptr.LIBFPTR_PARAM_MAPPING_KEY, IFptr.LIBFPTR_SETTING_MODEL);
fptr.utilMapping();

String models = fptr.getParamString(IFptr.LIBFPTR_PARAM_MAPPING_VALUE);
fptr.setParam(IFptr.LIBFPTR_PARAM_MAPPING_KEY, IFptr.LIBFPTR_SETTING_MODEL);
fptr.utilMapping();

String models = fptr.getParamString(IFptr.LIBFPTR_PARAM_MAPPING_VALUE);
[fptr setParam:LIBFPTR_PARAM_MAPPING_KEY, NSStringParam:LIBFPTR_SETTING_MODEL];
[fptr utilMapping];

NSString *models = [fptr getParamString:LIBFPTR_PARAM_MAPPING_VALUE];
fptr.setParam(Constants.LIBFPTR_PARAM_MAPPING_KEY, Constants.LIBFPTR_SETTING_MODEL);
fptr.utilMapping();

String models = fptr.getParamString(Constants.LIBFPTR_PARAM_MAPPING_VALUE);
var
    models: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_MAPPING_KEY, fptr.LIBFPTR_SETTING_MODEL);
    fptr.utilMapping;

    models := fptr.getParamString(fptr.LIBFPTR_PARAM_MAPPING_VALUE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_MAPPING_KEY, fptr10.LIBFPTR_SETTING_MODEL)
fptr.UtilMapping()

models := fptr.GetParamString(fptr10.LIBFPTR_PARAM_MAPPING_VALUE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_MAPPING_KEY, Fptr.LIBFPTR_SETTING_MODEL);
Fptr.utilMapping();

models = Fptr.getParamString(Fptr.LIBFPTR_PARAM_MAPPING_VALUE);
> Значением параметра LIBFPTR_PARAM_MAPPING_VALUE является Json следующего вида:

[
   {
      "key": <значение 1, строка>,
      "description": <описание значения 1, строка>
   },
   {
      "key": <значение 2, строка>,
      "description": <описание значения 2, строка>
   },
   {
      "key": <значение 3, строка>,
      "description": <описание значения 3, строка>
   },
   ...
]

Для формирования списка доступных настроек необходимо вызвать метод utilMapping().

Список доступных для получения списка значений настроек:

Формирование кода товара

Формирование кода изделия их меха

libfptr_set_param_int(fptr, LIBFPTR_PARAM_NOMENCLATURE_TYPE, LIBFPTR_NT_FURS);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_GTIN, L"98765432101234");
libfptr_set_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, L"RU-430302-ABC1234567");
libfptr_util_form_nomenclature(fptr);

std::vector<uchar> nomenclatureCode;
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &nomenclatureCode[0], nomenclatureCode.size());
if (size > nomenclatureCode.size())
{
    nomenclatureCode.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &nomenclatureCode[0], nomenclatureCode.size());
}
fptr.setParam(IFptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, IFptr.LIBFPTR_NT_FURS)
fptr.setParam(IFptr.LIBFPTR_PARAM_GTIN, "98765432101234")
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "RU-430302-ABC1234567")
fptr.utilFormNomenclature()

nomenclatureCode = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)
fptr.setParam(IFptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, IFptr.LIBFPTR_NT_FURS);
fptr.setParam(IFptr.LIBFPTR_PARAM_GTIN, "98765432101234");
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "RU-430302-ABC1234567");
fptr.utilFormNomenclature();

byte[] nomenclatureCode = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
fptr.setParam(IFptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, IFptr.LIBFPTR_NT_FURS);
fptr.setParam(IFptr.LIBFPTR_PARAM_GTIN, "98765432101234");
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "RU-430302-ABC1234567");
fptr.utilFormNomenclature();

byte[] nomenclatureCode = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
[fptr setParam:LIBFPTR_PARAM_NOMENCLATURE_TYPE, intParam:LIBFPTR_NT_FURS];
[fptr setParam:LIBFPTR_PARAM_GTIN, NSStringParam:@"98765432101234"];
[fptr setParam:LIBFPTR_PARAM_SERIAL_NUMBER, NSStringParam:@"RU-430302-ABC1234567"];
[fptr utilFormNomenclature];

NSData *nomenclatureCode = [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE];
fptr.setParam(Constants.LIBFPTR_PARAM_NOMENCLATURE_TYPE, Constants.LIBFPTR_NT_FURS);
fptr.setParam(Constants.LIBFPTR_PARAM_GTIN, "98765432101234");
fptr.setParam(Constants.LIBFPTR_PARAM_SERIAL_NUMBER, "RU-430302-ABC1234567");
fptr.utilFormNomenclature();

byte[] nomenclatureCode = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE);
var
    nomenclatureCode: Variant;
begin
    fptr.setParam(fptr.LLIBFPTR_PARAM_NOMENCLATURE_TYPE, fptr.LIBFPTR_NT_FURS);
    fptr.setParam(fptr.LIBFPTR_PARAM_GTIN, '98765432101234');
    fptr.setParam(fptr.LIBFPTR_PARAM_SERIAL_NUMBER, 'RU-430302-ABC1234567');
    fptr.utilFormNomenclature;

    nomenclatureCode := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_NOMENCLATURE_TYPE, fptr10.LIBFPTR_NT_FURS)
fptr.SetParam(fptr10.LIBFPTR_PARAM_GTIN, "98765432101234")
fptr.SetParam(fptr10.LIBFPTR_PARAM_SERIAL_NUMBER, "RU-430302-ABC1234567")
fptr.UtilFormNomenclature()

nomenclatureCode := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, Fptr.LIBFPTR_NT_FURS);
Fptr.setParam(Fptr.LIBFPTR_PARAM_GTIN, "98765432101234");
Fptr.setParam(Fptr.LIBFPTR_PARAM_SERIAL_NUMBER, "RU-430302-ABC1234567");
Fptr.utilFormNomenclature();

nomenclatureCode = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE);

Формирование кода лекарственного препарата

libfptr_set_param_int(fptr, LIBFPTR_PARAM_NOMENCLATURE_TYPE, LIBFPTR_NT_MEDICINES);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_GTIN, L"98765432101234");
libfptr_set_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, L"ABC1234567890");
libfptr_util_form_nomenclature(fptr);

std::vector<uchar> nomenclatureCode;
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &nomenclatureCode[0], nomenclatureCode.size());
if (size > nomenclatureCode.size())
{
    nomenclatureCode.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &nomenclatureCode[0], nomenclatureCode.size());
}
fptr.setParam(IFptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, IFptr.LIBFPTR_NT_MEDICINES)
fptr.setParam(IFptr.LIBFPTR_PARAM_GTIN, "98765432101234")
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "ABC1234567890")
fptr.utilFormNomenclature()

nomenclatureCode = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)
fptr.setParam(IFptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, IFptr.LIBFPTR_NT_MEDICINES);
fptr.setParam(IFptr.LIBFPTR_PARAM_GTIN, "98765432101234");
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "ABC1234567890");
fptr.utilFormNomenclature();

byte[] nomenclatureCode = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
fptr.setParam(IFptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, IFptr.LIBFPTR_NT_MEDICINES);
fptr.setParam(IFptr.LIBFPTR_PARAM_GTIN, "98765432101234");
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "ABC1234567890");
fptr.utilFormNomenclature();

byte[] nomenclatureCode = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
[fptr setParam:LIBFPTR_PARAM_NOMENCLATURE_TYPE, intParam:LIBFPTR_NT_MEDICINES];
[fptr setParam:LIBFPTR_PARAM_GTIN, NSStringParam:@"98765432101234"];
[fptr setParam:LIBFPTR_PARAM_SERIAL_NUMBER, NSStringParam:@"ABC1234567890"];
[fptr utilFormNomenclature];

NSData *nomenclatureCode = [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE];
fptr.setParam(Constants.LIBFPTR_PARAM_NOMENCLATURE_TYPE, Constants.LIBFPTR_NT_MEDICINES);
fptr.setParam(Constants.LIBFPTR_PARAM_GTIN, "98765432101234");
fptr.setParam(Constants.LIBFPTR_PARAM_SERIAL_NUMBER, "ABC1234567890");
fptr.utilFormNomenclature();

byte[] nomenclatureCode = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE);
var
    nomenclatureCode: Variant;
begin
    fptr.setParam(fptr.LLIBFPTR_PARAM_NOMENCLATURE_TYPE, fptr.LIBFPTR_NT_MEDICINES);
    fptr.setParam(fptr.LIBFPTR_PARAM_GTIN, '98765432101234');
    fptr.setParam(fptr.LIBFPTR_PARAM_SERIAL_NUMBER, 'ABC1234567890');
    fptr.utilFormNomenclature;

    nomenclatureCode := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_NOMENCLATURE_TYPE, fptr10.LIBFPTR_NT_MEDICINES)
fptr.SetParam(fptr10.LIBFPTR_PARAM_GTIN, "98765432101234")
fptr.SetParam(fptr10.LIBFPTR_PARAM_SERIAL_NUMBER, "ABC1234567890")
fptr.UtilFormNomenclature()

nomenclatureCode := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, Fptr.LIBFPTR_NT_MEDICINES);
Fptr.setParam(Fptr.LIBFPTR_PARAM_GTIN, "98765432101234");
Fptr.setParam(Fptr.LIBFPTR_PARAM_SERIAL_NUMBER, "ABC1234567890");
Fptr.utilFormNomenclature();

nomenclatureCode = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE);

Формирование кода табачного изделия

libfptr_set_param_int(fptr, LIBFPTR_PARAM_NOMENCLATURE_TYPE, LIBFPTR_NT_TOBACCO);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_GTIN, L"98765432101234");
libfptr_set_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, L"ABC1234");
libfptr_util_form_nomenclature(fptr);

std::vector<uchar> nomenclatureCode;
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &nomenclatureCode[0], nomenclatureCode.size());
if (size > nomenclatureCode.size())
{
    nomenclatureCode.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &nomenclatureCode[0], nomenclatureCode.size());
}
fptr.setParam(IFptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, IFptr.LIBFPTR_NT_TOBACCO)
fptr.setParam(IFptr.LIBFPTR_PARAM_GTIN, "98765432101234")
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "ABC1234")
fptr.utilFormNomenclature()

nomenclatureCode = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)
fptr.setParam(IFptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, IFptr.LIBFPTR_NT_TOBACCO);
fptr.setParam(IFptr.LIBFPTR_PARAM_GTIN, "98765432101234");
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "ABC1234");
fptr.utilFormNomenclature();

byte[] nomenclatureCode = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
fptr.setParam(IFptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, IFptr.LIBFPTR_NT_TOBACCO);
fptr.setParam(IFptr.LIBFPTR_PARAM_GTIN, "98765432101234");
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "ABC1234");
fptr.utilFormNomenclature();

byte[] nomenclatureCode = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
[fptr setParam:LIBFPTR_PARAM_NOMENCLATURE_TYPE, intParam:LIBFPTR_NT_TOBACCO];
[fptr setParam:LIBFPTR_PARAM_GTIN, NSStringParam:@"98765432101234"];
[fptr setParam:LIBFPTR_PARAM_SERIAL_NUMBER, NSStringParam:@"ABC1234"];
[fptr utilFormNomenclature];

NSData *nomenclatureCode = [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE];
fptr.setParam(Constants.LIBFPTR_PARAM_NOMENCLATURE_TYPE, Constants.LIBFPTR_NT_TOBACCO);
fptr.setParam(Constants.LIBFPTR_PARAM_GTIN, "98765432101234");
fptr.setParam(Constants.LIBFPTR_PARAM_SERIAL_NUMBER, "ABC1234");
fptr.utilFormNomenclature();

byte[] nomenclatureCode = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE);
var
    nomenclatureCode: Variant;
begin
    fptr.setParam(fptr.LLIBFPTR_PARAM_NOMENCLATURE_TYPE, fptr.LIBFPTR_NT_TOBACCO);
    fptr.setParam(fptr.LIBFPTR_PARAM_GTIN, '98765432101234');
    fptr.setParam(fptr.LIBFPTR_PARAM_SERIAL_NUMBER, 'ABC1234');
    fptr.utilFormNomenclature;

    nomenclatureCode := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_NOMENCLATURE_TYPE, fptr10.LIBFPTR_NT_TOBACCO)
fptr.SetParam(fptr10.LIBFPTR_PARAM_GTIN, "98765432101234")
fptr.SetParam(fptr10.LIBFPTR_PARAM_SERIAL_NUMBER, "ABC1234")
fptr.UtilFormNomenclature()

nomenclatureCode := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, Fptr.LIBFPTR_NT_TOBACCO);
Fptr.setParam(Fptr.LIBFPTR_PARAM_GTIN, "98765432101234");
Fptr.setParam(Fptr.LIBFPTR_PARAM_SERIAL_NUMBER, "ABC1234");
Fptr.utilFormNomenclature();

nomenclatureCode = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE);

Формирование кода обуви

libfptr_set_param_int(fptr, LIBFPTR_PARAM_NOMENCLATURE_TYPE, LIBFPTR_NT_SHOES);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_GTIN, L"98765432101234");
libfptr_set_param_str(fptr, LIBFPTR_PARAM_SERIAL_NUMBER, L"sgEKKPPcS25y5");
libfptr_util_form_nomenclature(fptr);

std::vector<uchar> nomenclatureCode;
int size = libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &nomenclatureCode[0], nomenclatureCode.size());
if (size > nomenclatureCode.size())
{
    nomenclatureCode.resize(size);
    libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_TAG_VALUE, &nomenclatureCode[0], nomenclatureCode.size());
}
fptr.setParam(IFptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, IFptr.LIBFPTR_NT_SHOES)
fptr.setParam(IFptr.LIBFPTR_PARAM_GTIN, "98765432101234")
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "sgEKKPPcS25y5")
fptr.utilFormNomenclature()

nomenclatureCode = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)
fptr.setParam(IFptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, IFptr.LIBFPTR_NT_SHOES);
fptr.setParam(IFptr.LIBFPTR_PARAM_GTIN, "98765432101234");
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "sgEKKPPcS25y5");
fptr.utilFormNomenclature();

byte[] nomenclatureCode = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
fptr.setParam(IFptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, IFptr.LIBFPTR_NT_SHOES);
fptr.setParam(IFptr.LIBFPTR_PARAM_GTIN, "98765432101234");
fptr.setParam(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER, "sgEKKPPcS25y5");
fptr.utilFormNomenclature();

byte[] nomenclatureCode = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE);
[fptr setParam:LIBFPTR_PARAM_NOMENCLATURE_TYPE, intParam:LIBFPTR_NT_SHOES];
[fptr setParam:LIBFPTR_PARAM_GTIN, NSStringParam:@"98765432101234"];
[fptr setParam:LIBFPTR_PARAM_SERIAL_NUMBER, NSStringParam:@"sgEKKPPcS25y5"];
[fptr utilFormNomenclature];

NSData *nomenclatureCode = [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE];
fptr.setParam(Constants.LIBFPTR_PARAM_NOMENCLATURE_TYPE, Constants.LIBFPTR_NT_SHOES);
fptr.setParam(Constants.LIBFPTR_PARAM_GTIN, "98765432101234");
fptr.setParam(Constants.LIBFPTR_PARAM_SERIAL_NUMBER, "sgEKKPPcS25y5");
fptr.utilFormNomenclature();

byte[] nomenclatureCode = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE);
var
    nomenclatureCode: Variant;
begin
    fptr.setParam(fptr.LLIBFPTR_PARAM_NOMENCLATURE_TYPE, fptr.LIBFPTR_NT_SHOES);
    fptr.setParam(fptr.LIBFPTR_PARAM_GTIN, '98765432101234');
    fptr.setParam(fptr.LIBFPTR_PARAM_SERIAL_NUMBER, 'sgEKKPPcS25y5');
    fptr.utilFormNomenclature;

    nomenclatureCode := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_NOMENCLATURE_TYPE, Constants.LIBFPTR_NT_SHOES)
fptr.SetParam(fptr10.LIBFPTR_PARAM_GTIN, "98765432101234")
fptr.SetParam(fptr10.LIBFPTR_PARAM_SERIAL_NUMBER, "sgEKKPPcS25y5")
fptr.UtilFormNomenclature()

nomenclatureCode := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_NOMENCLATURE_TYPE, Fptr.LIBFPTR_NT_SHOES);
Fptr.setParam(Fptr.LIBFPTR_PARAM_GTIN, "98765432101234");
Fptr.setParam(Fptr.LIBFPTR_PARAM_SERIAL_NUMBER, "sgEKKPPcS25y5");
Fptr.utilFormNomenclature();

nomenclatureCode = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE);

Для формирования кода товара (КТ) можно использовать метод utilFormNomenclature(). Входные параметры могут отличаться в зависимости от типа КТ (LIBFPTR_PARAM_NOMENCLATURE_TYPE).

Входные параметры для изделий из меха (LIBFPTR_PARAM_NOMENCLATURE_TYPE = LIBFPTR_NT_FURS):

Параметр Описание Тип
LIBFPTR_PARAM_GTIN Идентификатор продукта GTIN string, 14 символов
LIBFPTR_PARAM_SERIAL_NUMBER Серийный номер string, 20 символов

Входные параметры для лекарственных препаратов (LIBFPTR_PARAM_NOMENCLATURE_TYPE = LIBFPTR_NT_MEDICINES):

Параметр Описание Тип
LIBFPTR_PARAM_GTIN Идентификатор продукта GTIN string, 14 символов
LIBFPTR_PARAM_SERIAL_NUMBER Контрольный (идентификационный) знак (КиЗ) string, 13 символов

Входные параметры для табачной продукции (LIBFPTR_PARAM_NOMENCLATURE_TYPE = LIBFPTR_NT_TOBACCO):

Параметр Описание Тип
LIBFPTR_PARAM_GTIN Идентификатор продукта GTIN string, 14 символов
LIBFPTR_PARAM_SERIAL_NUMBER Код идентификации string, 7 символов

Входные параметры для обуви (LIBFPTR_PARAM_NOMENCLATURE_TYPE = LIBFPTR_NT_SHOES):

Параметр Описание Тип
LIBFPTR_PARAM_GTIN Идентификатор продукта GTIN string, 14 символов
LIBFPTR_PARAM_SERIAL_NUMBER Серийный номер string, 13 символов

Получение информации о реквизите ФН

Получение информации о реквизите ФН

libfptr_set_param_int(fptr, LIBFPTR_PARAM_TAG_NUMBER, 1012);
libfptr_util_tag_info(fptr);

std::vector<wchar_t> str(256);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_TAG_NAME, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_TAG_NAME, &str[0], str.size());
}
std::wstring name = std::wstring(&str[0]);

uint type = libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_TYPE);
bool isComplex = libfptr_get_param_bool(fptr, LIBFPTR_PARAM_TAG_IS_COMPLEX) ? true : false;
bool isRepeatable = libfptr_get_param_bool(fptr, LIBFPTR_PARAM_TAG_IS_REPEATABLE) ? true : false;
fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_NUMBER, 1012)
fptr.utilTagInfo()

name = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME)
type = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE)
isComplex = fptr.getParamBool(IFptr.LIBFPTR_PARAM_TAG_IS_COMPLEX)
isRepeatable = fptr.getParamBool(IFptr.LIBFPTR_PARAM_TAG_IS_REPEATABLE)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_NUMBER, 1012);
fptr.utilTagInfo();

String name = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME);
int type = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE);
boolean isComplex = fptr.getParamBool(IFptr.LIBFPTR_PARAM_TAG_IS_COMPLEX);
boolean isRepeatable = fptr.getParamBool(IFptr.LIBFPTR_PARAM_TAG_IS_REPEATABLE);
fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_NUMBER, 1012);
fptr.utilTagInfo();

String name = fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME);
int type = fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE);
boolean isComplex = fptr.getParamBool(IFptr.LIBFPTR_PARAM_TAG_IS_COMPLEX);
boolean isRepeatable = fptr.getParamBool(IFptr.LIBFPTR_PARAM_TAG_IS_REPEATABLE);
[fptr setParam:LIBFPTR_PARAM_TAG_NUMBER, intParam:1012];
[fptr utilTagInfo];

NSString *name = [fptr getParamString:LIBFPTR_PARAM_TAG_NAME];
uint type = [fptr getParamInt:LIBFPTR_PARAM_TAG_TYPE];
bool isComplex = [fptr getParamBool:LIBFPTR_PARAM_TAG_IS_COMPLEX];
bool isRepeatable = [fptr getParamBool:LIBFPTR_PARAM_TAG_IS_REPEATABLE];
fptr.setParam(Constants.LIBFPTR_PARAM_TAG_NUMBER, 1012);
fptr.utilTagInfo();

String name = fptr.getParamString(Constants.LIBFPTR_PARAM_TAG_NAME);
int type = fptr.getParamInt(Constants.LIBFPTR_PARAM_TAG_TYPE);
bool isComplex = fptr.getParamBool(Constants.LIBFPTR_PARAM_TAG_IS_COMPLEX);
bool isRepeatable = fptr.getParamBool(Constants.LIBFPTR_PARAM_TAG_IS_REPEATABLE);
var
    name: String;
    type: LongInt;
    isComplex: LongBool;
    isRepeatable: LongBool;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_TAG_NUMBER, 1012);
    fptr.utilTagInfo;

    serialNumber    := fptr.getParamString(fptr.LIBFPTR_PARAM_TAG_NAME);
    type            := fptr.getParamInt(fptr.LIBFPTR_PARAM_TAG_TYPE);
    isComplex       := fptr.getParamBool(fptr.LIBFPTR_PARAM_TAG_IS_COMPLEX);
    isRepeatable    := fptr.getParamBool(fptr.LIBFPTR_PARAM_TAG_IS_REPEATABLE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_TAG_NUMBER, 1012)
fptr.UtilTagInfo()

name            := fptr.GetParamString(fptr10.LIBFPTR_PARAM_TAG_NAME)
type            := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_TAG_TYPE)
isComplex       := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_TAG_IS_COMPLEX)
isRepeatable    := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_TAG_IS_REPEATABLE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_TAG_NUMBER, 1012);
Fptr.utilTagInfo();

name = Fptr.getParamString(Fptr.LIBFPTR_PARAM_TAG_NAME);
type = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_TAG_TYPE);
isComplex = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_TAG_IS_COMPLEX);
isRepeatable = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_TAG_IS_REPEATABLE);

Для получения информации о реквизите ФН требуется вызвать метод utilTagInfo() и указать в параметре LIBFPTR_PARAM_TAG_NUMBER номер реквизита.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_TAG_NAME Наименование реквизита string
LIBFPTR_PARAM_TAG_TYPE Тип реквизита int
LIBFPTR_PARAM_TAG_IS_COMPLEX true, если реквизит составной bool
LIBFPTR_PARAM_TAG_IS_REPEATABLE true, если реквизит может повторяться bool

Тип реквизита (LIBFPTR_PARAM_TAG_TYPE) может принимать следующие значения:

Запись в лог

Запись в лог произвольного сообщения

libfptr_log_write(L"MyTag", LIBFPTR_LOG_DEBUG, L"Мое отладочное сообщение");
fptr.logWrite("MyTag", IFptr.LIBFPTR_LOG_DEBUG, "Мое отладочное сообщение")
fptr.logWrite("MyTag", IFptr.LIBFPTR_LOG_DEBUG, "Мое отладочное сообщение");
fptr.logWrite("MyTag", IFptr.LIBFPTR_LOG_DEBUG, "Мое отладочное сообщение");
[fptr logWrite:@"MyTag", level:LIBFPTR_LOG_DEBUG, @"Мое отладочное сообщение"];
fptr.logWrite("MyTag", Constants.LIBFPTR_LOG_DEBUG, "Мое отладочное сообщение");
begin
    fptr.logWrite('MyTag', fptr.LIBFPTR_LOG_DEBUG, 'Мое отладочное сообщение');
end;
fptr.LogWrite("MyTag", fptr10.LIBFPTR_LOG_DEBUG, "Мое отладочное сообщение")
Fptr.logWrite("MyTag", Fptr.LIBFPTR_LOG_DEBUG, "Мое отладочное сообщение");

Для записи сообщения в лог драйвера необходимо вызвать метод logWrite() и указать в параметрах:

В случае со скриптами драйвера вместо текста можно передать любой поддерживаемый в JavaScript объект.

Уровень сообщения может принимать следующие значения:

Получить параметры модели

Получение параметров текущей модели

libfptr_read_model_flags(fptr);

bool cap54FZ                = libfptr_get_param_bool(fptr, LIBFPTR_PARAM_CAP_54FZ) != 0;
bool capManualClicheControl = libfptr_get_param_bool(fptr, LIBFPTR_PARAM_CAP_MANUAL_CLICHE_CONTROL) != 0;
bool capNonPrintReports     = libfptr_get_param_bool(fptr, LIBFPTR_PARAM_CAP_DISABLE_PRINT_REPORTS) != 0;
fptr.readModelFlags()

cap54FZ                 = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CAP_54FZ)
capManualClicheControl  = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CAP_MANUAL_CLICHE_CONTROL)
capNonPrintReports      = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CAP_DISABLE_PRINT_REPORTS)
fptr.readModelFlags();

boolean cap54FZ                 = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CAP_54FZ);
boolean capManualClicheControl  = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CAP_MANUAL_CLICHE_CONTROL);
boolean capNonPrintReports      = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CAP_DISABLE_PRINT_REPORTS);
fptr.readModelFlags();

boolean cap54FZ                 = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CAP_54FZ);
boolean capManualClicheControl  = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CAP_MANUAL_CLICHE_CONTROL);
boolean capNonPrintReports      = fptr.getParamBool(IFptr.LIBFPTR_PARAM_CAP_DISABLE_PRINT_REPORTS);
[fptr readModelFlags];

bool cap54FZ                = [fptr getParamBool:LIBFPTR_PARAM_CAP_54FZ];
bool capManualClicheControl = [fptr getParamBool:LIBFPTR_PARAM_CAP_MANUAL_CLICHE_CONTROL];
bool capNonPrintReports     = [fptr getParamBool:LIBFPTR_PARAM_CAP_DISABLE_PRINT_REPORTS];
fptr.readModelFlags();

bool cap54FZ                = fptr.getParamBool(Constants.LIBFPTR_PARAM_CAP_54FZ);
bool capManualClicheControl = fptr.getParamBool(Constants.LIBFPTR_PARAM_CAP_MANUAL_CLICHE_CONTROL);
bool capNonPrintReports     = fptr.getParamBool(Constants.LIBFPTR_PARAM_CAP_DISABLE_PRINT_REPORTS);
var
    cap54FZ:                LongBool;
    capManualClicheControl: LongBool;
    capNonPrintReports:     LongBool;
begin
    fptr.readModelFlags;

    cap54FZ                 := fptr.getParamBool(fptr.LIBFPTR_PARAM_CAP_54FZ);
    capManualClicheControl  := fptr.getParamBool(fptr.LIBFPTR_PARAM_CAP_MANUAL_CLICHE_CONTROL);
    capNonPrintReports      := fptr.getParamBool(fptr.LIBFPTR_PARAM_CAP_DISABLE_PRINT_REPORTS);
end;
fptr.ReadModelFlags();

cap54FZ                 := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_CAP_54FZ)
capManualClicheControl  := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_CAP_MANUAL_CLICHE_CONTROL)
capNonPrintReports      := fptr.GetParamBool(fptr10.LIBFPTR_PARAM_CAP_DISABLE_PRINT_REPORTS)
Fptr.readModelFlags();

cap54FZ                = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_CAP_54FZ);
capManualClicheControl = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_CAP_MANUAL_CLICHE_CONTROL);
capNonPrintReports     = Fptr.getParamBool(Fptr.LIBFPTR_PARAM_CAP_DISABLE_PRINT_REPORTS);

Метод позволяет получить набор значений, описывающих возможности ККТ, с которой в данный момент установлено соединение:

Получить информацию о контейнере ПО ККТ

Получение информации о контейнере ПО ККТ

libfptr_set_param_str(fptr, LIBFPTR_PARAM_FILENAME, L"C:\\Atol-25F.con");
libfptr_util_container_versions(fptr);

std::vector<wchar_t> str(256);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_CONTAINER_FIRMWARE_VERSION, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_CONTAINER_FIRMWARE_VERSION, &str[0], str.size());
}
std::wstring firmwareVersion = std::wstring(&str[0]);

size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_CONTAINER_BOOTLOADER_VERSION, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_CONTAINER_BOOTLOADER_VERSION, &str[0], str.size());
}
std::wstring bootloaderVersion = std::wstring(&str[0]);

size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_CONTAINER_CONFIGURATION_VERSION, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_CONTAINER_CONFIGURATION_VERSION, &str[0], str.size());
}
std::wstring configurationVersion = std::wstring(&str[0]);

size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_CONTAINER_SCRIPTS_VERSION, &str[0], str.size());
if (size > str.size())
{
    str.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_CONTAINER_SCRIPTS_VERSION, &str[0], str.size());
}
std::wstring scriptsVersion = std::wstring(&str[0]);
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, 'C:\\Atol-25F.con')
fptr.utilContainerVersions()

firmwareVersion         = fptr.getParamString(IFptr.LIBFPTR_PARAM_CONTAINER_FIRMWARE_VERSION)
bootloaderVersion       = fptr.getParamString(IFptr.LIBFPTR_PARAM_CONTAINER_BOOTLOADER_VERSION)
configurationVersion    = fptr.getParamString(IFptr.LIBFPTR_PARAM_CONTAINER_CONFIGURATION_VERSION)
scriptsVersion          = fptr.getParamString(IFptr.LIBFPTR_PARAM_CONTAINER_SCRIPTS_VERSION)
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, "C:\\Atol-25F.con");
fptr.utilContainerVersions();

String firmwareVersion      = fptr.getParamString(IFptr.LIBFPTR_PARAM_CONTAINER_FIRMWARE_VERSION);
String bootloaderVersion    = fptr.getParamString(IFptr.LIBFPTR_PARAM_CONTAINER_BOOTLOADER_VERSION);
String configurationVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_CONTAINER_CONFIGURATION_VERSION);
String scriptsVersion       = fptr.getParamString(IFptr.LIBFPTR_PARAM_CONTAINER_SCRIPTS_VERSION);
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, "/storage/emulated/0/Atol-25F.con");
fptr.utilContainerVersions();

String firmwareVersion      = fptr.getParamString(IFptr.LIBFPTR_PARAM_CONTAINER_FIRMWARE_VERSION);
String bootloaderVersion    = fptr.getParamString(IFptr.LIBFPTR_PARAM_CONTAINER_BOOTLOADER_VERSION);
String configurationVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_CONTAINER_CONFIGURATION_VERSION);
String scriptsVersion       = fptr.getParamString(IFptr.LIBFPTR_PARAM_CONTAINER_SCRIPTS_VERSION);
[fptr setParam:LIBFPTR_PARAM_FILENAME, @"/Users/user/Atol-25F.con"];
[fptr utilContainerVersions];

NSString *firmwareVersion       = [fptr getParamString:LIBFPTR_PARAM_CONTAINER_FIRMWARE_VERSION];
NSString *bootloaderVersion     = [fptr getParamString:LIBFPTR_PARAM_CONTAINER_BOOTLOADER_VERSION];
NSString *configurationVersion  = [fptr getParamString:LIBFPTR_PARAM_CONTAINER_CONFIGURATION_VERSION];
NSString *scriptsVersion        = [fptr getParamString:LIBFPTR_PARAM_CONTAINER_SCRIPTS_VERSION];
fptr.setParam(Constants.LIBFPTR_PARAM_FILENAME, "C:\\Atol-25F.con");
fptr.utilContainerVersions();

String firmwareVersion      = fptr.getParamString(Constants.LIBFPTR_PARAM_CONTAINER_FIRMWARE_VERSION);
String bootloaderVersion    = fptr.getParamString(Constants.LIBFPTR_PARAM_CONTAINER_BOOTLOADER_VERSION);
String configurationVersion = fptr.getParamString(Constants.LIBFPTR_PARAM_CONTAINER_CONFIGURATION_VERSION);
String scriptsVersion       = fptr.getParamString(Constants.LIBFPTR_PARAM_CONTAINER_SCRIPTS_VERSION);
var
    firmwareVersion: String;
    bootloaderVersion: String;
    configurationVersion: String;
    scriptsVersion: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FILENAME, 'C:\\Atol-25F.con');
    fptr.utilContainerVersions;

    firmwareVersion         := fptr.getParamString(fptr.LIBFPTR_PARAM_CONTAINER_FIRMWARE_VERSION);
    bootloaderVersion       := fptr.getParamString(fptr.LIBFPTR_PARAM_CONTAINER_BOOTLOADER_VERSION);
    configurationVersion    := fptr.getParamString(fptr.LIBFPTR_PARAM_CONTAINER_CONFIGURATION_VERSION);
    scriptsVersion          := fptr.getParamString(fptr.LIBFPTR_PARAM_CONTAINER_SCRIPTS_VERSION);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FILENAME, "C:\\Atol-25F.con")
fptr.UtilContainerVersions()

firmwareVersion      := fptr.GetParamString(fptr10.LIBFPTR_PARAM_CONTAINER_FIRMWARE_VERSION)
bootloaderVersion    := fptr.GetParamString(fptr10.LIBFPTR_PARAM_CONTAINER_BOOTLOADER_VERSION)
configurationVersion := fptr.GetParamString(fptr10.LIBFPTR_PARAM_CONTAINER_CONFIGURATION_VERSION)
scriptsVersion       := fptr.GetParamString(fptr10.LIBFPTR_PARAM_CONTAINER_SCRIPTS_VERSION)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FILENAME, "C:\\Atol-25F.con");
Fptr.utilContainerVersions();

firmwareVersion      = Fptr.getParamString(Fptr.LIBFPTR_PARAM_CONTAINER_FIRMWARE_VERSION);
bootloaderVersion    = Fptr.getParamString(Fptr.LIBFPTR_PARAM_CONTAINER_BOOTLOADER_VERSION);
configurationVersion = Fptr.getParamString(Fptr.LIBFPTR_PARAM_CONTAINER_CONFIGURATION_VERSION);
scriptsVersion       = Fptr.getParamString(Fptr.LIBFPTR_PARAM_CONTAINER_SCRIPTS_VERSION);

Для получения информации о контейнере ПО ККТ необходимо использовать метод utilContainerVersions и передать в параметре LIBFPTR_PARAM_FILENAME путь к файлу контейнера.

Результатом этого запроса будет следующая информация:

Параметр Описание Тип
LIBFPTR_PARAM_CONTAINER_BOOTLOADER_VERSION Версия загрузчика string
LIBFPTR_PARAM_CONTAINER_FIRMWARE_VERSION Версия ПО ККТ string
LIBFPTR_PARAM_CONTAINER_CONFIGURATION_VERSION Версия конфигурации string
LIBFPTR_PARAM_CONTAINER_SCRIPTS_VERSION Версия скриптов string
LIBFPTR_PARAM_CONTAINER_DIRECT_BOOT_VERSION Версия direct boot string

Если одна из версий пустая - соответствующая ей часть в контейнере отсутствует.

Работает только с контейнерами ПО ККТ АТОЛ.

Задание дополнительных заголовка и подвала

Задание дополнительных заголовка и подвала

libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"ЗАГОЛОВОК 1\nЗАГОЛОВОК 2\n\n");
libfptr_set_header_lines(fptr);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"ПОДВАЛ 1\nПОДВАЛ 2\n\n");
libfptr_set_footer_lines(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, 'ЗАГОЛОВОК 1\nЗАГОЛОВОК 2\n\n')
fptr.setHeaderLines()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, 'ПОДВАЛ 1\nПОДВАЛ 2\n\n')
fptr.setFooterLines()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "ЗАГОЛОВОК 1\nЗАГОЛОВОК 2\n\n");
fptr.setHeaderLines();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "ПОДВАЛ 1\nПОДВАЛ 2\n\n");
fptr.setFooterLines();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "ЗАГОЛОВОК 1\nЗАГОЛОВОК 2\n\n");
fptr.setHeaderLines();
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "ПОДВАЛ 1\nПОДВАЛ 2\n\n");
fptr.setFooterLines();
[fptr setParam:LIBFPTR_PARAM_TEXT, @"ЗАГОЛОВОК 1\nЗАГОЛОВОК 2\n\n"];
[fptr setHeaderLines];
[fptr setParam:LIBFPTR_PARAM_TEXT, @"ПОДВАЛ 1\nПОДВАЛ 2\n\n"];
[fptr setFooterLines];
fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "ЗАГОЛОВОК 1\nЗАГОЛОВОК 2\n\n");
fptr.setHeaderLines();
fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "ПОДВАЛ 1\nПОДВАЛ 2\n\n");
fptr.setFooterLines();
fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'ЗАГОЛОВОК 1\nЗАГОЛОВОК 2\n\n');
fptr.setHeaderLines;
fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'ПОДВАЛ 1\nПОДВАЛ 2\n\n');
fptr.setFooterLines;
fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "ЗАГОЛОВОК 1\nЗАГОЛОВОК 2\n\n")
fptr.SetHeaderLines()
fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "ПОДВАЛ 1\nПОДВАЛ 2\n\n")
fptr.SetFooterLines()
Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "ЗАГОЛОВОК 1\nЗАГОЛОВОК 2\n\n");
Fptr.setHeaderLines();
Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "ПОДВАЛ 1\nПОДВАЛ 2\n\n");
Fptr.setFooterLines();

С помощью методов setHeaderLines() и setFooterLines() можно задать допольнительные строки, которые будут печататься между клише и началом документа и после окончания документа. Если нужно передать несколько строк, их нужно разделять символом \n. Подробнее про формат клише и порядок печати в разделе Работа с клише.

Скрипты ККТ

ККТ версий 5.X позволяют расширять свою функциональность с помощью пользовательский скриптов или шаблонов. Драйвер предоставляет следующие методы для работы с ними.

Выполнение скрипта

Выполнение скрипта с менее чем 5 результатами

// Вспомогательная функция для чтения строковых параметров
std::wstring getStr(libfptr_handle fptr, int paramID) {
    std::vector<wchar_t> str(32);
    int size = libfptr_get_param_str(fptr, paramID, &str[0], str.size());
    if (size > str.size())
    {
        str.resize(size);
        libfptr_get_param_str(fptr, paramID, &str[0], str.size());
    }
    return std::wstring(&str[0]);
}

uchar param[] = {0x01, 0x00, 0x00, 0x00};
libfptr_set_param_str(fptr, LIBFPTR_PARAM_USER_SCRIPT_ID, L"1002");
libfptr_set_param_bytearray(fptr, LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, &param[0], sizeof(param) / sizeof(param[0]));
libfptr_call_script(fptr);

std::wstring param1 = getStr(fptr, LIBFPTR_PARAM_USER_SCRIPT_RESULT_1);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_SCRIPT_ID, "1002")
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, [0x01, 0x00, 0x00, 0x00])
fptr.callScript()
param1 = fptr.getParamString(IFptr.LIBFPTR_PARAM_USER_SCRIPT_RESULT_1)
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_SCRIPT_ID, "1002");
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, new byte[]{0x01, 0x00, 0x00, 0x00});
fptr.callScript();
String param1 = fptr.getParamString(IFptr.LIBFPTR_PARAM_USER_SCRIPT_RESULT_1);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_SCRIPT_ID, "1002");
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, new byte[]{0x01, 0x00, 0x00, 0x00});
fptr.callScript();
String param1 = fptr.getParamString(IFptr.LIBFPTR_PARAM_USER_SCRIPT_RESULT_1);
uchar param[] = {0x01, 0x00, 0x00, 0x00};
[fptr setParam:LIBFPTR_PARAM_USER_SCRIPT_ID, NSStringParam:@"1002"];
[fptr setParam:LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, NSDataParam:[NSData dataWithBytes:(const void*)param length:sizeof(param)]];
[fptr callScript];
NSString *param1 = [fptr getParamString:LIBFPTR_PARAM_USER_SCRIPT_RESULT_1];
fptr.setParam(Constants.LIBFPTR_PARAM_USER_SCRIPT_ID, "1002");
fptr.setParam(Constants.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, new byte[]{0x01, 0x00, 0x00, 0x00});
fptr.callScript();
String param1 = fptr.getParamString(Constants.LIBFPTR_PARAM_USER_SCRIPT_RESULT_1);
var
    param:                 Array[0 .. 3] of Byte = ($01, $00, $00, $00);
    param_variant:         Variant;
    i:                     Integer;
    param1:                String;
begin
    param_variant := VarArrayCreate([0, high(param)], varByte);
    for i := VarArrayLowBound(param_variant, 1) to VarArrayHighBound(param_variant, 1) do
    begin
        VarArrayPut(param_variant, param[i], [i]);
    end;
    fptr.setParam(fptr.LIBFPTR_PARAM_USER_SCRIPT_ID, '1002');
    fptr.setParam(fptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, param_variant);
    fptr.callScript();

    unitVersion := fptr.getParamString(fptr.LIBFPTR_PARAM_USER_SCRIPT_RESULT_1);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_SCRIPT_ID, "1002")
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, []byte{0x01, 0x00, 0x00, 0x00})
fptr.CallScript();
String param1 = fptr.GetParamString(fptr10.LIBFPTR_PARAM_USER_SCRIPT_RESULT_1);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_SCRIPT_ID, "1002");
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, new Uint8Array([0x01, 0x00, 0x00, 0x00]));
Fptr.callScript();
param1 = Fptr.getParamString(Fptr.LIBFPTR_PARAM_USER_SCRIPT_RESULT_1);

Выполнение скрипта с любым количеством результатов

// Вспомогательная функция для чтения строковых параметров
std::wstring getStr(libfptr_handle fptr, int paramID) {
    std::vector<wchar_t> str(32);
    int size = libfptr_get_param_str(fptr, paramID, &str[0], str.size());
    if (size > str.size())
    {
        str.resize(size);
        libfptr_get_param_str(fptr, paramID, &str[0], str.size());
    }
    return std::wstring(&str[0]);
}

// Вспомогательная функция чтения следующей записи
int readNextRecord(libfptr_handle fptr, const std::wstring &recordsID) {
    libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
    return libfptr_read_next_record(fptr);
}

uchar param[] = {0x01, 0x00, 0x00, 0x00};
libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECORDS_TYPE, LIBFPTR_RT_EXEC_USER_SCRIPT);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_USER_SCRIPT_ID, L"1002");
libfptr_set_param_bytearray(fptr, LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, &param[0], sizeof(param) / sizeof(param[0]));
libfptr_begin_read_records(handle);
std::wstring recordsID = getStr(fptr, LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{
    std::wstring result = getStr(fptr, LIBFPTR_PARAM_USER_SCRIPT_PARAMETER);
}

libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
libfptr_end_read_records(fptr);
# Вспомогательная функция чтения следующей записи
def readNextRecord(fptr, recordsID):
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.readNextRecord()

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_EXEC_USER_SCRIPT)
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_SCRIPT_ID, "1002")
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, [0x01, 0x00, 0x00, 0x00])
fptr.beginReadRecords()
recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);

while readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK:
    param = fptr.getParamString(IFptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER)

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.endReadRecords()
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_EXEC_USER_SCRIPT);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_SCRIPT_ID, "1002");
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, new byte[]{0x01, 0x00, 0x00, 0x00});
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    String result = fptr.getParamString(IFptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_EXEC_USER_SCRIPT);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_SCRIPT_ID, "1002");
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, new byte[]{0x01, 0x00, 0x00, 0x00});
fptr.beginReadRecords();
String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == IFptr.LIBFPTR_OK) {
    String result = fptr.getParamString(IFptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER);
}

fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr *fptr, NSString *recordsID) {
    [fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
    return [fptr readNextRecord];
}

uchar param[] = {0x01, 0x00, 0x00, 0x00};
[fptr setParam:LIBFPTR_PARAM_RECORDS_TYPE, intParam:LIBFPTR_RT_EXEC_USER_SCRIPT];
[fptr setParam:LIBFPTR_PARAM_USER_SCRIPT_ID, NSStringParam:@"1002"];
[fptr setParam:LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, NSDataParam:[NSData dataWithBytes:(const void*)param length:sizeof(param)]];
[fptr beginReadRecords];
NSString *recordsID = [fptr getParamString:LIBFPTR_PARAM_RECORDS_ID];

while (readNextRecord(fptr, recordsID) == LIBFPTR_OK)
{
    NSString *result = [fptr getParamString:LIBFPTR_PARAM_USER_SCRIPT_PARAMETER];
}

[fptr setParam:LIBFPTR_PARAM_RECORDS_ID, NSStringParam:recordsID];
[fptr endReadRecords];
// Вспомогательная функция чтения следующей записи
int readNextRecord(IFptr fptr, String recordsID) {
    fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return fptr.readNextRecord();
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_TYPE, Constants.LIBFPTR_RT_EXEC_USER_SCRIPT);
fptr.setParam(Constants.LIBFPTR_PARAM_USER_SCRIPT_ID, "1002");
fptr.setParam(Constants.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, new byte[]{0x01, 0x00, 0x00, 0x00});
fptr.beginReadRecords();
String recordsID = fptr.getParamString(Constants.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(fptr, recordsID) == Constants.LIBFPTR_OK) {
    String param = fptr.getParamString(Constants.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER);
}

fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
fptr.endReadRecords();
// Вспомогательная функция чтения следующей записи
function readNextRecord(fptr: OleVariant; recordsID: String): integer;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    Result := fptr.readNextRecord;
end;

var
    recordsID:             String;
    script_result:         String;
    param:                 Array[0 .. 3] of Byte = ($01, $00, $00, $00);
    param_variant:         Variant;
    i:                     Integer;
begin
    param_variant := VarArrayCreate([0, high(param)], varByte);
    for i := VarArrayLowBound(param_variant, 1) to VarArrayHighBound(param_variant, 1) do
    begin
        VarArrayPut(param_variant, param[i], [i]);
    end;
    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_TYPE, fptr.LIBFPTR_RT_EXEC_USER_SCRIPT);
    fptr.setParam(fptr.LIBFPTR_PARAM_USER_SCRIPT_ID, '1002');
    fptr.setParam(fptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, param_variant);
    fptr.beginReadRecords;
    recordsID := fptr.getParamString(fptr.LIBFPTR_PARAM_RECORDS_ID);

    While readNextRecord(fptr, recordsID) = fptr.LIBFPTR_OK do
    begin
        script_result := fptr.getParamString(fptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER);
    end;

    fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    fptr.endReadRecords;
end;
// Вспомогательная функция чтения следующей записи
func readNextRecord(fptr *fptr10.IFptr, recordsID string) error {
    fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
    return fptr.ReadNextRecord()
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_TYPE, fptr10.LIBFPTR_RT_EXEC_USER_SCRIPT)
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_SCRIPT_ID, "1002")
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, []byte{0x01, 0x00, 0x00, 0x00})
fptr.BeginReadRecords()
recordsID := fptr.GetParamString(fptr10.LIBFPTR_PARAM_RECORDS_ID)

for readNextRecord(fptr, recordsID) == nil {
    result := fptr.GetParamString(fptr10.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER)
}

fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
fptr.EndReadRecords()
// Вспомогательная функция чтения следующей записи
function readNextRecord(recordsID) {
    Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
    return Fptr.readNextRecord();
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_TYPE, Fptr.LIBFPTR_RT_EXEC_USER_SCRIPT);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_SCRIPT_ID, "1002");
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER, new Uint8Array([0x01, 0x00, 0x00, 0x00]));
Fptr.beginReadRecords();
var recordsID = Fptr.getParamString(Fptr.LIBFPTR_PARAM_RECORDS_ID);

while (readNextRecord(recordsID) == Fptr.LIBFPTR_OK) {
    param = Fptr.getParamString(Fptr.LIBFPTR_PARAM_USER_SCRIPT_PARAMETER);
}

Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
Fptr.endReadRecords();

Для выполнения скрипта ККТ необходимо вызвать метод callScript() и передать ему идентификатор скрипта в параметре LIBFPTR_PARAM_USER_SCRIPT_ID и параметр скрипта в параметре LIBFPTR_PARAM_USER_SCRIPT_PARAMETER. Параметр LIBFPTR_PARAM_USER_SCRIPT_PARAMETER интерпретируется как массив байтов. В ответ будут возвращены до 5 результатов в параметрах LIBFPTR_PARAM_USER_SCRIPT_RESULT_, где N - число от 1 до 5. Если результата с заданным порядковым номером нет, он будет пустым. По умолчанию каждый результат скрипта - байтовый массив. Для интерпретации результата с другим типом используйте различные методы получения параметров из раздела Методы и параметры драйвера.

В случае, если количество выходных параметров превышает 5, то можно воспользоваться последовательным вычитыванием результатов скрипта. Для этого необходимо вызвать метод beginReadRecords() с типом данных LIBFPTR_RT_EXEC_USER_SCRIPT и входными параметрами, аналогичными методу callScript(). На каждой итерации readNextRecord() будет возвращать один результат в параметре LIBFPTR_PARAM_USER_SCRIPT_PARAMETER.

Получение размера памяти

Получение размера памяти

libfptr_set_param_int(fptr, LIBFPTR_PARAM_USER_MEMORY_OPERATION, LIBFPTR_UMO_GET_SIZE);
libfptr_user_memory_operation(fptr);
uint cellsCount = libfptr_get_param_int(fptr, LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_GET_SIZE)
fptr.userMemoryOperation()
cellsCount = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT)
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_GET_SIZE);
fptr.userMemoryOperation();
long cellsCount = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_GET_SIZE);
fptr.userMemoryOperation();
long cellsCount = fptr.getParamInt(IFptr.LIBFPTR_PARAM_COUNT);
[fptr setParam:LIBFPTR_PARAM_USER_MEMORY_OPERATION, intParam:LIBFPTR_UMO_GET_SIZE];
[fptr userMemoryOperation];
uint cellsCount = [fptr getParamString:LIBFPTR_PARAM_COUNT];
fptr.setParam(Constants.LIBFPTR_PARAM_USER_MEMORY_OPERATION, Constants.LIBFPTR_UMO_GET_SIZE);
fptr.userMemoryOperation();
uint cellsCount = fptr.getParamInt(Constants.LIBFPTR_PARAM_COUNT);
var
    cellsCount: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, fptr.LIBFPTR_UMO_GET_SIZE);
    fptr.queryData;
    cellsCount := fptr.getParamInt(fptr.LIBFPTR_PARAM_COUNT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_MEMORY_OPERATION, fptr10.LIBFPTR_UMO_GET_SIZE);
fptr.UserMemoryOperation();
cellsCount := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_COUNT);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, Fptr.LIBFPTR_UMO_GET_SIZE);
Fptr.userMemoryOperation();
cellsCount = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_COUNT);

Для получения размера памяти ККТ необходимо вызвать метод userMemoryOperation() с типом операции LIBFPTR_PARAM_USER_MEMORY_OPERATION равным LIBFPTR_UMO_GET_SIZE. Размер памяти в ячейках вернется в параметре LIBFPTR_PARAM_COUNT.

Чтение данных из ОЗУ

Чтение массива байтов

std::vector<uchar> getByteArray(libfptr_handle fptr, int paramID)
{
    std::vector<uchar> bfr(128);
    int size = libfptr_get_param_bytearray(fptr, paramID, &bfr[0], bfr.size());
    if (size > bfr.size())
    {
        bfr.resize(size);
        libfptr_get_param_bytearray(fptr, paramID, &bfr[0], bfr.size());
    }
    bfr.resize(size);
    return bfr;
}

libfptr_set_param_int(fptr, LIBFPTR_PARAM_USER_MEMORY_OPERATION, LIBFPTR_UMO_READ_DATA);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_COUNT, 1);
libfptr_user_memory_operation(fptr);
std::vector<uchar> data = getByteArray(fptr, LIBFPTR_PARAM_USER_MEMORY_DATA);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_READ_DATA)
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0)
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNT, 1)
fptr.userMemoryOperation()
cellsCount = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_USER_MEMORY_DATA)
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_READ_DATA);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNT, 1);
fptr.userMemoryOperation();
byte[] data = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_USER_MEMORY_DATA);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_READ_DATA);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.setParam(IFptr.LIBFPTR_PARAM_COUNT, 1);
fptr.userMemoryOperation();
byte[] data = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_USER_MEMORY_DATA);
[fptr setParam:LIBFPTR_PARAM_USER_MEMORY_OPERATION, intParam:LIBFPTR_UMO_READ_DATA];
[fptr setParam:LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0];
[fptr setParam:LIBFPTR_PARAM_COUNT, 1];
[fptr userMemoryOperation];
NSData *data = [fptr getParamByteArray:LIBFPTR_PARAM_USER_MEMORY_DATA];
fptr.setParam(Constants.LIBFPTR_PARAM_USER_MEMORY_OPERATION, Constants.LIBFPTR_UMO_READ_DATA);
fptr.setParam(Constants.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.setParam(Constants.LIBFPTR_PARAM_COUNT, 1);
fptr.userMemoryOperation();
byte[] data = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_USER_MEMORY_DATA);
var
    data: Variant;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, fptr.LIBFPTR_UMO_READ_DATA);
    fptr.setParam(fptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
    fptr.setParam(fptr.LIBFPTR_PARAM_COUNT, 1);
    fptr.userMemoryOperation;
    data := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_USER_MEMORY_DATA);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_MEMORY_OPERATION, fptr10.LIBFPTR_UMO_READ_DATA);
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.SetParam(fptr10.LIBFPTR_PARAM_COUNT, 1);
fptr.UserMemoryOperation();
data := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_USER_MEMORY_DATA);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, Fptr.LIBFPTR_UMO_READ_DATA);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
Fptr.setParam(Fptr.LIBFPTR_PARAM_COUNT, 1);
Fptr.userMemoryOperation();
data = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_USER_MEMORY_DATA);

Чтение строки

std::wstring getStr(libfptr_handle fptr, int paramID)
{
    std::vector<wchar_t> str(32);
    int size = libfptr_get_param_str(fptr, paramID, &str[0], str.size());
    if (size > str.size())
    {
        str.resize(size);
        libfptr_get_param_str(fptr, paramID, &str[0], str.size());
    }
    return std::wstring(&str[0]);
}

libfptr_set_param_int(fptr, LIBFPTR_PARAM_USER_MEMORY_OPERATION, LIBFPTR_UMO_READ_STRING);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
libfptr_user_memory_operation(fptr);
std::wstring data = getStr(fptr, LIBFPTR_PARAM_USER_MEMORY_STRING);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_READ_STRING)
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0)
fptr.userMemoryOperation()
cellsCount = fptr.getParamString(IFptr.LIBFPTR_PARAM_USER_MEMORY_STRING)
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_READ_STRING);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.userMemoryOperation();
byte[] data = fptr.getParamString(IFptr.LIBFPTR_PARAM_USER_MEMORY_STRING);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_READ_STRING);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.userMemoryOperation();
byte[] data = fptr.getParamString(IFptr.LIBFPTR_PARAM_USER_MEMORY_STRING);
[fptr setParam:LIBFPTR_PARAM_USER_MEMORY_OPERATION, intParam:LIBFPTR_UMO_READ_STRING];
[fptr setParam:LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0];
[fptr userMemoryOperation];
NSData *data = [fptr getParamString:LIBFPTR_PARAM_USER_MEMORY_STRING];
fptr.setParam(Constants.LIBFPTR_PARAM_USER_MEMORY_OPERATION, Constants.LIBFPTR_UMO_READ_STRING);
fptr.setParam(Constants.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.userMemoryOperation();
byte[] data = fptr.getParamString(Constants.LIBFPTR_PARAM_USER_MEMORY_STRING);
var
    data: string;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, fptr.LIBFPTR_UMO_READ_STRING);
    fptr.setParam(fptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
    fptr.userMemoryOperation;
    data := fptr.getParamString(fptr.LIBFPTR_PARAM_USER_MEMORY_STRING);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_MEMORY_OPERATION, fptr10.LIBFPTR_UMO_READ_STRING);
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.UserMemoryOperation();
data := fptr.GetParamString(fptr10.LIBFPTR_PARAM_USER_MEMORY_STRING);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, Fptr.LIBFPTR_UMO_READ_STRING);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
Fptr.userMemoryOperation();
data = Fptr.getParamString(Fptr.LIBFPTR_PARAM_USER_MEMORY_DATA);

Для чтения массива байтов из памяти ККТ необходимо вызвать метод userMemoryOperation() с типом операции LIBFPTR_PARAM_USER_MEMORY_OPERATION равным LIBFPTR_UMO_READ_DATA, указав адрес в LIBFPTR_PARAM_USER_MEMORY_ADDRESS и количество ячеек в LIBFPTR_PARAM_COUNT. Данные из указанных ячеек вернутся в параметре LIBFPTR_PARAM_USER_MEMORY_DATA.

Для чтения строки из памяти ККТ необходимо вызвать метод userMemoryOperation() с типом операции LIBFPTR_PARAM_USER_MEMORY_OPERATION равным LIBFPTR_UMO_READ_STRING, указав адрес в LIBFPTR_PARAM_USER_MEMORY_ADDRESS. Строка из указанных ячеек вернутся в параметре LIBFPTR_PARAM_USER_MEMORY_STRING.

Запись данных в ОЗУ

Запись массива байтов

uchar data[] = {0x01, 0x00, 0x00, 0x00};
libfptr_set_param_int(fptr, LIBFPTR_PARAM_USER_MEMORY_OPERATION, LIBFPTR_UMO_WRITE_DATA);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
libfptr_set_param_bytearray(fptr, LIBFPTR_PARAM_USER_MEMORY_DATA, &data[0], sizeof(data) / sizeof(data[0]));
libfptr_user_memory_operation(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_WRITE_DATA)
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0)
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_DATA, [0x01, 0x00, 0x00, 0x00])
fptr.userMemoryOperation()
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_WRITE_DATA);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_DATA, new byte[]{0x01, 0x00, 0x00, 0x00});
fptr.userMemoryOperation();
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_WRITE_DATA);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_DATA, new byte[]{0x01, 0x00, 0x00, 0x00});
fptr.userMemoryOperation();
uchar data[] = {0x01, 0x00, 0x00, 0x00};
[fptr setParam:LIBFPTR_PARAM_USER_MEMORY_OPERATION, intParam:LIBFPTR_UMO_WRITE_DATA];
[fptr setParam:LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0];
[fptr setParam:LIBFPTR_PARAM_USER_MEMORY_DATA, NSDataParam:[NSData dataWithBytes:(const void*)data length:sizeof(data)]];
[fptr userMemoryOperation];
fptr.setParam(Constants.LIBFPTR_PARAM_USER_MEMORY_OPERATION, Constants.LIBFPTR_UMO_WRITE_DATA);
fptr.setParam(Constants.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.setParam(Constants.LIBFPTR_PARAM_USER_MEMORY_DATA, new byte[]{0x01, 0x00, 0x00, 0x00});
fptr.userMemoryOperation();
var
    data:                  Array[0 .. 3] of Byte = ($01, $00, $00, $00);
    data_variant:          Variant;
    i:                     Integer;
begin
    data_variant := VarArrayCreate([0, high(data)], varByte);
    for i := VarArrayLowBound(data_variant, 1) to VarArrayHighBound(data_variant, 1) do
    begin
        VarArrayPut(data_variant, data[i], [i]);
    end;
    fptr.setParam(fptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, fptr.LIBFPTR_UMO_WRITE_DATA);
    fptr.setParam(fptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
    fptr.setParam(fptr.LIBFPTR_PARAM_USER_MEMORY_DATA, data_variant);
    fptr.userMemoryOperation();
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_MEMORY_OPERATION, fptr10.LIBFPTR_UMO_WRITE_DATA);
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_MEMORY_DATA, []byte{0x01, 0x00, 0x00, 0x00});
fptr.UserMemoryOperation();
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, Fptr.LIBFPTR_UMO_WRITE_DATA);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_MEMORY_DATA, new Uint8Array([0x01, 0x00, 0x00, 0x00]));
Fptr.userMemoryOperation();

Запись строки

libfptr_set_param_int(fptr, LIBFPTR_PARAM_USER_MEMORY_OPERATION, LIBFPTR_UMO_WRITE_DATA);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_USER_MEMORY_STRING, "12345678");
libfptr_user_memory_operation(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_WRITE_DATA)
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0)
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_STRING, "123456789")
fptr.userMemoryOperation()
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_WRITE_DATA);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_STRING, "12345678");
fptr.userMemoryOperation();
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_WRITE_DATA);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_STRING, "12345678");
fptr.userMemoryOperation();
[fptr setParam:LIBFPTR_PARAM_USER_MEMORY_OPERATION, intParam:LIBFPTR_UMO_WRITE_DATA];
[fptr setParam:LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0];
[fptr setParam:LIBFPTR_PARAM_USER_MEMORY_STRING, NSStringParam:@"12345678"];
[fptr userMemoryOperation];
fptr.setParam(Constants.LIBFPTR_PARAM_USER_MEMORY_OPERATION, Constants.LIBFPTR_UMO_WRITE_DATA);
fptr.setParam(Constants.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.setParam(Constants.LIBFPTR_PARAM_USER_MEMORY_STRING, "12345678");
fptr.userMemoryOperation();
fptr.setParam(fptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, fptr.LIBFPTR_UMO_WRITE_DATA);
fptr.setParam(fptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.setParam(fptr.LIBFPTR_PARAM_USER_MEMORY_STRING, '12345678');
fptr.userMemoryOperation();
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_MEMORY_OPERATION, fptr10.LIBFPTR_UMO_WRITE_DATA);
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_MEMORY_STRING, "12345678");
fptr.UserMemoryOperation();
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, Fptr.LIBFPTR_UMO_WRITE_DATA);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_MEMORY_ADDRESS, 0);
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_MEMORY_STRING, "12345678");
Fptr.userMemoryOperation();

Для записи массива байтов в память ККТ необходимо вызвать метод userMemoryOperation() с типом операции LIBFPTR_PARAM_USER_MEMORY_OPERATION равным LIBFPTR_UMO_WRITE_DATA, указав адрес в LIBFPTR_PARAM_USER_MEMORY_ADDRESS и данные в LIBFPTR_PARAM_USER_MEMORY_DATA

Для записи строки в память ККТ необходимо вызвать метод userMemoryOperation() с типом операции LIBFPTR_PARAM_USER_MEMORY_OPERATION равным LIBFPTR_UMO_WRITE_STRING, указав адрес в LIBFPTR_PARAM_USER_MEMORY_ADDRESS и строку в LIBFPTR_PARAM_USER_MEMORY_STRING.

Сохранение данных

libfptr_set_param_int(fptr, LIBFPTR_PARAM_USER_MEMORY_OPERATION, LIBFPTR_UMO_COMMIT);
libfptr_user_memory_operation(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_COMMIT)
fptr.userMemoryOperation()
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_COMMIT);
fptr.userMemoryOperation();
fptr.setParam(IFptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, IFptr.LIBFPTR_UMO_COMMIT);
fptr.userMemoryOperation();
[fptr setParam:LIBFPTR_PARAM_USER_MEMORY_OPERATION, intParam:LIBFPTR_UMO_COMMIT];
[fptr userMemoryOperation];
fptr.setParam(Constants.LIBFPTR_PARAM_USER_MEMORY_OPERATION, Constants.LIBFPTR_UMO_COMMIT);
fptr.userMemoryOperation();
fptr.setParam(fptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, fptr.LIBFPTR_UMO_COMMIT);
fptr.userMemoryOperation();
fptr.SetParam(fptr10.LIBFPTR_PARAM_USER_MEMORY_OPERATION, fptr10.LIBFPTR_UMO_COMMIT);
fptr.UserMemoryOperation();
Fptr.setParam(Fptr.LIBFPTR_PARAM_USER_MEMORY_OPERATION, Fptr.LIBFPTR_UMO_COMMIT);
Fptr.userMemoryOperation();

Для сохранения записанных данных в энергонезависимую память ККТ необходимо вызвать метод userMemoryOperation() с типом операции LIBFPTR_PARAM_USER_MEMORY_OPERATION равным LIBFPTR_UMO_COMMIT.

Программирование ККТ

Инициализация системных таблиц

Инициализация системных таблиц

libfptr_init_settings(fptr);
fptr.initSettings()
fptr.initSettings();
fptr.initSettings();
[fptr initSettings];
fptr.initSettings();
begin
    fptr.initSettings;
end;
fptr.InitSettings()
Fptr.initSettings();

Для инициализации таблиц ККТ необходимо вызвать метод initSettings().

Запись настройки

Запись строковой настройки (на примере адреса ОФД)

libfptr_set_param_int(fptr, LIBFPTR_PARAM_SETTING_ID, 273);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_SETTING_VALUE, L"ofdp.platformaofd.ru");
libfptr_write_device_setting(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_ID, 273)
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_VALUE, "ofdp.platformaofd.ru")
fptr.writeDeviceSetting()
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_ID, 273);
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_VALUE, "ofdp.platformaofd.ru");
fptr.writeDeviceSetting();
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_ID, 273);
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_VALUE, "ofdp.platformaofd.ru");
fptr.writeDeviceSetting();
[fptr setParam:LIBFPTR_PARAM_SETTING_ID, intParam:273];
[fptr setParam:LIBFPTR_PARAM_SETTING_VALUE, NSStringParam:@"ofdp.platformaofd.ru"];
[fptr writeDeviceSetting];
fptr.setParam(Constants.LIBFPTR_PARAM_SETTING_ID, 273);
fptr.setParam(Constants.LIBFPTR_PARAM_SETTING_VALUE, "ofdp.platformaofd.ru");
fptr.writeDeviceSetting();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_ID, 273);
    fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_VALUE, 'ofdp.platformaofd.ru');
    fptr.writeDeviceSetting;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_SETTING_ID, 273)
fptr.SetParam(fptr10.LIBFPTR_PARAM_SETTING_VALUE, "ofdp.platformaofd.ru")
fptr.WriteDeviceSetting()
Fptr.setParam(Fptr.LIBFPTR_PARAM_SETTING_ID, 273);
Fptr.setParam(Fptr.LIBFPTR_PARAM_SETTING_VALUE, "ofdp.platformaofd.ru");
Fptr.writeDeviceSetting();

Запись числовой настройки (на примере порта ОФД)

libfptr_set_param_int(fptr, LIBFPTR_PARAM_SETTING_ID, 274);
libfptr_set_param_int(fptr, LIBFPTR_PARAM_SETTING_VALUE, 19801);
libfptr_write_device_setting(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_ID, 274)
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_VALUE, 19801)
fptr.writeDeviceSetting()
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_ID, 274);
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_VALUE, 19801);
fptr.writeDeviceSetting();
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_ID, 274);
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_VALUE, 19801);
fptr.writeDeviceSetting();
[fptr setParam:LIBFPTR_PARAM_SETTING_ID, intParam:274];
[fptr setParam:LIBFPTR_PARAM_SETTING_VALUE, intParam:19801];
[fptr writeDeviceSetting];
fptr.setParam(Constants.LIBFPTR_PARAM_SETTING_ID, 274);
fptr.setParam(Constants.LIBFPTR_PARAM_SETTING_VALUE, 19801);
fptr.writeDeviceSetting();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_ID, 274);
    fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_VALUE, 19801);
    fptr.writeDeviceSetting;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_SETTING_ID, 274)
fptr.SetParam(fptr10.LIBFPTR_PARAM_SETTING_VALUE, 19801)
fptr.WriteDeviceSetting()
Fptr.setParam(Fptr.LIBFPTR_PARAM_SETTING_ID, 274);
Fptr.setParam(Fptr.LIBFPTR_PARAM_SETTING_VALUE, 19801);
Fptr.writeDeviceSetting();

Для записи настройки в ККТ необходимо вызвать метод writeDeviceSetting(), указав номер настройки в параметре LIBFPTR_PARAM_SETTING_ID и значение настройки в параметре LIBFPTR_PARAM_SETTING_VALUE.

Список доступных настроек и их значений зависит от модели ККТ и приведен в приложении Настройки ККТ.

Чтение настройки

Чтение строковой настройки (на примере адреса ОФД)

libfptr_set_param_int(fptr, LIBFPTR_PARAM_SETTING_ID, 273);
libfptr_read_device_setting(fptr);

std::vector<wchar_t> settingValue(64);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_SETTING_VALUE, &settingValue[0], settingValue.size());
if (size > settingValue.size())
{
    settingValue.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_SETTING_VALUE, &settingValue[0], settingValue.size());
}
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_ID, 273)
fptr.readDeviceSetting()

settingValue = fptr.getParamString(IFptr.LIBFPTR_PARAM_SETTING_VALUE)
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_ID, 273);
fptr.readDeviceSetting();

String settingValue = fptr.getParamString(IFptr.LIBFPTR_PARAM_SETTING_VALUE);
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_ID, 273);
fptr.readDeviceSetting();

String settingValue = fptr.getParamString(IFptr.LIBFPTR_PARAM_SETTING_VALUE);
[fptr setParam:LIBFPTR_PARAM_SETTING_ID, intParam:273];
[fptr readDeviceSetting];

NSString *settingValue = [fptr getParamString:LIBFPTR_PARAM_SETTING_VALUE];
fptr.setParam(Constants.LIBFPTR_PARAM_SETTING_ID, 273);
fptr.readDeviceSetting();

String settingValue = fptr.getParamString(Constants.LIBFPTR_PARAM_SETTING_VALUE);
var
    settingValue: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_ID, 273);
    fptr.readDeviceSetting;

    settingValue := fptr.getParamString(fptr.LIBFPTR_PARAM_SETTING_VALUE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_SETTING_ID, 273)
fptr.ReadDeviceSetting()

settingValue := fptr.GetParamString(fptr10.LIBFPTR_PARAM_SETTING_VALUE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_SETTING_ID, 273);
Fptr.readDeviceSetting();

settingValue = Fptr.getParamString(Fptr.LIBFPTR_PARAM_SETTING_VALUE);

Чтение числовой настройки (на примере порта ОФД)

libfptr_set_param_int(fptr, LIBFPTR_PARAM_SETTING_ID, 274);
libfptr_read_device_setting(fptr);

uint settingValue = libfptr_get_param_int(fptr, LIBFPTR_PARAM_SETTING_VALUE);
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_ID, 274)
fptr.readDeviceSetting()

settingValue = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SETTING_VALUE)
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_ID, 274);
fptr.readDeviceSetting();

long settingValue = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SETTING_VALUE);
fptr.setParam(IFptr.LIBFPTR_PARAM_SETTING_ID, 274);
fptr.readDeviceSetting();

long settingValue = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SETTING_VALUE);
[fptr setParam:LIBFPTR_PARAM_SETTING_ID, intParam:274];
[fptr readDeviceSetting];

uint settingValue = [fptr getParamInt:LIBFPTR_PARAM_SETTING_VALUE];
fptr.setParam(Constants.LIBFPTR_PARAM_SETTING_ID, 274);
fptr.readDeviceSetting();

uint settingValue = fptr.getParamInt(Constants.LIBFPTR_PARAM_SETTING_VALUE);
var
    settingValue: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_SETTING_ID, 274);
    fptr.readDeviceSetting;

    settingValue := fptr.getParamInt(fptr.LIBFPTR_PARAM_SETTING_VALUE);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_SETTING_ID, 274)
fptr.ReadDeviceSetting()

settingValue := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_SETTING_VALUE)
Fptr.setParam(Fptr.LIBFPTR_PARAM_SETTING_ID, 274);
Fptr.readDeviceSetting();

settingValue = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_SETTING_VALUE);

Для чтения настройки из ККТ необходимо вызвать метод readDeviceSetting(), указав номер настройки в параметре LIBFPTR_PARAM_SETTING_ID.

Список доступных настроек и их значений зависит от модели ККТ и приведен в приложении Настройки ККТ.

Сохранение настроек

Сохранение настроек в память ККТ

libfptr_commit_settings(fptr);
fptr.commitSettings()
fptr.commitSettings();
fptr.commitSettings();
[fptr commitSettings];
fptr.commitSettings();
begin
    fptr.commitSettings;
end;
fptr.CommitSettings()
fptr.commitSettings();

Для сохранения параметров в постоянную память ККТ необходимо вызвать метод commitSettings().

Загрузка картинки в ККТ

Загрузка картинки из файла в память ККТ

libfptr_set_param_str(fptr, LIBFPTR_PARAM_FILENAME, L"C:\\picture.png");
libfptr_set_param_double(fptr, LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
libfptr_upload_picture_memory(fptr);

int pictureNumber = libfptr_get_param_int(fptr, LIBFPTR_PARAM_PICTURE_NUMBER);
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, "C:\\picture.png")
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0)
fptr.uploadPictureMemory()

pictureNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER)
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, "C:\\picture.png");
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
fptr.uploadPictureMemory();

long pictureNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER);
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, "/storage/emulated/0/picture.png");
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
fptr.uploadPictureMemory();

long pictureNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER);
[fptr setParam:LIBFPTR_PARAM_FILENAME, NSStringParam:@"/Users/user/picture.png"];
[fptr setParam:LIBFPTR_PARAM_SCALE_PERCENT, doubleParam:50.0];
[fptr uploadPictureMemory];

uint pictureNumber = [fptr getParamInt:LIBFPTR_PARAM_PICTURE_NUMBER];
fptr.setParam(Constants.LIBFPTR_PARAM_FILENAME, "C:\\picture.png");
fptr.setParam(Constants.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
fptr.uploadPictureMemory();

uint pictureNumber = fptr.getParamInt(Constants.LIBFPTR_PARAM_PICTURE_NUMBER);
var
    pictureNumber: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FILENAME, 'C:\\picture.png');
    fptr.setParam(fptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
    fptr.uploadPictureMemory;

    pictureNumber := fptr.getParamInt(fptr.LIBFPTR_PARAM_PICTURE_NUMBER);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FILENAME, "C:\\picture.png")
fptr.SetParam(fptr10.LIBFPTR_PARAM_SCALE_PERCENT, 50.0)
fptr.UploadPictureMemory()

pictureNumber := fptr.GetParamInt(fptr.LIBFPTR_PARAM_PICTURE_NUMBER)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FILENAME, "C:\\picture.png");
Fptr.setParam(Fptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
Fptr.uploadPictureMemory();

pictureNumber = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_PICTURE_NUMBER);

Загрузка картинки из буфера в память ККТ

// pixels - Массив пикселей (unsigned char[])
// width - Ширина одной строки пикселей

libfptr_set_param_bytearray(fptr, LIBFPTR_PARAM_PIXEL_BUFFER, &pixels[0], sizeof(pixels));
libfptr_set_param_int(fptr, LIBFPTR_PARAM_WIDTH, width);
libfptr_set_param_double(fptr, LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
libfptr_upload_pixel_buffer_memory(fptr);

int pictureNumber = libfptr_get_param_int(fptr, LIBFPTR_PARAM_PICTURE_NUMBER);
# pixels - Массив пикселей (bytearray)
# width - Ширина одной строки пикселей

fptr.setParam(IFptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels)
fptr.setParam(IFptr.LIBFPTR_PARAM_WIDTH, width)
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0)
fptr.uploadPixelBufferMemory()

pictureNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER)
// pixels - Массив пикселей (byte[])
// width - Ширина одной строки пикселей

fptr.setParam(IFptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
fptr.setParam(IFptr.LIBFPTR_PARAM_WIDTH, width);
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
fptr.uploadPixelBufferMemory();

long pictureNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER);
// pixels - Массив пикселей (byte[])
// width - Ширина одной строки пикселей

fptr.setParam(IFptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
fptr.setParam(IFptr.LIBFPTR_PARAM_WIDTH, width);
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
fptr.uploadPixelBufferMemory();

long pictureNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER);
// pixels - Массив пикселей (NSData*)
// width - Ширина одной строки пикселей

[fptr setParam:LIBFPTR_PARAM_PIXEL_BUFFER, NSDataParam:pixels];
[fptr setParam:LIBFPTR_PARAM_WIDTH, intParam:width];
[fptr setParam:LIBFPTR_PARAM_SCALE_PERCENT, doubleParam:50.0];
[fptr uploadPixelBufferMemory];

uint pictureNumber = [fptr getParamInt:LIBFPTR_PARAM_PICTURE_NUMBER];
// pixels - Массив пикселей (byte[])
// width - Ширина одной строки пикселей

fptr.setParam(Constants.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
fptr.setParam(Constants.LIBFPTR_PARAM_WIDTH, width);
fptr.setParam(Constants.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
fptr.uploadPixelBufferMemory();

uint pictureNumber = fptr.getParamInt(Constants.LIBFPTR_PARAM_PICTURE_NUMBER);
var
    pictureNumber: Longint;
begin
    // pixels - Массив пикселей (Array of Byte)
    // width - Ширина одной строки пикселей

    fptr.setParam(fptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
    fptr.setParam(fptr.LIBFPTR_PARAM_WIDTH, width);
    fptr.setParam(fptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
    fptr.uploadPixelBufferMemory;

    pictureNumber := fptr.getParamInt(fptr.LIBFPTR_PARAM_PICTURE_NUMBER);
end;
// pixels - Массив пикселей ([]byte)
// width - Ширина одной строки пикселей

fptr.SetParam(fptr10.LIBFPTR_PARAM_PIXEL_BUFFER, pixels)
fptr.SetParam(fptr10.LIBFPTR_PARAM_WIDTH, width)
fptr.SetParam(fptr10.LIBFPTR_PARAM_SCALE_PERCENT, 50.0)
fptr.UploadPixelBufferMemory()

pictureNumber := fptr.GetParamInt(fptr.LIBFPTR_PARAM_PICTURE_NUMBER)
// pixels - Массив пикселей (Uint8Array)
// width - Ширина одной строки пикселей

Fptr.setParam(Fptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
Fptr.setParam(Fptr.LIBFPTR_PARAM_WIDTH, width);
Fptr.setParam(Fptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
Fptr.uploadPixelBufferMemory();

pictureNumber = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_PICTURE_NUMBER);

Картинку в ККТ можно загрузить:

Дополнительно можно указать масштаб в параметре LIBFPTR_PARAM_SCALE_PERCENT. После выполнения метода номер картинки в памяти ККТ будет записан в параметр LIBFPTR_PARAM_PICTURE_NUMBER.

Подробнее о формате массива пикселей в приложении.

Метод подходит для загрузки статичных, часто используемых изображений, для ускорения их печати. Номер картинки, полученный в результате вызова метода, в дальнейшем может быть использован для печати картинки из памяти ККТ (printPictureByNumber()). Некоторые ККТ позволяют печатать картинку, загруженную таким образом, в клише.

Загрузка картинки клише

Загрузка картинки из файла в клише ККТ

libfptr_set_param_str(fptr, LIBFPTR_PARAM_FILENAME, L"C:\\picture.png");
libfptr_set_param_double(fptr, LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
libfptr_upload_picture_cliche(fptr);

int pictureNumber = libfptr_get_param_int(fptr, LIBFPTR_PARAM_PICTURE_NUMBER);
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, "C:\\picture.png")
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0)
fptr.uploadPictureCliche()

pictureNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER)
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, "C:\\picture.png");
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
fptr.uploadPictureCliche();

long pictureNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER);
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, "/storage/emulated/0/picture.png");
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
fptr.uploadPictureCliche();

long pictureNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER);
[fptr setParam:LIBFPTR_PARAM_FILENAME, NSStringParam:@"/Users/user/picture.png"];
[fptr setParam:LIBFPTR_PARAM_SCALE_PERCENT, doubleParam:50.0];
[fptr uploadPictureCliche];

uint pictureNumber = [fptr getParamInt:LIBFPTR_PARAM_PICTURE_NUMBER];
fptr.setParam(Constants.LIBFPTR_PARAM_FILENAME, "C:\\picture.png");
fptr.setParam(Constants.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
fptr.uploadPictureCliche();

uint pictureNumber = fptr.getParamInt(Constants.LIBFPTR_PARAM_PICTURE_NUMBER);
var
    pictureNumber: Longint;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_FILENAME, 'C:\\picture.png');
    fptr.setParam(fptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
    fptr.uploadPictureCliche;

    pictureNumber := fptr.getParamInt(fptr.LIBFPTR_PARAM_PICTURE_NUMBER);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_FILENAME, "C:\\picture.png")
fptr.SetParam(fptr10.LIBFPTR_PARAM_SCALE_PERCENT, 50.0)
fptr.uploadPictureCliche()

pictureNumber := fptr.GetParamInt(fptr.LIBFPTR_PARAM_PICTURE_NUMBER)
Fptr.setParam(Fptr.LIBFPTR_PARAM_FILENAME, "C:\\picture.png");
Fptr.setParam(Fptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
Fptr.uploadPictureCliche();

pictureNumber = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_PICTURE_NUMBER);

Загрузка картинки из буфера в клише ККТ

// pixels - Массив пикселей (unsigned char[])
// width - Ширина одной строки пикселей

libfptr_set_param_bytearray(fptr, LIBFPTR_PARAM_PIXEL_BUFFER, &pixels[0], sizeof(pixels));
libfptr_set_param_int(fptr, LIBFPTR_PARAM_WIDTH, width);
libfptr_set_param_double(fptr, LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
libfptr_upload_pixel_buffer_cliche(fptr);

int pictureNumber = libfptr_get_param_int(fptr, LIBFPTR_PARAM_PICTURE_NUMBER);
# pixels - Массив пикселей (bytearray)
# width - Ширина одной строки пикселей

fptr.setParam(IFptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels)
fptr.setParam(IFptr.LIBFPTR_PARAM_WIDTH, width)
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0)
fptr.uploadPixelBufferCliche()

pictureNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER)
// pixels - Массив пикселей (byte[])
// width - Ширина одной строки пикселей

fptr.setParam(IFptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
fptr.setParam(IFptr.LIBFPTR_PARAM_WIDTH, width);
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
fptr.uploadPixelBufferCliche();

long pictureNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER);
// pixels - Массив пикселей (byte[])
// width - Ширина одной строки пикселей

fptr.setParam(IFptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
fptr.setParam(IFptr.LIBFPTR_PARAM_WIDTH, width);
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
fptr.uploadPixelBufferCliche();

long pictureNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER);
// pixels - Массив пикселей (NSData*)
// width - Ширина одной строки пикселей

[fptr setParam:LIBFPTR_PARAM_PIXEL_BUFFER, NSDataParam:pixels];
[fptr setParam:LIBFPTR_PARAM_WIDTH, intParam:width];
[fptr setParam:LIBFPTR_PARAM_SCALE_PERCENT, doubleParam:50.0];
[fptr uploadPixelBufferCliche];

uint pictureNumber = [fptr getParamInt:LIBFPTR_PARAM_PICTURE_NUMBER];
// pixels - Массив пикселей (byte[])
// width - Ширина одной строки пикселей

fptr.setParam(Constants.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
fptr.setParam(Constants.LIBFPTR_PARAM_WIDTH, width);
fptr.setParam(Constants.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
fptr.uploadPixelBufferCliche();

uint pictureNumber = fptr.getParamInt(Constants.LIBFPTR_PARAM_PICTURE_NUMBER);
var
    pictureNumber: Longint;
begin
    // pixels - Массив пикселей (Array of Byte)
    // width - Ширина одной строки пикселей

    fptr.setParam(fptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
    fptr.setParam(fptr.LIBFPTR_PARAM_WIDTH, width);
    fptr.setParam(fptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
    fptr.uploadPixelBufferCliche;

    pictureNumber := fptr.getParamInt(fptr.LIBFPTR_PARAM_PICTURE_NUMBER);
end;
// pixels - Массив пикселей ([]byte)
// width - Ширина одной строки пикселей

fptr.SetParam(fptr10.LIBFPTR_PARAM_PIXEL_BUFFER, pixels)
fptr.SetParam(fptr10.LIBFPTR_PARAM_WIDTH, width)
fptr.SetParam(fptr10.LIBFPTR_PARAM_SCALE_PERCENT, 50.0)
fptr.UploadPixelBufferCliche()

pictureNumber := fptr.GetParamInt(fptr.LIBFPTR_PARAM_PICTURE_NUMBER)
// pixels - Массив пикселей (Uint8Arrya)
// width - Ширина одной строки пикселей

Fptr.setParam(Fptr.LIBFPTR_PARAM_PIXEL_BUFFER, pixels);
Fptr.setParam(Fptr.LIBFPTR_PARAM_WIDTH, width);
Fptr.setParam(Fptr.LIBFPTR_PARAM_SCALE_PERCENT, 50.0);
Fptr.uploadPixelBufferCliche();

pictureNumber = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_PICTURE_NUMBER);

Картинку в клише можно загрузить:

Дополнительно можно указать масштаб в параметре LIBFPTR_PARAM_SCALE_PERCENT.

После загрузки необходимо удостовериться, что картинка указана в строках клише.

Подробнее о формате массива пикселей в приложении.

Выгрузка картинки из памяти ККТ

Выгрузка картинки из памяти ККТ в файл

libfptr_set_param_int(fptr, LIBFPTR_PARAM_PICTURE_NUMBER, 1);
libfptr_set_param_str(fptr, LIBFPTR_PARAM_FILENAME, L"C:\\picture.bmp");
libfptr_download_picture(fptr);
fptr.setParam(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1)
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, "C:\\picture.bmp")
fptr.downloadPicture()
fptr.setParam(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, "C:\\picture.bmp");
fptr.downloadPicture();
fptr.setParam(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
fptr.setParam(IFptr.LIBFPTR_PARAM_FILENAME, "/storage/emulated/0/picture.bmp");
fptr.downloadPicture();
[fptr setParam:LIBFPTR_PARAM_PICTURE_NUMBER, intParam:1];
[fptr setParam:LIBFPTR_PARAM_FILENAME, NSStringParam:@"/Users/user/picture.bmp"];
[fptr downloadPicture];
fptr.setParam(Constants.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
fptr.setParam(Constants.LIBFPTR_PARAM_FILENAME, "C:\\picture.bmp");
fptr.downloadPicture();
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
    fptr.setParam(fptr.LIBFPTR_PARAM_FILENAME, 'C:\\picture.bmp');
    fptr.downloadPicture;
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_PICTURE_NUMBER, 1)
fptr.SetParam(fptr10.LIBFPTR_PARAM_FILENAME, "C:\\picture.bmp")
fptr.DownloadPicture()
Fptr.setParam(Fptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
Fptr.setParam(Fptr.LIBFPTR_PARAM_FILENAME, "C:\\picture.bmp");
Fptr.downloadPicture();

Выгрузка картинки из памяти ККТ в буфер

libfptr_set_param_int(fptr, LIBFPTR_PARAM_PICTURE_NUMBER, 1);
libfptr_download_pixel_buffer(fptr);

uint width = libfptr_get_param_int(fptr, LIBFPTR_PARAM_WIDTH);
uint height = libfptr_get_param_int(fptr, LIBFPTR_PARAM_HEIGHT);
std::vector<uchar> pixels(width * height);
libfptr_get_param_bytearray(fptr, LIBFPTR_PARAM_PIXEL_BUFFER, &pixels[0], pixels.size())
fptr.setParam(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1)
fptr.downloadPixelBuffer()

pixels = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_PIXEL_BUFFER)
width = fptr.getParamInt(IFptr.LIBFPTR_PARAM_WIDTH)
height = fptr.getParamInt(IFptr.LIBFPTR_PARAM_HEIGHT)
fptr.setParam(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
fptr.downloadPixelBuffer();

byte[] pixels = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_PIXEL_BUFFER);
long width = fptr.getParamInt(IFptr.LIBFPTR_PARAM_WIDTH);
long height = fptr.getParamInt(IFptr.LIBFPTR_PARAM_HEIGHT);
fptr.setParam(IFptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
fptr.downloadPixelBuffer();

byte[] pixels = fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_PIXEL_BUFFER);
long width = fptr.getParamInt(IFptr.LIBFPTR_PARAM_WIDTH);
long height = fptr.getParamInt(IFptr.LIBFPTR_PARAM_HEIGHT);
[fptr setParam:LIBFPTR_PARAM_PICTURE_NUMBER, intParam:1];
[fptr downloadPixelBuffer];

NSData *pixels = [fptr getParamByteArray:LIBFPTR_PARAM_PIXEL_BUFFER];
uint width = [fptr getParamInt:LIBFPTR_PARAM_WIDTH];
uint height = [fptr getParamInt:LIBFPTR_PARAM_HEIGHT];
fptr.setParam(Constants.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
fptr.downloadPixelBuffer();

byte[] pixels = fptr.getParamByteArray(Constants.LIBFPTR_PARAM_PIXEL_BUFFER);
uint width = fptr.getParamInt(Constants.LIBFPTR_PARAM_WIDTH);
uint height = fptr.getParamInt(Constants.LIBFPTR_PARAM_HEIGHT);
var
    pixels: Variant;
    width: LongInt;
    height: LongInt;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
    fptr.downloadPixelBuffer;

    pixels = fptr.getParamByteArray(fptr.LIBFPTR_PARAM_PIXEL_BUFFER);
    width = fptr.getParamInt(fptr.LIBFPTR_PARAM_WIDTH);
    height = fptr.getParamInt(fptr.LIBFPTR_PARAM_HEIGHT);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_PICTURE_NUMBER, 1)
fptr.DownloadPixelBuffer()

pixels := fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_PIXEL_BUFFER)
width := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_WIDTH)
height := fptr.GetParamInt(fptr10.LIBFPTR_PARAM_HEIGHT)
Fptr.setParam(Fptr.LIBFPTR_PARAM_PICTURE_NUMBER, 1);
Fptr.downloadPixelBuffer();

pixels = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_PIXEL_BUFFER);
width = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_WIDTH);
height = Fptr.getParamInt(Fptr.LIBFPTR_PARAM_HEIGHT);

Для выгрузки картинки из памяти ККТ в файл необходимо вызвать метод downloadPicture(), указав путь к файлу картинки в параметре LIBFPTR_PARAM_FILENAME и номер картинки в параметре LIBFPTR_PARAM_PICTURE_NUMBER. Выгрузка происходит в формате BMP.

Для выгрузки картинки из памяти ККТ в буфер необходимо вызвать метод downloadPixelBuffer(), указав номер картинки в параметре LIBFPTR_PARAM_PICTURE_NUMBER. При успешном выполнении будут заполнены следующие выходные параметры:

Подробнее о формате массива пикселей в приложении.

Если ККТ не поддерживает работу с несколькими картинками, будет выгружена единственная доступная, внезависимости от значения параметра LIBFPTR_PARAM_PICTURE_NUMBER.

Очистка картинок

Очистка картинок в памяти ККТ

libfptr_clear_pictures(fptr);
fptr.clearPictures()
fptr.clearPictures();
fptr.clearPictures();
[fptr clearPictures];
fptr.clearPictures();
begin
    fptr.clearPictures;
end;
fptr.ClearPictures()
Fptr.clearPictures();

Для очистки картинок в памяти ККТ необходимо вызвать метод clearPictures().

JSON-задания

Выполнение JSON-задания

Выполнение JSON-задания

libfptr_set_param_str(fptr, LIBFPTR_PARAM_JSON_DATA, L"{\"type\": \"openShift\"}");
libfptr_process_json(fptr);

std::vector<wchar_t> result(128);
int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_JSON_DATA, &result[0], result.size());
if (size > result.size())
{
    result.resize(size);
    libfptr_get_param_str(fptr, LIBFPTR_PARAM_JSON_DATA, &result[0], result.size());
}
fptr.setParam(IFptr.LIBFPTR_PARAM_JSON_DATA, "{\"type\": \"openShift\"}")
fptr.processJson()

result = fptr.getParamString(IFptr.LIBFPTR_PARAM_JSON_DATA)
fptr.setParam(IFptr.LIBFPTR_PARAM_JSON_DATA, "{\"type\": \"openShift\"}");
fptr.processJson();

String result = fptr.getParamString(IFptr.LIBFPTR_PARAM_JSON_DATA);
fptr.setParam(IFptr.LIBFPTR_PARAM_JSON_DATA, "{\"type\": \"openShift\"}");
fptr.processJson();

String result = fptr.getParamString(IFptr.LIBFPTR_PARAM_JSON_DATA);
[fptr setParam:LIBFPTR_PARAM_JSON_DATA, NSStringParam:@"{\"type\": \"openShift\"}"];
[fptr processJson];

NSString *result = [fptr getParamString:LIBFPTR_PARAM_JSON_DATA];
fptr.setParam(Constants.LIBFPTR_PARAM_JSON_DATA, "{\"type\": \"openShift\"}");
fptr.processJson();

String result = fptr.getParamString(Constants.LIBFPTR_PARAM_JSON_DATA);
var
    result: String;
begin
    fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, '{"type": "openShift"}');
    fptr.processJson;

    result := fptr.getParamString(fptr.LIBFPTR_PARAM_JSON_DATA);
end;
fptr.SetParam(fptr10.LIBFPTR_PARAM_JSON_DATA, "{\"type\": \"openShift\"}")
fptr.ProcessJson()

result := fptr.GetParamString(fptr10.LIBFPTR_PARAM_JSON_DATA)
// Метод недоступен

Для выполнения JSON-задания необходимо вызвать метод processJson() и в параметре LIBFPTR_PARAM_JSON_DATA передать текст задания. Результат выполнения запишется также в параметр LIBFPTR_PARAM_JSON_DATA. Если задание завершилось с ошибкой, метод вернет ошибку, а параметр LIBFPTR_PARAM_JSON_DATA не будет заполнен.

Список возможных Json-заданий представлен ниже.

Объекты Json

Ниже представлены объекты, которые встречаются в разных JSON-заданиях.

Оператор (Кассир)

Оператор (кассир)

{
    "name": "Кассир Иванов И.И.",
    "vatin": "123654789507"
}
Данные оператора (кассира)
Параметр Описание Тип Возможные значения Обязательность
name Фамилия и должность оператора (тег 1021) string +
vatin ИНН оператора (тег 1203) string по умолчанию - не используется

Оплата чека

Оплата чека

{
    "type": "cash",
    "sum": 1000.00
}

Оплата чека с комментарием

{
    "type": "electronically",
    "sum": 1000.00,
    "printItems": [
        {
            "type": "text",
            "text": "в т.ч. плат. карта онлайн = 1000.00 руб"
        }
    ]
}
Данные оплаты
Параметр Описание Тип Возможные значения Обязательность
type Способ расчета string cash или 0 - наличными
electronically или 1 - безналичными
prepaid или 2 - предварительная оплата (аванс)
credit или 3 - последующая оплата (кредит)
other или 4 - иная форма оплаты (встречное предоставление)
5-9 - пользовательский тип оплаты
+
sum Сумма расчета number +
printItems Элементы для печати после оплаты object[] Используются только элементы с типами:
text
barcode
pictureFromMemory

Налог

Налог

{
    "type": "vat18",
    "sum": 12.43
}
Данные налога
Параметр Описание Тип Возможные значения Обязательность
type Налоговая ставка string none - налогом не облагается
vat0 - НДС 0%
vat10 - НДС 10%
vat18 - НДС 18%
vat110 - НДС 10/110
vat118 - НДС 18/118
vat20 - НДС 20%
vat120 - НДС 20/120
+
sum Сумма налога number Обязательна для налогов на чек, необязательна для позиций (по умолчанию - расчитывается автоматически)

Информация о покупателе

Информация о покупателе / клиенте

{
    "emailOrPhone": "+79161234567"
}
Данные покупателя
Параметр Описание Тип Возможные значения Обязательность
emailOrPhone E-mail или номер телефона покупателя (тег 1008) string по умолчанию - не используется
vatin ИНН покупателя (тег 1228) string
name Наименование покупателя (тег 1227) string

Информация о продавце

Информация о продавце

{
    "email": "info@mail.ru"
}
Данные продавца
Параметр Описание Тип Возможные значения Обязательность
email E-mail отправителя электронной формы чека (тег 1117) string по умолчанию - используется заданный при регистрации

Данные агента

Данные агента

{
   "agents": ["payingAgent", "bankPayingAgent"],
   "payingAgent": {
       "operation": "Оплата",
       "phones": ["+79161112233"]
   },
   "receivePaymentsOperator": {
        "phones": ["+79163331122"]
   },
   "moneyTransferOperator": {
        "phones": ["+79162223311"],
        "name": "Оператор перевода",
        "address": "Улица Оператора Перевода, д.1",
        "vatin": "321456987121"
   }
}
Данные агента
Параметр Описание Тип Возможные значения Обязательность
agents Агенты (тег 1057 для чека, 1222 для товара) string[] bankPayingAgent - банковский платежный агент
bankPayingSubagent - банковский платежный субагент
payingAgent - платежный агент
payingSubagent - платежный субагент
attorney - поверенный
commissionAgent - комиссионер
another - другой тип агента
По умолчанию - пустой список (не устаналивать признак агента)
Данные платежного агента (payingAgent)
operation Операция платежного агента (тег 1044) string +
phones Телефоны платежного агента (тег 1073) string[] +
Данные оператора по приему платежей (receivePaymentsOperator)
phones Телефоны оператора по приему платежей (тег 1074)string[] +
Данные оператора перевода (moneyTransferOperator)
phones Телефоны оператора перевода (тег 1075) string[] +
name Наименование оператора перевода (тег 1026) string +
address Адрес оператора перевода (тег 1005) string +
vatin ИНН оператора перевода (тег 1016) string +

Данные поставщика

Данные поставщика

{
   "phones": ["+79175555555"],
   "name": "Поставщик",
   "vatin": "956839506500"
}
Данные поставщика
Параметр Описание Тип Возможные значения Обязательность
phones Телефоны поставщика (тег 1171) string[] +
name Наименование поставщика (тег 1225) string +
vatin ИНН поставщика (тег 1226) string +

Информация об организации

Информация об организации

{
    "name": "ООО \"АТОЛ\"",
    "vatin": "123456789047",
    "email": "email@atol.ru",
    "taxationTypes": ["osn", "esn"],
    "agents": ["payingAgent"],
    "address": "Адрес"
}
Данные организации
Параметр Описание Тип Возможные значения Обязательность
name Название организации (тег 1048) string
vatin ИНН организации (тег 1018) string
email E-mail организации (адрес отравителя электронных чеков) (тег 1117) string
address Адрес расчетов (тег 1009) string
taxationTypes Список систем налогообложения (тег 1062) string[] osn - общая
usnIncome - упрощенная (Доход)
usnIncomeOutcome - упрощенная (Доход минус Расход)
envd - ЕНВД
esn - единый сельскохозяйственный налог
patent - патентная
agents Признак агента (тег 1057) string[] bankPayingAgent - банковский платежный агент
bankPayingSubagent - банковский платежный субагент
payingAgent - платежный агент
payingSubagent - платежный субагент
attorney - поверенный
commissionAgent - комиссионер
another - другой тип агента
по умолчанию - пустой список (не устанавливать флаги агентов)

Параметры ККТ

Параметры ККТ

{
    "paymentsAddress": "Адрес места расчетов",
    "fnsUrl": "www.nalog.ru",
    "registrationNumber": "0000000001002292",
    "offlineMode": false,
    "machineInstallation": false,
    "bso": false,
    "encryption": false,
    "autoMode": false,
    "machineNumber": "",
    "service": false,
    "gambling": false,
    "lottery": false,
    "excise": false,
    "defaultTaxationType": "osn"
    "ofdChannel": "usb"
}
Данные устройства
Параметр Описание Тип Возможные значения Обязательность
registrationNumber Регистрационный номер ККТ (тег 1037) string
fnsUrl Адрес сайта ФНС (тег 1060) string
offlineMode Признак автономного режима (тег 1002) bool
machineInstallation Признак установки принтера в автомате (тег 1221) bool
bso Признак АС БСО (тег 1110) bool
encryption Признак шифрования (тег 1056) bool
autoMode Признак автоматического режима (тег 1001) bool
machineNumber Номер автомата (тег 1036) string
internet Признак ККТ для расчетов только в Интернет (тег 1108) bool
service Признак расчетов за услуги (тег 1109) bool
excise Продажа подакцизного товара (тег 1207) bool
gambling Признак проведения азартных игр (тег 1193) bool
lottery Признак проведения лотереи (тег 1126) bool
defaultTaxationType СНО по умолчанию string osn - общая
usnIncome - упрощенная (Доход)
usnIncomeOutcome - упрощенная (Доход минус Расход)
envd - ЕНВД
esn - единый сельскохозяйственный налог
patent - патентная
Можно не указывать, если taxationTypes имеет 1 элемент, иначе должен входить в список taxationTypes
ofdChannel Канал обмена с ОФД string usb - USB (EoU)
ethernet - Ethernet
wifi - Wi-Fi
gsm - GSM-модем
proto - средствами протокола ККТ
ffdVersion Версия ФФД (тег 1209) string 1.0
1.05
1.1
paymentsAddress Место расчетов (тег 1187) string

Параметры ОФД

Параметры ОФД

{
    "name": "ООО \"Эвотор ОФД\"",
    "vatin": "9715260691",
    "host": "ofdp.platformaofd.ru",
    "port": 21101,
    "dns": "0.0.0.0"
}
Данные ОФД
Параметр Описание Тип Возможные значения Обязательность
name Название ОФД (тег 1046) string
vatin ИНН ОФД (тег 1017) string
host Адрес ОФД string
port Порт ОФД number 0 - 65535
dns DNS ОФД string

Код товара

Произвольный тип марки

"MTIzNDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1Njc4OTA="

Меховые изделия

{
    "type": "furs",
    "gtin": "98765432101234",
    "serial": "RU-430302-ABC1234567"
}

Лекарственные препараты

{
    "type": "medicines",
    "gtin": "98765432101234",
    "serial": "ABC1234567890"
}

Табачная продукция

{
    "type": "tobacco",
    "gtin": "98765432101234",
    "serial": "ABC1234"
}

Обувь

{
    "type": "shoes",
    "gtin": "98765432101234",
    "serial": "sgEKKPPcS25y5"
}

Значение кода товара может быть передано как строкой, так и объектом.

Если передается строка, то её значение интерпретируется как base64-закодированное значение реквизита 1162. В этом случае пользователь должен сам составить значение реквизита, закодировать его в base64 и передать драйверу.

Описание объектов представлено ниже. При передаче значения кода товара как объекта, драйвер самостоятельно, основываясь на переданных значениях, составляет реквизит 1162.

Параметр Описание Тип Возможные значения Обязательность
type Тип маркировки string furs - меховые изделия
medicines - лекарства
tobacco - табачная продукция
shoes - обувь
+
Дополнительные параметры для меховых изделий (furs)
gtin Идентификатор продукта GTIN string +
serial Серийный номер string +
Дополнительные параметры для лекарств (medicines)
gtin Идентификатор продукта GTIN string +
serial Контрольный (идентификационный) знак (КиЗ) string +
Дополнительные параметры для табачной продукции (tobacco)
gtin Идентификатор продукта GTIN string +
serial Код идентификации string +
Дополнительные параметры для обуви (shoes)
gtin Идентификатор продукта GTIN string +
serial Серийный номер string +

Код маркировки

Код маркировки

{
    "mark": "UlUtNDAxMzAxLUFBQTAyNzcwMzAx"
}

При передаче кода маркировки товара в позиции, ККТ самостоятельно преобразует указанное в mark значение в реквизит 1162.

Параметр Описание Тип Возможные значения Обязательность
mark base64-представление значения кода маркировки string +

Элементы документа

Минимальные состав позиции чека

{
    "type": "position",
    "name": "Бананы",
    "price": 73.15,
    "quantity": 1.0,
    "tax": {
        "type": "vat18"
    }
}

Позиция с агентами

{
    "type": "position",
    "name": "Бананы",
    "price": 73.15,
    "quantity": 1.0,
    "amount": 73.15,
    "tax": {
        "type": "vat18"
    },
    "agentInfo": {
        "agents": ["payingAgent", "bankPayingAgent"],
        "payingAgent": {
            "operation": "Оплата",
            "phones": ["+79161112233"]
        },
        "receivePaymentsOperator": {
            "phones": ["+79163331122"]
        },
        "moneyTransferOperator": {
            "phones": ["+79162223311"],
            "name": "Оператор перевода",
            "address": "Улица Оператора Перевода, д.1",
            "vatin": "321456987121"
        }
    },
    "supplierInfo": {
        "phones": ["+79175555555"],
        "name": "Поставщик",
        "vatin": "956839506500"
    }
}

Позиция с маркировкой (произвольная)

{
    "type": "position",
    "name": "Бананы",
    "price": 73.15,
    "quantity": 1.0,
    "tax": {
        "type": "vat18"
    },
    "nomenclatureCode": "MTIzNDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1Njc4OTA="
}

Позиция с маркировкой (меховые изделия)

{
    "type": "position",
    "name": "Шуба",
    "price": 100000.0,
    "quantity": 1.0,
    "tax": {
        "type": "vat10"
    },
    "nomenclatureCode":{
        "type": "furs",
        "gtin": "98765432101234",
        "serial": "RU-430302-ABC1234567"
    }
}

Текст

{
    "type": "text",
    "text": "--------------------------------",
    "alignment": "left"
}

Штрихкод

{
    "type": "barcode",
    "barcode": "123456789012",
    "barcodeType": "EAN13",
    "scale": 2
}

Штрихкод GS1-128

{
    "type": "barcode",
    "barcode": "[01]98898765432106[3202]012345[15]991231",
    "barcodeType": "GS1_128",
    "scale": 1
}

QR-код рядом с текстом

{
    "type": "barcode",
    "barcode": "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7",
    "barcodeType": "QR",
    "scale": 4,
    "alignment": "left",
    "overlay": [
        {
            "type": "text",
            "text": "СТРОКА 1",
            "alignment": "right"
        },
        {
            "type": "text",
            "text": "СТРОКА 2",
            "alignment": "right"
        },
        {
            "type": "text",
            "text": "СТРОКА 3",
            "alignment": "right"
        },
        {
            "type": "text",
            "text": "СТРОКА 4",
            "alignment": "right"
        },
        {
            "type": "text",
            "text": "СТРОКА 5",
            "alignment": "right"
        }
    ]
}

Дополнительный реквизит пользователя

{
    "type": "userAttribute",
    "name": "Номер документа в учетной системе",
    "value": "QZ433II",
    "print": false
}

Дополнительный реквизит чека (БСО)

{
    "type": "additionalAttribute",
    "value": "1494325660",
    "print": false
}

Изображение из памяти ККТ

{
    "type": "pictureFromMemory",
    "pictureNumber": 1,
    "alignment": "left"
}
+
Параметр Описание Тип Возможные значения Обязательность
type Тип элемента string position - товар
text - текстовая строка
barcode - штрихкод
userAttribute - дополнительный реквизит пользователя
additionalAttribute - дополнительный реквизит чека (БСО)
pictureFromMemory - картинка из памяти ККТ
+
Текст
text Строка string по умолчанию - пустая строка (промотка ленты)
alignment Выравнивание string left - по левому краю
center - по центру
right - по правому краю
по умолчанию - left
wrap Перенос string none - не переносить, обрезать по ширине ленты
chars - посимвольный перенос
words - перенос по словам
Порядок переноса строк:
  • Строка разбивается на подстроки в соответствии с переносами в строке (\n, \r\n, \r)
  • Каждая подстрока разбивается на более мелкие подстроки в соответствии с wrap
  • по умолчанию - none
    font Шрифт number Зависит от модели ККТ по умолчанию - 0
    doubleWidth Двойная ширина bool по умолчанию - false
    doubleHeight Двойная высота bool по умолчанию - false
    Штрихкод
    barcode Данные ШК string в зависимости от barcodeType+
    barcodeType Тип ШК string EAN8
    EAN13
    UPCA
    UPCE
    CODE39
    CODE93
    CODE128
    CODABAR
    ITF
    ITF14
    GS1_128
    PDF417
    QR
    CODE39_EXTENDED
    +
    alignment Выравнивание string left - по левому краю
    center - по центру
    right - по правому краю
    по умолчанию - center
    scale Коэффициент увеличения number по умолчанию - 1
    height Высота (только для одномерных ШК) number по умолчанию - 30
    printText Печатать значение ШК (только для одномерных ШК) bool по умолчанию - false
    overlay Текст для печати рядом с ШК (см. пример QR-код рядом с текстом object[] по умолчанию - пустой, не печатать
    Картинка из памяти ККТ
    pictureNumber Номер картинки number
    alignment Выравнивание string left - по левому краю
    center - по центру
    right - по правому краю
    по умолчанию - center
    Товарная позиция
    name Наименование товара string +
    price Цена number +
    quantity Количество number +
    amount Сумма number +
    infoDiscountAmount Информационная скидка number по умолчанию - 0.0
    department Отдел number по умолчанию - 1 (по возможности, без печати на чековой ленте)
    measurementUnit Единицы измерения кол-ва товара (тег 1197) string по умолчанию - не передаются
    piece Флаг штучного товара. В количестве не будут напечатаны нули в дробной части. bool по умолчанию - false
    paymentMethod Признак способа рaсчета (тег 1214) string fullPrepayment - предоплата 100%
    prepayment - предоплата
    advance - аванс
    fullPayment - полный расчет
    partialPayment - частичный расчет и кредит
    credit - передача в кредит
    creditPayment - оплата кредита
    по умолчанию - fullPrepayment
    paymentObject Признак предмета расчета (тег 1212) string commodity или 1 - товар
    excise или 2 - подакцизный товар
    job или 3 - работа
    service или 4 - услуга
    gamblingBet или 5 - ставка азартной игры
    gamblingPrize или 6 - выигрыш азартной игры
    lottery или 7 - лотерейный билет
    lotteryPrize или 8 - выигрыш лотереи
    intellectualActivity или 9 - предоставление результатов интерелектуальной деятельности
    payment или 10 - платеж
    agentCommission или 11 - агентское вознаграждение
    composite или 12 - составной предмет расчета
    another или 13 - иной предмет расчета
    proprietaryLaw или 14 - имущественное право
    nonOperatingIncome или 15 - внереализационный доход
    insuranceContributions (устаревшее) или otherContributions или 16 - иные платежи и взносы
    merchantTax или 17 - торговый сбор
    resortFee или 18 - курортный сбор
    deposit или 19 - залог
    consumption или 20 - расход
    soleProprietorCPIContributions или 21 - взносы на ОПС ИП
    cpiContributions или 22 - взносы на ОПС
    soleProprietorCMIContributions или 23 - взносы на ОМС ИП
    cmiContributions или 24 - взносы на ОМС
    csiContributions или 25 - взносы на ОСС
    casinoPayment или 26 - платеж казино
    nomenclatureCode Код товара (маркировка) (тег 1162) Нельзя использовать одновременно с markingCode string / object
    markingCode Код маркировки. Нельзя использовать одновременно с nomenclatureCode object
    tax Налог object
    agentInfo Данные агента object
    supplierInfo Данные поставщика object
    additionalAttribute Дополнительный реквизит предмета расчета (тег 1191) string
    additionalAttributePrint Печатать или не печатать дополнительный реквизит предмета расчета bool по умолчанию - true
    exciseSum Значение акциза (тег 1229) double
    countryCode Код страны происхождения (тег 1230) string
    customsDeclaration Номер таможенной декларации (тег 1231) string
    userParam3 Значение пользовательского параметра 3 number
    userParam4 Значение пользовательского параметра 4 number
    userParam5 Значение пользовательского параметра 5 number
    userParam6 Значение пользовательского параметра 6 number
    Дополнительный реквизит пользователя (тег 1084)
    name Наименование дополнительного реквизита пользователя string +
    value Значение дополнительного реквизита пользователя string +
    print Печатать или не печатать реквизит на чековой ленте bool по умолчанию - true
    Дополнительный реквизит чека (БСО) (тег 1192)
    value Значение дополнительного реквизита чека (БСО) string +
    print Печатать или не печатать реквизит на чековой ленте bool по умолчанию - true

    Допечатать документ

    Допечатать документ

    {
        "type": "continuePrint"
    }
    

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

    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string continuePrint - допечатать документ +

    Данные результата отсутствуют.

    Открытие смены

    Открытие смены

    {
        "type": "openShift",
    
        "operator": {
           "name": "Иванов",
           "vatin": "123654789507"
        }
    }
    

    Открытие смены с печатью дополнительных строк после

    {
        "type": "openShift",
    
        "operator": {
           "name": "Иванов",
           "vatin": "123654789507"
        },
    
        "postItems": [
            {
                "type": "text",
                "text": "ОТКРЫТА НОВАЯ СМЕНА",
                "alignment": "center",
                "doubleWidth": true
            },
            {
                "type": "text",
                "text": "ХОРОШЕГО ДНЯ, КАССИР",
                "alignment": "center",
                "doubleWidth": true
            }
        ]
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string openShift - открытие смены +
    operator Оператор (кассир) object
    preItems Элементы для печати до документа object[] Используются только элементы с типами:
    text
    barcode
    postItems Элементы для печати после документа object[] Используются только элементы с типами:
    text
    barcode
    electronically Электронный отчет bool true - электронный отчет
    false - печатный отчет
    по умолчанию - false. Если ККТ не поддерживает такой функционал, параметр будет проигнорирован и отчет будет напечатан.

    Ответ на открытие смены

    {
      "fiscalParams" : {
         "fiscalDocumentDateTime" : "2017-07-25T13:16:00+03:00",
         "fiscalDocumentNumber" : 70,
         "fiscalDocumentSign" : "0024109209",
         "fnNumber" : "9999078900000961",
         "registrationNumber" : "0000000001002292",
         "shiftNumber" : 12,
         "fnsUrl": "www.nalog.ru"
      },
      "warnings": {
         "notPrinted": true
      }
    }
    
    Результат задания
    Параметр Описание Тип
    Фискальные параметры отчета (fiscalParams)
    fiscalDocumentNumber Номер ФД отчета number
    fiscalDocumentSign ФПД отчета string
    fiscalDocumentDateTime Дата и время отчета string
    shiftNumber Номер смены number
    fnNumber Номер ФН string
    registrationNumber РНМ string
    fnsUrl Адрес сайта ФНС string
    Флаги предупреждений (warnings)
    notPrinted Документ закрыт, но не допечатан.
    Рекомендуется вывести пользователю сообщение о сбое печати и попросить устранить неисправность (самый стандартный случай - закончилась бумага).
    После устранения неисправности требуется продолжить печать
    bool

    Закрытие смены

    Закрытие смены

    {
        "type": "closeShift",
    
        "operator": {
            "name": "Иванов",
            "vatin": "123654789507"
        }
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string closeShift - закрытие смены +
    operator Оператор (кассир) object
    preItems Элементы для печати до документа object[] Используются только элементы с типами:
    text
    barcode
    pictureFromMemory
    postItems Элементы для печати после документа object[] Используются только элементы с типами:
    text
    barcode
    pictureFromMemory
    electronically Электронный отчет bool true - электронный отчет
    false - печатный отчет
    по умолчанию - false. Если ККТ не поддерживает такой функционал, параметр будет проигнорирован и отчет будет напечатан.

    Ответ на закрытие смены

    {
        "fiscalParams" : {
            "fiscalDocumentDateTime" : "2017-07-25T13:12:00+03:00",
            "fiscalDocumentNumber" : 69,
            "fiscalDocumentSign" : "1138986989",
            "fnNumber" : "9999078900000961",
            "registrationNumber" : "0000000001002292",
            "shiftNumber" : 11,
            "receiptsCount" : 3,
            "fnsUrl": "www.nalog.ru"
        },
        "warnings": {
            "notPrinted": false
        }
    }
    
    Результат задания
    Параметр Описание Тип
    Фискальные параметры отчета (fiscalParams)
    fiscalDocumentNumber Номер ФД отчета number
    fiscalDocumentSign ФПД отчета string
    fiscalDocumentDateTime Дата и время отчета string
    shiftNumber Номер смены number
    fnNumber Номер ФН string
    registrationNumber РНМ string
    receiptsCount Количество чеков за смену number
    fnsUrl Адрес сайта ФНС string
    Флаги предупреждений (warnings)
    notPrinted Документ закрыт, но не допечатан.
    Рекомендуется вывести пользователю сообщение о сбое печати и попросить устранить неисправность (самый стандартный случай - закончилась бумага).
    После устранения неисправности требуется продолжить печать
    bool

    Фискальные чеки

    Пример чека прихода (с печатью на чековой ленте)

    {
       "type": "sell",
       "taxationType": "osn",
       "ignoreNonFiscalPrintErrors": false,
    
       "operator": {
           "name": "Иванов",
           "vatin": "123654789507"
       },
    
       "items": [
           {
               "type": "position",
               "name": "Бананы",
               "price": 73.15,
               "quantity": 1.0,
               "amount": 73.15,
               "infoDiscountAmount": 0.0,
               "department": 1,
               "measurementUnit": "кг",
               "paymentMethod": "advance",
               "paymentObject": "commodity",
               "nomenclatureCode": "MTIzNDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=",
               "tax": {
                   "type": "vat18"
               },
               "agentInfo": {
                   "agents": ["payingAgent", "bankPayingAgent"],
                   "payingAgent": {
                       "operation": "Оплата",
                       "phones": ["+79161112233"]
                   },
                   "receivePaymentsOperator": {
                        "phones": ["+79163331122"]
                   },
                   "moneyTransferOperator": {
                        "phones": ["+79162223311"],
                        "name": "Оператор перевода",
                        "address": "Улица Оператора Перевода, д.1",
                        "vatin": "321456987121"
                   }
               },
               "supplierInfo": {
                   "phones": ["+79175555555"],
                   "name": "Поставщик",
                   "vatin": "956839506500"
               }
           },
           {
               "type": "text",
               "text": "--------------------------------",
               "alignment": "left",
               "font": 0,
               "doubleWidth": false,
               "doubleHeight": false
           },
           {
               "type": "position",
               "name": "Шуба",
               "price": 51.25,
               "quantity": 2.0,
               "amount": 102.50,
               "department": 1,
               "paymentMethod": "fullPayment",
               "paymentObject": "commodity",
               "nomenclatureCode": {
                  "type": "furs",
                  "gtin": "98765432101234",
                  "serial": "RU-430302-ABC1234567"
               },
               "tax": {
                   "type": "vat10"
               }
           },
           {
               "type": "text",
               "text": "--------------------------------",
               "alignment": "left",
               "font": 0,
               "doubleWidth": false,
               "doubleHeight": false
           },
           {
               "type": "position",
               "name": "Кефир",
               "price": 48.45,
               "quantity": 1.0,
               "amount": 48.45,
               "department": 1,
               "measurementUnit": "шт.",
               "paymentMethod": "fullPrepayment",
               "paymentObject": "excise",
               "additionalAttribute": "ID:iASDv3w45",
               "tax": {
                   "type": "vat0"
               }
           },
           {
               "type": "barcode",
               "barcode": "123456789012",
               "barcodeType": "EAN13",
               "scale": 2
           }
       ],
       "payments": [
           {
               "type": "cash",
               "sum": 2000.00
           }
       ],
       "total": 224.00
    }
    

    Пример чека прихода (без печати на чековой ленте)

    {
       "type": "sell",
       "taxationType": "osn",
       "electronically": true,
    
       "operator": {
           "name": "Иванов",
           "vatin": "123654789507"
       },
    
       "clientInfo": {
            "emailOrPhone": "+79161234567"
       },
    
       "items": [
           {
               "type": "position",
               "name": "Бананы",
               "price": 73.15,
               "quantity": 1.0,
               "amount": 73.15,
               "infoDiscountAmount": 0.0,
               "department": 1,
               "measurementUnit": "кг",
               "paymentMethod": "advance",
               "paymentObject": "commodity",
               "nomenclatureCode": "MTIzNDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=",
               "tax": {
                   "type": "vat18"
               },
               "agentInfo": {
                   "agents": ["payingAgent", "bankPayingAgent"],
                   "payingAgent": {
                       "operation": "Оплата",
                       "phones": ["+79161112233"]
                   },
                   "receivePaymentsOperator": {
                        "phones": ["+79163331122"]
                   },
                   "moneyTransferOperator": {
                        "phones": ["+79162223311"],
                        "name": "Оператор перевода",
                        "address": "Улица Оператора Перевода, д.1",
                        "vatin": "321456987121"
                   }
               },
               "supplierInfo": {
                   "phones": ["+79175555555"],
                   "name": "Поставщик",
                   "vatin": "956839506500"
               }
           },
           {
               "type": "position",
               "name": "Шуба",
               "price": 51.25,
               "quantity": 2.0,
               "amount": 102.50,
               "department": 1,
               "paymentMethod": "fullPayment",
               "paymentObject": "commodity",
               "nomenclatureCode": {
                  "type": "furs",
                  "gtin": "98765432101234",
                  "serial": "RU-430302-ABC1234567"
               },
               "tax": {
                   "type": "vat10"
               }
           }
       ],
       "payments": [
           {
               "type": "electronically",
               "sum": 175.00
           }
       ],
       "total": 175.00
    }
    

    Пример чека прихода с печатью акции

    {
       "type": "sell",
       "taxationType": "osn",
    
       "operator": {
           "name": "Иванов",
           "vatin": "123654789507"
       },
    
       "clientInfo": {
            "emailOrPhone": "+79161234567"
       },
    
       "items": [
           {
               "type": "userAttribute",
               "name": "Идентификатор скидки",
               "value": "PP3569YY",
               "print": false
           },
           {
               "type": "position",
               "name": "Пакет",
               "price": 5,
               "quantity": 2.0,
               "amount": 10,
               "paymentMethod": "fullPayment",
               "paymentObject": "commodity",
               "tax": {
                   "type": "vat10"
               }
           }
       ],
       "payments": [
           {
               "type": "electronically",
               "sum": 10
           }
       ],
       "total": 10,
    
       "postItems": [
            {
                "type": "text",
                "text": "АКЦИЯ 2 ПАКЕТА ПО ЦЕНЕ ОДНОГО",
                "alignment": "center"
            },
            {
                "type": "text",
                "text": "ТОЛЬКО В 2018 ГОДУ",
                "alignment": "center"
            },
            {
                "type": "text",
                "text": "ПРЕДЪЯВИТЕ ЧЕК ДЛЯ ПОЛУЧЕНИЯ СКИДКИ",
                "alignment": "center"
            },
            {
                "type": "barcode",
                "barcode": "978020137962",
                "barcodeType": "EAN13"
            }
       ]
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string sell - чек прихода
    buy - чек расхода
    sellReturn - чек возврата прихода
    buyReturn - чек возврата расхода
    +
    ignoreNonFiscalPrintErrors Игнорировать ошибки при печати нефискальных элементов из items bool
    electronically Электронный чек bool true - электронный чек (требуется установка clientInfo.emailOrPhone)
    false - печатный чек
    по умолчанию - false
    useVAT18 Использовать при регистрации чека ставку налога 18%. Подробнее в разделе Алгоритмы bool true - да
    false - нет (будет использоваться ставка 20%)
    по умолчанию - false
    taxationType Система налогообложения string osn - общая
    usnIncome - упрощенная (Доход)
    usnIncomeOutcome - упрощенная (Доход минус Расход)
    envd - ЕНВД
    esn - единый сельскохозяйственный налог
    patent - патентная
    можно не передавать, если ККТ зарегистрирована с единственной СНО
    paymentsPlace Место проведения расчета (тег 1187) string
    machineNumber Номер автомата (тег 1036) string
    operator Оператор (кассир) object
    clientInfo Данные покупателя object
    companyInfo Данные продавца object
    agentInfo Данные агента object
    supplierInfo Данные поставщика object
    items Элементы документа object[] +
    payments Оплаты object[] +
    taxes Налоги на чек object[]
    total Итог чека number Может отличаться от суммы позиций на значение, равное копейкам чека.
    Если не задан - высчитывается автоматически из суммы всех позиций
    preItems Элементы для печати до документа object[] Используются только элементы с типами:
    text
    barcode
    pictureFromMemory
    postItems Элементы для печати после документа object[] Используются только элементы с типами:
    text
    barcode
    pictureFromMemory

    Пример ответа на чек

    {
      "fiscalParams" : {
         "fiscalDocumentDateTime" : "2018-03-06T13:52:00+03:00",
         "fiscalDocumentNumber" : 71,
         "fiscalDocumentSign" : "1494325660",
         "fiscalReceiptNumber" : 1,
         "fnNumber" : "9999078900000961",
         "registrationNumber" : "0000000001002292",
         "shiftNumber" : 12,
         "total" : 390.75,
         "fnsUrl": "www.nalog.ru"
      },
      "warnings": null
    }
    
    Результат задания
    Параметр Описание Тип
    Фискальные параметры чека (fiscalParams)
    total Итог number
    fiscalDocumentNumber Номер ФД чека number
    fiscalDocumentSign ФПД чека string
    fiscalDocumentDateTime Дата и время чека string
    fiscalReceiptNumber Номер чека в смене number
    shiftNumber Номер смены number
    fnNumber Номер ФН string
    registrationNumber РНМ string
    fnsUrl Адрес сайта ФНС string
    Флаги предупреждений (warnings)
    notPrinted Документ закрыт, но не допечатан.
    Рекомендуется вывести пользователю сообщение о сбое печати и попросить устранить неисправность (самый стандартный случай - закончилась бумага).
    После устранения неисправности требуется продолжить печать.
    bool

    Чеки коррекции

    Пример чека коррекции (ФФД 1.0 и ФФД 1.05)

    {
        "type": "sellCorrection",
        "taxationType": "osn",
    
        "correctionType": "self",
        "correctionBaseDate": "2017.07.25",
        "correctionBaseNumber": "1175",
        "correctionBaseName": "Акт технического заключения",
    
        "operator": {
            "name": "Иванов",
            "vatin": "123654789507"
        },
    
        "payments": [
            {
                "type": "cash",
                "sum": 2000.00
            }
        ],
    
        "taxes": [
            {
                "type": "vat18",
                "sum": 10.0
            },
            {
                "type": "vat10",
                "sum": 15.0
            }
        ]
    }
    

    Пример чека коррекции (ФФД 1.1)

    {
       "type": "sellCorrection",
       "taxationType": "osn",
       "electronically": true,
       "ignoreNonFiscalPrintErrors": false,
    
       "correctionType": "self",
       "correctionBaseDate": "2017.07.25",
       "correctionBaseNumber": "1175",
       "correctionBaseName": "Акт технического заключения",
    
       "operator": {
           "name": "Иванов",
           "vatin": "123654789507"
       },
    
       "clientInfo": {
            "emailOrPhone": "+79161234567"
       },
    
       "items": [
           {
               "type": "position",
               "name": "Бананы",
               "price": 73.15,
               "quantity": 1.0,
               "amount": 73.15,
               "infoDiscountAmount": 0.0,
               "department": 1,
               "measurementUnit": "кг",
               "paymentMethod": "advance",
               "paymentObject": "commodity",
               "nomenclatureCode": "MTIzNDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=",
               "tax": {
                   "type": "vat18"
               },
               "agentInfo": {
                   "agents": ["payingAgent", "bankPayingAgent"],
                   "payingAgent": {
                       "operation": "Оплата",
                       "phones": ["+79161112233"]
                   },
                   "receivePaymentsOperator": {
                        "phones": ["+79163331122"]
                   },
                   "moneyTransferOperator": {
                        "phones": ["+79162223311"],
                        "name": "Оператор перевода",
                        "address": "Улица Оператора Перевода, д.1",
                        "vatin": "321456987121"
                   }
               },
               "supplierInfo": {
                   "phones": ["+79175555555"],
                   "name": "Поставщик",
                   "vatin": "956839506500"
               }
           },
           {
               "type": "position",
               "name": "Шуба",
               "price": 51.25,
               "quantity": 2.0,
               "amount": 102.50,
               "department": 1,
               "paymentMethod": "fullPayment",
               "paymentObject": "commodity",
               "nomenclatureCode": {
                  "type": "furs",
                  "gtin": "98765432101234",
                  "serial": "RU-430302-ABC1234567"
               },
               "tax": {
                   "type": "vat10"
               }
           },
           {
               "type": "position",
               "name": "Пряники",
               "price": 64.25,
               "quantity": 2.0,
               "amount": 128.50,
               "infoDiscountAmount": 6.0,
               "department": 1,
               "measurementUnit": "шт.",
               "paymentMethod": "fullPrepayment",
               "paymentObject": "commodity",
               "tax": {
                   "type": "vat10"
               }
           },
           {
               "type": "position",
               "name": "Батон нарезной",
               "price": 38.15,
               "quantity": 1.0,
               "amount": 38.15,
               "department": 1,
               "measurementUnit": "шт.",
               "paymentMethod": "fullPrepayment",
               "paymentObject": "commodity",
               "tax": {
                   "type": "10"
               }
           },
           {
               "type": "position",
               "name": "Кефир",
               "price": 48.45,
               "quantity": 1.0,
               "amount": 48.45,
               "department": 1,
               "measurementUnit": "шт.",
               "paymentMethod": "fullPrepayment",
               "paymentObject": "excise",
               "tax": {
                   "type": "vat0"
               }
           }
       ],
       "payments": [
           {
               "type": "electronically",
               "sum": 390.70
           }
       ],
       "total": 390.7
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string sellCorrection - чек коррекции прихода
    buyCorrection - чек коррекции расхода
    sellReturnCorrection - чек коррекции возврата прихода (ФФД 1.1)
    buyReturnCorrection - чек коррекции возврата расхода (ФФД 1.1)
    +
    ignoreNonFiscalPrintErrors Игнорировать ошибки при печати нефискальных элементов из items bool
    operator Оператор (кассир) object
    correctionType Тип коррекции (тег 1173) string self - самостоятельно
    instruction - по предписанию
    correctionBaseName Описание коррекции (тег 1177) string
    correctionBaseDate Дата совершения корректируемого расчета (тег 1178) string Формат - yyyy.mm.dd
    correctionBaseNumberНомер предписания налогового органа (тег 1179) string
    electronically Электронный чек bool true - электронный чек (требуется установка clientInfo.emailOrPhone)
    false - печатный чек
    по умолчанию - false
    taxationType Система налогообложения string osn - общая
    usnIncome - упрощенная (Доход)
    usnIncomeOutcome - упрощенная (Доход минус Расход)
    envd - ЕНВД
    esn - единый сельскохозяйственный налог
    patent - патентная
    можно не передавать, если ККТ зарегистрирована с единственной СНО
    paymentsPlace Место проведения расчета (тег 1187) string
    machineNumber Номер автомата (тег 1036) string
    clientInfo Данные покупателя object
    companyInfo Данные продавца object
    agentInfo Данные агента object
    supplierInfo Данные поставщика object
    items Элементы документа object[] +
    payments Оплаты object[] +
    taxes Налоги на чек object[]
    total Итог чека number Может отличаться от суммы позиций на значение, равное копейкам чека.
    Если не задан - высчитывается автоматически из суммы всех позиций
    preItems Элементы для печати до документа object[] Используются только элементы с типами:
    text
    barcode
    pictureFromMemory
    postItems Элементы для печати после документа object[] Используются только элементы с типами:
    text
    barcode
    pictureFromMemory

    Пример ответа на чек коррекции

    {
      "fiscalParams" : {
         "fiscalDocumentDateTime" : "2018-03-06T13:52:00+03:00",
         "fiscalDocumentNumber" : 49,
         "fiscalDocumentSign" : "2403680979",
         "fiscalReceiptNumber" : 12,
         "fnNumber" : "9999078900000961",
         "registrationNumber" : "0000000001002292",
         "shiftNumber" : 11,
         "total" : 2000.0,
         "fnsUrl": "www.nalog.ru"
      },
      "warnings": {
         "notPrinted": true
      }
    }
    
    Результат задания
    Параметр Описание Тип
    Фискальные параметры чека (fiscalParams)
    total Итог number
    fiscalDocumentNumber Номер ФД чека number
    fiscalDocumentSign ФПД чека string
    fiscalDocumentDateTime Дата и время чека string
    shiftNumber Номер смены number
    fnNumber Номер ФН string
    registrationNumber РНМ string
    fnsUrl Адрес сайта ФНС string
    Флаги предупреждений (warnings)
    notPrinted Документ закрыт, но не допечатан.
    Рекомендуется вывести пользователю сообщение о сбое печати и попросить устранить неисправность (самый стандартный случай - закончилась бумага).
    После устранения неисправности требуется продолжить печать.
    bool

    Нефискальные документы

    Пример нефискального документа

    {
        "type": "nonFiscal",
        "items": [
            {
                "type": "text",
                "text": "ИНН: 7725760410 КПП: 772501001",
                "alignment": "center"
            },
            {
                "type": "text",
                "text": "КАССА: 00105700000011 СМЕНА:1",
                "alignment": "center"
            },
            {
                "type": "text",
                "text": "ЧЕК: 1 ДАТА: 20.06.2017 14:12",
                "alignment": "center"
            },
            {
                "type": "barcode",
                "barcode": "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7",
                "barcodeType": "QR",
                "scale": 7
            },
            {
                "type": "text",
                "text": "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7",
                "alignment": "center"
            },
            {
                "type": "text",
                "text": "10 58 1c 85 ab 45 29 fa 34 a7 34 10 58 1c 85 ab 45 29 fa 34 a7 34 10 58 1c 85 ab 45 29 fa 34 a7 34 10 58 1c 85 ab 45 29 fa 34 a7 34 34 a7 34 10 58",
                "alignment": "center"
            }
        ]
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string nonFiscal - нефискальный документ +
    items Элементы документа object[] Используются только элементы с типами:
    text
    barcode
    pictureFromMemory
    +
    printFooter Флаг печати подвала документа bool по умолчанию - true

    Данные результата задания отсутствуют.

    X-отчет

    Пример X-отчета

    {
        "type": "reportX",
    
        "operator": {
            "name": "Иванов",
            "vatin": "123654789507"
        }
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string reportX - X-отчет +
    operator Оператор (кассир) object
    preItems Элементы для печати до документа object[] Используются только элементы с типами:
    text
    barcode
    pictureFromMemory
    postItems Элементы для печати после документа object[] Используются только элементы с типами:
    text
    barcode
    pictureFromMemory

    Данные результата задания отсутствуют.

    Внесения и выплаты

    Пример внесения

    {
        "type": "cashIn",
    
        "operator": {
            "name": "Иванов",
            "vatin": "123654789507"
        },
    
        "cashSum": 1150.0
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string cashIn - внесение
    cashOut - выплата
    +
    operator Оператор (кассир) object
    cashSum Сумма number +
    preItems Элементы для печати до документа object[] Используются только элементы с типами:
    text
    barcode
    pictureFromMemory
    postItems Элементы для печати после документа object[] Используются только элементы с типами:
    text
    barcode
    pictureFromMemory

    Пример ответа на внесение

    {
        "counters" : {
            "cashSum" : 1345.0
        }
    }
    
    Результат задания
    Параметр Описание Тип
    Состояние счетчиков наличности после операции (counters)
    cashSum Сумма в денежном ящике double

    Отчет о состоянии расчетов

    Пример вызова отчета о состоянии расчетов

    {
       "type": "reportOfdExchangeStatus",
    
       "operator": {
          "name": "Иванов",
          "vatin": "123654789507"
       }
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string reportOfdExchangeStatus - отчет о состоянии расчетов +
    operator Оператор (кассир) object
    preItems Элементы для печати до документа object[] Используются только элементы с типами:
    text
    barcode
    postItems Элементы для печати после документа object[] Используются только элементы с типами:
    text
    barcode

    Пример ответа на формирование отчета о состоянии расчетов

    {
      "fiscalParams" : {
         "fiscalDocumentDateTime" : "2018-03-06T13:52:00+03:00",
         "fiscalDocumentNumber" : 157,
         "fiscalDocumentSign" : "1230933772",
         "fnNumber" : "9999078900000961",
         "fnsUrl" : "nalog.ru",
         "receiptsCount" : 0,
         "registrationNumber" : "0000000001035160",
         "shiftNumber" : 28
      },
      "errors" : {
         "fnCommandCode" : 0,
         "documentNumber" : 111,
         "fn" : {
            "code" : 0,
            "description" : "Ошибок нет"
         },
         "network" : {
            "code" : 13617,
            "description" : "Отсутствует физический канал связи"
         },
         "ofd" : {
            "code" : 0,
            "description" : "Ошибок нет"
         }
      },
      "status" : {
         "notSentCount" : 46,
         "notSentFirstDocDateTime" : "2018-02-04T11:24:00+03:00",
         "notSentFirstDocNumber" : 111
      },
      "warnings": {
         "notPrinted": true
      }
    }
    
    Результат задания
    Параметр Описание Тип
    Фискальные параметры отчета (fiscalParams)
    fiscalDocumentNumber Номер ФД отчета number
    fiscalDocumentSign ФПД отчета string
    fiscalDocumentDateTime Дата и время отчета string
    shiftNumber Номер смены number
    fnNumber Номер ФН string
    registrationNumber РНМ string
    fnsUrl Адрес сайта ФНС string
    Состояние (status)
    notSentCount Количество неотправленных ФД number
    notSentFirstDocNumber Номер первого неотправленного ФД number
    notSentFirstDocDateTime Дата и время первого неотправленного ФД string
    Ошибки обмена (errors)
    network.code Код ошибки сети number
    network.description Текст ошибки сети string
    ofd.code Код ошибки ОФД number
    ofd.description Текст ошибки ОФД string
    fn.code Код ошибки ФН number
    fn.description Текст ошибки ФН string
    documentNumber Номер ФД, на котором произошла ошибка number
    fnCommandCode Команда ФН, на которой произошла ошибка number
    Флаги предупреждений (warnings)
    notPrinted Документ закрыт, но не допечатан.
    Рекомендуется вывести пользователю сообщение о сбое печати и попросить устранить неисправность (самый стандартный случай - закончилась бумага).
    После устранения неисправности требуется продолжить печать.
    bool

    Печать документа из ФН

    Пример печати документа из ФН по номеру

    {
        "type": "printFnDocument",
    
        "fiscalDocumentNumber": 12
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string printFnDocument - печать документа из ФН по номеру +
    fiscalDocumentNumber Номер документа number +

    Данные результата задания отсутствуют.

    Печать копии последнего чека

    Печать копии последнего чека

    {
        "type": "printLastReceiptCopy"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string printLastReceiptCopy - печать копии последнего чека +

    Данные результата задания отсутствуют.

    Запрос параметров регистрации ККТ

    Пример запроса параметров регистрации ККТ

    {
       "type": "getRegistrationInfo"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string getRegistrationInfo - запрос параметров регистрации +

    Пример ответа на запрос параметров регистрации ККТ

    {
       "organization": {
           "name": "ООО \"АТОЛ\"",
           "vatin": "123456789047",
           "email": "email@atol.ru",
           "taxationTypes": ["osn", "esn"],
           "agents": ["payingAgent"],
           "address": "Адрес расчетов"
       },
       "device": {
           "paymentsAddress": "Адрес места расчетов",
           "fnsUrl": "www.nalog.ru",
           "registrationNumber": "0000000001002292",
           "offlineMode": false,
           "machineInstallation": false,
           "bso": false,
           "encryption": false,
           "autoMode": false,
           "machineNumber": "",
           "internet": false,
           "service": false,
           "gambling": false,
           "lottery": false,
           "excise": false,
           "defaultTaxationType": "osn"
           "ofdChannel": "usb"
       },
       "ofd": {
           "name": "ООО \"Эвотор ОФД\"",
           "vatin": "9715260691",
           "host": "ofdp.platformaofd.ru",
           "port": 21101,
           "dns": "0.0.0.0"
       }
    }
    
    Результат задания
    Параметр Описание Тип
    organization Информация об организации object
    device Параметры ККТ object
    ofd Параметры ОФД object

    Регистрация / перерегистрация ККТ

    Пример перерегистрации ККТ

    {
       "type": "fnChange",
    
       "operator": {
          "name": "Иванов",
          "vatin": "123654789507"
       },
    
       "organization": {
           "name": "ООО \"АТОЛ\"",
           "vatin": "123456789047",
           "email": "email@atol.ru",
           "taxationTypes": ["osn", "esn"],
           "agents": ["payingAgent"],
           "address": "Адрес"
       },
       "device": {
           "paymentsAddress": "Адрес места расчетов",
           "fnsUrl": "www.nalog.ru",
           "registrationNumber": "0000000001002292",
           "offlineMode": false,
           "machineInstallation": false,
           "bso": false,
           "encryption": false,
           "autoMode": false,
           "machineNumber": "",
           "service": false,
           "gambling": false,
           "lottery": false,
           "excise": false,
           "defaultTaxationType": "osn",
           "ofdChannel": "usb"
       },
       "ofd": {
           "name": "ООО \"Эвотор ОФД\"",
           "vatin": "9715260691",
           "host": "ofdp.platformaofd.ru",
           "port": 21101,
           "dns": "0.0.0.0"
       }
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string registration - регистрация
    fnChange - замена ФН
    changeRegistrationParameters - изменение параметров регистрации
    +
    operator Оператор (кассир) object
    reason Причина перерегистрации (ФФД 1.0 и ФФД 1.05) string ofdChange - смена ОФД
    attributesChange - изменение реквизитов
    settingsChange - изменение настроек ККТ
    Игнорируется при начальной регистрации
    changeInfoReasons
    Список причин изменения параметров регистрации (ФФД 1.1) int[] Номера битов из таблицы 16 ФФД (Реквизиты, содержащиеся в структуре реквизита «код причины перерегистрации»)
    organization Информация об организации object
    device Параметры ККТ object
    ofd Параметры ОФД object
    electronically Электронный отчет bool true - электронный отчет
    false - печатный отчет
    по умолчанию - false. Если ККТ не поддерживает такой функционал, параметр будет проигнорирован и отчет будет напечатан.

    Пример ответа на перерегистрацию ККТ

    {
      "fiscalParams" : {
         "fiscalDocumentDateTime" : "2018-03-06T13:52:00+03:00",
         "fiscalDocumentNumber" : 70,
         "fiscalDocumentSign" : "0024109209",
         "fnNumber" : "9999078900000961",
         "registrationNumber" : "0000000001002292",
         "shiftNumber" : 12,
         "fnsUrl": "www.nalog.ru"
      },
      "warnings": {
         "notPrinted": true
      }
    }
    
    Результат задания
    Параметр Описание Тип
    Фискальные параметры отчета (fiscalParams)
    fiscalDocumentNumber Номер ФД отчета number
    fiscalDocumentSign ФПД отчета string
    fiscalDocumentDateTime Дата и время отчета string
    shiftNumber Номер смены number
    fnNumber Номер ФН string
    registrationNumber РНМ string
    fnsUrl Адрес сайта ФНС string
    Флаги предупреждений (warnings)
    notPrinted Документ закрыт, но не допечатан.
    Рекомендуется вывести пользователю сообщение о сбое печати и попросить устранить неисправность (самый стандартный случай - закончилась бумага).
    После устранения неисправности требуется продолжить печать.
    bool

    Закрытие ФН

    Пример закрытия ФН

    {
       "type": "closeArchive",
    
       "operator": {
          "name": "Иванов",
          "vatin": "123654789507"
       }
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string closeArchive - закрытие ФН +
    operator Оператор (кассир) object
    electronically Электронный отчет bool true - электронный отчет
    false - печатный отчет
    по умолчанию - false. Если ККТ не поддерживает такой функционал, параметр будет проигнорирован и отчет будет напечатан.

    Пример ответа на закрытие ФН

    {
      "fiscalParams" : {
         "fiscalDocumentDateTime" : "2018-03-06T13:52:00+03:00",
         "fiscalDocumentNumber" : 70,
         "fiscalDocumentSign" : "0024109209",
         "fnNumber" : "9999078900000961",
         "registrationNumber" : "0000000001002292",
         "shiftNumber" : 12,
         "fnsUrl": "www.nalog.ru"
      },
      "warnings": null
    }
    
    Результат задания
    Параметр Описание Тип
    Фискальные параметры отчета (fiscalParams)
    fiscalDocumentNumber Номер ФД отчета number
    fiscalDocumentSign ФПД отчета string
    fiscalDocumentDateTime Дата и время отчета string
    shiftNumber Номер смены number
    fnNumber Номер ФН string
    registrationNumber РНМ string
    fnsUrl Адрес сайта ФНС string
    Флаги предупреждений (warnings)
    notPrinted Документ закрыт, но не допечатан.
    Рекомендуется вывести пользователю сообщение о сбое печати и попросить устранить неисправность (самый стандартный случай - закончилась бумага).
    После устранения неисправности требуется продолжить печать.
    bool

    Открыть денежный ящик

    Открыть денежный ящик

    {
        "type": "openCashDrawer"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string openCashDrawer - открыть денежный ящик +

    Данные результата отсутствуют.

    Установка даты и времени

    Пример установки даты и времени

    {
        "type": "setDateTime",
        "dateTime": "2018.02.01 12:43:22"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string setDateTime - установка даты и времени +
    dateTime Дата и время string Формат - yyyy.mm.dd HH:MM:SS

    Данные результата задания отсутствуют.

    Чтение настроек ККТ

    Пример чтения настроек ККТ

    {
       "type": "getDeviceParameters",
    
       "keys": [273, 274, 9999, 49, 50]
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string getDeviceParameters - чтение настроек ККТ +
    keys Список номеров настроек для чтения number[] +

    Список доступных настроек и их значений зависит от модели ККТ и приведен в приложении Настройки ККТ.

    Если какую-либо из настроек из списка keys считать не удалось, задание не прервется - просто заполнятся поля errorCode и errorDescription соответствующего блока ответа. Если ошибки при чтение не было - будет заполнено поле value.

    Пример ответа на чтение настроек ККТ

    {
       "deviceParameters" : [
          {
             "key" : 273,
             "value" : "ofdp.platformaofd.ru"
          },
          {
             "key" : 274,
             "value" : "21101"
          },
          {
             "errorCode" : 11,
             "errorDescription" : "Не поддерживается в данной версии",
             "key" : 9999
          },
          {
             "key" : 49,
             "value" : "1"
          },
          {
             "key" : 50,
             "value" : "16"
          }
       ]
    }
    
    Результат задания
    Параметр Описание Тип
    Настройки ККТ (deviceParameters)
    key Номер настройки (из запроса) number
    value Значение настройки string
    errorCode Код ошибки number
    errorDescription Текст ошибки string

    Запись настроек ККТ

    Пример записи настроек ККТ

    {
       "type": "setDeviceParameters",
    
       "deviceParameters" : [
             {
                "key" : 273,
                "value" : "ofdp.platformaofd.ru"
             },
             {
                "key" : 274,
                "value" : "21101"
             },
             {
                "key" : 9999,
                "value" : "qwerty123"
             },
             {
                "key" : 49,
                "value" : "1"
             },
             {
                "key" : 50,
                "value" : "16"
             }
          ]
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string setDeviceParameters - запись настроек ККТ +
    Настройки ККТ (deviceParameters)
    key Номер настройки number +
    value Значение настройки string +

    Список доступных настроек и их значений зависит от модели ККТи приведен в приложении Настройки ККТ.

    Если какую-либо из настроек из списка keys записать не удалось, задание не прервется - просто заполнятся поля errorCode и errorDescription соответствующего блока ответа.

    Пример ответа на запись настроек ККТ

    {
       "deviceParameters" : [
          {
             "key" : 273,
             "value" : "ofdp.platformaofd.ru"
          },
          {
             "key" : 274,
             "value" : "21101"
          },
          {
             "errorCode" : 11,
             "errorDescription" : "Не поддерживается в данной версии",
             "key" : 9999
          },
          {
             "key" : 49,
             "value" : "1"
          },
          {
             "key" : 50,
             "value" : "16"
          }
       ]
    }
    
    Результат задания
    Параметр Описание Тип
    Настройки ККТ (deviceParameters)
    key Номер настройки (из запроса) number
    value Значение настройки (из запроса) string
    errorCode Код ошибки number
    errorDescription Текст ошибки string

    Запрос информации о ККТ

    Пример запроса информации о ККТ

    {
       "type": "getDeviceInfo"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string getDeviceInfo - запрос информации о ККТ +

    Пример ответа на запрос информации о ККТ

    {
      "deviceInfo" : {
         "configurationVersion" : "5.4.3-rc4",
         "ffdVersion" : "1.05",
         "firmwareVersion" : "1245",
         "fnFfdVersion" : "1.0",
         "model" : 69,
         "modelName" : "АТОЛ 77Ф",
         "receiptLineLength" : 48,
         "receiptLineLengthPix" : 576,
         "serial" : "00106900000014"
      }
    }
    
    Результат задания
    Параметр Описание Тип
    Информация о ККТ (deviceInfo)
    model Код модели number
    modelName Наименование модели string
    serial Заводской номер ККТ string
    firmwareVersion Версия прошивки string
    configurationVersion Версия конфигурации string
    receiptLineLength Ширина чековой ленты в символах number
    receiptLineLengthPix Ширина чековой ленты в пикселях number
    ffdVersion Версия ФФД ККТ string
    fnFfdVersion Версия ФФД ФН string

    Запрос состояния ККТ

    Пример запроса состояния ККТ

    {
       "type": "getDeviceStatus"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string getDeviceStatus - запрос состояния ККТ +

    Пример ответа на запрос состояния ККТ

    {
      "deviceStatus" : {
         "blocked" : false,
         "coverOpened" : false,
         "currentDateTime" : "2018-03-07T05:39:20+03:00",
         "fiscal" : true,
         "fnFiscal" : true,
         "fnPresent" : true,
         "paperPresent" : true,
         "cashDrawerOpened" : false,
         "shift" : "closed"
      }
    }
    
    Результат задания
    Параметр Описание Тип
    Состояние ККТ (deviceStatus)
    currentDateTime Текущие дата и время ККТ string
    shift Состояние смены.
    Принимает значения:
    closed - закрыта
    opened - открыта
    expired - истекла
    string
    blocked ККТ заблокирована bool
    coverOpened Крышка открыта bool
    paperPresentНаличие чековой ленты bool
    fiscal ККТ зарегистрирована bool
    fnFiscal ФН фискализирован bool
    fnPresent ФН обнаружен bool
    cashDrawerOpened Денежный ящик открыт bool

    Запрос состояния денежного ящика

    Пример запроса состояния денежного ящика

    {
       "type": "getCashDrawerStatus"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string getCashDrawerStatus - запрос состояния денежного ящика +

    Пример ответа на запрос состояния денежного ящика

    {
       "counters" : {
          "cashSum" : 6238.0
       },
       "cashDrawerStatus" : {
          "cashDrawerOpened" : false
       }
    }
    
    Результат задания
    Параметр Описание Тип
    Состояние ДЯ (cashDrawerStatus)
    cashDrawerOpened Денежный ящик открыт bool
    Состояние счетчиков наличности (counters)
    cashSum Сумма в денежном ящике double

    Запрос состояния смены

    Пример запроса состояния смены

    {
       "type": "getShiftStatus"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string getShiftStatus - запрос состояния смены +

    Пример ответа на запрос состояния смены

    {
      "shiftStatus" : {
         "expiredTime" : "2018-03-06T13:52:59+03:00",
         "number" : 152,
         "state" : "closed"
      }
    }
    
    Результат задания
    Параметр Описание Тип
    Состояние смены (shiftStatus)
    expiredTime Дата и время истечения смены (24 часа с её открытия). Имеет смысл, только если смена не закрыта string
    number Номер смены, если смена открыта, или номер последней закрытой смены, если закрыта number
    status Состояние смены.
    Принимает значения:
    closed - закрыта
    opened - открыта
    expired - истекла
    string

    Запрос информации о ФН

    Пример запроса информации о ФН

    {
       "type": "getFnInfo"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string getFnInfo - запрос информации о ФН +

    Пример ответа на запрос информации о ФН

    {
      "fnInfo" : {
         "ffdVersion" : "1.05",
         "fnFfdVersion" : "1.0",
         "numberOfRegistrations" : 1,
         "registrationsRemaining" : 29,
         "serial" : "9999078900008855",
         "validityDate" : "2019-04-15T21:00:00+03:00",
         "livePhase" : "fiscalMode",
         "warnings" : {
            "criticalError" : false,
            "memoryOverflow" : false,
            "needReplacement" : false,
            "ofdTimeout" : false,
            "resourceExhausted" : false
         }
      }
    }
    
    Результат задания
    Параметр Описание Тип
    Информация о ФН (fnInfo)
    serial Заводской номер ФН string
    numberOfRegistrations Количество проведенных регистраций number
    registrationsRemaining Количество оставшихся регистраций number
    validityDate Срок действия ФН string
    ffdVersion Версия ФФД ККТ string
    fnFfdVersion Версия ФФД ФН string
    livePhase Фаза жизни ФН.
    Принимает значения:
    init - настройка ФН
    configured - настроен, готов в активации
    fiscalMode - фискальный режим
    postFiscalMode - постфискальный режим
    accessArchive - доступ к архиву ФН
    unknown - неизвестная фаза жизни
    string
    Предупреждения ФН (fnInfo.warnings)
    memoryOverflow Память ФН переполнена bool
    needReplacement Требуется срочная замена ФН bool
    ofdTimeout Превышено время ожидания ответа от ОФД bool
    resourceExhausted Исчерпан ресурс ФН bool
    criticalError Критическая ошибка ФН bool

    Запрос состояния ФН

    Пример запроса статуса ФН

    {
       "type": "getFnStatus"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string getFnStatus - запрос статуса ФН +

    Пример ответа на запрос статуса ФН

    {
      "fnStatus" : {
         "fiscalDocumentNumber": 15,
         "fiscalReceiptNumber": 15,
         "warnings" : {
            "criticalError" : false,
            "memoryOverflow" : false,
            "needReplacement" : false,
            "ofdTimeout" : false,
            "resourceExhausted" : false
         }
      }
    }
    
    Результат задания
    Параметр Описание Тип
    Информация об ФН (fnStatus)
    fiscalDocumentNumber Номер последнего ФД number
    fiscalReceiptNumber Количество чеков за смену number
    Предупреждения ФН (fnInfo.warnings)
    memoryOverflow Память ФН переполнена bool
    needReplacement Требуется срочная замена ФН bool
    ofdTimeout Превышено время ожидания ответа от ОФД bool
    resourceExhausted Исчерпан ресурс ФН bool
    criticalError Критическая ошибка ФН bool

    Запрос состояния обмена с ОФД

    Пример запроса состояния обмена с ОФД

    {
       "type": "ofdExchangeStatus"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string ofdExchangeStatus - запрос состояния обмена с ОФД +

    Пример ответа на запрос состояния обмена с ОФД

    {
       "errors" : {
           "fnCommandCode" : 0,
           "documentNumber" : 1,
           "fn" : {
              "code" : 0,
              "description" : "Ошибок нет"
           },
           "network" : {
              "code" : 13617,
              "description" : "Отсутствует физический канал связи"
           },
           "ofd" : {
              "code" : 0,
              "description" : "Ошибок нет"
           }
       },
       "status" : {
          "notSentCount" : 69,
          "notSentFirstDocDateTime" : "2018-03-06T13:52:00+03:00",
          "notSentFirstDocNumber" : 1
       }
    }
    
    Результат задания
    Параметр Описание Тип
    Состояние (status)
    notSentCount Количество неотправленных ФД number
    notSentFirstDocNumber Номер первого неотправленного ФД number
    notSentFirstDocDateTime Дата и время первого неотправленного ФД string
    Ошибки обмена (errors)
    network.code Код ошибки сети number
    network.description Текст ошибки сети string
    ofd.code Код ошибки ОФД number
    ofd.description Текст ошибки ОФД string
    fn.code Код ошибки ФН number
    fn.description Текст ошибки ФН string
    documentNumber Номер ФД, на котором произошла ошибка number
    fnCommandCode Команда ФН, на которой произошла ошибка number

    Запрос сменных итогов

    Пример запроса сменных итогов

    {
       "type": "getShiftTotals"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string getShiftTotals - запрос сменных итогов +

    Пример ответа на запрос сменных итогов

    {
       "shiftTotals" : {
          "cashDrawer" : {
             "sum" : 112.9
          },
          "income" : {
             "count" : 1,
             "sum" : 100.0
          },
          "outcome" : {
             "count" : 0,
             "sum" : 0.0
          },
          "receipts" : {
             "buy" : {
                "count" : 0,
                "payments" : {
                   "cash" : 0.0,
                   "credit" : 0.0,
                   "electronically" : 0.0,
                   "other" : 0.0,
                   "prepaid" : 0.0,
                   "userPaymentType-1" : 0.0,
                   "userPaymentType-2" : 0.0,
                   "userPaymentType-3" : 0.0,
                   "userPaymentType-4" : 0.0,
                   "userPaymentType-5" : 0.0
                },
                "sum": 0.0
             },
             "buyReturn" : {
                "count" : 0,
                "payments" : {
                   "cash" : 0.0,
                   "credit" : 0.0,
                   "electronically" : 0.0,
                   "other" : 0.0,
                   "prepaid" : 0.0,
                   "userPaymentType-1" : 0.0,
                   "userPaymentType-2" : 0.0,
                   "userPaymentType-3" : 0.0,
                   "userPaymentType-4" : 0.0,
                   "userPaymentType-5" : 0.0
                },
                "sum": 0.0
             },
             "sell" : {
                "count" : 1,
                "payments" : {
                   "cash" : 12.9,
                   "credit" : 0.0,
                   "electronically" : 0.0,
                   "other" : 0.0,
                   "prepaid" : 0.0,
                   "userPaymentType-1" : 0.0,
                   "userPaymentType-2" : 0.0,
                   "userPaymentType-3" : 0.0,
                   "userPaymentType-4" : 0.0,
                   "userPaymentType-5" : 0.0
                },
                "sum": 0.0
             },
             "sellReturn" : {
                "count" : 0,
                "payments" : {
                   "cash" : 0.0,
                   "credit" : 0.0,
                   "electronically" : 0.0,
                   "other" : 0.0,
                   "prepaid" : 0.0,
                   "userPaymentType-1" : 0.0,
                   "userPaymentType-2" : 0.0,
                   "userPaymentType-3" : 0.0,
                   "userPaymentType-4" : 0.0,
                   "userPaymentType-5" : 0.0
                },
                "sum": 0.0
             }
          },
          "shiftNumber" : 1
       }
    }
    
    Результат задания
    Параметр Описание Тип
    Сменные итоги (shiftTotals)
    shiftNumber Номер смены, если смена открыта, или номер последней закрытой смены, если закрыта number
    Информация о денежном ящике (shiftTotals.cashDrawer)
    sum Сумма наличных в денежном ящике number
    Итоги внесений/выплат (shiftTotals.income, shiftTotals.outcome)
    count Количество операций внесения/выплаты number
    sum Сумма операций внесения/выплаты number
    Итоги по чекам (shiftTotals.receipts.sell, shiftTotals.receipts.sellReturn, shiftTotals.receipts.buy, shiftTotals.receipts.buyReturn)
    count Количество чеков number
    sum Общая сумма чеков number
    payments.cash Сумма оплат наличными number
    payments.electronically Сумма оплат безналичными number
    payments.credit Сумма кредитов number
    payments.prepaid Сумма предоплат number
    payments.other Сумма оплат встречным предоставлением number
    payments.userPaymentType-X Сумма оплат пользовательским типом оплаты с номером X number

    Запрос необнуляемых итогов

    Пример запроса необнуляемых итогов

    {
       "type": "getOverallTotals"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string getOverallTotals - запрос необнуляемых итогов +

    Пример ответа на запрос необнуляемых итогов

    {
       "overallTotals" : {
          "receipts" : {
             "buy" : {
                "sum" : 12.9,
                "payments" : {
                   "cash" : 0.0,
                   "credit" : 0.0,
                   "electronically" : 0.0,
                   "other" : 0.0,
                   "prepaid" : 0.0,
                   "userPaymentType-1" : 0.0,
                   "userPaymentType-2" : 0.0,
                   "userPaymentType-3" : 0.0,
                   "userPaymentType-4" : 0.0,
                   "userPaymentType-5" : 0.0
                }
             },
             "buyReturn" : {
                "sum" : 0.0,
                "payments" : {
                   "cash" : 0.0,
                   "credit" : 0.0,
                   "electronically" : 0.0,
                   "other" : 0.0,
                   "prepaid" : 0.0,
                   "userPaymentType-1" : 0.0,
                   "userPaymentType-2" : 0.0,
                   "userPaymentType-3" : 0.0,
                   "userPaymentType-4" : 0.0,
                   "userPaymentType-5" : 0.0
                },
             },
             "sell" : {
                "sum" : 0.0,
                "payments" : {
                   "cash" : 0.0,
                   "credit" : 0.0,
                   "electronically" : 0.0,
                   "other" : 0.0,
                   "prepaid" : 0.0,
                   "userPaymentType-1" : 0.0,
                   "userPaymentType-2" : 0.0,
                   "userPaymentType-3" : 0.0,
                   "userPaymentType-4" : 0.0,
                   "userPaymentType-5" : 0.0
                },
             },
             "sellReturn" : {
                "sum" : 0.0,
                "payments" : {
                   "cash" : 0.0,
                   "credit" : 0.0,
                   "electronically" : 0.0,
                   "other" : 0.0,
                   "prepaid" : 0.0,
                   "userPaymentType-1" : 0.0,
                   "userPaymentType-2" : 0.0,
                   "userPaymentType-3" : 0.0,
                   "userPaymentType-4" : 0.0,
                   "userPaymentType-5" : 0.0
                },
             }
          }
       }
    }
    
    Результат задания
    Параметр Описание Тип
    Необнуляемые итоги (overallTotals)
    Итоги по чекам (overallTotals.receipts.sell, overallTotals.receipts.sellReturn, overallTotals.receipts.buy, overallTotals.receipts.buyReturn)
    sum Общая сумма number
    payments.cash Сумма оплат наличными number
    payments.electronically Сумма оплат безналичными number
    payments.credit Сумма кредитов number
    payments.prepaid Сумма предоплат number
    payments.other Сумма оплат встречным предоставлением number
    payments.userPaymentType-X Сумма оплат пользовательским типом оплаты с номером X number

    Чтение документа из ФН

    Чтение документа из ФН по номеру

    {
        "type": "getFnDocument",
    
        "fiscalDocumentNumber": 1617
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string getFnDocument - чтение документа из ФН по номеру +
    fiscalDocumentNumber Номер документа number +

    Пример ответа на чтение документа из ФН по номеру

    {
       "documentTLV" : {
          "1012" : "2018.09.10 10:17:00",
          "1018" : "123456789047",
          "1020" : 12.9,
          "1021" : "СИС. АДМИНИСТРАТОР",
          "1031" : 12.9,
          "1037" : "0000000001006981",
          "1038" : 29,
          "1040" : 1617,
          "1041" : "9999078900011722",
          "1042" : 1,
          "1054" : 1,
          "1055" : 1,
          "1059" : [
             {
                "1023" : 2.345,
                "1030" : "Чипсы с беконом LAYS",
                "1043" : 12.9,
                "1079" : 5.5,
                "1199" : 1,
                "1200" : 1.97,
                "1212" : 1,
                "1214" : 1
             }
          ],
          "1077" : "3104F0B68CE4",
          "1081" : 0.0,
          "1102" : 1.97,
          "1209" : 2,
          "1215" : 0.0,
          "1216" : 0.0,
          "1217" : 0.0,
          "fiscalDocumentType" : "receipt"
       }
    }
    
    Результат задания
    Параметр Описание Тип
    Состав чека в TLV (documentTLV)
    fiscalDocumentType Тип документа. Принимает следующие значения:
    registration - регистрация ККТ
    changeRegistrationParameters - перерегистрация ККТ
    closeArchive - закрытие ФН
    ofdExchangeStatus - отчет о состоянии расчетов
    openShift - открытие смены
    closeShift - закрытие смены
    receipt - чек
    receiptCorrection - чек коррекции
    bso - БСО
    bsoCorrection - БСО коррекции
    string
    short Флаг, считан документ полностью или из архива bool
    Номер реквизита ФН Значение реквизита ФН Тип зависит от номера реквизита ФН

    Запрос введенных в ККТ лицензий / кодов защиты

    Пример запроса введенных в ККТ лицензий / кодов защиты

    {
       "type": "getLicenses"
    }
    
    Описание задания
    Параметр Описание Тип Возможные значения Обязательность
    type Тип задания string getLicenses - запрос введенных в ККТ лицензий / кодов защиты +

    Пример ответа на запрос введенных в ККТ лицензий / кодов защиты

    {
       "licenses" : [
          {
             "id" : "1",
             "name" : "Фискальные функции"
          },
          {
             "id" : "2",
             "name" : "Запись ПО ККТ"
          },
          {
             "id" : "3",
             "name" : "Работа с НДС 20%"
          },
          {
             "id" : "4",
             "name" : "Работа с ФФД 1.1"
          },
          {
             "id" : "5",
             "name" : "Обработка маркировки"
          }
       ]
    }
    
    Результат задания
    Параметр Описание Тип
    Лицензии / коды защиты (licenses)
    Информация о лицензии / коде защиты
    id Номер лицензии / кода защиты string
    name Наименование лицензии / кода защиты string

    Приложение

    Список кодов ошибок

    000 - LIBFPTR_OK - Ошибок нет

    001 - LIBFPTR_ERROR_CONNECTION_DISABLED - Соединение не установлено

    002 - LIBFPTR_ERROR_NO_CONNECTION - Нет связи

    003 - LIBFPTR_ERROR_PORT_BUSY - Порт занят

    004 - LIBFPTR_ERROR_PORT_NOT_AVAILABLE - Порт недоступен

    005 - LIBFPTR_ERROR_INCORRECT_DATA - Некорректные данные от устройства

    006 - LIBFPTR_ERROR_INTERNAL - Внутренняя ошибка библиотеки

    007 - LIBFPTR_ERROR_UNSUPPORTED_CAST - Неподдерживаемое преобразование типа параметра

    008 - LIBFPTR_ERROR_NO_REQUIRED_PARAM - Не найден обязательный параметр

    009 - LIBFPTR_ERROR_INVALID_SETTINGS - Некорректные настройки

    010 - LIBFPTR_ERROR_NOT_CONFIGURED - Драйвер не настроен

    011 - LIBFPTR_ERROR_NOT_SUPPORTED - Не поддерживается в данной версии (драйвера или ККТ)

    012 - LIBFPTR_ERROR_INVALID_MODE - Не поддерживается в данном режиме

    013 - LIBFPTR_ERROR_INVALID_PARAM - Нeкорректное значение параметра

    014 - LIBFPTR_ERROR_NOT_LOADED - Не удалось загрузить библиотеку

    015 - LIBFPTR_ERROR_UNKNOWN - Неизвестная ошибка

    016 - LIBFPTR_ERROR_INVALID_SUM - Неверная цена (сумма)

    017 - LIBFPTR_ERROR_INVALID_QUANTITY - Неверное количество

    018 - LIBFPTR_ERROR_CASH_COUNTER_OVERFLOW - Переполнение счетчика наличности

    019 - LIBFPTR_ERROR_LAST_OPERATION_STORNO_DENIED - Невозможно сторно последней операции

    020 - LIBFPTR_ERROR_STORNO_BY_CODE_DENIED - Сторно по коду невозможно

    021 - LIBFPTR_ERROR_LAST_OPERATION_NOT_REPEATABLE - Невозможен повтор последней операции

    022 - LIBFPTR_ERROR_DISCOUNT_NOT_REPEATABLE - Повторная скидка на операцию невозможна

    023 - LIBFPTR_ERROR_DISCOUNT_DENIED - Невозможно начислить скидку/надбавку

    024 - LIBFPTR_ERROR_INVALID_COMMODITY_CODE - Неверный код товара

    025 - LIBFPTR_ERROR_INVALID_COMMODITY_BARCODE - Неверный штрихкод товара

    026 - LIBFPTR_ERROR_INVALID_COMMAND_FORMAT - Неверный формат команды

    027 - LIBFPTR_ERROR_INVALID_COMMAND_LENGTH - Неверная длина

    028 - LIBFPTR_ERROR_BLOCKED_IN_DATE_INPUT_MODE - ККТ заблокирована в режиме ввода даты

    029 - LIBFPTR_ERROR_NEED_DATE_ACCEPT - Требуется подтверждение ввода даты

    030 - LIBFPTR_ERROR_NO_MORE_DATA - Нет больше данных

    031 - LIBFPTR_ERROR_NO_ACCEPT_OR_CANCEL - Нет подтверждения или отмены продажи

    032 - LIBFPTR_ERROR_BLOCKED_BY_REPORT_INTERRUPTION - Отчет о закрытии смены прерван

    033 - LIBFPTR_ERROR_DISABLE_CASH_CONTROL_DENIED - Отключение контроля наличности невозможно (не настроены необходимые типы оплаты)

    034 - LIBFPTR_ERROR_MODE_BLOCKED - Вход в режим заблокирован

    035 - LIBFPTR_ERROR_CHECK_DATE_TIME - Проверьте дату и время

    036 - LIBFPTR_ERROR_DATE_TIME_LESS_THAN_FS - Переданные дата/время меньше даты/времени последнего фискального документа

    037 - LIBFPTR_ERROR_CLOSE_ARCHIVE_DENIED - Невозможно закрыть архив

    038 - LIBFPTR_ERROR_COMMODITY_NOT_FOUND - Товар не найден

    039 - LIBFPTR_ERROR_WEIGHT_BARCODE_WITH_INVALID_QUANTITY - Весовой штрихкод с количеством <> 1.000

    040 - LIBFPTR_ERROR_RECEIPT_BUFFER_OVERFLOW - Переполнение буфера чека

    041 - LIBFPTR_ERROR_QUANTITY_TOO_FEW - Недостаточное количество товара

    042 - LIBFPTR_ERROR_STORNO_TOO_MUCH - Сторнируемое количество больше проданного

    043 - LIBFPTR_ERROR_BLOCKED_COMMODITY_NOT_FOUND - Товар не найден

    044 - LIBFPTR_ERROR_NO_PAPER - Нет бумаги

    045 - LIBFPTR_ERROR_COVER_OPENED - Открыта крышка

    046 - LIBFPTR_ERROR_PRINTER_FAULT - Нет связи с принтером чеков

    047 - LIBFPTR_ERROR_MECHANICAL_FAULT - Механическая ошибка печатающего устройства

    048 - LIBFPTR_ERROR_INVALID_RECEIPT_TYPE - Неверный тип чека

    049 - LIBFPTR_ERROR_INVALID_UNIT_TYPE - Недопустимое целевое устройство

    050 - LIBFPTR_ERROR_NO_MEMORY - Нет места в массиве картинок/штрихкодов

    051 - LIBFPTR_ERROR_PICTURE_NOT_FOUND - Неверный номер картинки/штрихкода (картинка/штрихкод отсутствует)

    052 - LIBFPTR_ERROR_NONCACH_PAYMENTS_TOO_MUCH - Сумма не наличных платежей превышает сумму чека

    053 - LIBFPTR_ERROR_RETURN_DENIED - Накопление меньше суммы возврата или аннулирования

    054 - LIBFPTR_ERROR_PAYMENTS_OVERFLOW - Переполнение суммы платежей

    055 - LIBFPTR_ERROR_BUSY - Предыдущая операция незавершена

    056 - LIBFPTR_ERROR_GSM - Ошибка GSM- модуля

    057 - LIBFPTR_ERROR_INVALID_DISCOUNT - Неверная величина скидки / надбавки

    058 - LIBFPTR_ERROR_OPERATION_AFTER_DISCOUNT_DENIED - Операция после скидки / надбавки невозможна

    059 - LIBFPTR_ERROR_INVALID_DEPARTMENT - Неверная секция

    060 - LIBFPTR_ERROR_INVALID_PAYMENT_TYPE - Неверный вид оплаты

    061 - LIBFPTR_ERROR_MULTIPLICATION_OVERFLOW - Переполнение при умножении

    062 - LIBFPTR_ERROR_DENIED_BY_SETTINGS - Операция запрещена в таблице настроек

    063 - LIBFPTR_ERROR_TOTAL_OVERFLOW - Переполнение итога чека

    064 - LIBFPTR_ERROR_DENIED_IN_ANNULATION_RECEIPT - Открыт чек аннулирования – операция невозможна

    065 - LIBFPTR_ERROR_JOURNAL_OVERFLOW - Переполнение буфера контрольной ленты

    066 - LIBFPTR_ERROR_NOT_FULLY_PAID - Чек оплачен не полностью

    067 - LIBFPTR_ERROR_DENIED_IN_RETURN_RECEIPT - Открыт чек возврата – операция невозможна

    068 - LIBFPTR_ERROR_SHIFT_EXPIRED - Смена превысила 24 часа

    069 - LIBFPTR_ERROR_DENIED_IN_SELL_RECEIPT - Открыт чек продажи – операция невозможна

    070 - LIBFPTR_ERROR_FISCAL_MEMORY_OVERFLOW - Переполнение ФП

    071 - LIBFPTR_ERROR_INVALID_PASSWORD - Неверный пароль

    072 - LIBFPTR_ERROR_JOURNAL_BUSY - Идет обработка контрольной ленты

    073 - LIBFPTR_ERROR_DENIED_IN_CLOSED_SHIFT - Смена закрыта - операция невозможна

    074 - LIBFPTR_ERROR_INVALID_TABLE_NUMBER - Неверный номер таблицы

    075 - LIBFPTR_ERROR_INVALID_ROW_NUMBER - Неверный номер ряда

    076 - LIBFPTR_ERROR_INVALID_FIELD_NUMBER - Неверный номер поля

    077 - LIBFPTR_ERROR_INVALID_DATE_TIME - Неверная дата и/или время

    078 - LIBFPTR_ERROR_INVALID_STORNO_SUM - Неверная сумма сторно

    079 - LIBFPTR_ERROR_CHANGE_CALCULATION - Подсчет суммы сдачи невозможен

    080 - LIBFPTR_ERROR_NO_CASH - В ККТ нет денег для выплаты

    081 - LIBFPTR_ERROR_DENIED_IN_CLOSED_RECEIPT - Чек закрыт – операция невозможна

    082 - LIBFPTR_ERROR_DENIED_IN_OPENED_RECEIPT - Чек открыт – операция невозможна

    083 - LIBFPTR_ERROR_DENIED_IN_OPENED_SHIFT - Смена открыта, операция невозможна

    084 - LIBFPTR_ERROR_SERIAL_NUMBER_ALREADY_ENTERED - Серийный номер / MAC- адрес уже задан

    085 - LIBFPTR_ERROR_TOO_MUCH_REREGISTRATIONS - Исчерпан лимит перерегистраций

    086 - LIBFPTR_ERROR_INVALID_SHIFT_NUMBER - Неверный номер смены

    087 - LIBFPTR_ERROR_INVALID_SERIAL_NUMBER - Недопустимый серийный номер ККТ

    088 - LIBFPTR_ERROR_INVALID_RNM_VATIN - Недопустимый РНМ и/или ИНН

    089 - LIBFPTR_ERROR_FISCAL_PRINTER_NOT_ACTIVATED - ККТ не зарегистрирована

    090 - LIBFPTR_ERROR_SERIAL_NUMBER_NOT_ENTERED - Не задан серийный номер

    091 - LIBFPTR_ERROR_NO_MORE_REPORTS - Нет отчетов

    092 - LIBFPTR_ERROR_MODE_NOT_ACTIVATED - Режим не активизирован

    093 - LIBFPTR_ERROR_RECORD_NOT_FOUND_IN_JOURNAL - Данные документа отсутствуют

    094 - LIBFPTR_ERROR_INVALID_LICENSE - Некорректный код или номер кода защиты ККТ

    095 - LIBFPTR_ERROR_NEED_FULL_RESET - Требуется выполнение общего гашения

    096 - LIBFPTR_ERROR_DENIED_BY_LICENSE - Команда не разрешена введенными кодами защиты ККТ

    097 - LIBFPTR_ERROR_DISCOUNT_CANCELLATION_DENIED - Невозможна отмена скидки/надбавки

    098 - LIBFPTR_ERROR_CLOSE_RECEIPT_DENIED - Невозможно закрыть чек данным типом оплаты

    099 - LIBFPTR_ERROR_INVALID_ROUTE_NUMBER - Неверный номер маршрута

    100 - LIBFPTR_ERROR_INVALID_START_ZONE_NUMBER - Неверный номер начальной зоны

    101 - LIBFPTR_ERROR_INVALID_END_ZONE_NUMBER - Неверный номер конечной зоны

    102 - LIBFPTR_ERROR_INVALID_RATE_TYPE - Неверный тип тарифа

    103 - LIBFPTR_ERROR_INVALID_RATE - Неверный тариф

    104 - LIBFPTR_ERROR_FISCAL_MODULE_EXCHANGE - Ошибка обмена с фискальным модулем

    105 - LIBFPTR_ERROR_NEED_TECHNICAL_SUPPORT - Необходимо провести профилактические работы

    106 - LIBFPTR_ERROR_SHIFT_NUMBERS_DID_NOT_MATCH - Неверные номера смен в ККТ и ФН

    107 - LIBFPTR_ERROR_DEVICE_NOT_FOUND - Нет устройства, обрабатывающего данную команду

    108 - LIBFPTR_ERROR_EXTERNAL_DEVICE_CONNECTION - Нет связи с внешним устройством

    109 - LIBFPTR_ERROR_DISPENSER_INVALID_STATE - Ошибочное состояние ТРК

    110 - LIBFPTR_ERROR_INVALID_POSITIONS_COUNT - Недопустимое кол- во позиций в чеке

    111 - LIBFPTR_ERROR_DISPENSER_INVALID_NUMBER - Ошибочный номер ТРК

    112 - LIBFPTR_ERROR_INVALID_DIVIDER - Неверный делитель

    113 - LIBFPTR_ERROR_FN_ACTIVATION_DENIED - Активация данного ФН в составе данной ККТ невозможна

    114 - LIBFPTR_ERROR_PRINTER_OVERHEAT - Перегрев головки принтера

    115 - LIBFPTR_ERROR_FN_EXCHANGE - Ошибка обмена с ФН на уровне интерфейса I2C

    116 - LIBFPTR_ERROR_FN_INVALID_FORMAT - Ошибка формата передачи ФН

    117 - LIBFPTR_ERROR_FN_INVALID_STATE - Неверное состояние ФН

    118 - LIBFPTR_ERROR_FN_FAULT - Неисправимая ошибка ФН

    119 - LIBFPTR_ERROR_FN_CRYPTO_FAULT - Ошибка КС ФН

    120 - LIBFPTR_ERROR_FN_EXPIRED - Закончен срок эксплуатации ФН

    121 - LIBFPTR_ERROR_FN_OVERFLOW - Архив ФН переполнен

    122 - LIBFPTR_ERROR_FN_INVALID_DATE_TIME - В ФН переданы неверная дата или время

    123 - LIBFPTR_ERROR_FN_NO_MORE_DATA - В ФН нет запрошенных данных

    124 - LIBFPTR_ERROR_FN_TOTAL_OVERFLOW - Переполнение ФН (итог чека / смены)

    125 - LIBFPTR_ERROR_BUFFER_OVERFLOW - Буфер переполнен

    126 - LIBFPTR_ERROR_PRINT_SECOND_COPY_DENIED - Невозможно напечатать вторую фискальную копию

    127 - LIBFPTR_ERROR_NEED_RESET_JOURNAL - Требуется гашение ЭЖ

    128 - LIBFPTR_ERROR_TAX_SUM_TOO_MUCH - Некорректная сумма налога

    129 - LIBFPTR_ERROR_TAX_ON_LAST_OPERATION_DENIED - Начисление налога на последнюю операцию невозможно

    130 - LIBFPTR_ERROR_INVALID_FN_NUMBER - Неверный номер ФН

    131 - LIBFPTR_ERROR_TAX_CANCEL_DENIED - Сумма сторно налога больше суммы зарегистрированного налога данного типа

    132 - LIBFPTR_ERROR_LOW_BATTERY - Операция невозможна, недостаточно питания

    133 - LIBFPTR_ERROR_FN_INVALID_COMMAND - Некорректное значение параметров команды ФН

    134 - LIBFPTR_ERROR_FN_COMMAND_OVERFLOW - Превышение размеров TLV данных ФН

    135 - LIBFPTR_ERROR_FN_NO_TRANSPORT_CONNECTION - Нет транспортного соединения ФН

    136 - LIBFPTR_ERROR_FN_CRYPTO_HAS_EXPIRED - Исчерпан ресурс КС ФН

    137 - LIBFPTR_ERROR_FN_RESOURCE_HAS_EXPIRED - Ресурс хранения ФД исчерпан

    138 - LIBFPTR_ERROR_INVALID_MESSAGE_FROM_OFD - Сообщение от ОФД не может быть принято ФН

    139 - LIBFPTR_ERROR_FN_HAS_NOT_SEND_DOCUMENTS - В ФН есть неотправленные ФД

    140 - LIBFPTR_ERROR_FN_TIMEOUT - Исчерпан ресурс ожидания передачи сообщения в ФН

    141 - LIBFPTR_ERROR_FN_SHIFT_EXPIRED - Продолжительность смены ФН более 24 часов

    142 - LIBFPTR_ERROR_FN_INVALID_TIME_DIFFERENCE - Неверная разница во времени между двумя операциями ФН

    143 - LIBFPTR_ERROR_INVALID_TAXATION_TYPE - Некорректная СНО

    144 - LIBFPTR_ERROR_INVALID_TAX_TYPE - Недопустимый номер ставки налога

    145 - LIBFPTR_ERROR_INVALID_COMMODITY_PAYMENT_TYPE - Недопустимый тип оплаты товара

    146 - LIBFPTR_ERROR_INVALID_COMMODITY_CODE_TYPE - Недопустимый тип кода товара

    147 - LIBFPTR_ERROR_EXCISABLE_COMMODITY_DENIED - Недопустима регистрация подакцизного товара

    148 - LIBFPTR_ERROR_FISCAL_PROPERTY_WRITE - Ошибка программирования реквизита

    149 - LIBFPTR_ERROR_INVALID_COUNTER_TYPE - Неверный тип счетчика

    150 - LIBFPTR_ERROR_CUTTER_FAULT - Ошибка отрезчика

    151 - LIBFPTR_ERROR_REPORT_INTERRUPTED - Снятие отчета прервалось

    152 - LIBFPTR_ERROR_INVALID_LEFT_MARGIN - Недопустимое значение отступа слева

    153 - LIBFPTR_ERROR_INVALID_ALIGNMENT - Недопустимое значение выравнивания

    154 - LIBFPTR_ERROR_INVALID_TAX_MODE - Недопустимое значение режима работы с налогом

    155 - LIBFPTR_ERROR_FILE_NOT_FOUND - Файл не найден или неверный формат

    156 - LIBFPTR_ERROR_PICTURE_TOO_BIG - Размер картинки слишком большой

    157 - LIBFPTR_ERROR_INVALID_BARCODE_PARAMS - Не удалось сформировать штрихкод

    158 - LIBFPTR_ERROR_FISCAL_PROPERTY_DENIED - Неразрешенные реквизиты

    159 - LIBFPTR_ERROR_FN_INTERFACE - Ошибка интерфейса ФН

    160 - LIBFPTR_ERROR_DATA_DUPLICATE - Дублирование данных

    161 - LIBFPTR_ERROR_NO_REQUIRED_FISCAL_PROPERTY - Не указаны обязательные реквизиты

    162 - LIBFPTR_ERROR_FN_READ_DOCUMENT - Ошибка чтения документа из ФН

    163 - LIBFPTR_ERROR_FLOAT_OVERFLOW - Переполнение чисел с плавающей точкой

    164 - LIBFPTR_ERROR_INVALID_SETTING_VALUE - Неверное значение параметра ККТ

    165 - LIBFPTR_ERROR_HARD_FAULT - Внутренняя ошибка ККТ

    166 - LIBFPTR_ERROR_FN_NOT_FOUND - ФН не найден

    167 - LIBFPTR_ERROR_INVALID_AGENT_FISCAL_PROPERTY - Невозможно записать реквизит агента

    168 - LIBFPTR_ERROR_INVALID_FISCAL_PROPERTY_VALUE_1002_1056 - Недопустимое сочетания реквизитов 1002 и 1056

    169 - LIBFPTR_ERROR_INVALID_FISCAL_PROPERTY_VALUE_1002_1017 - Недопустимое сочетания реквизитов 1002 и 1017

    170 - LIBFPTR_ERROR_SCRIPT - Ошибка скриптового движка ККТ

    171 - LIBFPTR_ERROR_INVALID_USER_MEMORY_INDEX - Неверный номер пользовательской ячейки памяти

    172 - LIBFPTR_ERROR_NO_ACTIVE_OPERATOR - Кассир не зарегистрирован

    173 - LIBFPTR_ERROR_REGISTRATION_REPORT_INTERRUPTED - Отчет о регистрации ККТ прерван

    174 - LIBFPTR_ERROR_CLOSE_FN_REPORT_INTERRUPTED - Отчет о закрытии ФН прерван

    175 - LIBFPTR_ERROR_OPEN_SHIFT_REPORT_INTERRUPTED - Отчет об открытии смены прерван

    176 - LIBFPTR_ERROR_OFD_EXCHANGE_REPORT_INTERRUPTED - Отчет о состоянии расчетов прерван

    177 - LIBFPTR_ERROR_CLOSE_RECEIPT_INTERRUPTED - Закрытие чека прервано

    178 - LIBFPTR_ERROR_FN_QUERY_INTERRUPTED - Получение документа из ФН прервано

    179 - LIBFPTR_ERROR_RTC_FAULT - Сбой часов

    180 - LIBFPTR_ERROR_MEMORY_FAULT - Сбой памяти

    181 - LIBFPTR_ERROR_CHIP_FAULT - Сбой микросхемы

    182 - LIBFPTR_ERROR_TEMPLATES_CORRUPTED - Ошибка шаблонов документов

    183 - LIBFPTR_ERROR_INVALID_MAC_ADDRESS - Недопустимое значение MAC- адреса

    184 - LIBFPTR_ERROR_INVALID_SCRIPT_NUMBER - Неверный тип (номер) скрипта

    185 - LIBFPTR_ERROR_SCRIPTS_FAULT - Загруженные скрипты повреждены или отсутствуют

    186 - LIBFPTR_ERROR_INVALID_SCRIPTS_VERSION - Несовместимая версия загруженных скриптов

    187 - LIBFPTR_ERROR_INVALID_CLICHE_FORMAT - Ошибка в формате клише

    188 - LIBFPTR_ERROR_WAIT_FOR_REBOOT - Требуется перезагрузка ККТ

    189 - LIBFPTR_ERROR_NO_LICENSE - Подходящие лицензии не найдены

    190 - LIBFPTR_ERROR_INVALID_FFD_VERSION - Неверная версия ФФД

    191 - LIBFPTR_ERROR_CHANGE_SETTING_DENIED - Параметр доступен только для чтения

    192 - LIBFPTR_ERROR_INVALID_NOMENCLATURE_TYPE - Неверный тип кода товара

    193 - LIBFPTR_ERROR_INVALID_GTIN - Неверное значение GTIN

    194 - LIBFPTR_ERROR_NEGATIVE_MATH_RESULT - Отрицательный результат математической операции

    195 - LIBFPTR_ERROR_FISCAL_PROPERTIES_COMBINATION - Недопустимое сочетание реквизитов

    196 - LIBFPTR_ERROR_OPERATOR_LOGIN - Ошибка регистрации кассира

    197 - LIBFPTR_ERROR_INVALID_INTERNET_CHANNEL - Данный канал Интернет отсутствует в ККТ

    198 - LIBFPTR_ERROR_DATETIME_NOT_SYNCRONIZED - Дата и время не синхронизированы

    199 - LIBFPTR_ERROR_JOURNAL - Ошибка электронного журнала

    200 - LIBFPTR_ERROR_DENIED_IN_OPENED_DOC - Документ открыт - операция невозможна

    201 - LIBFPTR_ERROR_DENIED_IN_CLOSED_DOC - Документ закрыт - операция невозможна

    202 - LIBFPTR_ERROR_LICENSE_MEMORY_OVERFLOW - Нет места для сохранения лицензий

    203 - LIBFPTR_ERROR_NEED_CANCEL_DOCUMENT - Произошла критичная ошибка, документ необходимо отменить

    204 - LIBFPTR_ERROR_REGISTERS_NOT_INITIALIZED - Регистры ККТ еще не инициализированы

    205 - LIBFPTR_ERROR_TOTAL_REQUIRED - Требуется регистрация итога

    206 - LIBFPTR_ERROR_SETTINGS_FAULT - Сбой таблицы настроек

    207 - LIBFPTR_ERROR_COUNTERS_FAULT - Сбой счетчиков и регистров ККТ

    208 - LIBFPTR_ERROR_USER_MEMORY_FAULT - Сбой пользовательской памяти

    209 - LIBFPTR_ERROR_SERVICE_COUNTERS_FAULT - Сбой сервисных регистров

    210 - LIBFPTR_ERROR_ATTRIBUTES_FAULT - Сбой реквизитов ККТ

    211 - LIBFPTR_ERROR_ALREADY_IN_UPDATE_MODE - ККТ уже в режиме обновления конфигурации

    212 - LIBFPTR_ERROR_INVALID_FIRMWARE - Конфигурация не прошла проверку

    213 - LIBFPTR_ERROR_INVALID_CHANNEL - Аппаратный канал отсутствует, выключен или ещё не проинициализирован

    214 - LIBFPTR_ERROR_INTERFACE_DOWN - Сетевой интерфейс не подключен, или на нём не получен IP-адрес

    215 - LIBFPTR_ERROR_INVALID_FISCAL_PROPERTY_VALUE_1212_1030 - Недопустимое сочетание реквизитов 1212 и 1030

    216 - LIBFPTR_ERROR_INVALID_FISCAL_PROPERTY_VALUE_1214 - Некорректный признак способа расчета

    217 - LIBFPTR_ERROR_INVALID_FISCAL_PROPERTY_VALUE_1212 - Некорректный признак предмета расчета

    218 - LIBFPTR_ERROR_SYNC_TIME - Ошибка синхронизации времени

    219 - LIBFPTR_ERROR_VAT18_VAT20_IN_RECEIPT - В одном чеке одновременно не может быть позиций с НДС 18% (18/118) и НДС 20% (20/120)

    220 - LIBFPTR_ERROR_PICTURE_NOT_CLOSED - Картинка не закрыта

    221 - LIBFPTR_ERROR_INTERFACE_BUSY - Сетевой интерфейс занят

    222 - LIBFPTR_ERROR_INVALID_PICTURE_NUMBER - Неверный номер картинки

    223 - LIBFPTR_ERROR_INVALID_CONTAINER - Ошибка проверки контейнера

    224 - LIBFPTR_ERROR_ARCHIVE_CLOSED - Архив ФН закрыт

    225 - LIBFPTR_ERROR_NEED_REGISTRATION - Нужно выполнить регистрацию / перерегистрацию

    226 - LIBFPTR_ERROR_DENIED_DURING_UPDATE - Операция невозможна, идет обновление ПО ККТ

    227 - LIBFPTR_ERROR_INVALID_TOTAL - Неверный итог чека

    228 - LIBFPTR_ERROR_MARKING_CODE_CONFLICT - Запрещена одновременная передача КМ и реквизита 1162

    229 - LIBFPTR_ERROR_INVALID_RECORDS_ID - Набор записей по заданному идентификатору не найден

    230 - LIBFPTR_ERROR_INVALID_SIGNATURE - Ошибка цифровой подписи

    231 - LIBFPTR_ERROR_INVALID_EXCISE_SUM - Некорректная сумма акциза

    232 - LIBFPTR_ERROR_NO_DOCUMENTS_FOUND_IN_JOURNAL - Заданный диапазон документов не найден в БД документов

    233 - LIBFPTR_ERROR_INVALID_SCRIPT_TYPE - Неподдерживаемый тип скрипта

    234 - LIBFPTR_ERROR_INVALID_SCRIPT_NAME - Некорректный идентификатор скрипта

    235 - LIBFPTR_ERROR_INVALID_POSITIONS_COUNT_WITH_1162 - Кол-во позиций с реквизитом 1162 в автономном режиме превысило разрешенный лимит

    236 - LIBFPTR_ERROR_INVALID_UC_COUNTER - Универсальный счетчик с заданными параметрами недоступен

    237 - LIBFPTR_ERROR_INVALID_UC_TAG - Неподдерживаемый тег для универсальных счетчиков

    238 - LIBFPTR_ERROR_INVALID_UC_IDX - Некорректный индекс для универсальных счетчиков

    239 - LIBFPTR_ERROR_INVALID_UC_EMPTY_FILTER - Не задано ни одно значение тега для формирования счетчика

    240 - LIBFPTR_ERROR_INVALID_UC_CONFIG - Неверная конфигурация универсальных счетчиков

    241 - LIBFPTR_ERROR_CONNECTION_LOST - Соединение с ККТ потеряно

    501 - LIBFPTR_ERROR_RECEIPT_PARSE_ERROR - Ошибка парсинга чека / запроса

    502 - LIBFPTR_ERROR_INTERRUPTED_BY_PREVIOUS_ERRORS - Выполнение прервано из-за предыдущих ошибок

    503 - LIBFPTR_ERROR_DRIVER_SCRIPT_ERROR - Ошибка скрипта драйвера

    Используемые сторонние библиотеки

    Название Версия Лицензия
    Qt 4.8.7, 5.6.2 LGPL
    QtCSV 1.5 MIT
    QtWinMigrate 2.6.0 BSD
    CxImage 7.0.1 zlib/libpng
    zlib 1.2.11 zlib/libpng
    libpng 1.6.28 zlib/libpng
    zint 2.6.0 BSD
    libusb (Linux) 1.0.21 LGPLv2
    libusb (Android) @c9399e6 LGPLv2
    decNumber 3.68 ICU License - ICU 1.8.1 and later
    jsoncpp 1.7.7 MIT
    utf8cpp Boost Software License
    base64
    Duktape 2.3.0 Duktape MIT license
    Slate @7ecc79c Apache
    SQLite3 3.29.0 SQLite

    Пример использования

    #include "libfptr10.h"
    
    std::wstring getErrorDescription(libfptr_handle fptr)
    {
        std::vector<wchar_t> str(32);
        int size = libfptr_error_description(fptr, &str[0], str.size());
        if (size > str.size())
        {
            str.resize(size);
            libfptr_error_description(fptr, &str[0], str.size());
        }
        return std::wstring(&str[0]);
    }
    
    int main(int argc, char **argv)
    {
        // Создание и настройка компонента
        libfptr_handle fptr;
        libfptr_create(&fptr);
    
        libfptr_set_single_setting(fptr, LIBFPTR_SETTING_PORT, std::to_wstring(LIBFPTR_PORT_USB).c_str())
        libfptr_apply_single_settings(fptr)
    
        // Соединение с ККТ
        libfptr_open(fptr);
    
        // Регистрация кассира
        libfptr_set_param_str(fptr, 1021, L"Иванов И.И.");
        libfptr_set_param_str(fptr, 1203, L"500100732259");
        libfptr_operator_login(fptr);
    
        // Открытие чека (с передачей телефона получателя)
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECEIPT_TYPE, LIBFPTR_RT_SELL);
        libfptr_set_param_str(fptr, 1008, L"+79161234567");
        libfptr_open_receipt(fptr);
    
        // Регистрация позиции
        libfptr_set_param_str(fptr, LIBFPTR_PARAM_COMMODITY_NAME, L"Чипсы LAYS");
        libfptr_set_param_double(fptr, LIBFPTR_PARAM_PRICE, 73.99);
        libfptr_set_param_double(fptr, LIBFPTR_PARAM_QUANTITY, 5);
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_TAX_TYPE, LIBFPTR_TAX_VAT18);
        libfptr_set_param_int(fptr, 1212, 1);
        libfptr_set_param_int(fptr, 1214, 7);
        libfptr_registration(fptr);
    
        // Регистрация итога (отбрасываем копейки)
        libfptr_set_param_double(fptr, LIBFPTR_PARAM_SUM, 369.0);
        libfptr_receipt_total(fptr);
    
        // Оплата наличными
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_PAYMENT_TYPE, LIBFPTR_PT_CASH);
        libfptr_set_param_double(fptr, LIBFPTR_PARAM_PAYMENT_SUM, 1000);
        libfptr_payment(fptr);
    
        // Закрытие чека
        libfptr_close_receipt(fptr);
    
        while (libfptr_check_document_closed(fptr) < 0) {
          // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
          std::wcout << getErrorDescription(fptr) << std::endl;
          continue;
        }
    
        if (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_DOCUMENT_CLOSED) == 0) {
          // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
          libfptr_cancel_receipt(fptr);
          return;
        }
    
        if (libfptr_get_param_bool(fptr, LIBFPTR_PARAM_DOCUMENT_PRINTED) == 0) {
          // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
          while (libfptr_continue_print(fptr) < 0) {
            // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
            std::wcout << L"Не удалось напечатать документ (Ошибка \""<< getErrorDescription(fptr) << L"\"). Устраните неполадку и повторите.";
            continue;
          }
        }
    
        // Получение информации о чеке из ФН
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_LAST_DOCUMENT);
        libfptr_fn_query_data(fptr);
        wchar_t fiscalSign[50] = {0};
        libfptr_get_param_str(fptr, LIBFPTR_PARAM_FISCAL_SIGN, &fiscalSign[0], sizeof(fiscalSign) / sizeof(fiscalSign[0]));
        uint documentNumber = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER);
    
        // Формирование слипа ЕГАИС
        libfptr_begin_nonfiscal_document(fptr);
    
        libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"ИНН: 111111111111 КПП: 222222222");
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_CENTER);
        libfptr_print_text(fptr);
    
        libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"КАССА: 1               СМЕНА: 11");
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_CENTER);
        libfptr_print_text(fptr);
    
        libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"ЧЕК: 314  ДАТА: 20.11.2017 15:39");
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_CENTER);
        libfptr_print_text(fptr);
    
        libfptr_set_param_str(fptr, LIBFPTR_PARAM_BARCODE, L"https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_BARCODE_TYPE, LIBFPTR_BT_QR);
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_CENTER);
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_SCALE, 500);
        libfptr_print_barcode(fptr);
    
        libfptr_print_text(fptr);
    
        libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT, L"https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_CENTER);
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_TEXT_WRAP, LIBFPTR_TW_CHARS);
        libfptr_print_text(fptr);
    
        libfptr_print_text(fptr);
    
        libfptr_set_param_str(fptr, LIBFPTR_PARAM_TEXT,
                                  L"10 58 1c 85 bb 80 99 84 40 b1 4f 35 8a 35 3f 7c "
                                  L"78 b0 0a ff cd 37 c1 8e ca 04 1c 7e e7 5d b4 85 "
                                  L"ff d2 d6 b2 8d 7f df 48 d2 5d 81 10 de 6a 05 c9 "
                                  L"81 74");
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_CENTER);
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_TEXT_WRAP, LIBFPTR_TW_WORDS);
        libfptr_print_text(fptr);
    
        libfptr_end_nonfiscal_document(fptr);
    
        // Z-отчет
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_REPORT_TYPE, LIBFPTR_RT_CLOSE_SHIFT);
        libfptr_report(fptr);
    
        // Получение информации о неотправленных документах
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_OFD_EXCHANGE_STATUS);
        libfptr_fn_query_data(fptr);
        wchar_t unsentDateTime[50] = {0};
        uint unsentCount libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENTS_COUNT);
        uint unsentFirstNumber = libfptr_get_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER);
        libfptr_get_param_str(fptr, LIBFPTR_PARAM_DATE_TIME, &unsentDateTime[0], sizeof(unsentDateTime) / sizeof(unsentDateTime[0]));
    
        // Завершение работы
        libfptr_close(fptr);
        libfptr_destroy(&fptr);
    }
    
    import sys
    import os
    from libfptr10 import IFptr
    
    fptr = IFptr('')
    
    fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_PORT, str(IFptr.LIBFPTR_PORT_USB))
    fptr.applySingleSettings()
    
    fptr.open()
    
    # Регистрация кассира
    fptr.setParam(1021, "Иванов И.И.")
    fptr.setParam(1203, "500100732259")
    fptr.operatorLogin()
    
    # Открытие чека(с передачей телефона получателя)
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
    fptr.setParam(1008, "+79161234567")
    fptr.openReceipt()
    
    # Регистрация позиции
    fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Чипсы LAYS")
    fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 73.99)
    fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5)
    fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18)
    fptr.setParam(1212, 1)
    fptr.setParam(1214, 7)
    fptr.registration()
    
    # Регистрация итога (отбрасываем копейки)
    fptr.setParam(IFptr.LIBFPTR_PARAM_SUM, 369.0)
    fptr.receiptTotal()
    
    # Оплата наличными
    fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH)
    fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_SUM, 1000)
    fptr.payment()
    
    # Закрытие чека
    fptr.closeReceipt()
    
    while fptr.checkDocumentClosed() < 0:
      # Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
      print(fptr.errorDescription())
      continue
    
    if not fptr.getParamBool(IFptr.LIBFPTR_PARAM_DOCUMENT_CLOSED):
      # Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
      fptr.cancelReceipt()
      return
    
    if not fptr.getParamBool(IFptr.LIBFPTR_PARAM_DOCUMENT_PRINTED):
      # Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
      while fptr.continuePrint() < 0:
        # Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
        print('Не удалось напечатать документ (Ошибка "%s"). Устраните неполадку и повторите.', fptr.errorDescription())
        continue
    
    # Запрос информации о закрытом чеке
    fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_LAST_DOCUMENT)
    fptr.fnQueryData()
    print("Fiscal Sign = {}".format(fptr.getParamString(IFptr.LIBFPTR_PARAM_FISCAL_SIGN)))
    print("Fiscal Document Number = {}".format(fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)))
    
    # Формирование слипа ЕГАИС
    fptr.beginNonfiscalDocument()
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "ИНН: 111111111111 КПП: 222222222")
    fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
    fptr.printText()
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "КАССА: 1               СМЕНА: 11")
    fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
    fptr.printText()
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "ЧЕК: 314  ДАТА: 20.11.2017 15:39")
    fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
    fptr.printText()
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7")
    fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE_TYPE, IFptr.LIBFPTR_BT_QR)
    fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE, 5)
    fptr.printBarcode()
    
    fptr.printText()
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7")
    fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
    fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT_WRAP, IFptr.LIBFPTR_TW_CHARS)
    fptr.printText()
    
    fptr.printText()
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT,
                              "10 58 1c 85 bb 80 99 84 40 b1 4f 35 8a 35 3f 7c "
                              "78 b0 0a ff cd 37 c1 8e ca 04 1c 7e e7 5d b4 85 "
                              "ff d2 d6 b2 8d 7f df 48 d2 5d 81 10 de 6a 05 c9 "
                              "81 74")
    fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
    fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT_WRAP, IFptr.LIBFPTR_TW_WORDS)
    fptr.printText()
    
    fptr.endNonfiscalDocument()
    
    # Отчет о закрытии смены
    fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_CLOSE_SHIFT)
    fptr.report()
    
    # Получение информации о неотправленных документах
    fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS)
    fptr.fnQueryData()
    unsentCount = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT)
    unsentFirstNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)
    unsentDateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
    
    # Завершение работы
    fptr.close()
    
    package ru.atol.test;
    
    import ru.atol.drivers10.fptr.Fptr;
    import ru.atol.drivers10.fptr.IFptr;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    
    public class Main {
        public static void main(String[] args) {
            IFptr fptr = new Fptr();
    
            fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_PORT, String.valueOf(IFptr.LIBFPTR_PORT_USB));
            fptr.applySingleSettings();
    
            // Соединение с ККТ
            fptr.open();
    
            // Регистрация кассира
            fptr.setParam(1021, "Иванов И.И.");
            fptr.setParam(1203, "500100732259");
            fptr.operatorLogin();
    
            // Открытие чека (с передачей телефона получателя)
            fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
            fptr.setParam(1008, "+79161234567");
            fptr.openReceipt();
    
            // Регистрация позиции
            fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Чипсы LAYS");
            fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 73.99);
            fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5);
            fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
            fptr.setParam(1212, 1);
            fptr.setParam(1214, 7);
            fptr.registration();
    
            // Регистрация итога (отбрасываем копейки)
            fptr.setParam(IFptr.LIBFPTR_PARAM_SUM, 369.0);
            fptr.receiptTotal();
    
            // Оплата наличными
            fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH);
            fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_SUM, 1000);
            fptr.payment();
    
            // Закрытие чека
            fptr.closeReceipt();
    
            while (fptr.checkDocumentClosed() < 0) {
                // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
                System.out.println(fptr.errorDescription());
                continue;
            }
    
            if (!fptr.getParamBool(IFptr.LIBFPTR_PARAM_DOCUMENT_CLOSED)) {
                // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
                fptr.cancelReceipt();
                return;
            }
    
            if (!fptr.getParamBool(IFptr.LIBFPTR_PARAM_DOCUMENT_PRINTED)) {
                // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
                while (fptr.continuePrint() < 0) {
                    // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
                    System.out.println(String.format("Не удалось напечатать документ (Ошибка \"%s\"). Устраните неполадку и повторите.", fptr.errorDescription()));
                    continue;
                }
            }
    
            // Запрос информации о закрытом чеке
            fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_LAST_DOCUMENT);
            fptr.fnQueryData();
            System.out.println(String.format("Fiscal Sign = %s", fptr.getParamString(IFptr.LIBFPTR_PARAM_FISCAL_SIGN)));
            System.out.println(String.format("Fiscal Document Number = %d", fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)));
    
            // Формирование слипа ЕГАИС
            fptr.beginNonfiscalDocument();
    
            fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "ИНН: 111111111111 КПП: 222222222");
            fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
            fptr.printText();
    
            fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "КАССА: 1               СМЕНА: 11");
            fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
            fptr.printText();
    
            fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "ЧЕК: 314  ДАТА: 20.11.2017 15:39");
            fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
            fptr.printText();
    
            fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
            fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE_TYPE, IFptr.LIBFPTR_BT_QR);
            fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
            fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE, 5);
            fptr.printBarcode();
    
            fptr.printText();
    
            fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
            fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
            fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT_WRAP, IFptr.LIBFPTR_TW_CHARS);
            fptr.printText();
    
            fptr.printText();
    
            fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT,
                    "10 58 1c 85 bb 80 99 84 40 b1 4f 35 8a 35 3f 7c " +
                    "78 b0 0a ff cd 37 c1 8e ca 04 1c 7e e7 5d b4 85 " +
                    "ff d2 d6 b2 8d 7f df 48 d2 5d 81 10 de 6a 05 c9 " +
                    "81 74");
            fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
            fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT_WRAP, IFptr.LIBFPTR_TW_WORDS);
            fptr.printText();
    
            fptr.endNonfiscalDocument();
    
            // Отчет о закрытии смены
            fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_CLOSE_SHIFT);
            fptr.report();
    
            // Получение информации о неотправленных документах
            fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS);
            fptr.fnQueryData();
            System.out.println(String.format("Unsent documents count = %d", fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT)));
            System.out.println(String.format("First unsent document number = %d", fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)));
            DateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
            System.out.println(String.format("First unsent document date = %s", df.format(fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME))));
    
            // Завершение работы
            fptr.close();
        }
    }
    
    package ru.atol.test;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Toast;
    import ru.atol.drivers10.fptr.Fptr;
    import ru.atol.drivers10.fptr.IFptr;
    import ru.atol.drivers10.fptr.settings.SettingsActivity;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        private static final String TAG = "Test";
        private static final int REQUEST_SHOW_SETTINGS = 1;
        private IFptr fptr;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            findViewById(R.id.btnShowSettings).setOnClickListener(this);
            findViewById(R.id.btnPrintReceipt).setOnClickListener(this);
    
            // Создание объекта компонента
            fptr = new Fptr(getApplication());
    
            // Начальная инициализация настройками (тут они могут вычитываться, например, из хранилища приложения)
            fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_PORT, String.valueOf(IFptr.LIBFPTR_PORT_BLUETOOTH));
            fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_MACADDRESS, "00:11:22:33:44:55");
            fptr.applySingleSettings();
        }
    
        @Override
        public void onClick(View view) {
            if (view.getId() == R.id.btnShowSettings) {
                Intent intent = new Intent(getApplication(), SettingsActivity.class);
    
                // Передаем текущие настройки в SettingsActivity.
                // Если не передать - будет показана SettingsActivity с настройками по умолчанию
                intent.putExtra(SettingsActivity.DEVICE_SETTINGS, fptr.getSettings());
                startActivityForResult(intent, REQUEST_SHOW_SETTINGS);
            }
           else if (view.getId() == R.id.btnPrintReceipt) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        // Соединение с ККТ
                        fptr.open();
    
                        // Регистрация кассира
                        fptr.setParam(1021, "Иванов И.И.");
                        fptr.setParam(1203, "500100732259");
                        fptr.operatorLogin();
    
                        // Открытие чека (с передачей телефона получателя)
                        fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL);
                        fptr.setParam(1008, "+79161234567");
                        fptr.openReceipt();
    
                        // Регистрация позиции
                        fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, "Чипсы LAYS");
                        fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 73.99);
                        fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5);
                        fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18);
                        fptr.setParam(1212, 1);
                        fptr.setParam(1214, 7);
                        fptr.registration();
    
                        // Регистрация итога (отбрасываем копейки)
                        fptr.setParam(IFptr.LIBFPTR_PARAM_SUM, 369.0);
                        fptr.receiptTotal();
    
                        // Оплата наличными
                        fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH);
                        fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_SUM, 1000);
                        fptr.payment();
    
                        // Закрытие чека
                        fptr.closeReceipt();
    
                        while (fptr.checkDocumentClosed() < 0) {
                            // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
                            Log.d(TAG, fptr.errorDescription());
                            continue;
                        }
    
                        if (!fptr.getParamBool(IFptr.LIBFPTR_PARAM_DOCUMENT_CLOSED)) {
                            // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
                            fptr.cancelReceipt();
                            return;
                        }
    
                        if (!fptr.getParamBool(IFptr.LIBFPTR_PARAM_DOCUMENT_PRINTED)) {
                            // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
                            while (fptr.continuePrint() < 0) {
                                // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
                                Log.d(TAG, String.format("Не удалось напечатать документ (Ошибка \"%s\"). Устраните неполадку и повторите.", fptr.errorDescription()));
                                continue;
                            }
                        }
    
                        // Запрос информации о закрытом чеке
                        fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_LAST_DOCUMENT);
                        fptr.fnQueryData();
                        final String fiscalSign = fptr.getParamString(IFptr.LIBFPTR_PARAM_FISCAL_SIGN);
                        final long documentNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this,
                                        String.format("ФПД: %s\nФД: %d",
                                                fiscalSign,
                                                documentNumber),
                                        Toast.LENGTH_LONG).show();
                            }
                        });
    
                        // Формирование слипа ЕГАИС
                        fptr.beginNonfiscalDocument();
    
                        fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "ИНН: 111111111111 КПП: 222222222");
                        fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
                        fptr.printText();
    
                        fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "КАССА: 1               СМЕНА: 11");
                        fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
                        fptr.printText();
    
                        fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "ЧЕК: 314  ДАТА: 20.11.2017 15:39");
                        fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
                        fptr.printText();
    
                        fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
                        fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE_TYPE, IFptr.LIBFPTR_BT_QR);
                        fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
                        fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE, 5);
                        fptr.printBarcode();
    
                        fptr.printText();
    
                        fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
                        fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
                        fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT_WRAP, IFptr.LIBFPTR_TW_CHARS);
                        fptr.printText();
    
                        fptr.printText();
    
                        fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT,
                                "10 58 1c 85 bb 80 99 84 40 b1 4f 35 8a 35 3f 7c " +
                                "78 b0 0a ff cd 37 c1 8e ca 04 1c 7e e7 5d b4 85 " +
                                "ff d2 d6 b2 8d 7f df 48 d2 5d 81 10 de 6a 05 c9 " +
                                "81 74");
                        fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER);
                        fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT_WRAP, IFptr.LIBFPTR_TW_WORDS);
                        fptr.printText();
    
                        fptr.endNonfiscalDocument();
    
                        // Отчет о закрытии смены
                        fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_CLOSE_SHIFT);
                        fptr.report();
    
                        // Получение информации о неотправленных документах
                        fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS);
                        fptr.fnQueryData();
                        final long unsentCount = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT);
                        final long unsentFirstNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER);
                        DateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
                        final String unsentDateTime = df.format(fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME))
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this,
                                        String.format("Статус обмена с ОФД: %d неотправленно, первый: №%d (%s)",
                                                unsentCount,
                                                unsentFirstNumber,
                                                unsentDateTime),
                                        Toast.LENGTH_LONG).show();
                           }
                        });
                    }
                }).start();
            }
        }
    
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == REQUEST_SHOW_SETTINGS && resultCode == Activity.RESULT_OK) {
                // Записываем настройки в объект
                fptr.setSettings(data.getStringExtra(SettingsActivity.DEVICE_SETTINGS));
            }
        } 
    
        @Override
        public void onBackPressed() {
            // Гарантировано чистим объект.
            // Вызов этого метода так же разрывает соединение, если оно установлено.
            fptr.destroy();
            super.onBackPressed();
        }
    }
    
    #import <Foundation/Foundation.h>
    #import "libfptr10_objc.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            IFptr *fptr = [[IFptr alloc] init];
            NSLog(@"Version: %@", [fptr version]);
    
            [fptr setSingleSetting:LIBFPTR_SETTING_PORT value:[NSString stringWithFormat:@"%d", LIBFPTR_PORT_TCPIP]];
            [fptr setSingleSetting:LIBFPTR_SETTING_IPADDRESS value:@"192.168.2.30"];
            [fptr applySingleSettings];
    
            [fptr open];
    
            // Регистрация кассира
            [fptr setParam:1021 NSStringParam:@"Иванов И.И."];
            [fptr setParam:1203 NSStringParam:@"500100732259"];
            [fptr operatorLogin];
    
            // Открытие чека(с передачей телефона получателя)
            [fptr setParam:1008 NSStringParam:@"+79161234567"];
            [fptr setParam:LIBFPTR_PARAM_RECEIPT_TYPE intParam:LIBFPTR_RT_SELL];
            [fptr openReceipt];
    
            // Регистрация позиции
            [fptr setParam:LIBFPTR_PARAM_COMMODITY_NAME NSStringParam:@"Чипсы LAYS"];
            [fptr setParam:LIBFPTR_PARAM_PRICE doubleParam:73.99];
            [fptr setParam:LIBFPTR_PARAM_QUANTITY intParam:5];
            [fptr setParam:LIBFPTR_PARAM_TAX_TYPE intParam:LIBFPTR_TAX_VAT18];
            [fptr setParam:1212 intParam:1];
            [fptr setParam:1214 intParam:7];
            [fptr registration];
    
            // Регистрация итога (отбрасываем копейки)
            [fptr setParam:LIBFPTR_PARAM_SUM doubleParam:369.0];
            [fptr receiptTotal];
    
            // Оплата наличными
            [fptr setParam:LIBFPTR_PARAM_PAYMENT_TYPE intParam:LIBFPTR_PT_CASH];
            [fptr setParam:LIBFPTR_PARAM_PAYMENT_SUM doubleParam:1000];
            [fptr payment];
    
            // Закрытие чека
            [fptr closeReceipt];
    
            while ([fptr checkReceiptClosed] < 0) {
                // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
                NSLog([fptr errorDescription]);
                continue;
            }
    
            if (![fptr getParamBool:LIBFPTR_PARAM_DOCUMENT_CLOSED]) {
                // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
                [fptr cancelReceipt];
                return;
            }
    
            if (![fptr getParamBool:LIBFPTR_PARAM_DOCUMENT_PRINTED]) {
                // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
                while ([fptr continuePrint] < 0) {
                    // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
                    NSLog(@"Не удалось напечатать документ (Ошибка \"%@\"). Устраните неполадку и повторите.", [fptr errorDescription]);
                    continue;
                }
            }
    
            // Запрос информации о закрытом чеке
            [fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE intParam:LIBFPTR_FNDT_LAST_DOCUMENT];
            [fptr fnQueryData];
            NSLog(@"Fiscal Sign = %@", [fptr getParamString:LIBFPTR_PARAM_FISCAL_SIGN]);
            NSLog(@"Fiscal DocumentNumber = %d", [fptr getParamInt:LIBFPTR_PARAM_DOCUMENT_NUMBER]);
    
            // Формирование слипа ЕГАИС
            [fptr beginNonfiscalDocument];
    
            [fptr setParam:LIBFPTR_PARAM_TEXT NSStringParam:@"ИНН: 111111111111 КПП: 222222222"];
            [fptr setParam:LIBFPTR_PARAM_ALIGNMENT intParam:LIBFPTR_ALIGNMENT_CENTER];
            [fptr printText];
    
            [fptr setParam:LIBFPTR_PARAM_TEXT NSStringParam:@"КАССА: 1               СМЕНА: 11"];
            [fptr setParam:LIBFPTR_PARAM_ALIGNMENT intParam:LIBFPTR_ALIGNMENT_CENTER];
            [fptr printText];
    
            [fptr setParam:LIBFPTR_PARAM_TEXT NSStringParam:@"ЧЕК: 314  ДАТА: 20.11.2017 15:39"];
            [fptr setParam:LIBFPTR_PARAM_ALIGNMENT intParam:LIBFPTR_ALIGNMENT_CENTER];
            [fptr printText];
    
            [fptr setParam:LIBFPTR_PARAM_BARCODE NSStringParam:@"https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7"];
            [fptr setParam:LIBFPTR_PARAM_BARCODE_TYPE intParam:LIBFPTR_BT_QR];
            [fptr setParam:LIBFPTR_PARAM_ALIGNMENT intParam:LIBFPTR_ALIGNMENT_CENTER];
            [fptr setParam:LIBFPTR_PARAM_SCALE intParam:5];
            [fptr printBarcode];
    
            [fptr printText];
    
            [fptr setParam:LIBFPTR_PARAM_TEXT NSStringParam:@"https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7"];
            [fptr setParam:LIBFPTR_PARAM_ALIGNMENT intParam:LIBFPTR_ALIGNMENT_CENTER];
            [fptr setParam:LIBFPTR_PARAM_TEXT_WRAP intParam:LIBFPTR_TW_CHARS];
            [fptr printText];
    
            [fptr printText];
    
            [fptr setParam:LIBFPTR_PARAM_TEXT
                              NSStringParam:@"10 58 1c 85 bb 80 99 84 40 b1 4f 35 8a 35 3f 7c "
                              @"78 b0 0a ff cd 37 c1 8e ca 04 1c 7e e7 5d b4 85 "
                              @"ff d2 d6 b2 8d 7f df 48 d2 5d 81 10 de 6a 05 c9 "
                              @"81 74"];
            [fptr setParam:LIBFPTR_PARAM_ALIGNMENT intParam:LIBFPTR_ALIGNMENT_CENTER];
            [fptr setParam:LIBFPTR_PARAM_TEXT_WRAP intParam:LIBFPTR_TW_WORDS];
            [fptr printText];
    
            [fptr endNonfiscalDocument];
    
            // Отчет о закрытии смены
            [fptr setParam:LIBFPTR_PARAM_REPORT_TYPE intParam:LIBFPTR_RT_CLOSE_SHIFT];
            [fptr report];
    
            // Получение информации о неотправленных документах
            [fptr setParam:LIBFPTR_PARAM_FN_DATA_TYPE intParam:LIBFPTR_FNDT_OFD_EXCHANGE_STATUS];
            [fptr fnQueryData];
            int unsentCount = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENTS_COUNT];
            int unsentFirstNumber = [fptr getParamInt:LIBFPTR_PARAM_DOCUMENT_NUMBER];
            NSDate* unsentDateTime = [fptr getParamDateTime:LIBFPTR_PARAM_DATE_TIME];
            NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
            formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
            NSLog(@"First unsent document = %d (%@)", unsentFirstNumber, [formatter stringFromDate:unsentDateTime]);
            NSLog(@"Unsent count = %d", unsentCount);
    
            [fptr close];
            [fptr release];
        }
        return 0;
    }
    
    using System;
    using Atol.Drivers10.Fptr;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                IFptr fptr = new Fptr();
                fptr.setSingleSetting(Constants.LIBFPTR_SETTING_PORT, (Constants.LIBFPTR_PORT_USB).ToString());
                fptr.applySingleSettings();
    
                // Соединение с ККТ
                fptr.open();
    
                // Регистрация кассира
                fptr.setParam(1021, "Иванов И.И.");
                fptr.setParam(1203, "500100732259");
                fptr.operatorLogin();
    
                // Открытие чека (с передачей телефона получателя)
                fptr.setParam(Constants.LIBFPTR_PARAM_RECEIPT_TYPE, Constants.LIBFPTR_RT_SELL);
                fptr.setParam(1008, "+79161234567");
                fptr.openReceipt();
    
                // Регистрация позиции
                fptr.setParam(Constants.LIBFPTR_PARAM_COMMODITY_NAME, "Чипсы LAYS");
                fptr.setParam(Constants.LIBFPTR_PARAM_PRICE, 73.99);
                fptr.setParam(Constants.LIBFPTR_PARAM_QUANTITY, 5);
                fptr.setParam(Constants.LIBFPTR_PARAM_TAX_TYPE, Constants.LIBFPTR_TAX_VAT18);
                fptr.setParam(1212, 1);
                fptr.setParam(1214, 7);
                fptr.registration();
    
                // Регистрация итога (отбрасываем копейки)
                fptr.setParam(Constants.LIBFPTR_PARAM_SUM, 369.0);
                fptr.receiptTotal();
    
                // Оплата наличными
                fptr.setParam(Constants.LIBFPTR_PARAM_PAYMENT_TYPE, Constants.LIBFPTR_PT_CASH);
                fptr.setParam(Constants.LIBFPTR_PARAM_PAYMENT_SUM, 1000);
                fptr.payment();
    
                // Закрытие чека
                fptr.closeReceipt();
    
                while (fptr.checkDocumentClosed() < 0)
                {
                    // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
                    Console.WriteLine(fptr.errorDescription());
                    continue;
                }
    
                if (!fptr.getParamBool(Constants.LIBFPTR_PARAM_DOCUMENT_CLOSED))
                {
                    // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
                    fptr.cancelReceipt();
                    return;
                }
    
                if (!fptr.getParamBool(Constants.LIBFPTR_PARAM_DOCUMENT_PRINTED))
                {
                    // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
                    while (fptr.continuePrint() < 0)
                    {
                        // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
                        Console.WriteLine(String.Format("Не удалось напечатать документ (Ошибка \"{0}\"). Устраните неполадку и повторите.", fptr.errorDescription()));
                        continue;
                    }
                }
    
                // Запрос информации о закрытом чеке
                fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_LAST_DOCUMENT);
                fptr.fnQueryData();
                Console.WriteLine(String.Format("Fiscal Sign = {0}", fptr.getParamString(Constants.LIBFPTR_PARAM_FISCAL_SIGN)));
                Console.WriteLine(String.Format("Fiscal Document Number = {0}", fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER)));
    
                // Формирование слипа ЕГАИС
                fptr.beginNonfiscalDocument();
    
                fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "ИНН: 111111111111 КПП: 222222222");
                fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_CENTER);
                fptr.printText();
    
                fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "КАССА: 1               СМЕНА: 11");
                fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_CENTER);
                fptr.printText();
    
                fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "ЧЕК: 314  ДАТА: 20.11.2017 15:39");
                fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_CENTER);
                fptr.printText();
    
                fptr.setParam(Constants.LIBFPTR_PARAM_BARCODE, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
                fptr.setParam(Constants.LIBFPTR_PARAM_BARCODE_TYPE, Constants.LIBFPTR_BT_QR);
                fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_CENTER);
                fptr.setParam(Constants.LIBFPTR_PARAM_SCALE, 5);
                fptr.printBarcode();
    
                fptr.printText();
    
                fptr.setParam(Constants.LIBFPTR_PARAM_TEXT, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
                fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_CENTER);
                fptr.setParam(Constants.LIBFPTR_PARAM_TEXT_WRAP, Constants.LIBFPTR_TW_CHARS);
                fptr.printText();
    
                fptr.printText();
    
                fptr.setParam(Constants.LIBFPTR_PARAM_TEXT,
                        "10 58 1c 85 bb 80 99 84 40 b1 4f 35 8a 35 3f 7c " +
                        "78 b0 0a ff cd 37 c1 8e ca 04 1c 7e e7 5d b4 85 " +
                        "ff d2 d6 b2 8d 7f df 48 d2 5d 81 10 de 6a 05 c9 " +
                        "81 74");
                fptr.setParam(Constants.LIBFPTR_PARAM_ALIGNMENT, Constants.LIBFPTR_ALIGNMENT_CENTER);
                fptr.setParam(Constants.LIBFPTR_PARAM_TEXT_WRAP, Constants.LIBFPTR_TW_WORDS);
                fptr.printText();
    
                fptr.endNonfiscalDocument();
    
                // Отчет о закрытии смены
                fptr.setParam(Constants.LIBFPTR_PARAM_REPORT_TYPE, Constants.LIBFPTR_RT_CLOSE_SHIFT);
                fptr.report();
    
                // Получение информации о неотправленных документах
                fptr.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS);
                fptr.fnQueryData();
                Console.WriteLine(String.Format("Unsent documents count = {0}", fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENTS_COUNT)));
                Console.WriteLine(String.Format("First unsent document number = {0}", fptr.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER)));
                Console.WriteLine(String.Format("First unsent document date = {0}", (fptr.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME)).ToString("yyyy.MM.dd HH:mm:ss")));
    
                // Завершение работы
                fptr.close();
                Console.ReadKey();
            }
        }
    }
    
    uses
        ActiveX, Dialogs, SysUtils, ComObj;
    
    var
        fptr: OleVariant;
    
    begin
        CoInitialize(nil);
        fptr := CreateOleObject('AddIn.Fptr10');
        fptr.setSingleSetting(fptr.LIBFPTR_SETTING_PORT, IntToStr(fptr.LIBFPTR_PORT_USB));
        fptr.applySingleSettings;
    
        // Соединение с ККТ
        fptr.open;
    
        // Регистрация кассира
        fptr.setParam(1021, 'Иванов И.И.');
        fptr.setParam(1203, '500100732259');
        fptr.operatorLogin;
    
        // Открытие чека (с передачей телефона получателя)
        fptr.setParam(fptr.LIBFPTR_PARAM_RECEIPT_TYPE, fptr.LIBFPTR_RT_SELL);
        fptr.setParam(1008, '+79161234567');
        fptr.openReceipt;
    
        // Регистрация позиции
        fptr.setParam(fptr.LIBFPTR_PARAM_COMMODITY_NAME, 'Чипсы LAYS');
        fptr.setParam(fptr.LIBFPTR_PARAM_PRICE, 73.99);
        fptr.setParam(fptr.LIBFPTR_PARAM_QUANTITY, 5);
        fptr.setParam(fptr.LIBFPTR_PARAM_TAX_TYPE, fptr.LIBFPTR_TAX_VAT18);
        fptr.setParam(1212, 1);
        fptr.setParam(1214, 7);
        fptr.registration;
    
        // Регистрация итога (отбрасываем копейки)
        fptr.setParam(fptr.LIBFPTR_PARAM_SUM, 369.0);
        fptr.receiptTotal;
    
        // Оплата наличными
        fptr.setParam(fptr.LIBFPTR_PARAM_PAYMENT_TYPE, fptr.LIBFPTR_PT_CASH);
        fptr.setParam(fptr.LIBFPTR_PARAM_PAYMENT_SUM, 1000);
        fptr.payment;
    
        // Закрытие чека
        fptr.closeReceipt;
        showmessage(fptr.errorDescription);
        While fptr.checkDocumentClosed < 0 do
        begin
            // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
            showmessage(fptr.errorDescription);
            Continue;
        end;
    
        if not fptr.getParamBool(fptr.LIBFPTR_PARAM_DOCUMENT_CLOSED) then
        begin
            // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
            fptr.cancelReceipt;
            Exit;
        end;
    
        if not fptr.getParamBool(fptr.LIBFPTR_PARAM_DOCUMENT_PRINTED) then
        begin
            // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
            While fptr.continuePrint < 0 do
            begin
                // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
                showmessage('Не удалось напечатать документ (Ошибка "' + fptr.errorDescription + '"). Устраните неполадку и повторите.');
                Continue;
            end;
        end;
    
        // Запрос информации о закрытом чеке
        fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_LAST_DOCUMENT);
        fptr.fnQueryData;
        showmessage('Fiscal Sign = ' + fptr.getParamString(fptr.LIBFPTR_PARAM_FISCAL_SIGN));
        showmessage('Fiscal Document Number = ' + IntToStr(fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)));
    
        // Формирование слипа ЕГАИС
        fptr.beginNonfiscalDocument;
    
        fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'ИНН: 111111111111 КПП: 222222222');
        fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_CENTER);
        fptr.printText;
    
        fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'КАССА: 1               СМЕНА: 11');
        fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_CENTER);
        fptr.printText;
    
        fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'ЧЕК: 314  ДАТА: 20.11.2017 15:39');
        fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_CENTER);
        fptr.printText;
    
        fptr.setParam(fptr.LIBFPTR_PARAM_BARCODE, 'https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7');
        fptr.setParam(fptr.LIBFPTR_PARAM_BARCODE_TYPE, fptr.LIBFPTR_BT_QR);
        fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_CENTER);
        fptr.setParam(fptr.LIBFPTR_PARAM_SCALE, 5);
        fptr.printBarcode;
    
        fptr.printText;
    
        fptr.setParam(fptr.LIBFPTR_PARAM_TEXT, 'https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7');
        fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_CENTER);
        fptr.setParam(fptr.LIBFPTR_PARAM_TEXT_WRAP, fptr.LIBFPTR_TW_CHARS);
        fptr.printText;
    
        fptr.printText;
    
        fptr.setParam(fptr.LIBFPTR_PARAM_TEXT,
                '10 58 1c 85 bb 80 99 84 40 b1 4f 35 8a 35 3f 7c ' +
                '78 b0 0a ff cd 37 c1 8e ca 04 1c 7e e7 5d b4 85 ' +
                'ff d2 d6 b2 8d 7f df 48 d2 5d 81 10 de 6a 05 c9 ' +
                '81 74');
        fptr.setParam(fptr.LIBFPTR_PARAM_ALIGNMENT, fptr.LIBFPTR_ALIGNMENT_CENTER);
        fptr.setParam(fptr.LIBFPTR_PARAM_TEXT_WRAP, fptr.LIBFPTR_TW_WORDS);
        fptr.printText;
    
        fptr.endNonfiscalDocument;
    
        // Отчет о закрытии смены
        fptr.setParam(fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_CLOSE_SHIFT);
        fptr.report;
    
        // Получение информации о неотправленных документах
        fptr.setParam(fptr.LIBFPTR_PARAM_FN_DATA_TYPE, fptr.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS);
        fptr.fnQueryData;
        showmessage('Unsent documents count = ' + IntToStr(fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT)));
        showmessage('First unsent document number = ' + IntToStr(fptr.getParamInt(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)));
        showmessage('First unsent document date = ' + DateTimeToStr(fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME)));
    
        // Завершение работы
        fptr.close;
    end.
    
    import (
        "log"
        "strconv"
    
        "atol.ru/drivers10/fptr"
    )
    
    func main() {
        fptr := fptr10.New()
        defer fptr.Destroy()
    
        fptr.SetSingleSetting(fptr10.LIBFPTR_SETTING_PORT, strconv.Itoa(fptr10.LIBFPTR_PORT_USB))
        if err := fptr.ApplySingleSettings(); err != nil {
            log.Println(err)
            return
        }
    
        // Соединение с ККТ
        if err := fptr.Open(); err != nil {
            log.Println(err)
            return
        }
    
        // Регистрация кассира
        fptr.SetParam(1021, "Иванов И.И.")
        fptr.SetParam(1203, "500100732259")
        if err := fptr.OperatorLogin(); err != nil {
            log.Println(err)
            return
        }
    
        // Открытие чека (с передачей телефона получателя)
        fptr.SetParam(fptr10.LIBFPTR_PARAM_RECEIPT_TYPE, fptr10.LIBFPTR_RT_SELL)
        fptr.SetParam(1008, "+79161234567")
        if err := fptr.OpenReceipt(); err != nil {
            log.Println(err)
            return
        }
    
        // Регистрация позиции
        fptr.SetParam(fptr10.LIBFPTR_PARAM_COMMODITY_NAME, "Чипсы LAYS")
        fptr.SetParam(fptr10.LIBFPTR_PARAM_PRICE, 73.99)
        fptr.SetParam(fptr10.LIBFPTR_PARAM_QUANTITY, 5)
        fptr.SetParam(fptr10.LIBFPTR_PARAM_TAX_TYPE, fptr10.LIBFPTR_TAX_VAT18)
        fptr.SetParam(1212, 1)
        fptr.SetParam(1214, 7)
        if err := fptr.Registration(); err != nil {
            log.Println(err)
            return
        }
    
        // Регистрация итога (отбрасываем копейки)
        fptr.SetParam(fptr10.LIBFPTR_PARAM_SUM, 369.0)
        if err := fptr.ReceiptTotal(); err != nil {
            log.Println(err)
            return
        }
    
        // Оплата наличными
        fptr.SetParam(fptr10.LIBFPTR_PARAM_PAYMENT_TYPE, fptr10.LIBFPTR_PT_CASH)
        fptr.SetParam(fptr10.LIBFPTR_PARAM_PAYMENT_SUM, 1000)
        if err := fptr.Payment(); err != nil {
            log.Println(err)
            return
        }
    
        // Закрытие чека
        _ = fptr.CloseReceipt()
        for {
            err := fptr.CheckDocumentClosed()
            if err != nil {
                // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
                log.Println(fptr.ErrorDescription())
                continue
            } else {
                break
            }
        }
    
        if !fptr.GetParamBool(fptr10.LIBFPTR_PARAM_DOCUMENT_CLOSED) {
            // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
            _ = fptr.CancelReceipt()
            return
        }
    
        if !fptr.GetParamBool(fptr10.LIBFPTR_PARAM_DOCUMENT_PRINTED) {
            // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
            for {
                if err := fptr.ContinuePrint(); err != nil {
                    // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
                    log.Printf("Не удалось напечатать документ (Ошибка \"%v\"). Устраните неполадку и повторите.", fptr.ErrorDescription())
                    continue
                }
            }
        }
    
        // Запрос информации о закрытом чеке
        fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_LAST_DOCUMENT)
        if err := fptr.FnQueryData(); err != nil {
            log.Println(err)
            return
        }
        log.Printf("Fiscal Sign = %v", fptr.GetParamString(fptr10.LIBFPTR_PARAM_FISCAL_SIGN))
        log.Printf("Fiscal Document Number = %v", fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER))
    
        // Формирование слипа ЕГАИС
        if err := fptr.BeginNonfiscalDocument(); err != nil {
            log.Println(err)
            return
        }
    
        fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "ИНН: 111111111111 КПП: 222222222")
        fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_CENTER)
        if err := fptr.PrintText(); err != nil {
            log.Println(err)
            return
        }
    
        fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "КАССА: 1               СМЕНА: 11")
        fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_CENTER)
        if err := fptr.PrintText(); err != nil {
            log.Println(err)
            return
        }
    
        fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "ЧЕК: 314  ДАТА: 20.11.2017 15:39")
        fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_CENTER)
        if err := fptr.PrintText(); err != nil {
            log.Println(err)
            return
        }
    
        fptr.SetParam(fptr10.LIBFPTR_PARAM_BARCODE, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7")
        fptr.SetParam(fptr10.LIBFPTR_PARAM_BARCODE_TYPE, fptr10.LIBFPTR_BT_QR)
        fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_CENTER)
        fptr.SetParam(fptr10.LIBFPTR_PARAM_SCALE, 5)
        if err := fptr.PrintBarcode(); err != nil {
            log.Println(err)
            return
        }
    
        if err := fptr.PrintText(); err != nil {
            log.Println(err)
            return
        }
    
        fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7")
        fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_CENTER)
        fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT_WRAP, fptr10.LIBFPTR_TW_CHARS)
        if err := fptr.PrintText(); err != nil {
            log.Println(err)
            return
        }
    
        if err := fptr.PrintText(); err != nil {
            log.Println(err)
            return
        }
    
        fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT,
            "10 58 1c 85 bb 80 99 84 40 b1 4f 35 8a 35 3f 7c "+
                "78 b0 0a ff cd 37 c1 8e ca 04 1c 7e e7 5d b4 85 "+
                "ff d2 d6 b2 8d 7f df 48 d2 5d 81 10 de 6a 05 c9 "+
                "81 74")
        fptr.SetParam(fptr10.LIBFPTR_PARAM_ALIGNMENT, fptr10.LIBFPTR_ALIGNMENT_CENTER)
        fptr.SetParam(fptr10.LIBFPTR_PARAM_TEXT_WRAP, fptr10.LIBFPTR_TW_WORDS)
        if err := fptr.PrintText(); err != nil {
            log.Println(err)
            return
        }
    
        if err := fptr.EndNonfiscalDocument(); err != nil {
            log.Println(err)
            return
        }
    
        // Отчет о закрытии смены
        fptr.SetParam(fptr10.LIBFPTR_PARAM_REPORT_TYPE, fptr10.LIBFPTR_RT_CLOSE_SHIFT)
        if err := fptr.Report(); err != nil {
            log.Println(err)
            return
        }
    
        // Получение информации о неотправленных документах
        fptr.SetParam(fptr10.LIBFPTR_PARAM_FN_DATA_TYPE, fptr10.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS)
        if err := fptr.FnQueryData(); err != nil {
            log.Println(err)
            return
        }
        log.Printf("Unsent documents count = %v", fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENTS_COUNT))
        log.Printf("First unsent document number = %v", fptr.GetParamInt(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER))
        log.Printf("First unsent document date = %v", fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_DATE_TIME))
    
        // Завершение работы
        if err := fptr.Close(); err != nil {
            log.Println(err)
            return
        }
    }
    
    // Регистрация кассира
    Fptr.setParam(1021, "Иванов И.И.");
    Fptr.setParam(1203, "500100732259");
    Fptr.operatorLogin();
    
    // Открытие чека (с передачей телефона получателя)
    Fptr.setParam(Fptr.LIBFPTR_PARAM_RECEIPT_TYPE, Fptr.LIBFPTR_RT_SELL);
    Fptr.setParam(1008, "+79161234567");
    Fptr.openReceipt();
    
    // Регистрация позиции
    Fptr.setParam(Fptr.LIBFPTR_PARAM_COMMODITY_NAME, "Чипсы LAYS");
    Fptr.setParam(Fptr.LIBFPTR_PARAM_PRICE, 73.99);
    Fptr.setParam(Fptr.LIBFPTR_PARAM_QUANTITY, 5);
    Fptr.setParam(Fptr.LIBFPTR_PARAM_TAX_TYPE, Fptr.LIBFPTR_TAX_VAT18);
    Fptr.setParam(1212, 1);
    Fptr.setParam(1214, 7);
    Fptr.registration();
    
    // Регистрация итога (отбрасываем копейки)
    Fptr.setParam(Fptr.LIBFPTR_PARAM_SUM, 369.0);
    Fptr.receiptTotal();
    
    // Оплата наличными
    Fptr.setParam(Fptr.LIBFPTR_PARAM_PAYMENT_TYPE, Fptr.LIBFPTR_PT_CASH);
    Fptr.setParam(Fptr.LIBFPTR_PARAM_PAYMENT_SUM, 1000);
    Fptr.payment();
    
    // Закрытие чека
    Fptr.closeReceipt();
    
    while (Fptr.checkDocumentClosed() < 0) {
        // Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос
        Console.WriteLine(Fptr.errorDescription());
        continue;
    }
    
    if (!Fptr.getParamBool(Fptr.LIBFPTR_PARAM_DOCUMENT_CLOSED)) {
        // Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново
        Fptr.cancelReceipt();
        return;
    }
    
    if (!Fptr.getParamBool(Fptr.LIBFPTR_PARAM_DOCUMENT_PRINTED)) {
        // Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно
        while (Fptr.continuePrint() < 0) {
            // Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз.
            Fptr.logWrite('FiscalPrinter', Fptr.LIBFPTR_LOG_ERROR, "Не удалось напечатать документ (Ошибка \"" + fptr.errorDescription() + "\"). Устраните неполадку и повторите.");
            continue;
        }
    }
    
    // Запрос информации о закрытом чеке
    Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_LAST_DOCUMENT);
    Fptr.fnQueryData();
    Fptr.logWrite("FiscalPrinter", Fptr.LIBFPTR_LOG_INFO, "Fiscal Sign = " + Fptr.getParamString(Fptr.LIBFPTR_PARAM_FISCAL_SIGN));
    Fptr.logWrite("FiscalPrinter", Fptr.LIBFPTR_LOG_INFO, "Fiscal Document Number = " + Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER));
    
    // Формирование слипа ЕГАИС
    Fptr.beginNonfiscalDocument();
    
    Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "ИНН: 111111111111 КПП: 222222222");
    Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Fptr.LIBFPTR_ALIGNMENT_CENTER);
    Fptr.printText();
    
    Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "КАССА: 1               СМЕНА: 11");
    Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Fptr.LIBFPTR_ALIGNMENT_CENTER);
    Fptr.printText();
    
    Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "ЧЕК: 314  ДАТА: 20.11.2017 15:39");
    Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Fptr.LIBFPTR_ALIGNMENT_CENTER);
    Fptr.printText();
    
    Fptr.setParam(Fptr.LIBFPTR_PARAM_BARCODE, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
    Fptr.setParam(Fptr.LIBFPTR_PARAM_BARCODE_TYPE, Fptr.LIBFPTR_BT_QR);
    Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Fptr.LIBFPTR_ALIGNMENT_CENTER);
    Fptr.setParam(Fptr.LIBFPTR_PARAM_SCALE, 5);
    Fptr.printBarcode();
    
    Fptr.printText();
    
    Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
    Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Fptr.LIBFPTR_ALIGNMENT_CENTER);
    Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT_WRAP, Fptr.LIBFPTR_TW_CHARS);
    Fptr.printText();
    
    Fptr.printText();
    
    Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT,
        "10 58 1c 85 bb 80 99 84 40 b1 4f 35 8a 35 3f 7c " +
        "78 b0 0a ff cd 37 c1 8e ca 04 1c 7e e7 5d b4 85 " +
        "ff d2 d6 b2 8d 7f df 48 d2 5d 81 10 de 6a 05 c9 " +
        "81 74");
    Fptr.setParam(Fptr.LIBFPTR_PARAM_ALIGNMENT, Fptr.LIBFPTR_ALIGNMENT_CENTER);
    Fptr.setParam(Fptr.LIBFPTR_PARAM_TEXT_WRAP, Fptr.LIBFPTR_TW_WORDS);
    Fptr.printText();
    
    Fptr.endNonfiscalDocument();
    
    // Отчет о закрытии смены
    Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_CLOSE_SHIFT);
    Fptr.report();
    
    // Получение информации о неотправленных документах
    Fptr.setParam(Fptr.LIBFPTR_PARAM_FN_DATA_TYPE, Fptr.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS);
    Fptr.fnQueryData();
    Fptr.logWrite("FiscalPrinter", Fptr.LIBFPTR_LOG_INFO, "Unsent documents count = " + Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENTS_COUNT));
    Fptr.logWrite("FiscalPrinter", Fptr.LIBFPTR_LOG_INFO, "First unsent document number = " + Fptr.getParamInt(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER));
    Fptr.logWrite("FiscalPrinter", Fptr.LIBFPTR_LOG_INFO, "First unsent document date = " + Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME).toString());
    

    Пример полного цикла работы с драйвером, состоящий из этапов:

    Алгоритмы

    Чеки возврата после 2019.01.01 00:00:00

    Для возврата товаров, проданных по налоговым ставкам НДС 18% или НДС расчитанный 18/118, после 2019.01.01 00:00:00, можно использовать два способа:

    Чтение документа из ФН

    Пример чтения документа №8 и вывода его на экран

    #include <string>
    #include <vector>
    #include <sstream>
    #include <iomanip>
    #include <iostream>
    #include <codecvt>
    #include "libfptr10.h"
    
    std::wstring getStr(libfptr_handle fptr, int paramID)
    {
        std::vector<wchar_t> str(32);
        int size = libfptr_get_param_str(fptr, paramID, &str[0], str.size());
        if (size > str.size())
        {
            str.resize(size);
            libfptr_get_param_str(fptr, paramID, &str[0], str.size());
        }
        return std::wstring(&str[0]);
    }
    
    std::vector<uchar> getByteArray(libfptr_handle fptr, int paramID)
    {
        std::vector<uchar> bfr(128);
        int size = libfptr_get_param_bytearray(fptr, paramID, &bfr[0], bfr.size());
        if (size > bfr.size())
        {
            bfr.resize(size);
            libfptr_get_param_bytearray(fptr, paramID, &bfr[0], bfr.size());
        }
        bfr.resize(size);
        return bfr;
    }
    
    int readNextRecord(libfptr_handle fptr, const std::wstring &recordsID)
    {
        libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
        return libfptr_read_next_record(fptr);
    }
    
    int endReadRecords(libfptr_handle fptr, const std::wstring &recordsID)
    {
        libfptr_set_param_str(fptr, LIBFPTR_PARAM_RECORDS_ID, recordsID.c_str());
        return libfptr_end_read_records(fptr);
    }
    
    std::wstring printable(int offset, const std::wstring &tagName, uint tagNumber,
                           const std::wstring &tagValue, bool newLineBeforeValue, bool newLineAfterValue)
    {
        std::wstringstream ss;
        while (offset > 0)
        {
            ss << L"  ";
            --offset;
        }
        ss << tagName
           << L" (" << tagNumber << L"): "
           << (newLineBeforeValue ? L"\n" : L"")
           << tagValue
           << (newLineAfterValue ? L"\n" : L"") ;
        return ss.str();
    }
    
    std::wstring parse(libfptr_handle fptr, int printOffset, const std::wstring &tagName,
        const std::vector<uchar> &tagValue, uint tagNumber, uint tagType)
    {
        switch (tagType)
        {
            case LIBFPTR_TAG_TYPE_BITS:
            case LIBFPTR_TAG_TYPE_BYTE:
            case LIBFPTR_TAG_TYPE_UINT_16:
            case LIBFPTR_TAG_TYPE_UINT_32:
                return printable(printOffset, tagName, tagNumber, std::to_wstring(libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_VALUE)), false, true);
            case LIBFPTR_TAG_TYPE_VLN:
            case LIBFPTR_TAG_TYPE_FVLN:
                return printable(printOffset, tagName, tagNumber, std::to_wstring(libfptr_get_param_double(fptr, LIBFPTR_PARAM_TAG_VALUE)), false, true);
            case LIBFPTR_TAG_TYPE_BOOL:
                return printable(printOffset, tagName, tagNumber, std::to_wstring(libfptr_get_param_bool(fptr, LIBFPTR_PARAM_TAG_VALUE)), false, true);
            case LIBFPTR_TAG_TYPE_ARRAY:
            {
                std::vector<uchar> v = getByteArray(fptr, LIBFPTR_PARAM_TAG_VALUE);
                std::wstringstream ss;
                for (auto e : v) {
                    ss << std::hex << std::setw(2) << std::setfill(L'0') << (uint)e;
                }
                return printable(printOffset,
                                 tagName,
                                 tagNumber,
                                 ss.str(),
                                 false) + L"\n";
            }
            case LIBFPTR_TAG_TYPE_STRING:
                return printable(printOffset, tagName, tagNumber, getStr(fptr, LIBFPTR_PARAM_TAG_VALUE), false, true);
            case LIBFPTR_TAG_TYPE_UNIX_TIME:
            {
                int y, m, d, H, M, S;
                libfptr_get_param_datetime(fptr, LIBFPTR_PARAM_TAG_VALUE, &y, &m, &d, &H, &M, &S);
                wchar_t dt[20] = {0};
                swprintf(dt, wcslen(dt), L"%04d.%02d.%02d %02d:%02d:%02d", y, m, d, H, M, S);
                return printable(printOffset,
                                 tagName,
                                 tagNumber,
                                 dt,
                                 false, true);
            }
            case LIBFPTR_TAG_TYPE_STLV:
            {
                libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECORDS_TYPE, LIBFPTR_RT_PARSE_COMPLEX_ATTR);
                libfptr_set_param_bytearray(fptr,
                                            LIBFPTR_PARAM_TAG_VALUE,
                                            &tagValue[0],
                                            tagValue.size());
                libfptr_begin_read_records(fptr);
                std::wstring recordsID = getStr(fptr, LIBFPTR_PARAM_RECORDS_ID);
    
                std::wstringstream result;
                while (readNextRecord(fptr, recordsID) == 0)
                {
                    result << parse(fptr, printOffset + 1,
                                    getStr(fptr, LIBFPTR_PARAM_TAG_NAME),
                                    getByteArray(fptr, LIBFPTR_PARAM_TAG_VALUE),
                                    libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_NUMBER),
                                    libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_TYPE));
                }
                return printable(printOffset,
                                 tagName,
                                 tagNumber,
                                 result.str(),
                                 true, false);
            }
            default:
                return L"";
        }
    }
    
    int main()
    {
        libfptr_handle fptr;
        libfptr_create(&fptr);
    
        libfptr_open(fptr);
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_RECORDS_TYPE, LIBFPTR_RT_FN_DOCUMENT_TLVS);
        libfptr_set_param_int(fptr, LIBFPTR_PARAM_DOCUMENT_NUMBER, 8);
        libfptr_begin_read_records(fptr);
        std::wstring recordsID = getStr(fptr, LIBFPTR_PARAM_RECORDS_ID);
    
        std::wstringstream result;
        while (readNextRecord(fptr, recordsID) == 0)
        {
            result << parse(fptr, 0,
                            getStr(fptr, LIBFPTR_PARAM_TAG_NAME),
                            getByteArray(fptr, LIBFPTR_PARAM_TAG_VALUE),
                            libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_NUMBER),
                            libfptr_get_param_int(fptr, LIBFPTR_PARAM_TAG_TYPE));
        }
    
        endReadRecords(fptr, recordsID);
    
        std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
        std::cout << converter.to_bytes(result.str()) << std::endl;
    
        libfptr_close(fptr);
        libfptr_destroy(&fptr);
    
        return 0;
    }
    
    import os
    
    from libfptr10 import IFptr
    
    
    def read_next_record(fptr, records_id):
        fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, records_id)
        return fptr.readNextRecord()
    
    
    def end_read_records(fptr, records_id):
        fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, records_id)
        return fptr.endReadRecords()
    
    
    def printable(offset, tag_name, tag_number, tag_value, new_line_before_value, new_line_after_value):
        return '{}{} ({}): {}{}{}'.format(offset * '  ',
                                        tag_name,
                                        tag_number,
                                        '\n' if new_line_before_value else '',
                                        tag_value,
                                        '\n' if new_line_after_value else '')
    
    
    def parse(fptr, print_offset, tag_name, tag_value, tag_number, tag_type):
        if tag_type in [IFptr.LIBFPTR_TAG_TYPE_BITS, IFptr.LIBFPTR_TAG_TYPE_BYTE, IFptr.LIBFPTR_TAG_TYPE_UINT_16,
                        IFptr.LIBFPTR_TAG_TYPE_UINT_32]:
            return printable(print_offset, tag_name, tag_number, fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_VALUE), False, True)
        elif tag_type in [IFptr.LIBFPTR_TAG_TYPE_VLN]:
            return printable(print_offset, tag_name, tag_number, fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAG_VALUE), False, True)
        elif tag_type in [IFptr.LIBFPTR_TAG_TYPE_FVLN]:
            return printable(print_offset, tag_name, tag_number, fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAG_VALUE), False, True)
        elif tag_type in [IFptr.LIBFPTR_TAG_TYPE_BOOL]:
            return printable(print_offset, tag_name, tag_number, fptr.getParamBool(IFptr.LIBFPTR_PARAM_TAG_VALUE), False, True)
        elif tag_type in [IFptr.LIBFPTR_TAG_TYPE_ARRAY]:
            return printable(print_offset, tag_name, tag_number, fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE), False, True)
        elif tag_type in [IFptr.LIBFPTR_TAG_TYPE_STRING]:
            return printable(print_offset, tag_name, tag_number, fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_VALUE), False, True)
        elif tag_type in [IFptr.LIBFPTR_TAG_TYPE_UNIX_TIME]:
            return printable(print_offset, tag_name, tag_number, fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_TAG_VALUE), False, True)
        elif tag_type in [IFptr.LIBFPTR_TAG_TYPE_STLV]:
            fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_PARSE_COMPLEX_ATTR)
            fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_VALUE, tag_value)
            fptr.beginReadRecords()
            records_id = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID)
    
            result = ''
            while read_next_record(fptr, records_id) == 0:
                result += parse(fptr, print_offset + 1,
                                fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME),
                                fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE),
                                fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER),
                                fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE))
    
            end_read_records(fptr, records_id)
            return printable(print_offset, tag_name, tag_number, result, True, False)
        else:
            return ''
    
    
    def main():
        fptr = IFptr('')
    
        fptr.open()
    
        fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_DOCUMENT_TLVS)
        fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 8)
        fptr.beginReadRecords()
        records_id = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID)
    
        result = ''
        while read_next_record(fptr, records_id) == 0:
            result += parse(fptr, 0,
                            fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME),
                            fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE),
                            fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER),
                            fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE))
    
        end_read_records(fptr, records_id)
    
        fptr.close()
    
        print(result)
    
    
    if __name__ == '__main__':
        main()
    
    package ru.atol;
    
    import org.apache.commons.lang.StringUtils;
    import ru.atol.drivers10.fptr.Fptr;
    import ru.atol.drivers10.fptr.IFptr;
    
    import java.util.Arrays;
    
    public class Main {
        private static int readNextRecord(IFptr fptr, String recordsID) {
            fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
            return fptr.readNextRecord();
        }
    
        private static int endReadRecords(IFptr fptr, String recordsID) {
            fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
            return fptr.endReadRecords();
        }
    
        private static String printable(int offset, String tagName, long tagNumber, String tagValue, boolean newLineBeforeValue, boolean newLineAfterValue) {
            return String.format("%s%s (%d): %s%s%s", StringUtils.repeat("  ", offset),
                    tagName,
                    tagNumber,
                    newLineBeforeValue ? "\n" : "",
                    tagValue,
                    newLineAfterValue ? "\n" : "");
        }
    
        private static String parse(IFptr fptr, int printOffset, String tagName, byte[] tagValue, long tagNumber, long tagType) {
            switch ((int) tagType) {
                case IFptr.LIBFPTR_TAG_TYPE_BITS:
                case IFptr.LIBFPTR_TAG_TYPE_BYTE:
                case IFptr.LIBFPTR_TAG_TYPE_UINT_16:
                case IFptr.LIBFPTR_TAG_TYPE_UINT_32:
                    return printable(printOffset, tagName, tagNumber, String.valueOf(fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_VALUE)), false, true);
                case IFptr.LIBFPTR_TAG_TYPE_VLN:
                case IFptr.LIBFPTR_TAG_TYPE_FVLN:
                    return printable(printOffset, tagName, tagNumber, String.valueOf(fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAG_VALUE)), false, true);
                case IFptr.LIBFPTR_TAG_TYPE_BOOL:
                    return printable(printOffset, tagName, tagNumber, String.valueOf(fptr.getParamBool(IFptr.LIBFPTR_PARAM_TAG_VALUE)), false, true);
                case IFptr.LIBFPTR_TAG_TYPE_ARRAY:
                    return printable(printOffset, tagName, tagNumber, Arrays.toString(fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)), false, true);
                case IFptr.LIBFPTR_TAG_TYPE_STRING:
                    return printable(printOffset, tagName, tagNumber, fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_VALUE), false, true);
                case IFptr.LIBFPTR_TAG_TYPE_UNIX_TIME:
                    return printable(printOffset, tagName, tagNumber, fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_TAG_VALUE).toString(), false, true);
                case IFptr.LIBFPTR_TAG_TYPE_STLV:
                    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_PARSE_COMPLEX_ATTR);
                    fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_VALUE, tagValue);
                    fptr.beginReadRecords();
                    String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);
    
                    StringBuilder result = new StringBuilder();
                    while (readNextRecord(fptr, recordsID) == 0) {
                        result.append(parse(fptr, printOffset + 1,
                                fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME),
                                fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE),
                                fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER),
                                fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE)));
                    }
    
                    endReadRecords(fptr, recordsID);
                    return printable(printOffset, tagName, tagNumber, result.toString(), true, false);
                default:
                    return "";
            }
        }
    
        public static void main(String[] args) throws Exception {
            IFptr fptr = new Fptr();
    
            fptr.open();
            fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_DOCUMENT_TLVS);
            fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 8);
            fptr.beginReadRecords();
            String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);
    
            StringBuilder result = new StringBuilder();
            while (readNextRecord(fptr, recordsID) == 0) {
                result.append(parse(fptr, 0,
                        fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME),
                        fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE),
                        fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER),
                        fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE)));
            }
    
            endReadRecords(fptr, recordsID);
    
            fptr.close();
    
            System.out.println(result);
        }
    }
    
    package ru.atol;
    
    import org.apache.commons.lang.StringUtils;
    import ru.atol.drivers10.fptr.Fptr;
    import ru.atol.drivers10.fptr.IFptr;
    
    import java.util.Arrays;
    
    public class DocumentReader {
        private static int readNextRecord(IFptr fptr, String recordsID) {
            fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
            return fptr.readNextRecord();
        }
    
        private static int endReadRecords(IFptr fptr, String recordsID) {
            fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
            return fptr.endReadRecords();
        }
    
        private static String printable(int offset, String tagName, long tagNumber, String tagValue, boolean newLineBeforeValue, boolean newLineAfterValue) {
            return String.format("%s%s (%d): %s%s%s", StringUtils.repeat("  ", offset),
                    tagName,
                    tagNumber,
                    newLineBeforeValue ? "\n" : "",
                    tagValue,
                    newLineAfterValue ? "\n" : "");
        }
    
        private static String parse(IFptr fptr, int printOffset, String tagName, byte[] tagValue, long tagNumber, long tagType) {
            switch ((int) tagType) {
                case IFptr.LIBFPTR_TAG_TYPE_BITS:
                case IFptr.LIBFPTR_TAG_TYPE_BYTE:
                case IFptr.LIBFPTR_TAG_TYPE_UINT_16:
                case IFptr.LIBFPTR_TAG_TYPE_UINT_32:
                    return printable(printOffset, tagName, tagNumber, String.valueOf(fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_VALUE)), false, true);
                case IFptr.LIBFPTR_TAG_TYPE_VLN:
                case IFptr.LIBFPTR_TAG_TYPE_FVLN:
                    return printable(printOffset, tagName, tagNumber, String.valueOf(fptr.getParamDouble(IFptr.LIBFPTR_PARAM_TAG_VALUE)), false, true);
                case IFptr.LIBFPTR_TAG_TYPE_BOOL:
                    return printable(printOffset, tagName, tagNumber, String.valueOf(fptr.getParamBool(IFptr.LIBFPTR_PARAM_TAG_VALUE)), false, true);
                case IFptr.LIBFPTR_TAG_TYPE_ARRAY:
                    return printable(printOffset, tagName, tagNumber, Arrays.toString(fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE)), false, true);
                case IFptr.LIBFPTR_TAG_TYPE_STRING:
                    return printable(printOffset, tagName, tagNumber, fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_VALUE), false, true);
                case IFptr.LIBFPTR_TAG_TYPE_UNIX_TIME:
                    return printable(printOffset, tagName, tagNumber, fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_TAG_VALUE).toString(), false, true);
                case IFptr.LIBFPTR_TAG_TYPE_STLV:
                    fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_PARSE_COMPLEX_ATTR);
                    fptr.setParam(IFptr.LIBFPTR_PARAM_TAG_VALUE, tagValue);
                    fptr.beginReadRecords();
                    String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);
    
                    StringBuilder result = new StringBuilder();
                    while (readNextRecord(fptr, recordsID) == 0) {
                        result.append(parse(fptr, printOffset + 1,
                                fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME),
                                fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE),
                                fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER),
                                fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE)));
                    }
    
                    endReadRecords(fptr, recordsID);
                    return printable(printOffset, tagName, tagNumber, result.toString(), true, false);
                default:
                    return "";
            }
        }
    
        public static void read(Context ctx) throws Exception {
            IFptr fptr = new Fptr(ctx);
    
            fptr.open();
            fptr.setParam(IFptr.LIBFPTR_PARAM_RECORDS_TYPE, IFptr.LIBFPTR_RT_FN_DOCUMENT_TLVS);
            fptr.setParam(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 8);
            fptr.beginReadRecords();
            String recordsID = fptr.getParamString(IFptr.LIBFPTR_PARAM_RECORDS_ID);
    
            StringBuilder result = new StringBuilder();
            while (readNextRecord(fptr, recordsID) == 0) {
                result.append(parse(fptr, 0,
                        fptr.getParamString(IFptr.LIBFPTR_PARAM_TAG_NAME),
                        fptr.getParamByteArray(IFptr.LIBFPTR_PARAM_TAG_VALUE),
                        fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_NUMBER),
                        fptr.getParamInt(IFptr.LIBFPTR_PARAM_TAG_TYPE)));
            }
    
            endReadRecords(fptr, recordsID);
    
            fptr.close();
    
            Log.d("DocumentReader", result);
        }
    }
    
    #import <Foundation/Foundation.h>
    #import <fptr10/libfptr10_objc.h>
    
    int readNextRecord(IFptr *fptr, NSString *recordsID) {
        [fptr setParam:LIBFPTR_PARAM_RECORDS_ID NSStringParam:recordsID];
        return [fptr readNextRecord];
    }
    
    int endReadRecords(IFptr *fptr, NSString *recordsID) {
        [fptr setParam:LIBFPTR_PARAM_RECORDS_ID NSStringParam:recordsID];
        return [fptr endReadRecords];
    }
    
    NSString* printable(int offset, NSString *tagName, uint tagNumber, NSString *tagValue, bool newLineBeforeValue, bool newLineAfterValue) {
        NSString *o = [@"" stringByPaddingToLength:[@"  " length]*offset withString:@"  " startingAtIndex:0];
        return [NSString stringWithFormat:@"%@%@ (%d): %s%@%s", o,
                tagName,
                tagNumber,
                newLineBeforeValue ? "\n" : "",
                tagValue,
                newLineAfterValue ? "\n" : ""];
    }
    
    NSString* parse(IFptr *fptr, int printOffset, NSString *tagName, NSData *tagValue, uint tagNumber, uint tagType) {
        switch (tagType) {
            case LIBFPTR_TAG_TYPE_BITS:
            case LIBFPTR_TAG_TYPE_BYTE:
            case LIBFPTR_TAG_TYPE_UINT_16:
            case LIBFPTR_TAG_TYPE_UINT_32:
                return printable(printOffset, tagName, tagNumber, [NSString stringWithFormat:@"%d", [fptr getParamInt:LIBFPTR_PARAM_TAG_VALUE]], false, true);
            case LIBFPTR_TAG_TYPE_VLN:
            case LIBFPTR_TAG_TYPE_FVLN:
                return printable(printOffset, tagName, tagNumber, [NSString stringWithFormat:@"%f", [fptr getParamDouble:LIBFPTR_PARAM_TAG_VALUE]], false, true);
            case LIBFPTR_TAG_TYPE_BOOL:
                return printable(printOffset, tagName, tagNumber, [NSString stringWithFormat:@"%d", [fptr getParamBool:LIBFPTR_PARAM_TAG_VALUE]], false, true);
            case LIBFPTR_TAG_TYPE_ARRAY: {
                NSData *data = [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE];
                NSUInteger capacity = data.length * 2;
                NSMutableString *sbuf = [NSMutableString stringWithCapacity:capacity];
                const unsigned char *buf = data.bytes;
                NSInteger i;
                for (i=0; i<data.length; ++i) {
                    [sbuf appendFormat:@"%02lX", (NSUInteger)buf[i]];
                }
                return printable(printOffset, tagName, tagNumber, sbuf, false, true);
            }
            case LIBFPTR_TAG_TYPE_STRING:
                return printable(printOffset, tagName, tagNumber, [fptr getParamString:LIBFPTR_PARAM_TAG_VALUE], false, true);
            case LIBFPTR_TAG_TYPE_UNIX_TIME: {
                NSDate *dt = [fptr getParamDateTime:LIBFPTR_PARAM_TAG_VALUE];
                NSDateFormatter *dtFormatter = [[NSDateFormatter alloc] init];
                dtFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
                return printable(printOffset, tagName, tagNumber, [dtFormatter stringFromDate:dt], false, true);
            }
            case LIBFPTR_TAG_TYPE_STLV: {
                [fptr setParam:LIBFPTR_PARAM_RECORDS_TYPE intParam:LIBFPTR_RT_PARSE_COMPLEX_ATTR];
                [fptr setParam:LIBFPTR_PARAM_TAG_VALUE NSDataParam:tagValue];
                [fptr beginReadRecords];
                NSString *recordsID = [fptr getParamString:LIBFPTR_PARAM_RECORDS_ID];
    
                NSString *result = @"";
                while (readNextRecord(fptr, recordsID) == 0) {
                    result = [result stringByAppendingString:parse(fptr, printOffset + 1,
                                                                   [fptr getParamString:LIBFPTR_PARAM_TAG_NAME],
                                                                   [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE],
                                                                   [fptr getParamInt:LIBFPTR_PARAM_TAG_NUMBER],
                                                                   [fptr getParamInt:LIBFPTR_PARAM_TAG_TYPE])];
                }
    
                endReadRecords(fptr, recordsID);
                return printable(printOffset, tagName, tagNumber, result, true, false);
            }
            default:
                    return @"";
        }
    }
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            IFptr *fptr = [[IFptr alloc] init];
    
            [fptr open];
    
            [fptr setParam:LIBFPTR_PARAM_RECORDS_TYPE intParam:LIBFPTR_RT_FN_DOCUMENT_TLVS];
            [fptr setParam:LIBFPTR_PARAM_DOCUMENT_NUMBER intParam:8];
            [fptr beginReadRecords];
            NSString *recordsID = [fptr getParamString:LIBFPTR_PARAM_RECORDS_ID];
    
            NSString *result = @"";
            while (readNextRecord(fptr, recordsID) == 0) {
                result = [result stringByAppendingString:parse(fptr, 0,
                                                               [fptr getParamString:LIBFPTR_PARAM_TAG_NAME],
                                                               [fptr getParamByteArray:LIBFPTR_PARAM_TAG_VALUE],
                                                               [fptr getParamInt:LIBFPTR_PARAM_TAG_NUMBER],
                                                               [fptr getParamInt:LIBFPTR_PARAM_TAG_TYPE])];
            }
    
            endReadRecords(fptr, recordsID);
    
            NSLog(@"%@", result);
    
            [fptr close];
        }
    
        return 0;
    }
    
    program Project1;
    
    {$APPTYPE CONSOLE}
    
    uses
      System, Variants,
      ActiveX,
      ComObj,
      SysUtils,
      Windows,
      StrUtils;
    
    function readNextRecord(fptr: Variant; recordsID: String): integer;
    begin
        fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
        Result := fptr.readNextRecord;
    end;
    
    function endReadRecords(fptr: Variant; recordsID: String): integer;
    begin
        fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
        Result := fptr.endReadRecords;
    end;
    
    function BinToStr(const bin: array of byte): string;
    const HexSymbols = '0123456789ABCDEF';
    var i: integer;
    begin
      SetLength(Result, 2*Length(bin));
      for i :=  0 to Length(bin)-1 do begin
        Result[1 + 2*i + 0] := HexSymbols[1 + bin[i] shr 4];
        Result[1 + 2*i + 1] := HexSymbols[1 + bin[i] and $0F];
      end;
    end;
    
    function printable(offset: integer; tagName: string; tagNumber: Integer; tagValue: string; newLineBeforeValue: Boolean; newLineAfterValue: Boolean): string;
    begin
      Result := Format('%s%s (%d): %s%s%s', [DupeString('  ', offset),
                    tagName,
                    tagNumber,
                    IfThen(newLineBeforeValue, AnsiString(#13#10), ''),
                    tagValue],
                    IfThen(newLineAfterValue, AnsiString(#13#10), ''));
    end;
    
    function parse(fptr: OleVariant; printOffset: integer; tagName: string; tagValue: Variant; tagNumber, tagType: integer): string;
    var
      byteArrayValue: Variant;
      byteArray: array of byte;
      i: integer;
      S, recordsID: string;
    begin
      Result := '';
      if (tagType = fptr.LIBFPTR_TAG_TYPE_BITS) or (tagType = fptr.LIBFPTR_TAG_TYPE_BYTE) or (tagType = fptr.LIBFPTR_TAG_TYPE_UINT_16) or (tagType = fptr.LIBFPTR_TAG_TYPE_UINT_32) then
      begin
        Result := printable(printOffset, tagName, tagNumber, IntToStr(fptr.getParamInt(fptr.LIBFPTR_PARAM_TAG_VALUE)), False, True);
      end
      else if (tagType = fptr.LIBFPTR_TAG_TYPE_VLN) or (tagType = fptr.LIBFPTR_TAG_TYPE_FVLN) then
      begin
        Result := printable(printOffset, tagName, tagNumber, FloatToStr(fptr.getParamDouble(fptr.LIBFPTR_PARAM_TAG_VALUE)), False, True);
      end
      else if tagType = fptr.LIBFPTR_TAG_TYPE_BOOL then
      begin
        Result := printable(printOffset, tagName, tagNumber, BoolToStr(fptr.getParamBool(fptr.LIBFPTR_PARAM_TAG_VALUE)), False, True);
      end
      else if tagType = fptr.LIBFPTR_TAG_TYPE_ARRAY then
      begin
        byteArrayValue := fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE);
        i := Length(byteArrayValue);
        SetLength(byteArray, VarArrayHighBound(byteArrayValue, 1));
        for i := VarArrayLowBound(byteArrayValue, 1) to VarArrayHighBound(byteArrayValue, 1) do
        begin
          byteArray[i] := VarArrayGet(byteArrayValue, i);
        end;
    
        Result := printable(printOffset, tagName, tagNumber, BinToStr(byteArray), False, True);
      end
      else if tagType = fptr.LIBFPTR_TAG_TYPE_STRING then
      begin
        Result := printable(printOffset, tagName, tagNumber, fptr.getParamString(fptr.LIBFPTR_PARAM_TAG_VALUE), False, True);
      end
      else if tagType = fptr.LIBFPTR_TAG_TYPE_UNIX_TIME then
      begin
        Result := printable(printOffset, tagName, tagNumber, DateTimeToStr(fptr.getParamDateTime(fptr.LIBFPTR_PARAM_TAG_VALUE)), False, True);
      end
      else if tagType = fptr.LIBFPTR_TAG_TYPE_STLV then
      begin
        fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_TYPE, fptr.LIBFPTR_RT_PARSE_COMPLEX_ATTR);
        fptr.setParam(fptr.LIBFPTR_PARAM_TAG_VALUE, tagValue);
        fptr.beginReadRecords;
        recordsID := fptr.getParamString(fptr.LIBFPTR_PARAM_RECORDS_ID);
    
        S := '';
        while readNextRecord(fptr, recordsID) = 0 do
        begin
          S := S + parse(fptr, printOffset + 1,
                            fptr.getParamString(fptr.LIBFPTR_PARAM_TAG_NAME),
                            fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE),
                            fptr.getParamInt(fptr.LIBFPTR_PARAM_TAG_NUMBER),
                            fptr.getParamInt(fptr.LIBFPTR_PARAM_TAG_TYPE));
        end;
    
        endReadRecords(fptr, recordsID);
    
        Result := printable(printOffset, tagName, tagNumber, S, True, False);
      end
      else Result := '';
    end;
    
    var
      fptr: OleVariant;
      result: string;
      recordsID: string;
      newStr: string;
    
    begin
      CoInitialize(nil);
      fptr := CreateOleObject('AddIn.Fptr10');
    
      fptr.open;
      fptr.setParam(fptr.LIBFPTR_PARAM_RECORDS_TYPE, fptr.LIBFPTR_RT_FN_DOCUMENT_TLVS);
      fptr.setParam(fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 8);
      fptr.beginReadRecords;
      recordsID := fptr.getParamString(fptr.LIBFPTR_PARAM_RECORDS_ID);
    
      while readNextRecord(fptr, recordsID) = 0 do
      begin
        result := result + parse(fptr, 0,
                            fptr.getParamString(fptr.LIBFPTR_PARAM_TAG_NAME),
                            fptr.getParamByteArray(fptr.LIBFPTR_PARAM_TAG_VALUE),
                            fptr.getParamInt(fptr.LIBFPTR_PARAM_TAG_NUMBER),
                            fptr.getParamInt(fptr.LIBFPTR_PARAM_TAG_TYPE));
      end;
    
      endReadRecords(fptr, recordsID);
    
      fptr.close;
    
      SetLength(newStr, Length(result));
      CharToOem(PChar(result), PChar(newStr));
      Writeln(newStr);
      ReadLn;
    end.
    
    using Atol.Drivers10.Fptr;
    using System;
    using System.Text;
    
    namespace Test
    {
        class Program
        {
            private static int readNextRecord(IFptr fptr, String recordsID)
            {
                fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
                return fptr.readNextRecord();
            }
    
            private static int endReadRecords(IFptr fptr, String recordsID)
            {
                fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_ID, recordsID);
                return fptr.endReadRecords();
            }
    
            private static String printable(int offset, String tagName, uint tagNumber, String tagValue, bool newLineBeforeValue, bool newLineAfterValue)
            {
                return String.Format("{0}{1} ({2}): {3}{4}{5}", new StringBuilder().Insert(0, "  ", offset).ToString(),
                        tagName,
                        tagNumber,
                        newLineBeforeValue ? "\n" : "",
                        tagValue
                        newLineAfterValue ? "\n" : "");
            }
    
            private static String parse(IFptr fptr, int printOffset, String tagName, byte[] tagValue, uint tagNumber, uint tagType)
            {
                switch ((int)tagType)
                {
                    case Constants.LIBFPTR_TAG_TYPE_BITS:
                    case Constants.LIBFPTR_TAG_TYPE_BYTE:
                    case Constants.LIBFPTR_TAG_TYPE_UINT_16:
                    case Constants.LIBFPTR_TAG_TYPE_UINT_32:
                        return printable(printOffset, tagName, tagNumber, fptr.getParamInt(Constants.LIBFPTR_PARAM_TAG_VALUE).ToString(), false, true);
                    case Constants.LIBFPTR_TAG_TYPE_VLN:
                    case Constants.LIBFPTR_TAG_TYPE_FVLN:
                        return printable(printOffset, tagName, tagNumber, fptr.getParamDouble(Constants.LIBFPTR_PARAM_TAG_VALUE).ToString(), false, true);
                    case Constants.LIBFPTR_TAG_TYPE_BOOL:
                        return printable(printOffset, tagName, tagNumber, fptr.getParamBool(Constants.LIBFPTR_PARAM_TAG_VALUE).ToString(), false, true);
                    case Constants.LIBFPTR_TAG_TYPE_ARRAY:
                        return printable(printOffset, tagName, tagNumber, BitConverter.ToString(fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE)), false, true);
                    case Constants.LIBFPTR_TAG_TYPE_STRING:
                        return printable(printOffset, tagName, tagNumber, fptr.getParamString(Constants.LIBFPTR_PARAM_TAG_VALUE), false, true);
                    case Constants.LIBFPTR_TAG_TYPE_UNIX_TIME:
                        return printable(printOffset, tagName, tagNumber, fptr.getParamDateTime(Constants.LIBFPTR_PARAM_TAG_VALUE).ToString(), false, true);
                    case Constants.LIBFPTR_TAG_TYPE_STLV:
                        fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_TYPE, Constants.LIBFPTR_RT_PARSE_COMPLEX_ATTR);
                        fptr.setParam(Constants.LIBFPTR_PARAM_TAG_VALUE, tagValue);
                        fptr.beginReadRecords();
                        String recordsID = fptr.getParamString(Constants.LIBFPTR_PARAM_RECORDS_ID);
    
                        StringBuilder result = new StringBuilder();
                        while (readNextRecord(fptr, recordsID) == 0)
                        {
                            result.Append(parse(fptr, printOffset + 1,
                                    fptr.getParamString(Constants.LIBFPTR_PARAM_TAG_NAME),
                                    fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE),
                                    fptr.getParamInt(Constants.LIBFPTR_PARAM_TAG_NUMBER),
                                    fptr.getParamInt(Constants.LIBFPTR_PARAM_TAG_TYPE)));
                        }
    
                        endReadRecords(fptr, recordsID);
                        return printable(printOffset, tagName, tagNumber, result.ToString(), true, false);
                    default:
                        return "";
                }
            }
    
            static void Main(string[] args)
            {
                IFptr fptr = new Fptr();
    
                fptr.open();
                fptr.setParam(Constants.LIBFPTR_PARAM_RECORDS_TYPE, Constants.LIBFPTR_RT_FN_DOCUMENT_TLVS);
                fptr.setParam(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER, 8);
                fptr.beginReadRecords();
                String recordsID = fptr.getParamString(Constants.LIBFPTR_PARAM_RECORDS_ID);
    
                StringBuilder result = new StringBuilder();
                while (readNextRecord(fptr, recordsID) == 0)
                {
                    result.Append(parse(fptr, 0,
                            fptr.getParamString(Constants.LIBFPTR_PARAM_TAG_NAME),
                            fptr.getParamByteArray(Constants.LIBFPTR_PARAM_TAG_VALUE),
                            fptr.getParamInt(Constants.LIBFPTR_PARAM_TAG_NUMBER),
                            fptr.getParamInt(Constants.LIBFPTR_PARAM_TAG_TYPE)));
                }
    
                endReadRecords(fptr, recordsID);
    
                fptr.close();
    
                Console.WriteLine(result.ToString());
            }
        }
    }
    
    package main
    
    import (
        "fmt"
        "test/fptr10"
        "strings"
    )
    
    func readNextRecord(fptr *fptr10.IFptr, recordsID string) error {
        fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
        return fptr.ReadNextRecord()
    }
    
    func endReadRecords(fptr *fptr10.IFptr, recordsID string) error {
        fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_ID, recordsID)
        return fptr.EndReadRecords()
    }
    
    func printable(offset int, tagName string, tagNumber uint, tagValue interface{}, newLineBeforeValue bool, newLineAfterValue bool) string {
        nla := ""
        nlb := ""
        if newLineBeforeValue {
            nlb = "\n"
        }
        if newLineAfterValue {
            nla = "\n"
        }
        return fmt.Sprintf("%s%s (%d): %s%v%s", strings.Repeat("  ", offset),
            tagName, tagNumber, nlb, tagValue, nla)
    }
    
    func parse(fptr *fptr10.IFptr, printOffset int, tagName string, tagValue []byte, tagNumber uint, tagType uint) string {
        switch tagType {
        case fptr10.LIBFPTR_TAG_TYPE_BITS, fptr10.LIBFPTR_TAG_TYPE_BYTE, fptr10.LIBFPTR_TAG_TYPE_UINT_16, fptr10.LIBFPTR_TAG_TYPE_UINT_32:
            return printable(printOffset, tagName, tagNumber, fptr.GetParamInt(fptr10.LIBFPTR_PARAM_TAG_VALUE), false, true)
        case fptr10.LIBFPTR_TAG_TYPE_VLN, fptr10.LIBFPTR_TAG_TYPE_FVLN:
            return printable(printOffset, tagName, tagNumber, fptr.GetParamDouble(fptr10.LIBFPTR_PARAM_TAG_VALUE), false, true)
        case fptr10.LIBFPTR_TAG_TYPE_BOOL:
            return printable(printOffset, tagName, tagNumber, fptr.GetParamBool(fptr10.LIBFPTR_PARAM_TAG_VALUE), false, true)
        case fptr10.LIBFPTR_TAG_TYPE_ARRAY:
            return printable(printOffset, tagName, tagNumber, fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE), false, true)
        case fptr10.LIBFPTR_TAG_TYPE_STRING:
            return printable(printOffset, tagName, tagNumber, fptr.GetParamString(fptr10.LIBFPTR_PARAM_TAG_VALUE), false, true)
        case fptr10.LIBFPTR_TAG_TYPE_UNIX_TIME:
            return printable(printOffset, tagName, tagNumber, fptr.GetParamDateTime(fptr10.LIBFPTR_PARAM_TAG_VALUE), false, true)
        case fptr10.LIBFPTR_TAG_TYPE_STLV:
            fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_TYPE, fptr10.LIBFPTR_RT_PARSE_COMPLEX_ATTR)
            fptr.SetParam(fptr10.LIBFPTR_PARAM_TAG_VALUE, tagValue)
            fptr.BeginReadRecords()
            recordsID := fptr.GetParamString(fptr10.LIBFPTR_PARAM_RECORDS_ID)
    
            result := ""
            for readNextRecord(fptr, recordsID) == nil {
                result += parse(fptr, printOffset + 1,
                    fptr.GetParamString(fptr10.LIBFPTR_PARAM_TAG_NAME),
                    fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE),
                    fptr.GetParamInt(fptr10.LIBFPTR_PARAM_TAG_NUMBER),
                    fptr.GetParamInt(fptr10.LIBFPTR_PARAM_TAG_TYPE))
            }
    
            endReadRecords(fptr, recordsID)
            return printable(printOffset, tagName, tagNumber, result, true, false)
        }
    
        return ""
    }
    
    func main() {
        fptr := fptr10.New()
        defer func() {
            fptr.Close()
            fptr.Destroy()
        }()
    
        fptr.Open()
        fptr.SetParam(fptr10.LIBFPTR_PARAM_RECORDS_TYPE, fptr10.LIBFPTR_RT_FN_DOCUMENT_TLVS)
        fptr.SetParam(fptr10.LIBFPTR_PARAM_DOCUMENT_NUMBER, 8)
        fptr.BeginReadRecords()
        recordsID := fptr.GetParamString(fptr10.LIBFPTR_PARAM_RECORDS_ID)
    
        result := ""
        for readNextRecord(fptr, recordsID) == nil {
            result += parse(fptr, 0,
                fptr.GetParamString(fptr10.LIBFPTR_PARAM_TAG_NAME),
                fptr.GetParamByteArray(fptr10.LIBFPTR_PARAM_TAG_VALUE),
                fptr.GetParamInt(fptr10.LIBFPTR_PARAM_TAG_NUMBER),
                fptr.GetParamInt(fptr10.LIBFPTR_PARAM_TAG_TYPE))
        }
    
        endReadRecords(fptr, recordsID)
    
        fptr.Close()
    
        print(result)
    }
    
    function readNextRecord(recordsID) {
        Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID)
        return Fptr.readNextRecord()
    }
    
    function endReadRecords(recordsID) {
        Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_ID, recordsID);
        return Fptr.endReadRecords();
    }
    
    function printable(offset, tagName, tagNumber, tagValue, newLineBeforeValue, newLineAfterValue) {
        s = "  ".repeat(offset) + tagName + " (" + tagNumber + "): " + (newLineBeforeValue ? "\n" : "") + tagValue + (newLineAfterValue ? "\n" : "");
        return s;
    }
    
    function parse(printOffset, tagName, tagValue, tagNumber, tagType) {
        switch (tagType) {
            case Fptr.LIBFPTR_TAG_TYPE_BITS:
            case Fptr.LIBFPTR_TAG_TYPE_BYTE:
            case Fptr.LIBFPTR_TAG_TYPE_UINT_16:
            case Fptr.LIBFPTR_TAG_TYPE_UINT_32:
                return printable(printOffset, tagName, tagNumber, Fptr.getParamInt(Fptr.LIBFPTR_PARAM_TAG_VALUE).toString(), false, true)
            case Fptr.LIBFPTR_TAG_TYPE_VLN:
            case Fptr.LIBFPTR_TAG_TYPE_FVLN:
                return printable(printOffset, tagName, tagNumber, Fptr.getParamDouble(Fptr.LIBFPTR_PARAM_TAG_VALUE).toString(), false, true)
            case Fptr.LIBFPTR_TAG_TYPE_BOOL:
                return printable(printOffset, tagName, tagNumber, Fptr.getParamBool(Fptr.LIBFPTR_PARAM_TAG_VALUE).toString(), false, true)
            case Fptr.LIBFPTR_TAG_TYPE_ARRAY:
                return printable(printOffset, tagName, tagNumber, Duktape.enc('jx', Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE)), false, true)
            case Fptr.LIBFPTR_TAG_TYPE_STRING:
                return printable(printOffset, tagName, tagNumber, Fptr.getParamString(Fptr.LIBFPTR_PARAM_TAG_VALUE), false, true)
            case Fptr.LIBFPTR_TAG_TYPE_UNIX_TIME:
                return printable(printOffset, tagName, tagNumber, Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_TAG_VALUE).toString(), false, true)
            case Fptr.LIBFPTR_TAG_TYPE_STLV:
                Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_TYPE, Fptr.LIBFPTR_RT_PARSE_COMPLEX_ATTR);
                Fptr.setParam(Fptr.LIBFPTR_PARAM_TAG_VALUE, tagValue);
                Fptr.beginReadRecords();
                var recordsID = Fptr.getParamString(Fptr.LIBFPTR_PARAM_RECORDS_ID);
    
                var result = "";
                while (readNextRecord(recordsID) == 0) {
                    result += parse(printOffset + 1,
                        Fptr.getParamString(Fptr.LIBFPTR_PARAM_TAG_NAME),
                        Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE),
                        Fptr.getParamInt(Fptr.LIBFPTR_PARAM_TAG_NUMBER),
                        Fptr.getParamInt(Fptr.LIBFPTR_PARAM_TAG_TYPE));
                }
    
                endReadRecords(recordsID);
                return printable(printOffset, tagName, tagNumber, result, true, false);
        }
    }
    
    Fptr.setParam(Fptr.LIBFPTR_PARAM_RECORDS_TYPE, Fptr.LIBFPTR_RT_FN_DOCUMENT_TLVS);
    Fptr.setParam(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, 8);
    Fptr.beginReadRecords();
    var recordsID = Fptr.getParamString(Fptr.LIBFPTR_PARAM_RECORDS_ID);
    
    var result = "";
    while (readNextRecord(recordsID) == 0) {
        result += parse(0,
            Fptr.getParamString(Fptr.LIBFPTR_PARAM_TAG_NAME),
            Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE),
            Fptr.getParamInt(Fptr.LIBFPTR_PARAM_TAG_NUMBER),
            Fptr.getParamInt(Fptr.LIBFPTR_PARAM_TAG_TYPE));
    }
    
    endReadRecords(recordsID);
    Fptr.logWrite('FiscalPrinter', Fptr.LIBFPTR_LOG_INFO, result)
    

    Для чтения документа из ФН нужно реккурсивно вычитать все его реквизиты, попутно разбирая STLV-структуры на составные части. Для этого понадобятся следующие операции в драйвере:

    Использование выходного параметр LIBFPTR_PARAM_RECORDS_ID метода beginReadRecords() позволяет разделять результаты нескольких операций чтения данных

    Формат массива пикселей

    Пример изображения

    ██████   -  0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
    █    █   -  0xFF 0x00 0x00 0x00 0x00 0xFF
    █    █   -  0xFF 0x00 0x00 0x00 0x00 0xFF
    ██████   -  0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
    

    Массив пикселей изображения используется для печати методом printPixelBuffer(), а также для загрузки/выгрузки изображений из памяти ККТ методами uploadPixelBufferMemory(), uploadPixelBufferCliche() и downloadPixelBuffer().

    Для передачи используется формат один пиксель на один байт. Для обозначения белых пикселей используется байт со значением 0x00, для черных - любое отличное от 0x00 число.

    Изображение описывается следующими параметрами:

    Работа с клише

    Формат

    При использовании настроек 184-203 (Строка клише N) и методов setHeaderLines() и setFooterLines() драйвер принимает особым образом размеченные строки.

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

    Порядок печати

    Помимо самого клише, драйвер позволяет печатать дополнительные строки и изображения. Это можно сделать с помощью preItems и postItems в JSON-заданиях, а также с помощью методов setHeaderLines() и setFooterLines(). Ниже указано, как переданные с помощью них данные печатаются на чековой ленте относительно документа:

    1. Заголовок клише
    2. Дополнительный заголовок (setHeaderLines())
    3. Дополнительные элементы (preItems)
    4. Строки документа (позиции, оплаты, налоги, реквизиты, QR-код и другие)
    5. Дополнительные элементы (postItems)
    6. Дополнительный подвал (setFooterLines())
    7. Подвал клише (только ККТ версий 3.X)

    Настройки ККТ

    АТОЛ 1Ф

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    299Регистрировать секциичисло0 - Нет
    1 - Да

    АТОЛ 11Ф (5.X)

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло0 .. 3
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    236Скорость ККТчисло4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    230400 - 230400 бод
    460800 - 460800 бод
    921600 - 921600 бод
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 64
    270Пароль доступа к точке доступастрокаМаксимальная длина 64
    271Номер канала Wi-Fi в режиме точки доступачисло1 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    294Использовать RS232число0 - Нет
    1 - Да
    296Ожидание подключения по Wi-Fi, с. (0 - деактивация)число0 .. 255
    297Ожидание подключения по GSM, с. (0 - деактивация)число0 .. 255
    298Ожидание подключения по Bluetooth, с. (0 - деактивация)число0 .. 255
    299Регистрировать секциичисло0 - Нет
    1 - Да
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    329IP-порт (Wi-Fi)число1 .. 65535
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено

    АТОЛ 11Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    10Игнорировать ошибки ДЯ при работе от аккумуляторовчисло0 - Нет
    1 - Да
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 64
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 42
    123Имя кассира 2строкаМаксимальная длина 42
    124Имя кассира 3строкаМаксимальная длина 42
    125Имя кассира 4строкаМаксимальная длина 42
    126Имя кассира 5строкаМаксимальная длина 42
    127Имя кассира 6строкаМаксимальная длина 42
    128Имя кассира 7строкаМаксимальная длина 42
    129Имя кассира 8строкаМаксимальная длина 42
    130Имя кассира 9строкаМаксимальная длина 42
    131Имя кассира 10строкаМаксимальная длина 42
    132Имя кассира 11строкаМаксимальная длина 42
    133Имя кассира 12строкаМаксимальная длина 42
    134Имя кассира 13строкаМаксимальная длина 42
    135Имя кассира 14строкаМаксимальная длина 42
    136Имя кассира 15строкаМаксимальная длина 42
    137Имя кассира 16строкаМаксимальная длина 42
    138Имя кассира 17строкаМаксимальная длина 42
    139Имя кассира 18строкаМаксимальная длина 42
    140Имя кассира 19строкаМаксимальная длина 42
    141Имя кассира 20строкаМаксимальная длина 42
    142Имя кассира 21строкаМаксимальная длина 42
    143Имя кассира 22строкаМаксимальная длина 42
    144Имя кассира 23строкаМаксимальная длина 42
    145Имя кассира 24строкаМаксимальная длина 42
    146Имя кассира 25строкаМаксимальная длина 42
    147Имя кассира 26строкаМаксимальная длина 42
    148Имя кассира 27строкаМаксимальная длина 42
    149Имя кассира 28строкаМаксимальная длина 42
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 42
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 42
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 42
    185Строка клише 2строкаМаксимальная длина 42
    186Строка клише 3строкаМаксимальная длина 42
    187Строка клише 4строкаМаксимальная длина 42
    188Строка клише 5строкаМаксимальная длина 42
    189Строка клише 6строкаМаксимальная длина 42
    190Строка клише 7строкаМаксимальная длина 42
    191Строка клише 8строкаМаксимальная длина 42
    192Строка клише 9строкаМаксимальная длина 42
    193Строка клише 10строкаМаксимальная длина 42
    194Строка клише 11строкаМаксимальная длина 42
    195Строка клише 12строкаМаксимальная длина 42
    196Строка клише 13строкаМаксимальная длина 42
    197Строка клише 14строкаМаксимальная длина 42
    198Строка клише 15строкаМаксимальная длина 42
    199Строка клише 16строкаМаксимальная длина 42
    200Строка клише 17строкаМаксимальная длина 42
    201Строка клише 18строкаМаксимальная длина 42
    202Строка клише 19строкаМаксимальная длина 42
    203Строка клише 20строкаМаксимальная длина 42
    204Наименование секции 1строкаМаксимальная длина 42
    205Наименование секции 2строкаМаксимальная длина 42
    206Наименование секции 3строкаМаксимальная длина 42
    207Наименование секции 4строкаМаксимальная длина 42
    208Наименование секции 5строкаМаксимальная длина 42
    209Наименование секции 6строкаМаксимальная длина 42
    210Наименование секции 7строкаМаксимальная длина 42
    211Наименование секции 8строкаМаксимальная длина 42
    212Наименование секции 9строкаМаксимальная длина 42
    213Наименование секции 10строкаМаксимальная длина 42
    214Наименование секции 11строкаМаксимальная длина 42
    215Наименование секции 12строкаМаксимальная длина 42
    216Наименование секции 13строкаМаксимальная длина 42
    217Наименование секции 14строкаМаксимальная длина 42
    218Наименование секции 15строкаМаксимальная длина 42
    219Наименование секции 16строкаМаксимальная длина 42
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    236Скорость ККТчисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    237Подключенное устройствочисло0 - Нет устройства
    1 - Сканер
    238Скорость подключенного устройствачисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    14400 - 14400 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    239Канал обмена с ККТчисло0 - RS-232
    4 - USB
    5 - Bluetooth
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 42
    241Наименование способа расчета 3строкаМаксимальная длина 42
    242Наименование способа расчета 4строкаМаксимальная длина 42
    243Наименование способа расчета 5строкаМаксимальная длина 42
    244Наименование способа расчета 6строкаМаксимальная длина 42
    245Наименование способа расчета 7строкаМаксимальная длина 42
    246Наименование способа расчета 8строкаМаксимальная длина 42
    247Наименование способа расчета 9строкаМаксимальная длина 42
    248Наименование способа расчета 10строкаМаксимальная длина 42
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 7
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ 15Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 42
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    64Таймаут на выключение ККТ (минуты)число0 .. 990
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 42
    123Имя кассира 2строкаМаксимальная длина 42
    124Имя кассира 3строкаМаксимальная длина 42
    125Имя кассира 4строкаМаксимальная длина 42
    126Имя кассира 5строкаМаксимальная длина 42
    127Имя кассира 6строкаМаксимальная длина 42
    128Имя кассира 7строкаМаксимальная длина 42
    129Имя кассира 8строкаМаксимальная длина 42
    130Имя кассира 9строкаМаксимальная длина 42
    131Имя кассира 10строкаМаксимальная длина 42
    132Имя кассира 11строкаМаксимальная длина 42
    133Имя кассира 12строкаМаксимальная длина 42
    134Имя кассира 13строкаМаксимальная длина 42
    135Имя кассира 14строкаМаксимальная длина 42
    136Имя кассира 15строкаМаксимальная длина 42
    137Имя кассира 16строкаМаксимальная длина 42
    138Имя кассира 17строкаМаксимальная длина 42
    139Имя кассира 18строкаМаксимальная длина 42
    140Имя кассира 19строкаМаксимальная длина 42
    141Имя кассира 20строкаМаксимальная длина 42
    142Имя кассира 21строкаМаксимальная длина 42
    143Имя кассира 22строкаМаксимальная длина 42
    144Имя кассира 23строкаМаксимальная длина 42
    145Имя кассира 24строкаМаксимальная длина 42
    146Имя кассира 25строкаМаксимальная длина 42
    147Имя кассира 26строкаМаксимальная длина 42
    148Имя кассира 27строкаМаксимальная длина 42
    149Имя кассира 28строкаМаксимальная длина 42
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 42
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 42
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 42
    185Строка клише 2строкаМаксимальная длина 42
    186Строка клише 3строкаМаксимальная длина 42
    187Строка клише 4строкаМаксимальная длина 42
    188Строка клише 5строкаМаксимальная длина 42
    189Строка клише 6строкаМаксимальная длина 42
    190Строка клише 7строкаМаксимальная длина 42
    191Строка клише 8строкаМаксимальная длина 42
    192Строка клише 9строкаМаксимальная длина 42
    193Строка клише 10строкаМаксимальная длина 42
    194Строка клише 11строкаМаксимальная длина 42
    195Строка клише 12строкаМаксимальная длина 42
    196Строка клише 13строкаМаксимальная длина 42
    197Строка клише 14строкаМаксимальная длина 42
    198Строка клише 15строкаМаксимальная длина 42
    199Строка клише 16строкаМаксимальная длина 42
    200Строка клише 17строкаМаксимальная длина 42
    201Строка клише 18строкаМаксимальная длина 42
    202Строка клише 19строкаМаксимальная длина 42
    203Строка клише 20строкаМаксимальная длина 42
    204Наименование секции 1строкаМаксимальная длина 42
    205Наименование секции 2строкаМаксимальная длина 42
    206Наименование секции 3строкаМаксимальная длина 42
    207Наименование секции 4строкаМаксимальная длина 42
    208Наименование секции 5строкаМаксимальная длина 42
    209Наименование секции 6строкаМаксимальная длина 42
    210Наименование секции 7строкаМаксимальная длина 42
    211Наименование секции 8строкаМаксимальная длина 42
    212Наименование секции 9строкаМаксимальная длина 42
    213Наименование секции 10строкаМаксимальная длина 42
    214Наименование секции 11строкаМаксимальная длина 42
    215Наименование секции 12строкаМаксимальная длина 42
    216Наименование секции 13строкаМаксимальная длина 42
    217Наименование секции 14строкаМаксимальная длина 42
    218Наименование секции 15строкаМаксимальная длина 42
    219Наименование секции 16строкаМаксимальная длина 42
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    239Канал обмена с ККТчисло4 - USB
    5 - Bluetooth
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 42
    241Наименование способа расчета 3строкаМаксимальная длина 42
    242Наименование способа расчета 4строкаМаксимальная длина 42
    243Наименование способа расчета 5строкаМаксимальная длина 42
    244Наименование способа расчета 6строкаМаксимальная длина 42
    245Наименование способа расчета 7строкаМаксимальная длина 42
    246Наименование способа расчета 8строкаМаксимальная длина 42
    247Наименование способа расчета 9строкаМаксимальная длина 42
    248Наименование способа расчета 10строкаМаксимальная длина 42
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    3 - Wi-Fi
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 7
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ 20Ф (5.X)

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло0 .. 3
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 64
    270Пароль доступа к точке доступастрокаМаксимальная длина 64
    271Номер канала Wi-Fi в режиме точки доступачисло1 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    285Ширина бумагичисло0 - По умолчанию
    1 - 80мм
    2 - 57мм
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    296Ожидание подключения по Wi-Fi, с. (0 - деактивация)число0 .. 255
    297Ожидание подключения по GSM, с. (0 - деактивация)число0 .. 255
    298Ожидание подключения по Bluetooth, с. (0 - деактивация)число0 .. 255
    299Регистрировать секциичисло0 - Нет
    1 - Да
    300Включить отрезчикчисло0 - Нет
    1 - Да
    322Отрезать документы полностьючисло0 - Нет
    1 - Да
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    329IP-порт (Wi-Fi)число1 .. 65535
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено

    АТОЛ 20Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 64
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    66Отрезать чек после завершения документачисло0 - Не отрезать
    1 - Не полностью
    2 - Полностью
    67Запретить отрезку чековчисло0 - Нет
    1 - Да
    68Запретить отрезку отчетовчисло0 - Нет
    1 - Да
    69Отрезать ЧЛ после печати клише командой «Печать клише»число0 - Нет
    1 - Да
    75Расстояние от ножа отрезчика до гребенкичисло0 .. 255
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 64
    123Имя кассира 2строкаМаксимальная длина 64
    124Имя кассира 3строкаМаксимальная длина 64
    125Имя кассира 4строкаМаксимальная длина 64
    126Имя кассира 5строкаМаксимальная длина 64
    127Имя кассира 6строкаМаксимальная длина 64
    128Имя кассира 7строкаМаксимальная длина 64
    129Имя кассира 8строкаМаксимальная длина 64
    130Имя кассира 9строкаМаксимальная длина 64
    131Имя кассира 10строкаМаксимальная длина 64
    132Имя кассира 11строкаМаксимальная длина 64
    133Имя кассира 12строкаМаксимальная длина 64
    134Имя кассира 13строкаМаксимальная длина 64
    135Имя кассира 14строкаМаксимальная длина 64
    136Имя кассира 15строкаМаксимальная длина 64
    137Имя кассира 16строкаМаксимальная длина 64
    138Имя кассира 17строкаМаксимальная длина 64
    139Имя кассира 18строкаМаксимальная длина 64
    140Имя кассира 19строкаМаксимальная длина 64
    141Имя кассира 20строкаМаксимальная длина 64
    142Имя кассира 21строкаМаксимальная длина 64
    143Имя кассира 22строкаМаксимальная длина 64
    144Имя кассира 23строкаМаксимальная длина 64
    145Имя кассира 24строкаМаксимальная длина 64
    146Имя кассира 25строкаМаксимальная длина 64
    147Имя кассира 26строкаМаксимальная длина 64
    148Имя кассира 27строкаМаксимальная длина 64
    149Имя кассира 28строкаМаксимальная длина 64
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 64
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 64
    185Строка клише 2строкаМаксимальная длина 64
    186Строка клише 3строкаМаксимальная длина 64
    187Строка клише 4строкаМаксимальная длина 64
    188Строка клише 5строкаМаксимальная длина 64
    189Строка клише 6строкаМаксимальная длина 64
    190Строка клише 7строкаМаксимальная длина 64
    191Строка клише 8строкаМаксимальная длина 64
    192Строка клише 9строкаМаксимальная длина 64
    193Строка клише 10строкаМаксимальная длина 64
    194Строка клише 11строкаМаксимальная длина 64
    195Строка клише 12строкаМаксимальная длина 64
    196Строка клише 13строкаМаксимальная длина 64
    197Строка клише 14строкаМаксимальная длина 64
    198Строка клише 15строкаМаксимальная длина 64
    199Строка клише 16строкаМаксимальная длина 64
    200Строка клише 17строкаМаксимальная длина 64
    201Строка клише 18строкаМаксимальная длина 64
    202Строка клише 19строкаМаксимальная длина 64
    203Строка клише 20строкаМаксимальная длина 64
    204Наименование секции 1строкаМаксимальная длина 64
    205Наименование секции 2строкаМаксимальная длина 64
    206Наименование секции 3строкаМаксимальная длина 64
    207Наименование секции 4строкаМаксимальная длина 64
    208Наименование секции 5строкаМаксимальная длина 64
    209Наименование секции 6строкаМаксимальная длина 64
    210Наименование секции 7строкаМаксимальная длина 64
    211Наименование секции 8строкаМаксимальная длина 64
    212Наименование секции 9строкаМаксимальная длина 64
    213Наименование секции 10строкаМаксимальная длина 64
    214Наименование секции 11строкаМаксимальная длина 64
    215Наименование секции 12строкаМаксимальная длина 64
    216Наименование секции 13строкаМаксимальная длина 64
    217Наименование секции 14строкаМаксимальная длина 64
    218Наименование секции 15строкаМаксимальная длина 64
    219Наименование секции 16строкаМаксимальная длина 64
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    238Скорость подключенного устройствачисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    14400 - 14400 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    239Канал обмена с ККТчисло4 - USB
    5 - Bluetooth
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 64
    241Наименование способа расчета 3строкаМаксимальная длина 64
    242Наименование способа расчета 4строкаМаксимальная длина 64
    243Наименование способа расчета 5строкаМаксимальная длина 64
    244Наименование способа расчета 6строкаМаксимальная длина 64
    245Наименование способа расчета 7строкаМаксимальная длина 64
    246Наименование способа расчета 8строкаМаксимальная длина 64
    247Наименование способа расчета 9строкаМаксимальная длина 64
    248Наименование способа расчета 10строкаМаксимальная длина 64
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 7
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ 22Ф (5.X)

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло0 .. 3
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    236Скорость ККТчисло4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    230400 - 230400 бод
    460800 - 460800 бод
    921600 - 921600 бод
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 64
    270Пароль доступа к точке доступастрокаМаксимальная длина 64
    271Номер канала Wi-Fi в режиме точки доступачисло1 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    283Получение адреса DNSчисло0 - Автоматически
    1 - Вручную
    284Адрес DNSстрокаМаксимальная длина 15
    285Ширина бумагичисло0 - По умолчанию
    1 - 80мм
    2 - 57мм
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    294Использовать RS232число0 - Нет
    1 - Да
    295Ожидание получения сетевых настроек по Ethernet, с. (0 - деактивация)число0 .. 255
    296Ожидание подключения по Wi-Fi, с. (0 - деактивация)число0 .. 255
    297Ожидание подключения по GSM, с. (0 - деактивация)число0 .. 255
    298Ожидание подключения по Bluetooth, с. (0 - деактивация)число0 .. 255
    299Регистрировать секциичисло0 - Нет
    1 - Да
    300Включить отрезчикчисло0 - Нет
    1 - Да
    322Отрезать документы полностьючисло0 - Нет
    1 - Да
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    329IP-порт (Wi-Fi)число1 .. 65535
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено

    АТОЛ 22Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 64
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    66Отрезать чек после завершения документачисло0 - Не отрезать
    1 - Не полностью
    2 - Полностью
    67Запретить отрезку чековчисло0 - Нет
    1 - Да
    68Запретить отрезку отчетовчисло0 - Нет
    1 - Да
    69Отрезать ЧЛ после печати клише командой «Печать клише»число0 - Нет
    1 - Да
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    75Расстояние от ножа отрезчика до гребенкичисло0 .. 255
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 64
    123Имя кассира 2строкаМаксимальная длина 64
    124Имя кассира 3строкаМаксимальная длина 64
    125Имя кассира 4строкаМаксимальная длина 64
    126Имя кассира 5строкаМаксимальная длина 64
    127Имя кассира 6строкаМаксимальная длина 64
    128Имя кассира 7строкаМаксимальная длина 64
    129Имя кассира 8строкаМаксимальная длина 64
    130Имя кассира 9строкаМаксимальная длина 64
    131Имя кассира 10строкаМаксимальная длина 64
    132Имя кассира 11строкаМаксимальная длина 64
    133Имя кассира 12строкаМаксимальная длина 64
    134Имя кассира 13строкаМаксимальная длина 64
    135Имя кассира 14строкаМаксимальная длина 64
    136Имя кассира 15строкаМаксимальная длина 64
    137Имя кассира 16строкаМаксимальная длина 64
    138Имя кассира 17строкаМаксимальная длина 64
    139Имя кассира 18строкаМаксимальная длина 64
    140Имя кассира 19строкаМаксимальная длина 64
    141Имя кассира 20строкаМаксимальная длина 64
    142Имя кассира 21строкаМаксимальная длина 64
    143Имя кассира 22строкаМаксимальная длина 64
    144Имя кассира 23строкаМаксимальная длина 64
    145Имя кассира 24строкаМаксимальная длина 64
    146Имя кассира 25строкаМаксимальная длина 64
    147Имя кассира 26строкаМаксимальная длина 64
    148Имя кассира 27строкаМаксимальная длина 64
    149Имя кассира 28строкаМаксимальная длина 64
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 64
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 64
    185Строка клише 2строкаМаксимальная длина 64
    186Строка клише 3строкаМаксимальная длина 64
    187Строка клише 4строкаМаксимальная длина 64
    188Строка клише 5строкаМаксимальная длина 64
    189Строка клише 6строкаМаксимальная длина 64
    190Строка клише 7строкаМаксимальная длина 64
    191Строка клише 8строкаМаксимальная длина 64
    192Строка клише 9строкаМаксимальная длина 64
    193Строка клише 10строкаМаксимальная длина 64
    194Строка клише 11строкаМаксимальная длина 64
    195Строка клише 12строкаМаксимальная длина 64
    196Строка клише 13строкаМаксимальная длина 64
    197Строка клише 14строкаМаксимальная длина 64
    198Строка клише 15строкаМаксимальная длина 64
    199Строка клише 16строкаМаксимальная длина 64
    200Строка клише 17строкаМаксимальная длина 64
    201Строка клише 18строкаМаксимальная длина 64
    202Строка клише 19строкаМаксимальная длина 64
    203Строка клише 20строкаМаксимальная длина 64
    204Наименование секции 1строкаМаксимальная длина 64
    205Наименование секции 2строкаМаксимальная длина 64
    206Наименование секции 3строкаМаксимальная длина 64
    207Наименование секции 4строкаМаксимальная длина 64
    208Наименование секции 5строкаМаксимальная длина 64
    209Наименование секции 6строкаМаксимальная длина 64
    210Наименование секции 7строкаМаксимальная длина 64
    211Наименование секции 8строкаМаксимальная длина 64
    212Наименование секции 9строкаМаксимальная длина 64
    213Наименование секции 10строкаМаксимальная длина 64
    214Наименование секции 11строкаМаксимальная длина 64
    215Наименование секции 12строкаМаксимальная длина 64
    216Наименование секции 13строкаМаксимальная длина 64
    217Наименование секции 14строкаМаксимальная длина 64
    218Наименование секции 15строкаМаксимальная длина 64
    219Наименование секции 16строкаМаксимальная длина 64
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    236Скорость ККТчисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    238Скорость подключенного устройствачисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    14400 - 14400 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    239Канал обмена с ККТчисло0 - RS-232
    4 - USB
    5 - Bluetooth
    6 - Ethernet
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 64
    241Наименование способа расчета 3строкаМаксимальная длина 64
    242Наименование способа расчета 4строкаМаксимальная длина 64
    243Наименование способа расчета 5строкаМаксимальная длина 64
    244Наименование способа расчета 6строкаМаксимальная длина 64
    245Наименование способа расчета 7строкаМаксимальная длина 64
    246Наименование способа расчета 8строкаМаксимальная длина 64
    247Наименование способа расчета 9строкаМаксимальная длина 64
    248Наименование способа расчета 10строкаМаксимальная длина 64
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 7
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ 25Ф (5.X)

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло0 .. 3
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    236Скорость ККТчисло4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    230400 - 230400 бод
    460800 - 460800 бод
    921600 - 921600 бод
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 64
    270Пароль доступа к точке доступастрокаМаксимальная длина 64
    271Номер канала Wi-Fi в режиме точки доступачисло1 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    283Получение адреса DNSчисло0 - Автоматически
    1 - Вручную
    284Адрес DNSстрокаМаксимальная длина 15
    285Ширина бумагичисло0 - По умолчанию
    1 - 80мм
    2 - 57мм
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    294Использовать RS232число0 - Нет
    1 - Да
    295Ожидание получения сетевых настроек по Ethernet, с. (0 - деактивация)число0 .. 255
    296Ожидание подключения по Wi-Fi, с. (0 - деактивация)число0 .. 255
    297Ожидание подключения по GSM, с. (0 - деактивация)число0 .. 255
    298Ожидание подключения по Bluetooth, с. (0 - деактивация)число0 .. 255
    299Регистрировать секциичисло0 - Нет
    1 - Да
    300Включить отрезчикчисло0 - Нет
    1 - Да
    322Отрезать документы полностьючисло0 - Нет
    1 - Да
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    329IP-порт (Wi-Fi)число1 .. 65535
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено

    АТОЛ 25Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 64
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    66Отрезать чек после завершения документачисло0 - Не отрезать
    1 - Не полностью
    2 - Полностью
    67Запретить отрезку чековчисло0 - Нет
    1 - Да
    68Запретить отрезку отчетовчисло0 - Нет
    1 - Да
    69Отрезать ЧЛ после печати клише командой «Печать клише»число0 - Нет
    1 - Да
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    75Расстояние от ножа отрезчика до гребенкичисло0 .. 255
    76Выключение / перезагрузка ККТчисло0 - По кнопке
    1 - По команде
    2 - По кнопке и по команде
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 64
    123Имя кассира 2строкаМаксимальная длина 64
    124Имя кассира 3строкаМаксимальная длина 64
    125Имя кассира 4строкаМаксимальная длина 64
    126Имя кассира 5строкаМаксимальная длина 64
    127Имя кассира 6строкаМаксимальная длина 64
    128Имя кассира 7строкаМаксимальная длина 64
    129Имя кассира 8строкаМаксимальная длина 64
    130Имя кассира 9строкаМаксимальная длина 64
    131Имя кассира 10строкаМаксимальная длина 64
    132Имя кассира 11строкаМаксимальная длина 64
    133Имя кассира 12строкаМаксимальная длина 64
    134Имя кассира 13строкаМаксимальная длина 64
    135Имя кассира 14строкаМаксимальная длина 64
    136Имя кассира 15строкаМаксимальная длина 64
    137Имя кассира 16строкаМаксимальная длина 64
    138Имя кассира 17строкаМаксимальная длина 64
    139Имя кассира 18строкаМаксимальная длина 64
    140Имя кассира 19строкаМаксимальная длина 64
    141Имя кассира 20строкаМаксимальная длина 64
    142Имя кассира 21строкаМаксимальная длина 64
    143Имя кассира 22строкаМаксимальная длина 64
    144Имя кассира 23строкаМаксимальная длина 64
    145Имя кассира 24строкаМаксимальная длина 64
    146Имя кассира 25строкаМаксимальная длина 64
    147Имя кассира 26строкаМаксимальная длина 64
    148Имя кассира 27строкаМаксимальная длина 64
    149Имя кассира 28строкаМаксимальная длина 64
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 64
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 64
    185Строка клише 2строкаМаксимальная длина 64
    186Строка клише 3строкаМаксимальная длина 64
    187Строка клише 4строкаМаксимальная длина 64
    188Строка клише 5строкаМаксимальная длина 64
    189Строка клише 6строкаМаксимальная длина 64
    190Строка клише 7строкаМаксимальная длина 64
    191Строка клише 8строкаМаксимальная длина 64
    192Строка клише 9строкаМаксимальная длина 64
    193Строка клише 10строкаМаксимальная длина 64
    194Строка клише 11строкаМаксимальная длина 64
    195Строка клише 12строкаМаксимальная длина 64
    196Строка клише 13строкаМаксимальная длина 64
    197Строка клише 14строкаМаксимальная длина 64
    198Строка клише 15строкаМаксимальная длина 64
    199Строка клише 16строкаМаксимальная длина 64
    200Строка клише 17строкаМаксимальная длина 64
    201Строка клише 18строкаМаксимальная длина 64
    202Строка клише 19строкаМаксимальная длина 64
    203Строка клише 20строкаМаксимальная длина 64
    204Наименование секции 1строкаМаксимальная длина 64
    205Наименование секции 2строкаМаксимальная длина 64
    206Наименование секции 3строкаМаксимальная длина 64
    207Наименование секции 4строкаМаксимальная длина 64
    208Наименование секции 5строкаМаксимальная длина 64
    209Наименование секции 6строкаМаксимальная длина 64
    210Наименование секции 7строкаМаксимальная длина 64
    211Наименование секции 8строкаМаксимальная длина 64
    212Наименование секции 9строкаМаксимальная длина 64
    213Наименование секции 10строкаМаксимальная длина 64
    214Наименование секции 11строкаМаксимальная длина 64
    215Наименование секции 12строкаМаксимальная длина 64
    216Наименование секции 13строкаМаксимальная длина 64
    217Наименование секции 14строкаМаксимальная длина 64
    218Наименование секции 15строкаМаксимальная длина 64
    219Наименование секции 16строкаМаксимальная длина 64
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    236Скорость ККТчисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    238Скорость подключенного устройствачисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    14400 - 14400 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    239Канал обмена с ККТчисло0 - RS-232
    4 - USB
    5 - Bluetooth
    6 - Ethernet
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 64
    241Наименование способа расчета 3строкаМаксимальная длина 64
    242Наименование способа расчета 4строкаМаксимальная длина 64
    243Наименование способа расчета 5строкаМаксимальная длина 64
    244Наименование способа расчета 6строкаМаксимальная длина 64
    245Наименование способа расчета 7строкаМаксимальная длина 64
    246Наименование способа расчета 8строкаМаксимальная длина 64
    247Наименование способа расчета 9строкаМаксимальная длина 64
    248Наименование способа расчета 10строкаМаксимальная длина 64
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 7
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ 27Ф

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло0 .. 3
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    236Скорость ККТчисло4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    230400 - 230400 бод
    460800 - 460800 бод
    921600 - 921600 бод
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 64
    270Пароль доступа к точке доступастрокаМаксимальная длина 64
    271Номер канала Wi-Fi в режиме точки доступачисло1 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    283Получение адреса DNSчисло0 - Автоматически
    1 - Вручную
    284Адрес DNSстрокаМаксимальная длина 15
    285Ширина бумагичисло0 - По умолчанию
    1 - 80мм
    2 - 57мм
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    294Использовать RS232число0 - Нет
    1 - Да
    295Ожидание получения сетевых настроек по Ethernet, с. (0 - деактивация)число0 .. 255
    296Ожидание подключения по Wi-Fi, с. (0 - деактивация)число0 .. 255
    297Ожидание подключения по GSM, с. (0 - деактивация)число0 .. 255
    298Ожидание подключения по Bluetooth, с. (0 - деактивация)число0 .. 255
    299Регистрировать секциичисло0 - Нет
    1 - Да
    300Включить отрезчикчисло0 - Нет
    1 - Да
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    329IP-порт (Wi-Fi)число1 .. 65535
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено

    АТОЛ 30Ф (5.X)

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло0 .. 3
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 64
    270Пароль доступа к точке доступастрокаМаксимальная длина 64
    271Номер канала Wi-Fi в режиме точки доступачисло1 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    296Ожидание подключения по Wi-Fi, с. (0 - деактивация)число0 .. 255
    297Ожидание подключения по GSM, с. (0 - деактивация)число0 .. 255
    298Ожидание подключения по Bluetooth, с. (0 - деактивация)число0 .. 255
    299Регистрировать секциичисло0 - Нет
    1 - Да
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    329IP-порт (Wi-Fi)число1 .. 65535
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено

    АТОЛ 30Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 64
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 42
    123Имя кассира 2строкаМаксимальная длина 42
    124Имя кассира 3строкаМаксимальная длина 42
    125Имя кассира 4строкаМаксимальная длина 42
    126Имя кассира 5строкаМаксимальная длина 42
    127Имя кассира 6строкаМаксимальная длина 42
    128Имя кассира 7строкаМаксимальная длина 42
    129Имя кассира 8строкаМаксимальная длина 42
    130Имя кассира 9строкаМаксимальная длина 42
    131Имя кассира 10строкаМаксимальная длина 42
    132Имя кассира 11строкаМаксимальная длина 42
    133Имя кассира 12строкаМаксимальная длина 42
    134Имя кассира 13строкаМаксимальная длина 42
    135Имя кассира 14строкаМаксимальная длина 42
    136Имя кассира 15строкаМаксимальная длина 42
    137Имя кассира 16строкаМаксимальная длина 42
    138Имя кассира 17строкаМаксимальная длина 42
    139Имя кассира 18строкаМаксимальная длина 42
    140Имя кассира 19строкаМаксимальная длина 42
    141Имя кассира 20строкаМаксимальная длина 42
    142Имя кассира 21строкаМаксимальная длина 42
    143Имя кассира 22строкаМаксимальная длина 42
    144Имя кассира 23строкаМаксимальная длина 42
    145Имя кассира 24строкаМаксимальная длина 42
    146Имя кассира 25строкаМаксимальная длина 42
    147Имя кассира 26строкаМаксимальная длина 42
    148Имя кассира 27строкаМаксимальная длина 42
    149Имя кассира 28строкаМаксимальная длина 42
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 42
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 42
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 42
    185Строка клише 2строкаМаксимальная длина 42
    186Строка клише 3строкаМаксимальная длина 42
    187Строка клише 4строкаМаксимальная длина 42
    188Строка клише 5строкаМаксимальная длина 42
    189Строка клише 6строкаМаксимальная длина 42
    190Строка клише 7строкаМаксимальная длина 42
    191Строка клише 8строкаМаксимальная длина 42
    192Строка клише 9строкаМаксимальная длина 42
    193Строка клише 10строкаМаксимальная длина 42
    194Строка клише 11строкаМаксимальная длина 42
    195Строка клише 12строкаМаксимальная длина 42
    196Строка клише 13строкаМаксимальная длина 42
    197Строка клише 14строкаМаксимальная длина 42
    198Строка клише 15строкаМаксимальная длина 42
    199Строка клише 16строкаМаксимальная длина 42
    200Строка клише 17строкаМаксимальная длина 42
    201Строка клише 18строкаМаксимальная длина 42
    202Строка клише 19строкаМаксимальная длина 42
    203Строка клише 20строкаМаксимальная длина 42
    204Наименование секции 1строкаМаксимальная длина 42
    205Наименование секции 2строкаМаксимальная длина 42
    206Наименование секции 3строкаМаксимальная длина 42
    207Наименование секции 4строкаМаксимальная длина 42
    208Наименование секции 5строкаМаксимальная длина 42
    209Наименование секции 6строкаМаксимальная длина 42
    210Наименование секции 7строкаМаксимальная длина 42
    211Наименование секции 8строкаМаксимальная длина 42
    212Наименование секции 9строкаМаксимальная длина 42
    213Наименование секции 10строкаМаксимальная длина 42
    214Наименование секции 11строкаМаксимальная длина 42
    215Наименование секции 12строкаМаксимальная длина 42
    216Наименование секции 13строкаМаксимальная длина 42
    217Наименование секции 14строкаМаксимальная длина 42
    218Наименование секции 15строкаМаксимальная длина 42
    219Наименование секции 16строкаМаксимальная длина 42
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    239Канал обмена с ККТчисло4 - USB
    5 - Bluetooth
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 42
    241Наименование способа расчета 3строкаМаксимальная длина 42
    242Наименование способа расчета 4строкаМаксимальная длина 42
    243Наименование способа расчета 5строкаМаксимальная длина 42
    244Наименование способа расчета 6строкаМаксимальная длина 42
    245Наименование способа расчета 7строкаМаксимальная длина 42
    246Наименование способа расчета 8строкаМаксимальная длина 42
    247Наименование способа расчета 9строкаМаксимальная длина 42
    248Наименование способа расчета 10строкаМаксимальная длина 42
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 7
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ 42ФС

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 57
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    76Выключение / перезагрузка ККТчисло0 - По кнопке
    1 - По команде
    2 - По кнопке и по команде
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 57
    123Имя кассира 2строкаМаксимальная длина 57
    124Имя кассира 3строкаМаксимальная длина 57
    125Имя кассира 4строкаМаксимальная длина 57
    126Имя кассира 5строкаМаксимальная длина 57
    127Имя кассира 6строкаМаксимальная длина 57
    128Имя кассира 7строкаМаксимальная длина 57
    129Имя кассира 8строкаМаксимальная длина 57
    130Имя кассира 9строкаМаксимальная длина 57
    131Имя кассира 10строкаМаксимальная длина 57
    132Имя кассира 11строкаМаксимальная длина 57
    133Имя кассира 12строкаМаксимальная длина 57
    134Имя кассира 13строкаМаксимальная длина 57
    135Имя кассира 14строкаМаксимальная длина 57
    136Имя кассира 15строкаМаксимальная длина 57
    137Имя кассира 16строкаМаксимальная длина 57
    138Имя кассира 17строкаМаксимальная длина 57
    139Имя кассира 18строкаМаксимальная длина 57
    140Имя кассира 19строкаМаксимальная длина 57
    141Имя кассира 20строкаМаксимальная длина 57
    142Имя кассира 21строкаМаксимальная длина 57
    143Имя кассира 22строкаМаксимальная длина 57
    144Имя кассира 23строкаМаксимальная длина 57
    145Имя кассира 24строкаМаксимальная длина 57
    146Имя кассира 25строкаМаксимальная длина 57
    147Имя кассира 26строкаМаксимальная длина 57
    148Имя кассира 27строкаМаксимальная длина 57
    149Имя кассира 28строкаМаксимальная длина 57
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 57
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 57
    183ИНН системного администраторастрокаМаксимальная длина 12
    204Наименование секции 1строкаМаксимальная длина 57
    205Наименование секции 2строкаМаксимальная длина 57
    206Наименование секции 3строкаМаксимальная длина 57
    207Наименование секции 4строкаМаксимальная длина 57
    208Наименование секции 5строкаМаксимальная длина 57
    209Наименование секции 6строкаМаксимальная длина 57
    210Наименование секции 7строкаМаксимальная длина 57
    211Наименование секции 8строкаМаксимальная длина 57
    212Наименование секции 9строкаМаксимальная длина 57
    213Наименование секции 10строкаМаксимальная длина 57
    214Наименование секции 11строкаМаксимальная длина 57
    215Наименование секции 12строкаМаксимальная длина 57
    216Наименование секции 13строкаМаксимальная длина 57
    217Наименование секции 14строкаМаксимальная длина 57
    218Наименование секции 15строкаМаксимальная длина 57
    219Наименование секции 16строкаМаксимальная длина 57
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    239Канал обмена с ККТчисло4 - USB
    6 - Ethernet
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 57
    241Наименование способа расчета 3строкаМаксимальная длина 57
    242Наименование способа расчета 4строкаМаксимальная длина 57
    243Наименование способа расчета 5строкаМаксимальная длина 57
    244Наименование способа расчета 6строкаМаксимальная длина 57
    245Наименование способа расчета 7строкаМаксимальная длина 57
    246Наименование способа расчета 8строкаМаксимальная длина 57
    247Наименование способа расчета 9строкаМаксимальная длина 57
    248Наименование способа расчета 10строкаМаксимальная длина 57
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    330Шрифт реквизитов в чекечисло1 .. 7

    АТОЛ 50Ф (5.X)

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло0 .. 3
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 64
    270Пароль доступа к точке доступастрокаМаксимальная длина 64
    271Номер канала Wi-Fi в режиме точки доступачисло1 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    285Ширина бумагичисло0 - По умолчанию
    1 - 80мм
    2 - 57мм
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    296Ожидание подключения по Wi-Fi, с. (0 - деактивация)число0 .. 255
    297Ожидание подключения по GSM, с. (0 - деактивация)число0 .. 255
    298Ожидание подключения по Bluetooth, с. (0 - деактивация)число0 .. 255
    299Регистрировать секциичисло0 - Нет
    1 - Да
    300Включить отрезчикчисло0 - Нет
    1 - Да
    322Отрезать документы полностьючисло0 - Нет
    1 - Да
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    329IP-порт (Wi-Fi)число1 .. 65535
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено

    АТОЛ 50Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 64
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    66Отрезать чек после завершения документачисло0 - Не отрезать
    1 - Не полностью
    2 - Полностью
    67Запретить отрезку чековчисло0 - Нет
    1 - Да
    68Запретить отрезку отчетовчисло0 - Нет
    1 - Да
    69Отрезать ЧЛ после печати клише командой «Печать клише»число0 - Нет
    1 - Да
    75Расстояние от ножа отрезчика до гребенкичисло0 .. 255
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 48
    123Имя кассира 2строкаМаксимальная длина 48
    124Имя кассира 3строкаМаксимальная длина 48
    125Имя кассира 4строкаМаксимальная длина 48
    126Имя кассира 5строкаМаксимальная длина 48
    127Имя кассира 6строкаМаксимальная длина 48
    128Имя кассира 7строкаМаксимальная длина 48
    129Имя кассира 8строкаМаксимальная длина 48
    130Имя кассира 9строкаМаксимальная длина 48
    131Имя кассира 10строкаМаксимальная длина 48
    132Имя кассира 11строкаМаксимальная длина 48
    133Имя кассира 12строкаМаксимальная длина 48
    134Имя кассира 13строкаМаксимальная длина 48
    135Имя кассира 14строкаМаксимальная длина 48
    136Имя кассира 15строкаМаксимальная длина 48
    137Имя кассира 16строкаМаксимальная длина 48
    138Имя кассира 17строкаМаксимальная длина 48
    139Имя кассира 18строкаМаксимальная длина 48
    140Имя кассира 19строкаМаксимальная длина 48
    141Имя кассира 20строкаМаксимальная длина 48
    142Имя кассира 21строкаМаксимальная длина 48
    143Имя кассира 22строкаМаксимальная длина 48
    144Имя кассира 23строкаМаксимальная длина 48
    145Имя кассира 24строкаМаксимальная длина 48
    146Имя кассира 25строкаМаксимальная длина 48
    147Имя кассира 26строкаМаксимальная длина 48
    148Имя кассира 27строкаМаксимальная длина 48
    149Имя кассира 28строкаМаксимальная длина 48
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 48
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 48
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 48
    185Строка клише 2строкаМаксимальная длина 48
    186Строка клише 3строкаМаксимальная длина 48
    187Строка клише 4строкаМаксимальная длина 48
    188Строка клише 5строкаМаксимальная длина 48
    189Строка клише 6строкаМаксимальная длина 48
    190Строка клише 7строкаМаксимальная длина 48
    191Строка клише 8строкаМаксимальная длина 48
    192Строка клише 9строкаМаксимальная длина 48
    193Строка клише 10строкаМаксимальная длина 48
    194Строка клише 11строкаМаксимальная длина 48
    195Строка клише 12строкаМаксимальная длина 48
    196Строка клише 13строкаМаксимальная длина 48
    197Строка клише 14строкаМаксимальная длина 48
    198Строка клише 15строкаМаксимальная длина 48
    199Строка клише 16строкаМаксимальная длина 48
    200Строка клише 17строкаМаксимальная длина 48
    201Строка клише 18строкаМаксимальная длина 48
    202Строка клише 19строкаМаксимальная длина 48
    203Строка клише 20строкаМаксимальная длина 48
    204Наименование секции 1строкаМаксимальная длина 48
    205Наименование секции 2строкаМаксимальная длина 48
    206Наименование секции 3строкаМаксимальная длина 48
    207Наименование секции 4строкаМаксимальная длина 48
    208Наименование секции 5строкаМаксимальная длина 48
    209Наименование секции 6строкаМаксимальная длина 48
    210Наименование секции 7строкаМаксимальная длина 48
    211Наименование секции 8строкаМаксимальная длина 48
    212Наименование секции 9строкаМаксимальная длина 48
    213Наименование секции 10строкаМаксимальная длина 48
    214Наименование секции 11строкаМаксимальная длина 48
    215Наименование секции 12строкаМаксимальная длина 48
    216Наименование секции 13строкаМаксимальная длина 48
    217Наименование секции 14строкаМаксимальная длина 48
    218Наименование секции 15строкаМаксимальная длина 48
    219Наименование секции 16строкаМаксимальная длина 48
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    238Скорость подключенного устройствачисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    14400 - 14400 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    239Канал обмена с ККТчисло4 - USB
    5 - Bluetooth
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 48
    241Наименование способа расчета 3строкаМаксимальная длина 48
    242Наименование способа расчета 4строкаМаксимальная длина 48
    243Наименование способа расчета 5строкаМаксимальная длина 48
    244Наименование способа расчета 6строкаМаксимальная длина 48
    245Наименование способа расчета 7строкаМаксимальная длина 48
    246Наименование способа расчета 8строкаМаксимальная длина 48
    247Наименование способа расчета 9строкаМаксимальная длина 48
    248Наименование способа расчета 10строкаМаксимальная длина 48
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 7
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ 52Ф (5.X)

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло0 .. 3
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    236Скорость ККТчисло4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    230400 - 230400 бод
    460800 - 460800 бод
    921600 - 921600 бод
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 64
    270Пароль доступа к точке доступастрокаМаксимальная длина 64
    271Номер канала Wi-Fi в режиме точки доступачисло1 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    283Получение адреса DNSчисло0 - Автоматически
    1 - Вручную
    284Адрес DNSстрокаМаксимальная длина 15
    285Ширина бумагичисло0 - По умолчанию
    1 - 80мм
    2 - 57мм
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    294Использовать RS232число0 - Нет
    1 - Да
    295Ожидание получения сетевых настроек по Ethernet, с. (0 - деактивация)число0 .. 255
    296Ожидание подключения по Wi-Fi, с. (0 - деактивация)число0 .. 255
    297Ожидание подключения по GSM, с. (0 - деактивация)число0 .. 255
    298Ожидание подключения по Bluetooth, с. (0 - деактивация)число0 .. 255
    299Регистрировать секциичисло0 - Нет
    1 - Да
    300Включить отрезчикчисло0 - Нет
    1 - Да
    322Отрезать документы полностьючисло0 - Нет
    1 - Да
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    329IP-порт (Wi-Fi)число1 .. 65535
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено

    АТОЛ 52Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 64
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    66Отрезать чек после завершения документачисло0 - Не отрезать
    1 - Не полностью
    2 - Полностью
    67Запретить отрезку чековчисло0 - Нет
    1 - Да
    68Запретить отрезку отчетовчисло0 - Нет
    1 - Да
    69Отрезать ЧЛ после печати клише командой «Печать клише»число0 - Нет
    1 - Да
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    75Расстояние от ножа отрезчика до гребенкичисло0 .. 255
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 48
    123Имя кассира 2строкаМаксимальная длина 48
    124Имя кассира 3строкаМаксимальная длина 48
    125Имя кассира 4строкаМаксимальная длина 48
    126Имя кассира 5строкаМаксимальная длина 48
    127Имя кассира 6строкаМаксимальная длина 48
    128Имя кассира 7строкаМаксимальная длина 48
    129Имя кассира 8строкаМаксимальная длина 48
    130Имя кассира 9строкаМаксимальная длина 48
    131Имя кассира 10строкаМаксимальная длина 48
    132Имя кассира 11строкаМаксимальная длина 48
    133Имя кассира 12строкаМаксимальная длина 48
    134Имя кассира 13строкаМаксимальная длина 48
    135Имя кассира 14строкаМаксимальная длина 48
    136Имя кассира 15строкаМаксимальная длина 48
    137Имя кассира 16строкаМаксимальная длина 48
    138Имя кассира 17строкаМаксимальная длина 48
    139Имя кассира 18строкаМаксимальная длина 48
    140Имя кассира 19строкаМаксимальная длина 48
    141Имя кассира 20строкаМаксимальная длина 48
    142Имя кассира 21строкаМаксимальная длина 48
    143Имя кассира 22строкаМаксимальная длина 48
    144Имя кассира 23строкаМаксимальная длина 48
    145Имя кассира 24строкаМаксимальная длина 48
    146Имя кассира 25строкаМаксимальная длина 48
    147Имя кассира 26строкаМаксимальная длина 48
    148Имя кассира 27строкаМаксимальная длина 48
    149Имя кассира 28строкаМаксимальная длина 48
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 48
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 48
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 48
    185Строка клише 2строкаМаксимальная длина 48
    186Строка клише 3строкаМаксимальная длина 48
    187Строка клише 4строкаМаксимальная длина 48
    188Строка клише 5строкаМаксимальная длина 48
    189Строка клише 6строкаМаксимальная длина 48
    190Строка клише 7строкаМаксимальная длина 48
    191Строка клише 8строкаМаксимальная длина 48
    192Строка клише 9строкаМаксимальная длина 48
    193Строка клише 10строкаМаксимальная длина 48
    194Строка клише 11строкаМаксимальная длина 48
    195Строка клише 12строкаМаксимальная длина 48
    196Строка клише 13строкаМаксимальная длина 48
    197Строка клише 14строкаМаксимальная длина 48
    198Строка клише 15строкаМаксимальная длина 48
    199Строка клише 16строкаМаксимальная длина 48
    200Строка клише 17строкаМаксимальная длина 48
    201Строка клише 18строкаМаксимальная длина 48
    202Строка клише 19строкаМаксимальная длина 48
    203Строка клише 20строкаМаксимальная длина 48
    204Наименование секции 1строкаМаксимальная длина 48
    205Наименование секции 2строкаМаксимальная длина 48
    206Наименование секции 3строкаМаксимальная длина 48
    207Наименование секции 4строкаМаксимальная длина 48
    208Наименование секции 5строкаМаксимальная длина 48
    209Наименование секции 6строкаМаксимальная длина 48
    210Наименование секции 7строкаМаксимальная длина 48
    211Наименование секции 8строкаМаксимальная длина 48
    212Наименование секции 9строкаМаксимальная длина 48
    213Наименование секции 10строкаМаксимальная длина 48
    214Наименование секции 11строкаМаксимальная длина 48
    215Наименование секции 12строкаМаксимальная длина 48
    216Наименование секции 13строкаМаксимальная длина 48
    217Наименование секции 14строкаМаксимальная длина 48
    218Наименование секции 15строкаМаксимальная длина 48
    219Наименование секции 16строкаМаксимальная длина 48
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    236Скорость ККТчисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    238Скорость подключенного устройствачисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    14400 - 14400 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    239Канал обмена с ККТчисло0 - RS-232
    4 - USB
    5 - Bluetooth
    6 - Ethernet
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 48
    241Наименование способа расчета 3строкаМаксимальная длина 48
    242Наименование способа расчета 4строкаМаксимальная длина 48
    243Наименование способа расчета 5строкаМаксимальная длина 48
    244Наименование способа расчета 6строкаМаксимальная длина 48
    245Наименование способа расчета 7строкаМаксимальная длина 48
    246Наименование способа расчета 8строкаМаксимальная длина 48
    247Наименование способа расчета 9строкаМаксимальная длина 48
    248Наименование способа расчета 10строкаМаксимальная длина 48
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 7
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ 55Ф (5.X)

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло0 .. 3
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    236Скорость ККТчисло4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    230400 - 230400 бод
    460800 - 460800 бод
    921600 - 921600 бод
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 64
    270Пароль доступа к точке доступастрокаМаксимальная длина 64
    271Номер канала Wi-Fi в режиме точки доступачисло1 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    283Получение адреса DNSчисло0 - Автоматически
    1 - Вручную
    284Адрес DNSстрокаМаксимальная длина 15
    285Ширина бумагичисло0 - По умолчанию
    1 - 80мм
    2 - 57мм
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    294Использовать RS232число0 - Нет
    1 - Да
    295Ожидание получения сетевых настроек по Ethernet, с. (0 - деактивация)число0 .. 255
    296Ожидание подключения по Wi-Fi, с. (0 - деактивация)число0 .. 255
    297Ожидание подключения по GSM, с. (0 - деактивация)число0 .. 255
    298Ожидание подключения по Bluetooth, с. (0 - деактивация)число0 .. 255
    299Регистрировать секциичисло0 - Нет
    1 - Да
    300Включить отрезчикчисло0 - Нет
    1 - Да
    322Отрезать документы полностьючисло0 - Нет
    1 - Да
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    329IP-порт (Wi-Fi)число1 .. 65535
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено

    АТОЛ 55Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 64
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    66Отрезать чек после завершения документачисло0 - Не отрезать
    1 - Не полностью
    2 - Полностью
    67Запретить отрезку чековчисло0 - Нет
    1 - Да
    68Запретить отрезку отчетовчисло0 - Нет
    1 - Да
    69Отрезать ЧЛ после печати клише командой «Печать клише»число0 - Нет
    1 - Да
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    75Расстояние от ножа отрезчика до гребенкичисло0 .. 255
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 48
    123Имя кассира 2строкаМаксимальная длина 48
    124Имя кассира 3строкаМаксимальная длина 48
    125Имя кассира 4строкаМаксимальная длина 48
    126Имя кассира 5строкаМаксимальная длина 48
    127Имя кассира 6строкаМаксимальная длина 48
    128Имя кассира 7строкаМаксимальная длина 48
    129Имя кассира 8строкаМаксимальная длина 48
    130Имя кассира 9строкаМаксимальная длина 48
    131Имя кассира 10строкаМаксимальная длина 48
    132Имя кассира 11строкаМаксимальная длина 48
    133Имя кассира 12строкаМаксимальная длина 48
    134Имя кассира 13строкаМаксимальная длина 48
    135Имя кассира 14строкаМаксимальная длина 48
    136Имя кассира 15строкаМаксимальная длина 48
    137Имя кассира 16строкаМаксимальная длина 48
    138Имя кассира 17строкаМаксимальная длина 48
    139Имя кассира 18строкаМаксимальная длина 48
    140Имя кассира 19строкаМаксимальная длина 48
    141Имя кассира 20строкаМаксимальная длина 48
    142Имя кассира 21строкаМаксимальная длина 48
    143Имя кассира 22строкаМаксимальная длина 48
    144Имя кассира 23строкаМаксимальная длина 48
    145Имя кассира 24строкаМаксимальная длина 48
    146Имя кассира 25строкаМаксимальная длина 48
    147Имя кассира 26строкаМаксимальная длина 48
    148Имя кассира 27строкаМаксимальная длина 48
    149Имя кассира 28строкаМаксимальная длина 48
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 48
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 48
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 48
    185Строка клише 2строкаМаксимальная длина 48
    186Строка клише 3строкаМаксимальная длина 48
    187Строка клише 4строкаМаксимальная длина 48
    188Строка клише 5строкаМаксимальная длина 48
    189Строка клише 6строкаМаксимальная длина 48
    190Строка клише 7строкаМаксимальная длина 48
    191Строка клише 8строкаМаксимальная длина 48
    192Строка клише 9строкаМаксимальная длина 48
    193Строка клише 10строкаМаксимальная длина 48
    194Строка клише 11строкаМаксимальная длина 48
    195Строка клише 12строкаМаксимальная длина 48
    196Строка клише 13строкаМаксимальная длина 48
    197Строка клише 14строкаМаксимальная длина 48
    198Строка клише 15строкаМаксимальная длина 48
    199Строка клише 16строкаМаксимальная длина 48
    200Строка клише 17строкаМаксимальная длина 48
    201Строка клише 18строкаМаксимальная длина 48
    202Строка клише 19строкаМаксимальная длина 48
    203Строка клише 20строкаМаксимальная длина 48
    204Наименование секции 1строкаМаксимальная длина 48
    205Наименование секции 2строкаМаксимальная длина 48
    206Наименование секции 3строкаМаксимальная длина 48
    207Наименование секции 4строкаМаксимальная длина 48
    208Наименование секции 5строкаМаксимальная длина 48
    209Наименование секции 6строкаМаксимальная длина 48
    210Наименование секции 7строкаМаксимальная длина 48
    211Наименование секции 8строкаМаксимальная длина 48
    212Наименование секции 9строкаМаксимальная длина 48
    213Наименование секции 10строкаМаксимальная длина 48
    214Наименование секции 11строкаМаксимальная длина 48
    215Наименование секции 12строкаМаксимальная длина 48
    216Наименование секции 13строкаМаксимальная длина 48
    217Наименование секции 14строкаМаксимальная длина 48
    218Наименование секции 15строкаМаксимальная длина 48
    219Наименование секции 16строкаМаксимальная длина 48
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    236Скорость ККТчисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    238Скорость подключенного устройствачисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    14400 - 14400 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    239Канал обмена с ККТчисло0 - RS-232
    4 - USB
    5 - Bluetooth
    6 - Ethernet
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 48
    241Наименование способа расчета 3строкаМаксимальная длина 48
    242Наименование способа расчета 4строкаМаксимальная длина 48
    243Наименование способа расчета 5строкаМаксимальная длина 48
    244Наименование способа расчета 6строкаМаксимальная длина 48
    245Наименование способа расчета 7строкаМаксимальная длина 48
    246Наименование способа расчета 8строкаМаксимальная длина 48
    247Наименование способа расчета 9строкаМаксимальная длина 48
    248Наименование способа расчета 10строкаМаксимальная длина 48
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 7
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ 60Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 42
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    64Таймаут на выключение ККТ (минуты)число0 .. 990
    76Выключение / перезагрузка ККТчисло0 - По кнопке
    1 - По команде
    2 - По кнопке и по команде
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 42
    123Имя кассира 2строкаМаксимальная длина 42
    124Имя кассира 3строкаМаксимальная длина 42
    125Имя кассира 4строкаМаксимальная длина 42
    126Имя кассира 5строкаМаксимальная длина 42
    127Имя кассира 6строкаМаксимальная длина 42
    128Имя кассира 7строкаМаксимальная длина 42
    129Имя кассира 8строкаМаксимальная длина 42
    130Имя кассира 9строкаМаксимальная длина 42
    131Имя кассира 10строкаМаксимальная длина 42
    132Имя кассира 11строкаМаксимальная длина 42
    133Имя кассира 12строкаМаксимальная длина 42
    134Имя кассира 13строкаМаксимальная длина 42
    135Имя кассира 14строкаМаксимальная длина 42
    136Имя кассира 15строкаМаксимальная длина 42
    137Имя кассира 16строкаМаксимальная длина 42
    138Имя кассира 17строкаМаксимальная длина 42
    139Имя кассира 18строкаМаксимальная длина 42
    140Имя кассира 19строкаМаксимальная длина 42
    141Имя кассира 20строкаМаксимальная длина 42
    142Имя кассира 21строкаМаксимальная длина 42
    143Имя кассира 22строкаМаксимальная длина 42
    144Имя кассира 23строкаМаксимальная длина 42
    145Имя кассира 24строкаМаксимальная длина 42
    146Имя кассира 25строкаМаксимальная длина 42
    147Имя кассира 26строкаМаксимальная длина 42
    148Имя кассира 27строкаМаксимальная длина 42
    149Имя кассира 28строкаМаксимальная длина 42
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 42
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 42
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 42
    185Строка клише 2строкаМаксимальная длина 42
    186Строка клише 3строкаМаксимальная длина 42
    187Строка клише 4строкаМаксимальная длина 42
    188Строка клише 5строкаМаксимальная длина 42
    189Строка клише 6строкаМаксимальная длина 42
    190Строка клише 7строкаМаксимальная длина 42
    191Строка клише 8строкаМаксимальная длина 42
    192Строка клише 9строкаМаксимальная длина 42
    193Строка клише 10строкаМаксимальная длина 42
    194Строка клише 11строкаМаксимальная длина 42
    195Строка клише 12строкаМаксимальная длина 42
    196Строка клише 13строкаМаксимальная длина 42
    197Строка клише 14строкаМаксимальная длина 42
    198Строка клише 15строкаМаксимальная длина 42
    199Строка клише 16строкаМаксимальная длина 42
    200Строка клише 17строкаМаксимальная длина 42
    201Строка клише 18строкаМаксимальная длина 42
    202Строка клише 19строкаМаксимальная длина 42
    203Строка клише 20строкаМаксимальная длина 42
    204Наименование секции 1строкаМаксимальная длина 42
    205Наименование секции 2строкаМаксимальная длина 42
    206Наименование секции 3строкаМаксимальная длина 42
    207Наименование секции 4строкаМаксимальная длина 42
    208Наименование секции 5строкаМаксимальная длина 42
    209Наименование секции 6строкаМаксимальная длина 42
    210Наименование секции 7строкаМаксимальная длина 42
    211Наименование секции 8строкаМаксимальная длина 42
    212Наименование секции 9строкаМаксимальная длина 42
    213Наименование секции 10строкаМаксимальная длина 42
    214Наименование секции 11строкаМаксимальная длина 42
    215Наименование секции 12строкаМаксимальная длина 42
    216Наименование секции 13строкаМаксимальная длина 42
    217Наименование секции 14строкаМаксимальная длина 42
    218Наименование секции 15строкаМаксимальная длина 42
    219Наименование секции 16строкаМаксимальная длина 42
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    239Канал обмена с ККТчисло4 - USB
    5 - Bluetooth
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 42
    241Наименование способа расчета 3строкаМаксимальная длина 42
    242Наименование способа расчета 4строкаМаксимальная длина 42
    243Наименование способа расчета 5строкаМаксимальная длина 42
    244Наименование способа расчета 6строкаМаксимальная длина 42
    245Наименование способа расчета 7строкаМаксимальная длина 42
    246Наименование способа расчета 8строкаМаксимальная длина 42
    247Наименование способа расчета 9строкаМаксимальная длина 42
    248Наименование способа расчета 10строкаМаксимальная длина 42
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 7
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ 77Ф (5.X)

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло0 .. 3
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    236Скорость ККТчисло4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    230400 - 230400 бод
    460800 - 460800 бод
    921600 - 921600 бод
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 64
    270Пароль доступа к точке доступастрокаМаксимальная длина 64
    271Номер канала Wi-Fi в режиме точки доступачисло1 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    283Получение адреса DNSчисло0 - Автоматически
    1 - Вручную
    284Адрес DNSстрокаМаксимальная длина 15
    285Ширина бумагичисло0 - По умолчанию
    1 - 80мм
    2 - 57мм
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    294Использовать RS232число0 - Нет
    1 - Да
    295Ожидание получения сетевых настроек по Ethernet, с. (0 - деактивация)число0 .. 255
    296Ожидание подключения по Wi-Fi, с. (0 - деактивация)число0 .. 255
    297Ожидание подключения по GSM, с. (0 - деактивация)число0 .. 255
    298Ожидание подключения по Bluetooth, с. (0 - деактивация)число0 .. 255
    299Регистрировать секциичисло0 - Нет
    1 - Да
    300Включить отрезчикчисло0 - Нет
    1 - Да
    322Отрезать документы полностьючисло0 - Нет
    1 - Да
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    329IP-порт (Wi-Fi)число1 .. 65535
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено

    АТОЛ 77Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 64
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    66Отрезать чек после завершения документачисло0 - Не отрезать
    1 - Не полностью
    2 - Полностью
    67Запретить отрезку чековчисло0 - Нет
    1 - Да
    68Запретить отрезку отчетовчисло0 - Нет
    1 - Да
    69Отрезать ЧЛ после печати клише командой «Печать клише»число0 - Нет
    1 - Да
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    75Расстояние от ножа отрезчика до гребенкичисло0 .. 255
    76Выключение / перезагрузка ККТчисло0 - По кнопке
    1 - По команде
    2 - По кнопке и по команде
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 64
    123Имя кассира 2строкаМаксимальная длина 64
    124Имя кассира 3строкаМаксимальная длина 64
    125Имя кассира 4строкаМаксимальная длина 64
    126Имя кассира 5строкаМаксимальная длина 64
    127Имя кассира 6строкаМаксимальная длина 64
    128Имя кассира 7строкаМаксимальная длина 64
    129Имя кассира 8строкаМаксимальная длина 64
    130Имя кассира 9строкаМаксимальная длина 64
    131Имя кассира 10строкаМаксимальная длина 64
    132Имя кассира 11строкаМаксимальная длина 64
    133Имя кассира 12строкаМаксимальная длина 64
    134Имя кассира 13строкаМаксимальная длина 64
    135Имя кассира 14строкаМаксимальная длина 64
    136Имя кассира 15строкаМаксимальная длина 64
    137Имя кассира 16строкаМаксимальная длина 64
    138Имя кассира 17строкаМаксимальная длина 64
    139Имя кассира 18строкаМаксимальная длина 64
    140Имя кассира 19строкаМаксимальная длина 64
    141Имя кассира 20строкаМаксимальная длина 64
    142Имя кассира 21строкаМаксимальная длина 64
    143Имя кассира 22строкаМаксимальная длина 64
    144Имя кассира 23строкаМаксимальная длина 64
    145Имя кассира 24строкаМаксимальная длина 64
    146Имя кассира 25строкаМаксимальная длина 64
    147Имя кассира 26строкаМаксимальная длина 64
    148Имя кассира 27строкаМаксимальная длина 64
    149Имя кассира 28строкаМаксимальная длина 64
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 64
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 64
    185Строка клише 2строкаМаксимальная длина 64
    186Строка клише 3строкаМаксимальная длина 64
    187Строка клише 4строкаМаксимальная длина 64
    188Строка клише 5строкаМаксимальная длина 64
    189Строка клише 6строкаМаксимальная длина 64
    190Строка клише 7строкаМаксимальная длина 64
    191Строка клише 8строкаМаксимальная длина 64
    192Строка клише 9строкаМаксимальная длина 64
    193Строка клише 10строкаМаксимальная длина 64
    194Строка клише 11строкаМаксимальная длина 64
    195Строка клише 12строкаМаксимальная длина 64
    196Строка клише 13строкаМаксимальная длина 64
    197Строка клише 14строкаМаксимальная длина 64
    198Строка клише 15строкаМаксимальная длина 64
    199Строка клише 16строкаМаксимальная длина 64
    200Строка клише 17строкаМаксимальная длина 64
    201Строка клише 18строкаМаксимальная длина 64
    202Строка клише 19строкаМаксимальная длина 64
    203Строка клише 20строкаМаксимальная длина 64
    204Наименование секции 1строкаМаксимальная длина 64
    205Наименование секции 2строкаМаксимальная длина 64
    206Наименование секции 3строкаМаксимальная длина 64
    207Наименование секции 4строкаМаксимальная длина 64
    208Наименование секции 5строкаМаксимальная длина 64
    209Наименование секции 6строкаМаксимальная длина 64
    210Наименование секции 7строкаМаксимальная длина 64
    211Наименование секции 8строкаМаксимальная длина 64
    212Наименование секции 9строкаМаксимальная длина 64
    213Наименование секции 10строкаМаксимальная длина 64
    214Наименование секции 11строкаМаксимальная длина 64
    215Наименование секции 12строкаМаксимальная длина 64
    216Наименование секции 13строкаМаксимальная длина 64
    217Наименование секции 14строкаМаксимальная длина 64
    218Наименование секции 15строкаМаксимальная длина 64
    219Наименование секции 16строкаМаксимальная длина 64
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    236Скорость ККТчисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    238Скорость подключенного устройствачисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    14400 - 14400 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    239Канал обмена с ККТчисло0 - RS-232
    4 - USB
    5 - Bluetooth
    6 - Ethernet
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 64
    241Наименование способа расчета 3строкаМаксимальная длина 64
    242Наименование способа расчета 4строкаМаксимальная длина 64
    243Наименование способа расчета 5строкаМаксимальная длина 64
    244Наименование способа расчета 6строкаМаксимальная длина 64
    245Наименование способа расчета 7строкаМаксимальная длина 64
    246Наименование способа расчета 8строкаМаксимальная длина 64
    247Наименование способа расчета 9строкаМаксимальная длина 64
    248Наименование способа расчета 10строкаМаксимальная длина 64
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    258Ограничение скорости печати для шрифта 1число0 - 140 мм/с
    1 - 180 мм/с
    2 - 220 мм/с
    3 - 260 мм/с
    4 - 300 мм/с
    259Ограничение скорости печати для шрифта 2число0 - 140 мм/с
    1 - 180 мм/с
    2 - 220 мм/с
    3 - 260 мм/с
    4 - 300 мм/с
    260Ограничение скорости печати для шрифта 3число0 - 140 мм/с
    1 - 180 мм/с
    2 - 220 мм/с
    3 - 260 мм/с
    4 - 300 мм/с
    261Ограничение скорости печати для шрифта 4число0 - 140 мм/с
    1 - 180 мм/с
    2 - 220 мм/с
    3 - 260 мм/с
    4 - 300 мм/с
    262Ограничение скорости печати для шрифта 5число0 - 140 мм/с
    1 - 180 мм/с
    2 - 220 мм/с
    3 - 260 мм/с
    4 - 300 мм/с
    263Ограничение скорости печати для шрифта 6число0 - 140 мм/с
    1 - 180 мм/с
    2 - 220 мм/с
    3 - 260 мм/с
    4 - 300 мм/с
    264Ограничение скорости печати графикичисло0 - 140 мм/с
    1 - 180 мм/с
    2 - 220 мм/с
    3 - 260 мм/с
    4 - 300 мм/с
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 7
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ 90Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 99
    1Разрешение способа расчета 2число0 - Запрещено
    1 - Разрешено
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 4
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 6
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    23Количество символов в строкечисло24 .. 32
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 8
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    56Учет наличностичисло0 - Минимум
    1 - Максимум
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    77Порядок ввода суммчисло0 - С копеек
    1 - С рублей
    78Работа по кодам товаровчисло0 - Запрещена
    1 - Разрешена
    79Разрядность вводимых суммчисло1 .. 8
    80Работа со скидками/надбавкамичисло0 - Скидки запрещены
    1 - Разрешены скидки на весь чек
    2 - Разрешены скидки на позицию
    3 - Разрешены все скидки
    82Печать названия товарачисло0 - Запрещено
    1 - Разрешено
    83Автоматический вход в режим «РЕГИСТРАЦИЯ»число0 - Запрещено
    1 - Разрешено с оператором 1
    2 - Разрешено с оператором 2
    3 - Разрешено с оператором 3
    4 - Разрешено с оператором 4
    5 - Разрешено с оператором 5
    6 - Разрешено с оператором 6
    7 - Разрешено с оператором 7
    8 - Разрешено с оператором 8
    84Автоматическая печать «пробного чека» при входе в режим «РЕГИСТРАЦИЯ»число0 - Нет
    1 - Да
    85Сбрасывать дисплей в «0.00» по завершении чекачисло0 - Нет
    1 - Да
    86«Пробный чек» по клавише [ПС]число0 - Нет
    1 - Да
    87Двойная высота итоговой суммычисло0 - Нет
    1 - Да
    88Двойная ширина итоговой суммычисло0 - Нет
    1 - Да
    89Параметры открытия смены в режиме «РЕГИСТРАЦИЯ»число0 - Только клавишей [ИТ] без печати документа «Открытие смены»
    1 - Только клавишей [ИТ] с печатью документа «Открытие смены»
    2 - Автоматически и клавишей [ИТ] и без печати документа «Открытие смены»
    3 - Автоматически и клавишей [ИТ] и с печатью документа «Открытие смены»
    90Звуковая индикация нажатия на кнопкичисло0 - Нет
    1 - Да
    93Работа с ЕГАИСчисло0 - Выключено
    1 - Включено
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 32
    123Имя кассира 2строкаМаксимальная длина 32
    124Имя кассира 3строкаМаксимальная длина 32
    125Имя кассира 4строкаМаксимальная длина 32
    126Имя кассира 5строкаМаксимальная длина 32
    127Имя кассира 6строкаМаксимальная длина 32
    128Имя кассира 7строкаМаксимальная длина 32
    129Имя кассира 8строкаМаксимальная длина 32
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 32
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 32
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 32
    185Строка клише 2строкаМаксимальная длина 32
    186Строка клише 3строкаМаксимальная длина 32
    187Строка клише 4строкаМаксимальная длина 32
    188Строка клише 5строкаМаксимальная длина 32
    189Строка клише 6строкаМаксимальная длина 32
    204Наименование секции 1строкаМаксимальная длина 32
    205Наименование секции 2строкаМаксимальная длина 32
    206Наименование секции 3строкаМаксимальная длина 32
    207Наименование секции 4строкаМаксимальная длина 32
    208Наименование секции 5строкаМаксимальная длина 32
    209Наименование секции 6строкаМаксимальная длина 32
    210Наименование секции 7строкаМаксимальная длина 32
    211Наименование секции 8строкаМаксимальная длина 32
    212Наименование секции 9строкаМаксимальная длина 32
    213Наименование секции 10строкаМаксимальная длина 32
    214Наименование секции 11строкаМаксимальная длина 32
    215Наименование секции 12строкаМаксимальная длина 32
    216Наименование секции 13строкаМаксимальная длина 32
    217Наименование секции 14строкаМаксимальная длина 32
    218Наименование секции 15строкаМаксимальная длина 32
    219Наименование секции 16строкаМаксимальная длина 32
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    240Наименование способа расчета 2строкаМаксимальная длина 42
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    288ИНН организациистрокаМаксимальная длина 12
    289КПП организациистрокаМаксимальная длина 10
    290Адрес предприятия торговлистрокаМаксимальная длина 64
    291Наименование предприятия торговлистрокаМаксимальная длина 64
    303Время перехода в режим энергосбережениячисло0 .. 99
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 4
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать
    346Передавать код товара в реквизите «Наименование предмета расчета»число0 - Не передавать
    1 - Передавать

    АТОЛ 91Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 4
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 42
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 8
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    76Выключение / перезагрузка ККТчисло0 - По кнопке
    1 - Не используется
    2 - По кнопке и по команде
    78Работа по кодам товаровчисло0 - Запрещена
    1 - Разрешена
    79Разрядность вводимых суммчисло1 .. 8
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 32
    123Имя кассира 2строкаМаксимальная длина 32
    124Имя кассира 3строкаМаксимальная длина 32
    125Имя кассира 4строкаМаксимальная длина 32
    126Имя кассира 5строкаМаксимальная длина 32
    127Имя кассира 6строкаМаксимальная длина 32
    128Имя кассира 7строкаМаксимальная длина 32
    129Имя кассира 8строкаМаксимальная длина 32
    130Имя кассира 9строкаМаксимальная длина 32
    131Имя кассира 10строкаМаксимальная длина 32
    132Имя кассира 11строкаМаксимальная длина 32
    133Имя кассира 12строкаМаксимальная длина 32
    134Имя кассира 13строкаМаксимальная длина 32
    135Имя кассира 14строкаМаксимальная длина 32
    136Имя кассира 15строкаМаксимальная длина 32
    137Имя кассира 16строкаМаксимальная длина 32
    138Имя кассира 17строкаМаксимальная длина 32
    139Имя кассира 18строкаМаксимальная длина 32
    140Имя кассира 19строкаМаксимальная длина 32
    141Имя кассира 20строкаМаксимальная длина 32
    142Имя кассира 21строкаМаксимальная длина 32
    143Имя кассира 22строкаМаксимальная длина 32
    144Имя кассира 23строкаМаксимальная длина 32
    145Имя кассира 24строкаМаксимальная длина 32
    146Имя кассира 25строкаМаксимальная длина 32
    147Имя кассира 26строкаМаксимальная длина 32
    148Имя кассира 27строкаМаксимальная длина 32
    149Имя кассира 28строкаМаксимальная длина 32
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 32
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 32
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 32
    185Строка клише 2строкаМаксимальная длина 32
    186Строка клише 3строкаМаксимальная длина 32
    187Строка клише 4строкаМаксимальная длина 32
    188Строка клише 5строкаМаксимальная длина 32
    189Строка клише 6строкаМаксимальная длина 32
    190Строка клише 7строкаМаксимальная длина 32
    191Строка клише 8строкаМаксимальная длина 32
    192Строка клише 9строкаМаксимальная длина 32
    193Строка клише 10строкаМаксимальная длина 32
    194Строка клише 11строкаМаксимальная длина 32
    195Строка клише 12строкаМаксимальная длина 32
    196Строка клише 13строкаМаксимальная длина 32
    197Строка клише 14строкаМаксимальная длина 32
    198Строка клише 15строкаМаксимальная длина 32
    199Строка клише 16строкаМаксимальная длина 32
    200Строка клише 17строкаМаксимальная длина 32
    201Строка клише 18строкаМаксимальная длина 32
    202Строка клише 19строкаМаксимальная длина 32
    203Строка клише 20строкаМаксимальная длина 32
    204Наименование секции 1строкаМаксимальная длина 32
    205Наименование секции 2строкаМаксимальная длина 32
    206Наименование секции 3строкаМаксимальная длина 32
    207Наименование секции 4строкаМаксимальная длина 32
    208Наименование секции 5строкаМаксимальная длина 32
    209Наименование секции 6строкаМаксимальная длина 32
    210Наименование секции 7строкаМаксимальная длина 32
    211Наименование секции 8строкаМаксимальная длина 32
    212Наименование секции 9строкаМаксимальная длина 32
    213Наименование секции 10строкаМаксимальная длина 32
    214Наименование секции 11строкаМаксимальная длина 32
    215Наименование секции 12строкаМаксимальная длина 32
    216Наименование секции 13строкаМаксимальная длина 32
    217Наименование секции 14строкаМаксимальная длина 32
    218Наименование секции 15строкаМаксимальная длина 32
    219Наименование секции 16строкаМаксимальная длина 32
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    239Канал обмена с ККТчисло4 - USB
    5 - Bluetooth
    6 - Ethernet
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 42
    240Наименование способа расчета 2строкаМаксимальная длина 42
    241Наименование способа расчета 3строкаМаксимальная длина 42
    242Наименование способа расчета 4строкаМаксимальная длина 42
    243Наименование способа расчета 5строкаМаксимальная длина 42
    244Наименование способа расчета 6строкаМаксимальная длина 42
    245Наименование способа расчета 7строкаМаксимальная длина 42
    246Наименование способа расчета 8строкаМаксимальная длина 42
    247Наименование способа расчета 9строкаМаксимальная длина 42
    248Наименование способа расчета 10строкаМаксимальная длина 42
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    302Печатать остатка ФН в отчетечисло0 - Не печатать
    1 - Печатать
    303Время перехода в режим энергосбережениячисло0 .. 99
    304Автоматический вход в режим «Оформления кассовых чеков»число0 - Запрещено
    1 - Разрешено с оператором 1
    2 - Разрешено с оператором 2
    3 - Разрешено с оператором 3
    4 - Разрешено с оператором 4
    5 - Разрешено с оператором 5
    6 - Разрешено с оператором 6
    7 - Разрешено с оператором 7
    8 - Разрешено с оператором 8
    9 - Разрешено с оператором 9
    10 - Разрешено с оператором 10
    11 - Разрешено с оператором 11
    12 - Разрешено с оператором 12
    13 - Разрешено с оператором 13
    14 - Разрешено с оператором 14
    15 - Разрешено с оператором 15
    16 - Разрешено с оператором 16
    17 - Разрешено с оператором 17
    18 - Разрешено с оператором 18
    19 - Разрешено с оператором 19
    20 - Разрешено с оператором 20
    21 - Разрешено с оператором 21
    22 - Разрешено с оператором 22
    23 - Разрешено с оператором 23
    24 - Разрешено с оператором 24
    25 - Разрешено с оператором 25
    26 - Разрешено с оператором 26
    27 - Разрешено с оператором 27
    28 - Разрешено с оператором 28
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    314Вести журнал товаровчисло0 - Не вести
    1 - Вести
    315Очищать журнал товаровчисло0 - При закрытии смены
    1 - При открытии смены
    316Таймаут на выключение подсветки дисплея, мин.число0 .. 60
    317Тип чека по умолчаниючисло1 - Приход
    2 - Расход
    3 - Возврат прихода
    4 - Возврат расхода
    318Запрашивать абонентский номер клиентачисло0 - Не запрашивать
    1 - Запрашивать
    319Способ расчета по умолчаниючисло1 - Способ расчета 1
    2 - Способ расчета 2
    3 - Способ расчета 3
    4 - Способ расчета 4
    5 - Способ расчета 5
    320Единица измерения по умолчаниючисло0 .. 16
    321Поставщик по умолчаниючисло0 .. 16
    323Работать как ФРчисло0 - Нет
    1 - Да
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 4
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ 92Ф

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 4
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 42
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 8
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    76Выключение / перезагрузка ККТчисло0 - По кнопке
    1 - Не используется
    2 - По кнопке и по команде
    78Работа по кодам товаровчисло0 - Запрещена
    1 - Разрешена
    79Разрядность вводимых суммчисло1 .. 8
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 32
    123Имя кассира 2строкаМаксимальная длина 32
    124Имя кассира 3строкаМаксимальная длина 32
    125Имя кассира 4строкаМаксимальная длина 32
    126Имя кассира 5строкаМаксимальная длина 32
    127Имя кассира 6строкаМаксимальная длина 32
    128Имя кассира 7строкаМаксимальная длина 32
    129Имя кассира 8строкаМаксимальная длина 32
    130Имя кассира 9строкаМаксимальная длина 32
    131Имя кассира 10строкаМаксимальная длина 32
    132Имя кассира 11строкаМаксимальная длина 32
    133Имя кассира 12строкаМаксимальная длина 32
    134Имя кассира 13строкаМаксимальная длина 32
    135Имя кассира 14строкаМаксимальная длина 32
    136Имя кассира 15строкаМаксимальная длина 32
    137Имя кассира 16строкаМаксимальная длина 32
    138Имя кассира 17строкаМаксимальная длина 32
    139Имя кассира 18строкаМаксимальная длина 32
    140Имя кассира 19строкаМаксимальная длина 32
    141Имя кассира 20строкаМаксимальная длина 32
    142Имя кассира 21строкаМаксимальная длина 32
    143Имя кассира 22строкаМаксимальная длина 32
    144Имя кассира 23строкаМаксимальная длина 32
    145Имя кассира 24строкаМаксимальная длина 32
    146Имя кассира 25строкаМаксимальная длина 32
    147Имя кассира 26строкаМаксимальная длина 32
    148Имя кассира 27строкаМаксимальная длина 32
    149Имя кассира 28строкаМаксимальная длина 32
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 32
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 32
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 32
    185Строка клише 2строкаМаксимальная длина 32
    186Строка клише 3строкаМаксимальная длина 32
    187Строка клише 4строкаМаксимальная длина 32
    188Строка клише 5строкаМаксимальная длина 32
    189Строка клише 6строкаМаксимальная длина 32
    190Строка клише 7строкаМаксимальная длина 32
    191Строка клише 8строкаМаксимальная длина 32
    192Строка клише 9строкаМаксимальная длина 32
    193Строка клише 10строкаМаксимальная длина 32
    194Строка клише 11строкаМаксимальная длина 32
    195Строка клише 12строкаМаксимальная длина 32
    196Строка клише 13строкаМаксимальная длина 32
    197Строка клише 14строкаМаксимальная длина 32
    198Строка клише 15строкаМаксимальная длина 32
    199Строка клише 16строкаМаксимальная длина 32
    200Строка клише 17строкаМаксимальная длина 32
    201Строка клише 18строкаМаксимальная длина 32
    202Строка клише 19строкаМаксимальная длина 32
    203Строка клише 20строкаМаксимальная длина 32
    204Наименование секции 1строкаМаксимальная длина 32
    205Наименование секции 2строкаМаксимальная длина 32
    206Наименование секции 3строкаМаксимальная длина 32
    207Наименование секции 4строкаМаксимальная длина 32
    208Наименование секции 5строкаМаксимальная длина 32
    209Наименование секции 6строкаМаксимальная длина 32
    210Наименование секции 7строкаМаксимальная длина 32
    211Наименование секции 8строкаМаксимальная длина 32
    212Наименование секции 9строкаМаксимальная длина 32
    213Наименование секции 10строкаМаксимальная длина 32
    214Наименование секции 11строкаМаксимальная длина 32
    215Наименование секции 12строкаМаксимальная длина 32
    216Наименование секции 13строкаМаксимальная длина 32
    217Наименование секции 14строкаМаксимальная длина 32
    218Наименование секции 15строкаМаксимальная длина 32
    219Наименование секции 16строкаМаксимальная длина 32
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    239Канал обмена с ККТчисло4 - USB
    5 - Bluetooth
    6 - Ethernet
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 42
    240Наименование способа расчета 2строкаМаксимальная длина 42
    241Наименование способа расчета 3строкаМаксимальная длина 42
    242Наименование способа расчета 4строкаМаксимальная длина 42
    243Наименование способа расчета 5строкаМаксимальная длина 42
    244Наименование способа расчета 6строкаМаксимальная длина 42
    245Наименование способа расчета 7строкаМаксимальная длина 42
    246Наименование способа расчета 8строкаМаксимальная длина 42
    247Наименование способа расчета 9строкаМаксимальная длина 42
    248Наименование способа расчета 10строкаМаксимальная длина 42
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    301Печатать на ЧЛ сообщение о полученном IP-адресечисло0 - Не печатать
    1 - Печатать
    302Печатать остатка ФН в отчетечисло0 - Не печатать
    1 - Печатать
    303Время перехода в режим энергосбережениячисло0 .. 99
    304Автоматический вход в режим «Оформления кассовых чеков»число0 - Запрещено
    1 - Разрешено с оператором 1
    2 - Разрешено с оператором 2
    3 - Разрешено с оператором 3
    4 - Разрешено с оператором 4
    5 - Разрешено с оператором 5
    6 - Разрешено с оператором 6
    7 - Разрешено с оператором 7
    8 - Разрешено с оператором 8
    9 - Разрешено с оператором 9
    10 - Разрешено с оператором 10
    11 - Разрешено с оператором 11
    12 - Разрешено с оператором 12
    13 - Разрешено с оператором 13
    14 - Разрешено с оператором 14
    15 - Разрешено с оператором 15
    16 - Разрешено с оператором 16
    17 - Разрешено с оператором 17
    18 - Разрешено с оператором 18
    19 - Разрешено с оператором 19
    20 - Разрешено с оператором 20
    21 - Разрешено с оператором 21
    22 - Разрешено с оператором 22
    23 - Разрешено с оператором 23
    24 - Разрешено с оператором 24
    25 - Разрешено с оператором 25
    26 - Разрешено с оператором 26
    27 - Разрешено с оператором 27
    28 - Разрешено с оператором 28
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    314Вести журнал товаровчисло0 - Не вести
    1 - Вести
    315Очищать журнал товаровчисло0 - При закрытии смены
    1 - При открытии смены
    316Таймаут на выключение подсветки дисплея, мин.число0 .. 60
    317Тип чека по умолчаниючисло1 - Приход
    2 - Расход
    3 - Возврат прихода
    4 - Возврат расхода
    318Запрашивать абонентский номер клиентачисло0 - Не запрашивать
    1 - Запрашивать
    319Способ расчета по умолчаниючисло1 - Способ расчета 1
    2 - Способ расчета 2
    3 - Способ расчета 3
    4 - Способ расчета 4
    5 - Способ расчета 5
    320Единица измерения по умолчаниючисло0 .. 16
    321Поставщик по умолчаниючисло0 .. 16
    323Работать как ФРчисло0 - Нет
    1 - Да
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 4
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ Sigma 10 (5.X)

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло0 .. 3
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    236Скорость ККТчисло4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    230400 - 230400 бод
    460800 - 460800 бод
    921600 - 921600 бод
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    299Регистрировать секциичисло0 - Нет
    1 - Да
    300Включить отрезчикчисло0 - Нет
    1 - Да
    322Отрезать документы полностьючисло0 - Нет
    1 - Да

    АТОЛ Sigma 10

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 64
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    38Звуковой сигнал при окончании бумаги и открытии крышкичисло0 - Нет
    1 - Да
    39Звуковой сигнал при включениичисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    66Отрезать чек после завершения документачисло0 - Не отрезать
    1 - Не полностью
    2 - Полностью
    67Запретить отрезку чековчисло0 - Нет
    1 - Да
    68Запретить отрезку отчетовчисло0 - Нет
    1 - Да
    69Отрезать ЧЛ после печати клише командой «Печать клише»число0 - Нет
    1 - Да
    75Расстояние от ножа отрезчика до гребенкичисло0 .. 255
    76Выключение / перезагрузка ККТчисло0 - По кнопке
    1 - По команде
    2 - По кнопке и по команде
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 48
    123Имя кассира 2строкаМаксимальная длина 48
    124Имя кассира 3строкаМаксимальная длина 48
    125Имя кассира 4строкаМаксимальная длина 48
    126Имя кассира 5строкаМаксимальная длина 48
    127Имя кассира 6строкаМаксимальная длина 48
    128Имя кассира 7строкаМаксимальная длина 48
    129Имя кассира 8строкаМаксимальная длина 48
    130Имя кассира 9строкаМаксимальная длина 48
    131Имя кассира 10строкаМаксимальная длина 48
    132Имя кассира 11строкаМаксимальная длина 48
    133Имя кассира 12строкаМаксимальная длина 48
    134Имя кассира 13строкаМаксимальная длина 48
    135Имя кассира 14строкаМаксимальная длина 48
    136Имя кассира 15строкаМаксимальная длина 48
    137Имя кассира 16строкаМаксимальная длина 48
    138Имя кассира 17строкаМаксимальная длина 48
    139Имя кассира 18строкаМаксимальная длина 48
    140Имя кассира 19строкаМаксимальная длина 48
    141Имя кассира 20строкаМаксимальная длина 48
    142Имя кассира 21строкаМаксимальная длина 48
    143Имя кассира 22строкаМаксимальная длина 48
    144Имя кассира 23строкаМаксимальная длина 48
    145Имя кассира 24строкаМаксимальная длина 48
    146Имя кассира 25строкаМаксимальная длина 48
    147Имя кассира 26строкаМаксимальная длина 48
    148Имя кассира 27строкаМаксимальная длина 48
    149Имя кассира 28строкаМаксимальная длина 48
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 48
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 48
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 48
    185Строка клише 2строкаМаксимальная длина 48
    186Строка клише 3строкаМаксимальная длина 48
    187Строка клише 4строкаМаксимальная длина 48
    188Строка клише 5строкаМаксимальная длина 48
    189Строка клише 6строкаМаксимальная длина 48
    190Строка клише 7строкаМаксимальная длина 48
    191Строка клише 8строкаМаксимальная длина 48
    192Строка клише 9строкаМаксимальная длина 48
    193Строка клише 10строкаМаксимальная длина 48
    194Строка клише 11строкаМаксимальная длина 48
    195Строка клише 12строкаМаксимальная длина 48
    196Строка клише 13строкаМаксимальная длина 48
    197Строка клише 14строкаМаксимальная длина 48
    198Строка клише 15строкаМаксимальная длина 48
    199Строка клише 16строкаМаксимальная длина 48
    200Строка клише 17строкаМаксимальная длина 48
    201Строка клише 18строкаМаксимальная длина 48
    202Строка клише 19строкаМаксимальная длина 48
    203Строка клише 20строкаМаксимальная длина 48
    204Наименование секции 1строкаМаксимальная длина 48
    205Наименование секции 2строкаМаксимальная длина 48
    206Наименование секции 3строкаМаксимальная длина 48
    207Наименование секции 4строкаМаксимальная длина 48
    208Наименование секции 5строкаМаксимальная длина 48
    209Наименование секции 6строкаМаксимальная длина 48
    210Наименование секции 7строкаМаксимальная длина 48
    211Наименование секции 8строкаМаксимальная длина 48
    212Наименование секции 9строкаМаксимальная длина 48
    213Наименование секции 10строкаМаксимальная длина 48
    214Наименование секции 11строкаМаксимальная длина 48
    215Наименование секции 12строкаМаксимальная длина 48
    216Наименование секции 13строкаМаксимальная длина 48
    217Наименование секции 14строкаМаксимальная длина 48
    218Наименование секции 15строкаМаксимальная длина 48
    219Наименование секции 16строкаМаксимальная длина 48
    220Номер налога 1число1 .. 6
    221Номер налога 2число1 .. 6
    222Номер налога 3число1 .. 6
    223Номер налога 4число1 .. 6
    224Номер налога 5число1 .. 6
    225Номер налога 6число1 .. 6
    226Номер налога 7число1 .. 6
    227Номер налога 8число1 .. 6
    228Номер налога 9число1 .. 6
    229Номер налога 10число1 .. 6
    230Номер налога 11число1 .. 6
    231Номер налога 12число1 .. 6
    232Номер налога 13число1 .. 6
    233Номер налога 14число1 .. 6
    234Номер налога 15число1 .. 6
    235Номер налога 16число1 .. 6
    236Скорость ККТчисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    230400 - 230400 бод
    460800 - 460800 бод
    921600 - 921600 бод
    240Наименование способа расчета 2строкаМаксимальная длина 48
    241Наименование способа расчета 3строкаМаксимальная длина 48
    242Наименование способа расчета 4строкаМаксимальная длина 48
    243Наименование способа расчета 5строкаМаксимальная длина 48
    244Наименование способа расчета 6строкаМаксимальная длина 48
    245Наименование способа расчета 7строкаМаксимальная длина 48
    246Наименование способа расчета 8строкаМаксимальная длина 48
    247Наименование способа расчета 9строкаМаксимальная длина 48
    248Наименование способа расчета 10строкаМаксимальная длина 48
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    330Шрифт реквизитов в чекечисло1 .. 7
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    АТОЛ Sigma 7Ф

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло0 .. 3
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    236Скорость ККТчисло4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    230400 - 230400 бод
    460800 - 460800 бод
    921600 - 921600 бод
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    299Регистрировать секциичисло0 - Нет
    1 - Да

    АТОЛ Sigma 8Ф

    НомерОписаниеТипВозможные значения
    8Яркость печати ЧЛчисло0 .. 100
    9Открывать ДЯ при закрытии чекачисло0 - Нет
    1 - Да
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло0 .. 3
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    65Не открывать ДЯ при отсутствии наличного способа расчета в чекечисло0 - Открывать
    1 - Не открывать
    182Имя системного администраторастрокаМаксимальная длина 64
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 256
    185Строка клише 2строкаМаксимальная длина 256
    186Строка клише 3строкаМаксимальная длина 256
    187Строка клише 4строкаМаксимальная длина 256
    188Строка клише 5строкаМаксимальная длина 256
    189Строка клише 6строкаМаксимальная длина 256
    190Строка клише 7строкаМаксимальная длина 256
    191Строка клише 8строкаМаксимальная длина 256
    192Строка клише 9строкаМаксимальная длина 256
    193Строка клише 10строкаМаксимальная длина 256
    236Скорость ККТчисло4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    230400 - 230400 бод
    460800 - 460800 бод
    921600 - 921600 бод
    244Наименование способа расчета 6строкаМаксимальная длина 15
    245Наименование способа расчета 7строкаМаксимальная длина 15
    246Наименование способа расчета 8строкаМаксимальная длина 15
    247Наименование способа расчета 9строкаМаксимальная длина 15
    248Наименование способа расчета 10строкаМаксимальная длина 15
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло0 .. 65535
    276Канал обмена с ОФДчисло5 - EthernetOverTransport
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число0 .. 5
    286Приоритет качества печати перед скоростьючисло0 - Нет
    1 - Да
    292Использовать загружаемые скриптычисло0 - Нет
    1 - Да
    293Скорость обмена с ФНчисло0 .. 7
    299Регистрировать секциичисло0 - Нет
    1 - Да
    300Включить отрезчикчисло0 - Нет
    1 - Да
    322Отрезать документы полностьючисло0 - Нет
    1 - Да

    Казначей ФА

    НомерОписаниеТипВозможные значения
    0Номер ККТ в магазинечисло0 .. 255
    2Печатать названия секцийчисло0 - Не печатать
    1 - Печатать
    3Печатать необнуляемую сумму приходов и расходовчисло0 - Не печатать
    1 - Печатать
    4Производить инкассациючисло0 - Нет
    1 - Да
    5Расширенный X-отчет и Z-отчетчисло0 - Нет
    1 - Да
    6Печатать информацию о количестве чеков за смену по типам операцийчисло0 - Не печатать
    1 - Печатать
    7Автоматически печатать отчет по секциям перед X- и Z-отчетомчисло0 - Не печатать
    1 - Печатать
    8Яркость печати ЧЛчисло1 .. 15
    11Пароль доступастрокаМаксимальная длина 4
    12Межстрочный интервал ЧЛ (в пикселях)число0 .. 15
    13Шрифт ЧЛчисло1 .. 7
    14Количество печатаемых строк после чека на ЧЛчисло0 .. 20
    15Печатать разделители в суточных отчетахчисло0 - Не печатать
    1 - Печатать
    16Печатать номер секциичисло0 - Не печатать
    1 - Печатать
    17Печатать необнуляемый итог на начало смены в Z-отчетечисло0 - Не печатать
    1 - Печатать
    18Печатать необнуляемый итог на начало смены в X-отчетечисло0 - Не печатать
    1 - Печатать
    19Печатать текст командой «Печать строки»число0 - Не печатать
    1 - Печатать
    20Режим перехода на летнее/зимнее времячисло0 - Не переходить
    1 - Переходить, не оповещать
    2 - Переходить, оповещать кассира
    3 - Переходить, оповещать кассира и хост
    21Дата перехода на летнее времячисло
    22Дата перехода на зимнее времячисло
    23Количество символов в строкечисло24 .. 57
    24Символ для разделителястрокаМаксимальная длина 1
    25Проверять времячисло0 .. 99
    26Смещение области печати слевачисло0 .. 24
    27Печатать налоги в Х- и Z-отчете и при регистрациичисло0 - Не печатать
    1 - Печатать
    28Минимальная яркость термокомпенсации на ЧЛчисло1 .. 15
    29Печатать на ЧЛ документ готовности к работечисло0 - Не печатать
    1 - Печатать
    30Печатать на ЧЛ клише в служебных сообщенияхчисло0 - Не печатать
    1 - Печатать
    31Печатать на ЧЛ сообщение о вводе даты-временичисло0 - Не печатать
    1 - Печатать
    32Протокол работы ККТчисло0 - АТОЛ 2
    1 - АТОЛ 3
    33PIN-код для BluetoothстрокаМаксимальная длина 8
    34Уровень коррекции ошибок QR-кодачисло1 .. 4
    35Количество строк заголовка клишечисло0 - 0
    1 - 1
    2 - 2
    3 - 3
    4 - 4
    5 - 5
    6 - 6
    7 - 7
    8 - 8
    9 - 9
    10 - 10
    11 - 11
    12 - 12
    13 - 13
    14 - 14
    15 - 15
    16 - 16
    17 - 17
    18 - 18
    19 - 19
    20 - 20
    99 - Старый формат печати
    36Расстояние от ТПГ до отрезного ножачисло0 .. 255
    37Звуковой сигнал при ошибкечисло0 - Нет
    1 - Да
    40Сохранять печатаемый документ в памятьчисло0 - Не сохранять
    1 - Сохранять только отчеты
    2 - Сохранять все
    41Печатать нулевые налогичисло0 - Не печатать
    1 - Печатать
    42Печать необнуляемой суммы возвратов приходовчисло0 - Не печатать
    1 - Печатать
    43Печать необнуляемой суммы возвратов расходовчисло0 - Не печатать
    1 - Печатать
    44Печатать количество отмененных чеков по типамчисло0 - Не печатать
    1 - Печатать
    45Не печатать блоки «приходы», «возвраты приходов», «расходы», «возвраты расходов»число0 - Не печатать
    1 - Печатать
    46Печатать нулевые суммычисло0 - Не печатать
    1 - Печатать
    47Печатать номер ККМ в магазинечисло0 - Не печатать
    1 - Печатать
    48Печатать реквизиты чека на аннулированных чекахчисло0 - Не печатать
    1 - Печатать
    49Получать IP-адреса от DHCP (Ethernet)число0 - Нет
    1 - Да
    50Система налогообложения по умолчаниючисло0 - Не выбрана
    1 - Традиционная СНО
    2 - Упрощенная СНО (Доход)
    4 - Упрощенная СНО (Доход минус Расход)
    8 - Единый налог на вмененный доход
    16 - Единый сельскохозяйственный налог
    32 - Патентная система налогообложения
    51Шаблон чекачисло1 - Шаблон 1
    2 - Шаблон 2
    52Признак способа расчета по умолчаниючисло1 - Предоплата 100%
    2 - Предоплата
    3 - Аванс
    4 - Полный расчет
    5 - Частичный расчет и кредит
    6 - Передача в кредит
    7 - Оплата кредита
    53Округлять сумму налогачисло0 - На весь чек
    1 - После каждой позиции
    54Контроль суммы налогов 10% и 18% (20%)число0 - Отключен
    1 - Включен
    55Пересчитывать суммы налогов после скидки на итогчисло0 - Нет
    1 - Да
    56Учет наличностичисло0 - Отключен
    1 - Включен
    57Печатать признак способа расчетачисло0 - Не печатать
    1 - Печатать
    58Печатать признак предмета расчетачисло0 - Не печатать
    1 - Печатать полное наименование
    2 - Печатать краткое наименование
    59Не печатать Z-отчет при закрытии сменычисло0 - Печатать
    1 - Не печатать
    60Печатать необнуляемые суммы по способам расчета прихода и возврата приходачисло0 - Не печатать
    1 - Печатать
    61Печатать необнуляемые суммы по способам расчета расхода и возврата расходачисло0 - Не печатать
    1 - Печатать
    62Не печатать клише автоматически при закрытии чекачисло0 - Печатать
    1 - Не печатать
    63Признак предмета расчета по умолчаниючисло1 - Товар
    2 - Подакцизный товар
    3 - Работа
    4 - Услуга
    5 - Ставка азартной игры
    6 - Выигрыш азартной игры
    7 - Лотерейный билет
    8 - Выигрыш лотереи
    9 - Предоставление РИД
    10 - Платеж
    11 - Агентское вознаграждение
    12 - Составной предмет расчета
    13 - Иной предмет расчета
    14 - Имущественное право
    15 - Внереализационный доход
    16 - Иные платежи и взносы
    17 - Торговый сбор
    18 - Курортный сбор
    19 - Залог
    20 - Расход
    21 - Взносы на ОПС ИП
    22 - Взносы на ОПС
    23 - Взносы на ОМС ИП
    24 - Взносы на ОМС
    25 - Взносы на ОСС
    26 - Платеж казино
    66Отрезать чек после завершения документачисло0 - Не отрезать
    1 - Не полностью
    2 - Полностью
    67Запретить отрезку чековчисло0 - Нет
    1 - Да
    68Запретить отрезку отчетовчисло0 - Нет
    1 - Да
    69Отрезать ЧЛ после печати клише командой «Печать клише»число0 - Нет
    1 - Да
    71IP-адрес (Ethernet)строкаМаксимальная длина 15
    72Маска подсети (Ethernet)строкаМаксимальная длина 15
    73Шлюз по умолчанию (Ethernet)строкаМаксимальная длина 15
    74IP-порт (Ethernet)число1 .. 65535
    75Расстояние от ножа отрезчика до гребенкичисло0 .. 255
    76Выключение / перезагрузка ККТчисло0 - Отключением кабеля USB
    1 - По команде
    94Пароль кассира 1строкаМаксимальная длина 8
    95Пароль кассира 2строкаМаксимальная длина 8
    96Пароль кассира 3строкаМаксимальная длина 8
    97Пароль кассира 4строкаМаксимальная длина 8
    98Пароль кассира 5строкаМаксимальная длина 8
    99Пароль кассира 6строкаМаксимальная длина 8
    100Пароль кассира 7строкаМаксимальная длина 8
    101Пароль кассира 8строкаМаксимальная длина 8
    102Пароль кассира 9строкаМаксимальная длина 8
    103Пароль кассира 10строкаМаксимальная длина 8
    104Пароль кассира 11строкаМаксимальная длина 8
    105Пароль кассира 12строкаМаксимальная длина 8
    106Пароль кассира 13строкаМаксимальная длина 8
    107Пароль кассира 14строкаМаксимальная длина 8
    108Пароль кассира 15строкаМаксимальная длина 8
    109Пароль кассира 16строкаМаксимальная длина 8
    110Пароль кассира 17строкаМаксимальная длина 8
    111Пароль кассира 18строкаМаксимальная длина 8
    112Пароль кассира 19строкаМаксимальная длина 8
    113Пароль кассира 20строкаМаксимальная длина 8
    114Пароль кассира 21строкаМаксимальная длина 8
    115Пароль кассира 22строкаМаксимальная длина 8
    116Пароль кассира 23строкаМаксимальная длина 8
    117Пароль кассира 24строкаМаксимальная длина 8
    118Пароль кассира 25строкаМаксимальная длина 8
    119Пароль кассира 26строкаМаксимальная длина 8
    120Пароль кассира 27строкаМаксимальная длина 8
    121Пароль кассира 28строкаМаксимальная длина 8
    122Имя кассира 1строкаМаксимальная длина 57
    123Имя кассира 2строкаМаксимальная длина 57
    124Имя кассира 3строкаМаксимальная длина 57
    125Имя кассира 4строкаМаксимальная длина 57
    126Имя кассира 5строкаМаксимальная длина 57
    127Имя кассира 6строкаМаксимальная длина 57
    128Имя кассира 7строкаМаксимальная длина 57
    129Имя кассира 8строкаМаксимальная длина 57
    130Имя кассира 9строкаМаксимальная длина 57
    131Имя кассира 10строкаМаксимальная длина 57
    132Имя кассира 11строкаМаксимальная длина 57
    133Имя кассира 12строкаМаксимальная длина 57
    134Имя кассира 13строкаМаксимальная длина 57
    135Имя кассира 14строкаМаксимальная длина 57
    136Имя кассира 15строкаМаксимальная длина 57
    137Имя кассира 16строкаМаксимальная длина 57
    138Имя кассира 17строкаМаксимальная длина 57
    139Имя кассира 18строкаМаксимальная длина 57
    140Имя кассира 19строкаМаксимальная длина 57
    141Имя кассира 20строкаМаксимальная длина 57
    142Имя кассира 21строкаМаксимальная длина 57
    143Имя кассира 22строкаМаксимальная длина 57
    144Имя кассира 23строкаМаксимальная длина 57
    145Имя кассира 24строкаМаксимальная длина 57
    146Имя кассира 25строкаМаксимальная длина 57
    147Имя кассира 26строкаМаксимальная длина 57
    148Имя кассира 27строкаМаксимальная длина 57
    149Имя кассира 28строкаМаксимальная длина 57
    150ИНН кассира 1строкаМаксимальная длина 12
    151ИНН кассира 2строкаМаксимальная длина 12
    152ИНН кассира 3строкаМаксимальная длина 12
    153ИНН кассира 4строкаМаксимальная длина 12
    154ИНН кассира 5строкаМаксимальная длина 12
    155ИНН кассира 6строкаМаксимальная длина 12
    156ИНН кассира 7строкаМаксимальная длина 12
    157ИНН кассира 8строкаМаксимальная длина 12
    158ИНН кассира 9строкаМаксимальная длина 12
    159ИНН кассира 10строкаМаксимальная длина 12
    160ИНН кассира 11строкаМаксимальная длина 12
    161ИНН кассира 12строкаМаксимальная длина 12
    162ИНН кассира 13строкаМаксимальная длина 12
    163ИНН кассира 14строкаМаксимальная длина 12
    164ИНН кассира 15строкаМаксимальная длина 12
    165ИНН кассира 16строкаМаксимальная длина 12
    166ИНН кассира 17строкаМаксимальная длина 12
    167ИНН кассира 18строкаМаксимальная длина 12
    168ИНН кассира 19строкаМаксимальная длина 12
    169ИНН кассира 20строкаМаксимальная длина 12
    170ИНН кассира 21строкаМаксимальная длина 12
    171ИНН кассира 22строкаМаксимальная длина 12
    172ИНН кассира 23строкаМаксимальная длина 12
    173ИНН кассира 24строкаМаксимальная длина 12
    174ИНН кассира 25строкаМаксимальная длина 12
    175ИНН кассира 26строкаМаксимальная длина 12
    176ИНН кассира 27строкаМаксимальная длина 12
    177ИНН кассира 28строкаМаксимальная длина 12
    178Пароль администраторастрокаМаксимальная длина 8
    179Имя администраторастрокаМаксимальная длина 57
    180ИНН администраторастрокаМаксимальная длина 12
    181Пароль системного администраторастрокаМаксимальная длина 8
    182Имя системного администраторастрокаМаксимальная длина 57
    183ИНН системного администраторастрокаМаксимальная длина 12
    184Строка клише 1строкаМаксимальная длина 57
    185Строка клише 2строкаМаксимальная длина 57
    186Строка клише 3строкаМаксимальная длина 57
    187Строка клише 4строкаМаксимальная длина 57
    188Строка клише 5строкаМаксимальная длина 57
    189Строка клише 6строкаМаксимальная длина 57
    190Строка клише 7строкаМаксимальная длина 57
    191Строка клише 8строкаМаксимальная длина 57
    192Строка клише 9строкаМаксимальная длина 57
    193Строка клише 10строкаМаксимальная длина 57
    194Строка клише 11строкаМаксимальная длина 57
    195Строка клише 12строкаМаксимальная длина 57
    196Строка клише 13строкаМаксимальная длина 57
    197Строка клише 14строкаМаксимальная длина 57
    198Строка клише 15строкаМаксимальная длина 57
    199Строка клише 16строкаМаксимальная длина 57
    200Строка клише 17строкаМаксимальная длина 57
    201Строка клише 18строкаМаксимальная длина 57
    202Строка клише 19строкаМаксимальная длина 57
    203Строка клише 20строкаМаксимальная длина 57
    204Наименование секции 1строкаМаксимальная длина 57
    205Наименование секции 2строкаМаксимальная длина 57
    206Наименование секции 3строкаМаксимальная длина 57
    207Наименование секции 4строкаМаксимальная длина 57
    208Наименование секции 5строкаМаксимальная длина 57
    209Наименование секции 6строкаМаксимальная длина 57
    210Наименование секции 7строкаМаксимальная длина 57
    211Наименование секции 8строкаМаксимальная длина 57
    212Наименование секции 9строкаМаксимальная длина 57
    213Наименование секции 10строкаМаксимальная длина 57
    214Наименование секции 11строкаМаксимальная длина 57
    215Наименование секции 12строкаМаксимальная длина 57
    216Наименование секции 13строкаМаксимальная длина 57
    217Наименование секции 14строкаМаксимальная длина 57
    218Наименование секции 15строкаМаксимальная длина 57
    219Наименование секции 16строкаМаксимальная длина 57
    236Скорость ККТчисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    238Скорость подключенного устройствачисло1200 - 1200 бод
    2400 - 2400 бод
    4800 - 4800 бод
    9600 - 9600 бод
    14400 - 14400 бод
    19200 - 19200 бод
    38400 - 38400 бод
    57600 - 57600 бод
    115200 - 115200 бод
    239Канал обмена с ККТчисло0 - RS-232
    4 - USB
    6 - Ethernet
    7 - Wi-Fi
    240Наименование способа расчета 2строкаМаксимальная длина 57
    241Наименование способа расчета 3строкаМаксимальная длина 57
    242Наименование способа расчета 4строкаМаксимальная длина 57
    243Наименование способа расчета 5строкаМаксимальная длина 57
    244Наименование способа расчета 6строкаМаксимальная длина 57
    245Наименование способа расчета 7строкаМаксимальная длина 57
    246Наименование способа расчета 8строкаМаксимальная длина 57
    247Наименование способа расчета 9строкаМаксимальная длина 57
    248Наименование способа расчета 10строкаМаксимальная длина 57
    249Номер формы расчета 2число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    250Номер формы расчета 3число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    251Номер формы расчета 4число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    252Номер формы расчета 5число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    253Номер формы расчета 6число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    254Номер формы расчета 7число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    255Номер формы расчета 8число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    256Номер формы расчета 9число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    257Номер формы расчета 10число2 - Безналичными
    3 - Предварительная оплата (аванс)
    4 - Последующая оплата (кредит)
    5 - Иная форма оплаты (встречное предоставление)
    265Конфигурационная строка (GSM)строкаМаксимальная длина 32
    266Имя пользователя (GSM)строкаМаксимальная длина 32
    267Пароль (GSM)строкаМаксимальная длина 32
    268Режим Wi-Fiчисло0 - Клиент
    1 - Точка доступа
    269Имя точки доступа для работы по Wi-FiстрокаМаксимальная длина 32
    270Пароль доступа к точке доступастрокаМаксимальная длина 32
    271Номер канала Wi-Fi в режиме точки доступачисло0 .. 13
    272Тип шифрования Wi-Fiчисло0 - Open
    1 - WEP
    2 - WPA
    3 - WPA2
    4 - WPA/WPA2
    273Адрес ОФДстрокаМаксимальная длина 64
    274Порт ОФДчисло1 .. 65535
    275DNS ОФДстрокаМаксимальная длина 15
    276Канал обмена с ОФДчисло1 - USB (EoU)
    2 - Ethernet
    3 - Wi-Fi
    4 - GSM-модем
    5 - EthernetOverTransport
    277Адрес сайта ФНСстрокаМаксимальная длина 64
    278Адрес личного кабинетастрокаМаксимальная длина 64
    279IP-порт личного кабинетачисло1 .. 65535
    280Интервал посылок диагностических сообщений, с.число0 .. 65535
    281Интервал ожидания квитанции ОФД (в мин.)число1 .. 5
    282Интервал опроса ФН при разрывах (в сек.)число5 .. 120
    287Версия ФФДчисло0 - Автоматически
    100 - ФФД 1.0
    305Частота обмена с ФН, кбит/счисло50 .. 400
    306Передавать необязательные реквизиты в ОФДчисло0 - Не передавать
    1 - Передавать
    307Ожидание инициализации ФН после включения, с.число5 .. 255
    308Ожидание обработки команды в ФН, с.число10 .. 255
    309Размер чека в байтахчисло0 .. 4294967295
    310Печатать пароль доступа к точке Wi-Fiчисло0 - Не печатать
    1 - Печатать
    311Блокировать ККТ при переполнении ЭЖчисло0 - Не блокировать
    1 - Блокировать работу по протоколу
    2 - Блокировать работу с ЛК
    312Работа со скидкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    313Работа со надбавкамичисло0 - Запрещены
    1 - Разрешены на весь чек
    2 - Разрешены на позицию
    3 - Разрешены все
    325Получение IP-адреса от DHCP (Wi-Fi)число0 - Отключено
    1 - Включено
    326IP-адрес (Wi-Fi)строкаМаксимальная длина 15
    327Маска подсети (Wi-Fi)строкаМаксимальная длина 15
    328Шлюз по умолчанию (Wi-Fi)строкаМаксимальная длина 15
    330Шрифт реквизитов в чекечисло1 .. 7
    331Сопряжение по Bluetoothчисло0 - Запрещено
    1 - Разрешено
    332Печатать реквизит «Наименование ОФД»число0 - Не печатать
    1 - Печатать
    333Печатать реквизит «Адрес электронной почты отправителя»число0 - Не печатать
    1 - Печатать
    334Работа с ЭЖчисло0 - Отключена
    1 - Включена
    335Автоматически печатать копию Z-отчета после печати Z-отчетачисло0 - Не печатать
    1 - Печатать
    336Выдвигать чекчисло0 - Нет
    10 - На 10 мм
    20 - На 20 мм
    30 - На 40 мм
    337Действия с чеком после отрезкичисло0 - Проглотить
    1 - Выдвинуть на заданное расстояние
    2 - Выбросить из принтера
    338Действия с предыдущим чеком, если его не забраличисло0 - Проглотить
    1 - Выбросить
    339Чек делает петлючисло0 - Нет
    1 - Да
    340Обнулять счетчик чеков при закрытии сменычисло0 - Нет
    1 - Да
    341Перенос строк при печатичисло0 - Печатать на разных строках
    1 - Переносить, если не умещается
    2 - Обрезать, если не умещается
    342Таймаут на выключение перифериичисло0 .. 99
    343Модель подключенного принтерачисло1 - АТОЛ
    2 - VKP80
    3 - PPU700
    4 - CT2000
    5 - TG2480
    6 - EPSON
    7 - MEMORY
    8 - VKP80SX
    9 - SNBC BT-T080R
    10 - SNBC BK-T680
    11 - SNBC BT-UR056
    344Выдвигать суточные отчетычисло0 - Нет
    1 - Да
    345Печатать реквизит «ИНН поставщика»число0 - Не печатать
    1 - Печатать

    Скрипты драйвера

    Описание

    Драйвер позволяет выполнять скрипты JavaScript через встроенный интерпретатор. В качестве встроенного интерпретатора выступает Duktape версии 2.3.0. Он поддерживает стандарт ECMAScript E5/E5.1, частично возможна поддержка более старших стандартов.

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

    JSON-задания драйвера также работают через скрипты JavaScript.

    Имеются ограничения на вызовы методов драйвера из скриптов JavaScript. Нельзя:

    Из скриптов доступен глобальный объект драйвера - Fptr.

    Внешние скрипты

    Для указания пути к внешним скриптам используется настройка LIBFPTR_SETTING_SCRIPTS_PATH. По пути, указанному в этой настройке, драйвер будет искать пользовательские скрипты JSON-заданий. Также путь можно указать в переменных окружения (Windows, Linux) и в реестре (Windows). Приоритеты у способов задания пути следующие:

    1. Настройка LIBFPTR_SETTING_SCRIPTS_PATH драйвера
    2. Переменная окружения DTO10_SCRIPTS_PATH
    3. Ключ реестра HKLM\SOFTWARE\ATOL\Drivers\10.0\KKT\SCRIPTS_PATH

    Также их возможно загрузить в драйвер методом uploadDriverScript().

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

    Пример обработчика JSON-задания с возвратом ошибки драйвера

    function execute(task) {
        Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);
        if (Fptr.report() < 0) {
            return Fptr.error();
        }
        return Fptr.ok();
    }
    

    Пример обработчика JSON-задания с возвратом специфичной ошибки

    function execute(task) {
        if (task.docNumber === undefined) {
            return Fptr.result(99999, "Не найдено обязательное поле")
        }
    
        Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_FN_DOC_BY_NUMBER);
        Fptr.setParam(Fptr.LIBFPTR_PARAM_DOCUMENT_NUMBER, task.docNumber);
        if (Fptr.report() < 0) {
            return Fptr.error();
        }
        return Fptr.ok();
    }
    

    Пример обработчика JSON-задания с возвратом результата

    function execute(task) {
        Fptr.setParam(Fptr.LIBFPTR_PARAM_DATA_TYPE, Fptr.LIBFPTR_DT_SHIFT_STATE);
        if (Fptr.queryData() < 0) {
            return Fptr.raise();
        }
    
        return Fptr.ok({
            shiftStatus: {
                number: Fptr.getParamInt(Fptr.LIBFPTR_PARAM_SHIFT_NUMBER),
                expiredTime: Fptr.getParamDateTime(Fptr.LIBFPTR_PARAM_DATE_TIME),
                state: Fptr.getParamInt(Fptr.LIBFPTR_PARAM_SHIFT_STATE)
            }
        });
    }
    

    Пример обработчика JSON-задания с экстренным прерыванием скрипта

    function execute(task) {
        Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);
        if (Fptr.report() < 0) {
            Fptr.raise();
        }
        return Fptr.ok();
    }
    

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

    Для хранения результата по умолчанию используется JavaScript-объект с названием Result следующей структуры:

    Поле Тип Описание
    error int Код ошибки
    errorDescription string Описание ошибки
    isError bool Флаг ошибки. True, если error != 0. Только для чтения
    result object Данные ответа
    events object События

    Дополнительно, добавлены следующие методы объекту Fptr, упрощающие формирование такого объекта:

    Параметр result представляет собой произвольный JavaScript-объект с результатом выполнения скрипта.

    Параметр events указывает события, которые произошли во время выполнения скрипта. На данный момент обрабатывается только одно событие - shiftAutoOpened (смена была автоматически открыта). Используется в JSON-заданиях.

    Работа с JSON-заданиями

    Начиная с версии ДТО 10.5.1.0, JSON-задания представляют собой скрипты на языке JavaScript, составленные по определенным правилам. Есть набор скриптов, которые включены в состав драйвера, описание соответствующих им JSON-заданий приведено в разделе JSON-задания. Также можно разрабатывать свои (внешние по отношению к драйверу) скрипты для обработки нестандартных JSON-заданий, а можно и переопределить встроенные в драйвер.

    Каждый скрипт, отвечающий за JSON-задания, должен удовлетворять следующим условиям:

    Для переопределения встроенного в драйвера скрипта достаточно создать скрипт с аналогичным заданием и положить его в каталог внешних скриптов или загрузить в драйвер с помощью uploadDriverScript().

    Библиотеки функций

    В драйвер встроены следующие библиотеки:

    Их можно подключать с помощью глобальной функции require().

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

    Выполнение скрипта

    Выполнение скрипта

    const wchar_t code[] = L"Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);\n\
    if (Fptr.report() < 0) {\n\
        return Fptr.error({'key':'value'});\n\
    }";
    
    libfptr_set_param_string(LIBFPTR_PARAM_SCRIPT_CODE, code);
    libfptr_exec_driver_script(fptr);
    
    std::vector<wchar_t> bfr(1024);
    int size = libfptr_get_param_str(fptr, LIBFPTR_PARAM_SCRIPT_RESULT, &bfr[0], bfr.size());
    if (size > bfr.size())
    {
        bfr.resize(size);
        libfptr_get_param_str(fptr, LIBFPTR_PARAM_SCRIPT_RESULT, &bfr[0], bfr.size());
    }
    std::wstring result = std::wstring(&bfr[0]); // Результат - строка "{\"key\":\"value\"}"
    
    code = """Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);
    if (Fptr.report() < 0) {
        return Fptr.error({'key':'value'});
    }"""
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_CODE, code)
    fptr.execDriverScript()
    result = fptr.getParamString(IFptr.LIBFPTR_PARAM_SCRIPT_RESULT) # Результат - строка """{"key":"value"}"""
    
    String code = "Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);\n" +
    "if (Fptr.report() < 0) {\n" +
    "    return Fptr.error({'key':'value'});\n" +
    "}";
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_CODE, code);
    fptr.execDriverScript();
    String result = fptr.getParamString(IFptr.LIBFPTR_PARAM_SCRIPT_RESULT); // Результат - строка "{\"key\":\"value\"}"
    
    String code = "Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);\n" +
    "if (Fptr.report() < 0) {\n" +
    "    return Fptr.error({'key':'value'});\n" +
    "}";
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_CODE, code);
    fptr.execDriverScript();
    String result = fptr.getParamString(IFptr.LIBFPTR_PARAM_SCRIPT_RESULT); // Результат - строка "{\"key\":\"value\"}"
    
    NSString *code = @"Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);\n\
    if (Fptr.report() < 0) {\n\
        return Fptr.error({'key':'value'});\n\
    }";
    
    [fptr setParam:LIBFPTR_PARAM_SCRIPT_CODE, NSStringParam:code];
    [fptr execDriverScript];
    NSString *result = [fptr getParamString:LIBFPTR_PARAM_SCRIPT_RESULT]; // Результат - строка "{\"key\":\"value\"}"
    
    String code = "Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);\n" +
    "if (Fptr.report() < 0) {\n" +
    "    return Fptr.error({'key':'value'});\n" +
    "}";
    
    fptr.setParam(Constants.LIBFPTR_PARAM_SCRIPT_CODE, code);
    fptr.execDriverScript();
    String result = fptr.getParamString(Constants.LIBFPTR_PARAM_SCRIPT_RESULT); // Результат - строка "{\"key\":\"value\"}"
    
    const
        code = 'Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);' + #13#10 +
    'if (Fptr.report() < 0) {' + #13#10 +
    '   return Fptr.error({"key":"value"});' + #13#10 +
    '}'
    var
        result: String
    begin
        fptr.setParam(fptr.LIBFPTR_PARAM_SCRIPT_CODE, code);
        fptr.execDriverScript;
        result = fptr.getParamString(fptr.LIBFPTR_PARAM_SCRIPT_RESULT); // Результат - строка '{"key":"value"}'
    end;
    
    code := `Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);
    if (Fptr.report() < 0) {
        return Fptr.error({'key':'value'});
    }`
    
    fptr.SetParam(fptr10.LIBFPTR_PARAM_SCRIPT_CODE, code)
    fptr.ExecDriverScript()
    result := fptr.GetParamString(fptr10.LIBFPTR_PARAM_SCRIPT_RESULT) // Результат - строка "{\"key\":\"value\"}"
    
    // Метод недоступен
    

    Для выполнения произвольного скрипта нужно вызвать метод execDriverScript() и передать ему код скрипта в параметре LIBFPTR_PARAM_SCRIPT_CODE.

    В параметр LIBFPTR_PARAM_SCRIPT_RESULT записывается строковое представление результата. Результатом считается любое значение, которое возвращается из скрипта с помощью ключевого слова return. Если возвращается объект Result, то в параметр LIBFPTR_PARAM_SCRIPT_RESULT попадают данные из поля result.

    Если скрипт возвращает ошибку с помощью вызова Fptr.error() или Fptr.result(), она будет разобрана и возвращена методом. Если скрипт завершает работу вызовом Fptr.raise(), то метод вернет ошибку 503 (Ошибка скрипта драйвера) с расширенным текстом ошибки, включающим в себя оригинальную ошибку. Если скрипт завершается, не возвращая результат, метод считается успешно выполненым.

    Загрузка скриптов

    Загрузка скрипта для выполнения

    const wchar_t code[] = L"Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);\n\
    if (Fptr.report() < 0) {\n\
        return Fptr.error();\n\
    }";
    
    libfptr_set_param_int(LIBFPTR_PARAM_SCRIPT_TYPE, LIBFPTR_SCRIPT_EXECUTABLE);
    libfptr_set_param_string(LIBFPTR_PARAM_SCRIPT_CODE, code);
    libfptr_set_param_string(LIBFPTR_PARAM_SCRIPT_NAME, L"test");
    libfptr_upload_driver_script(fptr);
    
    libfptr_set_param_string(LIBFPTR_PARAM_SCRIPT_NAME, "test")
    libfptr_exec_driver_script_by_id(fptr);
    
    code = """Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);
    if (Fptr.report() < 0) {
        return Fptr.error();
    }"""
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_TYPE, IFptr.LIBFPTR_SCRIPT_EXECUTABLE)
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_CODE, code)
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_NAME, "test")
    fptr.uploadDriverScript()
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_NAME, "test")
    fptr.execDriverScriptById()
    
    String code = "Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);\n" +
    "if (Fptr.report() < 0) {\n" +
    "    return Fptr.error();\n" +
    "}";
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_TYPE, IFptr.LIBFPTR_SCRIPT_EXECUTABLE);
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_CODE, code);
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_NAME, "test");
    fptr.uploadDriverScript();
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_NAME, "test");
    fptr.execDriverScriptById();
    
    String code = "Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);\n" +
    "if (Fptr.report() < 0) {\n" +
    "    return Fptr.error();\n" +
    "}";
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_TYPE, IFptr.LIBFPTR_SCRIPT_EXECUTABLE);
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_CODE, code);
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_NAME, "test");
    fptr.uploadDriverScript();
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_NAME, "test");
    fptr.execDriverScriptById();
    
    NSString *code = @"Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);\n\
    if (Fptr.report() < 0) {\n\
        return Fptr.error();\n\
    }";
    
    [fptr setParam:LIBFPTR_PARAM_SCRIPT_TYPE, intParam:LIBFPTR_SCRIPT_EXECUTABLE];
    [fptr setParam:LIBFPTR_PARAM_SCRIPT_CODE, NSStringParam:code];
    [fptr setParam:LIBFPTR_PARAM_SCRIPT_NAME, NSStringParam:@"test")];
    [fptr uploadDriverScript];
    
    [fptr setParam:LIBFPTR_PARAM_SCRIPT_NAME, NSStringParam:@"test")];
    [fptr execDriverScriptById];
    
    String code = "Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);" +
    "if (Fptr.report() < 0) {" +
    "    return Fptr.error();" +
    "}";
    
    fptr.setParam(Constants.LIBFPTR_PARAM_SCRIPT_TYPE, Constants.LIBFPTR_SCRIPT_EXECUTABLE);
    fptr.setParam(Constants.LIBFPTR_PARAM_SCRIPT_CODE, code);
    fptr.setParam(Constants.LIBFPTR_PARAM_SCRIPT_NAME, "test");
    fptr.uploadDriverScript();
    
    fptr.setParam(Constants.LIBFPTR_PARAM_SCRIPT_NAME, "test");
    fptr.execDriverScriptById();
    
    const
        code = 'Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);' + #13#10 +
    'if (Fptr.report() < 0) {' + #13#10 +
    '   return Fptr.error();' + #13#10 +
    '}'
    begin
        fptr.setParam(fptr.LIBFPTR_PARAM_SCRIPT_TYPE, fptr.LIBFPTR_SCRIPT_EXECUTABLE);
        fptr.setParam(fptr.LIBFPTR_PARAM_SCRIPT_CODE, code);
        fptr.setParam(fptr.LIBFPTR_PARAM_SCRIPT_NAME, 'test');
        fptr.uploadDriverScript;
    
        fptr.setParam(fptr.LIBFPTR_PARAM_SCRIPT_NAME, 'test');
        fptr.execDriverScriptById;
    end;
    
    code := `Fptr.setParam(Fptr.LIBFPTR_PARAM_REPORT_TYPE, Fptr.LIBFPTR_RT_X);
    if (Fptr.report() < 0) {
        return Fptr.error();
    }`
    
    fptr.SetParam(fptr10.LIBFPTR_PARAM_SCRIPT_TYPE, fptr10.LIBFPTR_SCRIPT_EXECUTABLE)
    fptr.SetParam(fptr10.LIBFPTR_PARAM_SCRIPT_CODE, code)
    fptr.SetParam(fptr10.LIBFPTR_PARAM_SCRIPT_NAME, 'test')
    fptr.UploadDriverScript()
    
    fptr.SetParam(fptr10.LIBFPTR_PARAM_SCRIPT_NAME, 'test')
    fptr.ExecDriverScriptById()
    
    // Метод недоступен
    

    Загрузка скрипта JSON-задания

    const wchar_t code[] = L"function exectute(task) {\n\
        Fptr.logWrite('FiscalPrinter', Fptr.LIBFPTR_LOG_INFO, task);\n\
        return Fptr.ok();\n\
    }";
    
    libfptr_set_param_int(LIBFPTR_PARAM_SCRIPT_TYPE, LIBFPTR_SCRIPT_JSON);
    libfptr_set_param_string(LIBFPTR_PARAM_SCRIPT_CODE, code);
    libfptr_set_param_string(LIBFPTR_PARAM_SCRIPT_NAME, L"test");
    libfptr_upload_driver_script(fptr);
    
    libfptr_set_param_string(LIBFPTR_PARAM_JSON_DATA, L"{\"type\":\"test\"}");
    libfptr_process_json(fptr);
    
    
    code = """function execute(task) {
        Fptr.logWrite('FiscalPrinter', Fptr.LIBFPTR_LOG_INFO, task);
        return Fptr.ok();
    }"""
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_TYPE, IFptr.LIBFPTR_SCRIPT_JSON)
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_CODE, code)
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_NAME, "test")
    fptr.uploadDriverScript()
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_JSON_DATA, "{\"type\":\"test\"}")
    fptr.processJson()
    
    String code = "function execute(task) {\n" +
    "    Fptr.logWrite('FiscalPrinter', Fptr.LIBFPTR_LOG_INFO, task);\n" +
    "    return Fptr.ok();\n" +
    "}";
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_TYPE, IFptr.LIBFPTR_SCRIPT_JSON);
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_CODE, code);
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_NAME, "test");
    fptr.uploadDriverScript();
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_JSON_DATA, "{\"type\": \"test\"}");
    fptr.processJson();
    
    String code = "function execute(task) {\n" +
    "    Fptr.logWrite('FiscalPrinter', Fptr.LIBFPTR_LOG_INFO, task);\n" +
    "    return Fptr.ok();\n" +
    "}";
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_TYPE, IFptr.LIBFPTR_SCRIPT_JSON);
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_CODE, code);
    fptr.setParam(IFptr.LIBFPTR_PARAM_SCRIPT_NAME, "test");
    fptr.uploadDriverScript();
    
    fptr.setParam(IFptr.LIBFPTR_PARAM_JSON_DATA, "{\"type\": \"test\"}");
    fptr.processJson();
    
    NSString *code = @"function exectute(task) {\n\
        Fptr.logWrite('FiscalPrinter', Fptr.LIBFPTR_LOG_INFO, task);\n\
        return Fptr.ok();\n\
    }";
    
    [fptr setParam:LIBFPTR_PARAM_SCRIPT_TYPE, intParam:LIBFPTR_SCRIPT_JSON];
    [fptr setParam:LIBFPTR_PARAM_SCRIPT_CODE, NSStringParam:code];
    [fptr setParam:LIBFPTR_PARAM_SCRIPT_NAME, NSStringParam:@"test")];
    [fptr uploadDriverScript];
    
    [fptr setParam:LIBFPTR_PARAM_JSON_DATA, NSStringParam:@"{\"type\": \"test\"}"];
    [fptr processJson];
    
    String code = "function execute(task) {\n" +
    "    Fptr.logWrite('FiscalPrinter', Fptr.LIBFPTR_LOG_INFO, task);\n" +
    "    return Fptr.ok();\n" +
    "}";
    
    fptr.setParam(Constants.LIBFPTR_PARAM_SCRIPT_TYPE, Constants.LIBFPTR_SCRIPT_JSON);
    fptr.setParam(Constants.LIBFPTR_PARAM_SCRIPT_CODE, code);
    fptr.setParam(Constants.LIBFPTR_PARAM_SCRIPT_NAME, "test");
    fptr.uploadDriverScript();
    
    fptr.setParam(Constants.LIBFPTR_PARAM_JSON_DATA, "{\"type\": \"test\"}");
    fptr.processJson();
    
    const
        code = 'function execute(task) {' + #13#10 +
    '    Fptr.logWrite('FiscalPrinter', Fptr.LIBFPTR_LOG_INFO, task);' + #13#10 +
    '    return Fptr.ok();' + #13#10 +
    '}'
    begin
        fptr.setParam(fptr.LIBFPTR_PARAM_SCRIPT_TYPE, fptr.LIBFPTR_SCRIPT_JSON);
        fptr.setParam(fptr.LIBFPTR_PARAM_SCRIPT_CODE, code);
        fptr.setParam(fptr.LIBFPTR_PARAM_SCRIPT_NAME, 'test');
        fptr.uploadDriverScript;
    
        fptr.setParam(fptr.LIBFPTR_PARAM_JSON_DATA, '{"type": "test"}');
        fptr.processJson;
    end;
    
    code := `function execute(task) {
        Fptr.logWrite('FiscalPrinter', Fptr.LIBFPTR_LOG_INFO, task);
        return Fptr.ok();
    }`
    
    fptr.SetParam(fptr10.LIBFPTR_PARAM_SCRIPT_TYPE, fptr10.LIBFPTR_SCRIPT_JSON)
    fptr.SetParam(fptr10.LIBFPTR_PARAM_SCRIPT_CODE, code)
    fptr.SetParam(fptr10.LIBFPTR_PARAM_SCRIPT_NAME, 'test')
    fptr.UploadDriverScript()
    
    fptr.SetParam(fptr10.LIBFPTR_PARAM_JSON_DATA, "{\"type\": \"test\"}")
    fptr.ProcessJson()
    
    // Метод недоступен
    

    Помимо выполнения скриптов (методы execDriverScript()) и загрузки скриптов из файлов, можно загрузить скрипты в драйвер во время работы программно. Для этого требуется вызвать метод uploadDriverScript(), передав ему следущие параметры:

    В случае типа LIBFPTR_SCRIPT_EXECUTABLE, в работе загруженный таким спосом скрипт можно вызвать с помощью метода execDriverScriptById(). Метод принимает идентификатор скрипта в параметре LIBFPTR_PARAM_SCRIPT_NAME, и может возвращать результат скрипта в параметре LIBFPTR_PARAM_SCRIPT_RESULT (аналогично методу execDriverScript()).

    Android Service

    Пример задания

    {
        "type": "closeShift",
        "operator": {
            "name": "Иванов",
            "vatin": "123654789507"
        }
    }
    

    Пример ответа

    {
        "result": {
            "error": 0,
            "description": "Ошибок нет"
        },
        "data": {
            "fiscalParams" : {
                "fiscalDocumentDateTime" : "2017.07.25 13:12:00",
                "fiscalDocumentNumber" : 69,
                "fiscalDocumentSign" : "1138986989",
                "fnNumber" : "9999078900000961",
                "registrationNumber" : "0000000001002292",
                "shiftNumber" : 11,
                "receiptsCount" : 3,
                "fnsUrl": "www.nalog.ru"
            },
            "warnings": {}
        }
    }
    

    Пример ошибки выполнения

    {
        "result": {
            "error": 73,
            "description": "Смена закрыта - операция невозможна"
        },
        "data": {}
    }
    

    Данный сервис позволяет не интегрировать в свое приложение драйвер ККТ, а пользоваться механизмами Android для обмена с ККТ.

    Поддерживаются следующие способы обмена с сервисом:

    В обоих случая передаваемые и принимаемые данные выглядят одинаково. В передаваемых данных содержится JSON-задание. В ответе на задание содержатся два поля:

    Использование через Intent

    Формирование Intent

    Intent intent = new Intent();
    intent.setAction("ru.atol.drivers10.service.PROCESS_TASK");
    intent.putExtra("PARAM_REQUEST", "{\n" +
            "    \"type\": \"closeShift\",\n" +
            "    \"operator\": {\n" +
            "       \"name\": \"Иванов\",\n" +
            "       \"vatin\": \"123654789507\"\n" +
            "    }\n" +
            "}");
    startActivityForResult(intent, 1);
    

    Для отправки задания в ККТ нужно сформировать Intent и в параметр PARAM_REQUEST записать JSON с заданием.

    Прием ответа

    @Override
    protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this,
                        data.getStringExtra("PARAM_RESULT"),
                        Toast.LENGTH_LONG).show();
            }
        });
    }
    

    Для приема ответа нужно из данных результата считать параметр PARAM_RESULT.

    Использование через AIDL-сервис

    Пример вызова сервиса

    private IFptrService fptrServiceBinder;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        Intent intent = new Intent();
        intent.setAction("ru.atol.drivers10.service.SERVICE");
        intent.setPackage("ru.atol.drivers10.service");
        bindService(intent, serviceConnection, BIND_AUTO_CREATE);
    }
    
    private final ServiceConnection serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceDisconnected(ComponentName name) {
            fptrServiceBinder = null;
        }
    
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            fptrServiceBinder = IFptrService.Stub.asInterface(service);
    
            try {
                String result = fptrServiceBinder.processJson("{\n" +
                        "    \"type\": \"closeShift\",\n" +
                        "    \"operator\": {\n" +
                        "       \"name\": \"Иванов\",\n" +
                        "       \"vatin\": \"123654789507\"\n" +
                        "    }\n" +
                        "}");
                Toast.makeText(MainActivity.this,
                        result,
                        Toast.LENGTH_LONG).show();
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }
    };
    

    Работа с подобными сервисами на Android описана в руководствах Google. Нужно добавить в каталог src/main/aidl/ru/atol/drivers10/service проекта файл с описанием интерфейса сервиса (IFptrService.aidl) и подключиться к сервису через bindService(). Для выполнения JSON-заданий используется метод IFptrService.processJson().

    Получение версий

    Версия сервиса

    private IFptrService fptrServiceBinder;
    
    Log.d("AtolDriver", String.format("Версия \"АТОЛ. Драйвер ККТ\" - %s", fptrServiceBinder.getServiceVersion()));
    

    Версия драйвера

    private IFptrService fptrServiceBinder;
    
    Log.d("AtolDriver", String.format("Версия драйвера ККТ - %s", fptrServiceBinder.getDriverVersion()));
    

    Метод getServiceVersion() возвращает версию приложения АТОЛ. Драйвер ККТ.

    Метод getDriverVersion() возвращает версию используемого приложением драйвера ККТ.

    Оповещения о событиях

    BroadcastReceiver

    public class DriverEventsReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, intent.getAction(), Toast.LENGTH_LONG).show();
        }
    }
    
    DriverEventsReceiver receiver = new DriverEventsReceiver();
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("ru.atol.drivers10.service.EVENT_SHIFT_OPENED");
    intentFilter.addAction("ru.atol.drivers10.service.EVENT_SHIFT_CLOSED");
    registerReceiver(receiver, intentFilter);
    

    Сервис оповещает о событиях, происходящих с ККТ, с помощью Broadcast Intent.

    На данный момент поддерживаются следующие типы событий:

    Intent Action Описание Дополнительные параметры
    ru.atol.drivers10.service.EVENT_SHIFT_OPENED Смена была открыта. Сервис отслеживает JSON-запросы, проходящие через него, и следит за тем, как они меняют состояние смены. Нет
    ru.atol.drivers10.service.EVENT_SHIFT_CLOSED Смена была закрыта. Сервис отслеживает JSON-запросы, проходящие через него, и следит за тем, как они меняют состояние смены. Нет

    Логирование

    Логи приложения хранятся в каталоге /storage/emulated/0/Android/data/ru.atol.drivers10.service/files.

    Настройка

    Если в главном окне приложения выключить настройку Активировать драйвер, то сервис не будет подключаться к ККТ

    Для настройки связи с ККТ нужно зайти в главное окно приложения и нажать на Настройки связи с ККТ.

    Для настройки параметров ККТ нужно зайти в главное окно приложения и нажать на Параметры ККТ.

    Web-сервер

    Web-сервер предназначен для обеспечения доступа к функциям ККТ одному и более Web-клиенту. Он поддерживает весь набор заданий, представленных в разделе JSON-задания и позволяет их группировать. Весь обмен ведется в кодировке UTF-8. Web-сервер хранит задания и их результаты в базе данных в течении месяца.

    Для работы Web-сервера требуется установленная Java версии 1.8 и выше.

    Алгоритм работы

    Для добавления задания в очередь на выполнения необходимо отправить его POST-запросом на адрес http://hostname:16732/requests, указав его уникальный идентификатор. В ответ сервер вернет код результата в виде HTTP-статуса.

    Для того, чтобы узнать результат задания, необходимо отправить GET-запрос на адрес http://hostname:16732/requests/. В ответ вернется JSON, содержащий в себе статусы задания и его результаты.

    Для отмены задания, которое еще не начало обрабатываться, необходимо отправить DELETE-запрос на адрес http://hostname:16732/requests/. Нельзя отменить задание, которое выполняется в данный момент.

    Запись задания

    Общая структура задания

    {
        "uuid": "<uuid>",
        "request": [
            json1,
            json2,
            ...
        ]
    }
    

    Пример задания

    {
        "uuid": "dcb697cc-3f2a-11e8-9113-0f05fcc9d7aa",
        "request": [
            {
                "type": "closeShift",
    
                "operator": {
                    "name": "Иванов",
                    "vatin": "123654789507"
                }
            },
            {
               "type": "ofdExchangeStatus"
            }
        ]
    }
    

    Тело задания состоит из двух обязательных полей:

    HTTP запрос

    POST http://<hostname>:16732/requests

    Заголовки

    Для корректной работы требуется передача следующих заголовков:

    Content-Type: application/json

    Возвращаемые ошибки

    В случае успешного добавления задания в очередь сервер вернет статус 201 (Created).

    Также могут вернуться следующие ошибки:

    Получение результата задания

    Общая структура результата задания

    {
        "results": [
            {
                "errorCode": <код ошибки>,
                "errorDescription": <текст ошибки>,
                "status": <состояние подзадачи>,
                "result": <результат подзадачи>
            },
            ...
        ]
    }
    

    Пример результата задания

    {
        "results": [
            {
                "status": "ready",
                "errorCode": 0,
                "errorDescription": "Ошибок нет",
                "result": {
                    "fiscalParams": {
                        "fiscalDocumentDateTime" : "2018-03-25T13:12:00+03:00",
                        "fiscalDocumentNumber" : 69,
                        "fiscalDocumentSign" : "1138986989",
                        "fnNumber" : "9999078900000961",
                        "registrationNumber" : "0000000001002292",
                        "shiftNumber" : 11,
                        "receiptsCount" : 3,
                        "fnsUrl": "www.nalog.ru"
                    },
                    "warnings": {
                        "notPrinted": false
                    }
                }
            },
            {
                "status": "ready",
                "errorCode": 0,
                "errorDescription": "Ошибок нет",
                "result" {
                    "status" : {
                        "notSentCount" : 69,
                        "notSentFirstDocDateTime" : "2018-03-24T13:52:00+03:00",
                        "notSentFirstDocNumber" : 1
                    }
                }
            }
        ]
    }
    

    В ответ на запрос результата задания возвращается массив результатов каждого подзадания. Каждый результат включает в себя поля:

    HTTP запрос

    GET http://<hostname>:16732/requests/<uuid>

    Возвращаемые ошибки

    В случае успешного чтения результата сервер вернет статус 200 (OK) и JSON с результатом.

    Также могут вернуться следующие ошибки:

    Обработка статусов

    Если все подзадачи имеют статус ready, значит, они все выполнены без ошибок.

    Если одна или несколько из подзадач имеют статус wait, значит, задание еще не начинало выполняться или выполняется в данный момент.

    Если одна из подзадач имеет статус error, то все подзадачи после неё (в рамках задания) будут иметь статус interrupted и выполняться не будут. Пользователь может устранить проблему, вызвавшую ошибку выполнения подзадания, и провести его еще раз, вместе со всеми прерванными подзаданиями. Для этого нужно составить новое задание.

    Статус blocked означает, что результат фискальной операции неизвестен (например, потеряна связь с ККТ). Все подзадачи после текущей (в рамках задания) будут иметь статус interrupted и выполняться не будут. Web-сервер входит в состояние восстановления работоспособности и не будет выполнять другие задания до тех пор, пока не узнает результат последней операции. Поля errorCode и errorDescription будут заполнены, т.е. на них можно ориентироваться при устранении неисправности. Как только Web-сервер узнает у ККТ состояние этой операции, он обновит состояние соответствующего задания на error или ready и выполнение остальных задач продолжится.

    Отмена задания

    HTTP запрос

    DELETE http://<hostname>:16732/requests/<uuid>

    Возвращаемые ошибки

    В случае успешного чтения результата сервер вернет статус 200 (OK) и JSON с результатом.

    Также могут вернуться следующие ошибки:

    Запрос состояния очереди задач

    Пример результата запроса

    {
        "ready_count": 12,
        "not_ready_count": 5,
        "canceled_count": 3,
        "is_blocked": false,
        "block_request_uuid": ""
    }
    

    Данный запрос позволяет узнать текущее состояние очереди задач.

    В ответ на запрос возвращаются следующие данные:

    HTTP запрос

    GET http://<hostname>:16732/stat/requests

    Настройка

    Страница настройки располагается по адресу http://<hostname>:16732/settings.

    Информация о сервере

    Информацию о Web-сервере можно узнать на странице http://<hostname>:16732/about. На данный момент там располагается следующая информация:

    Логирование

    Расположение логов Web-сервера зависит от ОС.

    На Linux логи сервера располагаются в /var/log/AtolFptrWebServer, а логи используемого им экземпляра драйвера - в /root/.atol/drivers10.

    На Windows логи сервера располагаются в %PROGRAMDATA%\ATOL\drivers10\web\logs. Логи драйвера располагаются в C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\ATOL\drivers10 или C:\Windows\System32\config\systemprofile\AppData\Roaming\ATOL\drivers10 (в зависимости от архитектур драйвера и ОС).

    Пользовательское соглашение

    ПРАВИЛА

    Правила регулируют отношения по использованию программ для ЭВМ – программных платформ для контрольно-кассовой техники под названиями «Платформа ККТ 2.5» и «Платформы ККТ 5.0», а также программного обеспечения для рабочих станций конечных пользователей контрольно-кассовой техники под названием «Драйвер контрольно-кассовой техники v.10 (ДККТ 10)» (далее совместно упоминающиеся как «Программы для ЭВМ», а по отдельности – «Программа для ЭВМ»).

    Обладателем исключительного права на Программы для ЭВМ является Общество с ограниченной ответственностью «АТОЛ» (ОГРН 1165010050590). Настоящие Правила распространяются на всех лиц, правомерно обладающих экземпляром соответствующей Программы для ЭВМ (далее – Пользователь). Пользователь путем инсталляции «Платформы ККТ 2.5» и «Платформы ККТ 5.0» в память устройства ККТ и/или инсталляции «Драйвера контрольно-кассовой техники v.10 (ДККТ 10)» и/или отдельных компонентов ДДКТ 10, входящих в состав дистрибутива ДККТ 10, в память устройства, управляющего работой ККТ, соглашается с настоящими Правилами.

    ТЕРМИНЫ И ОПРЕДЕЛЕНИЯ

    Контрольно-кассовая техника (ККТ) – электронные вычислительные машины, иные компьютерные устройства и их комплексы, обеспечивающие запись и хранение фискальных данных в фискальных накопителях, формирующие фискальные документы, обеспечивающие передачу фискальных документов в налоговые органы через оператора фискальных данных и печать фискальных документов на бумажных носителях в соответствии с правилами, установленными законодательством Российской Федерации о применении контрольно-кассовой техники.

    Модели ККТ – модели контрольно-кассовой техники АТОЛ 1Ф, АТОЛ 27Ф, АТОЛ FPrint-22ПТК, АТОЛ 11Ф, АТОЛ 30Ф, АТОЛ 77Ф, АТОЛ 55Ф, АТОЛ 25Ф, АТОЛ 52Ф, АТОЛ 15Ф, АТОЛ 20Ф, АТОЛ 50Ф, АТОЛ 90Ф, АТОЛ 91Ф, АТОЛ 92Ф и АТОЛ 91Ф лайт.

    Устройство – электронная вычислительная машина, управляющая работой ККТ, в качестве которой может использоваться любой персональный компьютер, мобильное устройство или специализированный POS-терминал, с установленным программным обеспечением, в котором реализована поддержка данной модели ККТ. Требования к техническим характеристикам управляющего устройства определяются установленным на нем программным обеспечением.

    Платформа ККТ 2.5 – программная платформа для контрольно-кассовой техники, представляющая собой внутреннее программное обеспечение микропроцессоров блоков управления каждой из Моделей ККТ в скомпилированном виде и драйвер для подключения каждой из Моделей ККТ к Устройству.

    Платформа ККТ 5.0 – программная платформа для контрольно-кассовой техники, представляющая собой внутреннее программное обеспечение микропроцессоров блоков управления каждой из Моделей ККТ в скомпилированном виде и драйвер для подключения каждой из Моделей ККТ к Устройству. Платформу ККТ 5.0 отличает использование современных средств разработки, модульная архитектура, обеспечивающая, при необходимости, применение микроконтроллеров с меньшим количеством ресурсов, вынос бизнес-логики из прошивки в область пользовательских данных.

    Драйвер контрольно-кассовой техники v.10 (ДККТ 10) – программное обеспечение для подключения Моделей ККТ к Устройству. Под программным обеспечением подразумевается интеграционный компонент, предоставляющий удобный программный интерфейс для работы с контрольно-кассовой техникой для самых популярных программных и аппаратных платформ и языков программирования (в том числе, операционные системы Linux, Windows, Android и iOS, архитектуры i386, amd64 и arm). Пользователь вправе использовать для подключения Моделей ККТ к Устройству как ДККТ 10 в целом, так и отдельные компоненты, входящие в состав дистрибутива ДККТ 10.

    Базовая функциональность Программ для ЭВМ обеспечивает соответствие Программ для ЭВМ обязательным требованиям Федерального закона от 22.05.2003 № 54-ФЗ «О применении контрольно-кассовой техники при осуществлении наличных денежных расчетов и (или) расчетов с использованием платежных карт» (в редакции Федерального закона от 03.07.2016 № 290-ФЗ «О внесении изменений в Федеральный закон «О применении контрольно-кассовой техники при осуществлении наличных денежных расчетов и (или) расчетов с использованием платежных карт» и отдельные законодательные акты Российской Федерации»), а также соответствие требованиям всех связанных с ним подзаконных актов.

    Расширенная функциональность Программ для ЭВМ обеспечивает возможность использования Программ для ЭВМ способами, не доступными для Базовой функциональности. Расширенная функциональность Программ для ЭВМ предоставляется за дополнительную плату и возможна к реализации во всех Моделях ККТ.

    УСЛОВИЯ ИСПОЛЬЗОВАНИЯ

    При использовании Программ для ЭВМ Пользователь обязан соблюдать положения действующего законодательства Российской Федерации, международных норм о защите интеллектуальных прав и настоящих Правил.

    Пользователь имеет право установить и использовать Программу для ЭВМ на одном устройстве ККТ в один момент времени. Пользователь обязуется не допускать нарушений исключительного права Правообладателя на Программы для ЭВМ, в частности, не совершать и не допускать совершения третьими лицами (в том числе, уполномоченными Пользователем на выполнение пуско-наладочных работ в отношении ККТ) следующих действий без специального письменного разрешения Правообладателя:

    В случае нарушения Пользователем настоящих Правил Правообладатель по своему усмотрению вправе применять в отношении нарушителя технические и юридические способы защиты своих интеллектуальных прав. Правообладатель не несет ответственности за корректную работу Программ для ЭВМ в случае несанкционированного (неразрешенного Правообладателем) использования Программ для ЭВМ.

    Использование Программ для ЭВМ способами, предусмотренными Расширенной функциональностью, предлагается по принципу «Как есть» («AS IS»). Никаких гарантий, как устных, так и письменных не прилагается и не предусматривается. Правообладатель не дает гарантии, что все ошибки Программ для ЭВМ были устранены, соответственно Правообладатель не несет никакой ответственности за последствия использования Программ для ЭВМ, включая, но, не ограничиваясь любым ущербом оборудованию, компьютерам, мобильным устройствам, программному обеспечению Пользователя вызванным или связанным с использованием Программ для ЭВМ, а также за любые финансовые потери, понесенные Пользователем в результате использования Программ для ЭВМ. Никто не ответственен за потерю данных, убытки, ущерб, включаю случайный или косвенный, упущенную выгоду, потерю доходов или любые другие потери, связанные с использованием Программ для ЭВМ.

    Пользователь понимает и соглашается с тем, что Программы для ЭВМ могут отправлять на серверы Правообладателя техническую, метрическую (в том числе, для мониторинга состояния ККТ, выявления ошибок, определения количества часов наработки ККТ), учетную, а также иную информацию, позволяющую агрегировать результаты и формировать аналитические отчеты о состоянии парка ККТ на основе данных о всех процессах, исполняемых ККТ.

    СРОК ДЕЙСТВИЯ

    Настоящие Правила действуют в течение всего срока эксплуатации Пользователем Программ для ЭВМ и/или нахождения у него экземпляров Программ для ЭВМ.