Универсальная обработка переноса данных из основной конфигурации в расширение

Публикация № 1304175

Разработка - Обработки - Универсальные обработки

Обработка предназначена для разработчиков, для тех случаев, когда ранее дописанный функционал, перенесен в расширение и появляется необходимость перенести данные из объектов основной конфигурации в объекты расширения. Перенос осуществляется настройкой соответствия объектов основной конфигурации объектам расширения.

Преамбула

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

Использование расширений позволяет снизить затраты времени на обновление, за счет наличия только конфигурации поставщика и отсутствия основной конфигурации.

Зачастую появляется необходимость переноса уже написанных доработок в расширение. И, в этом случае, возникает задача по переносу данных, так как фактически объекты доработок основной конфигурации и объекты расширения - это разные объекты. Можно в этом случае воспользоваться конвертацией данных, тем более, что сама конвертация не будет сложной, так как структура объектов основной конфигурации и расширения зачастую повторяется. Однако, такую конвертацию придется писать для каждого случая переноса доработок в расширение.

Предлагаемая обработка осуществляет перенос данных из объектов основной конфигурации в объекты расширения. Обработка универсальная и позволяет выгружать данные по объектам конфигурации, имеет интерфейс, отображающий объекты в виде дерева.

 

Как это работает

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

Заполнение дерева метаданных

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

Выбор объекта метаданных

Соответствие реквизитов

Перенос осуществляется путем создания объектов и записи наборов данных регистров в расширении. Причем, ссылочные данные переносятся с учетом конвертации данных ссылочного типа в объект расширения.

 

Резюме

Обработка позволяет без лишних затрат времени и написания правил конвертации перенести данных из объектов основной конфигурации в расширение.

Тестировалось на платформе 8.3.17.1549. Однако будет работать и на более меньших релизах. Основное требование: режим совместимости конфигурации, для которой может применяться обработка, должен быть не ниже 8.3.14.

 

Обновления

1.0.1. Удалены отладочные комментарии при записи объектов  расширения

Известные проблемы

1. При длине кода справочника равной нулю, возможны ошибки в работе

2. Возможны ошибки в некоторых случаях при получении имени объекта метаданных

Скачать файлы

Наименование Файл Версия Размер
Универсальная обработка переноса данных из основной конфигурации в расширение:

.epf 13,63Kb
05.10.20
11
.epf 1.0.1 13,63Kb 11 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. the1 609 06.10.20 09:07 Сейчас в теме
ранее дописанный функционал, необходимо перенести в расширение

обработка осуществляет перенос данных из объектов основной конфигурации в объекты расширения

Так функционал переносит или данные? Из описания следует, что данные.
EliasShy; Hatson; +2 Ответить
2. Hatson 415 06.10.20 11:01 Сейчас в теме
(1)Вот так вот скачаешь, запустишь, а потом окажется: ....не тысячу, а десять тысяч, и не рублей, а долларов, и не в лотерею, а в карты, и не выиграл, а проиграл ))))))))))))
3. biz-intel 769 06.10.20 11:19 Сейчас в теме
Конечно же данные )
Спасибо за замечание, поправил аннотацию.
4. RegrZ 57 07.10.20 06:26 Сейчас в теме
Зачем городить этот огород если есть старая добрая КД, при этом очень даже бесплатная.
5. mikl79 111 07.10.20 07:43 Сейчас в теме
6. red80 07.10.20 09:16 Сейчас в теме
(4) Зачем городить этот огород если есть старая добрая типовая "Выгрузка и загрузка данных XML.epf" с ИТС диска. Из доработанной конфигурации добавленные объекты выгружаем, в расширение загружаем. Галочку "Выгружать при необходимости" для всех объектов снимаем. Главное, чтобы порядок объектов метаданных в конфигурации и расширении совпадал.
7. biz-intel 769 07.10.20 12:00 Сейчас в теме
Старая добрая типовая "Выгрузка и загрузка данных XML.epf" работает для полностью идентичных конфигураций. Тут должны совпадать полностью наименования всех объектов. Так же нужно две отдельных базы для переноса данных и проверки. Если работать по такому сценарию, то конечно работаем старой доброй типовой :)

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

КД в этом случае тоже подошла бы как одноразовый вариант, но, если есть достаточно большое количество разработок, требующих перевода на расширение, то на каждый такой случай писать правила КД, мне лично кажется не оптимально.
8. red80 07.10.20 12:31 Сейчас в теме
(7) Как у вас все сложно :)
Переносим изменения из конфигурации в расширение копи-пастой, у вас получатся полностью идентичные конфигурации. Да, должно быть два открытых конфигуратора - один с измененной конфигурацией, другой с исходной+расширение. Переносим данные и дальше меняем объекты как душе угодно.
Это гораздо проще и быстрее обработок и КД.
9. biz-intel 769 07.10.20 12:56 Сейчас в теме
(8) В случае одного клиента, да. В случае перевода на расширение у большого количество пользователей и при наличии разных решений, это будет слишком трудозатратно.

