0. Xershi 695 08.04.17 16:46 Сейчас в теме

Поиск и восстановление битых ссылок (обычная и управляемая форма) 8.2-8.3

Обработка для поиска и восстановления битых ссылок (Объект не найден). Адаптирована для конфигураций на обычных и управляемых формах 8.2 - 8.3

Перейти к публикации

Вознаграждение за ответ
Показать полностью
Комментарии
Избранное Подписка Сортировка: Древо
1. user618695_ka 15.05.17 10:10 Сейчас в теме
Подойдет ли для удаления битых ссылок на характеристику номенклатуры в регистре сведений "Цены номенклатуры"?
2. Xershi 695 15.05.17 18:41 Сейчас в теме
(1) обработка не удаляет, а наоборот восстанавливает ссылку, т.е. создает видимый объект конфигурации на месте удаленного!
3. vechiy 32 19.07.17 11:00 Сейчас в теме
Не удалось записать объект - {ВнешняяОбработка.ПоискИВосстановлениеБитыхСсылок836.Форма.ФормаУправляемая.Форма(187)}: Ошибка при вызове метода контекста (Записать): Значение поля "Дата" не может быть пустой датой
4. Xershi 695 19.07.17 11:26 Сейчас в теме
(3) обработка восстанавливает ссылку, но ошибки заполнения не устраняет. Сначала решите вопрос с датой, а только потом используйте обработку! Или лайфхак: запустите базу в обычном приложении, там можно не записывая в базу воссоздать элемент и поменять его реквизиты!
5. vechiy 32 19.07.17 11:33 Сейчас в теме
(4)
ну как бы непонятно в чем проблема
вопрос с датой решился добавлением строки
ИначеЕсли ТипОбъекта = "Документ" Тогда
НовыйОбъект = Документы[ИмяОбъекта].СоздатьДокумент();
НовыйОбъект.УстановитьСсылкуНового(Документы[ИмяОбъекта].ПолучитьСсылку(УникальныйИд));
новыйобъект.дата='20170510';

в результате создается пустой документ и проблему это никак не решает
я неправильно пользуюсь?
проблема следующая: зуп 3.1.2.293 платформа 8.3.8
при попытке ввести исправление в "отпуск" возникает ошибка:
{ОбщийМодуль.ИсправлениеДокументовРасчетЗарплаты.Модуль(1777)}: Ошибка при вызове метода контекста (Записать)
ЗначенияПоказателейНабор.Записать();
по причине:
Запись с такими ключевыми полями существует! : ЗначенияПоказателейНачислений: <Объект не найден> (332:aeea68b599ce83af11e76c5cc180305c), 1, Оклад (Регистр сведений: Значения показателей начислений; Номер строки: 2)


по этому ID получаю гуид в вашей обработке
6. Xershi 695 19.07.17 11:48 Сейчас в теме
(5) похоже проблема еще и в других элементах, последовательно их восстановите. И затем все равно надо похоже через обычное приложение запускать, чтобы отследить ошибку в данных! Хотя отладчик и так у вас запустится, только доступа к данным не будет в пользовательском режиме.
7. vechiy 32 19.07.17 12:00 Сейчас в теме
(6) а как восстановить?
жму исправить - получаю ошибку -> копирую ид->получаю гуид->создаю объект->жму исправить->получаю ошибку уже с другим ид
8. Xershi 695 19.07.17 18:16 Сейчас в теме
(7) я же вам писал. У вас цепочка удаленных объектов. Вы их с какой целью восстанавливаете? Обычно после обмена такая проблема возникает или после удаления без ссылочного контроля. И во втором случае надо не восстанавливать, а удалить хвосты.
Плюс ко всему иногда требуется переписывать код конфигурации, чтобы такие действия были возможны. Рекомендую создать тему на форуме или обратиться к специалисту!
9. razmochaev 20.07.17 16:02 Сейчас в теме
Добрый день.
У нас платформа 1С:Предприятие 8.3 (8.3.10.2299).

При попытке подключить как внешнюю обработку возникает такая ошибка:
Невозможно подключить дополнительную обработку из файла.
Возможно, она не подходит для этой версии программы.

Метод объекта не обнаружен (СведенияОВнешнейОбработке)

