Имя: Пароль:
1C
1С v8
Избитый вопрос по битой ссылке Единицы измерения в УТ10.3
0 Мимохожий Однако
 
25.05.18
08:27
УТ10.3
есть позиция номенклатуры, в которой битые ссылки на единицах измерения. Попытался перевыбрать единицы измерения. Но при записи номенклатуры ругань на то, что единицы измерения уже использованы в документах и регистрах.
Попытался программно поменять.
..
    Ном=Номенклатура.ПолучитьОбъект();
    Ном.ОбменДанными=Истина;
    Ном.БазоваяЕдиницаИзмерения=БазоваяЕдиницаИзмерения;
    Ном.ЕдиницаДляОтчетов=ЕдиницаДляОтчетов;
    Ном.ЕдиницаХраненияОстатков=ЕдиницаХраненияОстатков;
    Ном.Записать();

Результат отрицательный.
ТИИ с восстановлением объектов не хочу запускать, т.к. может появиться неизвестная кучка ненужных объектов.
...
Дело осложняется тем, что у единиц измерения есть Владелец.
Может есть лайфхак для выборочного восстановления битых ссылок?
1 Гипервизор
 
25.05.18
08:36
(0) Так может заменить в документах и регистрах?
2 Мимохожий Однако
 
25.05.18
08:38
(1) Замена проблематична. Базе лет 6. Большой объем.
..
Но я решил задачку следующим кодом

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    ЗафиксироватьВладельцаЕдиницы(ЕдиницаДляОтчетов);
    ЗафиксироватьВладельцаЕдиницы(ЕдиницаХраненияОстатков);

    Ном=Номенклатура.ПолучитьОбъект();
    Ном.ОбменДанными.Загрузка=Истина;
    Ном.БазоваяЕдиницаИзмерения=БазоваяЕдиницаИзмерения;
    Ном.ЕдиницаДляОтчетов=ЕдиницаДляОтчетов;
    Ном.ЕдиницаХраненияОстатков=ЕдиницаХраненияОстатков;
    Ном.Записать();
    
    Сообщить("Записали единицы номенклатуры "+Ном.Наименование);
КонецПроцедуры

Процедура ЗафиксироватьВладельцаЕдиницы(Единица)
    Ед=Единица.ПолучитьОбъект();
    Ед.Владелец=Номенклатура;
    Ед.Записать();
КонецПроцедуры
...
На форме перед запуском подготавливаю элементы измерения.
Для разовой задачи помогло.

Спасибо за внимание
3 Сияющий в темноте
 
25.05.18
09:34
Если битые ссылки,то ссылки есть,а элемента нету.
Что мешает через установитьссылкунового добавить эту ссылку к новому элементу?
и больше не переносите номенклатуру без единиц
4 hhhh
 
25.05.18
09:37
(2) можно запустить тии на копии, а потом выгрузка-загрузка xml перенести в рабочую только то, что нужно.
5 Мимохожий Однако
 
25.05.18
09:37
(3) Примерчик кода сбрось для затравки.
Ошибка образовалась при неудачной замене дублей номенклатуры. Это не новый элемент номенклатуры, а давно используемый.
6 Мимохожий Однако
 
25.05.18
09:38
(4) ТИИ на пробной копии показала кучу других ошибок ))
А восстановленные  объекты приобрели неудобоваримый вид.
7 mehfk
 
25.05.18
09:46
(0) >> Может есть лайфхак для выборочного восстановления битых ссылок?
Есть. Вызываешь программиста и ставишь задачу.
8 Мимохожий Однако
 
25.05.18
19:12
(7) Шутка засчитана. Спасибо. А по делу?
9 mehfk
 
25.05.18
20:27
Увольняйся, пока не уволили за несоответствие занимаемой должности.
10 Мимохожий Однако
 
25.05.18
20:35
(9) Мне неоткуда увольняться. Я свободный художник. Ты чего такой злой? Пятница вроде. )) Подскажи, если спец. Стебаться и я могу.
11 mehfk
 
25.05.18
20:38
Поскажу, если оплатишь.
12 Мимохожий Однако
 
25.05.18
20:39
(11) Не оплачу. Давай,до свидания.
13 mehfk
 
25.05.18
20:39
Нищеброд.
14 Мимохожий Однако
 
25.05.18
20:40
(13) Это твоя подпись
15 mehfk
 
25.05.18
20:42
Да ты еще и скудоумен.
16 Cyberhawk
 
26.05.18
00:03
Я так и не понял: сколько платят за решение вопроса? ))
17 Мимохожий Однако
 
26.05.18
05:40
(16) Вопрос я решил еще в (2).
ОФФ: Я не заказчик. Из-за невинного вопроса про "лайфхак" на будущее - получил небольшой срач в ответ... На пустом месте... Всё как в жизни ))
18 Serg_1960
 
26.05.18
08:12
(17) Sorry,  свой избитый вопрос ты не решил - ты его усложнил .
19 Мимохожий Однако
 
26.05.18
08:20
(18) ОК. Но кроме критики хотелось бы пример кода или хотя бы алгоритм исправления на будущее.
20 MaxS
 
26.05.18
08:32
(19) Смысл примерно такой:
ОбъектНовойЕИ.УстановитьСсылкуНового(БитаяСсылкаЕИ);

EndOff
Много критики... ;)
21 Мимохожий Однако
 
26.05.18
08:36
(20) Спасибо.
22 Serg_1960
 
26.05.18
08:43
(19) В понедельник, если не забуду.
23 Serg_1960
 
28.05.18
11:10
//- Видишь суслика?
    //- Нет.
    //- И я не вижу. А он есть.
    //(ДМБ)
    
    Запрос = Новый Запрос();
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Хозяин,
    |    Номенклатура.ЕдиницаХраненияОстатков КАК Суслик
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.ЕдиницаХраненияОстатков <> ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка)
    |    И Номенклатура.ЕдиницаХраненияОстатков.Ссылка ЕСТЬ NULL";
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        GUID = "Проверка логической целостности... " + Выборка.Суслик;    // имитация работы со строкой из ТИИ
        GUID = Сред(GUID, Найти(GUID, "<Объект не найден>") + 20);        // выделяем начало ссылки
        GUID = Сред(GUID, 1, Найти(GUID, ")") - 1);                        // отрезаем конец строки
        GUID = Сред(GUID, Найти(GUID, ":") + 1);                        // освобождаемся от кода вида ссылки
        GUID = Сред(GUID,25,8) + "-" + Сред(GUID,21,4) + "-" + Сред(GUID,17,4) + "-" + Сред(GUID,1,4) + "-" + Сред(GUID,5,12);
        GUID = Новый УникальныйИдентификатор(GUID);
        // Оно, конечно, нафиг не нужно было так извращаться - сама ссылка уже есть в запросе.
        // Но мы делаем вид, что якобы сканируем протокол ТИИ, - так оно веселее :)
        Суслик = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
        Суслик.Владелец = Выборка.Хозяин;
        Суслик.УстановитьСсылкуНового(Справочники.ЕдиницыИзмерения.ПолучитьСсылку(GUID));
        Суслик.Записать();    // можно получить и открыть форму, чтобы сразу дозаполнить... но лень-матушка писать :)
        
    КонецЦикла;
24 Мимохожий Однако
 
28.05.18
11:18
(23) Респект. Спасибо.
25 Cyberhawk
 
28.05.18
19:57
Не учел английский вариант "Объект не найден"
26 Serg_1960
 
28.05.18
20:31
А также языки: азербайджанский, армянский, стран Прибалтики, Беларуси, Болгарии, Молдавии, Грузии и наших ближневосточных коллег.
27 Cyberhawk
 
28.05.18
20:41
(26) Пожалуйста:
vi     Không tìm thấy đối tượng
tr     Nesne bulunamadı
ro     Obiectul nu a fost găsit
pl     Obiekt nie odnaleziono
en     Object not found
de     Objekt nicht gefunden
lt     Objektas nerastas
lv     Objekts nav atrasts
uk     Об`єкт не знайдено
bg     Обектът не е намерен
ru     Объект не найден
kk     Объект табылған жоқ
ka     ობიექტი არ მოიძებნა

Но ты уже и сам понял, что твой вариант не самый надежный
28 Serg_1960
 
28.05.18
20:57
Feci quod potui faciant meliora potentes
29 Сияющий в темноте
 
29.05.18
09:56
Отсутствие обьекта проще проверять запросом по ссылке из привегилерованного модуля,запрос будет быстрее чем получение обьекта,особенно в случае,когда обьект неожиданно найдется
Основная теорема систематики: Новые системы плодят новые проблемы.