• Авторизация


Замена ссылки А на ссылку Б. 09-11-2005 14:59 к комментариям - к полной версии - понравилось!


Жаль, что в 1С 80 нет функции на уровне платформы, чтобы заменить ссылку А на ссылку Б. Предлагаю такой алгоритм.

Пусть нужно заменить ссылку А на ссылку Б.
Перебираем все объекты, где могут быть эти ссылки - то есть справочники, документы, ПВХ, константы, регистры.
Для каждого объекта по его метаданным получаем список реквизитов, где могут быть ссылки на А.
Осуществляем поиск по первому из списка реквизитов, находим список объектов.
Для каждого из найденных объектов по списку реквизитов находим ссылки на А и заменяем их на Б.
Вносим изменения в базу.
Переходим к следующему по списку реквизиту.
Возможно выполнять весь код в транзакции или без нее.
При записи документов и справочников лучше использовать режим ОбменДанными.Загрузка=истина.
Для документов и справочников отбор делаем запросом по одному реквизиту, для регистров - можно непосредственно делать отбор набора записей по текущему реквизиту, тут же его поправлять и записывать.
Такой подход работает быстрее, чем 1С-ая типовая обработка по замене дублей, ибо специально заточен под замену одного объекта другим. Почему быстрее? Потому что метод НайтиПоСсылкам выдает просто объект, не указывая его реквизит, приходится перебирать все реквизиты этого объекта. Ну и кроме того, можно контролировать, какой конкретно вид объектов сейчас обрабатывается.
Будет время - напишу такую заточку.
вверх^ к полной версии понравилось! в evernote


Вы сейчас не можете прокомментировать это сообщение.

Дневник Замена ссылки А на ссылку Б. | fixin - Дневник fixin | Лента друзей fixin / Полная версия Добавить в друзья Страницы: раньше»