Почему не записывается Корректировка приобретения в 1С:ERP и возникает ошибка «не указана номенклатура»?

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

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

В этой статье мы подробно разберем проблему, которая возникает при создании документа Корректировка приобретения на основании ранее проведенного документа Приобретение товаров и услуг. Ошибка заявляет о себе следующим сообщением: «Ошибка при получении набора регистра сведений АналитикаУчетаНоменклатуры: не указана номенклатура». При этом визуально в табличной части все строки заполнены корректно. Выясним истинные причины этой неполадки и рассмотрим детальные шаги по ее устранению.

Поймем механику ошибки: почему система требует номенклатуру?

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

Все эти связи хранятся в специальном регистре сведений Аналитика учета номенклатуры. В момент записи или проведения любого документа, изменяющего состояние склада или взаиморасчетов, программный код обращается к модулю менеджера этого регистра и вызывает функцию ИнициализироватьКлючиАналитикиУчетаНоменклатуры().

Программа собирает данные из всех табличных частей документа (включая скрытые системные таблицы), формирует временную таблицу и выполняет запрос к базе данных. Если в процессе этого сбора в результирующую выборку попадает строка, в которой поле Номенклатура имеет пустое значение (ПустаяСсылка) или не определено, то внутренний валидатор конфигурации генерирует исключение. Запись документа прерывается.

Скрытые причины сбоя, о которых не напишут в стандартных инструкциях

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

  1. Зависание данных в скрытой табличной части «Виды запасов». В документе Корректировка приобретения присутствует скрытая от обычного пользователя табличная часть ВидыЗапасов. При удалении строк (например, сторнируемой строки при оформлении расхождений) или ручном изменении состава товаров программные обработчики событий не всегда корректно очищают эту скрытую таблицу. В итоге в ней остаются «сиротские» строки без привязанной номенклатуры, которые и вызывают падение при записи.
  2. Специфика конкретного релиза конфигурации. Очень часто эта ошибка является следствием багов в коде релизов веток 2.4.7 и ранних 2.5. Разработчики меняют структуру хранения складских аналитик, что приводит к нестыковкам при обновлении конфигурации или переносе данных.
  3. Проблемы в исходном документе-основании. Если в самом исходном документе Приобретение товаров и услуг ключи аналитики были записаны некорректно (например, после группового изменения реквизитов, чистки дублей номенклатуры или удаления неиспользуемых характеристик), то корректировка унаследует эти «сломанные» связи.
  4. Конфликт с подчиненным документом «Счет-фактура полученный». В некоторых сценариях при попытке записать корректировку система пытается обновить данные в связанной фактуре. Если при этом параметры распределения сумм НДС нарушены, это может вызвать каскадный сбой в аналитике.

Рассмотрим подробнее практические варианты решения данной проблемы в зависимости от ваших прав доступа и возможностей изменения информационной базы.

Вариант 1. Очистка скрытой таблицы «Виды запасов» (Быстрый пользовательский метод)

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

  1. Откройте встроенную обработку «Групповое изменение реквизитов» (в разделе «НСИ и администрирование» — «Обслуживание» — «Корректировка данных»).
  2. В поле «Выбирать элементы» укажите тип данных: Корректировка приобретения.
  3. В настроечных параметрах отбора найдите ваш проблемный документ по номеру или ссылке, чтобы изменения затронули только его.
  4. Перейдите в дополнительные параметры обработки и включите режим показа служебных реквизитов.
  5. Поскольку табличную часть нельзя просто очистить стандартным заполнением реквизитов, мы можем выполнить это через выполнение произвольного алгоритма (если у вас есть права администратора) или использовать внешнюю обработку для очистки табличных частей.

Для разработчиков и администраторов аналогичное действие в консоли кода будет выглядеть следующим образом:


// Получаем объект проблемного документа корректировки
ДокументОбъект = ПроблемнаяСсылка.ПолучитьОбъект();

// Полностью очищаем зависшие виды запасов
ДокументОбъект.ВидыЗапасов.Очистить();

// Записываем документ без проведения, чтобы инициализировать новые чистые структуры
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);

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

Вариант 2. Принудительное обновление ключей аналитики в исходном документе

Если ключи повреждены в самом документе-основании (документе приобретения), то корректировка постоянно будет выдавать ошибку. Проанализируем, как исправить первоисточник проблемы:

  1. Откройте исходный документ Приобретение товаров и услуг. Помните, что период может быть закрыт, поэтому предварительно может потребоваться временно открыть период для редактирования.
  2. Перейдите на вкладку «Товары». Выберите строку с номенклатурой, по которой оформляется корректировка.
  3. Временно выберите в этой строке любую другую номенклатуру (желательно аналогичного типа), после чего верните обратно правильную исходную номенклатуру. Этот простой шаг заставит форму документа принудительно очистить кэш аналитики для данной строки.
  4. Перепроведите исходный документ приобретения. При этом система заново сформирует записи в регистре сведений Аналитика учета номенклатуры без ошибок и дублей.
  5. Вернитесь к созданию документа Корректировка приобретения и заполните его заново на основании обновленного документа приобретения.

Вариант 3. Обход ошибки на уровне программного кода (Решение для разработчиков)

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

Найдем в модуле менеджера регистра сведений АналитикаУчетаНоменклатуры процедуру, отвечающую за подготовку таблиц. Наша цель — исключить попадание пустых ссылок номенклатуры в выборку. Посмотрим на пример доработки запроса:


&Вместо("ИнициализироватьКлючиАналитикиУчетаНоменклатуры")
Процедура ИнициализироватьКлючиАналитикиУчетаНоменклатуры_Расширение(Запрос)
    // Вызываем оригинальный метод или полностью переопределяем запрос, 
    // добавляя жесткую фильтрацию пустых значений
    
    // В текст запроса добавляем условие:
    // ГДЕ ТаблицаТовары.Номенклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
    
    // Это гарантирует, что даже при наличии мусорных строк в скрытых таблицах 
    // пустая аналитика не попадет на обработку в менеджер регистра.
КонецПроцедуры

Такая доработка через расширение не снимает конфигурацию с поддержки и гарантирует стабильную запись документов даже при некорректном поведении видов запасов.

Вариант 4. Обновление релиза конфигурации

Как показывает практика внедрения и сопровождения 1С:ERP, данная ошибка носит массовый характер в некоторых релизах ветки 2.4.7. В последующих обновлениях (начиная с релизов 2.4.8 и выше, а также во всех актуальных версиях линейки 2.5) разработчики фирмы 1С исправили алгоритмы автоматической очистки табличных частей при интерактивной работе пользователя.

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

← На главную