Да, спасибо за комплимент, у нас все сложно :)
10. VKislitsin 512 07.10.20 14:20 Сейчас в теме
Кирилл, очень полезная штука. Есть конечно ошибки, которые пришлось поправить (например в стандартных реквизитах справочника может быть отключен Код).
У меня вопрос: а есть ли у Вас методика по переносу функционала из конфигурации в расширение? Тоже столкнулись с такой необходимостью. Речь идет о переносе всех добавленных объектов (какие возможно перенести в расширение) - справочники, документы, регистры и т.д. Всё это имеет свои формы и т.д.
11. biz-intel 769 07.10.20 15:17 Сейчас в теме
Спасибо, с отключенным кодом поправим...

Именно методики переноса функционала на настоящий момент нет. Однако что приходилось делать, так это менять тексты модулей по определенному алгоритму скриптом на питоне. В принципе cfe - это zip-архив с файлами xml, и, теоретически можно сделать выгрузку конфигурации в файлы, распаковать cfe в отдельный каталог и как-то перенести туда все добавленные объекты.

Или же нужно смотреть в сторону EDT и написание плагинов, но как-то EDT пока-что мне кажется сыроват, может быть я и ошибаюсь.

Спасибо за идею, возможно и поработаем в этом направлении.
12. biz-intel 769 07.10.20 15:19 Сейчас в теме
(11) Уточнение, архиватором cfe не раскрыть, но можно выгрузить расширение в xml-файлы
13. VKislitsin 512 07.10.20 15:47 Сейчас в теме
(11)
теоретически можно сделать выгрузку конфигурации в файлы, распаковать cfe в отдельный каталог и как-то перенести туда все добавленные объекты.

Не, такой фокус не пройдет. По крайней мере пока соответствующие объекты в Конфигурации не удалить. Потому что все идентификаторы типов будут дублироваться и в Расширении и в Конфе. Если бы работал, можно было бы просто выгрузить конфу в файлы и нужные файлы загрузить в расширение, пакетным режимом с ключем /LoadConfigFromFiles.

Насчет кода в обработке еще ошибки:
Вот в таких конструкциях далеко не всегда метод Метаданные() срабатывает, например если реквизит имеет примитивный тип (скажем "булево")
СправочникРасш[РеквизитИЛИТЧ.ОбъектРасширения].Метаданные().Имя


И запись объектов, думаю стоит раскомментировать, пока не посыпались отзывы что не работает.
//СправочникРасш.Записать();
//ДокументРасш.Записать();
и т.д.


А из удобств не помешало бы сохранение настроек формы и выбор какие объекты переносить, а какие - нет, крыжиками.
14. biz-intel 769 07.10.20 15:57 Сейчас в теме
СправочникРасш[РеквизитИЛИТЧ.ОбъектРасширения].Метаданные().Имя вот это не должно применяться для примитивных типов, но проверим, спасибо.

Запись тоже раскомментируем, это в целях отладки видимо осталось.

Не, такой фокус не пройдет. По крайней мере пока соответствующие объекты в Конфигурации не удалить. Потому что все идентификаторы типов будут дублироваться и в Расширении и в Конфе. Если бы работал, можно было бы просто выгрузить конфу в файлы и нужные файлы загрузить в расширение, пакетным режимом с ключем /LoadConfigFromFiles.


Тут можно попробовать перед загрузкой сгенерировать идентификаторы
17. VKislitsin 512 07.10.20 16:15 Сейчас в теме
(14)
вот это не должно применяться для примитивных типов, но проверим, спасибо.

Здесь мне пришлось исправлять именно потому что применялось.

(14)
Тут можно попробовать перед загрузкой сгенерировать идентификаторы

Мне такая мысль первым делом тоже пришла в голову. Но дело в том, что эти идентификаторы ведь не в одном месте фигурируют. Им нужно искать соответствия в других файлах и там такие же подставлять. И ведь речь идет не только об идентификаторе самого объекта. Их там целая куча - идентификаторы типов, форм, каждого реквизита.
15. biz-intel 769 07.10.20 16:06 Сейчас в теме
Вот, например, справочник номенклатура, при выгрузке файлов находится тут:

Catalogs\Номенклатура.xml

Вот, что внутри:

<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.10">
	<Catalog uuid="fc59acc3-f1f7-4e3f-96da-e580f2c5a88f">
		<InternalInfo>


Нас интересует элемент
<Catalog uuid="fc59acc3-f1f7-4e3f-96da-e580f2c5a88f">


