При обновлении конфигураций 1С, особенно таких крупных, как 1С:ERP Управление предприятием, до новых версий (например, до 2.5.22.77), разработчики и пользователи часто сталкиваются с непредвиденными ошибками, особенно если система содержит нетиповые доработки или расширения. Одной из таких распространенных проблем является ошибка "Неизвестное свойство: Свойство 'ИдентификаторЗаписи' не обнаружено", которая возникает при попытке открыть списки стандартных документов, таких как "Документы продажи (все)", "Документы закупки (все)" или "Внутренние документы (все)". В этом материале мы подробно разберем, почему возникает эта ошибка, как ее диагностировать и какие шаги предпринять для устранения.
Рассмотрим исходную проблему, как она была описана пользователем:
Ошибка при открытие списка документов (все) ошибка Неизвестное свойство: Свойство 'ИдентификаторЗаписи' не обнаружено
...
{Обработка.ЖурналДокументовЗакупки.Команда.ДокументыЗакупки.МодульКоманды(12)}: ОткрытьФорму("Обработка.ЖурналДокументовЗакупки.Форма.СписокДокументов", по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'cr': форма: Элемент имя: { по причине: Неизвестное свойство: Свойство 'ИдентификаторЗаписи' не обнаружено
Для начала, давайте проанализируем сообщение об ошибке, чтобы понять ее корневую причину. Ключевые фразы здесь – это "Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа." и "Ошибка преобразования данных XDTO: Запись значения свойства 'cr': форма: Элемент имя: { по причине: Неизвестное свойство: Свойство 'ИдентификаторЗаписи' не обнаружено".
Ошибка передачи данных между клиентом и сервером указывает на то, что данные, которые платформа 1С пытается переслать с клиентской части (например, тонкого клиента или веб-клиента) на сервер или наоборот, не соответствуют ожидаемому формату или типу. В случае открытия форм, платформа 1С использует механизм сериализации и десериализации, чтобы представить структуру формы и ее данные в виде, пригодном для передачи по сети. Чаще всего это происходит с использованием XML.
Ошибка преобразования данных XDTO прямо указывает на проблему с форматом XML. XDTO (XML Data Transfer Objects) — это стандартный механизм в 1С для работы с XML-схемами и объектами, который позволяет универсально описывать и передавать данные. Когда вы открываете форму списка документов, система формирует ее описание и параметры в виде XML-структуры, а затем отправляет на сервер (или получает с сервера). Если в этой XML-структуре обнаруживается свойство, которое не соответствует описанной XDTO-схеме (например, ИдентификаторЗаписи), возникает ошибка.
Почему это происходит после обновления? При обновлении конфигурации 1С:ERP до новой версии (2.5.22.77 в нашем случае) разработчики вносят изменения в структуру метаданных, объекты конфигурации, формы, а также в механизмы обмена данными. Эти изменения могут затрагивать стандартные свойства объектов или форм, которые передаются между клиентом и сервером. Если у вас используются нетиповые расширения или доработки, которые не были адаптированы к этим изменениям, они могут попытаться работать со старой структурой данных или добавить в нее что-то, что новая версия конфигурации или платформы уже не ожидает или не поддерживает. В результате, при попытке сериализации или десериализации данных (например, описания формы списка) возникает ошибка "Неизвестное свойство", потому что ожидаемая XDTO-схема не содержит это свойство или оно имеет другой тип.
Прежде чем приступить к исправлению, мы должны точно локализовать источник проблемы. Форумная ветка ясно указывает на то, что проблема проявляется в нетиповой конфигурации и связана с неким расширением. Давайте разберем шаги по диагностике:
Проверяем типовую конфигурацию: Сначала убедимся, что сама типовая конфигурация работает без ошибок. Для этого мы можем временно отключить все расширения. Если после отключения расширений проблема исчезает, это подтверждает, что причина кроется именно в одном из них. В нашем случае, автор темы подтвердил, что "когда отключаешь расширение, все ок", что сразу сужает круг поиска.
Идентифицируем проблемное расширение: Если у вас несколько расширений, поочередно отключаем их, чтобы выявить конкретное, которое вызывает ошибку. В данной теме проблема была обнаружена из-за "дополнения в расширении выгрузка на сайт".
Анализируем стек вызова ошибки: Сообщение об ошибке всегда содержит стек вызова, который указывает на место возникновения проблемы в коде. В данном случае это:
{Обработка.ЖурналДокументовЗакупки.Команда.ДокументыЗакупки.МодульКоманды(12)}: ОткрытьФорму("Обработка.ЖурналДокументовЗакупки.Форма.СписокДокументов", ...
Эта строка говорит нам, что ошибка происходит в момент вызова метода ОткрытьФорму из модуля команды журнала документов закупки. Это ключевая точка для начала отладки.
Используем отладчик 1С: Отладчик – наш основной инструмент. Запускаем 1С в режиме отладки и следуем этим шагам:
Устанавливаем точку останова на строку, указанную в стеке вызова: Обработка.ЖурналДокументовЗакупки.Команда.ДокументыЗакупки.МодульКоманды(12).
// Примерный код, где может быть ошибка
// {Обработка.ЖурналДокументовЗакупки.Команда.ДокументыЗакупки.МодульКоманды(12)}
ОткрытьФорму("Обработка.ЖурналДокументовЗакупки.Форма.СписокДокументов", ПараметрыОткрытия); // Здесь ставим точку останова
Включаем остановку по ошибке: Этот функционал очень полезен, когда обычная отладка не входит в проблемный участок кода (как было отмечено в сообщении 9). В режиме отладки в окне "Вызовы" или через меню "Отладка" -> "Настройка" -> "Параметры отладки" устанавливаем флажок "Останавливаться по ошибке". Это позволит отладчику автоматически остановиться в точке возникновения ошибки, даже если она происходит глубоко внутри системных механизмов или в коде расширения, который обычно не виден при пошаговой отладке.
Пошаговая отладка (F10): После остановки на точке входа, используем клавишу F10 (шаг через) или F11 (шаг в) для пошагового выполнения кода. Нам нужно проследить, в какой момент происходит передача данных между клиентом и сервером, и когда именно возникает ошибка XDTO. В сообщении 4 было верно подмечено, что ошибка может быть связана с "передачей формы с клиента на сервер в параметр или какое-то значение типо таблицы идет с сервера на клиент".
Анализ параметров формы: Особое внимание уделяем параметрам, которые передаются в метод ОткрытьФорму. Возможно, расширение модифицирует или добавляет какие-то параметры, которые несовместимы с новой версией ERP. Проверяем состав структуры или массива, передаваемого в качестве второго параметра метода ОткрытьФорму.
Поскольку виновником является расширение "выгрузка на сайт", наша задача – тщательно его проинспектировать. Автор темы уточнил, что "В расширении нет форм, есть заимствованные объекты из основной конфигурации. Есть подписка на событие, которая тупа передают на сайт по регламенту." Это важная информация.
Мы выясним, как именно расширение, предназначенное для выгрузки на сайт, может влиять на открытие форм в 1С:ERP:
Заимствованные объекты: Если расширение заимствует объекты из основной конфигурации (например, общие модули, формы, реквизиты объектов), то изменения в этих объектах в типовой конфигурации после обновления могут конфликтовать с логикой расширения. Например, если типовая форма имела реквизит, который расширение модифицировало или использовало, а после обновления этот реквизит был удален, переименован или его тип изменился, это может вызвать ошибку при сериализации формы.
Подписки на события: Несмотря на то, что подписка на событие по регламенту для выгрузки на сайт может казаться не связанной напрямую с открытием форм, мы не можем полностью исключать ее влияние. Подписки на события могут модифицировать данные объектов перед их записью или после. Если подписка срабатывает на событие, которое косвенно влияет на сериализацию данных формы (например, изменение какого-либо свойства объекта, связанного с формой, которое затем будет сериализовано в XDTO), это может быть причиной.
Ключевой момент: Если ошибка "Неизвестное свойство: Свойство 'ИдентификаторЗаписи' не обнаружено" возникает при открытии формы, значит, это свойство (или его отсутствие) влияет на процесс сериализации/десериализации самой формы или данных, которые передаются вместе с ней. Это может быть:
Реквизит формы или объекта: Возможно, ИдентификаторЗаписи является реквизитом формы или того объекта, данные которого отображаются в списке. После обновления его либо удалили, либо переименовали, либо изменили его тип, а расширение все еще пытается его использовать или ожидает его в определенном формате.
Свойство в параметрах формы: Расширение может добавлять или изменять параметры, передаваемые в форму (например, через структуру параметров). Если в этой структуре есть ключ ИдентификаторЗаписи, а типовая XDTO-схема для параметров формы в новой версии его не предусматривает, возникнет ошибка.
Механизмы идентификации записей: Свойство ИдентификаторЗаписи часто используется для уникальной идентификации элементов в списках или таблицах. Изменения в механизмах работы с идентификаторами в новой версии ERP могут конфликтовать с логикой расширения.
Проблема с пакетами XDTO: Как было упомянуто в сообщении 5, "Тут сами пакета XDTO или Web сервисы разная структура после обновления." Возможно, структура пакетов XDTO, используемых для сериализации форм, изменилась в ERP 2.5.22.77, и расширение, созданное под старую структуру, пытается записать свойство ИдентификаторЗаписи, которого нет в новой схеме.
Когда мы локализовали проблему в расширении и поняли ее суть, можем приступить к поиску решения:
Адаптация расширения: Это наиболее вероятный и правильный путь. Мы должны внести изменения в код расширения, чтобы оно стало совместимым с новой версией ERP.
Изучите изменения в конфигурации: Проанализируйте документацию по обновлению 1С:ERP до версии 2.5.22.77. Особое внимание уделите изменениям в структурах данных, формах, общих модулях, которые могли быть затронуты расширением. Ищите информацию о любых изменениях, связанных с идентификаторами или свойствами, имеющими отношение к объектам, которые обрабатывает ваше расширение.
Модифицируйте код расширения: Если расширение добавляет или изменяет реквизиты форм/объектов, которые теперь вызывают конфликт:
Удалите или скорректируйте код, который ссылается на устаревшее свойство ИдентификаторЗаписи, если оно было удалено или переименовано в типовой конфигурации.
Если расширение само добавляло это свойство, убедитесь, что оно корректно обрабатывается при сериализации XDTO, либо перестаньте его добавлять, если оно больше не требуется или конфликтует с новыми механизмами.
Если расширение использует заимствованные объекты, убедитесь, что они корректно работают с обновленной типовой конфигурацией. Возможно, потребуется переопределить методы или обработчики, чтобы они учитывали новые структуры.
Актуализируйте XDTO-схемы: Если ваше расширение напрямую работает с XDTO-схемами для обмена данными, необходимо проверить и обновить эти схемы в соответствии с изменениями в типовой конфигурации 1С:ERP. Возможно, потребуется перегенерировать XDTO-пакеты или обновить их определения.
Временное отключение функционала: Если адаптация расширения требует времени, а система должна работать, можно временно отключить или изолировать тот функционал расширения, который вызывает ошибку (например, временно деактивировать подписку на событие, связанное с выгрузкой на сайт, или удалить проблемный заимствованный реквизит), чтобы восстановить работоспособность основных функций.
Проверка версии платформы 1С: Хотя в данном случае проблема, скорее всего, в расширении, всегда полезно убедиться, что используется актуальная и стабильная версия платформы 1С. В некоторых версиях платформы (например, 8.3.22.1603 и 8.3.21.1508) были известные ошибки преобразования XDTO (например, с числами с плавающей точкой), которые были исправлены в более поздних релизах (8.3.22.1672/8.3.21.1607 и выше). Убедитесь, что ваша платформа обновлена до одной из последних стабильных версий.
Чтобы минимизировать подобные проблемы в будущем, мы рекомендуем придерживаться следующих практик:
Тщательное тестирование: После каждого обновления типовой конфигурации 1С обязательно проводите комплексное тестирование всех ваших расширений и нетиповых доработок. Используйте тестовые копии базы для проверки функциональности до вывода обновления в продуктив.
Инструменты сравнения и объединения: Активно используйте инструменты для сравнения и объединения конфигураций (например, в Конфигураторе 1С), чтобы отслеживать изменения в типовой конфигурации, которые могут повлиять на ваши расширения. Это поможет оперативно выявлять потенциальные конфликты.
Минимизация вмешательств: Стремитесь к минимальным и наиболее изолированным изменениям в расширениях. Чем меньше расширение изменяет стандартную логику или структуру данных, тем меньше вероятность конфликтов при обновлении.
Документирование изменений: Ведите подробную документацию по всем нетиповым доработкам и расширениям, включая их назначение, измененные объекты и причины изменений. Это упростит процесс их адаптации в будущем.
Поиск готовых решений: Возможно, разработчики расширения уже выпустили новую версию, совместимую с вашей версией 1С:ERP. Всегда проверяйте официальные источники или сообщества разработчиков.
Проблема с ошибкой "Неизвестное свойство: Свойство 'ИдентификаторЗаписи' не обнаружено" при открытии списков документов в 1С:ERP после обновления является типичным примером конфликта между типовой конфигурацией и расширением. Следуя вышеуказанным шагам по диагностике и адаптации, мы сможем эффективно устранить эту проблему и обеспечить стабильную работу вашей информационной системы.