Добрый день.
Столкнулся с проблемой при обмене - в одно из сообщений попал "фантомный" элемент
Как его убрать из сообщение. При попытке отменить регистрацию выдает ошибку
(1)Почему вы решили, что это фантомный элемент?
Например, был в базе документ, его пометили на удаление и выполнили непосредственное удаление.
Данные о том что документ был удален тоже мигрируют.
Может это именно такая ситуация?
(3)ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, ПроблеммныйЭлемент.Ссылка) - падает в ошибку при передаче параметра 2, аналогично скрину
ПроблеммныйЭлемент имеет гуид 0000 -0000 (все ноли) и пустую дату.
Тогда где это хранится и откуда чистить?
(21) да, если средствами 1С никак, можно в SQL найти запись. И может быть не удалять, а подправить по примеру соседней рабочей и потом в базе штатно удалить.
Выберите циклом все изменения, кроме последнего в таблицу значений, при выборе поставьте попытку исключения. Потом очистите всю регистрацию изменений через ПланыОбмена.УдалитьРегистрациюИзмененмй(УзелОбмена), а потом в цикле по таблице значений зарегистрируйте изменения
Да, похоже что ПроблемныйЭлемент был непосредственно удален из базы. Но где теперь от него очистить все? Пробую через Инструменты Разработчика - таже ошибка
(10)А почему он проблемный то?
Это стандартная ситуация.
Если удаление объекта должно мигрировать в другую базу, значит это правильно, что регистрируется удаление, и не надо ничего удалять.
РИБ его выгружает в сообщение. А при попытке загрузить сообщение с этим элементом в "приемник" - приемник уходит в ошибку "...при записи... - немогу обратотать обязательные реквизиты типа даты и т.д.", в результате риб безуспешно прекращает загрузку (это и стало причиной поиска элемента. - элемент мне наверняка не нужен - менять стандартный "ПриЗаписи" нецелесообразно. - Значит надо удалить "бородавку"... как
(12)Допустим, вы удалите его из регистрации, вы же понимаете, что при следующем непосредственном удалении документа ситуация повторится?
То есть проблему этим вы не исправите, только ее частное проявление.
Удалить просто - вызвать метод ПланыОбмена.УдалитьРегистрациюИзмененмй(УзелОбмена, Данные)
Где данные - тип УдалениеОбъекта с ссылкой на удаленный документ.
Полностью согласен. В этой БД за 9лет работы первый прецендент. Примерно знаю при каких обстоятельствах могло произойти.
А вот с удалением пока беда ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, ПроблеммныйЭлемент.Ссылка) - не проходит - както по другому... не пойму
УзелОбмена = ПланыОбмена.Полный.НайтиПоКоду("009"); //ищем узел плана обмена по коду, из данного узла будем считывать изменения
МоеСообщение = 687;
Если УзелОбмена <> ПланыОбмена.Полный.ПустаяСсылка() Тогда //если узел обмена найден тогда считываем изменения
МассивВыгружаемыхЭлементов = Новый Массив;
ЗапросПланОбмена = Новый Запрос; //запросом выберем изменения РеализацияТоваровУслуг
ЗапросПланОбмена.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслугИзменения.Узел,
| РеализацияТоваровУслугИзменения.НомерСообщения,
| РеализацияТоваровУслугИзменения.Ссылка КАК ЭлементВыгрузки
|ИЗ
| Документ.РеализацияТоваровУслуг.Изменения КАК РеализацияТоваровУслугИзменения
|ГДЕ
| РеализацияТоваровУслугИзменения.Узел = &МоеСообщение
| РеализацияТоваровУслугИзменения.НомерСообщения = &УзелОбмена";
ЗапросПланОбмена.УстановитьПараметр("УзелОбмена", УзелОбмена);
РезультатПланОбмена = ЗапросПланОбмена.Выполнить();
Если НЕ РезультатПланОбмена.Пустой() Тогда
ВыборкаПланОбмена = РезультатПланОбмена.Выбрать(); //создаём выборку изменений, будут выбраны измененные элементы справочника Номенклатура из узла обмена указанного выше
Пока ВыборкаПланОбмена.Следующий() Цикл //цикл по выборке
Если ВыборкаПланОбмена.НомерСообщения=МоеСообщение тогда
МассивВыгружаемыхЭлементов.Добавить(ВыборкаПланОбмена.ЭлементВыгрузки); //заполняем массив элементов для выгрузки
конецесли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Для каждого элементМассива из МассивВыгружаемыхЭлементов Цикл
сообщить(" "+ элементМассива + " его GUID "+ элементМассива.уникальныйИдентификатор());
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена.Ссылка, элементМассива.Ссылка);
КонецЦикла;
Показать
- падает в ошибку при передаче параметра 2, т.к. гуида нет (00000)
(16) Тогда в копии базы тестирование и исправление с созданием отсутствующих.
И как-то целую запись потом передать в рабочую базу.
Если база большая, это на несколько дней может растянуться.
В случае РИБ создавать отсутствующие не желательно.
База 800гб ТИИ не подойдет.
Я понимаю что я что-то не то удаляю - я пытаюсь элементМассива.Ссылка удалить признак выгрузки, а как удалить строку в которой упоминается этот элемент? (см скрин из 10)
А где хранится эта строка - как найти эту таблицу.
Документы
=> _Document<n> - таблица документов для каждого объекта метаданных "документ".
=> _Document<n>_VT<k> - табличная часть документа - для каждой табличной части каждого документа.
=> _DocumentChangeRec<n> - таблица регистрации изменений объекта метаданных типа "документ". Создается для каждого объекта метаданных типа "документ", если он участвует хотя бы в одном плане обмена.
Предполагаю в моем случае в _Document<Реализация> нету, а в _DocumentChangeRec<Реализация> надо искать эту строку.
Или где?