Как исправить ошибку «Поле не найдено Владелец» при синхронизации 1С:Розница и 1С:Бухгалтерия предприятия?

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

При настройке типового обмена данными между конфигурациями 1С:Розница 2.2 и 1С:Бухгалтерия предприятия 3.0 на этапе загрузки данных в бухгалтерию может возникать критическая ошибка выполнения запроса поиска:

{Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(7385)}: Ошибка при вызове метода контекста (Выполнить) Результат = ЗапросПоиска.Выполнить; по причине: {(1, 59)}: Поле не найдено "Владелец" ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты ГДЕ КПП = &КПП И Владелец = &Владелец И Наименование = &Наименование

Разберем детально, почему возникает данная ситуация и какими способами ее можно устранить.

Причина возникновения ошибки

Проанализируем структуру метаданных обеих конфигураций и логику работы подсистемы обмена «Конвертация данных 2.0» (КД 2):

  1. Разница в структуре справочников: В конфигурации 1С:Розница справочник алкогольных лицензий может быть привязан как к контрагентам-поставщикам, так и к собственным организациям предприятия (реквизит Владелец имеет составной тип данных). В конфигурации 1С:Бухгалтерия предприятия аналогичный справочник лицензий подчинен исключительно справочнику Контрагенты.
  2. Формирование поискового запроса: При выгрузке из «Розницы» лицензии собственной организации механизм конвертации данных пытается найти владельца в базе-приемнике. Поскольку по правилам владелец лицензии должен быть контрагентом, механизм поиска пытается сопоставить переданную организацию со справочником Справочник.Контрагенты.
  3. Ошибочное условие поиска: Обработчик КД генерирует динамический запрос сопоставления с учетом контекста подчиненности и добавляет условие Владелец = &Владелец. Так как справочник Контрагенты сам по себе не является подчиненным объектом и не имеет реквизита Владелец, платформа выбрасывает исключение при выполнении запроса СУБД.

Способ 1. Удаление лицензий организаций из состава отправляемых данных через интерфейс БСП

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

Выполним следующие шаги в базе 1С:Розница:

  1. Перейдем в раздел Администрирование → Синхронизация данных → Настройки синхронизации данных.
  2. Выделим нужную настройку обмена с бухгалтерией и нажмем кнопку Состав отправляемых данных (пиктограмма с карандашом/списком).
  3. В открывшемся дереве найдем справочник лицензий алкогольной продукции.
  4. Раскроем список зарегистрированных элементов и удалим регистрацию для всех лицензий, владельцами которых являются собственные организации (лицензии поставщиков-контрагентов можно оставить).
  5. Повторно запустим процесс синхронизации данных.

Способ 2. Программное снятие регистрации изменений

Если записей много или требуется автоматизировать очистку очереди отправки, воспользуемся программным методом через объект ПланыОбмена. Выполним удаление регистрации через внешнюю обработку или консоль кода в «1С:Рознице»:


УзелОбмена = ПланыОбмена.ОбменРозницаБухгалтерияПредприятия30.НайтиПоНаименованию("Бухгалтерия предприятия");

Если ЗначениеЗаполнено(УзелОбмена) Тогда
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Лицензии.Ссылка КАК Ссылка
        |ИЗ
        |   Справочник.ЛицензииПоставщиковАлкогольнойПродукции КАК Лицензии
        |ГДЕ
        |   Лицензии.Владелец ССЫЛКА Справочник.Организации";
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Выборка.Ссылка);
    КонецЦикла;
КонецЕсли;

Также для выборочного удаления регистрации можно применить специализированные обработки (например, типовую обработку «Регистрация изменений для обмена» или инструменты разработчика).

Способ 3. Корректировка правил конвертации объектов (ПКО) в «Конвертации данных 2.1»

Для системного устранения проблемы, чтобы ошибка не повторялась при последующих изменениях лицензий организаций, скорректируем правила обмена в конфигурации Конвертация данных 2.1:

  1. Откроем правила обмена «Розница — Бухгалтерия предприятия».
  2. Найдем ПКО для справочника лицензий на алкоголь.
  3. В обработчике события ПередВыгрузкой добавим условие отсечения лицензий, принадлежащих собственным организациям:
    
    Если ТипЗнч(Источник.Владелец) = Тип("СправочникСсылка.Организации") Тогда
        Отказ = Истина;
    КонецЕсли;
    
  4. Проверим ПКО справочника Контрагенты: убедимся, что для свойств поиска (ИНН, КПП, Наименование) флаг «Искать объект приемника по свойству» не задействует реквизит Владелец.
  5. Сохраним правила конвертации в XML-файл и загрузим их в настройках синхронизации обеих информационных баз.

Способ 4. Обновление релизов конфигураций

Данная коллизия являлась зарегистрированной ошибкой типовых правил обмена определенных релизов (Розница 2.2.4 / БП 3.0.44). Фирма «1С» исправила данное поведение в последующих версиях конфигураций. Обновление конфигураций «1С:Розница» и «1С:Бухгалтерия предприятия» до актуальных версий полностью устраняет проблему некорректного формирования запроса поиска владельца контрагента.

← На главную