Имя: Пароль:
1C
1C 7.7
v7: Как по "<Объект не найден>(/)" найти документ в не битой базе?
0 lukinskiy
 
26.10.12
18:11
Есть две базы, связанные по УРБД. В периферийной пропала часть документов в движениях регистров.
Ищу ссылки на пропавшие документы по всем регистрам:

   Для Ин = 1 По Метаданные.Регистр() Цикл
       РегВид = Метаданные.Регистр(Ин).Идентификатор;
       Рег = СоздатьОбъект("Регистр." + РегВид);
       Рег.ВыбратьДвижения(,);
       Пока Рег.ПолучитьДвижение()=1 Цикл
           ТекДок = Рег.ТекущийДокумент();
           Если ПустоеЗначение(ТекДок) = 0 Тогда
               Состояние("Регистр=""" + РегВид + """ дата=" + ТекДок.ДатаДок);
               Если ТекДок.Выбран() = 0 Тогда
                   Сообщить("Регистр=""" + РегВид + """ текущий документ=" + ТекДок);
               КонецЕсли;
           КонецЕсли;
           Для Ин = 1 По Метаданные.Регистр(РегВид).Измерение() Цикл
               ИдентИзмерения = Метаданные.Регистр(РегВид).Измерение(Ин).Идентификатор;
               ЗначИзмерения = Рег.ПолучитьАтрибут(ИдентИзмерения);
               Если ТипЗначенияСтр(ЗначИзмерения) = "Документ" Тогда
                   Если ПустоеЗначение(ЗначИзмерения) = 0 Тогда
                       Если ЗначИзмерения.Выбран() = 0 Тогда
                           Сообщить("Регистр=""" + РегВид + """ измерение=""" + ИдентИзмерения + """ значение=""" + ЗначИзмерения + """");
                       КонецЕсли;
                   КонецЕсли;
               КонецЕсли;;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;

Теперь вопрос - как (естественно, в центральной, не испорченной, базе) найти соответствующие документы?
Знаю, что в сообщении "<Объект не найден>(X/Y)" X - внутренний ID объекта. Но, чтобы его найти с помощью ЗначениеИзСтрокиВнутр() нужен еще ID вида объекта. Где его взять? (ЗначИзмерения.Вид() выдает пустую строку)
И второй вопрос - что такое Y. В части случаев у меня там появляется код центральной базы, но есть документы, в которых Y пустой, а они тоже пришли из центральной.
1 Mikeware
 
26.10.12
18:29
x - собственно ид объекта в десятеричном представлени. а y - идентификатор иб создания объекта.
_idToStr(x)+y даст тебе собственно их "как в базе"
вида ты не получишь никак
2 Mikeware
 
26.10.12
18:29
да, и "просто так документы не пропадают"
3 lukinskiy
 
26.10.12
18:35
Как-то странно получается - система помнит ID документа, но при этом теряет часть информации - какого вида это был документ?
4 aleks-id
 
26.10.12
18:37
(3) нажми в списке документов Shift+del и удивись
5 Mikeware
 
26.10.12
18:40
(3) система уже не помнит ид документа. :-) Это хвосты где-то не в системе...
По большому счету, для существующего документа иддокдеф пофигу, его всегда можно определить по иду. а для отсутсвующего документа тем более пофиг - какая разница, какой он _был_, если его уже _нету_
6 lukinskiy
 
26.10.12
18:53
(4) В каком списке?
(5) А где же они - в мировом разуме что ли? :) Как раз ID-то она прекрасно помнит. И именно такой ID имеют эти документы в центральной базе, где они сохранились (я проверял). Но как их искать без этого дурацкого ID вида объекта, непонятно. Разве что перебором...
7 Mikeware
 
26.10.12
18:59
(6) ну если они где-то есть, найди документ по иду, и возьми у него иддокдеф. это и будет твой вид
8 lukinskiy
 
26.10.12
19:06
Так чтоб его автоматизированно найти, мне и нужен ID вида объекта. Так-то я его просто вручную находил.
9 lukinskiy
 
26.10.12
19:06
Да и вообще - зачем отвечать, толком не читая вопрос?
10 Mashinist
 
26.10.12
19:19
"В части случаев у меня там появляется код центральной базы, но есть документы, в которых Y пустой, а они тоже пришли из центральной"

Возможно он был сделан еще тогда, когда база была не распределенной.
А вообще коды и центральной и периферийных баз можно же посмотреть
11 Mikeware
 
26.10.12
20:06
(8) получи ид, и "автоматизированно найди" по иду. зачем задавать вопросы, если ответов в интернете на них навалом.
(10) не "возможно", а именно "тогда"
12 lukinskiy
 
29.10.12
13:54
В итоге написал обработку для поиска в движениях регистров битых ссылок на документы (<объект не найден>) и их пометки, как измененных, в другой базе для переноса по УРБД - http://infostart.ru/public/158505.
Так что, если вдруг у кого-то возникнет похожая проблема, берите-пользуйтесь.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс