Добрый день!
Если тема заведена не в том разделе, то прошу сильно не "бить", а помочь и перенести тему в нужную ветку )
Возникла небольшая непонятность.
Исходные условия. Производитель Казначей ФА. Прошивка последняя. Касса регистрирует безналичные платежи. "Общение" с ней осуществлется по IP. Сервер, который принимает платежи WinXP. Драйвер 8.16.4. Используется COM и Delphi.
Если перед проведением платежа считать регистр, например, суммы по смене, то потом платеж проходит с типом оплаты Наличными, хотя тип закрытия чека указан, как Безналичный.
Вот кусок кода (от создания COM-объекта до сброса режима)
Сразу оговорюсь, что TaxTypeNumber:=4 используется потому что в версии 8.16.4 под этим номером уходит в чек Без НДС, а не 10/110.
Несмотря на то, что список ставок изменился и по идее должно быть TaxTypeNumber:=6, но со старой версией драйвера 8.16.1 ставка передавалась 10/110 под индексом 4, что в принципе и соответствует новому списку.
А после обновления до последней 8.16.4 под индексом 4 стала отправляться снова Без НДС. Хотя в недрах самого регистратора я вижу обновленный список ставок.
fiskalnik := CreateOleObject('AddIn.FprnM45');
fiskalnik.PortNumber := fiskalnikPort;
fiskalnik.HostAddress := machine_settings[Machine_ID].host;
fiskalnik.DeviceEnabled := True;
...........
далее разные проверки на ResultCode
...........
fiskalnik.GetDeviceMetrics;
...........
Для себя отражаю сумму сменного итога в лог.
...........
fiskalnik.RegisterNumber:=12;
fiskalnik.OperationType := 0; //продажа
fiskalnik.GetRegister;
summ:=fiskalnik.Summ;
...........
Проверяю закрыта смена или открыта, ну и время в лог ложу, когда должна закрываться смена
...........
fiskalnik.RegisterNumber:=18;
fiskalnik.GetRegister;
...........
Так же в лог считываю коды ошибок обмена с ОФД, код ошибки ФН и кол-во не переданных документов.
Регистр 43 с OFDLastError 1,2,3 и регистр 4
...........
Собствено сама рега
...........
fiskalnik.Password := '';
fiskalnik.Mode := 1;
fiskalnik.SetMode;
fiskalnik.NewDocument;
...........
тут проверяю есть ли связь с регистратором, если нет, то реконнект + прочие проверки
...........
if (fiskalnik.ResultCode = -3822) then
begin
...........
если вылезли за 24 часа, то гасимся и начинаем снова
...........
end;
...........
остальные проверки на "криты" + продолжаем регу
...........
fiskalnik.CheckType := 1; //приход
fiskalnik.CheckMode := 0; //в электронном виде без печати
fiskalnik.OpenCheck;
...........
тут заполняю тэг 1008, чтобы ОФД по результату отослал чек на мыло абонента
и начинаю заполнять позицию
...........
fiskalnik.BeginItem;
fiskalnik.Name := convex_key;
fiskalnik.Price := tmp_bsumm;
fiskalnik.Quantity := 1;
fiskalnik.Summ := tmp_bsumm;
fiskalnik.ItemType := 4; //услуга
fiskalnik.PaymentMode := 3; //авансом
fiskalnik.Department := 0;
fiskalnik.TaxTypeNumber := 4; //без ндс
fiskalnik.EndItem;
fiskalnik.Summ := tmp_bsumm;
...........
fiskalnik.Payment;
...........
fiskalnik.TypeClose := 1; //электронными/безналичными
fiskalnik.CloseCheck;
...........
Для себя отражаю сумму сменного итога в лог.
...........
fiskalnik.RegisterNumber:=12;
fiskalnik.OperationType := 0; //продажа
fiskalnik.GetRegister;
summ:=fiskalnik.Summ;
...........
fiskalnik.ResetMode;
И по итогу имеем электронынй чек с типом платежа Наличными, хотя тип закрытия чека указывался Безнал.
Чек уходит с нормальным типом платежа, в том случае, когда при считывании регистра про сменную сумму итога я выставляю CheckType:=1 и TypeClose:=1 (тип чека продажа и тип закрытия безнал).
Т.е.
fiskalnik.RegisterNumber:=12;
fiskalnik.OperationType := 0; //продажа
fiskalnik.CheckType:=1; //продажа, хотя может и не нужен здесь
fiskalnik.TypeClose:=1; //безнал
fiskalnik.GetRegister;
summ:=fiskalnik.Summ;
Т.е. получается, что использование чтение регистра еще до открытия документа и указания хотя бы TypeClose нивелирует указание типа чека закрытия в момент самой регистрации.
Или может это я криворук и использую совсем не те методы и не там.
Либо это чудеса взаимодействия 8-й версии драйвера и последней прошивки в купе с устройством.
Не меняет картины и использование GetStatus после GetRegister. Да в принципе и можно не использовать, т.к. NewDocument выполняет то же самое и еще кое-что помимо.
Если кто сталкивался когда-либо подскажите пожалуйста.
Понимаю, что можно просто не читать регистры в начале платежа, а достаточно будет только в конце. Или не считывать вовсе. Тогда и головняков меньше будет. Но все же.
На 10-ю версию только готовлюсь перевести все и пока изучаю доку.