for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Вопросы по 1С
  

Перенос ссылок
medstrax

Сообщений: 4474
Дата: 19.04.14 09:11:52
Задумал я "схлопнуть" номенклатуру. Т.е. есть много записей в справочнике номенклатуры, которые идентичны по сути. Есть определенный механизм фильтрации, согласно которому можно выявить идентичные (по ряду полей) записи. Задача встала удалить все ненужные двойственные элементы, оставив только один. НО. На элементы, предполагаемые к удалению, вполне могут быть ссылки в базе. Поэтому надо сперва все ссылки заменить на тот единственный элемент, который должен остаться после "схлопывания". Функа НайтиПоСсылкам работает крайне медленно, поэтому видимо придется работать на уровне скуля. С этим сложности, т.к. под скуль практически не кодил, боюсь накосячить.
Сделайте кодес за меняпорекомендуйте плиз как выбрать все ссылки в базе из кучи таблиц
Ratings: 0 negative/0 positive

Re: Перенос ссылок
Igor Korolyov

Сообщений: 32996
Дата: 19.04.14 14:41:48
А они, эти самые ссылки, реально в базе имеются? База то хоть какая - MSSQL али что другое?
Теоретически в "идеальной" базе в метаданных смотришь констрейны ссылочной целостности и там уж видно кто ссылается на данный ключ. Но как оно в 1сной базе - понятия не имею. У нас в полностью контролируемой и разрабатываемой только нами тоже хватает "пропущенных" констрейнов - кто-то просто поленился, кто-то откровенно накосячил. Плюс есть реально сложные штуки когда констрейн сделать невозможно. Например горизонтальное разбиение таблиц - типа "сотрудники" в одной, а "клиенты" в другой, и откуда-то надо ссылаться и на тех и на других - можно, конечно завести супер-таблицу где объединить (как минимум ключи, ну можно и общие поля туда унести) данные из обеих, но зачастую разработчик ограничивается вьюхой с UNION и тут уж констрейн никак не повесить...
Писали для Оракла утилитку как раз для таких целей - унификация (устранение) дублей - она именно из all_constraints вынимала инфу кто же именно ссылается. Для MSSQL похоже эта инфа из INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS и INFORMATION_SCHEMA.KEY_COLUMN_USAGE - ну есть и в sys вьюхи сходного назначения.


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Перенос ссылок
Foxtrot
Автор

Сообщений: 3401
Откуда: Куда:
Дата: 19.04.14 18:57:38
преамбула
насколько я в теме, авторы 1це не замарачивались с ссылочной целостностью. видима формат их собственной базы этого не позволяет сделать, таким образом все другие базы данных, которые поддерживает 1це тож таким механизмом не озадачены. так чта вряд ли вы найдете какуюлиба инфу в базе акромя самих таблиц данных + конфигурацию с доппараметрами безопасности и работы сервера 1це
вернемся тяперича к сути вапроса. амбула
нужно иметь железные яйцачеткое представление о сути происходящего когда в обход бизнес логики напрямую лезешь в бд
не ну читать та мона кашечна и я себе иной раз себе такое позволяю, к примеру когда нуна палучить доступ к 1це а паролей нет на руках, то ты тупо грохаешь одну запись и возможно еще одну таблицу со всеми паролями и прочим
функа НайтиПоСцылкам оч примитивна и не учитывает тех реалий, по которым к примеру в какомнить документе ПриходныйКассовыйОрдер никогда не будет ссылки на справочник ПараметрыВыработкиОС, хотя канеша авторы 1це магли б и запилить такое. Ведь если искать ссылки на тот же справочник ПараметрыВыработкиОС в конфигураторе то 1це их замечательно находит менее чем за секунду
так чта задачу удаления правильнее имхо решать средствами самой 1це, ведь прогеру заранее известно по каким документам и прочим таблицам нуна искать ссылки на нужный справочник
НО. перед тем как такое вообще начинать нужно ответить на вопрос "а такое вообще допустимо и ничего не поломаеца?" к примеру, я часто встречаю конфы в которых прошлые периоды закрываются и нет никакой возможности изменять эти закрытые периоды. и это понятно с точки зрения бизнес логики, но нифига не видна с точки зрения ссылочной целестности данных
такие дела


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive

Re: Перенос ссылок
medstrax

Сообщений: 4474
Дата: 20.04.14 04:17:21
Igor Korolyov
А они, эти самые ссылки, реально в базе имеются? База то хоть какая - MSSQL али что другое?
Имеются. MSSQL.
Ratings: 0 negative/0 positive

Re: Перенос ссылок
medstrax

Сообщений: 4474
Дата: 20.04.14 04:25:48
Foxtrot
так чта задачу удаления правильнее имхо решать средствами самой 1це, ведь прогеру заранее известно по каким документам и прочим таблицам нуна искать ссылки на нужный справочник
НО. перед тем как такое вообще начинать нужно ответить на вопрос "а такое вообще допустимо и ничего не поломаеца?" к примеру, я часто встречаю конфы в которых прошлые периоды закрываются и нет никакой возможности изменять эти закрытые периоды. и это понятно с точки зрения бизнес логики, но нифига не видна с точки зрения ссылочной целестности данных
такие дела
Так и сделал по итогам. Правда пришлось дохрена копипастить, чтоб в модуль каждого док-та и регистра воткнуть возможность записи в любом периоде без дополнительных телодвижений (конфа наполовину самопальная и просто проверка ОбменДанными.Загрузка не катит)
На тестовой базе кодес отработал на ура, будем смотреть что выйдет на продакшне
Ratings: 0 negative/0 positive

Re: Перенос ссылок
Foxtrot
Автор

Сообщений: 3401
Откуда: Куда:
Дата: 20.04.14 15:34:23
прежде чем нчать химичить в продуктиве запусти мою обработку


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 5 Taran  (Гостей: 4)

22.09.2019 23:17:00 exec: 0.02
Mem: 1.211 Mb

© 2000-2019 Fox Club 
Яндекс.Метрика