Содержание:
1. Создание нового расширения 1С: Предприятие 8.3
2. Непредвиденные ситуации с расширением конфигурации 1С: 8.3 и их решение
1. Создание нового расширения 1С: Предприятие 8.3
Условия теста: 1С:Предприятие 8.3 (8.3.23.1782), версия совместимости «Версия 8.3.17», версия MS SQL 13.0.4259.0
Механизм расширений наверное самое востребованное новшество в 1С 8.3. Расширения постоянно развиваются и обрастают новыми возможностями. Вместе с тем, внутреннее устройство расширений закрыто и остается малоизученным, порождая слухи о крахах баз, потерях данных, разрушениях конфигураций. Данная статья является попыткой заглянуть «под капот» расширений, разобраться что там и как оно работает.
Все установленные в базе 1С расширения описываются в таблице _ExtensionsInfo. Ее содержимое, за вычетом служебных полей, можно увидеть в таблице, открываемой по команде главного меню конфигуратора «Конфигурация» - «Расширения конфигурации». Попробуем создать новое расширение. В таблице появляется новая запись:
Результаты
Теперь добавим в расширение документ. Создадим новый реквизит в табличной части документа.
Расш1_Реквизит1
Сохраним конфигурацию, не забыв включить профайлер на запись. После непродолжительной реструктуризации получим вот такой результат:
dbo.Document390
Платформа создала дубликаты всех таблиц расширяемого объекта и перекачала в них данные из оригинальных таблиц. После этого оригинальные таблицы были очищены:
В таблице _Document390_VT11896X1 появился наш реквизит. Процесс организован максимально надежно: база переводится в режим SINGLE_USER, перенос данных 1С делается в транзакции, с использованием промежуточных таблиц.
2. Непредвиденные ситуации с расширением конфигурации 1С: 8.3 и их решение
Что сделает платформа если расширяемый объект будет изменен в нескольких расширениях одновременно? Создаст таблицы с окончанием «X2»? Не угадали. Новые реквизиты добавятся в те же самые таблицы «X1». «Знание» какому расширению что принадлежит надежно спрятано в записях таблицы CONFIG.
Что случится с нашими бесценными данными если по какой-то причине расширение будет отключено? Отключаем расширение, не забываем про профайлер. Изменяются таблицы конфигурации, схемы данных. С самими данными не происходит НИЧЕГО. 1С больше «не видит» реквизит из расширения, но это реализовано на уровне конфигурации, сами данные целы и невредимы.
Что произойдет при удалении 1С расширения? Данные из таблиц «X1» перекачиваются в оригинальные таблицы, за исключением добавленных реквизитов. Таблицы с окончанием «X1» удаляются.
Сообщения
Результаты
Удаление расширения уничтожило данные в реквизитах расширения, аналогично удалению реквизитов из основной конфигурации 1С. Здесь поможет только бэкап.
Выводы.
1. Использовать расширение данных надежно и безопасно. Страхи что расширение «глюкнет» и произойдет потеря данных необоснованны. Даже при физическом повреждении конфигурации данные могут легко восстановлены вручную. Шансы краха конфигурации расширения при реструктуризации аналогичны таковым при реструктуризации основной конфигурации. Не забываем про бэкап перед обновлением.
2. Скорость чтения/записи данных расширенных реквизитов аналогичны реквизитам основной конфигурации. Быстродействия не пострадает, впрочем, лучше тоже не станет.
3. Добавление в расширение реквизитов конфигурации, например для удобства отладки кода в расширении, не приводит к изменению структуры хранения данных 1С. Это всего лишь полезный «синтаксический сахар», используйте его не опасаясь проблем с производительностью.
4. Для любителей (а также профессионалов) прямых запросов к данным 1С у меня плохие новости. После установки расширения 1С ваши скрипты не упадут с ошибкой, но перестанут возвращать данные. К сожалению, легальный способ узнать актуальные наименования нужных таблиц с использованием функции ПолучитьСтруктуруХраненияБазыДанных пока что не работает. У меня функция возвращала оригинальные наименования таблиц, в которых уже ничего не было. Будем надеяться, что разработчики платформы исправят эту ошибку в будущих релизах. Можно конечно попробовать в своем коде обработать ситуацию, добавляя к наименованию таблиц «X1», но нет никаких гарантий что этот трюк будет работать достаточно долго. Вышеописанная логика работы расширений не документирована и в любой момент может поменяться.
Специалист компании "Кодерлайн"
Андрей Дорошенко