|
v7: ТиС 7.7 Феликс РК.Проблемы с доработкой обработки обслуживания | ☑ | ||
---|---|---|---|---|
0
tommi
22.10.11
✎
13:57
|
Необходимо чтобы можно было печатать чеки на Феликс РК с типом оплаты Кредит. карты.Установил драйвер Атол,начал изменять обработку fr_comm.ert.
|
|||
1
tommi
22.10.11
✎
14:04
|
Код:
Функция ПечататьЧек(Объект, Пароль, СписокТоваров, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека, ДлинаСтроки, ТипОплаты) Если ПустоеЗначение(Объект) = 1 Тогда ОписаниеРезультата = "устройство не подключено"; Возврат 0; ИначеЕсли ПодключитьсяКФР(Объект) = 0 Тогда Возврат 0; КонецЕсли; Объект.Mode = 1; // режим регистрации чеков Объект.Password = Пароль; // пароль на режим регистрации Объект.SetMode(); Объект.GetStatus(); Если Объект.СостояниеЧека <> 0 Тогда Попытка Объект.CancelCheck(); Исключение КонецПопытки; КонецЕсли; Если Объект.Результат <> 0 Тогда Попытка Объект.CancelCheck(); Исключение КонецПопытки; ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); ОтключитьсяОтФР(Объект, 0); Возврат 0; КонецЕсли; // регистрация товаров РезРегистрация = 1; СписокТоваров.ВыбратьСтроки(); ДлинаНаименования = Объект.ДлинаСтрокиСимволов; // зависит от модели ФР Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл //Проверка наличия колонки "НДС" в таблице значений. НДСЕсть = ""; Попытка НДС = СписокТоваров.НДС; НДСЕсть = 1; Исключение НДСЕсть = 0; КонецПопытки; Если НДСЕсть = 1 Тогда Объект.Name = ""; Иначе Объект.Name = Лев(СписокТоваров.ТовНаим, ДлинаНаименования); КонецЕсли; Объект.Price = Окр(СписокТоваров.Цена,2,1); Объект.Quantity = СписокТоваров.Количество; Если ПризнВозврата = 0 Тогда Если НДСЕсть = 1 Тогда//Печатаем НДС // В настройках ФР надо настроить ставки: // Налог 1 = 18% - НДС 18% // Налог 2 = 10% - НДС 10% // Налог 3 = 20% - НДС 20% // Налог 4 = 0% - без НДС // и Тип налога = 2 (Налог на каждую продажу) Если СписокТоваров.НДС = 18 Тогда Объект.Department = 1; ИначеЕсли СписокТоваров.НДС = 10 Тогда Объект.Department = 2; ИначеЕсли СписокТоваров.НДС = 20 Тогда Объект.Department = 3; Иначе Объект.Department = 4; КонецЕсли; Иначе Объект.Department = 4; КонецЕсли; Объект.Регистрация(); Иначе //**Изменения Объект.EnableCheckSumm = ?(ТипОплаты=1,"FALSE","TRUE"); //**Изменения Объект.Возврат(); КонецЕсли; Если Объект.Результат <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); Попытка Объект.CancelCheck(); Исключение КонецПопытки; ОтключитьсяОтФР(Объект, 0); Возврат 0; КонецЕсли; Если НДСЕсть = 1 Тогда СтрокаДляПечати = СписокТоваров.ТовНаим; Пока СтрДлина(СтрокаДляПечати)>0 Цикл Объект.Caption = Лев(СтрокаДляПечати,ДлинаНаименования); Объект.PrintString(); СтрокаДляПечати = СокрЛП(Сред(СтрокаДляПечати,ДлинаНаименования+1)); КонецЦикла; КонецЕсли; Если Объект.Результат <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); Попытка Объект.CancelCheck(); Исключение КонецПопытки; ОтключитьсяОтФР(Объект, 0); Возврат 0; КонецЕсли; КонецЦикла; Если ПустоеЗначение(Скидка) = 0 Тогда Если Скидка < 0 Тогда // надбавка Объект.Percents = -Скидка; Объект.ПроцентнаяНадбавка(); Иначе // Скидка Объект.Percents = Скидка; Объект.ПроцентнаяСкидка(); КонецЕсли; КонецЕсли; Если Объект.Результат <> 0 Тогда Объект.Percents = 0; ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); Попытка Объект.CancelCheck(); Исключение КонецПопытки; ОтключитьсяОтФР(Объект, 0); Возврат 0; КонецЕсли; Объект.Department = НомерСекции; НомерЧека = Объект.НомерЧека; //**Изменения Если (ТипОплаты=1) Тогда Объект.Summ = Окр(СуммаЧека, 2, 1); Объект.TypeClose = 3; Объект.Payment(); Объект.ЗакрытьЧек(); Иначе Если (Получено > 0) И (Получено > СуммаЧека) Тогда Объект.Summ = Окр(Получено, 2, 1); Объект.ОплатаСоСдачей(); Иначе Объект.ЗакрытьЧек(); КонецЕсли; КонецЕсли; //**Изменения //Если (Получено > 0) И (Получено > СуммаЧека) Тогда // Объект.Summ = Окр(Получено, 2, 1); // Объект.ОплатаСоСдачей(); //Иначе // Объект.ЗакрытьЧек(); //КонецЕсли; Если Объект.Результат <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); Сообщить(ОписаниеРезультата); Попытка Объект.CancelCheck(); Исключение КонецПопытки; ОтключитьсяОтФР(Объект, 0); Возврат 0; КонецЕсли; Возврат ОтключитьсяОтФР(Объект); КонецФункции Теперь при оплате безнал,печатается чек с безналом,но потом выходят 2 чека с анулированием.Посмотрел в лог файле,там сперва 2 ошибки :Ошибка! ResultCode = -3836 ResultDescription = "Подсчет суммы сдачи невозможен",а потом еще :Ошибка! ResultCode = -3810 ResultDescription = "Накопление меньше суммы возврата или аннулирования".В чем ошибка понять не могу.HELP!!! |
|||
2
miki
22.10.11
✎
16:19
|
Убери в
Объект.TypeClose = 3; Объект.Payment(); Объект.ЗакрытьЧек(); оплату. Т. е. так: Объект.TypeClose = 3; // Объект.Payment(); Объект.ЗакрытьЧек(); |
|||
3
MikeFromAtol
22.10.11
✎
19:15
|
Вообще да, надо использовать только одну из этих команд - либо Payment, либо ЗакрытьЧек.
Если не используются комбинированные оплаты, то лучше использовать ЗакрытьЧек |
|||
4
tommi
28.10.11
✎
15:43
|
Наконец то попробывали безнал.Впервый раз все прошло удачно,все были рады.Через несколько дней опять сделали безнал. и опять тоже самые ошибки : вышел анулированный чек и в логе та же ошибка: Ошибка! ResultCode = -3836 ResultDescription = "Подсчет суммы сдачи невозможен" BadParam = 0 BadParamDescription = "Ошибок в параметрах нет".
|
|||
5
tommi
28.10.11
✎
15:44
|
Причем тут сдача,понять не могу.Кассиры даже когда пробивали чек,у них сумма чека была равна с полученной суммой.
|
|||
6
MikeFromAtol
29.10.11
✎
18:00
|
В логе драйвера что написано по этому поводу? Лог лежит рядом с длл, файл будет называться что то типа fprmn.log
|
|||
7
Torquader
29.10.11
✎
21:46
|
Не знаю, как "думает" феликс, но у аппаратов Штрих-М была подобная проблема при использовании скидки и указании безналичной оплаты.
Дело в том, что когда указывается скидка на чек, то аппарат делает округление по его внутреннему алгоритму, а 1С - по её. В итоге, переданная сумма для оплаты оказывалась на одну копейку больше, чем та, которую получал аппарат внутри себя - ну и тут же следовал отказ от закрытия чека, так как операция со сдачей невозможна при использовании вида оплаты, отличного от наличных. До конца проблему так и не решили, но обнулили копейки у всех продаваемых товаров - в результате никаких округлений не происходило. Также проблема округления может возникать при указании количества, отличного от единицы. |
|||
8
MikeFromAtol
29.10.11
✎
23:06
|
Ну кстати может быть запросто и такая проблема.
Мы года полтора назад именно поэтому в драйвере в интерфейсе для 1С изменили логику работы команды ПечатьФИскальнойСтроки, чтобы в ФР передавалась уже сумма со скидками, чтобы ФР сам не занимался округлениями |
|||
9
Torquader
30.10.11
✎
14:11
|
(8) Штрих-М вообще в большинстве своих программ все данные товаров на ФР печатает в текстовом виде, а потом оформляет продажу на общую сумму чека и закрывает нужным видом оплаты - таким образом - избегая всяких проблем с округлением.
|
|||
10
miki
30.10.11
✎
15:14
|
(5)Потому что пытаешься исполнить метод "оплаты со сдачей" (даже если сдача ==0), что абсурдно для б/нала и очевидно даже ФР'у.
|
|||
11
MikeFromAtol
30.10.11
✎
15:48
|
(9) ну как бе в программах нашей разработки все делается точно так же )
|
|||
12
tommi
31.10.11
✎
01:51
|
Так если это проблема со скидкой,то можно только сумму чека уменьшить на процент скидки или еще нужно будет уменьшить на процент скидки каждую цену товара в чеке?
|
|||
13
tommi
03.11.11
✎
23:29
|
Вот увидел в логе такую последовательность при печати безналом:
Driver.GetStatus 30.10.2011 10:04:32 0000000000 Посылка команды ККМ: 00 00 3F 0000000062 Получен ответ: 44 30 01 11 10 30 10 12 40 1F 01 03 58 59 18 32 34 01 02 94 17 25 00 00 00 00 00 00 02 01 30.10.2011 10:04:32 0000000000 Посылка команды ККМ: 00 00 91 18 00 00 0000000016 Получен ответ: 55 00 32 03 36 00 00 00 00 00 00 0000000000 RcpPixelLineLength = 336 0000000000 Driver.Set_Name Муфта (белая) PPRC разъёмная H ( 0000000000 Driver.Set_Price 86 0000000000 Driver.Set_Quantity 8 0000000000 Driver.Set_Department 4 30.10.2011 10:04:32 0000000000 Driver.Registration 30.10.2011 10:04:32 0000000000 Посылка команды ККМ: 00 00 92 00 01 0000000016 Получен ответ: 55 00 00 30.10.2011 10:04:32 0000000000 Посылка команды ККМ: 00 00 52 03 00 00 00 86 00 00 00 00 80 00 04 0000000015 Получен ответ: 55 00 00 30.10.2011 10:04:32 0000000000 Посылка команды ККМ: 00 00 4C 8C E3 E4 E2 A0 20 28 A1 A5 AB A0 EF 29 20 50 50 52 43 20 E0 A0 A7 EA A5 AC AD A0 EF 20 48 20 28 0000000016 Получен ответ: 55 00 00 30.10.2011 10:04:32 0000000000 Посылка команды ККМ: 00 00 52 02 00 00 00 86 00 00 00 00 80 00 04 0000000078 Получен ответ: 55 00 00 0000000000 Driver.Set_Department 0 0000000000 Driver.Set_Summ 1000 30.10.2011 10:04:32 0000000000 Driver.Delivery <---------------------- 30.10.2011 10:04:32 0000000000 Посылка команды ККМ: 00 00 4A 00 04 00 00 10 00 00 0000000016 Получен ответ: 55 97 00 Строка со стрелками стоит Delivery,т.е я так понимаю все равно проводит со сдачей,хотя в коде не стоит Объект.ОплатаСоСдачей() в режиме безнала,может какая то бреж коде.Посмотрите пожалуйсто,буду очень признателен,а то я уже с ума схожу с этим фискальником: Функция ПечататьЧек(Объект, Пароль, СписокТоваров, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека, ДлинаСтроки, ТипОплаты) Если ПустоеЗначение(Объект) = 1 Тогда ОписаниеРезультата = "устройство не подключено"; Возврат 0; ИначеЕсли ПодключитьсяКФР(Объект) = 0 Тогда Возврат 0; КонецЕсли; Объект.Mode = 1; // режим регистрации чеков Объект.Password = Пароль; // пароль на режим регистрации Объект.SetMode(); Объект.GetStatus(); Если Объект.СостояниеЧека <> 0 Тогда Попытка Объект.CancelCheck(); Исключение КонецПопытки; КонецЕсли; Если Объект.Результат <> 0 Тогда Попытка Объект.CancelCheck(); Исключение КонецПопытки; ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); ОтключитьсяОтФР(Объект, 0); Возврат 0; КонецЕсли; // регистрация товаров РезРегистрация = 1; СписокТоваров.ВыбратьСтроки(); ДлинаНаименования = Объект.ДлинаСтрокиСимволов; // зависит от модели ФР Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл //Проверка наличия колонки "НДС" в таблице значений. НДСЕсть = ""; Попытка НДС = СписокТоваров.НДС; НДСЕсть = 1; Исключение НДСЕсть = 0; КонецПопытки; Если НДСЕсть = 1 Тогда Объект.Name = ""; Иначе Объект.Name = Лев(СписокТоваров.ТовНаим, ДлинаНаименования); КонецЕсли; Объект.Price = Окр(СписокТоваров.Цена,2,1); Объект.Quantity = СписокТоваров.Количество; Если ПризнВозврата = 0 Тогда Если НДСЕсть = 1 Тогда//Печатаем НДС // В настройках ФР надо настроить ставки: // Налог 1 = 18% - НДС 18% // Налог 2 = 10% - НДС 10% // Налог 3 = 20% - НДС 20% // Налог 4 = 0% - без НДС // и Тип налога = 2 (Налог на каждую продажу) Если СписокТоваров.НДС = 18 Тогда Объект.Department = 1; ИначеЕсли СписокТоваров.НДС = 10 Тогда Объект.Department = 2; ИначеЕсли СписокТоваров.НДС = 20 Тогда Объект.Department = 3; Иначе Объект.Department = 4; КонецЕсли; Иначе Объект.Department = 4; КонецЕсли; Объект.Регистрация(); Иначе Объект.EnableCheckSumm = ?(ТипОплаты=1,"FALSE","TRUE"); Объект.Возврат(); КонецЕсли; Если Объект.Результат <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); Попытка Объект.CancelCheck(); Исключение КонецПопытки; ОтключитьсяОтФР(Объект, 0); Возврат 0; КонецЕсли; Если НДСЕсть = 1 Тогда СтрокаДляПечати = СписокТоваров.ТовНаим; Пока СтрДлина(СтрокаДляПечати)>0 Цикл Объект.Caption = Лев(СтрокаДляПечати,ДлинаНаименования); Объект.PrintString(); СтрокаДляПечати = СокрЛП(Сред(СтрокаДляПечати,ДлинаНаименования+1)); КонецЦикла; КонецЕсли; Если Объект.Результат <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); Попытка Объект.CancelCheck(); Исключение КонецПопытки; ОтключитьсяОтФР(Объект, 0); Возврат 0; КонецЕсли; КонецЦикла; Если (ТипОплаты <> 1) Тогда Если ПустоеЗначение(Скидка) = 0 Тогда Если Скидка < 0 Тогда // надбавка Объект.Percents = -Скидка; Объект.ПроцентнаяНадбавка(); Иначе // Скидка Объект.Percents = Скидка; Объект.ПроцентнаяСкидка(); КонецЕсли; КонецЕсли; КонецЕсли; Если Объект.Результат <> 0 Тогда Объект.Percents = 0; ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); Попытка Объект.CancelCheck(); Исключение КонецПопытки; ОтключитьсяОтФР(Объект, 0); Возврат 0; КонецЕсли; Объект.Department = НомерСекции; НомерЧека = Объект.НомерЧека; Если (ТипОплаты=1) Тогда Если ПустоеЗначение(Скидка)=1 Тогда Объект.Summ = Окр(СуммаЧека, 2, 1); Иначе Объект.Summ = Окр(-Скидка / 100 * СуммаЧека + СуммаЧека, 2, 1); КонецЕсли; Объект.TypeClose = 3; Объект.ЗакрытьЧек(); Иначе Если (Получено > 0) И (Получено > СуммаЧека) Тогда Объект.Summ = Окр(Получено, 2, 1); Объект.ОплатаСоСдачей(); Иначе Объект.ЗакрытьЧек(); КонецЕсли; КонецЕсли; //Если (Получено > 0) И (Получено > СуммаЧека) Тогда // Объект.Summ = Окр(Получено, 2, 1); // Объект.ОплатаСоСдачей(); //Иначе // Объект.ЗакрытьЧек(); //КонецЕсли; Если Объект.Результат <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); Сообщить(ОписаниеРезультата); Попытка Объект.CancelCheck(); Исключение КонецПопытки; ОтключитьсяОтФР(Объект, 0); Возврат 0; КонецЕсли; Возврат ОтключитьсяОтФР(Объект); КонецФункции |
|||
14
MikeFromAtol
03.11.11
✎
23:38
|
А отладчиком пройтись и посмотреть, после чего вызывается эта команда? Я сам в 1С просто совсем не силен :)
|
|||
15
tommi
03.11.11
✎
23:41
|
Хорошая идея,так и поступлю
|
|||
16
big
04.11.11
✎
05:06
|
Каша какая-то. Бить скидки через ККМ - это хорошо разложенные грабли на пути к светлому будущему ))) Проблемы гарантированы.
|
|||
17
tommi
07.11.11
✎
12:36
|
Проблема оказалась не в скидках.При пробивании чека с безналом,все пробивается.А следующий нет,выводит аннулирование предыдущего и так пока не перезагрузить 1с.Посмотрел через отладчик.В процедуре ОтключитьсяОтФР() не может установить режим Mode=0, после установки отсается все равно 1.Добавил ResetMode() не помогло.КАК еще можно закрыть чек?
|
|||
18
tommi
07.11.11
✎
12:53
|
Ошибка теперь Ошибка! ResultCode = -3802 ResultDescription = "Чек открыт - операция невозможна"
|
|||
19
tommi
07.11.11
✎
17:00
|
Поставил после Объект.ОплатаСоСдачей(); - Объект.ЗакрытьЧек(); Теперь вроде все работатет, но почему до безнала и так работало,а теперь надо закрывать ???
|
|||
20
Torquader
08.11.11
✎
00:55
|
А там есть простая команда - закрыть чек без сдачи и наличными - она, видимо, и работала, а нормальную команду просто не отладили.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |