Как исправить ошибку 'Неверный первый параметр Ссылка' при синхронизации контрагентов между УНФ 3.0 и УНФ 1.6?

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

При настройке одностороннего обмена данными из "1С:Управление нашей фирмой" (УНФ) редакции 3.0 в редакцию 1.6 через универсальный формат часто возникает ошибка, связанная со справочником "Контрагенты". Система сообщает: "Ошибка выполнения обработчика. Неверный первый параметр Ссылка в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта". Эта проблема возникает из-за различий в структуре данных между версиями конфигураций. После ее исправления может появиться другая сложность: некоторые документы, например, расходные накладные, перестают выгружаться без каких-либо сообщений об ошибках.

Разберем по шагам, как диагностировать и исправить обе проблемы.

Проблема 1: Ошибка при конвертации данных справочника "Контрагенты"

Проанализируем ситуацию. Ошибка в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта на стороне приемника (УНФ 1.6) говорит о том, что из источника (УНФ 3.0) пришел реквизит, который в старой версии либо отсутствует, либо имеет другой тип. При попытке обработать ссылку на несуществующий в метаданных объект и возникает сбой.

Причина ошибки — эволюция конфигурации УНФ. В версии 3.0 в справочнике Контрагенты появились новые реквизиты, которых нет в 1.6. Среди них:

Стандартные правила обмена, рассчитанные на синхронизацию между одинаковыми или близкими версиями, пытаются передать эти данные "как есть". Принимающая база УНФ 1.6 не находит у себя таких реквизитов и прерывает загрузку.

Решение — модификация правил конвертации объектов (ПКО) на стороне источника.

Чтобы исправить ситуацию, необходимо в конфигурации-источнике (УНФ 3.0) создать расширение и переопределить процедуру формирования правил конвертации для справочника Контрагенты, исключив из обмена несовместимые реквизиты.

Рассмотрим по шагам, как это сделать:

  1. В конфигураторе УНФ 3.0 создайте новое расширение.
  2. Заимствуйте в него общий модуль, отвечающий за правила обмена (принципы работы с ним схожи с тем, как реализуется загрузка дополнительных реквизитов в синхронизации Enterprise Data).
  3. В этом модуле найдите процедуру, формирующую ПКО для контрагентов (например, ДобавитьПКО_Справочник_Контрагенты_Отправка).
  4. С помощью аннотации &Вместо переопределите эту процедуру в вашем расширении.
  5. В тексте скопированной процедуры закомментируйте строки, добавляющие правила для конвертации свойств (ПКС), которые отсутствуют в УНФ 1.6.

Посмотрим на пример кода, который решает проблему. В данном случае из обмена исключены свойства БанковскийСчетПоУмолчанию, ГоловнойКонтрагент, ДокументУдостоверяющийЛичность и некоторые другие, вызывавшие конфликт.


&Вместо("ДобавитьПКО_Справочник_Контрагенты_Отправка")
Процедура Расш1_ДобавитьПКО_Справочник_Контрагенты_Отправка(ПравилаКонвертации)
    ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
    ПравилоКонвертации.ИмяПКО            = "Справочник_Контрагенты_Отправка";
    ПравилоКонвертации.ОбъектДанных      = Метаданные.Справочники.Контрагенты;
    ПравилоКонвертации.ОбъектФормата     = "Справочник.Контрагенты";
    ПравилоКонвертации.ПриОтправкеДанных = "ПКО_Справочник_Контрагенты_Отправка_ПриОтправкеДанных";
    
    СвойстваШапки = ПравилоКонвертации.Свойства;
    
    // Исключаем реквизиты, отсутствующие или измененные в УНФ 1.6
    //ДобавитьПКС(СвойстваШапки, "БанковскийСчетПоУмолчанию",      "ОсновнойБанковскийСчет", , "Справочник_БанковскиеСчета_Отправка");
    ДобавитьПКС(СвойстваШапки, "ВидКонтрагента",                "ЮридическоеФизическоеЛицо", , "Перечисление_ВидыКонтрагентов");
    //ДобавитьПКС(СвойстваШапки, "ГоловнойКонтрагент",            "ГоловнойКонтрагент", , "Справочник_Контрагенты_Отправка");
    //ДобавитьПКС(СвойстваШапки, "ДокументУдостоверяющийЛичность", "ДокументУдЛичность");
    ДобавитьПКС(СвойстваШапки, "ИНН",                           "ИНН");
    ДобавитьПКС(СвойстваШапки, "КодПоОКПО",                     "ОКПО");
    ДобавитьПКС(СвойстваШапки, "Комментарий",                   "ДополнительнаяИнформация");
    ДобавитьПКС(СвойстваШапки, "КПП",                           "КПП");
    ДобавитьПКС(СвойстваШапки, "Наименование",                  "Наименование");
    ДобавитьПКС(СвойстваШапки, "НаименованиеПолное",            "НаименованиеПолное");
    //ДобавитьПКС(СвойстваШапки, "",                            "ОбособленноеПодразделение", 1);
    //ДобавитьПКС(СвойстваШапки, "",                            "ОсновнойДоговор", 1, "Справочник_ДоговорыКонтрагентов_Отправка");
    ДобавитьПКС(СвойстваШапки, "РегистрационныйНомер",          "РегистрационныйНомерНерезидента");
    ДобавитьПКС(СвойстваШапки, "Родитель",                      "Группа", , "Справочник_КонтрагентыГруппа");
    ДобавитьПКС(СвойстваШапки, "СтранаРегистрации",             "СтранаРегистрации", , "Справочник_СтраныМира");
    
    СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "КонтактнаяИнформация");
    ДобавитьПКС(СвойстваТЧ, "", "ВидКонтактнойИнформации", 1);
    ДобавитьПКС(СвойстваТЧ, "", "ЗначенияПолей", 1);
    ДобавитьПКС(СвойстваТЧ, "", "НаименованиеКонтактнойИнформации", 1);
КонецПроцедуры

После применения такого расширения обмен по справочнику "Контрагенты" должен пройти успешно. Важно понимать, что при этом часть данных не будет перенесена. Если эти данные критичны, потребуется более сложная доработка правил с преобразованием данных в формат, понятный для УНФ 1.6, как это реализовано, например, в примере доработанных правил обмена с корректировкой XDTO.

Проблема 2: Расходные накладные не выгружаются после исправления

Часто после решения одной проблемы возникает другая. В нашем случае приходные накладные синхронизируются, а расходные — нет, при этом система не выдает никаких ошибок. Документы регистрируются к отправке, но в файл обмена не попадают.

Наиболее вероятная причина — наличие фильтров в правилах регистрации объектов для обмена. В отличие от ошибки конвертации, которая проявляется на этапе загрузки, эта проблема возникает на этапе выгрузки данных из источника (УНФ 3.0).

Выясним, что может блокировать выгрузку:

План диагностики и исправления:

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

  1. Проверьте регистрацию к обмену. Убедитесь, что нужные расходные накладные действительно зарегистрированы для отправки. Для этого откройте узел плана обмена (Все функции -> Планы обмена -> Синхронизация данных через универсальный формат), выберите нужную настройку и посмотрите состав отправляемых данных. Для удобства работы со списком документов может пригодиться расширенная регистрация объектов к выгрузке по синхронизации. Если документ есть в списке, но не выгружается, проблема в правилах выгрузки. Если его нет — проблема в правилах регистрации.
  2. Изучите правила регистрации объектов. В конфигураторе найдите подписку на событие ПередОбработкойПравилРегистрацииОбъекта для плана обмена. В обработчике этой подписки обычно содержится логика, которая определяет, нужно ли регистрировать объект. Ищите условия, при которых для вашего документа устанавливается параметр Отказ = Истина.
  3. Проверьте настройки синхронизации в пользовательском режиме. Внимательно просмотрите все настройки обмена. Обратите особое внимание на разделы с фильтрами: отбор по организациям, складам, видам документов и установку периода при добавлении документов для синхронизации вручную.
  4. Используйте отладку. Это самый надежный способ. Установите точку останова в модуле правил регистрации (например, в обработчике подписки на событие) и выполните проведение расходной накладной. В режиме отладки вы сможете пошагово проследить, почему для вашего документа срабатывает отказ в регистрации. Для упрощения задачи можно использовать специальное расширение для отладки обмена через Универсальный формат.

Таким образом, успешная настройка обмена между разными редакциями одной конфигурации почти всегда требует ручного вмешательства. Первая проблема решается корректировкой правил конвертации через расширение, а вторая — внимательным анализом и настройкой фильтров в правилах регистрации.

← На главную