Как в 1С:Розница 3.0 и УНФ 3.0 настроить быструю оплату наличными без лишних кликов?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

В современных условиях розничной торговли скорость обслуживания покупателя на кассе является критическим фактором. В новых редакциях программ 1С:Розница 3.0 и 1С:Управление нашей фирмой 3.0 используется обновленное Рабочее место кассира (РМК), которое по умолчанию предполагает несколько шагов для регистрации оплаты наличными: нажатие кнопки «Наличные», ввод полученной суммы и подтверждение пробития чека. Рассмотрим, как можно оптимизировать этот процесс и реализовать сценарий «оплаты в один клик», когда сумма наличных принимается равной сумме покупки без вызова дополнительных диалоговых окон.

Анализ штатных возможностей РМК

Прежде чем приступать к программным изменениям, проанализируем, что предлагает типовой функционал. В настройках РМК (раздел Продажи — Настройки РМК) предусмотрены инструменты для ускорения работы, которые часто игнорируются:

  1. Быстрые товары и кнопки номиналов: В интерфейсе оплаты можно активировать отображение кнопок с популярными купюрами (50, 100, 500, 1000, 5000 руб.). Это не исключает появления окна оплаты, но избавляет кассира от ручного ввода цифр с клавиатуры.
  2. Горячие клавиши: Программа позволяет назначить клавишу (например, F6) на действие «Наличные». Однако штатное поведение этой команды жестко зашито в логику формы: она всегда открывает подменю для ввода суммы и расчета сдачи.

Выясним причину такого поведения: разработчики 1С следуют методическим рекомендациям, согласно которым кассир обязан зафиксировать сумму полученных средств для корректного расчета сдачи и отображения этой информации в чеке согласно ФЗ-54. Тем не менее, если специфика бизнеса подразумевает частые расчеты «под расчет» (без сдачи), мы можем доработать этот механизм.

Решение проблемы с помощью штрихкодов команд

Разберем малоизвестный, но эффективный способ автоматизации без изменения кода. В РМК поддерживается работа с управляющими штрихкодами. Вы можете сгенерировать штрихкод для команды «Наличные». В некоторых версиях конфигурации при сканировании такого штрихкода в момент завершения подбора товаров система автоматически подставляет итоговую сумму чека в поле оплаты. Если настроить сканер так, чтобы он добавлял символ Enter (префикс/суффикс) после считывания кода, можно добиться практически мгновенного закрытия чека.

Программная реализация: Создание кнопки «Чек без сдачи»

Если штатные методы не подходят, перейдем к реализации программного решения. Мы настоятельно рекомендуем использовать Расширение конфигурации. Это позволит сохранить основную программу на поддержке и избежать проблем при обновлении. Наша задача — добавить в ФормаРМК (или ФормаПродаж в зависимости от версии) новую команду, которая будет выполнять всю цепочку действий за один клик.

Рассмотрим пошаговый алгоритм реализации в расширении:

  1. Создаем новую команду формы, назовем ее БыстраяОплатаНаличными.
  2. Выносим кнопку этой команды на командную панель или назначаем ей горячую клавишу (например, F12).
  3. Пишем обработчик команды на клиенте. Нам необходимо программно заполнить таблицу оплат и вызвать процедуру фискализации.

Посмотрим на пример кода, который реализует данную логику:


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

КонецПроцедуры

Проанализируем ситуацию на стороне сервера. Нам нужно корректно добавить запись в таблицу Оплаты объекта чека, указав соответствующий тип оплаты (Наличные):


&НаСервере
Процедура ЗаполнитьОплатуНаличнымиНаСервере(СуммаОплаты)
    
    // Очищаем предыдущие попытки оплаты, если это необходимо по бизнес-логике
    Объект.Оплаты.Очистить();
    
    // Добавляем новую строку оплаты
    НоваяСтрока = Объект.Оплаты.Добавить();
    НоваяСтрока.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплат.Наличные");
    НоваяСтрока.Сумма = СуммаОплаты;
    
    // Если в конфигурации используется справочник ЭквайринговыеТерминалы или ВидыОплат,
    // необходимо найти соответствующую ссылку на вид оплаты "Наличные"
    НоваяСтрока.ВидОплаты = Справочники.ВидыОплатЧекаККМ.Наличные;
    
КонецПроцедуры

Интеграция со штатным механизмом пробития

Важным моментом является вызов правильной экспортной процедуры пробития. В новом РМК логика фискализации часто вынесена в общие модули или скрыта за вызовами подключаемого оборудования. Чтобы имитировать нажатие кнопки «Пробить», в коде расширения следует вызывать метод ПробитьЧекЗавершение или аналогичную команду, которая активируется после успешного ввода суммы. Мы рекомендуем использовать поиск по тексту «ПробитьЧек» в модуле формы РМК, чтобы найти точное имя процедуры в вашей версии релиза.

Альтернативный вариант: Использование макросов POS-клавиатуры

Если вы не хотите вносить изменения в код программы, существует аппаратный способ решения задачи. Большинство профессиональных программируемых клавиатур (например, PrehKeyTec или Posiflex) позволяют записывать последовательности нажатий (макросы) на одну физическую клавишу.

Рассмотрим последовательность макроса для кассира:

  1. Нажатие F6 (открывает окно ввода наличных).
  2. Нажатие Enter (система автоматически подставляет сумму чека как принятую сумму).
  3. Нажатие Enter (подтверждение пробития чека).

Таким образом, настроив макрос на одну клавишу, вы получите желаемый результат: программа будет «думать», что кассир быстро нажал три кнопки, хотя фактически было сделано одно движение. Это надежный метод, который не требует программирования в 1С и не слетает при обновлениях.

Меры предосторожности и риски

Реализуя функционал «быстрого чека», важно учитывать несколько критических аспектов:

Во-первых, это вопрос округления. Если в вашей базе настроено автоматическое округление копеек в пользу покупателя, программный код должен брать значение из реквизита СуммаКПогашению, а не просто ИтогЧека, чтобы не возникло расхождений в копейках между данными учета и фискальным накопителем.

Во-вторых, риск человеческого фактора. Если кассир случайно нажмет кнопку быстрой оплаты, когда клиент подал купюру номиналом 5000 рублей при сумме чека 200 рублей, программа зафиксирует «без сдачи». В итоге в кассовом ящике будет излишек, а в чеке — неверная информация о сдаче, что может вызвать вопросы у покупателя.

В-третьих, законодательный аспект. Согласно 54-ФЗ, в чеке должны быть отражены фактически полученные средства. Пробитие всех чеков «сумма в сумму» юридически допустимо, но лишает вас инструмента контроля кассовой дисциплины через отчеты о сдаче.

Подведем итог: наиболее корректным способом реализации является создание расширения с добавлением отдельной кнопки «Оплата без сдачи». Это сохраняет типовой механизм для сложных случаев (со сдачей) и дает инструмент ускорения для простых продаж.

← На главную