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

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

Перейти к публикации

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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


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

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

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

Мне такая мысль первым делом тоже пришла в голову. Но дело в том, что эти идентификаторы ведь не в одном месте фигурируют. Им нужно искать соответствия в других файлах и там такие же подставлять. И ведь речь идет не только об идентификаторе самого объекта. Их там целая куча - идентификаторы типов, форм, каждого реквизита.
15. biz-intel 776 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 776 07.10.20 16:08 Сейчас в теме
Хотя если совсем уж извратиться, то можно и сделать обработкой на 1С :)
18. JohnyDeath 299 08.10.20 08:31 Сейчас в теме
Обычно наоборот происходит - разрабатывают в расширении и если всё устаканилось, то переносят в основной продукт (конфигурацию)
19. VKislitsin 522 08.10.20 08:41 Сейчас в теме
(18) Евгений, абсолютно согласен. Но "обычно" - это не "всегда" :)
Сейчас вот как раз встала задача вытащить всё в расширение. Слишком трудно стало поддерживать несколько разных конфигураций с внедренным своим блоком.
JohnyDeath; +1 Ответить
22. RocKeR_13 844 12.10.20 12:48 Сейчас в теме
(18) Если основной продукт - это распространяемая конфигурация на поддержке, а расширения - это временные патчи, то да, соглашусь. Если же идет доработка типовой конфигурации и нет конфликтов в применении расширений (когда несколько расширений изменяют, например, одну и ту же процедуру), то не вижу особого смысла переносить функционал из расширения в основную конфигурацию. Разве что, если расширений в базе несколько десятков, а конфигурацию расширениями изменяют несколько сторонних разработчиков, причем не особо согласовывая свои действия между собой. Пока у клиентов встает все-таки вопрос переноса доработок из основной конфигурации в расширения.
biz-intel; +1 Ответить
20. vitek1 10.10.20 18:54 Сейчас в теме
Заменяются ли ссылки в связанных объектах? Т.е. например необходимо перенести один справочник основной конфигурации в расширение. Причем ссылки на элементы этого справочника используются в документах и регистрах. В расширении создан новый справочник с такой же структурой. Обработка перенесет только данные самого справочника? Или также заменит ссылки в документах и регистрах со справочника основной конфигурации на ссылки справочника в расширении?
21. biz-intel 776 12.10.20 12:37 Сейчас в теме
(20) Ссылки заменяются. При переносе данных идет проверка, на различие типов данных в расширении и основной конфигурации.
23. php5 18 15.10.20 12:23 Сейчас в теме
ИМХО, данные лучше хранить в основной конфигурации, а не в расширении. Возможна ситуация, когда расширение отвалится и все данные будут потеряны.
24. biz-intel 776 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 776 15.10.20 14:59 Сейчас в теме
(25) 1. Типовая КА 2.4 без изменений вообще, без основной конфигурации? Какие именно обработчики не смогли отработать и какие были при этом ошибки? Сколько было расширений подключено? Что именно было в расширении заимствовано из конфигурации? Такой пример вызывает еще больше вопросов.

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

Использование расширений вместо изменения конфигурации дает возможность не использовать основную конфигурацию вообще, при доработке функционала типовых конфигураций. Это как минимум увеличивает скорость обновления раза в 1,5 или даже больше, так как пропускается этап сравнения и объединения. Конечно может понадобится последующая адаптация расширений, но это уже другой вопрос, тут все зависит от того как сделано расширение, сколько и как было заимствовано объектов конфигурации и т.д.
27. biz-intel 776 18.11.20 10:18 Сейчас в теме
Вышло обновление 1.0.2:

Добавлено сопоставление перечислений. Исправлены ошибки переноса справочников, регистров сведений, табличных частей.

Все, кто скачал ранее, могут написать в личку вышлем новую версию.
28. biz-intel 776 20.11.20 17:46 Сейчас в теме
Обновление 1.0.3. Добавлен прогресс бар. Исправлены ошибки переноса перечислений.
29. windows98a 97 25.11.20 10:44 Сейчас в теме
Спасибо, работает!
Нет возможности переносить данные частями, по конкретным объектам метаданных, добавил галочку "выгружатьобъект". Полезно, когда объемы данных большие и выгружаешь не все сразу, что бы можно было контролить. Например нужно выгрузить только регистр сведений, для этого нужно заполнить соответствие документам регистраторам, а документы регистраторы уже были ранее выгружены, но они все равно прогружаются еще раз, потмоу что соответствие выбрано. В таком случае галочка "выгружатьобъект" избаляет от повторной выгрузки тех объектов, которые были выгружены ранее.
И проблема есть, с регистрами сведений(подчиненными регистраторам) точно(регистры накоплений не переносил, но там возможно то же самое). Выборка документов в запросе происходит без группировки по регитсратору. В итоге вместо того, что бы перенести документ 1 раз, он переносится столько раз, сколько записей в регистре по этому регистратору
30. windows98a 97 25.11.20 10:46 Сейчас в теме
(29) из аз последней проблемы у меня перенос не прошел за ночь. После устранения - прошел за 20 минут
31. biz-intel 776 25.11.20 11:43 Сейчас в теме
(30) Здравствуйте!
Благодарим Вас за комментарий. Возможность переноса данных определенных объектов уже включена в разработку и будет обеспечена в ближайших релизах.
Указанная Вами проблема с регистрами, которые подчинены регистраторам, уже учтена и будет исправлена в следующем релизе.
32. biz-intel 776 30.11.20 10:50 Сейчас в теме
Вышло обновление 1.0.4. Со списком изменений можно ознакомиться в описании публикации
Оставьте свое сообщение
Вопросы с вознаграждением