Имя: Пароль:
1C
1С v8
Приведение дублей к одному элементу
0 balak05
 
02.04.14
13:52
Здравствуйте. Делаю обработку по загрузке контрагентов
Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    Контрагенты.Ссылка
        |ИЗ
        |    Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |    Контрагенты.Наименование = &Наименование";
        
Запрос.УстановитьПараметр("Наименование", СОКРЛП(ОбъектDBF.name));
        
        
Результат = Запрос.Выполнить();
        
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Если ВыборкаДетальныеЗаписи.Количество() > 1 Тогда
Сообщить("Имеются дубли контрагента " + Результат.Выгрузить()[0].Ссылка.Наименование);
ОбъектDBF.Следующая();
Продолжить;
ИначеЕсли ВыборкаДетальныеЗаписи.Количество() = 1 Тогда
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
НовЭлемент = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
КонецЦикла;
Иначе
НовЭлемент = Справочники.Контрагенты.СоздатьЭлемент();
КонецЕсли;

Подскажите как в случае если несколько контрагентов с одинаковым наименованием заменить их на первый. Остальные смогу удалить через получитьобъект и удалить.
1 Maxus43
 
02.04.14
13:56
ты сначала типовой обработкой Поиск и замена дублирующих элементов прокрутись, чтоб не было такой ситуации как в (0) вобще
2 Анютик
 
02.04.14
13:57
есть типовая обработка по поиску и замене дублей...зачем изобретать велосипед?
3 balak05
 
02.04.14
13:59
(1) (2) про типовую обработку знаю. Но хочу реализовать так
4 Maxus43
 
02.04.14
14:00
(3) как так? У тебя ничего нет, а в той обработке всё есть. Думаешь замена ссылок делается 2-мя строчками кода?
5 balak05
 
02.04.14
14:03
(4) То есть я так понял ссылку надо заменить?
6 Maxus43
 
02.04.14
14:04
(5) а как ещё ты схлопнешь 2 ссылки в одну? Там же докумены по ним могут быть проведены уже и т.д.
7 balak05
 
02.04.14
14:08
(6) А если переприсвоить Результат.Выгрузить()[1].Ссылка.ПолучитьОбъект().Ссылка = Результат.Выгрузить()[0].Ссылка?
8 Maxus43
 
02.04.14
14:22
(7) дубли в системе всё равно останутся, или это нормально?
Сделай ещё упорядочивание по ссылке, и тогда можешь использовать своё "переприсвоить", но смысла в этом не очень
9 balak05
 
02.04.14
14:26
(8) Нет же я же потом могу получитьобъект и удалить? Или не смогу... ссылку то я переприсвоил)
10 Maxus43
 
02.04.14
14:30
(9) Откуда удалить? Из 1с? А Если по этому элементу уже документы введены?
Какую ссылку ты переприсвоил? Ты просто нашёл, допустим, 2 элемента справочника Контрагенты с одинаковым наименованием. Что надо с ними сделать дальше?
Физически удалить дубли из 1с - делай поиск и замена ссылок, потом удаляй. Как иначе то?
11 balak05
 
02.04.14
14:34
(10) ты прав. Тогда необходимо выбирать все элементы где встречается ссылки на элементы со второго, переприсвоить у них ссылки и перезаписать эти элементы. Затем можно удалить сами элементы.
12 Maxus43
 
02.04.14
14:37
(11) всё это умеет обычная типовая обработка, вперёд!
З.ы. бэкап не забудь
13 balak05
 
02.04.14
14:40
(12) Ладно спасибо. Просто хотелось чтобы все одной кнопкой получилось)
14 Йохохо
 
02.04.14
14:42
(13) перестанут идеи из (7) появляться, сможешь вместо двух бэкапов делать один и делать все одной кнопкой
15 y22-k
 
02.04.14
18:14
(0) Любишь конструировать велосипеды?
16 lex-kex
 
02.04.14
18:18
От себя ляпну, что обычно в стандартных конфигурациях где есть Контрагент есть еще Договор контрагента, и тут самое главное и после замены контрагента заменить ссылки на договоры
Независимо от того, куда вы едете — это в гору и против ветра!