Имя: Пароль:
1C
1С v8
Можно ли поменять УИД существующего справочника?
0 БукинГена
 
07.12.15
13:59
Вариант замена ссылок не предлагать
1 dsdred
 
07.12.15
14:26
Справочника или элемента справочника?
2 cw014
 
07.12.15
14:26
Можно и нельзя одновременно
3 cw014
 
07.12.15
14:26
Средствами 1С нельзя
4 cw014
 
07.12.15
14:26
Средствами MSSQL можно
5 cw014
 
07.12.15
14:27
Хотя вру. Средствами 1С можно
6 cw014
 
07.12.15
14:27
И + это все для элемента справочника
7 Живой Ископаемый
 
07.12.15
14:27
2(5) м... Через ВИД на 8.3.5+?
8 cw014
 
07.12.15
14:29
(7) Неее, более просто
9 aleks_default
 
07.12.15
14:29
(0)А можно узнать обоснование такой необходимости?
10 Живой Ископаемый
 
07.12.15
14:32
2(8) рассказывай, потому что я например все время думал что нельзя
11 dsdred
 
07.12.15
14:49
(10) Просто новый уникальный идентификатор подсовываешь элементу и все. Если про Элемент справочника речь идет.
12 cw014
 
07.12.15
14:50
(11) И как ты это сделаешь?
13 Живой Ископаемый
 
07.12.15
14:52
14 vde69
 
07.12.15
14:54
(11) а то, что в реквизитах и измерениях других объектов записан старый гуид - пофигу?
15 Garykom
 
гуру
07.12.15
14:55
(14) ыыыы :) как понял он как раз не хочет замену делать в других объектах

а просто подменить уид который везде прописан на нужный
16 Garykom
 
гуру
07.12.15
14:55
(15)+ но задачка довольно редкая, обычно дубли и нужно все равно менять в других
17 Живой Ископаемый
 
07.12.15
14:56
2(11) вообще пофигу, их можно поменять с помщь чуть допиленной бработки поиск и замена занчений. Но вот на само " подсовываешь элементу и все." я бы посмотрел
18 БукинГена
 
07.12.15
14:57
(9) Данные при обмене задублировались. Если делать через замену ссылок слишком дофига документов перепровести. Проще менять уид
19 bolobol
 
07.12.15
14:57
(11) "подсовываешь элементу", простите, "в куда"?
20 cw014
 
07.12.15
14:58
Кому тут нужен был способ через 1С поменять UUID у элемента справочника? P.S. (18) тебе это не поможет
21 bolobol
 
07.12.15
14:59
(18) При заменен ссылок - как раз именно "перепроводить" ничего не требуется. Перепроводить потребуется то, что из-за смены элементов сменило дальнейшее поведение, т.е. - не убежать никуда.
22 Garykom
 
гуру
07.12.15
14:59
(18) при дублях не прокатит, сами то подумайте

ну подменили уид у элемента справочника, но этот справочник где раньше был теперь его там нету ))
23 Живой Ископаемый
 
07.12.15
15:00
2(20) мне, ну вернее давно не нужен был, но всегда интересно...
24 cw014
 
07.12.15
15:00
(23) Почту давай, экспромт выкину
25 Garykom
 
гуру
07.12.15
15:00
задачка полезная только если нужно 2 элемента местами быстро поменять

но тогда не проще ли их переименовать?
26 Живой Ископаемый
 
07.12.15
15:01
octoberhammer<тут собачка>gmail<тут точка>com
27 Живой Ископаемый
 
07.12.15
15:02
будет работать на 8.2.19?
28 PR третий
 
07.12.15
15:04
(0) Нет
29 PR третий
 
07.12.15
15:05
(18) Рукалицо
Прочитай (14)
30 aleks_default
 
07.12.15
15:05
(24) А че, секретная технология? Тут выложить нельзя? Или хотя бы в общих чертах...
31 cw014
 
07.12.15
15:10
(27) Лови
32 cw014
 
07.12.15
15:10
(30) Это авторская разработка ))))
33 PR третий
 
07.12.15
15:11
(20) Через 1С нельзя поменять гуид справочника.
34 cw014
 
07.12.15
15:11
(33) Ну можно, как оказывается
35 HEKPOH
 
07.12.15
15:12
(32) а все остальные - народные)))
36 cw014
 
