Страница 4 из 4

Прочитать COM порт

Добавлено: 13 Март 2026, 7:55
finsoftrz
Хотя, для еан13 можно проверить по наличию суффикса (перевода строки), количеству символов и контрольному разряду.

Прочитать COM порт

Добавлено: 13 Март 2026, 8:08
Ал
Почитал по первым ссылкам (поиск про сканер в 1С) в интернете, в итоге получилось:
- драйвер подчищает служебные коды перед передачей в 1С, поэтому остаётся чистый штрих код
- учитывается время/скорость ввода символов - сканер передаёт быстро "пакетом", оператор с клавиатуры- медленно
- выбирает стратегию обработки действий оператора, чтобы не мусорить в формах и полях ввода при получении данных с клавиатуры и одновременном сканировании.

(Как правильно обрабатывать суффикс сканера штрихкодов в разных формах 1С без перенастройки оборудования? - https://clck.ru/3SWaik,
Настройка драйвера "1С:Сканеры штрихкода" - https://clck.ru/3SWaVv, ...)

Потом рыться надоело, ну и спросил гадалок от ИИ, собрали такие тексты:
Алиса:
Spoiler
Разберу детально, как 1С определяет ввод со сканера на уровне драйвера и обработки событий — с технической точки зрения.

## На уровне драйвера

Сканер штрих‑кода в режиме **USB‑HID (Keyboard Wedge)** работает так:

1. Драйвер регистрирует устройство как дополнительную клавиатуру.
2. При сканировании штрих‑кода драйвер передаёт последовательность скан‑кодов клавиш в операционную систему — точно так же, как при нажатии клавиш на клавиатуре.
3. В конце последовательности передаётся код клавиши **Enter** (ASCII‑код `$0x0D$` или `$\text{VK\_RETURN}$`).

**Что именно передаётся:**

* **Начало:** может быть префикс (настраивается через штрих‑коды конфигурации сканера) — например, служебный символ `$F12$` или комбинация `$Ctrl+A$`. Если префикс не задан, передача начинается сразу с цифр штрих‑кода.
* **Основная часть:** последовательность символов штрих‑кода — например, `$4601234567890$`.
* **Конец:** суффикс — чаще всего символ **Enter** (`$\text{CR}$`, код `$0x0D$`), иногда **Tab** (`$\text{TAB}$`, код `$0x09$`) или их комбинация.

Настройки префикса/суффикса задаются путём сканирования специальных штрих‑кодов из руководства к сканеру.

---

## Как 1С распознаёт ввод со сканера

1С использует комбинацию признаков для идентификации ввода со сканера. Разберу механизм пошагово.

**Шаг 1. Захват событий клавиатуры**

1С перехватывает события ввода на уровне формы — через обработчики событий полей ввода:

* `$ПриНажатииКлавиши$` (`$OnKeyPress$`);
* `$ИзменениеТекста$` (`$OnTextChanged$`).

**Шаг 2. Анализ временных интервалов**

Ключевой признак — скорость ввода. 1С замеряет время между получением символов:

* **Ручной ввод:** интервалы между символами — от $50$ до $500$ мс и более (зависит от скорости печати пользователя).
* **Сканирование:** все символы поступают почти одновременно — интервал между ними $< 10$ мс.

Пример:
* Ручной ввод `$4601234567890$`: $100 мс → 150 мс → 80 мс → \ldots$
* Сканирование `$4601234567890$`: $2 мс → 3 мс → 1 мс → \ldots$

**Шаг 3. Поиск маркеров начала и конца**

1С ищет специальные символы, заданные в настройках:

* **Префикс** (начало ввода) — если задан (например, `$F12$`), система «понимает»: начался ввод со сканера.
* **Суффикс** (конец ввода) — обычно **Enter**. Его появление сигнализирует: строка штрих‑кода завершена.

Если префикс не задан, система ориентируется только на суффикс и скорость ввода.

**Шаг 4. Контекстный анализ**

1С проверяет, где находится фокус ввода:

* Если фокус в поле, поддерживающем поиск по штрих‑коду (справочник товаров, документов и т. д.), система активирует алгоритм поиска по штрих‑коду.
* Если в обычном текстовом поле — ввод воспринимается как ручной (но **Enter** всё равно сработает как подтверждение).

**Шаг 5. Обработка данных**

Когда 1С фиксирует шаблон «быстрый ввод + суффикс»:

1. Захватывает всю строку, полученную между началом ввода и суффиксом (**Enter**).
2. Игнорирует текущее содержимое поля ввода — это предотвращает «склеивание» данных.
3. Выполняет поиск по штрих‑коду в базе данных:
* ищет товар с указанным штрих‑кодом;
* если найден — подставляет данные (наименование, цену, остаток и т. п.);
* если не найден — выдаёт ошибку или открывает форму выбора.
4. Очищает временное хранилище данных или перемещает фокус на следующий элемент формы.

---

## Почему не «портится» уже введённый текст?

1С не добавляет штрих‑код к уже введённому тексту, потому что:

1. **Игнорирует текущее содержимое поля.** При срабатывании алгоритма сканирования система берёт *только* данные, полученные от сканера (между началом ввода и **Enter**), а не всё содержимое поля.
2. **Использует временное хранилище.** Данные от сканера временно сохраняются в буфере, отдельном от содержимого поля ввода.
3. **Выполняет поиск, а не вставку.** Цель — найти товар по штрих‑коду, а не отредактировать текст в поле. Поэтому старый текст просто заменяется результатами поиска.
4. **Прерывает текущий ввод.** Как только система фиксирует начало сканирования (префикс или быстрый ввод), она «отменяет» текущий контекст редактирования поля.

---

## Сводная таблица: как 1С различает ввод

| Параметр | Ручной ввод | Ввод со сканера |
|--------|-----------|---------------|
| Скорость ввода | Медленная ($50–500$ мс между символами) | Очень быстрая ($< 10$ мс между символами) |
| Префикс | Отсутствует | Может быть (например, `$F12$`) |
| Суффикс | Enter (по желанию пользователя) | Всегда Enter (или другой суффикс) |
| Интервал между символами | Неравномерный | Практически одинаковый |
| Реакция 1С | Ввод текста в поле | Поиск по штрих‑коду |
| Содержимое поля после ввода | Сохраняется и дополняется | Заменяется результатами поиска |

---

## Как проверить и настроить

1. **Проверьте настройки сканера:**
* просканируйте настроечный штрих‑код для установки суффикса **Enter**;
* убедитесь, что префикс либо задан, либо отключён.
2. **В 1С:**
* перейдите в «Администрирование» → «Подключаемое оборудование»;
* проверьте, что сканер штрих‑кодов добавлен и активен;
* убедитесь, что для сканера указаны правильные префикс/суффикс (если используются).
3. **Тестирование:**
* откройте справочник товаров;
* введите часть наименования в поле поиска;
* отсканируйте штрих‑код — 1С должна найти товар и заменить содержимое поля (или открыть карточку товара).
DeepSeek:
Spoiler
Отличный вопрос! Вы очень точно описали самую частую ситуацию, с которой сталкиваются пользователи 1С при работе со сканером штрихкода. Давайте разберем, что происходит "под капотом".

Ключ к пониманию ситуации — в том, как именно сканер подключен к компьютеру и как 1С научили с ним работать. Есть два принципиально разных режима.

1. Режим "Клавиатурный разрыв" (USB-KB)

В этом режиме сканер не имеет своего "умного" драйвера. Для операционной системы он выглядит точно так же, как обычная клавиатура . Когда вы сканируете штрихкод, сканер молниеносно "печатает" его цифры в то место, где в данный момент находится курсор, а затем, как правило, "нажимает" клавишу Enter (перевод строки).

В этом режиме 1С никак не может отличить ввод со сканера от ввода с клавиатуры. Для программы это просто набор символов, заканчивающийся нажатием Enter.

Почему тогда не работает, как вы описали? Именно из-за этого финального Enter. Представьте: вы уже что-то ввели в поле поиска и сканируете штрихкод. Сканер допишет цифры штрихкода к вашему тексту и сразу "нажмет" Enter. 1С воспримет это как команду начать поиск по тому, что получилось в поле (Ваш текст + Цифры ШК), а не как отдельный штрихкод. Данные смешаются.

2. Режим "Внешнего события" (COM-порт / USB-COM)

Это правильный и профессиональный способ работы. Сканер настраивается (часто считыванием специальных штрихкодов из инструкции) на работу в режиме эмуляции COM-порта . Даже если у него разъем USB, он начинает работать как устройство, подключенное к виртуальному последовательному порту. Для работы с таким сканером в 1С устанавливается специальный драйвер — внешняя компонента, например, "1С:Сканер штрихкода" (файл ScanOPOS.dll) .

Вот тут и происходит магия, которая вас интересует.

Как 1С отделяет "зерна от плевел" в режиме внешнего события

Драйвер (внешняя компонента) работает как умный фильтр между сканером и программой 1С . Механизм следующий:

1. Перехват потока: Драйвер перехватывает весь поток данных, идущий от сканера в COM-порт .
2. Поиск маркеров (Префикс и Суффикс): Чтобы понять, что пришедшие данные — это именно штрихкод, а не случайный шум, используются специальные служебные символы.
· Префикс — один или несколько символов, которые сканер посылает ПЕРЕД кодом товара.
· Суффикс — символ (или символы), который сканер посылает ПОСЛЕ кода. Чаще всего это как раз и есть тот самый Enter (CR - возврат каретки, код 13), который в клавиатурном режиме все портит .
3. Сборка и проверка: Драйвер получает данные. Как только он видит префикс, он начинает записывать все последующие символы в буфер. Как только приходит суффикс, драйвер понимает: "Стоп! Штрихкод получен полностью" .
4. Генерация события: Драйвер отсекает служебные префикс и суффикс, оставляя только "чистый" код товара. Затем он генерирует для 1С специальное "Внешнее событие" (ВнешнееСобытие(Источник, Событие, Данные)), в котором и передает этот код.
5. Обработка в 1С: В модуле формы или документа программист пишет код в процедуре ОбработкаВнешнегоСобытия, который срабатывает именно на это событие и выполняет нужное действие — ищет товар по коду, добавляет строку в документ и т.д. .

Ответ на ваш вопрос про поле поиска

Теперь становится понятно, почему даже если вы стоите в поле поиска и уже что-то там напечатали, сканирование не "забивает" ваш текст:

· Сканер работает в режиме COM-порта.
· Данные от сканера идут не в активное поле ввода, а напрямую в драйвер.
· Драйвер ловит префикс, собирает код, ловит суффикс (Enter) и отдает в 1С уже готовое событие.
· Процедура ОбработкаВнешнегоСобытия в 1С получает чистый штрихкод и работает с ним, никак не взаимодействуя с тем текстом, что вы ввели вручную. Поле ввода даже не узнает, что что-то произошло.

Что нужно для правильной работы

Чтобы добиться описанного вами идеального поведения, необходимо:

1. Перепрограммировать сканер: С помощью инструкции или служебных штрихкодов перевести его из режима "USB-клавиатура" в режим "Эмуляция COM-порта" (USB Serial) .
2. Установить драйвер: Скачать и установить внешнюю компоненту (например, из комплекта поставки 1С или с диска ИТС) .
3. Настроить в 1С: В разделе "Администрирование" -> "Подключаемое оборудование" добавить новое устройство, выбрать тип "Сканер штрихкода" и в настройках указать тот самый префикс и суффикс, которые теперь шлет ваш сканер . Обычно для проверки используется встроенная функция "Тест устройства", которая показывает, что именно приходит от сканера .

Таким образом, именно использование префикса/суффикса и механизма внешних событий позволяет 1С гарантированно отличать сканирование от ручного ввода и корректно обрабатывать штрихкоды, не смешивая их с уже введенными данными.

Прочитать COM порт

Добавлено: 13 Март 2026, 8:23
finsoftrz
У нас, наверно, так не реализуешь. По мне, довольно спорный подход. Во всех других программах сканер работает иначе, а в окне конкретной программы иначе. А для работы с маркировкой они тоже рекомендуют использовать подключение по com интерфейсу.

Прочитать COM порт

Добавлено: 13 Март 2026, 8:37
Игорь Столяров
finsoftrz писал(а): 13 Март 2026, 8:23 они тоже рекомендуют использовать подключение по com интерфейсу
Потому что для работы с маркировкой выбрали зачем-то формат 40-летних немецких логистических кодов.
И в то время, прорывной технологией была последовательная передача символов через ассинхронный ультрасовременный COM порт. :D
И снова повторилась история: немцы-то ушли, а устаревшие технологии остались. 🤦‍♀️

Прочитать COM порт

Добавлено: 13 Март 2026, 8:53
finsoftrz
Кстати, насчет немцев. Мне товарищ, который любил по Европе кататься отдыхать, говорил, что там все очень консервативно, где-то более, где-то менее. В магазинах допотопные пинпады стоят и т.п. Такого развода лохов прогресса, как в России, там нет.

Прочитать COM порт

Добавлено: 13 Март 2026, 9:30
Игорь Столяров
Собственно, да !
В западных странах по прежнему используются майнфреймы и требуются программисты на FORTRAN & COBOL.
А зачем платить, если и так всё работает ? Другой вопрос - что такие системы должны работать изолированно.
Т.е. там нет идиотических позывов софт времён WinXP запускать под Windows 11 и гордится традициями как у нас ... 🤦‍♀️

Я вот смотрю на изменения по работе с той же маркировкой и складывается непреодолимое ощущение,
что это просто опрадание существования самих разработчиков этих изменений. :D

Прочитать COM порт

Добавлено: 13 Март 2026, 9:49
finsoftrz
Надо с этим что-то делать. Со временем будет все сложнее и сложнее успевать за выдумками чиновников. А отлаживать работу с сервисами это мрак. Обычно и документация черт ногу сломит, и верификация ошибок отсутствует, и с поддержкой разговаривать сложно, все нервы истрепишь, пока доберешся до кого знающего.
Я вот целый день потратил на переписку и отладку возвратов по СБП с одним банком, только что заработало. Причем это относительно небольшой банк и у них ребята грамотные сидят. Целый день, и это не считая самой разработки...

Прочитать COM порт

Добавлено: 13 Март 2026, 11:22
Игорь Столяров
Да чиновники даже особо ничего и не выдумывают. Всё ходит по кругу.
Маркировку ввели потому что везде продавался левый товар с оформленными таможенными документами.
А теперь идёт борьба с чёрным рынком партий кодов маркировки, которые уже открыто продаются на AVITO.

И это не поддельные или взломанные марки, а абсолютно официально оформленные через систему ЧЗ.
Как в бородатом одесском анекдоте: город конечно сильно изменился, а люди те же ... :D