Почему при сканировании штрихкода в документе «Пересчет товаров» увеличивается фактическое количество?

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

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

Штатная логика документа инвентаризации

Документ ПересчетТоваров предназначен для фиксации фактического наличия номенклатуры на складе. В типовых конфигурациях на платформе «1С:Предприятие 8» (УТ 11, КА, ERP) обработчик штрихкодов в складских документах спроектирован под непрерывный процесс сканирования:

  1. Кладовщик берет товар с полки и считывает штрихкод сканером.
  2. Система идентифицирует номенклатуру, характеристику и упаковку.
  3. Если товар уже есть в табличной части документа, программа регистрирует факт обнаружения единицы товара и увеличивает реквизит КоличествоФакт на 1 (или на коэффициент единицы измерения/упаковки).
  4. Если товар отсутствует в списке, создается новая строка с фактическим количеством 1.

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

Несоответствие описания в справке

Текст в справочной информации о том, что программа должна «только выделить товар и установить курсор», описывает универсальный алгоритм поиска в списках. Однако в прикладной логике документов пересчета и инвентаризации этот механизм переопределен в пользу автоматизации подсчета, чтобы исключить необходимость ручного ввода количества при поштучном пересчете.

Варианты решения задачи без изменения конфигурации

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

  1. Использование стандартного платформенного поиска: установим фокус на табличную часть документа, нажмем сочетание клавиш Ctrl + F и введем штрихкод, код или артикул номенклатуры (в зависимости от видимых колонок). Если сканер настроен в режиме эмуляции клавиатуры (HID), штрихкод можно отсканировать прямо в поле ввода поиска платформы. При этом строка будет найдена и выделена курсором без выполнения программных алгоритмов пересчета количества.
  2. Использование формы подбора: откроем команду «Подобрать товары». В открывшемся окне подбора сканирование штрихкода найдет позицию в каталоге, покажет ее остатки и характеристики без автоматического изменения строк самого документа пересчета до явного подтверждения пользователем.
  3. Поиск по коду или артикулу в списке: если необходимо найти товар вручную, воспользуемся поиском по реквизитам «Код» или «Артикул», которые по умолчанию не запускают процедуру инкремента количества.

Вариант программной доработки (для разработчиков)

Если бизнес-процесс склада требует разделения режимов «Подсчет (+1)» и «Только навигация по таблице», задачу можно решить через расширение конфигурации.

Проанализируем пример перехвата обработки штрихкода в форме документа пересчета товаров. В расширении можно добавить переключатель режима сканирования на форму и изменить поведение обработчика:


&НаКлиенте
Процедура Расш_ОбработкаШтрихкода(Штрихкод, РежимТолькоПоиск)
    Если РежимТолькоПоиск Тогда
        // Выполняем только поиск и позиционирование на строке
        ПараметрыОтбора = Новый Структура("Номенклатура, Характеристика");
        // Получаем параметры товара по штрихкоду через вызов серверного метода
        ЗаполнитьПараметрыТовараПоШтрихкоду(Штрихкод, ПараметрыОтбора);
        
        НайденныеСтроки = Объект.Товары.НайтиСтроки(ПараметрыОтбора);
        Если НайденныеСтроки.Количество() > 0 Тогда
            Элементы.Товары.ТекущаяСтрока = НайденныеСтроки[0].ПолучитьИдентификатор();
        КонецЕсли;
    Иначе
        // Вызываем стандартную типовую логику инкремента фактического количества
        ПродолжитьВызов(Штрихкод);
    КонецЕсли;
КонецПроцедуры

Такой подход позволяет сохранить типовой механизм инвентаризации и одновременно предоставить кладовщикам гибкий инструмент для выборочной проверки позиций.

← На главную