Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 17:32

Фискальный регистратор (округление скидки в чеке)

Автор d_liliya, 20 мая 2016, 10:11

0 Пользователей и 1 гость просматривают эту тему.

d_liliya

Цитата: Rasty от 20 мая 2016, 15:37
СуммаНал и СуммаБезнал округлить

Как печать идет:
ПРОДАЖА 532.5
НАЛИЧНЫМИ 533
СДАЧА 0.5

суммаНал/СуммаБезнал - это сумма,которую он берет из реализации (оплата от клиента), то есть НАЛИЧНЫМИ, а сумма ПРОДАЖА он ее сам высчитывает и не округляет, отсюда эта разница в 0.5


Добавлено: 20 мая 2016, 15:44


Вся проблема в том, что он не записывает ни в какую переменную эту сумму, он делает это в методе Объект.Драйвер.ЗакрытьЧек(Объект.ИДУстройства, СуммаНал, СуммаБезнал, 0)

Rasty

тогда возвращаемся к этому
Цитата: Rasty от 20 мая 2016, 10:58то что вы изменяете это и есть обработка обслуживание, которая находится в соответствующем справочнике, внесли изменения в нее, перевыбрали в справочнике, почистили кэш

Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

d_liliya

В этой обработке у меня нет доступа к итоговой сумме, а изменение (округление) скидок каждой строки в чеке мне дает неверный результат.
Функция ПечатьЧека(Идентификатор, Пароль, НомерЧека, НомерСмены,
                   ОписаниеЧека, СуммаНал, СуммаБезнал, ПризнакВозврата) Экспорт

Обработка = Неопределено;
Объект    = Неопределено;
Результат = ПолучитьОбъектДрайвера(Идентификатор, Обработка, Объект);

Если НЕ ЗначениеЗаполнено(Результат) Тогда
Результат = Обработка.ОткрытьЧек(Объект, Пароль, ПризнакВозврата, НомерЧека, НомерСмены);
Если НЕ ЗначениеЗаполнено(Результат) Тогда
Позиция = Неопределено;
Для Каждого Позиция Из ОписаниеЧека Цикл
Результат = ПечататьСтроку(Объект,
                                 Позиция.Наименование,
                                 Позиция.Количество,
                                 Позиция.Цена,
                                 Позиция.Скидка,
                                 Позиция.НомерСекции,
                                 0);
Если ЗначениеЗаполнено(Результат) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ ЗначениеЗаполнено(Результат) Тогда
Результат = Обработка.ЗакрытьЧек(Объект, СуммаНал, СуммаБезнал);
КонецЕсли;
КонецЕсли;

мОписаниеОшибки = Объект.ОписаниеОшибки;
Иначе
мОписаниеОшибки = ПолучитьТекстОшибкиПодключенияТО("ФР");
КонецЕсли;

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

КонецФункции // ПечатьЧека()

// Функция осуществляет печать строки чека на ФР.

Функция ПечататьСтроку(Объект, Наименование, Количество, Цена, Скидка, Отдел, НДС) Экспорт

Результат  = мНетОшибки;
СуммаПозиции = Количество*Цена - Окр(Количество*Цена*Скидка/100, 0, РежимОкругления.Окр15как10);

Пока Истина Цикл
Если Не Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);

Ответ = Вопрос(Объект.ОписаниеОшибки + Символы.ПС
+ "Устраните неисправность и нажмите ""Повторить"" для продолжения печати.", РежимДиалогаВопрос.ПовторитьОтмена, 0, КодВозвратаДиалога.Повторить);

Если Ответ = КодВозвратаДиалога.Повторить Тогда
Объект.Драйвер.ПродолжитьПечать(Объект.ИДУстройства);

Если Результат <> мНетОшибки И Объект.Драйвер.ПроверитьСостояниеПечати(Объект.ИДУстройства) Тогда
Результат = мНетОшибки;
Прервать;
КонецЕсли;
Иначе
Объект.Драйвер.ОтменитьЧек(Объект.ИДУстройства);
Объект.ОписаниеОшибки = Объект.ОписаниеОшибки + ". Операция печати чека отменена.";
Результат = мОшибкаНеизвестно;
Прервать;
КонецЕсли;
Иначе
Если Результат = мНетОшибки И Не Объект.Драйвер.НапечататьФискСтроку(Объект.ИДУстройства, Наименование, Количество, Цена, СуммаПозиции, Отдел, НДС) Тогда
Результат = мОшибкаНеизвестно;
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
Иначе
Если Результат <> мНетОшибки Тогда
Объект.Драйвер.ОтменитьЧек(Объект.ИДУстройства);
КонецЕсли;

Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;

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

КонецФункции // ПечататьСтроку()

Rasty

Вот это -----> Объект.Драйвер.ЗакрытьЧек() вызывается функция в обработке обслуживания возьмите ее из Справочника обработки обслуживания сохраните, измените, загрузите заново

Добавлено: 20 мая 2016, 16:04


а чтобы было еще проще
%userprofile%\AppData\Roaming\1C\1cv8\tmplts\1c\trade\ваша_версия_ут\TradeWareEpf
Добавлено: 20 мая 2016, 16:09


упс, не увидел. прошу прощения, какой тип у "объект"?
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

d_liliya

Цитата: Rasty от 20 мая 2016, 15:59
Вот это -----> Объект.Драйвер.ЗакрытьЧек() вызывается функция в обработке обслуживания возьмите ее из Справочника обработки обслуживания сохраните, измените, загрузите заново

Добавлено: 20 мая 2016, 16:04


а чтобы было еще проще
%userprofile%\AppData\Roaming\1C\1cv8\tmplts\1c\trade\ваша_версия_ут\TradeWareEpf

В %userprofile%\AppData\Roaming\1C\1cv8 нет папки tmplts и TradeWare обработка вообще на компьютере не найдена. А вот насчет первоо варианта можете поподробнее, пожалуйста? Вы хотите сказать в этом справочнике есть метод ЗакрытьЧек()? В модуле справочника только Процедура ПередЗаписью, а в модулях формы я не нашла

Объект это структура, содержащая Драйвер(тип неизвестный объект), ИДУустройства,Модель,ОписаниеОшибки,Параметры(тут  пароли, скорость и т.д.)

Rasty

я не говорю вам это, я вам говорю что там лежит обработка обслуживания(двоичные данные)
Цитата: Rasty от 20 мая 2016, 15:59упс, не увидел. прошу прощения, какой тип у "объект"?


Добавлено: 20 мая 2016, 16:15


да и не проще ли менять числа в реализации?
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

d_liliya

Добавлено: 20 мая 2016, 16:15


да и не проще ли менять числа в реализации?
[/quote]
Заказчику необходимо округление на чеке, потому что в реализации округляется автоматически.

Rasty

Цитата: d_liliya от 20 мая 2016, 15:54Если НЕ ЗначениеЗаполнено(Результат) Тогда
                Результат = Обработка.ЗакрытьЧек(Объект, СуммаНал,
КонецЕсли;
так какой тип у объект и у объект.драйвер?


Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

d_liliya


Rasty

Для Каждого Позиция Из ОписаниеЧека Цикл
            ЗначениеСкидки = Позиция.Количество * Позиция.Цена * Позиция.Скидка * 0.01;
            СуммаСоСкидкой1С = Окр(Позиция.Количество * Позиция.Цена - ЗначениеСкидки, 2);
            СуммаСоСкидкойФР = Окр(Позиция.Количество * Позиция.Цена - Окр(ЗначениеСкидки, 2), 2);

            Если СуммаСоСкидкой1С = СуммаСоСкидкойФР Тогда
               Результат = Обработка.ПечататьСтроку(Объект,
                                       Позиция.Наименование,
                                       Позиция.Количество,
                                       Позиция.Цена,
                                       Позиция.Скидка,
                                       Позиция.НомерСекции,
                                       Позиция.СтавкаНДС);
            Иначе
               Результат = Обработка.ПечататьСтроку(Объект,
                                       Позиция.Наименование,
                                       1,
                                       СуммаСоСкидкой1С,
                                       0,
                                       Позиция.НомерСекции,
                                       Позиция.СтавкаНДС);
            КонецЕсли;

            Если ЗначениеЗаполнено(Результат) Тогда
               Прервать;
            КонецЕсли;
         КонецЦикла;

Добавлено: 20 мая 2016, 16:32


это взято из более новой версии ут
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск