IPB

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V   1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> Как соскочить с иглы ?, обновления типовых
Tazoth
сообщение Apr 14 2004, 19:09
Сообщение #1


Продвинутый
***

Группа: Пользователи
Сообщений: 126
Регистрация: 25-July 03
Пользователь №: 98



Напомню суть проблемы:
когда мы начинем модифицировать типовую конфу, при создании объектов метаданных им присваиваются следующие по порядку идентификаторы. Что автоматически делает невозможным загрузку новой типовой конфы (только объединение).
До недавнего времени это мало кого волновало. Однако с появлением gcomp-а появилось резонное желание объединять типовую с наработками путем простого объединения текстовых файлов.
Проблема заключается в том, что объекты метаданных созданные программистом пересекаются по кодам с объектами, поставляемыми 1С.
-----------
Обсудим, какое решение может быть у этой проблемы ?
---------
Как затравка : а что если нам _все_ существующие идентификаторы в конфигурации сдвинуть так, чтобы они вылетели за пределы типовых ? К примеру прибать к каждому ИД 20000 единиц. Думаю это можно добиться объединением с пустой конфигурацией, у которой счетчик ид выставлен в 20000.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
orefkov
сообщение Apr 14 2004, 22:18
Сообщение #2


Продвинутый
***

Группа: Пользователи
Сообщений: 657
Регистрация: 24-July 03
Из: Киров
Пользователь №: 7



Так это и понятно, что надо свои идшники сдвигать.
Вопрос весь в том, как это сделать без потери данных?
Способ, похожий на твой, я как-то предлагал в какой-то ветке.
Как оказалось, не прокатит. Существующие данные потеряются.
Технически изменить ид у объекта метаданных не сложно.
Разобрал да и поправил.
В опенконфе я пробовал, любому объекту можно присвоить
другой ид. Но при этом - я сменил ид у объекта Справочник.Проверка
При сохранении мне выдало:
Справочник.Проверка удален.
Новый Справочник - Проверка
старую таблицу прибило, создало новую.
В-принципе, можно попробовать сделать сначала
стандартную выгрузку, поменять иды в мдшнике.
Потом пройтись по dat файлику, и там тоже иды поправить,
сделать загрузку.
Вот только я в формате выгрузки не силен, да и опять
же наверняка будут проблемы с разными там ссылками,
реквизитами неопределенного типа и тп.
Но имхо если все грамотно сделать, то может прокатить.
Кто бы только взялся?


--------------------
1c++ developer :: www.1cpp.ru
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
fez
сообщение Apr 15 2004, 09:33
Сообщение #3


Сильно пишущий
****

Группа: Пользователи
Сообщений: 2385
Регистрация: 25-July 03
Из: Москва
Пользователь №: 80



anseis недавно говорил, что ему удалось поменять идентификаторы в конфигурации и в данных. Сейчас статью на эту тему пишет.
Вообще, я думаю, что главное - поменять ID в конфигурации. Если у нас есть "старая" конфа с данными и "новая" конфа без данных - неужели нельзя средствами 1С перекинуть данные из одной конфы в другую? Ведь все текстовые идентификаторы у объектов - одинаковы.


--------------------
Я вам тут наговорю...
1c++ developer :: www.1cpp.ru
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Anseis
сообщение Apr 15 2004, 09:51
Сообщение #4


Пользователь
**

Группа: Пользователи
Сообщений: 29
Регистрация: 3-March 04
Пользователь №: 1317



Цитата
anseis недавно говорил, что ему удалось поменять идентификаторы в конфигурации и в данных.


да и все вроде даже работает :-)

Цитата
Сейчас статью на эту тему пишет.


если на работе сильно грузить другими делами не будут, то напишу.

Цитата
Вообще, я думаю, что главное - поменять ID в конфигурации.


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

Цитата
Если у нас есть "старая" конфа с данными и "новая" конфа без данных - неужели нельзя средствами 1С перекинуть данные из одной конфы в другую?


интересная мысль, над ней не думал....

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


я так и делал, сначала конфигурация, затем данные из выгрузки, потом формируем "правленную" выгрузку и её загружаем.

Цитата
Вот только я в формате выгрузки не силен, да и опять
же наверняка будут проблемы с разными там ссылками,
реквизитами неопределенного типа и тп.


там в принципе ничего страшного нет.

Цитата
Кто бы только взялся?


я пока ищу и описываю, где в метаданных встречаются ID. Потом перейду к данным.

Впоследствии возможно кто-нибудь напишет прогу, для автоматизации процесса.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Anseis
сообщение Apr 15 2004, 10:13
Сообщение #5


Пользователь
**

Группа: Пользователи
Сообщений: 29
Регистрация: 3-March 04
Пользователь №: 1317



