Имя: Пароль:
1C
 
как объединить 2 элемента справочника?
, , ,
0 Мисти
 
02.04.20
21:39
один из них встречается 500 тыс. раз, а второй немного поменьше.
Только поиск занял часов 10.
1 DTX 4th
 
02.04.20
21:54
Один пометить на удаление, на второй перекинуть все остатки.
2 Garykom
 
гуру
02.04.20
21:59
(0) Если sql то прямой заменой ссылок в базе можно
3 Сияющий в темноте
 
02.04.20
22:01
(2) предположим,что в регистре сведений в измерениях встречаются оба этих справочника-и что сделает прчмая замена?

потом,в квалификацию на прямую замену создателя вопроса я просто не верю.
4 Мисти
 
02.04.20
22:05
да знать бы рецепт! (3) встречается, и в регистрах сведений и везде. Хотя - надо посмотреть, может, и нет.
5 Garykom
 
гуру
02.04.20
22:06
(3) Надо смотреть понятно дело где ссылки на эти справочники используются.
6 Garykom
 
гуру
02.04.20
22:07
Могу еще посоветовать один метод, но он пока теоретический.
Есть такая штука погугли "data_dump.zip" если конфа типовая из списка облачных то повезло.
7 Garykom
 
гуру
02.04.20
22:09
(6)+ По сути это zip архив а внутри все данные в виде xml.
Работать с xml можно на чем угодно и даже вручную Найти/Заменить ))
8 Garykom
 
гуру
02.04.20
22:10
(6)+ Точнее повезло если сам объем базы не сильно большой и оно в разумные сроки выгружается/загружается в этом формате
9 Garykom
 
гуру
02.04.20
22:12
Какие знакомые имена Как достать базу из data_dump?
10 mistеr
 
02.04.20
23:21
(0) Обработка из ИР, "Поиск и замена ссылок".
11 Мисти
 
03.04.20
12:04
(10) я ж говорю, только поиск занял 10 часов, маловероятно, что этот объем обработается.
12 Мисти
 
03.04.20
12:05
(9) всё получилось в тот раз!
конфа теперь совсем нетиповая.
13 mistеr
 
03.04.20
12:08
(11) Когда найдены все ссылки, можно отбирать по типам объектов. Это если не терпится.
14 timeforlive
 
03.04.20
12:16
Если нужно во всех документах и справочниках выполнить замену одного элемента справочника на другой, то я применяю следующий способ:
(об этом писали выше)
1. пометить на удаление заменяемый элемент
2. получить все ссылки на удаляемый элемент (код ниже)
3. выполнить условие замены.

На примере с номенклатурой

// получить результат запроса по удаляемому элементу.
ТЗ = РезультатЗапроса.Выгрузить();
                
// Получить всю номенклатуру, помеченную на удаление
МассивСсылок = ТЗ.ВыгрузитьКолонку("Ссылка");

ТабСсылок = НайтиПоСсылкам(МассивСсылок);
ТабСсылок.Сортировать("Ссылка");

СписокНоменклатурыИсключение = Новый Массив;

// Найти движения по документам.
// Если есть движения, то номенклатуру не трогаем.

Для Каждого Стр Из ТабСсылок Цикл
    Если СтрНайти(Стр.Метаданные.ПолноеИмя(), "Документ.") Тогда
        Сообщить(Стр.Ссылка);
        СписокНоменклатурыИсключение.Добавить(Стр.Ссылка);
    КонецЕсли;
КонецЦикла;    //Справочники.Спецификации.НайтиПоКоду("ФР-001589") = Стр.Ссылка

// Удалить номенклатуру из списка, по которой есть движения    
Для Каждого Эл Из СписокНоменклатурыИсключение Цикл
    
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Ссылка", Эл);
    
    МассивСтрок = ТабСсылок.НайтиСтроки(ПараметрыОтбора);
    
    Для Каждого ЭлСтр Из МассивСтрок Цикл
        ТабСсылок.Удалить(ЭлСтр);
    КонецЦикла;
    
КонецЦикла;

// Пометить на удаление все ссылки на номенклатуру
Для Каждого Стр Из ТабСсылок Цикл
    
    // Справочник
    Если СтрНайти(Стр.Метаданные.ПолноеИмя(), "Справочник.") Тогда
        
        ПометитьОбъектНаУдаление(Стр.Данные.Ссылка);
        
    // Регистр    
    ИначеЕсли СтрНайти(Стр.Метаданные.ПолноеИмя(), "РегистрСведений.") Тогда        
            
        УдалитьЗаписьРегистра(Стр.Метаданные.Имя, Стр.Данные);
        ////МенеджерЗаписи=РегистрыСведений[Стр.Метаданные.Имя].СоздатьМенеджерЗаписи();
        ////МенеджерЗаписи.Заполнить(Стр.Данные);
        ////МенеджерЗаписи.Удалить();
        
    КонецЕсли;
    
КонецЦикла;
15 timeforlive
 
03.04.20
12:17
Коротко: используйте метод НайтиПоСсылкам()
16 Мисти
 
03.04.20
14:21
спасибо! Проблема просто в том, что очень большой объем, надо как-то порционно менять!
и потом - движения-то есть! Мне нужно и в движениях заменить.
17 Сияющий в темноте
 
04.04.20
23:37
(16) так движения в регистре отбираются по регистратору и сразу видно,есть там нужный элемент и есть ли там второй.
просто,если элемент встречается в неиндексируемых полях,то для каждого реквизита это полное сканирование таблицы.
18 Креатив
 
05.04.20
20:39
(0)Поиск и удаление дублей в современных конфигурациях есть. Долго, но надёжно.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн