Скидки в чеке без копеек 1С Управление Торговлей (УТ) 10.3

Весьма странно, но (увы!) штатными средствами не получится настроить округление скидок до рублей, например, тем, кто пользуется стандартным фронтом кассира 1С Управление Торговлей 10.3.

Есть ещё одна маленькая неприятная проблема: во время написания и проверки округления скидок я столкнулся с ситуацией, когда округлённая по 1С сумма не совпадала с округлённой суммой по мнению принтера для ЕНВД. Принтер говорил «Ой!» и до ручного аннулирования чека через драйвер отказывался что-либо печатать, находясь в состоянии открытого чека.

По условиям задачи не требовалось делать универсальный механизм округления, нужно было реализовать округление до целых рублей. Плюс дополнительно заказчик попросил вынести на форму для кассира кнопку переключения «Округлять/не округлять».

Далее будем работать с «Управление торговлей», редакция 10.3 (10.3.32.2). В других релизах процедуры и функции могут быть изменены.

Открываем Обработки — ТОСервер

Заголовок функции ПечатьЧека:

меняем на:

внутри функции ПечатьЧека между

вставляем следующий код:

Именно здесь кроется разница в мировоззрении 1С и фискальных регистраторов 🙂

Далее, открываем Общие — ОбщиеМодули — ОбработкаТабличныхЧастей

У процедуры РассчитатьСкидкиПриПродаже меняем заголовок

на

и в самой процедуре перед

вставляем следующий фрагмент

Далее, здесь же меняем заголовок процедуры

на

и в конце процедуры после

дописываем

Ну а теперь самое интересное. 🙂 Открываем Документы — ЧекККМ — Модуль объекта.

Изменяем заголовок функции ПересчитатьАвтоматическиеСкидки

на следующий

и внутри процедуры меняем вызов уже знакомой нам процедуры на следующий

Здесь же, в модуле объекта видоизменяем заголовок функции ПровестиИРаспечататьЧек

и внутри функции переписываем обращение к печати чека

Чуть не забыл! 🙂 Открываем модуль формы ФормаОплатЧека и в процедуре ПриИзмененииВидаОплаты меняем вызов процедуры на такой

Осталось совсем чуть-чуть. Открываем модуль формы ФормаРегистрацииПродаж и вверху описываем новую переменную

Теперь сделаем округление скидок до рублей отключаемым по выбору пользователя. Для этого добавляем на форму кнопку кнОкругление и создаем процедуру по нажатию на эту кнопку

Далее внутри процедуры ЗакрытьЧек дописываем нашу переменную

Внутри процедуры ОбработкаПодбора в двух местах исправляем так

В процедуре ПриЗакрытии сохраняем значение нашей переменной

ну и ПриОткрытии восстанавливаем

У меня переменная мОкруглятьДоРублей привязана к кнопке на форме. Если мы хотим принудительно поставить округление, можно в процедуре ПриОткрытии написать просто

Тогда ПриЗакрытии нам не нужна.

Исправляем код внутри следующих процедур: ДействияФормыНазначитьСкидку,

ПриИзмененииДисконтнойКарты, ТоварыПослеУдаления, ТоварыПриОкончанииРедактирования вот так

И всё!


Информация в данной статье дана для ознакомления, претензии по поводу того, что «А у меня не работает» не принимаются. Наверняка, можно это же реализовать с помощью ста других способов, но я нашёл именно этот. Как минимум, Errare humanum est и я не исключение.

Rating: 5.0. From 1 vote.
Please wait...

2 Comments

    • Проверить сейчас не могу, но можно попробовать так.
      В моих правках вместо
      Если ОкруглятьДоРублей Тогда
      СуммаСоСкидкой1С = Окр(СуммаСоСкидкой1С);
      КонецЕсли;

      написать
      Если ОкруглятьДоРублей Тогда
      СуммаСоСкидкой1С = Окр(СуммаСоСкидкой1С,-1);
      КонецЕсли;

      Далее, меняем
      Для Каждого СтрокаТЧ Из ТаблицаТоваров Цикл
      СтрокаТЧ.Сумма = Окр(СтрокаТЧ.Сумма);
      КонецЦикла;

      на
      Для Каждого СтрокаТЧ Из ТаблицаТоваров Цикл
      СтрокаТЧ.Сумма = Окр(СтрокаТЧ.Сумма,-1);
      КонецЦикла;

      И, наконец, вместо:
      Если СуммаСкидки <> 0 и ОкруглятьДоРублей Тогда
      СтрокаТабличнойЧасти.Сумма = Окр(СтрокаТабличнойЧасти.Сумма);
      КонецЕсли;

      пишем
      Если СуммаСкидки <> 0 и ОкруглятьДоРублей Тогда
      СтрокаТабличнойЧасти.Сумма = Окр(СтрокаТабличнойЧасти.Сумма,-1);
      КонецЕсли;

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*