Ошибка фискальной операции "Возврат продажи"
Делаю модуль управления ФР по документации "Протокол работы ФР" для Штрих-М-ФР-К.
КУСОК КОДА:
| | |
| Код: private void RegistrationProduct(double Quantity, double Price, string PosName, byte typeRegistation) { StatusFRType temp_statusFR = statusFR; int _Quantity = (int)(Quantity * 1000); int _Price = (int)(Price*100); byte[] BuffToFR = new byte[60]; byte[] BuffFromFR = new byte[3]; BuffToFR[0] = typeRegistation; BuffToFR[1] = 30; BuffToFR[2] = 0; BuffToFR[3] = 0; BuffToFR[4] = 0; BuffToFR[5] = (byte)(_Quantity >> 0); BuffToFR[6] = (byte)(_Quantity >> 8); BuffToFR[7] = (byte)(_Quantity >> 16); BuffToFR[8] = (byte)(_Quantity >> 24); BuffToFR[9] = 0; BuffToFR[10] = (byte)(_Price >> 0); BuffToFR[11] = (byte)(_Price >> 8); BuffToFR[12] = (byte)(_Price >> 16); BuffToFR[13] = (byte)(_Price >> 24); BuffToFR[14] = 0; ; BuffToFR[15] = 0;//номер отдела BuffToFR[16] = 0;//налог 1 BuffToFR[17] = 0;//налог 2 BuffToFR[18] = 0;//налог 3 BuffToFR[19] = 0;//налог 4
string _PosName = PosName.Substring(0,PosName.Length >= 40 ? 40 : PosName.Length); byte[] unicodeBytes = Encoding.Unicode.GetBytes(_PosName); byte[] asciiBytes = Encoding.Convert(Encoding.Unicode, System.Text.Encoding.GetEncoding(1251), unicodeBytes); int i = 0; foreach (byte c in asciiBytes) BuffToFR[20 + (i++)] = c;
int error= SendCommand(BuffToFR, BuffToFR.Length, BuffFromFR, BuffFromFR.Length); } public int SendCommand(byte[] BuffToFR, int BuffLen, byte[] BuffFromFR, int AnswerLen) { int AnswerError = -1; WaitNAK(); WaitNAK(); byte[] RawBuffToFR = new byte[1024];
RawBuffToFR[0] = ANSWER_STX; RawBuffToFR[1] = (byte)BuffLen; //копируем команду for (int i = 0; i < BuffLen; i++) RawBuffToFR[i + 2] = BuffToFR[i]; //считаем контрольную сумму byte LRC = 0; for (int i = 1; i <= BuffLen + 2; i++) LRC ^= RawBuffToFR[i]; RawBuffToFR[BuffLen + 2] = LRC;
//отправляем данные в ФР SerialPortFR.Write(RawBuffToFR, 0, BuffLen + 3); //читаем ответ return AnswerError = ReadAnswer(BuffFromFR, AnswerLen); }
| |
| | |
понимаю, что читать чужой код тяжело, но не знаю как по другому осветить проблему.
Если typeRegistation равен 80H(продажа), то все проходит без ошибок.
Если 82H (Возврат продажи), то ФР возвращает ошибку 5Eh( ФР,Некорректная операция)
В документации все параметры продажи и возврата продаж одинаковы.
Режим ФР 8 - чек открыт.
И еще вопрос - как различить режимы чек открыт 8 и продажа 8.0 ?