Расширения (проблемы и решения)

Некоторые особенности работы с расширениями.

Небольшое вступление — начну с того, что считаю расширения замечательным механизмом (несмотря на возникающие проблемы и некоторые неудобства при разработке). На текущий момент полностью отказался от внешних отчетов, обработок, печатных форм и перешел на расширения.

Про расширения написано уже очень много, последняя большая статься О расширениях замолвите слово.. , но нигде не описаны 2 основные проблемы при работе с расширениями (или, возможно, я этого не заметил)

 

Проблема №1

Работа с таблицей невозможна. Структура таблицы несовместима с текущими расширениями конфигурации

Данная ошибка возникает при отключении расширения (снятие флага "Активно") при попытке прочитать таблицы (запросом, набором записей и т.д.) которые были модифицированы расширением.

Пример: 

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

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

 

Проблема №2

На форуме периодически встречаются темы следующего содержания:

Расширения ничего не знают о типах расширяемой конфигурации (как, впрочем, и о других расширениях), как следствие невозможно в расширениях использовать тип "ЛюбаяСсылка" — какие проблемы мы при этом получаем!?

Казалось бы, невозможность указать тип реквизита "ЛюбаяСсылка" легко обходится заимствованием документов,справочников и т.д. и указанием их типов — да, все так, но есть несколько но:

  • Все это нас устроит только до тех пор, пока не появится необходимость указать тип из другого расширения (его объекты заимствовать не получится)
  • Невозможность использовать документы — основания из расширений т.е. если мы в расширении создали новый документ и хотим его выбирать как основании для документа конфигурации (например в документе "Реализация товаров и услуг" выбрать документ из расширения) у нас ничего не выйдет. 

Отсюда вытекает следующая проблема — невозможность создать структуру подчиненности (структуру взаимосвязей) объектов так как их нельзя добавить в критерии отбора, но можно воспользоваться расширением которое решает данную проблему Структура подчиненности

  • Невозможность использовать механизм дополнительных реквизитов.

Решение:

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

 

Личный опыт

При написании расширений, которые предполагают использование ссылочных типов, я использую следующий подход:

Вместо реквизита "Ссылка" я создаю 2 реквизита "СсылкаID" и "ТипCcылки" где:

  • СсылкаID — Идентификатор ссылки (строка 36 символов) XMLСтрока(Ссылка)
  • ТипCcылки" — Тип ссылки (либо строка XMLТип(ТипЗнч(Ссылка)).ИмяТипа, либо ссылка нас справочник "Идентификаторы объектов метаданныхрасширений")

Конечно, у такого подхода есть свои минусы (отсутствие ссылочной проверки, отсутствие автоматического включения в интерфейс объекта), но он позволяет создавать универсальные расширения, которые будут работать в паре с любыми другими расширениями.

1 Comment

  1. mifka186
    Работа с таблицей невозможна. Структура таблицы несовместима с текущими расширениями конфигурации

    С такой ошибкой столкнулся когда в обновление типовой конфы был переименован справочник. Т.е. был в расширении заимствован справочник НоменклатураПоставщиков, а после обновления он стал называться УдалитьНоменклатураПоставщиков. В расширении он остался заимствован по старому имени.

    Решил проблему удалением этого объекта из расширения вообще.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *