	Fw21cmd.exe (в комплекте с Fw21.dll) - утилита для командной строки, 
позволяющая автоматизировать часть функций Fw21Adm.exe.
запускается из командной строки в виде: Fw21cmd <arg1=xxx> <arg2=xxx> ... <arg3>

Комплект поставки:
	Fw21cmd.exe - исполняемый файл
	Fw21.dll    - библиотека функций для ККТ
	Newtonsoft.Json.dll - поддержка формата 'Json'
	Fw21cmd.txt - данный файл
	reReg.json  - файл с информацией для перерегистрации
	OISM.json  - файл с информацией для OISM

разрешенные аргументы:
	/SCEN=[путь]имя-файла - работа утилиты с файлом-сценарием (см. ДОПОЛНИТЕЛЬНО) 
	/COM=n |AUTO - задать номер СОМ-порта (по умолчанию /COM=AUTO). Автопоиск осуществляется на скоростях
	               57600 и 115200, аргумент /RATE игнорируется. 
	/JSON        - вывод отчета в формате json (для DNCALC)
	/RATE[=хххх] - задать скорость порта (по умолчанию 57600)
	/IP=xxx.xxx.xxx.xxx - использовать подключение к ККТ по сети.
	/PORT=хххх   - задать порт для подключения ККТ по сети (по умолчанию 7777, его можно опускать)
	/L[=fileName.ext] - включить логирование
	/S           - запрет остановок "Нажмите клавишу для продолжения..." (для скриптов)
	/V           - вывод номера и даты сборки в строку консоли
	AREPORT      - получить отчет о состоянии ККТ и ФН
	BACKUP=REGISTRATION;TENDER;KKT;REGISTERS;имя_файла;ALL - сохранить параметры регистрации, платежные средства, заводской
	               номер и содержимое строковых параметров ККТ, накопительные регистры ККТ. С ключом ALL сохраняется все 
	               вышеперечисленное. Параметры могут быть заданы в любой последовательности и количестве. Если нет параметров,
	               то по умолчанию считается ALL. Если не указано имя файла, используется файл 'Fw21cmd.dat'. 
	               Если вообще ничего не указать, то сохраняет все в файл 'Fw21cmd.dat'. (Работает в режиме совместимости 
	               со старыми версиями (1.2.ххх.хххх)
	CALCREPORT   - Печать отчета о состоянии расчетов
	CALCTOTAL[=WRITEREG] - подсчет по заголовкам документов ФН сумм для накопительных регистров ККТ. При задании 
	               необязательного параметра WRITEREG суммы будут сохранены в накопительных регистрах ККТ. (Работает
	               для прошивок версии 180 и выше).
	CLEAR=ххх    - очистка ФП, может принимать значения: REG (регистрационные данные ККТ), KKT, FN, MEM(сброс2)
	               по завершению копирования будет выполнен перезапуск ККТ.	
	CLEARSUM     - обнуление значений накопительных регистров ККТ.
	CLOSEARHIVE[=имя кассира]  - закрытие архива ФН (по умолчанию имя кассира Fw21cmd)
	CLOSESHIFT[=имя кассира]   - Если смена открыта, то закрыть (по умолчанию имя кассира Fw21cmd)
	CMPHWDATE=ddmmyyyy - сравнивает прошивку ФН с датой, возвращает 0 если одинаково, 1 в принтере меньше, 2 в принтере старше.
	COPYFN=...   - копировать регистрационные данные из ФН в ККТ. Формат команды: COPYFN=ИННофд;ИмяПольз;АдресПольз
	               например: COPYFN=5036053260;"Группа компаний """Пилот""";Москва, Барабанный пер. д.3" (работает как копирование 3
	               в Fw21admin). При использовании без параметров команда пытается найти недостающие данные в ФН (где их может и 
	               не оказаться - работает как копирование 2). По завершению копирования будет выполнен перезапуск ККТ.
	DNCALC[=NOTLV] - Аргумент формирует отчет о неотправленных в ОФД чеках, получая информацию о налоговых ставках и 
	               суммах по типу платежей из TLV данных ККТ. 
	               Каждый из таких запросов занимает значительное время, (более 1 секунды на каждый чек), что приводит к
	               очень длительному времени выполнения запроса. При задании необязательного параметра NOTLV, информация
	               о документах будет браться только из архива ФН (доступна лишь итоговая сумма чека), но время выполнения
	               операции будет минимизировано. 
	               Отчет формируется в файл dcalc.csv, находящийся в каталоге с утилитой. В случае обнаружения испорченной
	               записи в TLV ФН, утилита пытается ее проигнорировать и продолжить работу, перезапустив зависший ФН.
	               В случае использования ключа /JSON будет проведена выборка всех данных из записей TLV и сохранение их в 
	               формате "json" в файл DNcalc.json.
	DOCABORT     - прервать незавершенный документ, в качестве параметра 
          	       может передаваться действие выполняемое после прерывания:
          	            0 - ничего не делать, 
          	            1 - отрезка чека,
          	            2 - печать подвала,
          	            4 - печать следующего заголовка,
          	       без параметра выполняется "Default": (1 + 2 + 4)
	FIRMWARE=[путь]маска имени-файлов - залить прошивку в ФП. Если по маске попадает несколько файлов, то сравнивается дата из 
          	       имени файла: h05f014s082dддммгггг.fw21. Для выполнения операции выбирается файл с более поздней датой.
	FNACTIVE14[=N] - Запрос о продолжении прошивки, когда с момента активации ФН прошло N дней, по умолчанию (если N не задано) 
          	       380 дней. При значении 0 запрос не выводить, считать всегда ДА.
	FPCOUNTERS[=SCR | =fileTxt.ext | =INIT] - работа с накопительными счетчиками у FP410 и FP510 (только для командной строки)
	               параметры:
          	            SCR, или без параметра - вывод на экран
						PRN                    - вывод на экран + печать на кассовую ленту  
          	            fileTxt.ext            - вывод на экран + сохранение в файл fileTxt.ext
          	            INIT                   - присвоение значений счетчикам в энергозависимой памяти значений накопительных.
          	            ВНИМАНИЕ! параметр INIT желательно использовать не более трех раз в сутки (производитель не рекомендует)
	GETCLISHE=fileTxt.ext - сохранение клише чека в текстовый файл (кодировка файла 866-MS DOS)
	               (если имя не задано, будет сохранено в файл 'clishe.cli')
	GETFDVERSION - аргумент возвращающий %ErrorLevel%`ом номер версии формата фискальных документов
	               Версия ФФД, поддерживаемая ККТ (1="1.0"; 2="1.05"; 3="1.1"; 4="1.2")
	GETFIRMW     - завершить работу Fw21cmd, вернув номер прошивки платы ФП в виде %ErrorLevel% (см. ДОПОЛНИТЕЛЬНО)
	               %ErrorLevel% содержит номер прошивки плюс номер версии формата фискальных документов умноженный 
	               на 1000 (для ФФД 1.0: 190 - вернет 1190, для ФФД 1.05 - 2060, для ФФД 1.1 - 30хх, для ФФД 1.2 - 40хх)
	GETFFDFN     - получить %ErrorLevel% версии ФФД ФН, на чистом ФН вернет 0
	GETFFDFNMAX  - получить %ErrorLevel% максимальное значение ФФД который поддерживает ФН
	GETNOTIFSCOUNT-получить в виде %ErrorLevel% Количество уведомлений, ожидающих подтверждения 
	               (сформированных после закрытия чека(ов))
	GETREGDATAFN - завершает работу с %ErrorLevel%=0, если в ФН нет регистрационных данных, и %ErrorLevel%=1, если есть
	GETREGDATA   - завершает работу с %ErrorLevel%=0, если в ККТ нет регистрационных данных, и %ErrorLevel%=1, если есть
	GETFNRDAYS   - получение количества дней до завершения срока ФН
	GETFNVER     - получить номер версии ФН (%ErrorLevel%) м.б.: "fn_1_1" = 11, "fn_1_2" = 12, ...
	               варианты версии меньше = 0 (т.е. неизвестный)
	GETFOOTER=fileTxt.ext - сохранение подвала чека в текстовый файл (кодировка файла 866-MS DOS)
	               (если имя не задано, будет сохранено в файл 'footer.cli')
	GETFDNum=[N1;N2;имя файла] - (номер начального документа, номер конечного документа, имя файла для сохранения)
	               все три параметра являются необязательными. Если опущено имя файла, то используется "GetFDnum.csv", 
	               если нет номера конечного документа, то считываются до последней записи в ФН, если нет номера начального 
	               документа, то считывается с первой записи.
	GETFDDate=[date1;date2;имя файла] - (начальная дата, конечная дата выбираемых документов, имя файла для сохранения). 
	               Все три параметра являются необязательными. Если опущено имя файла, то используется "GETFDDate.csv", если нет
	               конечной даты, то выбирается до последней записи, если нет начальной - выбираем начиная с первой записи.
	               формат даты ггммдд.
	GETSHIFTSTATUS - параметр возвращающий %ErrorLevel%`ом статус смены (открыто 1, закрыто 0, ФН недоступно -1)
 	GETHWTYPE    - выдает в строку консоли текст наподобии <hwtype>=h07f011s137d28112016
 	GETLIFEPHASE - выдает в строку консоли текстовое сообщение о фазе жизни ФН + %ErrorLevel%, может быть: 
	               0 - заводское состояние "Manufactor"
	               1 - готовность к фискализации "ReadyToReg"
	               3 - открыт фискальный режим "Registered"
	               7 - постфискальный режим, идет передача ФД в ОФД (После закрытия фискального режима остались ФД, не переданные 
	                   в ОФД) "PostRegistred"
	               15- только чтение данных из Архива ФН. Закончена передача фискальных данных в ОФД, статуса обмена с ОФД и смены 
	                   не возвращает "Readonly"
	               -3  ошибка ФН
	GETMODEL     - завершить работу Fw21cmd, вернув номер модели ККТ в виде %ErrorLevel% (510, 410, 610)
	               все работает аналогично GETFIRMW.
	GETNOFDDOC   - завершить работу Fw21cmd, вернув количество неотправленных в ОФД документов в виде %ErrorLevel%
	               возвращает -3 если ФН недоступeн (отсутствует или закрыт).
	GETPORT       - получить %ErrorLevel% номер COM порта
	GETTIME      - получить в строке консоли дату-время принтера.
	KKTNUM       - завершить работу Fw21cmd, вернув заводской номер ККТ в виде %ErrorLevel%, из-за ограничения на размер %ErrorLevel% 
	               код производителя (первые три цифры = 025) и номер модели (510, 410, 610) опускаются.
	               т.е. вместо 0255100100013 %ErrorLevel% будет равен 100013.
	LICPATH=...  - путь к каталогу с файлами лицензий (в сценарии должен быть указан раньше команды FIRMWARE)
	LOADIMG=fileName1;fileName2;fileName3;... fileName7 - заливкa изображений в ККТ. Формат параметра - 
	               список файлов с разделителем ';'.
	NEWNUM=ххххххххххххх - установить новый заводской номер (13 цифр)
	               без параметра будет вызван диалог ввода номера
	NEWSNUM=.... - установить новый заводской номер произвольного формата
	               (ограничение 20 символов)
	OFD_OISM=[путь]имя-файла.json - При несовпадении значений параметров ККТ 12,13,24,25(интернет адреса ОФД и ОИСМ) они 
	               устанавливаются в значения из настроечного файла имя-файла.json
	               По умолчанию используется имя файла OISM.json
	PRINT=file.txt - печать текстового файла (кодировка файла 1251)
	               ESC последовательность в файле задается с новой строки в виде 
				   ESC:27,97,1		(esc-последовательность в виде десятичных чисел через запятую и без пробелов)
	PRINTEROFF   - выключение печати на бумагу (до перезагрузки принтера)
	PRINTREGISTERS - печать накопительных регистров
	PROCEXISTS=fileName.ext[;KILL] - вернет %ErrorLevel% = 0, если процесс не запущен, и 1 если процесс существует. С дополнительным
	               параметром KILL будет пытаться прибить все процессы с таким именем и продолжить работу. При неудаче вернет 
				   %ErrorLevel% = 1.
	RECONNECT    - переустановить подключение к ККТ
	RESTART[=S]  - перезапуск ККТ с печатью чека готовности или без печати (S - silent)
	REREG=[путь]имя-файла.json - выполнить перерегистрацию ФН на основе заданных в файле имя-файла.json параметров. 
	               после окончания перерегистрации формируется отчет "О перерегистрации ККТ, замене ФН". 
	               Имя файла отчета: "AZ<Номер ФД>-<Заводской номер ККТ>P.kkt""
	RESTARTFS    - перезапуск зависшего		ФН с задержкой в 1500 мсек.
	RESTORE=REGISTRATION;TENDER;KKT;REGISTERS;имя_файла;ALL - восстановление сохраненного командой BACKUP (аналогично BACKUP).
	SETPARAM=xxx;yyy - установить параметр KKT ххх в значение ууу
	SETSUM=xxx;yyyyyyy - установить значение накопительного регистра xxx в значение yyyyyyy (в копейках).
	SETTIME="31.12.16 12:5" - принудительно выставить время
	SETCLISHE=fileTxt.ext - заливкa текстового клише из файла (кодировка файла 866-MS DOS)
	SETFOOTER=fileTxt.ext - заливкa подвала чека из текстового файла (кодировка файла 866-MS DOS)
	SETTENDER    - задать параметры платежного средства(ПС), формат аргумента: номер_ПС;Наименование_ПС;тип_платежа
	               тип платежа может быть CASH или NONCASH (наличные либо электронные).
	               например:
	                  Fw21cmd.exe SETTENDER=0;РУБ.;CASH
	                  Fw21cmd.exe SETTENDER=1;КАРТА;NONCASH
	SREPORT      - печать сервисного отчета
	TIMESYNC[=ххх] - синхронизировать время если разница между принтером и компьютером составляет ххх секунд. 
          	       Запуск в виде "Fw21cmd TIMESYNC" приведет к безусловной синхронизации времени.
	SELFTEST     - печать тестa самодиагностики KKT.
	WAITNOFDDOC[=хх] - ожидание в течении заданного времени отправки еще не переданных документов в ОФД. По умолчанию
          	       время ожидания отправки документа 30 секунд. При успешной отправке %ErrorLevel% =  0, в случае истечения
          	       времени ожидания, либо если параметр 4 не равен 2 вернет %ErrorLevel% 1.
	YREPORT      - получить отчет "Информация о ККТ". Имя файла отчета: "AZ-<Заводской номер ККТ>Y.kkt"
	PREPORT      - получить отчет "о перерегистрации ККТ, замене ФН". Имя файла отчета: "AZ<Номер ФД>-<Заводской номер ККТ>P.kkt"
-------------------------------------------------------------------------------------------------------------------
ДОПОЛНИТЕЛЬНО:
Аргументы требующие указания имени оператора/кассира:(CLOSEARHIVE, CLOSESHIFT и REREG внутри файла.json), при его отсутствии используют 
имя "Fw21cmd".  Но в случае наличия переменной среды %EcrOperator%, будет использоваться ее значение, независимо от указанного ранее.
--
Наличие переменной среды %SCRIPTVER% при запуске Fw21cmd.exe в режиме выполнения сценария приведет к выводу на 
экран и в лог сообщения: "Версия файла сценария=%SCRIPTVER%"
--
Запуск без параметров приведет к показу списка разрешенных команд (miniHelp):

Pазрешенные аргументы:
/SCEN, /COM, /RATE, /IP, /PORT, /S, /L, /V, /JSON, AREPORT, TIMESYNC,
PRINTEROFF, DOCABORT, CLOSESHIFT, CALCREPORT, CMPHWDATE, FNACTIVE14,
GETHWTYPE, SETPARAM, NEWNUM, NEWSNUM, CLEAR, COPYFN, CLOSEARHIVE,
SETTIME, GETTIME, FIRMWARE, BACKUP, RESTORE, GETFIRMW, GETFFDFN,
GETREGDATAFN, GETREGDATA, GETFFDFNMAX, GETNOTIFSCOUNT, GETFNVER,
GETFNRDAYS, GETPORT, SREPORT, SETTENDER, GETMODEL, SETCLISHE,
GETCLISHE, SETFOOTER, GETFOOTER, LOADIMG, LICPATH, GETSHIFTSTATUS,
GETLIFEPHASE, REREG, REOFD, RESTART, DNCALC, GETFDVERSION, RECONNECT,
RESTARTFS, CALCTOTAL, GETFDNUM, GETFDDATE, GETNOFDDOC, SELFTEST,
CLEARSUM, SETSUM, PRINTREGISTERS, PRINT, PROCEXISTS, KKTNUM,
WAITNOFDDOC, FPCOUNTERS, YREPORT, PREPORT, OFD_OISM
--
В командной строке можно использовать несколько команд одновременно, 
но выполнятся они будут в том-же порядке, что и в miniHelp`е.
(параметры /COM, /RATE, /S, /L, /V и /SCEN обрабатываются в первую очередь).
--
Максимальные размеры графического файла: 
- ширина 570 пикселей (соответствует ширине чека); 
- высота 135 пикселей (соответствует высоте 5 строк x 27 пикселей). Возможны меньшие размеры по высоте: 
  108 (4 строки), 81 (3 строки) и т. д.
--
пример файла file.cmd для параметра GETFIRMW
- start file.cmd -
@echo off
Fw21cmd.exe GETFIRMW
IF ERRORLEVEL 1178 (
  echo Прошивка актуальна, апдейт не нужен.
  GOTO Exit
)
IF ERRORLEVEL 1160 (
  echo Залейте актуальную прошивку командой Fw21cmd.exe FIRMWARE=...
  GOTO Exit
)
IF ERRORLEVEL 1 echo Завершено с ошибкой!!!
:Exit
pause
- end file.cmd -

--
Файл сценария:
1) если задан параметр /SCEN=..., то все остальные аргументы командной строки игнорируются
2) в строке может быть только одна команда
3) перед командами должно стоять два двоеточия (::), иначе команда игнорируется. (сделано для возможности использования 
   внутри cmd файла вызывающего Fw21cmd.)
4) возможно использование переменных среды.
5) использование $IF: выполнение параметра в сценарии если условие внутри круглых скобок истинно. Позволяет сравнивать
   значения возвращаемые внутренними операторами сценария с заданными в сценарии значениями. Символы сравнения аналогичны
   таким-же в cmd Windows: 
    EQL - равно
    NEQ - не равно
    LSS - меньше
    LEQ - меньше или равно
    GTR - больше
    GEQ - больше или равно

   Обязательно следует учитывать, что символы сравнения LSS,LEQ,GTR,GEQ могут работать только с цифрами.
6) внутренние операторы сценария: 
    $FIRMWARENUM - возвращает номер прошивки плюс номер версии формата фискальных документов умноженный на 1000
                   (для ФФД 1.0: 190 - вернет 1190, для ФФД 1.05 - 2060, для ФФД 1.1 - 30хх, для ФФД 1.2 - 40хх)
    $SHIFTOPEN   - возращает 1 если смена открыта, 0 если закрыта и -3 если ФН недоступно
    $MODEL       - возвращает цифровой код модели ККТ (410, 510, 610)
    $HWTYPE      - возвращает полное наименование прошивки (строка типа 'h07f011s137d28112016')
    $FDVERSION   - номер версии формата фискальных документов (1="1.0"; 2="1.05"; 3="1.1"; 4="1.2")
    $STOP=...некий текст...[;X] - прервать выполнение скрипта с указанием причины, остановка выполнения Fw21cmd, если задан
                   код ошибки то возвращает %ErrorLevel%=X, иначе код возврата = 0
    $WAIT=Х      - пауза в работе сценария на Х секунд, если использовать без параметра, то работает как команда PAUSE в cmd.
    $ECHO=...некий текст... - вывод на экран текстового сообщения желтым цветом (warning).
    $NOFDDOC     - возвращает количество непереданных в ОФД документов, -3 если ФН недоступeн (отсутствует или закрыт)
    $LIFEPHASE   - номер фазы жизни ФН (см. GETLIFEPHASE)
    $KKTNUM      - заводской номер KKT
    $FNVER       - Получить версию ФН
    $MAXFN       - Получить максимальное значение ФФД который поддерживает ФН
    $NOTIFSCOUNT - Количество уведомлений, ожидающих подтверждения
    $ECHOTOFILE=имя_файла;...некий текст... - запись в файл имя_файла + вывод на экран текстового сообщения желтым цветом (warning)  
    $SENDFDDOC   - попытка отправить документы в ОФД, аналогично WAITNOFDDOC по умолчанию время ожидания отправки документа 
                   30 секунд. При успешной отправке принимает значение 0, в случае истечения времени ожидания, либо если 
                   параметр 4 не равен 2 равен 1. Интервал ожидания отправки документа можно изменить: 
                   ::$IF ($SENDFDDOC(20) EQL 1) $STOP=...
    $SLEEP=Х      - приостановка работы сценария на Х секунд, без вывода чего-либо на экран. Без параметра игнорируется.
    $TAXID        - ИНН клиента.
	$CONTINUE=..Текст для Y/N..[;X] - Запрос текст продолжить?, при нажатии нет завершает работу, если задан
                   код ошибки то возвращает %ErrorLevel%=X, иначе код возврата = 0
	$FDELETE=имя файла[;X] - удалить файл, при неудаче завершает работу Fw21cmd, если задан код ошибки то возвращает 
                   %ErrorLevel%=X, иначе код возврата = 0
	$REGDATAFN   - возвращает 0, если в ФН регистрационных данных нет, и 1 если они есть.
7) оператор $IFEXISTS - использование: $IFEXISTS (имя.файла) 'выполнение оператора' 

например:
- start proshivka.cmd -
@Fw21cmd.exe /SCEN=proshivka.cmd
SET PORT=AUTO
SET FRMW510=h05f011s180d31032017.Fw16
::/l
::/S
::/com=%PORT%
::/RATE=57600
::$IF ($SHIFTOPEN EQL 1) $STOP=Обнаружена открытая смена, выполнение сценария невозможно !
::$IF ($HWTYPE EQL h05f011s180d27032017) $STOP=Данная версия прошивки требует обновления ! 
::TIMESYNC=10
::BACKUP=REGISTRATION;TENDER;REGISTERS;KKT;%USERNAME%.backup
::PRINTEROFF
::$IF ($MODEL EQL 510) FIRMWARE=%FRMW510%
::RECONNECT
::$IFEXISTS (%USERNAME%.backup) RESTORE 
::GETHWTYPE
::NEWNUM=1234455
::SETTENDER=0;ТУГРИКИ;CASH
::SETPARAM=14;www.MOSnalog.ru
- end proshivka.cmd -