Если просто открыть ее, то при выполнении команды "Получить GUID" возникает такая ошибка:
{ВнешняяОбработка.ПоискИВосстановлениеБитыхСсылок836.Форма.ФормаУправляемая.Форма(67)}: Ошибка при вызове конструктора (УникальныйИдентификатор)
GUID = Новый УникальныйИдентификатор(ГУИД);
по причине:
Недопустимое значение параметра (параметр номер '1')
10. Xershi 695 20.07.17 16:33 Сейчас в теме
(9) добрый день! Обработка идет как внешняя! Подключать их не нужно, просто запустите из меню файл! Для подключения из БСП требуется доработка метода, который вам выдало в ошибке.
11. razmochaev 20.07.17 17:59 Сейчас в теме
(10) Хорошо, а можете проконсультировать по ошибке, связанной с недопустимым значением параметра? Я так понимаю, что он не находит объект в базе (т.е. я проверяю наличие объекта в копии базы, а в этой копии этого объекта также нет), и на это ругается?
12. Xershi 695 20.07.17 18:16 Сейчас в теме
(11) значит вы нажали кнопку и не заполнили нужный реквизит. Воспользуйтесь кнопкой поиска и только потом другими!
Если речь идет об объекте метаданных, то конечно ошибка возможна, т.к. его физически нет в базе!
13. razmochaev 20.07.17 19:46 Сейчас в теме
14. ZyMik 23.07.17 18:09 Сейчас в теме
Ошибка при поиске битых ссылок в регистрах.
Типовая БП (3.0.51.12).
Валится на запросе
ВЫБРАТЬ Об.Валюта КАК Объект,
"РегистрБухгалтерии.Хозрасчетный.Валюта" КАК ТаблицаИсточник,
Об.Регистратор КАК ОбъектИсточник,
"Справочник.Валюты" КАК ТипДанных
ИЗ
РегистрБухгалтерии.Хозрасчетный КАК Об
ГДЕ Об.Валюта ССЫЛКА Справочник.Валюты И ВЫРАЗИТЬ(Об.Валюта КАК Справочник.Валюты).Ссылка есть null И Об.Валюта <> Значение(Справочник.Валюты.ПустаяСсылка)
15. Xershi 695 23.07.17 21:39 Сейчас в теме
(14) регистры состоят из других метаданных. Поэтому теоретически их вообще можно исключить из анализа. Ошибка вам сообщила что метаданные в конфигураторе отличаются от тех что записаны в предприятии. Это особенность регистра бухгалтерии.
16. ZyMik 24.07.17 08:30 Сейчас в теме
(15)
И? По факту обработка не работает. В данной ситуации нужно использовать ВалютаДт и ВалютаКт.

