Иногда кассиру, оператору требуется напечатать для клиента какой-либо текстовый документ, например, предварительный заказ. Удобно это делать на контрольно-кассовой технике, которая уже установлена на рабочем месте. При работе с фискальными регистраторами (ФР) обычно это не вызывает сложностей. Рассмотрим вариант печати нефискального документа на ККТ для УТ 10.3.
На самом деле в конфигурации УТ 10.3 на уровне общих модулей уже все необходимое есть, остается это правильно собрать и исполнить, но при этом в обработках обслуживания торгового оборудования для ККТ с передачей данных, по крайней мере для Штрих-м и Атол, нет необходимых функций. Итак, из конфигурации нам понадобиться следующие ключевые процедуры/функции:
- ПодключаемоеОборудованиеУниверсальныйДрайверКлиент.ВыполнитьКоманду - универсальная процедура для подачи команды на ККТ, в частности нам понадобится для печати команда PrintTextDocument;
- МенеджерОборудованияКлиентСервер.ПараметрыТекстовойСтрокиЧека - для формирования строк для печати на ленте;
- Остальное можно уже делать по аналогии с печатью чека на ККТ из документ ЧекККМ процедуры модуля документа ПровестиИРаспечататьЧек.
Для единообразия дополним существующую обработку обслуживания ККТ функцией печати текстового документа:
Функция НапечататьТекстовыйДокумент(Объект, ПараметрыЧека, ШиринаСтроки = 32) Экспорт
ПолучитьПараметрыККТ(Объект);
мПараметрыПодключения.Вставить("ПараметрыРегистрации", Объект.ВыходныеПараметры);
мПараметрыПодключения.Вставить("ШиринаСтроки", ШиринаСтроки);
мВходныеПараметры.Очистить();
мВходныеПараметры.Добавить(ПараметрыЧека);
РезультатВыполнения = ПодключаемоеОборудованиеУниверсальныйДрайверКлиент.ВыполнитьКоманду("PrintTextDocument",
мВходныеПараметры, мВыходныеПараметры, Объект.Драйвер, мПараметрыУстройства, мПараметрыПодключения);
Если Не РезультатВыполнения Тогда
Результат = мОшибкаНеизвестно;
Объект.ОписаниеОшибки = мВыходныеПараметры[1];
Иначе
Результат = мНетОшибки;
Объект.Вставить("ВыходныеПараметры", мВыходныеПараметры);
КонецЕсли;
Возврат Результат;
КонецФункции
Получаем примерно такой псевдокод для печати из конфигурации с нашей обновленной обработкой обслуживания:
ПозицииЧека = Новый Массив;
Для Каждого СтрокаДляПечати Из СтрокиКПечати Цикл
// Формируем строку для печати в нужной структуре
СтрокаЧека = МенеджерОборудованияКлиентСервер.ПараметрыТекстовойСтрокиЧека(СтрокаДляПечати);
СтрокаЧека.Выравнивание = "Лево"; // Выравнивание на ленте, возможные значения: "Лево", "Право", "Центр"
ПозицииЧека.Добавить(СтрокаЧека);
КонецЦикла;
ДанныеДляПечати = Новый Массив;
ДанныеДляПечати.Добавить(ПозицииЧека);
// вызываем нашу добавленную функцию в обработку обслуживания
ОбработкаОбслуживания.НапечататьТекстовыйДокумент(ОбъектДрайвера, ДанныеДляПечати, ?(КассаККМ.ШиринаЛенты = 0, 32, КассаККМ.ШиринаЛенты)); // КассаККМ - ссылка на справочник КассыККМ, к которому подключен ККТ, соедржащий реквизит для ручного задания ширины ленты.
Тестировалось на Управление торговлей 10.3.47.3. Учитывая, что общие модули - часть БПО, то такой же механизм подойдет для печати и на УТ 11 в части всевдокода и общих модулей. ККТ использовался Штрих-LIGHT-01Ф.
Во вложение доработанная обработка обслуживания для Штрих-м (Атол по аналогии можно сделать) и внешняя печатная форма к документу Заказ покупателя, которая печатает заказ на ККТ.