Конечно придется писать скрипт для этого уже вне средств 1С
16. biz-intel 769 07.10.20 16:08 Сейчас в теме
Хотя если совсем уж извратиться, то можно и сделать обработкой на 1С :)
18. JohnyDeath 298 08.10.20 08:31 Сейчас в теме
Обычно наоборот происходит - разрабатывают в расширении и если всё устаканилось, то переносят в основной продукт (конфигурацию)
19. VKislitsin 512 08.10.20 08:41 Сейчас в теме
(18) Евгений, абсолютно согласен. Но "обычно" - это не "всегда" :)
Сейчас вот как раз встала задача вытащить всё в расширение. Слишком трудно стало поддерживать несколько разных конфигураций с внедренным своим блоком.
JohnyDeath; +1 Ответить
22. RocKeR_13 836 12.10.20 12:48 Сейчас в теме
(18) Если основной продукт - это распространяемая конфигурация на поддержке, а расширения - это временные патчи, то да, соглашусь. Если же идет доработка типовой конфигурации и нет конфликтов в применении расширений (когда несколько расширений изменяют, например, одну и ту же процедуру), то не вижу особого смысла переносить функционал из расширения в основную конфигурацию. Разве что, если расширений в базе несколько десятков, а конфигурацию расширениями изменяют несколько сторонних разработчиков, причем не особо согласовывая свои действия между собой. Пока у клиентов встает все-таки вопрос переноса доработок из основной конфигурации в расширения.
biz-intel; +1 Ответить
20. vitek1 10.10.20 18:54 Сейчас в теме
Заменяются ли ссылки в связанных объектах? Т.е. например необходимо перенести один справочник основной конфигурации в расширение. Причем ссылки на элементы этого справочника используются в документах и регистрах. В расширении создан новый справочник с такой же структурой. Обработка перенесет только данные самого справочника? Или также заменит ссылки в документах и регистрах со справочника основной конфигурации на ссылки справочника в расширении?
21. biz-intel 769 12.10.20 12:37 Сейчас в теме
(20) Ссылки заменяются. При переносе данных идет проверка, на различие типов данных в расширении и основной конфигурации.
23. php5 18 15.10.20 12:23 Сейчас в теме
ИМХО, данные лучше хранить в основной конфигурации, а не в расширении. Возможна ситуация, когда расширение отвалится и все данные будут потеряны.
24. biz-intel 769 15.10.20 13:29 Сейчас в теме
(23) Что значит "отвалится"? Не подключится при запуске 1С при проверке, будет отключено пользователем? Или будет удалено вручную в конфигураторе и будет выполнено обновление конфигурации БД? От этого очень сильно зависит "судьба" данных.

По сути расширение - это обычные таблицы реляционной БД, файловой, MS SQL, Postgres, в зависимости от того файловая или серверная база. Если сказать упрощенно, то при отключении расширения платформа просто не использует эти таблицы в работе, и, как только работа расширения будет восстановлена, таблицы снова будут использоваться со всеми данными, которые были в них до отключения.

Можно самому в этом убедиться, создав расширение, добавив туда справочник. Запустить пользовательский режим, добавить в этот справочник несколько элементов и отключить расширение (сняв флаг "Активность"). Перезапустить 1С, этот справочник "пропадет". Затем включить расширение снова (установив флаг "Активность"), перезапустить 1С. Этот справочник снова появится с теми элементами, которые в нем были до отключения расширения.

А вот есть удалить в конфигураторе и сохранить конфигурацию БД, то таблицы будут удалены и данные потеряны. Но это ведь осознанное действие, а не форс-мажор и отключение расширения по каким-либо причинам (например изменился режим совместимости основной конфигурации)
25. php5 18 15.10.20 14:28 Сейчас в теме
(24) Часто при работе с расширениями приходится их удалять из базы физически.
Могу привести 2 примера:

1. Обновление типовой КА 2.4 не смогло примениться при наличии расширения. Пришлось физически удалять (отключение не помогало), чтобы нормально отработали типовые обработчики (первый раз подобная проблема произошла 1.5 года назад.

2. При выгрузке из тестовой базы - объединение в рабочей отрабатывает не корректно, помогает только перезаливка расширения.

Я веду к тому, что если данные хранятся в расширении, и возникнет необходимость удалить расширение и перезалить, то данные потеряются т.е. для себя сделал вывод не хранить данные в расширениях. В любом случае хранение данных в боевой базе предополагает добавление новых объектов в конфигуратор, что не является критичным при обновлении базы.
26. biz-intel 769 15.10.20 14:59 Сейчас в теме
(25) 1. Типовая КА 2.4 без изменений вообще, без основной конфигурации? Какие именно обработчики не смогли отработать и какие были при этом ошибки? Сколько было расширений подключено? Что именно было в расширении заимствовано из конфигурации? Такой пример вызывает еще больше вопросов.

2. Зачем делать объединение из тестовой базы, если можно просто загрузить расширение из файла *.cfe просто в пользовательском режиме, при этом потери данных не будет.

Использование расширений вместо изменения конфигурации дает возможность не использовать основную конфигурацию вообще, при доработке функционала типовых конфигураций. Это как минимум увеличивает скорость обновления раза в 1,5 или даже больше, так как пропускается этап сравнения и объединения. Конечно может понадобится последующая адаптация расширений, но это уже другой вопрос, тут все зависит от того как сделано расширение, сколько и как было заимствовано объектов конфигурации и т.д.
Оставьте свое сообщение

См. также

daСклонение: склонение ФИО, должностей, чисел, прилагательных, существительных на языке 1С + ТестЦентр Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Функция предназначена для склонения выражений, которые часто требуется при формировании печатных форм договоров и прочих печатных форм. Функция склоняет по падежам ФИО, должности, числительные, валюты, единицы измерения, предметы. Также функция склоняет глаголы и прилагательные по числам и родам и существительные по числам. Имеется режим определения рода переданного выражения. Поддержка форматной строки для вывода результата. Функция не использует внешние библиотеки и веб-сервисы, написана на чистом языке 1С, и поэтому легко встраивается в любую конфигурацию или внешнюю обработку. Правила склонения оформлены в виде таблицы и могут быть легко изменены при необходимости.

1 стартмани

14.02.2015    104407    98    daMaster    90    

Сравнение реального дохода со средним доходом из API.HH.RU

Зарплата Управленческие v8 v8::СПР ЗУП3.x УУ Абонемент ($m)

Внешняя обработка на управляемой форме для 1С:Предприятие 8.3 по интеграции с HH.RU используя HH REST API. Ключевые функции: получение списка вакансий по должностям (Ключ для работы не нужен); расчет среднего дохода; Тестирование проводилось на платформе 1С:Предприятие 8.3 (8.3.13.1513) Зарплата и управление персоналом, редакция 3.1 (3.1.11.68) совместно с API.HH.RU.

1 стартмани

11.11.2019    4381    6    solaru    2    

Конфигурация для рекламного агентства

Управление услугами и сервисом Управление взаимоотношениями с клиентами (СRM) Производство готовой продукции (работ, услуг) Управление взаимоотношениями с клиентами (СRM) Производство готовой продукции (работ, услуг) v8 Реклама, PR и маркетинг УУ Абонемент ($m)

Данная конфигурация выполнена для решения тестового задания: Цель задания: 1) Понять, на каком из клиентов сколько мы заработали;  2) Понять, по какому виду СМИ сколько мы заработали;  3) Проследить по каждой услуге: у кого за сколько купили и кому за сколько продали, с возможностью перейти в соответствующий документ. Реализовано с помощью: 1. Справочники - контрагенты, номенклатура 2. Документы - Поступление услуг, реализация услуг 3. Отчеты - отчет по контрагентам, номенклатуре и движений.

1 стартмани

21.05.2019    5318    0    solaru    0    

Загрузка номенклатуры в УТ 10.3 из Excel файла с генерацией штрихкодов

Загрузка и выгрузка в Excel Обработка справочников Оптовая торговля Розничная торговля Учет ТМЦ Оптовая торговля Розничная торговля Учет ТМЦ v8 УТ10 Россия Абонемент ($m)

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

1 стартмани

24.03.2017    8233    7    solaru    0    

Под капотом управляемых форм

Практика программирования v8 1cv8.cf Бесплатно (free)

Управляемые формы уже давно и плотно вошли в жизнь 1С-разработчика. Однако, судя по недавним публикациям на Инфостарте, многие до сих пор мало знакомы с ними. Предлагаю разобраться с тем, что же это такое.

26.08.2013    269621    Evil Beaver    271    

[NotaBene] Универсальный отчет по таблице значений

Практика программирования v7.7 1cv7.md Россия Абонемент ($m)

1C v.7.7 Готовое решение. Не требует настройки. Не требует допрограммирования. Данная обработка решает часто встречающуюся задачу вывода в "красивом" виде таблицы значений (полученной, например, из запроса). Поддерживается произвольное группирование данных, отключение/включение группировок, в т.ч и создание "шахматок" (типа "продажи понедельно"). Обработка может использоваться как и в отладочных целях (для нормального просмотра ТЗ), так и в составе вполне рабочих отчетов. По крайней мере, я неоднократно клиентам данную обработку ставил вместо того, чтобы каждый раз писать замороченные выводы данных. И клиенты довольны, и мне - проще...

2 стартмани

07.05.2007    29503    3    CheBurator    63