Имя: Пароль:
1C
 
Замена "СКРЫТЫХ" ссылок групп спр.Номенклатура. Где могут храниться?
0 kittystark
 
10.11.22
06:01
нарисовалась задача замены групп справочника Номенклатура ссылками из другой базы

хочу допилить стандартную обработку "Поиск и замена значений", но она способна находить и менять лишь явные ссылки,
а ведь есть всякие "потаенные места", типа Хранилищ Значений, где ссылки могут быть использованы и в неявном виде

на ум приходит несколько примеров:
- справочник ВариантыОтчетов - в нем поле Настройки - Хранилище Значений, по сути Настройки СКД со своими отборами и параметрами (в т.ч. и пользовательские настройки СКД)
- справочник РассылкиОтчетов - тоже самое
- настройки форм пользователей - отборы

если с первыми двумя есть понимание как работать Хранилище.Получить() - пробежаться по ПараметрыДанных.Элементы / Отбор.Элементы, поменять - Хранилище.Записать(),
то с формами куда копать - пока не знаю, пожалуйста, подскажите

плюс, наверняка есть еще неведомые мне места...  как их найти ?
бежать по метаданным, смотреть на реквизиты, если тип - ХЗ, ну нашел, а дальше что ?

в общем, кто что подскажет, как грамотно заменить одни группы другими, чтоб воплей не было "вы все сломали" ?

конфа типовая КА 2.5.8
1 Chai Nic
 
10.11.22
07:29
А может быть ещё и XML или JSON сериализация. В общем, задачка веселая и в общем случае вряд ли выполнимая.
2 Serg_1960
 
10.11.22
08:19
(0) Совет (бесплатно): Изучайте типовую конфигурацию. Тогда для Вас в неё не будет "неведомых мест" :)

Там чудеса: там леший бродит,
Русалка на ветвях сидит;
Там на неведомых дорожках
Следы невиданных зверей;
3 Chai Nic
 
10.11.22
08:27
(2) В любой типовой могут быть внешние обработки, хранящие данные где-то в присоединенных файлах или настройках пользователя, чтобы не менять конфигурацию)
4 Serg_1960
 
10.11.22
08:32
PS: имхо, достаточно учесть «Версионирование объектов» для всех тех объектов, где могут сохраняться ссылки на группы номенклатуры. Такие объекты легко определяются через метаданные в конфигураторе.

(3) Это "их проблемы"(с). В таких случаях ни платформа, ни конфигурация не гарантируют ссылочную целостность - так почему об этом должна болеть голова у прогера? Не грузите его лишней информацией - он и без темы ветки автора в типовой конфигурации может встретиться с аналогичной ситуацией :(
5 kittystark
 
10.11.22
15:32
(2) оригинально, оригинально...
6 kittystark
 
10.11.22
15:33
(3) все внешние обработки и отчеты - мои, там нет такого
7 kittystark
 
10.11.22
16:55
(4) вот сколько не пытался вспомнить хоть один объект, где бы фигурировали ГРУППЫ номенклатуры в версионировании,
кроме самого справочника номенклатуры с его полем Родитель - ничего на ум не приходит...
8 kittystark
 
10.11.22
16:55
(4) >> Такие объекты легко определяются через метаданные в конфигураторе. >>

Это как ?
9 kittystark
 
10.11.22
17:32
до кучи из потенциально возможного:
- ограничение доступа по RLS
- настройки обмена с сайтом
10 Serg_1960
 
11.11.22
14:48
(8) Ну "Поиск ссылок на объект" же - анализируем найденные ссылки :)
Для справочников и документов - это строки вида "*.Реквизит.*.Тип"- открываем свойства реквизита и если там в свойстве "Выбор групп и элементов" указано не "Элементы" - то это наш клиент. Если значение "Элементы" - проходим мимо. Аналогичная ситуация с регистрами и прочими объектами. Этот анализ конфигурации можно реализовать программно.
11 kittystark
 
11.11.22
15:57
(10) ес-ес, кэпитэн..., все ж просто, да

а, про сферическое хранилище значений в вакууме есть что сказать?
12 Kassern
 
11.11.22
16:07
(11) Ну круто, что. А что можете сказать за внешние xml/json файлы, где гуиды указаны старые?)
13 Kassern
 
11.11.22
16:07
Так можно далеко зайти. ну встретите косячную позицию, поправите по ходу, а вообще не надо ссылками злоупотреблять в хранилищах.
14 kittystark
 
11.11.22
16:18
(12), (13) кроме подсистемы "Версионирование объектов" других XML просто не знаю, ну разве что выгрузка в Битрикс
на версионирование - забьем

>> а вообще не надо ссылками злоупотреблять в хранилищах >>
ну этож не я злоупотребляю - это фабричным пейсателям нужно адре-насовать
15 Chai Nic
 
14.11.22
08:33
(12) Как вариант, пробежаться по ВСЕМ метаданным, проверять если это двоичные данные или строка длины не менее длины гуида - пытаться их интерпретировать по порядку по всем известным вариантам хранения гуидов или сериализации, в десериализованном полученном нечте произвести полный рекурсивный перебор, найдя - заменить. Потом обратно сериализовать тем же методом и запихнуть где взял.
16 Serg_1960
 
14.11.22
08:49
Вы ещё забыли упомянуть бэкапы баз данных - вот где полный беспредел хранения устаревших ссылок. Ужас, ужас, ужас.
17 kittystark
 
14.11.22
10:28
(16) если не дай Бог восстанавливаться из бэкапа... тьфу-тьфу...
перелопатим - благо запрограммирую "списки что на что менять" через файлики, 3 тычка мыши и готово
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший