Имя: Пароль:
1C
1С v8
Сдача с безналичного расчета
0 MrCrowley1988
 
28.11.12
14:41
Всем доброе время суток!

Нужна помощь...

Вот какая ситуация:

В магазине (розничная торговля продуктами питания) стоят фискальные регистраторы (ФР) ИКС-483 LT.

Работают через 1С 8.2, Конфигурация "Розница".

Проблема при пробитии чеков через тип оплаты "Карта" (Безнал).
Например:

Товар
Количество: 0,516 кг
Цена: 59,99
Сумма без скидки (взял с печатной формы чека ККМ): 30,95
Скидка(взял с печатной формы чека ККМ): 0,00
Сумма (взял с печатной формы чека ККМ): 30,95

Если подсчитать калькулятором, то 0,516 * 59,99 = 30,95484.

Оплата наличкой: проблем нету
Оплата картой: пишет:

"
Ошибка фискального регистратора!

Ошибка Сдача с данного типа оплаты запрещена.

!Необходимо проверить настройки подключения фискального регистратора.

"

На табло ФР светиться сумма 30,94 (хотя в чеке 1С сумма 30,95).
Чек в конце смены не пробивается, его приходится аннулировать.

Моя версия: ФР не правильно рассчитывает сумму скидки.

Лезу в лог событий ФР, там такая ситуация (вырезал только кусок лога с побитием именно этого чека:

"
27.11.2012/16:20:59 R: Смена открыта
27.11.2012/16:20:59 Продажа F:Sale(0.516,1,59.99,1,Сервілат сливочний Гулівер н/к ваг (Зоря Дніпропет,48,0)
27.11.2012/16:20:59  o  Ђ2‘Ґаўi« в б«Ёў®з­Ё© ѓг«iўҐа ­/Є ў Ј (‡®ап „­iЇа®ЇҐв0   №
27.11.2012/16:20:59 Получен ACK
27.11.2012/16:20:59 F: Получен DLE ETX
27.11.2012/16:20:59   t    ,
27.11.2012/16:20:59 После замены символов DLE
27.11.2012/16:20:59   t    ,
27.11.2012/16:20:59 S: Код статуса=  
27.11.2012/16:20:59 Данные в виде строки:
27.11.2012/16:20:59     
27.11.2012/16:20:59 0x17 0x0C 0x00 0x00 0x17 0x0C 0x00 0x00
27.11.2012/16:20:59 R: Принтер фискализирован
27.11.2012/16:20:59 R: Смена открыта
27.11.2012/16:20:59 R: Открыт чек
27.11.2012/16:20:59 Скидка/надбавка F:Discount(0,-0.0156357,)
27.11.2012/16:20:59     #   „ N2
27.11.2012/16:20:59 Получен ACK
27.11.2012/16:20:59 F: Получен DLE ETX
27.11.2012/16:20:59     #  t  Ђ  Ѕ
27.11.2012/16:20:59 После замены символов DLE
27.11.2012/16:20:59     #  t  Ђ  Ѕ
27.11.2012/16:20:59 S: Код статуса=  
27.11.2012/16:20:59 Данные в виде строки:
27.11.2012/16:20:59   Ђ  
27.11.2012/16:20:59 0x01 0x00 0x00 0x80 0x16 0x0C 0x00 0x00
27.11.2012/16:20:59 R: Принтер фискализирован
27.11.2012/16:20:59 R: Смена открыта
27.11.2012/16:20:59 R: Открыт чек
27.11.2012/16:20:59 Оплата чека F:Payment(,4,30.95)
27.11.2012/16:20:59 
    ї2
27.11.2012/16:20:59 Получен ACK
27.11.2012/16:21:00 F: Получен DLE ETX
27.11.2012/16:21:00 
 +tC
27.11.2012/16:21:00 После замены символов DLE
27.11.2012/16:21:00 
 +tC
27.11.2012/16:21:00 S: Код статуса=  
27.11.2012/16:21:00 E: Сдача с этого типа оплаты запрещена Код ошибки: 43
27.11.2012/16:21:00 Данные в виде строки:
27.11.2012/16:21:00
"

Как видим вес, цену и наименование ФР из 1С берет правильно:
27.11.2012/16:20:59 Продажа F:Sale(0.516,1,59.99,1,Сервілат сливочний Гулівер н/к ваг (Зоря Дніпропет,48,0)

Сумма оплаты из 1С тоже правильная:
27.11.2012/16:20:59 Оплата чека F:Payment(,4,30.95)
(цифра 4 - это признак безналичного расчета, при наличном она равна 1).

Но вот какая фигня:
27.11.2012/16:20:59 Скидка/надбавка F:Discount(0,-0.0156357,)

То-есть, ФР по непонятному мне алгоритму вычисляет скидку на позицию, равной 0,0156357 коп (в 1С в печатной форме чека ККМ она пишется 0,00, хотя, по моим расчетам, равна 0,00484).
Как мне сказал спец с компании, у которой покупались драйвера к ФР, "ФР вычисляет ПРОЦЕНТНУЮ скидку на позицию в чеке, поэтому и расхождения" (в 1С 30,95, на ФР 30,94).

Если бы понять алгоритм вычисления скидки ФР, проблем бы не было - я бы в 1С написал такой-же алгоритм, и расхождений бы не было... но понять алгоритм не могу.

Спец с компании мягко меня послал, сказав, что драйвер работает нормально, проблема в 1С, обращайтесь к спецам по 1С или в компанию-разработчик конфигурации.

В общем, кто сталкивался с подобной ситуацией, огромная просьба помочь...

Код 1С обработки к драйверам ФР немного массивный, поэтому вставлять его сюда не стал, т.к. толком не знаю, что именно нужно и в чем проблема. Хотя...

"
Функция ПечататьСтроку(Объект, Наименование, Количество, Цена, Скидка, Отдел, НДС, Код=0) Экспорт
Перем ЕдиницаВНаименовании, ДлинаНаименования, Порт;
   Результат  = мНетОшибки;
...
...
// printRecItemAdjustment(ТипСкидки, Комментарий, Сумма/Процент)
   // Печать скидки/надбавки на строку/чек
   // Тип скидки:
   // 0 - % скидка/надбавка на товар
   // 1 - абсолютная скидка/надбавка на товар
   // 2 - % скидка/надбавка на промежуточную сумму
   // 3 - абсолютная скидка/надбавка на промежуточную сумму
   
   Если Скидка <> 0 Тогда
       Объект.Драйвер.printRecItemAdjustment(0, "", -Скидка);
       Результат = ПроверкаОшибокРегистратора(Объект);

       Если Результат <> мНетОшибки Тогда
           Объект.Драйвер.printRecVoid(); //отмена чека
           Объект.Драйвер.ClosePort();
       КонецЕсли;
       
   КонецЕсли;
   Возврат Результат;
"

"
Функция ЗакрытьЧек(Объект, СуммаНал, СуммаБезнал) Экспорт
   Результат  = мНетОшибки;

   // Закрытие чека
   // printRecTotal(тип, сумма, комментарий)
   // 1 – оплата наличными;
   // 2 – оплата в кредит;
   // 3 – оплата чеком;
   // 4 – оплата карточкой;

   Если СуммаБезнал > 0 Тогда
       Объект.Драйвер.printRecTotal(4,СуммаБезнал,"");  // оплата карточкой
   КонецЕсли;
   
   Если СуммаНал > 0 Тогда
       Объект.Драйвер.printRecTotal(1,СуммаНал,"");  // оплата наличными
   КонецЕсли;
   Результат = ПроверкаОшибокРегистратора(Объект);
   Объект.Драйвер.OpenDrawer(); // Открытие денежного ящика
   Объект.Драйвер.ClosePort();

   Возврат Результат;

КонецФункции
"
1 MrCrowley1988
 
28.11.12
14:45
"
СуммаВсего = Товары.Итог("Сумма");
СуммаНал = ПолучитьСуммуНаличнойОплаты();
СуммаБезнал = ПолучитьСуммуБезналичнойОплаты();
"

"
Функция ПолучитьСуммуБезналичнойОплаты() Экспорт

   СуммаБезналичнойОплаты = 0;
   Для Каждого ТекОплата Из Оплата Цикл
       Если ЗначениеЗаполнено(ТекОплата.ВидОплаты) И ТекОплата.ВидОплаты.ТипОплаты <> Перечисления.ТипыОплатЧекаККМ.Наличные Тогда
           СуммаБезналичнойОплаты = СуммаБезналичнойОплаты + ТекОплата.Сумма;
       КонецЕсли;
   КонецЦикла;

   Возврат СуммаБезналичнойОплаты;

КонецФункции // ПолучитьСуммуБезналичнойОплаты(
"
2 MrCrowley1988
 
28.11.12
14:48
В Функция ПечататьСтрок менял 0 на 1

"// 1 - абсолютная скидка/надбавка на товар"... сумма на ФР становилась вообще 30,93
3 MrCrowley1988
 
28.11.12
14:49
Проблем с пробытием штучного товара через безнал нету... там ничего не округляеться (цены у нас стоят кратные 5коп)...
4 MrCrowley1988
 
28.11.12
14:57
давно не пользовался форумом... случайно поставил пометку Admin...извените за ошибку
5 MrCrowley1988
 
28.11.12
17:11
Никто не сталкивался с такой проблемой... жаль