Почему возникает ошибка 'Поле объекта не обнаружено (ДатаРегистрации)' при синхронизации справочника ФизическиеЛица между УТ 11.4 и БП3?

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

Рассмотрим распространенную проблему, с которой сталкиваются многие пользователи и программисты при настройке типовой синхронизации данных между конфигурациями 1С:Управление торговлей (УТ 11.4) и 1С:Бухгалтерия предприятия (БП3). Несмотря на то, что обе конфигурации являются типовыми и регулярно обновляются, часто возникают ошибки при обмене данными, особенно при работе со справочником ФизическиеЛица. Одна из таких ошибок — "Поле объекта не обнаружено (ДатаРегистрации)". Разберем эту ситуацию подробнее, выясним причины ее возникновения и предложим несколько вариантов решения, от временной "заплатки" до правильной, не требующей модификации типового кода.

В чем суть проблемы: Ошибка "Поле объекта не обнаружено (ДатаРегистрации)"

Проблема проявляется в процессе получения данных в УТ из БП. В частности, при обмене справочниками ФизическиеЛица система УТ выдает ошибку, указывающую на отсутствие поля ДатаРегистрации. Это означает, что конфигурация БП при выгрузке данных включает в себя реквизит ДатаРегистрации для справочника ФизическиеЛица, тогда как в конфигурации УТ аналогичного реквизита нет. В результате, при попытке загрузить данные, содержащие этот реквизит, УТ не может найти соответствующее поле и процесс синхронизации прерывается с ошибкой конвертации.

Типовое сообщение об ошибке выглядит следующим образом:


Направление: Получение.
ПОД: Справочник_ФизическиеЛица_Получение.
ПКО: Справочник_ФизическиеЛица_Получение.
Объект: Справочник.ФизическиеЛица.
  Событие: Получение.
Объект: Справочник объект: Физические лица, <> ().
Ошибка конвертации свойств.
Ошибка конвертации свойства объекта XDTO, имя свойства: <ДатаРегистрации>.
Поле объекта не обнаружено (ДатаРегистрации)

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

Выясняем причину: почему типовой обмен между УТ и БП может быть "косячным"?

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

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

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

Временное, но быстрое решение: "Заплатка" в коде

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

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

Пример кода для комментирования:


Процедура ДобавитьПКО_Справочник_ФизическиеЛица_Получение(СвойстваШапки) Экспорт
    // ... другие правила конвертации ...
    // ДобавитьПКС(СвойстваШапки, "ДатаРегистрации", "ДатаРегистрации"); // Закомментировали эту строку
    // ... остальные правила конвертации ...
КонецПроцедуры

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

Правильное и рекомендуемое решение: Без изменения типовой конфигурации

Чтобы решить проблему корректно и избежать сложностей при обновлениях, мы должны использовать механизмы, которые позволяют вносить изменения без модификации типовой конфигурации. Рассмотрим два основных подхода: использование расширений конфигурации и корректировку правил конвертации объектов (ПКО/ПКС).

1. Использование расширений конфигурации для модификации кода

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

  1. Создание расширения: В первую очередь, мы создадим новое расширение конфигурации. Для этого в конфигураторе перейдем в меню "Конфигурация" -> "Расширения конфигурации" -> "Добавить расширение". Дадим ему осмысленное имя, например, "ИсправлениеОбменаФизическиеЛица".
  2. Заимствование модуля: Затем нам нужно заимствовать общий модуль МенеджерОбменаЧерезУниверсальныйФормат в наше расширение. Для этого в дереве конфигурации расширения найдем "Общие модули", правой кнопкой мыши выберем "Добавить из конфигурации" и найдем нужный модуль.
  3. Внесение изменений с аннотацией: После того как модуль заимствован, мы сможем открыть его в расширении и внести необходимые изменения в процедуру ДобавитьПКО_Справочник_ФизическиеЛица_Получение. Для того чтобы наши изменения применились, нам необходимо использовать специальную аннотацию &ИзменениеИКонтроль перед процедурой. Эта аннотация указывает системе, что данная процедура в расширении должна заменить или дополнить одноименную процедуру в основной конфигурации.

Пример использования аннотации в расширении:


// В расширении, в заимствованном модуле МенеджерОбменаЧерезУниверсальныйФормат:
&ИзменениеИКонтроль
Процедура ДобавитьПКО_Справочник_ФизическиеЛица_Получение(СвойстваШапки) Экспорт
    // Вызываем оригинальную процедуру или копируем ее содержимое и модифицируем
    // В данном случае, нам нужно лишь пропустить добавление проблемного ПКС.
    // Если нам нужно полностью переопределить поведение, мы можем переписать процедуру.
    // Если же нам нужно только внести небольшую корректировку, мы можем использовать
    // структуру, которая вызовет типовую реализацию, а затем внесет свои правки.
    // Для данного случая, где мы хотим просто не добавлять ПКС, мы можем скопировать
    // код из типовой процедуры и удалить проблемную строку или изменить ее логику.

    // Пример копирования и модификации (учитывая, что типовой код может меняться):
    // Предполагаем, что внутри этой процедуры есть вызов ДобавитьПКС
    // Мы можем либо полностью скопировать типовой код и удалить строку,
    // либо, если типовая процедура позволяет, использовать другие механизмы.
    // Самый простой способ: заимствовать процедуру и закомментировать проблемную строку,
    // если она находится непосредственно в этой процедуре.

    // Пример (как если бы мы просто закомментировали в типовом модуле, но через расширение):
    ДобавитьПКС(СвойстваШапки, "Владелец", "Владелец");
    ДобавитьПКС(СвойстваШапки, "ИНН", "ИНН");
    ДобавитьПКС(СвойстваШапки, "Наименование", "Наименование");
    ДобавитьПКС(СвойстваШапки, "НаименованиеПолное", "НаименованиеПолное");
    ДобавитьПКС(СвойстваШапки, "ОГРНИП", "ОГРНИП");
    ДобавитьПКС(СвойстваШапки, "Пол", "Пол");
    ДобавитьПКС(СвойстваШапки, "Представление", "Представление");
    ДобавитьПКС(СвойстваШапки, "ДатаРождения", "ДатаРождения");
    ДобавитьПКС(СвойстваШапки, "КПП", "КПП");
    ДобавитьПКС(СвойстваШапки, "Код", "Код");
    ДобавитьПКС(СвойстваШапки, "ЭтоГруппа", "ЭтоГруппа");
    // ДобавитьПКС(СвойстваШапки, "ДатаРегистрации", "ДатаРегистрации"); // Вот эту строку мы исключаем или комментируем

    // И так далее, весь остальной типовой код, но без проблемной строки.
    // Важно: при следующем обновлении конфигурации, если в типовой процедуре
    // появятся новые ПКС, нам потребуется актуализировать наш код в расширении.
КонецПроцедуры

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

2. Корректировка правил конвертации объектов (ПКО/ПКС)

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

  1. Открытие правил обмена: Правила обмена обычно хранятся в виде файлов XML (например, ПравилаОбменаУТ11БП3.xml) или могут быть загружены в конфигурацию как макеты. Мы можем открыть их через стандартную обработку "Конвертация данных" (если у нас есть такая) или через меню "Администрирование" -> "Настройки синхронизации данных" -> "Настройки обмена данными" в режиме 1С:Предприятие, где обычно есть возможность выгрузить правила для просмотра или изменения. Если правила встроены в конфигурацию как макет, нам придется заимствовать этот макет в расширение или внести изменения в конфигурацию (что менее предпочтительно). Однако чаще всего используются внешние файлы правил.
  2. Поиск ПКО для "ФизическиеЛица": После открытия правил, нам нужно найти правило конвертации объектов (ПКО) для справочника ФизическиеЛица. Обычно оно называется что-то вроде Справочник_ФизическиеЛица_Получение или Справочник_ФизическиеЛица. Важно найти именно то правило, которое отвечает за загрузку данных в УТ.
  3. Настройка ПКС для реквизита "ДатаРегистрации": Внутри найденного ПКО мы ищем правила конвертации свойств (ПКС). Если реквизит ДатаРегистрации присутствует в списке ПКС на стороне источника (БП), но отсутствует в приемнике (УТ), мы должны настроить его обработку.

В рамках настройки ПКС для реквизита ДатаРегистрации мы можем рассмотреть несколько вариантов:

  1. Игнорировать при загрузке: Мы можем явно указать в ПКС, что этот реквизит должен быть проигнорирован при загрузке в УТ. Это делается путем удаления ПКС для ДатаРегистрации из правил на стороне приемника или указания специального правила, которое не будет пытаться найти это поле. В "Конвертации данных" это обычно реализуется через настройку, где мы можем не указывать поле приемника для данного свойства.
  2. Не выгружать из источника: Более элегантным решением может быть изменение правил выгрузки в БП. Если мы можем модифицировать правила на стороне БП, мы просто удаляем ПКС для ДатаРегистрации из правила выгрузки Справочник_ФизическиеЛица_Выгрузка. Тогда этот реквизит просто не будет включаться в файл обмена.
  3. Преобразовать значение или задать пустое: В некоторых случаях, если нам нужно, чтобы поле ДатаРегистрации все-таки попадало в обмен, но при этом УТ не выдавала ошибку, мы могли бы создать в УТ аналогичный реквизит (если он действительно нужен) или написать правило преобразования, которое присваивало бы этому реквизиту некоторое значение по умолчанию (например, Null или пустую дату) при отсутствии поля в УТ. Однако, в нашем случае, когда поля в УТ просто нет, самым простым будет игнорирование или невыгрузка.

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

Дополнительные рекомендации для стабильной синхронизации

Помимо устранения конкретной ошибки, существуют общие рекомендации, которые помогут нам поддерживать стабильность и надежность обмена данными между УТ и БП:

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

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

← На главную