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