В практике системного администрирования и автоматизации на базе 1С часто возникают ситуации, когда стандартные методы подключения торгового оборудования не подходят из-за ограничений «железа» или специфики работы персонала. Рассмотрим ситуацию, когда на удаленной точке установлен слабый терминал (например, Atol с 2 ГБ оперативной памяти под управлением Windows Embedded), а сканер штрихкодов жестко настроен на работу в режиме эмуляции COM-порта (RS232). Проблема заключается в том, что данные из COM-порта не попадают в текстовые редакторы или формы ввода напрямую, а персонал не обладает квалификацией для переключения режимов работы устройства.
В рамках данной статьи мы проанализируем, как решить задачу сбора штрихкодов для последующей передачи в бухгалтерию (например, для нужд ЕГАИС), минимизируя нагрузку на систему и исключив ошибки пользователей.
Если на терминале все же есть возможность запустить тонкий или толстый клиент 1С, но сканер не настроен в самой конфигурации, мы можем реализовать механизм ручного или полуавтоматического ввода, который будет имитировать работу торгового оборудования. Проанализируем пример кода, который позволяет передать считанный или введенный штрихкод в логику программы так, будто он пришел от драйвера сканера.
Рассмотрим следующий алгоритм: на форме создается кнопка, которая вызывает диалог ввода строки, а затем генерирует внешнее событие. Это полезно, когда нужно «пробросить» данные в существующие процедуры обработки ШК без перенастройки оборудования.
&НаКлиенте
Процедура КомандаВводШК(Команда)
Перем лкШК;
лкШК = "";
// Вызываем стандартное окно ввода строки для получения штрихкода
Если ВвестиСтроку(лкШК, "Введите или отсканируйте штрихкод", 20) Тогда
// Вызываем событие формы, имитируя работу сканера штрихкода
ВнешнееСобытие("СканерШтрихкода", "ПолученШтрихкод", лкШК);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Проверяем, доступна ли форма для ввода данных в текущий момент
Если НЕ ВводДоступен() Тогда
Возврат;
КонецЕсли;
// Стандартная проверка типа события
Если Событие = "ПолученШтрихкод" ИЛИ Событие = "Штрихкод" Тогда
// Здесь размещается логика обработки: поиск в справочнике, добавление в корзину и т.д.
Сообщить("Считан штрихкод: " + Данные);
// ОбработкаШтрихкода(Данные);
КонецЕсли;
КонецПроцедуры
Данный метод позволяет обойти проблему «невидимости» COM-сканера для интерфейса, если мы временно переводим фокус на поле ввода. Однако, если конфигурация 1С вообще не запущена на точке, нам потребуются другие инструменты.
Когда ресурсов системы катастрофически мало (как в случае с 2 ГБ ОЗУ), использование тяжелых драйверов или полноценной 1С для простой фиксации прихода алкоголя нецелесообразно. Выясним, как заставить сканер в режиме COM-порта «писать» в обычный блокнот или текстовый файл. Для этого используются программы-посредники, называемые Keyboard Wedge.
Рассмотрим популярные решения:
Honeywell Serial Assist), позволяющая дублировать данные из COM-порта в клавиатурный буфер.Преимущества этого подхода:
Проанализируем ситуацию, когда мы не хотим устанавливать стороннее ПО. В операционных системах Windows, начиная с седьмой версии, доступен мощный инструмент PowerShell. Мы можем написать скрипт, который будет слушать COM-порт и автоматически записывать все данные в текстовый файл с указанием даты и времени. Это полностью исключит человеческий фактор.
Разберем пример простого скрипта для сбора данных:
$port = New-Object System.IO.Ports.SerialPort COM1, 9600, None, 8, one
$port.Open()
try {
while ($true) {
if ($port.BytesToRead -gt 0) {
$data = $port.ReadLine()
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$timestamp - $data" | Out-File -FilePath "C:\Barcodes\log.txt" -Append
}
Start-Sleep -Milliseconds 100
}
}
finally {
$port.Close()
}
Этот скрипт можно добавить в автозагрузку. Он будет работать «невидимо» для кассира, собирая все считанные марки в файл log.txt. В конце смены этот файл можно отправить в головной офис через любую доступную систему обмена данными (Dropbox, почта, мессенджер).
Важно понимать причину, по которой бухгалтерия требует выполнения этих действий. С развитием систем прослеживаемости (ЕГАИС 3.0 и выше) в РФ введен поштучный учет. Теперь при приемке алкоголя в «Общепит» недостаточно просто подтвердить накладную. Бухгалтеру необходимо сопоставить конкретные акцизные марки (DataMatrix коды), указанные в электронном документе поставщика, с теми, что фактически пришли на точку. Если на точке нет полноценной учетной системы, «слепое» сканирование в текстовый файл — единственный способ передать реальные идентификаторы товара для проверки в головном офисе.
Выясним, какой путь лучше выбрать системному администратору в зависимости от условий:
1С:Библиотека подключаемого оборудования, выбрав правильный драйвер и указав номер COM-порта.VSPE, чтобы раздвоить поток данных для 1С и кассового ПО.COM2KBD в связке с простым текстовым документом.Таким образом, даже при наличии «древнего» оборудования и специфических настроек сканера, задача передачи штрихкодов решается программными средствами без необходимости физического вмешательства в настройки устройства или покупки новых комплектующих.