Согласно ТИИ у меня есть битые ссылки в двух РС, но обработка их не выдала.
Если на 8.3.6. все отлично работает (Надеюсь Вы тестирировали) - сделайте пометку, что на 8.3.8 обработка НЕ работоспособна. Чтобы другие пользователи не обломались.
17. Xershi 695 24.07.17 13:52 Сейчас в теме
(16) так через справочник валют не выводит? Или по каким метаданным битая ссылка?
18. ZyMik 24.07.17 17:45 Сейчас в теме
Есть типовая Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.43.29)
На поддержке, без изменений.
Открываю в ней Вашу обработку.
Нажимаю Поиск - по всем регистрам
Появляются 2 сообщения об ошибках.
Список битых ссылок пустой.
Хотя в регистре сведений Версии объектов есть битые ссылки.
Если глянуть отладчиком - ошибки вылетают при выполнении запроса (Выше).
Попробуй его открыть в консоли.
Прикрепленные файлы:
19. Xershi 695 24.07.17 18:12 Сейчас в теме
(18) почему так работает я вам писал в (15) . Это особенность 1С. И на таких регистрах будет ошибка, но на остальные метаданные это не влияет. Версии объектов независимый регистр, его надо почистить. Обработка такие регистры пропускает, т.к. такие данные это уже мусор, который надо зачистить, а не восстанавливать!
20. Xershi 695 24.07.17 20:43 Сейчас в теме
(18) в дополнение есть кнопка "Удалить". Она правда не удаляет независимые регистры, но если вам нужно можете добавить код туда и удалить! А проще всего открыть такой регистр и руками его удалить, т.к. ссылок на него просто нет!
21. ZyMik 25.07.17 00:15 Сейчас в теме
В общем очередная не работающая обработка.
Регистры бухгалтерии не обрабатывает.
Данные не восстанавливает. Пустая трата денег.
22. Xershi 695 25.07.17 10:41 Сейчас в теме
(21) если вы читали тему, то она звучит так: "Поиск и восстановление битых ссылок". регистры это не ссылочный тип!! Так что извините, что за вас не прочитали название, тут нельзя помочь!
33. ZyMik 30.10.17 13:05 Сейчас в теме
(22) Битые ссылки как раз в регистре.
А в них как раз и не ищет
34. Xershi 695 30.10.17 15:35 Сейчас в теме
(33) я же вам уже написал. Такие данные нужно удалять, с какой целью вы их хотите восстановить?
Регистры это вспомогательные данные, которые крепятся к ссылочным, если нет ссылочного, то такие данные не удалили!
Если вам по какой-то причине нужно для них восстановить, то нужно переписать код в обработке.
Данная разработка этого не предусматривает целенаправленно!
Т.к. реализованы кнопки по удалению регистров из базы!
23. user664177_ademar26 1 11.08.17 16:21 Сейчас в теме
Не работает не открывается форма Версия 8.3.9
{ВнешняяОбработка.ПоискИВосстановлениеБитыхСсылок836.Форма.Форма.Форма(3,8)}: Процедура или функция с указанным именем не определена (СтрНайти)
Поз = <<?>>СтрНайти(ГУИД, ":");
{ВнешняяОбработка.ПоискИВосстановлениеБитыхСсылок836.Форма.Форма.Форма(49,39)}: Процедура или функция с указанным именем не определена (СтрНайти)
Менеджер = Менеджеры[Лев(Таблица, <<?>>СтрНайти(Таблица, ".") - 1)];
{ВнешняяОбработка.ПоискИВосстановлениеБитыхСсылок836.Форма.Форма.Форма(50,67)}: Процедура или функция с указанным именем не определена (СтрНайти)
КонкретныйМенеджер = Менеджер[Прав(Таблица, СтрДлина(Таблица) - <<?>>СтрНайти(Таблица, "."))];
{ВнешняяОбработка.ПоискИВосстановлениеБитыхСсылок836.Форма.Форма.Форма(76,9)}: Процедура или функция с указанным именем не определена (СтрНайти)
Если <<?>>СтрНайти(НайденнаяСсылка, "<Объект не найден>") = 0 Тогда
{ВнешняяОбработка.ПоискИВосстановлениеБитыхСсылок836.Форма.Форма.Форма(103,42)}: Процедура или функция с указанным именем не определена (СтрНайти)
ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, <<?>>СтрНайти(ГУИДУдОбъктаСтр,":")+1, СтрДлина(ГУИДУдОбъктаСтр));
{ВнешняяОбработка.ПоискИВосстановлениеБитыхСсылок836.Форма.Форма.Форма(144,41)}: Процедура или функция с указанным именем не определена (СтрНайти)
ТипОбъекта = Лев(ТипНайденнойСсылки, <<?>>СтрНайти(ТипНайденнойСсылки, ".") - 1);
{ВнешняяОбработка.ПоискИВосстановлениеБитыхСсылок836.Форма.Форма.Форма(145,73)}: Процедура или функция с указанным именем не определена (СтрНайти)
ИмяОбъекта = Прав(ТипНайденнойСсылки, СтрДлина(ТипНайденнойСсылки) - <<?>>СтрНайти(ТипНайденнойСсылки, "."));
24. Xershi 695 12.08.17 11:51 Сейчас в теме
(23) важна не версия платформы, а версия режима совместимости конфигурации! Если у вас стоит ниже 8.3.6, то вам нужно скачать версию для 8.3.5!
25. user664177_ademar26 1 12.08.17 12:31 Сейчас в теме
26. Xershi 695 12.08.17 12:34 Сейчас в теме
(25) значит версию режима совместимости должна быть 8.3.6 и выше!
27. user664177_ademar26 1 12.08.17 12:46 Сейчас в теме
Так я не пойму что мне нужно исправить то? )
28. Xershi 695 12.08.17 13:16 Сейчас в теме
(27) использовать обработку для 8.3.5 или изменить режим совместимости в конфигурации!
29. user664177_ademar26 1 12.08.17 14:17 Сейчас в теме
А страшного ничего не произойдет если поменять режимы?
30. Xershi 695 12.08.17 15:31 Сейчас в теме
(29) страшного нет, но если перехода с 8.3.5 не делали, то полетит часть функционала. Раз такой вопрос задаете, выполняйте первую рекомендацию!
31. vania 20.10.17 16:58 Сейчас в теме
При восстановлении битых ссылок (например для документов) создается объект с новым идентификатором. Установка старого идентификатора не выполняется.
-----
Платформа: 8.3.10.2580
Конфигурация: Бухгалтерия предприятия, редакция 3.0 (3.0.52.39)
В конфигурации не используется режим совместимости.
32. Xershi 695 20.10.17 22:20 Сейчас в теме
(31) добрый вечер!
Спасибо что сообщили о проблеме!
Реализованный метод для управляемой формы в версии 1.1.1 не сработал, пришлось вернуться к записи объекта на сервере.
Если потребуется обновленный вариант обработки, сообщите в личные сообщения!
35. aleksey.kubovtsov 73 09.06.18 15:24 Сейчас в теме
спасибо автору, ранее использовал для обычных форм.
36. Gnej 29.08.18 10:23 Сейчас в теме
У клиента битые ссылки в справочниках они понятно в регистрах видны. При восстановлении справочника в регистре всме будеток?
И еще ссылка в справочнике битая но при поиске обработке по работе со справочником находится этот объект но зайти не дает пишет объект не найден. Эта обработка сможет полечить?
37. Xershi 695 29.08.18 10:39 Сейчас в теме
(36) регистры удалить, битые ссылки уйдут! Либо восстановить, если информацию по ошибке удалили!
Чтобы зайти в битую ссылку ее нужно создать, читайте описание к публикации и ее источника!
38. Gnej 29.08.18 13:10 Сейчас в теме
(37)если я приобрету и не сработает я могу вернуть?
39. Xershi 695 29.08.18 13:11 Сейчас в теме
(38) обработка за стартмани, такого функционала здесь нет!
40. Gnej 29.08.18 13:21 Сейчас в теме
Тонсть если в ключе аналитики по контрагентам битая ссылка то обработка даст ссылку поправить?
41. Xershi 695 29.08.18 13:40 Сейчас в теме
(40) нет, обработка даст ее удалить! Что и логично, а вот если ссылка была в документе или справочнике, тогда будет возможность восстановить!
42. Gnej 29.08.18 15:25 Сейчас в теме
43. Gnej 29.08.18 18:55 Сейчас в теме
(41) вот что получаю
Не удалось создать объект - {ВнешняяОбработка.ПоискИВосстановлениеБитыхСсылок836.Форма.ФормаУправляемая.Форма(188)}: Ошибка при вызове метода контекста (Записать): Попытка вставки неуникального значения в уникальный индекс:
Microsoft SQL Server Native Client 11.0: Не удается вставить повторяющуюся строку ключа в объект "dbo._Reference253" с уникальным индексом "_Reference253HPK". Повторяющееся значение ключа: (0, 0xa2939cb654afeb2b11e8a5ee8573c581).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=E, native=2601, line=1
44. Xershi 695 29.08.18 20:49 Сейчас в теме
(43) что конкретно вы делаете, ошибка вам сообщила, что ваши махинации для базы опасны и программа вам не даст этого сделать.
45. begemot 265 10.04.19 14:26 Сейчас в теме
(0) Ошибку поправьте.