Цитата
До недавнего времени это мало кого волновало. Однако с появлением gcomp-а появилось резонное желание объединять типовую с наработками путем простого объединения текстовых файлов.


кстати не факт, что получится, на апдейт конфы запускаются какие-то обработки, которые чего-то делают, так что чисто объединением текстовых файлов видимо не обойдешься, хотя.... кто знает....
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
orefkov
сообщение Apr 15 2004, 10:20
Сообщение #6


Продвинутый
***

Группа: Пользователи
Сообщений: 657
Регистрация: 24-July 03
Из: Киров
Пользователь №: 7



Вот ведь блин коллективный разум!!!
Anseis, жду статью с нетерпением.
От себя могу добавить, что средства ОпенКонфа
уже сейчас позволяют:
Перебрать все объекты метаданных в конфе.
Для каждого объекта найти все ссылки на него.
Сама 1Ска позволяет для каждого объекта изменить ид,
в принципе, данную возможность можно вынести в опенконф.


--------------------
1c++ developer :: www.1cpp.ru
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Anseis
сообщение Apr 15 2004, 11:51
Сообщение #7


Пользователь
**

Группа: Пользователи
Сообщений: 29
Регистрация: 3-March 04
Пользователь №: 1317



Цитата(orefkov @ Apr 15 2004, 10:20)
Вот ведь блин коллективный разум!!!
Anseis, жду статью с нетерпением.


Постараюсь поскорее, правда я пока ориентируюсь на выгрузки gcomp

Цитата
От себя могу добавить, что средства ОпенКонфа
уже сейчас позволяют:
Перебрать все объекты метаданных в конфе.
Для каждого объекта найти все ссылки на него.


мда... интересно, возможно тоже вариант, только зело медленно наверное работает.

Цитата
Сама 1Ска позволяет для каждого объекта изменить ид,
в принципе, данную возможность можно вынести в опенконф.


и данные она конечно правит... хм... неплохой вариант...
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
orefkov
сообщение Apr 15 2004, 14:25
Сообщение #8


Продвинутый
***

Группа: Пользователи
Сообщений: 657
Регистрация: 24-July 03
Из: Киров
Пользователь №: 7



Цитата
и данные она конечно правит... хм... неплохой вариант...

Нет, данные она не правит sad.gif
После смены идшника 1С рассматривает его как новый объект.
А насчет скорости:
Пример скрипта для OpenConf, перебор всех метаданных
с поиском ссылок.
Код
Dim AllText

Sub TestAllRefers()
   AllText=""
   TestRefs MetaData.TaskDef
   Message AllText,mNone
   AllText=""
End Sub

Sub TestRefs(mdo)
   on error resume next
   status mdo.FullName
   AllText=AllText & mdo.FullName & " ID=" & CStr(mdo.ID) & vbCrLf
   Set refs=MetaData.TestRefers(mdo.ID, True)
   if refs.Count>0 Then
       AllText=AllText & vbTab & "Ссылки:" & vbCrLf
       for i=0 to refs.Count-1
           AllText=AllText & vbTab & vbTab & refs(i).FullName & vbCrLf
       Next
   End If
   Set Childs = mdo.Childs
   For i = 0 To Childs.Count - 1
       Set mda = Childs(i)
       c = mda.Count - 1
       For j = 0 To c
           TestRefs mda(j)
       Next
   Next
End Sub

13 метровую конфу прошел минуты за три.
Если делать плагин на С++, раз в 10 скорость
можно увеличить.
Ну и при смене идшника можно сразу по всем
ссылающимся на него объектам изменить тип.


--------------------
1c++ developer :: www.1cpp.ru
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Anseis
сообщение Apr 15 2004, 14:45
Сообщение #9


Пользователь
**

Группа: Пользователи
Сообщений: 29
Регистрация: 3-March 04
Пользователь №: 1317



Цитата(orefkov @ Apr 15 2004, 14:25)
Цитата

и данные она конечно правит... хм... неплохой вариант...

Нет, данные она не правит sad.gif
После смены идшника 1С рассматривает его как новый объект.

ты уверен? просто при упаковке ID она их точно правит, т.е. может, а значит есть шанс....

Цитата
13 метровую конфу прошел минуты за три.


у меня комплексная на 24 метра

Цитата
Если делать плагин на С++, раз в 10 скорость
можно увеличить.


да

Цитата
Ну и при смене идшника можно сразу по всем
ссылающимся на него объектам изменить тип.


собственно на это и расчитываю :-)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
orefkov
сообщение Apr 15 2004, 15:09
Сообщение #10


Продвинутый
***

Группа: Пользователи
Сообщений: 657
Регистрация: 24-July 03
Из: Киров
Пользователь №: 7



Лоханусь, но все же.
Что есть упаковка ид?
Когда она делается?


--------------------
1c++ developer :: www.1cpp.ru
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Anseis
сообщение Apr 15 2004, 15:21
Сообщение #11


