Рассмотрим распространенную проблему, с которой сталкиваются многие пользователи и программисты при настройке типовой синхронизации данных между конфигурациями 1С:Управление торговлей (УТ 11.4) и 1С:Бухгалтерия предприятия (БП3). Несмотря на то, что обе конфигурации являются типовыми и регулярно обновляются, часто возникают ошибки при обмене данными, особенно при работе со справочником ФизическиеЛица. Одна из таких ошибок — "Поле объекта не обнаружено (ДатаРегистрации)". Разберем эту ситуацию подробнее, выясним причины ее возникновения и предложим несколько вариантов решения, от временной "заплатки" до правильной, не требующей модификации типового кода.
Проблема проявляется в процессе получения данных в УТ из БП. В частности, при обмене справочниками ФизическиеЛица система УТ выдает ошибку, указывающую на отсутствие поля ДатаРегистрации. Это означает, что конфигурация БП при выгрузке данных включает в себя реквизит ДатаРегистрации для справочника ФизическиеЛица, тогда как в конфигурации УТ аналогичного реквизита нет. В результате, при попытке загрузить данные, содержащие этот реквизит, УТ не может найти соответствующее поле и процесс синхронизации прерывается с ошибкой конвертации.
Типовое сообщение об ошибке выглядит следующим образом:
Направление: Получение.
ПОД: Справочник_ФизическиеЛица_Получение.
ПКО: Справочник_ФизическиеЛица_Получение.
Объект: Справочник.ФизическиеЛица.
Событие: Получение.
Объект: Справочник объект: Физические лица, <> ().
Ошибка конвертации свойств.
Ошибка конвертации свойства объекта XDTO, имя свойства: <ДатаРегистрации>.
Поле объекта не обнаружено (ДатаРегистрации)
Эта ситуация может показаться парадоксальной, ведь мы используем последние релизы типовых конфигураций, а обмен между УТ и БП — одна из самых популярных связок. Однако, как мы выясним далее, подобные расхождения вполне объяснимы.
Давайте проанализируем ситуацию и выясним, почему даже в типовых конфигурациях, использующих последние релизы, могут возникать такие ошибки при обмене. Понимание причин поможет нам выбрать наиболее подходящее решение.
ДатаРегистрации в справочнике ФизическиеЛица для специфических учетных целей (например, для бухгалтерского или налогового учета, связанного с датой постановки на учет физического лица как предпринимателя или для каких-либо внутренних нужд), который в УТ просто не нужен или еще не был добавлен. Такая асинхронность в развитии конфигураций — обычное явление.Итак, причина кроется в естественных расхождениях между структурами данных БП и УТ, которые типовые правила обмена не всегда могут корректно обработать. Теперь перейдем к возможным решениям.
Если нам требуется немедленно восстановить работоспособность обмена, и нет времени на более глубокое и правильное решение, мы можем применить временную "заплатку", как это было предложено в одном из сообщений форума. Суть этого метода заключается в комментировании строки кода, отвечающей за передачу проблемного реквизита.
МенеджерОбменаЧерезУниверсальныйФормат. Это один из ключевых модулей, который отвечает за формирование правил конвертации для обмена данными в универсальном формате.ДобавитьПКО_Справочник_ФизическиеЛица_Получение. Эта процедура отвечает за добавление правил конвертации свойств (ПКС) для справочника ФизическиеЛица при его получении.ДатаРегистрации. Нам нужно закомментировать эту строку, чтобы система перестала пытаться передавать или ожидать этот реквизит.Пример кода для комментирования:
Процедура ДобавитьПКО_Справочник_ФизическиеЛица_Получение(СвойстваШапки) Экспорт
// ... другие правила конвертации ...
// ДобавитьПКС(СвойстваШапки, "ДатаРегистрации", "ДатаРегистрации"); // Закомментировали эту строку
// ... остальные правила конвертации ...
КонецПроцедуры
Важное предупреждение: Этот метод является временным и крайне нежелательным для типовых конфигураций. Любое прямое изменение типового кода конфигурации приведет к тому, что при следующем обновлении вы потеряете свои изменения. Более того, это может затруднить процесс обновления и привести к необходимости ручного слияния конфигураций. Мы используем этот способ только в крайних случаях, когда нет возможности оперативно применить более правильное решение. Мы должны помнить, что всегда есть более элегантные и поддерживаемые методы.
Чтобы решить проблему корректно и избежать сложностей при обновлениях, мы должны использовать механизмы, которые позволяют вносить изменения без модификации типовой конфигурации. Рассмотрим два основных подхода: использование расширений конфигурации и корректировку правил конвертации объектов (ПКО/ПКС).
Механизм расширений конфигурации — это современный и рекомендуемый способ доработки функционала 1С без изменения типовой конфигурации. Он позволяет нам переопределять или дополнять существующие процедуры и функции, сохраняя при этом возможность бесшовного обновления основной конфигурации.
МенеджерОбменаЧерезУниверсальныйФормат в наше расширение. Для этого в дереве конфигурации расширения найдем "Общие модули", правой кнопкой мыши выберем "Добавить из конфигурации" и найдем нужный модуль.ДобавитьПКО_Справочник_ФизическиеЛица_Получение. Для того чтобы наши изменения применились, нам необходимо использовать специальную аннотацию &ИзменениеИКонтроль перед процедурой. Эта аннотация указывает системе, что данная процедура в расширении должна заменить или дополнить одноименную процедуру в основной конфигурации.Пример использования аннотации в расширении:
// В расширении, в заимствованном модуле МенеджерОбменаЧерезУниверсальныйФормат:
&ИзменениеИКонтроль
Процедура ДобавитьПКО_Справочник_ФизическиеЛица_Получение(СвойстваШапки) Экспорт
// Вызываем оригинальную процедуру или копируем ее содержимое и модифицируем
// В данном случае, нам нужно лишь пропустить добавление проблемного ПКС.
// Если нам нужно полностью переопределить поведение, мы можем переписать процедуру.
// Если же нам нужно только внести небольшую корректировку, мы можем использовать
// структуру, которая вызовет типовую реализацию, а затем внесет свои правки.
// Для данного случая, где мы хотим просто не добавлять ПКС, мы можем скопировать
// код из типовой процедуры и удалить проблемную строку или изменить ее логику.
// Пример копирования и модификации (учитывая, что типовой код может меняться):
// Предполагаем, что внутри этой процедуры есть вызов ДобавитьПКС
// Мы можем либо полностью скопировать типовой код и удалить строку,
// либо, если типовая процедура позволяет, использовать другие механизмы.
// Самый простой способ: заимствовать процедуру и закомментировать проблемную строку,
// если она находится непосредственно в этой процедуре.
// Пример (как если бы мы просто закомментировали в типовом модуле, но через расширение):
ДобавитьПКС(СвойстваШапки, "Владелец", "Владелец");
ДобавитьПКС(СвойстваШапки, "ИНН", "ИНН");
ДобавитьПКС(СвойстваШапки, "Наименование", "Наименование");
ДобавитьПКС(СвойстваШапки, "НаименованиеПолное", "НаименованиеПолное");
ДобавитьПКС(СвойстваШапки, "ОГРНИП", "ОГРНИП");
ДобавитьПКС(СвойстваШапки, "Пол", "Пол");
ДобавитьПКС(СвойстваШапки, "Представление", "Представление");
ДобавитьПКС(СвойстваШапки, "ДатаРождения", "ДатаРождения");
ДобавитьПКС(СвойстваШапки, "КПП", "КПП");
ДобавитьПКС(СвойстваШапки, "Код", "Код");
ДобавитьПКС(СвойстваШапки, "ЭтоГруппа", "ЭтоГруппа");
// ДобавитьПКС(СвойстваШапки, "ДатаРегистрации", "ДатаРегистрации"); // Вот эту строку мы исключаем или комментируем
// И так далее, весь остальной типовой код, но без проблемной строки.
// Важно: при следующем обновлении конфигурации, если в типовой процедуре
// появятся новые ПКС, нам потребуется актуализировать наш код в расширении.
КонецПроцедуры
Использование расширений значительно упрощает поддержку конфигурации и позволяет избежать проблем при обновлении, так как наши изменения хранятся отдельно от типовой конфигурации.
Наиболее гибким и правильным способом является изменение самих правил конвертации объектов. Это позволяет нам точно определить, как должен обрабатываться каждый реквизит при обмене. Этот метод не требует изменения кода и полностью управляется через пользовательский интерфейс или файлы правил обмена.
ПравилаОбменаУТ11БП3.xml) или могут быть загружены в конфигурацию как макеты. Мы можем открыть их через стандартную обработку "Конвертация данных" (если у нас есть такая) или через меню "Администрирование" -> "Настройки синхронизации данных" -> "Настройки обмена данными" в режиме 1С:Предприятие, где обычно есть возможность выгрузить правила для просмотра или изменения. Если правила встроены в конфигурацию как макет, нам придется заимствовать этот макет в расширение или внести изменения в конфигурацию (что менее предпочтительно). Однако чаще всего используются внешние файлы правил.ФизическиеЛица. Обычно оно называется что-то вроде Справочник_ФизическиеЛица_Получение или Справочник_ФизическиеЛица. Важно найти именно то правило, которое отвечает за загрузку данных в УТ.ДатаРегистрации присутствует в списке ПКС на стороне источника (БП), но отсутствует в приемнике (УТ), мы должны настроить его обработку.
В рамках настройки ПКС для реквизита ДатаРегистрации мы можем рассмотреть несколько вариантов:
ДатаРегистрации из правил на стороне приемника или указания специального правила, которое не будет пытаться найти это поле. В "Конвертации данных" это обычно реализуется через настройку, где мы можем не указывать поле приемника для данного свойства.ДатаРегистрации из правила выгрузки Справочник_ФизическиеЛица_Выгрузка. Тогда этот реквизит просто не будет включаться в файл обмена.ДатаРегистрации все-таки попадало в обмен, но при этом УТ не выдавала ошибку, мы могли бы создать в УТ аналогичный реквизит (если он действительно нужен) или написать правило преобразования, которое присваивало бы этому реквизиту некоторое значение по умолчанию (например, Null или пустую дату) при отсутствии поля в УТ. Однако, в нашем случае, когда поля в УТ просто нет, самым простым будет игнорирование или невыгрузка.После внесения изменений в правила конвертации, мы сохраняем их и загружаем обратно в конфигурации (или указываем путь к файлам правил) для активации. Этот метод является наиболее гибким, так как позволяет тонко настроить обмен для каждого реквизита.
Помимо устранения конкретной ошибки, существуют общие рекомендации, которые помогут нам поддерживать стабильность и надежность обмена данными между УТ и БП:
Решение проблемы с реквизитом ДатаРегистрации является типичным примером, демонстрирующим необходимость комплексного подхода к настройке и поддержанию синхронизации данных в 1С. Используя рекомендованные подходы с расширениями и коррекцией правил конвертации, мы сможем добиться стабильного и надежного обмена без постоянного вмешательства в типовой код.