В практике автоматизации сетей АЗС на базе 1С:Комплексная автоматизация 2 (КА 2) часто возникает специфическая задача: необходимо обеспечить отпуск топлива корпоративным клиентам по "литровым" картам через стандартное рабочее место кассира (РМК), но при этом избежать формирования обычных розничных чеков и фискализации через кассовый аппарат. Вместо этого система должна фиксировать отгрузку и по итогам смены формировать документы Реализация товаров и услуг (РТУ) на конкретных контрагентов.
Разберем подробно, как можно реализовать такой алгоритм, учитывая требования по списанию остатков в реальном времени и интеграцию с облачными сервисами типа ВебКасса.
Прежде чем приступать к кодингу, проанализируем ключевые этапы процесса:
Отчета о розничных продажах, который "схлопывает" все продажи в одну кучу, нам нужны индивидуальные реализации для каждого корпоративного клиента.Рассмотрим подход, при котором мы используем штатный механизм РМК, но вносим изменения в логику обработки документов при закрытии смены. Проанализируем ситуацию: в РМК кассир подбирает товар и считывает карту лояльности. В этот момент система определяет партнера, привязанного к карте.
Для реализации этого метода предлагается следующий алгоритм:
Чек ККМ добавляется дополнительный признак (реквизит), указывающий на то, что это "Отгрузка по карте ГСМ".Закрытие кассовой смены (модуль менеджера документа ОтчетОРозничныхПродажах) внедряется условие: если чек помечен как "отгрузка по карте", он исключается из общего отчета о розничных продажах.Реализация товаров и услуг.Пример логики в процедуре обработки закрытия смены может выглядеть следующим образом:
Процедура ОбработатьЧекиПриЗакрытииСмены(ПараметрыСмены)
// Выборка чеков за смену
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка, Партнер, СуммаДокумента ИЗ Документ.ЧекККМ ГДЕ КассоваяСмена = &КассоваяСмена";
Запрос.УстановитьПараметр("КассоваяСмена", ПараметрыСмены.Ссылка);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Если ЭтоОтгрузкаПоКарте(Результат.Ссылка) Тогда
// Создаем реализацию вместо включения в ОРП
СоздатьРеализациюНаОснованииЧека(Результат.Ссылка);
Иначе
// Стандартная обработка для ОРП
ДобавитьВСписокДляОтчета(Результат.Ссылка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Выясним причину, по которой этот способ считается более "чистым" с точки зрения типовой архитектуры 1С. В КА 2 существует штатный механизм оплаты чеков в кредит. При использовании этого механизма документ Чек ККМ фиксирует передачу товара без немедленной оплаты наличными.
Рассмотрим подробнее шаги реализации:
Поскольку форма РМК в КА 2 тесно связана с объектом Чек ККМ, при нажатии кнопки "Пробить" система автоматически обращается к подключаемому оборудованию. Чтобы предотвратить печать чека через ВебКассу при отгрузке по картам, необходимо вмешаться в код формы РМК или использовать Расширение.
Проанализируем процедуру печати. В момент вызова команды печати нам нужно добавить проверку:
&НаКлиенте
Процедура Подключаемое_ВыполнитьПечатьЧека(Команда)
// Проверяем, является ли текущая продажа отгрузкой по литровой карте
Если Объект.ВидОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатЧекаККМ.Постоплата") Тогда
// Просто записываем документ без вызова драйвера ККМ
ЗаписатьДокументОбъект();
ОчиститьФормуРМК();
Иначе
// Вызываем штатную процедуру фискализации
ПродолжитьПечатьЧекаПоСтандарту();
КонецЕсли;
КонецПроцедуры
Такой подход гарантирует, что ВебКасса не зафиксирует продажу, а значит, у компании не возникнет лишних налоговых обязательств по розничной выручке, которая по факту является отгрузкой по договору.
Одной из ключевых задач является списание остатков со склада непосредственно в момент заправки. Если мы будем ждать закрытия смены для формирования РТУ, остатки на складе АЗС будут неактуальны в течение дня. Чтобы решить эту проблему, рассмотрим два пути:
Расходный ордер на товары в статусе "Отгружен". Это мгновенно уменьшит свободный остаток.Реализация товаров и услуг. Однако это может замедлить работу кассира, так как РТУ — "тяжелый" документ для базы в облаке.Для хранения информации о литрах на карте в КА 2 удобнее всего использовать справочник Карты лояльности. В нем есть типовая связь с партнером (контрагентом). Для учета именно "литров" (количественного остатка) можно использовать механизм Бонусных баллов, где 1 балл приравнивается к 1 литру топлива.
Посмотрим, как это работает:
Важно: Этот метод требует доработки в части бухгалтерского учета, так как оплата бонусами в типовой логике — это скидка, а для АЗС важно показать реализацию по полной стоимости с зачетом аванса. Поэтому наиболее стабильным решением остается связка "Чек с постоплатой -> РТУ по итогам смены".
Подводя итог, реализация отпуска ГСМ через РМК без создания чеков ККМ возможна через механизм расширений, где мы перехватываем событие печати и меняем логику закрытия смены. Это позволяет сохранить удобство интерфейса РМК для кассира и обеспечить строгий учет взаиморасчетов с корпоративными клиентами в 1С:Комплексная автоматизация 2.