В современных условиях розничной торговли скорость обслуживания покупателя на кассе является критическим фактором. В новых редакциях программ 1С:Розница 3.0 и 1С:Управление нашей фирмой 3.0 используется обновленное Рабочее место кассира (РМК), которое по умолчанию предполагает несколько шагов для регистрации оплаты наличными: нажатие кнопки «Наличные», ввод полученной суммы и подтверждение пробития чека. Рассмотрим, как можно оптимизировать этот процесс и реализовать сценарий «оплаты в один клик», когда сумма наличных принимается равной сумме покупки без вызова дополнительных диалоговых окон.
Прежде чем приступать к программным изменениям, проанализируем, что предлагает типовой функционал. В настройках РМК (раздел Продажи — Настройки РМК) предусмотрены инструменты для ускорения работы, которые часто игнорируются:
F6) на действие «Наличные». Однако штатное поведение этой команды жестко зашито в логику формы: она всегда открывает подменю для ввода суммы и расчета сдачи.Выясним причину такого поведения: разработчики 1С следуют методическим рекомендациям, согласно которым кассир обязан зафиксировать сумму полученных средств для корректного расчета сдачи и отображения этой информации в чеке согласно ФЗ-54. Тем не менее, если специфика бизнеса подразумевает частые расчеты «под расчет» (без сдачи), мы можем доработать этот механизм.
Разберем малоизвестный, но эффективный способ автоматизации без изменения кода. В РМК поддерживается работа с управляющими штрихкодами. Вы можете сгенерировать штрихкод для команды «Наличные». В некоторых версиях конфигурации при сканировании такого штрихкода в момент завершения подбора товаров система автоматически подставляет итоговую сумму чека в поле оплаты. Если настроить сканер так, чтобы он добавлял символ Enter (префикс/суффикс) после считывания кода, можно добиться практически мгновенного закрытия чека.
Если штатные методы не подходят, перейдем к реализации программного решения. Мы настоятельно рекомендуем использовать Расширение конфигурации. Это позволит сохранить основную программу на поддержке и избежать проблем при обновлении. Наша задача — добавить в ФормаРМК (или ФормаПродаж в зависимости от версии) новую команду, которая будет выполнять всю цепочку действий за один клик.
Рассмотрим пошаговый алгоритм реализации в расширении:
БыстраяОплатаНаличными.F12).Посмотрим на пример кода, который реализует данную логику:
&НаКлиенте
Процедура БыстраяОплатаНаличными(Команда)
// Получаем текущую сумму к оплате из реквизитов формы
СуммаКПогашению = Объект.СуммаДокумента;
// Проверяем, не пустой ли чек
Если СуммаКПогашению = 0 Тогда
Возврат;
КонецЕсли;
// Вызываем серверный метод для заполнения коллекции оплат
ЗаполнитьОплатуНаличнымиНаСервере(СуммаКПогашению);
// Инициируем штатную процедуру пробития чека
// В РМК это обычно вызов команды ПробитьЧек
ВыполнитьКомандуПробитьЧек();
КонецПроцедуры
Проанализируем ситуацию на стороне сервера. Нам нужно корректно добавить запись в таблицу Оплаты объекта чека, указав соответствующий тип оплаты (Наличные):
&НаСервере
Процедура ЗаполнитьОплатуНаличнымиНаСервере(СуммаОплаты)
// Очищаем предыдущие попытки оплаты, если это необходимо по бизнес-логике
Объект.Оплаты.Очистить();
// Добавляем новую строку оплаты
НоваяСтрока = Объект.Оплаты.Добавить();
НоваяСтрока.ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплат.Наличные");
НоваяСтрока.Сумма = СуммаОплаты;
// Если в конфигурации используется справочник ЭквайринговыеТерминалы или ВидыОплат,
// необходимо найти соответствующую ссылку на вид оплаты "Наличные"
НоваяСтрока.ВидОплаты = Справочники.ВидыОплатЧекаККМ.Наличные;
КонецПроцедуры
Важным моментом является вызов правильной экспортной процедуры пробития. В новом РМК логика фискализации часто вынесена в общие модули или скрыта за вызовами подключаемого оборудования. Чтобы имитировать нажатие кнопки «Пробить», в коде расширения следует вызывать метод ПробитьЧекЗавершение или аналогичную команду, которая активируется после успешного ввода суммы. Мы рекомендуем использовать поиск по тексту «ПробитьЧек» в модуле формы РМК, чтобы найти точное имя процедуры в вашей версии релиза.
Если вы не хотите вносить изменения в код программы, существует аппаратный способ решения задачи. Большинство профессиональных программируемых клавиатур (например, PrehKeyTec или Posiflex) позволяют записывать последовательности нажатий (макросы) на одну физическую клавишу.
Рассмотрим последовательность макроса для кассира:
F6 (открывает окно ввода наличных).Enter (система автоматически подставляет сумму чека как принятую сумму).Enter (подтверждение пробития чека).Таким образом, настроив макрос на одну клавишу, вы получите желаемый результат: программа будет «думать», что кассир быстро нажал три кнопки, хотя фактически было сделано одно движение. Это надежный метод, который не требует программирования в 1С и не слетает при обновлениях.
Реализуя функционал «быстрого чека», важно учитывать несколько критических аспектов:
Во-первых, это вопрос округления. Если в вашей базе настроено автоматическое округление копеек в пользу покупателя, программный код должен брать значение из реквизита СуммаКПогашению, а не просто ИтогЧека, чтобы не возникло расхождений в копейках между данными учета и фискальным накопителем.
Во-вторых, риск человеческого фактора. Если кассир случайно нажмет кнопку быстрой оплаты, когда клиент подал купюру номиналом 5000 рублей при сумме чека 200 рублей, программа зафиксирует «без сдачи». В итоге в кассовом ящике будет излишек, а в чеке — неверная информация о сдаче, что может вызвать вопросы у покупателя.
В-третьих, законодательный аспект. Согласно 54-ФЗ, в чеке должны быть отражены фактически полученные средства. Пробитие всех чеков «сумма в сумму» юридически допустимо, но лишает вас инструмента контроля кассовой дисциплины через отчеты о сдаче.
Подведем итог: наиболее корректным способом реализации является создание расширения с добавлением отдельной кнопки «Оплата без сдачи». Это сохраняет типовой механизм для сложных случаев (со сдачей) и дает инструмент ускорения для простых продаж.