Ошибка подключения расширения в 1С 8.3
С недавних пор в платформе 1С 8.3 появились расширения, которые немного развязали руки разработчикам. Я тоже сразу начал пользоваться этой возможностью. Но вот дошло дело до обновлений конфигурации 1С БП 3.0 в которой были подключены расширения.
После обновления, при запуске конфигурации словил вот такое сообщение: "Ошибка подключения расширения, не найден объект. ". И расширение соответственно не подключилось. Какой именно объект в данном случае не важно, у меня ругнулся на "УполномоченноеЛицо". Скажу, что я делал расширение формы документа Реализация товаров и услуг и ругался он мне на объект из данного документа. Соответственно я подумал, что надо как-то обновить форму в расширении, тем более что она действительно изменилась. Т.к. информации по расширениям пока мало, стал перечитывать то, что написано на сайте ИТС.
Нашел следующее:
"В том случае, если прикладному разработчику необходимо обновить форму в расширении, ему следует использовать командуРасширения – Обновить расширение формы редактора формы. Обновление может потребоваться в том случае, если необходимо перенести в расширения изменения и дополнения, которые выполнены в расширяемой конфигурации после создания расширения формы".
Обновил форму, перезапустил конфигурацию, но ошибка осталась.
Стал читать дальше:
"При попытке подключения расширений, каждое расширение последовательно проверяется на соответствие контролируемых реквизитов между расширением и конфигурацией информационной базы. Если хотя-бы один контролируемый реквизит не проходит проверку, пользователю выдается сообщение об ошибке и это расширение не подключается."
Пошел проверять, не изменилось ли название реквизита "УполномоченноеЛицо" в конфигурации информационной базы. И оказалось, что действительно изменилось, стало называться, как это обычно бывает "УдалитьУполномоченноеЛицо". Переименовал название реквизита в расширении на такое же и ошибка исчезла, расширение подключилось.
При сохранении расширения конфигурации вы получаете ошибку:
«Нельзя установить область действия расширения конфигурации в значение РазделениеДанных в информационной базе, не использующей разделение данных»
Область действия можно изменить в конфигураторе: Конфигурации — Расширения конфигурации.
В списке расширений найдите нужное и правой кнопкой мыши вызовите контекстное меню и выполните пункт «Изменить область действия расширения конфигурации».
Небольшое вступление — начну с того, что считаю расширения замечательным механизмом (несмотря на возникающие проблемы и некоторые неудобства при разработке). На текущий момент полностью отказался от внешних отчетов, обработок, печатных форм и перешел на расширения.
Про расширения написано уже очень много, последняя большая статься О расширениях замолвите слово.. , но нигде не описаны 2 основные проблемы при работе с расширениями (или, возможно, я этого не заметил)
Проблема №1
Работа с таблицей невозможна. Структура таблицы несовместима с текущими расширениями конфигурации
Данная ошибка возникает при отключении расширения (снятие флага "Активно") при попытке прочитать таблицы (запросом, набором записей и т.д.) которые были модифицированы расширением.
Создали расширение, в котором есть заимствованный регистр накопления и добавленный новый документ, который участвует в движении по этому регистру. Даже несмотря на то, что новый добавленный документ не сделал еще никаких движений по регистру, ошибка будет появляться.
Возможность отключить расширение "на время" и продолжить работу в базовой конфигурации очень удобная штука, но к сожалению сделать это как оказалось не всегда возможно.
Проблема №2
На форуме периодически встречаются темы следующего содержания:
Расширения ничего не знают о типах расширяемой конфигурации (как, впрочем, и о других расширениях), как следствие невозможно в расширениях использовать тип "ЛюбаяСсылка" — какие проблемы мы при этом получаем!?
Казалось бы, невозможность указать тип реквизита "ЛюбаяСсылка" легко обходится заимствованием документов,справочников и т.д. и указанием их типов — да, все так, но есть несколько но:
- Все это нас устроит только до тех пор, пока не появится необходимость указать тип из другого расширения (его объекты заимствовать не получится)
- Невозможность использовать документы — основания из расширений т.е. если мы в расширении создали новый документ и хотим его выбирать как основании для документа конфигурации (например в документе "Реализация товаров и услуг" выбрать документ из расширения) у нас ничего не выйдет.
Отсюда вытекает следующая проблема — невозможность создать структуру подчиненности (структуру взаимосвязей) объектов так как их нельзя добавить в критерии отбора, но можно воспользоваться расширением которое решает данную проблему Структура подчиненности
- Невозможность использовать механизм дополнительных реквизитов.
Для того, чтобы использовать отчетыобработки основной конфигурации (в которых есть реквизиты с типом "ЛюбаяСсылка" или конкретным типом) в своих расширениях необходимо либо заменить используемый тип на тип "Неопределено", либо заимствовать отчетобработку и выполнить замену типа уже в расширении.
Личный опыт
При написании расширений, которые предполагают использование ссылочных типов, я использую следующий подход:
Вместо реквизита "Ссылка" я создаю 2 реквизита "СсылкаID" и "ТипCcылки" где:
- СсылкаID — Идентификатор ссылки (строка 36 символов) XMLСтрока(Ссылка)
- ТипCcылки" — Тип ссылки (либо строка XMLТип(ТипЗнч(Ссылка)).ИмяТипа, либо ссылка нас справочник "Идентификаторы объектов метаданныхрасширений")
Конечно, у такого подхода есть свои минусы (отсутствие ссылочной проверки, отсутствие автоматического включения в интерфейс объекта), но он позволяет создавать универсальные расширения, которые будут работать в паре с любыми другими расширениями.