24.08.2017, 00:19 | #1 |
Участник
|
Перенос объектов
Коллеги (оставшиеся), такой вопрос:
Как и с помощью какого инструмента "передвинуть" некий произвольный функционал (состоящий из таблиц, пейджей, репортов и проч.) в другой диапазон? Интересует именно автоматический(полуавтоматический) перенос, поскольку объектов в грануле много, а гранул несколько. Т.е. чтобы, к примеру, я пейдж 50000 переименовал, а в меню он появился на своём же месте, но уже с новым номером. Или T27 мне не нравится, и я хочу её быстро перенести в T50027, да так, чтобы вся база не развалилась. Важно! Таблицы все с данными и на "живой" базе! Т.е. я хочу поменять местами T17 и T21 (к примеру, конечно) и где-то должен быть предусмотрен временный буфер. Да и современный NAV почему-то отказывается теперь переименовывать ID таблиц, хотя в 2009 это раньше нормально работало ;( Последний раз редактировалось jopagames; 24.08.2017 в 00:41. |
|
24.08.2017, 13:29 | #2 |
Administrator
|
а привет
создаем табличку: тип, старый ID, новый ID выгружаем объекты в текст. IF FileName = '' THEN ERROR('файлик не выбран'); F.OPEN(FileName); F.TEXTMODE(TRUE); F1.CREATE(<новое имя файла>); F1.TEXTMODE(TRUE); F1.WRITEMODE(TRUE); REPEAT //_pos := F.POS; CLEAR(fString); F.READ(fString); ConvertString(); //F.SEEK(_pos); F1.WRITE(fString); UNTIL F.POS = F.LEN; F.CLOSE; F1.CLOSE; ConvertString() IF <табличка>.FIND('-') THEN REPEAT CLEAR(_From); CLEAR(_To); _From := FORMAT(<табличка>.Type) + ' ' + FORMAT(<табличка>."ID From"); _To := FORMAT(<табличка>.Type) + ' ' + FORMAT(<табличка>."ID To"); IF STRPOS(fString, _From) <> 0 THEN BEGIN //MESSAGE(fString); fString := COPYSTR(fString, 1, STRPOS(fString, _From)-1) + _To + COPYSTR(fString, STRPOS(fString, _From) + STRLEN(_From)); //MESSAGE(fString); END; _From := FORMAT(<табличка>.Type) + FORMAT(<табличка>."ID From"); _To := FORMAT(<табличка>.Type) + FORMAT(<табличка>."ID To"); IF STRPOS(fString, _From) <> 0 THEN BEGIN fString := COPYSTR(fString, 1, STRPOS(fString, _From)-1) + _To + COPYSTR(fString, STRPOS(fString, _From) + STRLEN(_From)); END; _From := 'Record ' + FORMAT(<табличка>."ID From"); _To := 'Record ' + FORMAT(<табличка>."ID To"); IF STRPOS(fString, _From) <> 0 THEN BEGIN fString := COPYSTR(fString, 1, STRPOS(fString, _From)-1) + _To + COPYSTR(fString, STRPOS(fString, _From) + STRLEN(_From)); END; UNTIL <табличка>.NEXT = 0; далее импортируем текстовичек в пустую базу (в эту же нельзя, название объектов) почти все переносится, не помню где какой-то хвостик остается с переносом данных не помогу. |
|
24.08.2017, 18:36 | #3 |
Участник
|
Ответ близкий, но не верный.
Делаем матрицу перевода ID-new ID И шаманскими методами меняем таблицу Object со ссылками на зависимости перемененных, полей и свойств. Отдельной дудкой, без изменения физической структуры данных. Все в новый лицензионный диапазон. Без нарушения прав правообладателя. Т.е.миграция объектов в рамках ЛИЦЕНЗИИ(Й) Остальное в Личку. Captain
__________________
--------------------------------------------------------------------------------------------- "Собрать стадо из баранов легко, трудно собрать стадо из кошек" Профессор Сергей Капица Последний раз редактировалось Captain; 24.08.2017 в 18:45. |
|
25.08.2017, 00:49 | #4 |
Участник
|
Цитата:
И парсинг всех-всех встречающихся переменных на предмет вхождения объекта в мою таблицу с ID-newID. Только, разве что, я все объекты переименовал из "Item" в "^T27", чтобы в тексте отлавливать не только Record 27, но и прямые вызовы объекта по имени типа REPORT::"^R50000" (старое имя объекта сохранил рядом c ID-newID, разумеется) Но пока всё как-то сыровато у меня ) А я хотел готовый функционал, который умеет для 2017 это делать. (В 2017 текст, извините, >1024 и в нормальную текстовую переменную даже не влазит, а хранить вообще кусками по 250 приходится) Ну и с таблицей Object в RTC не так всё просто, как в 2009. Всякие тенанты да метадаты. Цитата:
Сообщение от Sancho
а привет
создаем табличку: тип, старый ID, новый ID выгружаем объекты в текст. IF FileName = '' THEN ERROR('файлик не выбран'); |
|
25.08.2017, 01:24 | #5 |
Administrator
|
просто! работает!
правда, только с классическим Навом, с новым не пробовал ))) |
|
28.08.2017, 10:09 | #6 |
Участник
|
Цитата:
Основная - нельзя переименовывать ID таблиц. Ну и по мелочи: типа, номер отчёта хранится, например, в самом шаблоне Word и через Nav его никак не изменить. И через Word Тоже )) Приходится .docx переименовывать в .zip и править внутри него править xml, меняя пространство имён. Короче, передвинул как-то, наконец. Вручную, можно скачать. С несчастными 200 объектами провозился неделю. Всём спасибо! |
|