Многие пользователи и программисты сталкиваются с неприятной ситуацией в конфигурации 1С:Управление торговлей 11.4 (начиная с релиза 11.4.13.57 и выше). При попытке провести документ ПересортицаТоваров система выдает ошибку: «Не заполнена колонка "Количество по РНПТ" в строке 1 списка "Товары"». Самое странное в этой ситуации то, что учет прослеживаемых импортных товаров в базе может быть полностью отключен, а под пользователем с полными правами (Администратором) документ проводится без проблем. Давайте подробно рассмотрим эту ситуацию и выясним причину такого поведения системы, а также разберем по шагам, как устранить эту ошибку.
Для начала выясним причину, почему программа требует заполнения реквизита КоличествоПоРНПТ, если функциональная опция прослеживаемости выключена. Разберем несколько ключевых факторов:
ЭтоПрослеживаемыйДокумент вернет Истина, что принудительно включит обязательность поля.ПроверитьКорректностьНастроекТоваровРНПТ) система анализирует параметры. Администратор обходит часть скрытых проверок, что позволяет логике платформы игнорировать пустое поле. У менеджера же нехватка прав вызывает некорректное срабатывание триггера проверки.Проанализируем стандартную процедуру ОбработкаПроверкиЗаполнения в модуле объекта документа. В типовой конфигурации есть следующий блок кода:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
МассивНепроверяемыхРеквизитов = Новый Массив;
// ... часть кода опущена ...
МассивНепроверяемыхРеквизитов.Добавить("Товары.КоличествоПоРНПТ");
ЭтоПрослеживаемыйДокумент = УчетПрослеживаемыхТоваровЛокализация.ЭтоПрослеживаемыйДокумент(Товары, Дата);
Если ПолучитьФункциональнуюОпцию("ЗапретитьПоступлениеТоваровБезНомеровГТД") Или ЭтоПрослеживаемыйДокумент Тогда
ПроверитьЗаполнениеНомеровГТД(Отказ);
КонецЕсли;
// ... часть кода опущена ...
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
КонецПроцедуры
Как мы видим, платформа изначально добавляет Товары.КоличествоПоРНПТ в массив непроверяемых реквизитов. Однако, где-то глубже по стеку вызовов, из-за ошибки в релизе, этот реквизит возвращается в проверку или срабатывает настройка свойства самого реквизита на уровне метаданных.
Поскольку менять конфигурацию поставщика не рекомендуется, мы решим проблему с помощью расширения. Изменить свойство реквизита табличной части (с «Выдавать ошибку» на «Не проверять») прямо в визуальном дереве расширения нельзя — платформа 1С блокирует такие изменения для заимствованных объектов. Поэтому мы напишем программный обход.
Разберем по шагам алгоритм действий:
ПересортицаТоваров, нажмем правой кнопкой мыши и выберем «Добавить в расширение».ОбработкаПроверкиЗаполнения с аннотацией &После.Теперь напишем код, который будет принудительно удалять проблемный реквизит из массива проверяемых реквизитов перед тем, как платформа выдаст ошибку. Посмотрим на пример кода:
&После("ОбработкаПроверкиЗаполнения")
Процедура Расш1_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
// Ищем индекс реквизита в массиве проверяемых реквизитов
ИндексРеквизита = ПроверяемыеРеквизиты.Найти("Товары.КоличествоПоРНПТ");
// Если реквизит найден и мы уверены, что проверка нам не нужна, удаляем его
Если ИндексРеквизита <> Неопределено Тогда
ПроверяемыеРеквизиты.Удалить(ИндексРеквизита);
КонецЕсли;
// Для совместимости с разными релизами проверим и старое название реквизита
ИндексРеквизитаСтарый = ПроверяемыеРеквизиты.Найти("Товары.КоличествоРНПТ");
Если ИндексРеквизитаСтарый <> Неопределено Тогда
ПроверяемыеРеквизиты.Удалить(ИндексРеквизитаСтарый);
КонецЕсли;
КонецПроцедуры
Если вы не готовы использовать расширения или вам нужно быстрое решение «здесь и сейчас», рассмотрим административный путь решения проблемы:
Проанализируем номенклатуру, которая вызывает ошибку. Перейдем в справочник Номенклатура, откроем карточку проблемного товара и проверим поле ТН ВЭД. Если у выбранного кода ТН ВЭД установлен флаг контроля прослеживаемости, его необходимо временно снять (или выбрать другой код ТН ВЭД, не подлежащий прослеживаемости), если фактически этот товар не является прослеживаемым. Также попробуйте пересоздать документ пересортицы с нуля, а не копировать старый, чтобы очистить потенциально закэшированные скрытые признаки.
Резюме: Мы разобрали причины возникновения ошибки проверки РНПТ в документе пересортицы и применили надежный способ ее программного обхода с помощью расширения, который позволит вашим пользователям спокойно работать до выпуска официального исправления от разработчиков 1С.