07.12.15
15:13
Ну ладно вам, стесняюсь я
37 PR третий
 
07.12.15
15:18
(34) Ну да ну да. Идею в общем и целом обрисуешь?
38 cw014
 
07.12.15
15:19
(37) Почту давай
39 cw014
 
07.12.15
15:19
Ай, ладно, пофигу
40 vde69
 
07.12.15
15:20
(18) у меня есть обработка именно для такого :)
41 cw014
 
07.12.15
15:20
42 PR третий
 
07.12.15
15:23
(38) [email protected]
Да можешь просто идею сказать.
43 PR третий
 
07.12.15
15:24
(41) Это код этой обработки?
44 cw014
 
07.12.15
15:25
(43) Ага
45 vde69
 
07.12.15
15:26
ну вкратце


&НаСервере
Функция ВыполнитьЗаменуНаСервере()
    Результат = Истина;
    УстановитьПривилегированныйРежим(Истина);
    Попытка
        НачатьТранзакцию();
        
            СписокРезультата.Очистить();
            
            // ---------------------------------------------
            // регистрируем связь на новый элемент
            мСоответствияОбъектов = Новый Структура;
            
            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            // хард кодинг, в будующем нужно будет исправить
            //
            мСоответствияОбъектов.Вставить("УзелИнформационнойБазы", ПланыОбмена.ОбменУПР_БухгалтерияПредприятия3.НайтиПоКоду("Р")); // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            
            
            мСоответствияОбъектов.Вставить("УникальныйИдентификаторПриемника", СтрЗаменить(Строка(ТекущееЗначение.УникальныйИдентификатор()), "-", "_"));
            мСоответствияОбъектов.Вставить("УникальныйИдентификаторИсточника", НовоеЗначение);
            мСоответствияОбъектов.Вставить("ТипПриемника", "");
            мСоответствияОбъектов.Вставить("ТипИсточника", "");
            
            РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьЗапись(мСоответствияОбъектов, Истина);
            
            мСоответствияОбъектов.Вставить("ТипПриемника", ОбщегоНазначения.СтроковоеПредставлениеТипа(ТипЗнч(ТекущееЗначение)));
            мСоответствияОбъектов.Вставить("ТипИсточника", ОбщегоНазначения.СтроковоеПредставлениеТипа(ТипЗнч(НовоеЗначение)));
            
            РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьЗапись(мСоответствияОбъектов, Истина);
            
            // ---------------------------------------------
            // заменяем все ссылки
            мСписок = Новый Массив;
            мСписок.Добавить(ТекущееЗначение);
            ТаблицаСсылок = НайтиПоСсылкам(мСписок);
            
            Для Каждого СтрокаТаблицы Из ТаблицаСсылок Цикл
                Если Метаданные.Справочники.Содержит(СтрокаТаблицы.Метаданные)
                    ИЛИ Метаданные.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
                                  
                    мОбъект = СтрокаТаблицы.Данные.ПолучитьОбъект();
                    
                    Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.СтандартныеРеквизиты Цикл
                        Если Реквизит.Имя = "Ссылка" Тогда
                            Продолжить;
                        КонецЕсли;
                        
                        Если мОбъект[Реквизит.Имя] = ТекущееЗначение Тогда
                            мОбъект[Реквизит.Имя] = НовоеЗначение;
                        КонецЕсли;
                    КонецЦикла;
                                  
                    Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
                        Если мОбъект[Реквизит.Имя] = ТекущееЗначение Тогда
                            мОбъект[Реквизит.Имя] = НовоеЗначение;
                        КонецЕсли;
                    КонецЦикла;
                    
                    Для Каждого ТабличнаяЧасть Из СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
                        Для Каждого СтрокаТабличнойЧасти Из мОбъект[ТабличнаяЧасть.Имя] Цикл
                            Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл
                                Если СтрокаТабличнойЧасти[Реквизит.Имя] = ТекущееЗначение Тогда
                                    СтрокаТабличнойЧасти[Реквизит.Имя] = НовоеЗначение;
                                КонецЕсли;
                            КонецЦикла;
                        КонецЦикла;
                    КонецЦикла;
                                                                      
                    Если Метаданные.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
                        Если  СокрЛП(СтрокаТаблицы.Метаданные.Проведение) = "Разрешить"
                            И ПерепроводитьДокументы
                            И мОбъект.Проведен Тогда
                            
                            мОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
                        КонецЕсли;
                    КонецЕсли;
                        
                    мОбъект.ОбменДанными.Загрузка = Истина;
                    мОбъект.Записать();
                    
                ИначеЕсли Метаданные.РегистрыСведений.Содержит(СтрокаТаблицы.Метаданные) Тогда
                    Поля = Новый Массив;
                    
                    Для Каждого Измерение Из СтрокаТаблицы.Метаданные.Измерения Цикл
                        Поля.Добавить(Измерение.Имя);
                    КонецЦикла;
                    
                    Для Каждого Ресурс Из СтрокаТаблицы.Метаданные.Ресурсы Цикл
                        Поля.Добавить(Ресурс.Имя);
                    КонецЦикла;
                    
                    МенеджерЗаписи = РегистрыСведений[СтрокаТаблицы.Метаданные.Имя].СоздатьМенеджерЗаписи();    
                    ЗаполнитьЗначенияСвойств(МенеджерЗаписи, СтрокаТаблицы.Данные);
                    МенеджерЗаписи.Прочитать();
                    Для Каждого Поле Из Поля Цикл
                        Если МенеджерЗаписи[Поле] = ТекущееЗначение Тогда
                            МенеджерЗаписи[Поле] = НовоеЗначение;
                        КонецЕсли;
                    КонецЦикла;
                    МенеджерЗаписи.Записать();
                КонецЕсли;
            КонецЦикла;
            
            ТаблицаСсылок = НайтиПоСсылкам(мСписок);
            Для Каждого СтрокаТаблицы Из ТаблицаСсылок Цикл
                Если Метаданные.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
                    Если СписокРезультата.НайтиПоЗначению(мОбъект.Ссылка) = Неопределено Тогда
                        СписокРезультата.Добавить(мОбъект.Ссылка);
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
            
            ТекущееЗначение.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
            
        Если Тестирование Тогда     
            ОтменитьТранзакцию();
        Иначе
            ЗафиксироватьТранзакцию();
        КонецЕсли;
    Исключение
        Сообщить(ОписаниеОшибки());
        ОтменитьТранзакцию();
        СписокРезультата.Очистить();
        Результат = Ложь;        
    КонецПопытки;
    УстановитьПривилегированныйРежим(Ложь);
    
    Возврат Результат;
