Внедрение торгового оборудования в объекты конфигурации для платформы "1С:Предприятие 8.1".

Обновлено: 12.02.2009

Для упрощения взаимодействия с торговым оборудованием в конфигурациях, которые поддерживают работу с торговым оборудованием ("Управление торговлей", "Управление производственным предприятием", "Розница", "Бухгалтерия предприятия" и "Бухгалтерия для бюджетных учреждений"), реализован механизм взаимодействия с торговым оборудованием (дополнительно можно ознакомиться с демонстрационной конфигурацией "Тестирование подключения торгового оборудования", реализующей механизм взаимодействия С ТО). Для встраивания поддержки торгового оборудования в объекты конфигурации необходимо обеспечить вызов и реализацию описанных ниже методов механизма ТО. По способу оповещения оборудование условно можно разделить на 2 категории: оборудование без оповещения о событиях и с оповещением (событийные).

В группу оборудования без оповещения о событиях от устройства входят фискальные регистраторы, терминалы сбора данных, дисплеи покупателя, электронные весы, весы с печатью этикеток, ККМ Оффлайн и эквайринговые системы. Для их поддержки достаточно воспользоваться общими методами, обязательными для всех объектов, а затем можно вызывать функции, специфичные для реализуемого вида ТО.

В группу оборудования с оповещением о событиях от устройства (событийное оборудование) входят сканеры штрихкодов, считыватели магнитных карт, ККМ Онлайн и считыватели RFID меток. Для их поддержки необходимо воспользоваться общими методами, а также реализовать дополнительные событийные методы, специфичные для каждого вида ТО. Некоторые виды оборудования из данной группы позволяют не только получать оповещение о событиях, но посылать управляющие команды. Для этого механизм предоставляет дополнительные методы, специфичные для каждого вида ТО.

1. Общие методы, обязательные для всех объектов

Для использования торгового оборудования в объектах конфигурации необходимо вызвать следующие функции (обычно при открытии и закрытии формы):

ПодключитьКлиента() – подключает все настроенное торговое оборудование в соответствии с видами ТО, поддерживаемыми данным документом (список поддерживаемых видов ТО указывается в функции "ПоддерживаетсяВидТО").

ОтключитьКлиента() – отключает подключенное ранее оборудование.

Внимание!
Если работа клиента досрочно завершается, то в обязательном порядке должна быть вызвана функция "ОтключитьКлиента"

Также необходимо реализовать функцию:

ПоддерживаетсяВидТО() – проверяет поддержку данной формой переданного вида ТО

Пример кода:

Копировать в буфер обмена
Процедура ПриОткрытии()
	ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
КонецПроцедурыПроцедура ПриЗакрытии()
	ПолучитьСерверТО().ОтключитьКлиента(ЭтаФорма);
КонецПроцедурыФункция ПоддерживаетсяВидТО(Вид) Экспорт
	Результат = Ложь;
	Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода
	 Или Вид = Перечисления.ВидыТорговогоОборудования.ФискальныйРегистратор Тогда
		Результат = Истина;
	КонецЕсли;
	
	Возврат Результат; 
КонецФункции

2. Событийные методы

В разделе описаны событийные методы для каждого вида ТО, поддерживающего оповещение о событиях от устройства.

2.1. Общий метод получения оповещения о событии.

ВнешнееСобытие() – вызывается при наступлении внешнего события в системе.

Пример кода:

Копировать в буфер обмена
Процедура ВнешнееСобытие(Источник, Событие, Данные)
	Если Не ВводДоступен() Тогда
		Возврат; 
	КонецЕсли; 

	ПолучитьСерверТО().ОбработатьВнешнееСобытие(Событие, Данные, ЭтаФорма); 
КонецПроцедуры

2.2. Сканер штрихкода

Для использования сканера штрихкода в документах необходимо дополнительно реализовать следующие функции:

СШКНоменклатура() – возникает, если обнаруженный ШК принадлежит номенклатуре.

СШКСерийныйНомер() – возникает, если обнаруженный ШК принадлежит серийному номеру.

СШКИнформационнаяКарта() – возникает, если обнаруженный ШК принадлежит информационной карте.

СШКНеизвестныйКод() – возникает, если обнаруженный ШК не зарегистрирован в базе.

СШКОшибка() – возникает, если при обработке ШК возникла ошибка.

Все перечисленные функции обязательны к реализации для данного вида ТО.

