Обновлено: 12.02.2009
Для упрощения взаимодействия с торговым оборудованием в конфигурациях, которые поддерживают работу с торговым оборудованием ("Управление торговлей", "Управление производственным предприятием", "Розница", "Бухгалтерия предприятия" и "Бухгалтерия для бюджетных учреждений"), реализован механизм взаимодействия с торговым оборудованием (дополнительно можно ознакомиться с демонстрационной конфигурацией "Тестирование подключения торгового оборудования", реализующей механизм взаимодействия С ТО). Для встраивания поддержки торгового оборудования в объекты конфигурации необходимо обеспечить вызов и реализацию описанных ниже методов механизма ТО. По способу оповещения оборудование условно можно разделить на 2 категории: оборудование без оповещения о событиях и с оповещением (событийные).
В группу оборудования без оповещения о событиях от устройства входят фискальные регистраторы, терминалы сбора данных, дисплеи покупателя, электронные весы, весы с печатью этикеток, ККМ Оффлайн и эквайринговые системы. Для их поддержки достаточно воспользоваться общими методами, обязательными для всех объектов, а затем можно вызывать функции, специфичные для реализуемого вида ТО.
В группу оборудования с оповещением о событиях от устройства (событийное оборудование) входят сканеры штрихкодов, считыватели магнитных карт, ККМ Онлайн и считыватели RFID меток. Для их поддержки необходимо воспользоваться общими методами, а также реализовать дополнительные событийные методы, специфичные для каждого вида ТО. Некоторые виды оборудования из данной группы позволяют не только получать оповещение о событиях, но посылать управляющие команды. Для этого механизм предоставляет дополнительные методы, специфичные для каждого вида ТО.
Для использования торгового оборудования в объектах конфигурации необходимо вызвать следующие функции (обычно при открытии и закрытии формы):
ПодключитьКлиента() – подключает все настроенное торговое оборудование в соответствии с видами ТО, поддерживаемыми данным документом (список поддерживаемых видов ТО указывается в функции "ПоддерживаетсяВидТО").
ОтключитьКлиента() – отключает подключенное ранее оборудование.
Внимание!
Если работа клиента досрочно завершается, то в обязательном порядке должна быть вызвана функция "ОтключитьКлиента"
Также необходимо реализовать функцию:
ПоддерживаетсяВидТО() – проверяет поддержку данной формой переданного вида ТО
Пример кода:
Копировать в буфер обменаПроцедура ПриОткрытии() ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма); КонецПроцедурыПроцедура ПриЗакрытии() ПолучитьСерверТО().ОтключитьКлиента(ЭтаФорма); КонецПроцедурыФункция ПоддерживаетсяВидТО(Вид) Экспорт Результат = Ложь; Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода Или Вид = Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор Тогда Результат = Истина; КонецЕсли; Возврат Результат; КонецФункции
В разделе описаны событийные методы для каждого вида ТО, поддерживающего оповещение о событиях от устройства.
ВнешнееСобытие() – вызывается при наступлении внешнего события в системе.
Пример кода:
Копировать в буфер обменаПроцедура ВнешнееСобытие(Источник, Событие, Данные) Если Не ВводДоступен() Тогда Возврат; КонецЕсли; ПолучитьСерверТО().ОбработатьВнешнееСобытие(Событие, Данные, ЭтаФорма); КонецПроцедуры
Для использования сканера штрихкода в документах необходимо дополнительно реализовать следующие функции:
СШКНоменклатура() – возникает, если обнаруженный ШК принадлежит номенклатуре.
СШКСерийныйНомер() – возникает, если обнаруженный ШК принадлежит серийному номеру.
СШКИнформационнаяКарта() – возникает, если обнаруженный ШК принадлежит информационной карте.
СШКНеизвестныйКод() – возникает, если обнаруженный ШК не зарегистрирован в базе.
СШКОшибка() – возникает, если при обработке ШК возникла ошибка.
Все перечисленные функции обязательны к реализации для данного вида ТО.
Пример кода:
Копировать в буфер обменаФункция СШКНоменклатура(Номенклатура, Характеристика, Серия, Качество, Единица, Количество, СШК) Экспорт Результат = Истина; Возврат Результат; КонецФункцииФункция СШКСерийныйНомер(Номер, СШК) Экспорт Результат = Истина; Возврат Результат; КонецФункцииФункция СШКИнформационнаяКарта(Карта, СШК) Экспорт Предупреждение("Подбор информационных карт в данной форме не предусмотрен!"); Возврат Истина; КонецФункцииФункция СШКНеизвестныйКод(Штрихкод, ТипКода, СШК) Экспорт Возврат Ложь; КонецФункцииПроцедура СШКОшибка(Ошибка, Штрихкод, ТипШК, СШК) Экспорт Текст = ПолучитьСерверТО().ПолучитьТекстОшибкиСШКТО(Ошибка, Штрихкод, ТипШК); Предупреждение(Текст); КонецПроцедуры
Событийные функции должны содержать тот же набор аргументов, что приведен в примере.
Для использования считывателя магнитных карт в документах необходимо дополнительно реализовать следующие функции:
СМКИнформационнаяКарта() – возникает, если обнаруженный код принадлежит информационной карте.
СМКНеизвестныйКод() – возникает, если обнаруженный код не зарегистрирован в базе.
СМКОшибка() – возникает, если при обработке кода возникла ошибка.
Все перечисленные функции обязательны к реализации для данного вида ТО.
Пример кода:
Копировать в буфер обменаФункция СМКИнформационнаяКарта(Карта, СМК) Экспорт Результат = Истина; Возврат Результат; КонецФункцииФункция СМКНеизвестныйКод(Код, СМК) Экспорт Результат = Ложь; Возврат Результат; КонецФункцииПроцедура СМКОшибка(Ошибка, КодКарты, СМК) Экспорт Текст = ПолучитьСерверТО().ПолучитьТекстОшибкиСМКТО(Ошибка, КодКарты); Предупреждение(Текст); КонецПроцедуры
Особенность работы устройств вида ККМ Онлайн состоит в том, что в любой момент (без дополнительного вмешательства пользователя) должен существовать клиент, который обработает событие от ККМ. Т.е. ККМ Онлайн обычно подключается при старте приложения и в качестве клиента указывается специализированная обработка (входит в состав конфигурации), которая реализует описанные ниже методы и выполняет операции с БД.
Для использования считывателя магнитных карт в документах необходимо дополнительно реализовать следующие функции:
ОбработатьЗапросККМ() – возникает, если на ККМ вводят штрихкод товара.
ЗакрытиеЧекаККМ() – возникает, если на ККМ завершают чек.
Все перечисленные функции обязательны к реализации для данного вида ТО.
Пример кода:
Копировать в буфер обменаФункция ОбработатьЗапросККМ(Номенклатура, Характеристика, Серия, Качество, Единица, Количество, Цена, Скидка, НомерСекции, ККМ) Экспорт Результат = Истина; Если Не ЗначениеЗаполнено(мСклад) Тогда Сигнал(); Сообщение = "Не задан склад по умолчанию."; Результат = Ложь; ИначеЕсли Не ЗначениеЗаполнено(мТипЦен) Тогда Сигнал(); Сообщение = "Не задан тип цен."; Результат = Ложь; Иначе Цена = Ценообразование.ПолучитьЦенуНоменклатуры(Номенклатура, Характеристика, мТипЦен, Неопределено, Единица); Скидка = Ценообразование.ПолучитьПроцентСкидкиНаценкиЦеныНоменклатуры(Номенклатура, Характеристика, мТипЦен); НомерСекции = мНомерСекции; КонецЕсли; Возврат Результат; КонецФункцииПроцедура ЗакрытиеЧекаККМ(Товары, ПризнакВозврата, СуммаНал, СуммаБезнал, НомерЧека, НомерСмены, ККМ) Экспорт ДокЧек = Документы.ЧекККМ.СоздатьДокумент(); ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ДокЧек, глЗначениеПеременной("глТекущийПользователь"), мВалютаРеглУчета, "Продажа"); ДокЧек.Дата = РабочаяДата; ДокЧек.ВидОперации = ?(ПризнакВозврата, мВозврат, мПродажа); ДокЧек.КассаККМ = ПолучитьСерверТО().ПолучитьКассуККМ(ККМ); ДокЧек.НомерСменыККМ = НомерСмены; ДокЧек.НомерЧекаККМ = НомерЧека; ДокЧек.ЧекПробитНаККМ = Истина; Товар = Неопределено; Для Каждого Товар Из Товары Цикл Сумма = Товар.Цена * Товар.Количество; ПроцентСкидкиНаценки = ?(Сумма = 0, 0, 100 * (1 - Товар.Сумма / Сумма)); СтрокаТЧ = ДокЧек.Товары.Добавить(); СтрокаТЧ.Артикул = Товар.Номенклатура.Артикул; СтрокаТЧ.ЕдиницаИзмерения = Товар.ЕдиницаИзмерения; СтрокаТЧ.Количество = Товар.Количество; СтрокаТЧ.Коэффициент = Товар.ЕдиницаИзмерения.Коэффициент; СтрокаТЧ.Номенклатура = Товар.Номенклатура; СтрокаТЧ.ПроцентСкидкиНаценки = ПроцентСкидкиНаценки; СтрокаТЧ.СерияНоменклатуры = Товар.СерияНоменклатуры; СтрокаТЧ.Сумма = Товар.Сумма; СтрокаТЧ.ХарактеристикаНоменклатуры = Товар.ХарактеристикаНоменклатуры; СтрокаТЧ.Цена = Товар.Цена; ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТЧ, ДокЧек); КонецЦикла; Если СуммаНал <> 0 Тогда СтрокаТЧ = ДокЧек.Оплата.Добавить(); СтрокаТЧ.ВидОплаты = мНаличные; СтрокаТЧ.Сумма = СуммаНал; КонецЕсли; Если СуммаБезнал <> 0 Тогда СтрокаТЧ = ДокЧек.Оплата.Добавить(); СтрокаТЧ.Сумма = СуммаНал; КонецЕсли; Попытка ДокЧек.Записать(РежимЗаписиДокумента.Запись); Сообщить(СокрЛП(РабочаяДата) + ": Был создан чек """ + СокрЛП(ДокЧек) + """.", СтатусСообщения.Информация); Исключение Сообщить(СокрЛП(ТекущаяДата()) + ": Был создан, но не был записан чек """ + СокрЛП(ДокЧек) + """."); ДокЧек.ПолучитьФорму().Открыть(); КонецПопытки; КонецПроцедуры
Для использования считывателя магнитных карт в документах необходимо дополнительно реализовать следующие функции:
RFIDЧтениеМеток() – возникает, если устройство присылает список обнаруженных меток.
RFIDМеткаВПоле() – возникает, если в поле считывателя возникла метка.
RFIDНетМетокВПоле() – возникает, если из поля считывателя исчезли все метки.
RFIDОшибкаВДрайвере() – возникает, если в процессе работы драйвера возникла ошибка.
Все перечисленные функции обязательны к реализации для данного вида ТО.
Пример кода:
Копировать в буфер обменаФункция RFIDЧтениеМеток(ДанныеИзМеток) Экспорт Для Каждого СтрокаДанных Из ДанныеИзМеток Цикл ПолучитьСерверТО().ОбработатьВведенныйШтрихкод(СтрокаДанных.ШК, ЭтаФорма); КонецЦикла; Возврат Истина; КонецФункцииФункция RFIDМеткаВПоле(Событие, Данные) Экспорт Возврат Истина; КонецФункцииФункция RFIDНетМетокВПоле(Событие, Данные) Экспорт Возврат Истина; КонецФункцииФункция RFIDОшибкаВДрайвере(Событие, Данные) Экспорт Возврат Истина; КонецФункции
В данном разделе приведены методы управления устройством, специфичные для каждого вида оборудования, с описанием функциональности.
ПечатьЧекаПКО() - функция осуществляет печать чека для приходного кассового ордера.
ПечатьЧекаРКО() - функция осуществляет печать чека для расходного кассового ордера.
ПечатьЧека() - функция осуществляет печать чека.
ПолучитьПараметрыНаличнойОплаты() - функция осуществляет получение параметров наличной оплаты.
ВнестиСумму() - функция осуществляет внесение суммы в ФР.
ОтчетБезГашения() - функция осуществляет снятие отчёта без гашения.
ОтчетСГашением() - функция осуществляет снятие отчёта с гашением.
ПечатьТекста() - функция осуществляет печать массива произвольных строк.
ПоддерживаетсяСмешанныйРежимПечати() - функция проверяет возможность печати нефискальных строк в фискальном чеке.
ВыгрузитьТаблицуТСД() - функция осуществляет выгрузку таблицы в терминал сбора данных.
ЗагрузитьТаблицуТСД() - функция осуществляет загрузку таблицы из терминала сбора данных.
ВывестиСтрокуНаДисплейПокупателя() - функция осуществляет вывод строки на дисплей покупателя.
ВывестиСтрокиНаДисплейПокупателя() - функция осуществляет вывод строк на дисплей покупателя.
ОчиститьДисплейПокупателя() - Функция очищает дисплей покупателя.
ТарированиеЭВ() - функция задаёт вес тары на электронных весах.
ПолучитьВесЭВ() - функция осуществляет получение веса от электронных весов.
ВыгрузитьТоварыВесы() - функция выгружает таблицу товаров в весы с печатью этикеток.
ОчиститьТоварыВВесах() - функция очищает таблицу товаров в весах с печатью этикеток.
ПолучитьПараметрыВыгрузкиOffline() - функция осуществляет получение параметров выгрузки данных в ККМ Оффлайн.
ВыгрузитьТоварыККМ() - функция осуществляет выгрузку таблицы товаров в ККМ Оффлайн.
ЗагрузитьОтчетОПродажах() - функция осуществляет загрузку отчета о продажах из ККМ Оффлайн.
ЗавершитьЗагрузкуОтчетаОПродажах() - функция извещает ККМ Оффлайн об окончании загрузки отчёта.
ПолучитьПЛУПоШтрихкоду() - функция возвращает ПЛУ товара по штрихкоду для заданного объекта драйвера ККМ Оффлайн.
ОплатитьПлатежнойКартой() - функция выполняет оплату банковской картой.
ОтменитьПлатежПоПлатежнойКарте() - функция выполняет отмену ранее осуществленного платежа по банковской карте.
ВернутьПлатежПоПлатежнойКарте() - функция выполняет операцию возврата платежа на банковскую карту.
ИтогиДняПоКартам() - функция выполняет сверку итогов по банковским картам с банком
ПоддерживаетсяСверкаИтогов() - функция проверяет возможность выполнения операции "Сверка итогов"
ПреавторизацияПоПлатежнойКарте() - функция выполняет преавторизацию банковской картой.
ЗавершитьПреавторизацииПоПлатежнойКарте() - функция выполняет завершение преавторизации банковской картой.
ОтменитьПреавторизациюПоПлатежнойКарте() - функция выполняет отмену преавторизации банковской картой.
ПолучитьКоличествоМетокRFID() - функция производит обнаружение меток в поле считывателя и возвращает в параметре количество обнаруженных меток.
ПрочитатьДанныеИзМетокRFID() - функция считывает все данные из обнаруженных меток и возвращает в параметре структуру, содержащую идентификаторы меток и данные.
ЗаписатьДанныеВМеткиRFID() - функция записывает переданные данные в метки, находящиеся в поле считывателя.
УстановитьРежимДрайвераRFID() - функция устанавливает режим работы драйвера (активный/пассивный).
ОткрытьСессиюRFID() - функция открывает новую сессию для чтения данных из меток, попадающих в поле считывателя.
ЗакрытьСессиюRFID() - функция закрывает открытую ранее сессию.