КонецФункции
46 PR третий
 
07.12.15
15:27
(44) Что это за хрень-то?
Маленький кусочек обработки поиска и замены значений что ли?
Где там подмена гуида ссылки-то?
47 Живой Ископаемый
 
07.12.15
15:31
2(39)не, ну здрасьте, и в каком там месте подмена УИДа у существующего элемента справочника?
Старый удаляется, новый создается... у существующего ссылка не меняется
48 Живой Ископаемый
 
07.12.15
15:32
Возможно в релизах старше 8.3.5, которые позволяют писать в ВИД можно поменять UID. Но экспериментально - я не пробовал.
49 cw014
 
07.12.15
15:33
(46)(47) Что есть подмена гуида? Изменение у записи Гуида? А чем не устраивает копирование записи и удаление старой? Вариант? Вариант!!! И безо всяких ВИДов и доступов к скулю на прямую
50 cw014
 
07.12.15
15:33
+(49) Задача решена
51 Живой Ископаемый
 
07.12.15
15:35
2(49) Тогда держи еще 101-й вариант:

лайфхак-код - это сериализовать нужный элемент; в тексте, который получился заменить UID, оригинальный элемент удалить;
десериализовать элемент из ХМЛ-текста (в котором уже новый UID). Но все равно это будет новый 'tktvyn справочника. а не старый
52 PR третий
 
07.12.15
15:36
(49) Включаем мозг и читаем (0)
53 Живой Ископаемый
 
07.12.15
15:37
преимущество - вообще не нужно будет запорачиваться на проверку и перебор реквизитов и табличных частей.
54 mehfk
 
07.12.15
15:40
Запустить выгрузку в идентичную конфигурацию, получить XML, открыть XML как текст, заменить все неправильные guidы на правильные. Загрузить в пустую базу. Если в результате замены не полчится неуникальных записей, считай повезло.
55 cw014
 
