При обмене данными между различными конфигурациями 1С с помощью универсальной обработки V8Exchan82.epf (или ее современных аналогов для КД 2.1) специалисты часто сталкиваются с двумя критическими проблемами. Первая — это несовпадение типов метаданных, например, когда в базе-источнике Код номенклатуры является строкой, а в базе-приемнике — числом. Вторая — ошибка записи в регистры сведений, подчиненные регистратору, с сообщением «Не установлен отбор по регистратору».
В этой статье мы подробно разберем, как проанализировать эти ситуации и какие шаги предпринять для их корректного решения в правилах обмена, не прибегая к деструктивному изменению типовых конфигураций.
Разберем ситуацию на примере обмена между 1С:ERP и Далион. В типовых решениях, таких как ERP, УТ 11 или БП 3.0, справочник Номенклатура обычно имеет строковый тип кода. Это позволяет использовать префиксы и ведущие нули. В некоторых специализированных или старых конфигурациях (как Далион) тип кода может быть числовым.
Когда обработка обмена пытается записать строку «000000123» или, что хуже, «А000123» в числовое поле, платформа 1С выдает ошибку преобразования. Рассмотрим варианты решения этой проблемы.
Вариант А: Исключение кода из правил обмена
Если для вашей системы не принципиально сохранение идентичности кодов между базами (например, вы синхронизируете объекты по GUID или Артикулу), это самый простой и безопасный способ. Выполним следующие шаги:
Номенклатура.Код.В этом случае при загрузке в базу-приемник система автоматически назначит объекту следующий свободный числовой код. Это исключит программные сбои и сохранит целостность данных.
Вариант Б: Программная очистка кода в обработчиках
Если же код необходимо перенести, мы должны гарантировать, что передаваемое значение является «чистым» числом. Для этого в ПКС для свойства Код в обработчике «Перед выгрузкой» можно написать алгоритм очистки:
// Очищаем строку от всех нецифровых символов
ТолькоЦифры = "";
Для Поз = 1 По СтрДлина(Источник.Код) Цикл
Символ = Сред(Источник.Код, Поз, 1);
Если Найти("0123456789", Символ) > 0 Тогда
ТолькоЦифры = ТолькоЦифры + Символ;
КонецЕсли;
КонецЦикла;
// Если результат не пустой, передаем его
Если ЗначениеЗаполнено(ТолькоЦифры) Тогда
Значение = Число(ТолькоЦифры);
Иначе
Отказ = Истина; // Или другое логическое действие
КонецЕсли;
Рассмотрим важный момент: изменение типа кода в самой базе-приемнике (через Конфигуратор) крайне нежелательно. Как отмечают эксперты, это может привести к невозможности обновления конфигурации и сбоям в работе торгового оборудования, которое ожидает от Далиона именно числовые PLU.
Вторая частая ошибка возникает при попытке переноса данных регистра сведений ЦеныНоменклатуры. В большинстве современных конфигураций этот регистр является подчиненным регистратору (документу Установка цен номенклатуры). Попытка записать набор записей в такой регистр без указания документа-основания приводит к ошибке КодСообщения = 26.
Анализируем причину
Проанализируем ситуацию: регистр сведений в режиме «Подчинение регистратору» не может существовать без ссылки на документ. Когда КД 2.1 пытается выгрузить именно РегистрСведенийЗапись, она создает набор записей. Но для записи этого набора в базе-приемнике должен быть установлен отбор по конкретному регистратору.
Как правильно настроить перенос цен:
УстановкаЦенНоменклатуры. При проведении документа в приемнике записи в регистре создадутся автоматически штатными средствами конфигурации.Регистратор. В правилах конвертации свойств (ПКС) для регистратора должно быть указано соответствующее правило конвертации документа.ЭтотОбъект.Отбор.Регистратор.Значение. Если при загрузке это значение не определено, запрос внутри модуля выдаст ошибку.Рассмотрим пример правильной структуры ПКО для регистра сведений:
// В обработчике "Перед выгрузкой" ПКО регистра сведений
Если Источник.Регистратор = Неопределено Или Источник.Регистратор.Пустая() Тогда
Отказ = Истина;
КонецЕсли;
Для того чтобы выяснить, почему преобразование или запись не удается, воспользуемся режимом отладки в обработке Универсальный обмен данными XML:
Источник и Приемник.Важный итог: При возникновении ошибки преобразования типов всегда проверяйте вкладку «Настройки поиска». Если у вас стоит «Поиск по коду», а типы данных (строка/число) различаются, поиск не сработает, и система будет пытаться создать дубли объектов, что приведет к еще большему хаосу в справочниках. Оптимально использовать поиск по уникальному идентификатору или комбинации полей (например, Наименование + Артикул).