При обмене данными между современными конфигурациями на платформе 8.х и устаревшими базами на 7.7 с использованием инструмента «Конвертация данных 2.x» программисты часто сталкиваются со специфической ошибкой: «недопустимый способ указания значения нпп». Эта ошибка возникает непосредственно в момент загрузки файла в базу-приемник и полностью блокирует запись документа или элемента справочника. Проблема осложняется тем, что в платформе 8.х такая терминология не используется, и причину приходится искать в особенностях работы парсера XML в «семерке».
В этой статье мы подробно разберем, что такое НПП, почему возникают сбои при его чтении и как правильно настроить правила конвертации объектов (ПКО), чтобы избежать этой ошибки.
Для начала проанализируем техническую суть термина. НПП расшифровывается как «Номер По Порядку». Это внутренний технический идентификатор, который система «Конвертация данных» присваивает каждому объекту внутри формируемого XML-файла. В отличие от GUID, который является глобально уникальным, НПП уникален только в рамках одного конкретного файла выгрузки.
Рассмотрим механизм взаимодействия. Когда обработка загрузки (например, стандартная V77Imp.ert) читает файл, она строит внутреннюю таблицу соответствий. Если в документе встречается ссылка на контрагента, система проверяет, был ли этот контрагент уже загружен. Если он встречается в файле впервые, обработка запоминает его НПП. Если же ссылка указывает на объект, который будет описан позже (опережающая ссылка), 1С 7.7 использует НПП для резервирования места в памяти и последующей связи объектов. Ошибка «недопустимый способ указания» означает, что парсер встретил некорректное значение в этом поле — например, пустое значение, текст вместо числа или ссылку на несуществующий в текущем контексте номер.
Выясним наиболее частую причину возникновения проблемы. Чаще всего ошибка проявляется при выгрузке объектов, которые ссылаются друг на друга. Классический пример: справочник Контрагенты и справочник Договоры. У контрагента есть реквизит ОсновнойДоговор, а у договора есть реквизит Владелец (ссылка на контрагента).
В процессе выгрузки возникает «зацикливание»:
На платформе 7.7 механизм кэширования объектов менее совершенен, чем в 8.х, и такая цепочка часто приводит к тому, что НПП в XML-файле формируется некорректно или считывается обработкой загрузки с ошибкой типа данных.
Проанализируем самый эффективный способ решения, предложенный опытными разработчиками. Чтобы разорвать некорректную связь и принудительно заставить систему пересчитать идентификаторы, мы можем использовать обработчик «Перед выгрузкой» в правилах конвертации объектов.
Рассмотрим по шагам, что нужно сделать в ПКО для «проблемного» объекта (например, для справочника договоров):
// Формируем уникальный ключ выгрузки, чтобы система не путалась в ссылках
КлючВыгружаемыхДанных = Источник.Владелец + Источник;
// Запрещаем системе запоминать объект в текущем стеке выгрузки
НеЗапоминатьВыгруженные = 1;
Важное пояснение: Установка параметра НеЗапоминатьВыгруженные = 1 заставляет систему игнорировать тот факт, что объект уже мог быть частично обработан. Это предотвращает передачу битых ссылок по НПП. Использование КлючВыгружаемыхДанных гарантирует, что объект будет однозначно идентифицирован даже при повторном обращении к нему в рамках одной сессии выгрузки.
Иногда ошибка «недопустимый способ указания значения нпп» является следствием неправильно настроенных полей поиска. Если в ПКО настроен поиск по нескольким реквизитам, и при загрузке система находит два разных объекта, подходящих под условия, или не может однозначно сопоставить НПП из файла с объектом в базе, возникает конфликт типов данных в парсере 7.7.
Разберем, как оптимизировать настройки поиска:
НПП родителя может быть не инициализирован в момент создания элемента в 7.7.Посмотрим на ситуацию со стороны базы-приемника. За загрузку в 7.7 отвечает внешний отчет (обработка) V77Imp.ert. Существует множество версий этой обработки. Выясним, как версия влияет на результат:
V77Imp.ert из каталога установки шаблонов конфигурации. Разработчики 1С выпускали обновления, исправляющие ошибки парсинга НПП для больших файлов.Также стоит учитывать объем данных. При выгрузке десятков тысяч объектов за один раз внутренняя таблица значений в 1С 7.7, где хранятся соответствия НПП, может переполниться или вызвать замедление, приводящее к сбоям чтения. Если ошибка сохраняется, попробуйте разделить выгрузку на части: сначала выгрузите базовые справочники (Контрагенты, Номенклатура), а затем документы (Реализации, Поступления).
Подведем итог нашим действиям. Если вы столкнулись с ошибкой «недопустимый способ указания значения нпп», выполните следующие шаги:
НеЗапоминатьВыгруженные = 1 в обработчике «Перед выгрузкой».V77Imp.ert в базе-приемнике до самой свежей версии.Эти методы позволяют обойти ограничения платформы 1С 7.7 и обеспечить стабильный обмен данными даже в сложных случаях с перекрестными ссылками объектов.