07.12.15
16:09
(52) "Вариант замена ссылок не предлагать" - я не заменяю ссылки
56 cw014
 
07.12.15
16:13
Ладно, я так и думал. Стоило один вариант решения предложить - навалились все... По сути одно и то же действие, единственный момент - старая запись тухнет, новая создается. И тут все с XML полезли и т.д. Суть задачи остается исходной. И такое решение имеет место быть
57 cw014
 
07.12.15
16:13
И первый это решение предложил Я!!!
58 PR третий
 
07.12.15
16:15
(55) А что ты делаешь? Ты можешь в двух словах сказать, что ты делаешь, а не давать код?
59 ЧеловекДуши
 
07.12.15
16:16
(56) Чем по вашему отличие новой записи от старой? :)
60 hhhh
 
07.12.15
16:17
(57) это решение уже десять лет гуляет по инету. Сомневаюсь, что это ты первый предложил.
61 spock
 
07.12.15
16:17
(55) Ты просто создаешь копию существующего элемента справочника, который потом удаляется. После выполнения этого кода будут битые ссылки в реквизитах, ссылающихся на этот элемент.
Это же банальщина...
62 ЧеловекДуши
 
07.12.15
16:17
(0) Колитесь, что наделали, что так нужен Гуид?
63 spock
 
07.12.15
16:18
(48) А что за нововведение с ВИДом?
64 aleks_default
 
07.12.15
16:28
(62) читай (18)
65 Живой Ископаемый
 
07.12.15
16:33
2(63) Через ВИД теперь писать можно. Все это знают.
66 ИсчадиеADO
 
07.12.15
16:40
(56) а ловко ты их :)
там на почту еще не навязчивое предложение увеличить длину полоски не приходило?))
67 PR третий
 
07.12.15
16:45
(66) Что ловко-то? :))
— Здравствуйте, у меня болит живот. У вас есть лекарство от живота?
— Да есть, выпейте аскорбинку.
— Но позвольте, аскорбинка не помогает от живота.
— Ладно, я так и думал. Стоило предложить аскорбинку - навалились все... По сути одно и то же действие, прием таблетки. И тут все с животами полезли и т.д. Суть задачи остается исходной. И такое решение имеет место быть. И первый это решение предложил Я!!!
68 Живой Ископаемый
 
07.12.15
16:49
да, ладно, нормальное решение. просто я думал что какой-то взаправдашний, а не читерский способ. Но это уже проблемы моих ожиданий
69 PR третий
 
07.12.15
16:52
(68) Да какой способ-то? (61) прав? Если прав, то что _вообще_ было предложено-то? Создание дубля элемента справочника? И это как-то решает проблему ТС?
70 ИсчадиеADO
 
07.12.15
16:53
(68) нормальное, я ж не спорю :) а почту таки проверь :))
71 Живой Ископаемый
 
07.12.15
16:57
проверил, но у меня почта на Маке, а там текст в кракозябликах...
72 PiterPrg
 
07.12.15
17:04
Я вот тут http://catalog.mista.ru/public/317245/ вполне успешно меняю. НО!!!
1. Только на базах SQL.
2. На ваш страх/риск (у меня не глючит), т.е. потом ни чем не кидать, делаем бекапы
73 PiterPrg
 
07.12.15
17:05
(72) Уточнение: Только на базах MSSQL
74 ИсчадиеADO
 
07.12.15
17:07
(71) черд, сорвалась реклама, ушел покупатель :(
75 PR третий
 
07.12.15
17:08
(74) Пошли ему картинку, что ты теряешься-то? :))
76 PiterPrg
 
07.12.15
17:11
(72) Уточнение 2: Ссылки в проводках меняет только 3-й алгоритм
77 PiterPrg
 
07.12.15
17:21
(72) Прикольно. Вставлял ссылку на инфостарт, а получился каталог миста. Волшебник что-то с инфостартом не поделил?
78 Мыш
 
07.12.15
17:46
(77) Скорее наоборот, партнерство.
79 lEvGl
 
гуру
07.12.15
17:49
всю тему прочитал, а гуид менять так и не научили (
80 PiterPrg
 
07.12.15
17:53
(79) Ты уверен, что все прочитал? (72) в этой обработке я меняю. Прямыми запросами к MSSQL. При желании текст можно почитать. Все в модуле объекта.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.