Как увидеть ошибку:
В поле "Объект не найден" вставить значение, например: "<Объект не найден> (3410:96c874d435fb680c11e781968a0c6dc0)"
Нажимаем "ПолучитьGUID".
Получаем ошибку "{ВнешняяОбработка.ПоискИВосстановлениеБитыхСсылок836.Форма.ФормаУправляемая.Форма(67)}: Ошибка при вызове конструктора (УникальныйИдентификатор)
GUID = Новый УникальныйИдентификатор(ГУИД);
по причине:
Недопустимое значение параметра (параметр номер '1')"

Суть ошибки:
В процедуре "ПолучитьGUIDУдаленногоОбъектаНаСервере" вы ощичаете ГУИДУдОбъкта от лишних данных. Но используете для этого переменну формы ГУИДУдОбъктаСтр, которая имеет ограниченную длину 36 символов. В итоге от сам ГУИД обрезается и становится неверным.
46. Xershi 695 10.04.19 14:53 Сейчас в теме
(45) добрый день!
Спасибо за проявленный интерес к разработке!
Можете приложить скриншот, что вы делаете. Не совсем понятна логика ваших действий.
47. Xershi 695 10.04.19 19:13 Сейчас в теме
(45) ввел в реквизит "Объект не найден" текст "<Объект не найден> (3410:96c874d435fb680c11e781968a0c6dc0)" (без кавычек).
Нажал кнопку "Получить GUID ->"/
Заполнился реквизит "GUID" текстом "8a0c6dc--8196-11e7-96c8-74d435fb680c".
Возможно вы модифицировали обработку или же используете на каком-то режиме совместимости. В режиме совместимости 8.3.10 на платформе 8.3.14 результат на картинке:
Прикрепленные файлы:
48. begemot 265 11.04.19 09:09 Сейчас в теме
(47) Добрый день!
Заполнился реквизит "GUID" текстом "8a0c6dc--8196-11e7-96c8-74d435fb680c"

