При проведении инвентаризации в системах 1С:Комплексная автоматизация 2.4 или 1С:ERP 2.4 пользователи часто сталкиваются с некорректным поведением документа Пересчет товаров, если в программе включен учет по сериям. Проблема проявляется при попытке заполнить фактическое количество путем сканирования штрихкодов. Рассмотрим подробнее, почему это происходит и как решить данную проблему.
Проанализируем ситуацию, описанную пользователями: при заполнении документа Пересчет товаров по отбору (по остаткам), табличная часть Товары заполняется строками в разрезе каждой серии. Например, если у одного товара есть три разные серии с остатком по 1 штуке, в документе появятся три строки.
Однако при сканировании штрихкода товара (не серии, а именно номенклатуры) алгоритм поиска строки в типовой конфигурации работает неоптимально. Система находит первую попавшуюся строку с этой номенклатурой и увеличивает в ней количество. После этого открывается форма уточнения серии. Если пользователь выбирает серию, которая уже присутствует в другой строке документа, происходит подмена данных или дублирование ключей записей.
В итоге при попытке провести документ система выдает ошибку: "В табличной части Товары обнаружены дублирующиеся строки". Это делает процесс инвентаризации с использованием сканера в интерфейсе 1С практически невозможным для серийных товаров.
Выясним причину такого поведения. Данная ошибка официально зарегистрирована в реестре багов 1С под номером 00-00345861. Она связана с тем, что механизм поиска строки в форме документа Пересчет товаров не учитывает уникальность комбинации Номенклатура + Характеристика + Серия должным образом при интерактивном вводе.
Рассмотрим основные способы решения этой проблемы:
Проанализируем программный код, отвечающий за поиск строки при сканировании. В типовом решении за это часто отвечает модуль формы документа Пересчет товаров. Проблема заключается в том, что поиск выполняется через метод НайтиСтроки(), где в структуре поиска изначально отсутствует Серия (так как она еще не известна в момент сканирования ШК товара).
Чтобы исправить это с помощью кода, можно использовать следующий подход в расширении (примерная логика):
&НаКлиенте
Процедура Расш1_ПослеСканирования(ДанныеШтрихкода, Результат)
// Перед стандартной обработкой проверяем, есть ли серии
ПараметрыПоиска = Новый Структура;
ПараметрыПоиска.Вставить("Номенклатура", ДанныеШтрихкода.Номенклатура);
ПараметрыПоиска.Вставить("Характеристика", ДанныеШтрихкода.Характеристика);
// Если товар серийный, вызываем форму уточнения серии ДО поиска строки
Если ДанныеШтрихкода.Номенклатура.ИспользоватьСерии Тогда
// Логика вызова диалога выбора серии
КонецЕсли;
КонецПроцедуры
Важно помнить, что в документе Пересчет товаров учет серий зависит от настройки Политики учета серий. Если выбрана политика "Учет остатков", то каждая серия является обязательным ключом учета. Если же "Справочное указание", то серии могут указываться в отдельном окне и не дублировать строки остатков, но в Пересчете товаров чаще всего используется именно полноценный учет остатков.
Разберем еще один нюанс, упомянутый в обсуждении — использование ордерной схемы учета. На ордерном складе процесс инвентаризации разделяется на два этапа:
Пересчет товаров.На ордерном складе документ Пересчет товаров напрямую влияет на регистр Товары на складах. Если серии учитываются при приемке и отгрузке, то ошибки в пересчете могут заблокировать последующую отгрузку товара, так как возникнет пересортица по сериям. Поэтому крайне важно, чтобы в документе Пересчет товаров серии были указаны корректно и без дублей.
Если вы столкнулись с этой ошибкой и не можете оперативно обновить систему, рекомендуется придерживаться следующего алгоритма:
Во-первых, попробуйте заполнять фактическое количество не сканированием в общую таблицу, а через специализированную форму "Ввод фактических данных" (если она предусмотрена в вашем релизе). Она более устойчива к ошибкам сопоставления серий.
Во-вторых, можно временно отключить автозаполнение документа по остаткам (создать пустой пересчет). В этом случае при сканировании система будет создавать новые строки, и вы сможете вручную или через форму подбора указать нужную серию. Однако этот метод неудобен тем, что вы не увидите расхождения (отклонения) в реальном времени до момента завершения пересчета.
В-третьих, проверьте настройки штрихкодов. Если на товарах наклеены штрихкоды, которые включают в себя информацию о серии (DataMatrix или составные ШК), убедитесь, что в 1С настроены шаблоны разбора этих кодов. При наличии серийного номера в самом штрихкоде система сможет найти уникальную строку в документе гораздо точнее, минуя общие алгоритмы поиска только по номенклатуре.
Подводя итог, отметим, что ошибка 00-00345861 является классическим примером конфликта между серийным учетом и алгоритмами быстрого ввода данных через сканер. Наилучшим решением остается обновление на актуальный релиз, где логика поиска строк была полностью пересмотрена в пользу учета серийных разрезов.