Пример кода:

Копировать в буфер обмена
Функция СШКНоменклатура(Номенклатура, Характеристика, Серия, Качество, Единица, Количество, СШК) Экспорт
	Результат = Истина;
	Возврат Результат; 
КонецФункцииФункция СШКСерийныйНомер(Номер, СШК) Экспорт
	Результат = Истина;
	Возврат Результат;
КонецФункцииФункция СШКИнформационнаяКарта(Карта, СШК) Экспорт
	Предупреждение("Подбор информационных карт в данной форме не предусмотрен!");
	Возврат Истина;
КонецФункцииФункция СШКНеизвестныйКод(Штрихкод, ТипКода, СШК) Экспорт
	Возврат Ложь;
КонецФункцииПроцедура СШКОшибка(Ошибка, Штрихкод, ТипШК, СШК) Экспорт
	Текст = ПолучитьСерверТО().ПолучитьТекстОшибкиСШКТО(Ошибка, Штрихкод, ТипШК);
	Предупреждение(Текст); 
КонецПроцедуры

Событийные функции должны содержать тот же набор аргументов, что приведен в примере.

2.3. Считыватель магнитных карт

Для использования считывателя магнитных карт в документах необходимо дополнительно реализовать следующие функции:

СМКИнформационнаяКарта() – возникает, если обнаруженный код принадлежит информационной карте.

СМКНеизвестныйКод() – возникает, если обнаруженный код не зарегистрирован в базе.

СМКОшибка() – возникает, если при обработке кода возникла ошибка.

Все перечисленные функции обязательны к реализации для данного вида ТО.

Пример кода:

Копировать в буфер обмена
Функция СМКИнформационнаяКарта(Карта, СМК) Экспорт
	Результат = Истина;
	Возврат Результат;
КонецФункцииФункция СМКНеизвестныйКод(Код, СМК) Экспорт
	Результат = Ложь;
	Возврат Результат;
КонецФункцииПроцедура СМКОшибка(Ошибка, КодКарты, СМК) Экспорт
	Текст = ПолучитьСерверТО().ПолучитьТекстОшибкиСМКТО(Ошибка, КодКарты);
	Предупреждение(Текст); 
КонецПроцедуры

2.4. ККМ Онлайн

Особенность работы устройств вида ККМ Онлайн состоит в том, что в любой момент (без дополнительного вмешательства пользователя) должен существовать клиент, который обработает событие от ККМ. Т.е. ККМ Онлайн обычно подключается при старте приложения и в качестве клиента указывается специализированная обработка (входит в состав конфигурации), которая реализует описанные ниже методы и выполняет операции с БД.

Для использования считывателя магнитных карт в документах необходимо дополнительно реализовать следующие функции:

ОбработатьЗапросККМ() – возникает, если на ККМ вводят штрихкод товара.

ЗакрытиеЧекаККМ() – возникает, если на ККМ завершают чек.

Все перечисленные функции обязательны к реализации для данного вида ТО.

Пример кода:

Копировать в буфер обмена
Функция ОбработатьЗапросККМ(Номенклатура, Характеристика, Серия, Качество,
                            Единица, Количество, Цена, Скидка, НомерСекции, ККМ) Экспорт

	Результат = Истина;

	Если Не ЗначениеЗаполнено(мСклад) Тогда
		Сигнал();
		Сообщение = "Не задан склад по умолчанию.";
		Результат = Ложь;
	ИначеЕсли Не ЗначениеЗаполнено(мТипЦен) Тогда
		Сигнал();
		Сообщение = "Не задан тип цен.";
		Результат = Ложь;
	Иначе
		Цена        = Ценообразование.ПолучитьЦенуНоменклатуры(Номенклатура, Характеристика, мТипЦен, Неопределено, Единица);
		Скидка      = Ценообразование.ПолучитьПроцентСкидкиНаценкиЦеныНоменклатуры(Номенклатура, Характеристика, мТипЦен);
		НомерСекции = мНомерСекции;
	КонецЕсли;

	Возврат Результат;

КонецФункцииПроцедура ЗакрытиеЧекаККМ(Товары, ПризнакВозврата, СуммаНал, СуммаБезнал, НомерЧека, НомерСмены, ККМ) Экспорт

	ДокЧек = Документы.ЧекККМ.СоздатьДокумент();
	ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ДокЧек, глЗначениеПеременной("глТекущийПользователь"), мВалютаРеглУчета, "Продажа");

	ДокЧек.Дата           = РабочаяДата;
	ДокЧек.ВидОперации    = ?(ПризнакВозврата, мВозврат, мПродажа);
	ДокЧек.КассаККМ       = ПолучитьСерверТО().ПолучитьКассуККМ(ККМ);
	ДокЧек.НомерСменыККМ  = НомерСмены;
	ДокЧек.НомерЧекаККМ   = НомерЧека;
	ДокЧек.ЧекПробитНаККМ = Истина;

	Товар = Неопределено;
	Для Каждого Товар Из Товары Цикл
		Сумма                               = Товар.Цена * Товар.Количество;
		ПроцентСкидкиНаценки                = ?(Сумма = 0, 0, 100 * (1 - Товар.Сумма / Сумма));
		СтрокаТЧ                            = ДокЧек.Товары.Добавить();
		СтрокаТЧ.Артикул                    = Товар.Номенклатура.Артикул;
		СтрокаТЧ.ЕдиницаИзмерения           = Товар.ЕдиницаИзмерения;
		СтрокаТЧ.Количество                 = Товар.Количество;
		СтрокаТЧ.Коэффициент                = Товар.ЕдиницаИзмерения.Коэффициент;
		СтрокаТЧ.Номенклатура               = Товар.Номенклатура;
		СтрокаТЧ.ПроцентСкидкиНаценки       = ПроцентСкидкиНаценки;
		СтрокаТЧ.СерияНоменклатуры          = Товар.СерияНоменклатуры;
		СтрокаТЧ.Сумма                      = Товар.Сумма;
		СтрокаТЧ.ХарактеристикаНоменклатуры = Товар.ХарактеристикаНоменклатуры;
		СтрокаТЧ.Цена                       = Товар.Цена;
		ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТЧ, ДокЧек);
	КонецЦикла;

	Если СуммаНал <> 0 Тогда
		СтрокаТЧ           = ДокЧек.Оплата.Добавить();
		СтрокаТЧ.ВидОплаты = мНаличные;
		СтрокаТЧ.Сумма     = СуммаНал;
	КонецЕсли;

	Если СуммаБезнал <> 0 Тогда
		СтрокаТЧ           = ДокЧек.Оплата.Добавить();
		СтрокаТЧ.Сумма     = СуммаНал;
	КонецЕсли;

	Попытка
		ДокЧек.Записать(РежимЗаписиДокумента.Запись);
		Сообщить(СокрЛП(РабочаяДата) + ": Был создан чек """ + СокрЛП(ДокЧек) + """.",
		         СтатусСообщения.Информация);
	Исключение
		Сообщить(СокрЛП(ТекущаяДата()) + ": Был создан, но не был записан чек """ + СокрЛП(ДокЧек) + """.");
		ДокЧек.ПолучитьФорму().Открыть();
	КонецПопытки;

КонецПроцедуры

2.5 Считыватель RFID меток

Для использования считывателя магнитных карт в документах необходимо дополнительно реализовать следующие функции:

RFIDЧтениеМеток() – возникает, если устройство присылает список обнаруженных меток.

RFIDМеткаВПоле() – возникает, если в поле считывателя возникла метка.

RFIDНетМетокВПоле() – возникает, если из поля считывателя исчезли все метки.

RFIDОшибкаВДрайвере() – возникает, если в процессе работы драйвера возникла ошибка.

Все перечисленные функции обязательны к реализации для данного вида ТО.

Пример кода:

Копировать в буфер обмена
Функция RFIDЧтениеМеток(ДанныеИзМеток) Экспорт
	Для Каждого СтрокаДанных Из ДанныеИзМеток Цикл
		ПолучитьСерверТО().ОбработатьВведенныйШтрихкод(СтрокаДанных.ШК, ЭтаФорма);
	КонецЦикла;

	Возврат Истина;
КонецФункцииФункция RFIDМеткаВПоле(Событие, Данные) Экспорт
	Возврат Истина;
КонецФункцииФункция RFIDНетМетокВПоле(Событие, Данные) Экспорт
	Возврат Истина;
КонецФункцииФункция RFIDОшибкаВДрайвере(Событие, Данные) Экспорт
	Возврат Истина;
КонецФункции

3. Специфичные методы управления оборудованием

В данном разделе приведены методы управления устройством, специфичные для каждого вида оборудования, с описанием функциональности.

3.1. Фискальный регистратор

ПечатьЧекаПКО() - функция осуществляет печать чека для приходного кассового ордера.

ПечатьЧекаРКО() - функция осуществляет печать чека для расходного кассового ордера.

ПечатьЧека() - функция осуществляет печать чека.

ПолучитьПараметрыНаличнойОплаты() - функция осуществляет получение параметров наличной оплаты.

ВнестиСумму() - функция осуществляет внесение суммы в ФР.

ОтчетБезГашения() - функция осуществляет снятие отчёта без гашения.

ОтчетСГашением() - функция осуществляет снятие отчёта с гашением.

ПечатьТекста() - функция осуществляет печать массива произвольных строк.

ПоддерживаетсяСмешанныйРежимПечати() - функция проверяет возможность печати нефискальных строк в фискальном чеке.

3.2. Терминал сбора данных

ВыгрузитьТаблицуТСД() - функция осуществляет выгрузку таблицы в терминал сбора данных.

ЗагрузитьТаблицуТСД() - функция осуществляет загрузку таблицы из терминала сбора данных.

3.3. Дисплей покупателя

ВывестиСтрокуНаДисплейПокупателя() - функция осуществляет вывод строки на дисплей покупателя.

ВывестиСтрокиНаДисплейПокупателя() - функция осуществляет вывод строк на дисплей покупателя.

ОчиститьДисплейПокупателя() - Функция очищает дисплей покупателя.

3.4. Электронные весы

ТарированиеЭВ() - функция задаёт вес тары на электронных весах.

ПолучитьВесЭВ() - функция осуществляет получение веса от электронных весов.

3.5. Весы с печатью этикеток

ВыгрузитьТоварыВесы() - функция выгружает таблицу товаров в весы с печатью этикеток.

ОчиститьТоварыВВесах() - функция очищает таблицу товаров в весах с печатью этикеток.

3.6. ККМ Оффлайн

ПолучитьПараметрыВыгрузкиOffline() - функция осуществляет получение параметров выгрузки данных в ККМ Оффлайн.

ВыгрузитьТоварыККМ() - функция осуществляет выгрузку таблицы товаров в ККМ Оффлайн.

ЗагрузитьОтчетОПродажах() - функция осуществляет загрузку отчета о продажах из ККМ Оффлайн.

ЗавершитьЗагрузкуОтчетаОПродажах() - функция извещает ККМ Оффлайн об окончании загрузки отчёта.

ПолучитьПЛУПоШтрихкоду() - функция возвращает ПЛУ товара по штрихкоду для заданного объекта драйвера ККМ Оффлайн.

3.7. Эквайринговая система

ОплатитьПлатежнойКартой() - функция выполняет оплату банковской картой.

ОтменитьПлатежПоПлатежнойКарте() - функция выполняет отмену ранее осуществленного платежа по банковской карте.

ВернутьПлатежПоПлатежнойКарте() - функция выполняет операцию возврата платежа на банковскую карту.

ИтогиДняПоКартам() - функция выполняет сверку итогов по банковским картам с банком

ПоддерживаетсяСверкаИтогов() - функция проверяет возможность выполнения операции "Сверка итогов"

ПреавторизацияПоПлатежнойКарте() - функция выполняет преавторизацию банковской картой.

ЗавершитьПреавторизацииПоПлатежнойКарте() - функция выполняет завершение преавторизации банковской картой.

ОтменитьПреавторизациюПоПлатежнойКарте() - функция выполняет отмену преавторизации банковской картой.

3.8. Считыватель RFID меток

ПолучитьКоличествоМетокRFID() - функция производит обнаружение меток в поле считывателя и возвращает в параметре количество обнаруженных меток.

ПрочитатьДанныеИзМетокRFID() - функция считывает все данные из обнаруженных меток и возвращает в параметре структуру, содержащую идентификаторы меток и данные.

ЗаписатьДанныеВМеткиRFID() - функция записывает переданные данные в метки, находящиеся в поле считывателя.

УстановитьРежимДрайвераRFID() - функция устанавливает режим работы драйвера (активный/пассивный).

ОткрытьСессиюRFID() - функция открывает новую сессию для чтения данных из меток, попадающих в поле считывателя.

ЗакрытьСессиюRFID() - функция закрывает открытую ранее сессию.