Почему при быстром вводе цифр в 1С добавляется новая строка с товаром?

Системный администратор 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Часто пользователи сталкиваются с необычным поведением программы 1С: при быстром вводе числовых данных, например, количества товара в документе реализации, система на мгновение "задумывается", а затем добавляет в табличную часть новую строку с тем же товаром. Это создает неудобства и замедляет работу. Проанализируем, почему так происходит и как это исправить.

Основная и наиболее вероятная причина такого поведения — подключенный к компьютеру сканер штрих-кодов, работающий в режиме эмуляции клавиатуры (также известный как "в разрыв клавиатуры" или "keyboard wedge"). Давайте разберемся, как это работает и какие есть способы решения.

Выясним причину: почему 1С путает ручной ввод и сканер?

Сканеры штрих-кодов могут подключаться к 1С двумя основными способами:

  1. Эмуляция клавиатуры (USB-HID). В этом режиме сканер притворяется обычной клавиатурой. Когда он считывает штрих-код, он очень быстро "печатает" последовательность цифр и часто завершает ввод нажатием клавиши Enter. Система 1С, чтобы понять, что данные пришли именно со сканера, а не от пользователя, анализирует скорость ввода символов. Если символы поступают с очень маленьким интервалом, 1С считает это сканированием и запускает обработчик поиска товара по штрих-коду.
  2. Эмуляция COM-порта. В этом режиме сканер использует специальный драйвер, создающий в системе виртуальный COM-порт. Данные от сканера передаются через этот порт, и 1С получает их через специальный механизм ОбработкаВнешнегоСобытия. Этот способ надежно отделяет ввод с клавиатуры от ввода со сканера.

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

Рассмотрим несколько способов решения этой проблемы, от самых простых до наиболее надежных.

Решение 1: Настройка параметров драйвера торгового оборудования

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

Порядок действий:

  1. Перейдите в раздел "НСИ и администрирование" -> "РМК и оборудование".
  2. В настройках подключения оборудования выберите ваш сканер штрих-кодов и откройте его параметры.
  3. Найдите и измените следующие настройки:
    • Тайм-аут получения данных. Этот параметр определяет максимальную задержку между символами, при которой они считаются частью одной последовательности (одного штрих-кода). Попробуйте немного уменьшить это значение. Например, если стоит 100 мс, установите 50-60 мс. Это сделает систему менее чувствительной к небольшим паузам при ручном вводе.
    • Минимальная длина штрих-кода. Увеличьте это значение до длины, заведомо большей, чем количество товара, которое вы обычно вводите. Например, если стандартный штрих-код EAN-13 состоит из 13 символов, установите минимальную длину 8 или выше. В этом случае, когда вы вводите количество "25", система не будет пытаться обработать его как штрих-код.
  4. Сохраните настройки и проверьте результат.

Важно: Этот метод является компромиссом и может не всегда работать идеально, особенно если пользователи вводят данные с разной скоростью.

Решение 2: Использование префиксов и суффиксов (рекомендуемый способ)

Это более надежный способ заставить 1С однозначно распознавать данные от сканера. Идея в том, чтобы сканер перед отправкой цифр штрих-кода посылал специальный символ или комбинацию клавиш (префикс), которую пользователь случайно не нажмет.

Разберем по шагам:

  1. Настройка сканера. Вам понадобится инструкция к вашему сканеру. В ней обычно есть раздел с управляющими штрих-кодами для программирования.
    • Найдите штрих-код, который переводит сканер в режим программирования.
    • Найдите штрих-код для установки префикса. В качестве префикса рекомендуется использовать функциональные клавиши, например, F7, так как она редко используется в стандартных операциях 1С.
    • Отсканируйте последовательно штрих-коды: "Войти в режим программирования" -> "Установить префикс" -> штрих-код, соответствующий клавише F7 -> "Сохранить и выйти из режима программирования".
  2. Настройка 1С. Теперь нужно сообщить 1С, что данные от сканера будут приходить с этим префиксом.
    • Откройте те же настройки сканера в 1С ("НСИ и администрирование" -> "РМК и оборудование").
    • Найдите поле "Префикс" и укажите там настроенную клавишу. Обычно для функциональных клавиш есть специальный синтаксис, например, #F7.

После такой настройки обработчик штрих-кода в 1С будет срабатывать только тогда, когда получит последовательность символов, начинающуюся с префикса F7. Проблема самопроизвольного добавления строк при быстром ручном вводе будет полностью решена.

Решение 3: Переключение сканера в режим эмуляции COM-порта (самый надежный способ)

Этот метод полностью исключает путаницу, так как физически разделяет потоки данных от клавиатуры и сканера. Он требует чуть больше технических действий, но обеспечивает максимальную стабильность работы.

Порядок действий:

  1. Установка драйвера. Скачайте с сайта производителя вашего сканера драйвер для эмуляции COM-порта (VCOM). Установите его. После установки в "Диспетчере устройств" Windows в разделе "Порты (COM и LPT)" должен появиться новый виртуальный COM-порт.
  2. Перевод сканера в режим COM-порта. С помощью управляющих штрих-кодов из инструкции переведите сканер в режим эмуляции COM-порта.
  3. Настройка в 1С.
    • Удалите старое устройство-сканер, которое работало в режиме клавиатуры.
    • Добавьте новое устройство. В качестве драйвера выберите "1С:Сканеры штрихкода (NativeApi)".
    • В параметрах драйвера укажите номер COM-порта, который появился в "Диспетчере устройств", а также скорость и другие параметры, если они указаны в инструкции к сканеру.

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

Важный нюанс: при использовании USB-сканеров в режиме эмуляции COM-порта иногда возникает проблема "плавающих" портов. Если вы переключите сканер в другой USB-разъем, Windows может назначить ему новый номер COM-порта, и сканер в 1С перестанет работать. Для решения этой проблемы системные администраторы могут жестко привязать конкретное USB-устройство к номеру порта через реестр Windows.

Для этого нужно:

  1. В "Диспетчере устройств" найти сканер, в его свойствах на вкладке "Сведения" выбрать "ИД оборудования" и скопировать значения VID и PID. Например: USB\VID_11CA&PID_0207.
  2. В редакторе реестра (regedit) перейти по пути HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags.
  3. Создать новый двоичный параметр (REG_BINARY) с именем IgnoreHWSerNum<VID><PID> (без разделителей, например, IgnoreHWSerNum11CA0207) и значением 01.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags]
"IgnoreHWSerNum11CA0207"=hex:01

Эта настройка заставит Windows всегда назначать этому устройству один и тот же COM-порт, вне зависимости от того, в какой USB-разъем оно подключено.

Что делать, если ничего не помогает?

Если ни один из вышеперечисленных способов не решил проблему, стоит обратить внимание на исходное замечание автора темы о "непродолжительном зависании". Возможно, проблема не только в сканере, но и в производительности самой конфигурации. В момент изменения количества в строке могут запускаться "тяжелые" обработчики событий, которые вызывают задержку и некорректную обработку дальнейшего ввода. В этом случае программисту 1С следует использовать "Замер производительности" в Конфигураторе, чтобы найти и оптимизировать проблемные участки кода, выполняющиеся при изменении данных в табличной части документа.

← На главную