Пользователь
**

Группа: Пользователи
Сообщений: 29
Регистрация: 3-March 04
Пользователь №: 1317



Цитата(orefkov @ Apr 15 2004, 15:09)
Лоханусь, но все же.
Что есть упаковка ид?
Когда она делается?

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

В общем, что-то в этом духе... может не такой алгоритм, но часть дыр в ID точно исчезает... результат - сотни уехавших ID (у меня было около 400)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Пим Сибирский
сообщение May 8 2004, 18:43
Сообщение #12


Начинающий
*

Группа: Пользователи
Сообщений: 2
Регистрация: 8-May 04
Пользователь №: 1567



Да, было бы не плохо объединять конфигурации gcomp'ом.
Я делал таким образом:
- Сначала свой DM-шник я обновлял полученным новым полныи замещением всех измененных объектов.
- Потом свой исходный распотрошенный MD сравнивал с тем, что получилось в результате предыдущего объединения.
- Выборочно объединял с помощью Araxis Merge (синхронизация каталогов с сравнением файлов)
- собирал gcomp'ом и вроде все работало.

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

Вот и хотелось бы, чтобы на форуме, уважаемые растолковали, как 1С-ка поступает с ентими идентификаторами при своем штатном объединении. Имеет ли предложенный мной способ хоть какое-нибудь рациональное зерно?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
AlexWhite
сообщение May 9 2004, 22:41
Сообщение #13


Пользователь
**

Группа: Пользователи
Сообщений: 34
Регистрация: 29-July 03
Пользователь №: 212



Цитата(Tazoth @ Apr 14 2004, 19:09)
Как затравка : а что если нам _все_ существующие идентификаторы в конфигурации сдвинуть так, чтобы они вылетели за пределы типовых ? К примеру прибать к

Мне показалось это слишком муторно. Есть базы бльшие, в которых будет просто немыслимо изменить ID у всех объектов, которые пересекаются с типовыми.
Предлагаю:
1) Избавиться от разкинутых по разным каталогам Структура.mdp, сделав 1 большой файл, в котором идентификатору сопоставить Имя объекта, как оно в конфигураторе, возможно доп.реквизиты тоже через запятую. Файл должен быть типа описания, которое получается из "Описание структуры метаданных", но более мнемоничным и приспособленным к мерджу, при необходимости
2) В формах (и других файлах, где подсовывались ID) вместо ID указывать Имя реквизита (объекта).

Еще одну проблему заметил, сильно мешает обновлять конфы: Общие таблицы при выкладывании наружу получают имя, которое не просто равно названию таблицы в md, а еще и какой-то цифирь получает. Например
ОС_4.16.mxl и ОС_4.9.mxl должны быть одной и тойже таблицей снаружи, а не двумя разными, как сейчас.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
fez
сообщение May 10 2004, 18:35
Сообщение #14


Сильно пишущий
****

Группа: Пользователи
Сообщений: 2385
Регистрация: 25-July 03
Из: Москва
Пользователь №: 80



Цитата(AlexWhite @ May 9 2004, 22:41)
1) Избавиться от разкинутых по разным каталогам Структура.mdp, сделав 1 большой файл, в котором идентификатору сопоставить Имя объекта, как оно в конфигураторе, возможно доп.реквизиты тоже через запятую. Файл должен быть типа описания, которое получается из "Описание структуры метаданных", но более мнемоничным и приспособленным к мерджу, при необходимости
2) В формах (и других файлах, где подсовывались ID) вместо ID указывать Имя реквизита (объекта).

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

Эти две глобальные проблемы не свойственны одному только gcomp'у - это такая родовая травма у системы нумерации обектов в MD.


--------------------
Я вам тут наговорю...
1c++ developer :: www.1cpp.ru
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
AlexWhite
сообщение May 10 2004, 23:12
Сообщение #15


Пользователь
**

Группа: Пользователи
Сообщений: 34
Регистрация: 29-July 03
Пользователь №: 212



Цитата(fez @ May 10 2004, 18:35)
Эти две глобальные проблемы не свойственны одному только gcomp'у - это такая родовая травма у системы нумерации обектов в MD.

Да, понимаю. Видимо для этого и сделан в 1С режим "объединение конфигураций", при котором, если объект переименован, то это новый объект

1) Как насчет того, что если объект переименован, то это новый объект? Сейчас то как? Если переименуешь объект и "Загрузить измененную" сделаешь, что получится?
2) конфликт идентификаторов - это когда одинаковый идентификатор, а имена разные? А что происходит при "Объединении конфигураций", если идентификатор совпал, а имена разные? Мне кажется, что заводится объект с новыми идентификаторами, которые нумеруются от максимального.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

4 страниц V   1 2 3 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 19th July 2019 - 17:07