Обновление типовых конфигураций 1С, особенно таких крупных, как Бухгалтерия предприятия, редакция 3.0, часто преподносит сюрпризы разработчикам расширений. Одной из самых масштабных проблем последнего времени стал переход на новую версию БЭД (Библиотеки электронных документов), начиная с релизов 3.0.95.29 и выше. В этой статье мы подробно разберем, почему ваше расширение перестало работать, и как пошагово восстановить его функциональность, если система выдает ошибки о «ненайденных объектах».
Проанализируем ситуацию: при попытке открыть список документов (например, Реализации или Счета покупателям) система выдает критическую ошибку: Таблица не найдена "РегистрСведений.СостоянияЭД". Выясним причину. Дело в том, что в новых версиях конфигурации 1С полностью переработала архитектуру хранения данных электронного документооборота. Старые объекты были удалены или переименованы, а их место заняли новые, с другой структурой и связями.
Основная сложность заключается в том, что расширения хранят в себе «снимки» метаданных основной конфигурации. Если в расширение была добавлена форма списка, она сохраняет текст запроса динамического списка в том виде, в котором он был в момент создания расширения. Когда основная конфигурация обновляется и старая таблица исчезает из базы данных, запрос в расширении продолжает на нее ссылаться, что и приводит к краху системы.
Первым делом нам необходимо понять, на что заменять отсутствующие объекты. Рассмотрим таблицу соответствия, актуальную для перехода на БЭД версии 1.9 и выше:
Перечисление.СостоянияВерсийЭД — заменено на Перечисление.СостоянияДокументовЭДО.Перечисление.ВидыЭД — заменено на Перечисление.ТипыДокументовЭДО.РегистрСведений.СостоянияЭД — заменен на основной регистр РегистрСведений.СостоянияДокументовЭДО.Важно помнить, что в некоторых случаях старые объекты могут оставаться в конфигурации, но с префиксом Удалить.... Однако использование таких объектов — лишь временная мера, которая не гарантирует стабильной работы в будущем.
Разберем, где именно в коде и метаданных могут прятаться ссылки на старые объекты. Обычный поиск по конфигурации (Ctrl+Shift+F) в пределах расширения часто не дает результатов, так как ссылки могут находиться внутри динамических списков или схем компоновки данных (СКД), которые хранятся в бинарном или XML-виде.
Для эффективного поиска выполним следующие действия:
СостоянияЭД, перейдем к проверке форм, добавленных в расширение.Посмотрим на пример типичной ошибки в запросе динамического списка. Часто разработчики расширений заимствуют форму и модифицируют ее. В свойствах реквизита Список (тип ДинамическийСписок) хранится текст запроса, содержащий ЛЕВОЕ СОЕДИНЕНИЕ. Рассмотрим, как выглядит проблемный участок:
// Старый вариант запроса, вызывающий ошибку
ВЫБРАТЬ
ДокументРеализация.Ссылка,
СостоянияЭД.Состояние КАК СостояниеЭДО
ИЗ
Документ.РеализацияТоваровУслуг КАК ДокументРеализация
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияЭД КАК СостоянияЭД
ПО ДокументРеализация.Ссылка = СостоянияЭД.Ссылка
Чтобы исправить это, нам необходимо вручную отредактировать запрос. Нажмем на гиперссылку «Открыть» в свойстве «Настройка списка» или «Текст запроса». Нам нужно заменить старый регистр на новый. Проанализируем обновленный синтаксис:
// Исправленный вариант запроса
ВЫБРАТЬ
ДокументРеализация.Ссылка,
СостоянияЭДО.Состояние КАК СостояниеЭДО
ИЗ
Документ.РеализацияТоваровУслуг КАК ДокументРеализация
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияДокументовЭДО КАК СостоянияЭДО
ПО ДокументРеализация.Ссылка = СостоянияЭДО.Документ
Обратите внимание: в новом регистре СостоянияДокументовЭДО ключевое поле называется Документ, а не Ссылка. Это критически важное изменение, без которого соединение таблиц не будет работать корректно.
Если в вашем коде или в реквизитах расширения используются ссылки на старые перечисления, их нужно переподключить. Разберем алгоритм:
Перечисление.СостоянияДокументовЭДО) в расширение из основной конфигурации.Перечисления.СостоянияВерсийЭД.Подписан на новые значения из Перечисления.СостоянияДокументовЭДО.Проанализируем программный код. Часто состояние ЭДО получается через общие модули. Вместо прямого обращения к регистрам, рекомендуется использовать функции библиотеки электронных документов, которые 1С поддерживает в актуальном состоянии.
Бывают ситуации, когда вы исправили все запросы и модули, но ошибка {(62, 21)}: Таблица не найдена сохраняется. Это происходит из-за механизма условного оформления динамического списка. Рассмотрим по шагам, как это исправить:
Список.Если расширение очень объемное, ручная правка каждой формы может занять много времени. Рассмотрим альтернативный метод:
Воспользуемся функцией выгрузки конфигурации в файлы. Для этого выберем пункт меню «Конфигурация» — «Разработка конфигурации» — «Выгрузить конфигурацию в файлы». После этого мы сможем использовать любой текстовый редактор с поддержкой поиска по всей папке (например, VS Code). Ищем все вхождения СостоянияЭД и СостоянияВерсийЭД во всех XML-файлах форм. Это позволит быстро найти забытые привязки в схемах компоновки данных или настройках отчетов.
Также полезно использовать инструмент «Отчет о сравнении конфигураций». При обновлении типовой конфигурации сохраните отчет о сравнении в формате XML. Там будут четко видны переименования объектов, что позволит вам составить точный список замен для вашего расширения.
Подводя итог, адаптация расширения при глобальном обновлении БЭД — это не просто поиск и замена текста, а работа с архитектурными изменениями. Понимая, как связаны новые регистры и как динамические списки хранят свои запросы, мы можем оперативно восстановить работоспособность системы без привлечения сторонних специалистов.