При переходе на управляемые формы и современные версии конфигураций многие разработчики и пользователи сталкиваются с вопросом: куда исчезли привычные внешние обработки обслуживания торгового оборудования (ТО) и как выполнять служебные кассовые операции, такие как внесение и выемка наличных. Особенно остро эта задача встает в конфигурации 1С:Бухгалтерия предприятия 3.0, когда требуется оформить возврат денежных средств покупателю в начале смены при нулевой выручке, а кассовый аппарат блокирует операцию из-за нехватки денег в ящике.
Разберем архитектуру подсистемы подключаемого оборудования, выясним причины ограничений прикладного решения и рассмотрим программные и административные способы выполнения внесения наличности в кассу ККМ.
В конфигурациях предыдущих поколений на обычных формах взаимодействие с кассовыми аппаратами реализовывалось через внешние обработки обслуживания (файлы с расширением .epf). В современных конфигурациях на базе Библиотеки стандартных подсистем (БСП) и Библиотеки подключаемого оборудования (БПО) архитектура изменилась:
МенеджерОборудованияКлиент, МенеджерОборудованияКлиентСервер, МенеджерОборудованияСервер)..dll), которые хранятся внутри информационной базы в справочнике ДрайверыОборудования.ПодключаемоеОборудование.В отличие от специализированных торговых конфигураций (например, 1С:Розница, 1С:Управление торговлей или 1С:УНФ), в 1С:Бухгалтерия 3.0 типовой пользовательский интерфейс для регистрации операций внесения и выемки наличности не предусмотрен. Это связано со следующими факторами:
50.01 («Касса организации») на основании первичных документов ПриходныйКассовыйОрдер и РасходныйКассовыйОрдер.Однако на уровне прошивки самого фискального регистратора часто включен контроль остатка наличности и автоматическая инкассация при Z-отчете. Если смена только открыта и чеков продажи не было, попытка пробить чек на возврат вызовет ошибку драйвера «Не хватает наличности в кассе».
Хотя в интерфейсе программы нужной кнопки нет, все процедуры для управления фискальным устройством присутствуют в программном коде конфигурации. Для решения задачи можно создать внешнюю обработку или добавить команду через расширение конфигурации.
Рассмотрим структуру вызова асинхронного метода МенеджерОборудованияКлиент.НачатьИнкассациюНаФискальномУстройстве. Для инициализации параметров операции используется служебная функция-конструктор.
Посмотрим на пример клиентского кода:
&НаКлиенте
Процедура ВыполнитьВнесение(Команда)
// Подготовим параметры операции инкассации/внесения
ПараметрыОперации = МенеджерОборудованияКлиентСервер.ПараметрыИнкассации();
ПараметрыОперации.Сумма = 5000; // Сумма операции
ПараметрыОперации.ТипОперации = 1; // 1 - Внесение, 0 - Выемка
// Блокируем форму на время выполнения операции
ЭтаФорма.Доступность = Ложь;
ОповещениеПриЗавершении = Новый ОписаниеОповещения("ВыполнитьВнесениеЗавершение", ЭтотОбъект);
// Вызываем метод БПО для работы с фискальным регистратором
МенеджерОборудованияКлиент.НачатьИнкассациюНаФискальномУстройстве(
ОповещениеПриЗавершении,
УникальныйИдентификатор,
ПараметрыОперации,
ИдентификаторУстройства
);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьВнесениеЗавершение(РезультатВыполнения, Параметры) Экспорт
ЭтаФорма.Доступность = Истина;
Если НЕ РезультатВыполнения.Результат Тогда
ТекстСообщения = НСтр("ru = 'При выполнении операции произошла ошибка: ""%ОписаниеОшибки%"".'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ОписаниеОшибки%", РезультатВыполнения.ОписаниеОшибки);
ПоказатьОшибку(ТекстСообщения);
Иначе
ПоказатьОповещениеПользователя("Успешно", , "Внесение наличности в ККТ выполнено.");
КонецЕсли;
КонецПроцедуры
Разберем параметры, передаваемые в вызов:
ОповещениеПриЗавершении — объект ОписаниеОповещения, указывающий на процедуру обратного вызова, которая сработает после ответа драйвера ККТ.УникальныйИдентификатор — идентификатор формы или обработчика для управления контекстом выполнения.ПараметрыОперации — структура, полученная через МенеджерОборудованияКлиентСервер.ПараметрыИнкассации(), содержащая поля Сумма и ТипОперации.ИдентификаторУстройства — ссылка на элемент справочника ПодключаемоеОборудование, соответствующий используемой кассе.Если нет возможности использовать внешнюю обработку или дорабатывать конфигурацию, проблему нехватки наличности при возврате можно решить настройками самого кассового аппарата:
Таким образом, для выполнения служебных операций с наличностью в 1С:Бухгалтерии 3.0 наиболее удобным путем для программиста является создание компактной внешней обработки на базе методов БПО, а для администратора — корректировка настроек контроля наличности в драйвере кассового аппарата.