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

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

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

В этой статье мы подробно разберем, почему возникает ошибка метаданных, связанная с поиском поля договора контрагента, и проанализируем работающие способы устранения этой проблемы как для базовых, так и для ПРОФ-версий программных продуктов 1С.

Почему возникает эта ошибка? Технический разбор

Давайте вместе проанализируем текст ошибки, который выводится в журнал регистрации:


Ошибка в обработчике события ПередВыгрузкойОбъекта
    ПКО         =  ОтчетОРозничныхПродажах  (Документ: Отчет о розничных продажах)
    Обработчик  =  ПередВыгрузкойОбъекта
    ОписаниеОшибки  =  Ошибка при вызове метода контекста (ВыполнитьПакет): {(181, 4)}: Поле не найдено "ДоговорКонтрагента.Ссылка"
    И ДоговорКонтрагента.Ссылка <> ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка)

Эта ошибка возникает на этапе выгрузки данных из базы-источника (1С:Розница). Причина кроется в масштабном изменении архитектуры метаданных, которое разработчики фирмы 1С провели при переходе на новые релизы ветки 2.3:

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

Ниже рассмотрим по шагам четыре практических способа решения этой проблемы в зависимости от версии вашей конфигурации (Базовая или ПРОФ).

Способ 1. Установка официальных патчей (исправлений) от 1С

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

Проверим наличие и установим исправления:

  1. Перейдем в раздел Администрирование, далее выберем пункт Обслуживание.
  2. Развернем группу Обновление программы и перейдем по ссылке Установка обновлений и исправлений (патчей).
  3. Если на компьютере настроен доступ к интернет-поддержке, программа автоматически найдет актуальный патч, исправляющий работу обработчика выгрузки документов ОтчетОРозничныхПродажах.
  4. Если база работает без доступа к интернету, скачаем необходимый патч вручную с Портала ИТС из раздела обновлений вашего релиза конфигурации «1С:Розница» и загрузим его через кнопку Установить из файла.
  5. Перезапустим программу для применения изменений.

Способ 2. Принудительное ручное обновление правил обмена

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

Выполним процедуру ручного обновления правил:

  1. Найдем на локальном диске компьютера каталог шаблонов обновлений 1С. Обычно файлы правил обмена находятся по следующему пути: C:\Users\<ИмяПользователя>\AppData\Local\1C\1cv8\tmplts\1c\retail\<НомерТекущегоРелиза>\Обмен данными\Обмен с конфигурацией Бухгалтерия предприятия, ред. 3...
  2. Внутри этой папки найдем файл правил выгрузки (обычно это XML-документ с наименованием вида ПравилаОбмена...xml).
  3. В режиме предприятия «1С:Розница» перейдем в меню Администрирование — Синхронизация данных.
  4. Откроем настройки нашей синхронизации, выберем пункт Параметры подключения — Правила конвертации объектов.
  5. Установим переключатель в положение Загрузить из файла на компьютере и выберем подготовленный ранее XML-файл из каталога шаблонов.
  6. Сохраним настройки и повторим попытку синхронизации.

Способ 3. Очистка зарегистрированных устаревших документов

Обратите внимание на детали вашей ошибки. В ней фигурирует конкретный документ: Отчет о розничных продажах 00РТ-000064 от 08.12.2019. Это старый документ, созданный в предыдущих редакциях (вероятно, в Рознице 2.2), который по какой-то причине повторно попал в регистрацию изменений для обмена данными.

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

Проанализируем состав отправляемых данных:

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

Способ 4. Полное пересоздание синхронизации и очистка кэша

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

Выполним следующие шаги:

  1. В обеих базах данных («Розница» и «Бухгалтерия предприятия») зайдем в настройки синхронизации и удалим текущую настройку обмена.
  2. Завершим работу всех пользователей в базах.
  3. Очистим временные файлы (кэш) платформы 1С. Для этого удалим базы из списка запуска и добавим их обратно, либо вручную очистим папки кэша по пути %userprofile%\AppData\Local\1C\1cv8 и %userprofile%\AppData\Roaming\1C\1cv8.
  4. Создадим настройку синхронизации данных заново «с нуля», следуя стандартному помощнику настройки. Программа автоматически сгенерирует новые чистые планы обмена и зарегистрирует к выгрузке только актуальные документы.

Способ 5. Решение для ПРОФ-версий (корректировка правил в КД 2.0)

Если вы являетесь разработчиком или используете версию ПРОФ, вы можете оперативно исправить ошибку в коде правил обмена без ожидания официальных обновлений от вендора. Для этого воспользуемся специализированной конфигурацией «1С:Конвертация данных 2.1».

Разберем алгоритм исправления:

  1. Выгрузим текущие правила обмена из настройки синхронизации в XML-файл.
  2. Запустим конфигурацию «Конвертация данных 2.1» и импортируем туда структуру метаданных «1С:Розница 2.3» и «1С:Бухгалтерия предприятия 3.0».
  3. Загрузим наш XML-файл с правилами обмена.
  4. Найдем правило конвертации объектов (ПКО) для документа ОтчетОРозничныхПродажах.
  5. Перейдем на вкладку Обработчики событий и откроем обработчик ПередВыгрузкойОбъекта.
  6. Найдем в тексте запроса обращение к полю ДоговорКонтрагента. Нам необходимо скорректировать текст запроса так, чтобы он ссылался на актуальные реквизиты метаданных.

Пример корректного обращения к реквизиту договора платежного агента в коде обработчика ПКО:


// Корректируем запрос в правиле конвертации
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ОРПОплаты.ДоговорКонтрагента КАК ДоговорКонтрагента
    |ИЗ
    |	Документ.ОтчетОРозничныхПродажах.ОплатаПлатежнымиКартами КАК ОРПОплаты
    |ГДЕ
    |	ОРПОплаты.Ссылка = &Ссылка
    |	И ОРПОплаты.ДоговорКонтрагента <> ЗНАЧЕНИЕ(Справочник.ДоговорыКонтрагентов.ПустаяСсылка)";

Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
РезультатЗапроса = Запрос.Выполнить();

После корректировки кода сохраняем правила, выгружаем их обратно в XML-файл и загружаем в настройки синхронизации в режиме «1С:Предприятие».

Мы подробно разобрали причины возникновения ошибки интеграции при обновлении на редакцию 1С:Розница 2.3 и изучили все возможные варианты ее локализации. Рекомендуем начать исправление с анализа состава отправляемых данных и удаления старых зависших документов (Способ 3), так как именно они чаще всего являются источником проблем при обновлении метаданных.

← На главную