а должен заполнится значением 8a0c6dc0-8196-11e7-96c8-74d435fb680c
в первом сегменте теряется 8ой символ!
Прикрепленные файлы:
49. Xershi 695 11.04.19 10:19 Сейчас в теме
(48) вы лучше покажите скрин, где у вас нашло такую строку "<Объект не найден> (3410:96c874d435fb680c11e781968a0c6dc0)"
Похоже ошибка в формате строки. У меня битая ссылка выглядит так "<Объект не найден> (10:86ae005056c0000811e71c52548be600)".
52. begemot 265 11.04.19 14:24 Сейчас в теме
50. Xershi 695 11.04.19 10:32 Сейчас в теме
(48) посмотрел код.
И какая-то мистика. Возможно кеш или еще что влияет на работу.
Выходило, что после выполнения:
ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъкта,"<Объект не найден> (","");

Реквизит не менялся. Возможно дело в платформе. Ранее такого бага не было.
Но в любом случае поменяю код, чтобы не было путаницы!
51. Xershi 695 11.04.19 11:09 Сейчас в теме
(50) проверил разные релизы и режимы совместимости. Ошибка воспроизводится везде. Написал в поддержку 1С. И обновил публикацию для 8.3.6+.
53. begemot 265 11.04.19 14:32 Сейчас в теме
(50)
ГУИДУдОбъктаСтр - у вас реквизит формы. Тип Строка 36 символов.

Получается:
Если ГУИДУдОбъкта = "<Объект не найден> (2760:96c874d435fb680c11e78196e9cd5d58)"
При выполнении кода:
ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъкта,"<Объект не найден> (","");

СтрЗаменить возвращает строку 37 символов. Но попадая в ГУИДУдОбъктаСтр она обрезается до 36!

Здесь платформа отрабатывает так как и должна.
ГУИДУдОбъктаСтр - нужно снять ограничение по длине, или использовать локальную переменную функции
	лГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъкта,"<Объект не найден> (","");
	ГУИДУдОбъктаЧ = СтрЗаменить(лГУИДУдОбъктаСтр,")","");
	лГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаЧ,"0x","");
	лГУИДУдОбъктаСтр = Сред(лГУИДУдОбъктаСтр, СтрНайти(лГУИДУдОбъктаСтр,":")+1, СтрДлина(лГУИДУдОбъктаСтр));
	// Преобразуем GUID
	ГУИД = Сред(лГУИДУдОбъктаСтр,25,8)+"-"+Сред(лГУИДУдОбъктаСтр,21,4)+"-"+Сред(лГУИДУдОбъктаСтр,17,4)+"-"+Сред(лГУИДУдОбъктаСтр,1,4)+"-"+Сред(лГУИДУдОбъктаСтр,5,12);
    ГУИДУдОбъктаСтр = ГУИД;
Показать
54. Xershi 695 11.04.19 14:45 Сейчас в теме
(53) да, действительно. Маска подрезала вывод. Ошибки в платформе нету.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Владивосток
зарплата от 80 000 руб. до 120 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Программист 1С
Екатеринбург
зарплата от 120 000 руб. до 120 000 руб.
Полный день

Бизнес-аналитик 1С
Москва
зарплата от 140 000 руб. до 200 000 руб.
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день