Имя: Пароль:
1C
1С v8
Ошибка в регистре накопления
0 Sh18
 
23.07.12
13:33
Самописная конфа 8.2. Не знаю, каким образом, в регистре накопления образовалось несколько активных записей без регистратора, точнее с регистратором типа <Объект не найден> (725:bdf0002354e006a011e1c7303a489937). Записей там быть не должно, точнее, там есть точно такая же правильная запись, с регистратором, все ок, но записи задвоены, вторая с отсутствующим регистратором. Как можно удалить такие записи из регистра?
1 gosn1ck
 
23.07.12
13:34
ТиИ
2 Renat11111
 
23.07.12
13:34
тии
3 Sh18
 
23.07.12
13:35
Сорри, это что? Тестирование и исправление? Пересчитать регистры?
4 Nenaviwu1c20
 
23.07.12
13:35
тестирование и исправление
5 Nenaviwu1c20
 
23.07.12
13:36
Операции- тестирование и исправление-запустить(как то так)
6 sapphire
 
23.07.12
13:37
(0) Такое может быть в результате загрузки из XML (обмена) :)))
Программно определить ссылку регистратора, установить по нему отбор и грохнуть записи.
(1)(2) Какая глупость :)))))
7 Nenaviwu1c20
 
23.07.12
13:38
chdbfl.exe и на всякий это тоже потесть
8 sapphire
 
23.07.12
13:38
(3) Нет, не то. ТИИ создаст ссылку, а она, скорее всего не нужна. Да и вполне вероятно что таких сюрпрайзов может быть много
9 Nenaviwu1c20
 
23.07.12
13:38
На фиг грохать что то в ручную(лишние запросы )
Пусь 1с сам исправлят))
10 Sh18
 
23.07.12
13:39
(6) нельзя установить отбор по несуществующей ссылке. Как?
11 sapphire
 
23.07.12
13:39
(10) Можно :)
12 sapphire
 
23.07.12
13:39
(10) Ссылка не пустая :)))
13 СвинТуз
 
23.07.12
13:40
(6)
если не секрет , то условие для отбора?
14 Nenaviwu1c20
 
23.07.12
13:40
ПолучитьСтруктуруХраненияБазыДанных() там посмотришь какой регистр и в SQL Напишешь запросик к данной таблице вида delet from () where ()and ()and и дело с концом
15 СвинТуз
 
23.07.12
13:41
все понял ... наверное
неопределено или NULL наверное в отборе
16 Nenaviwu1c20
 
23.07.12
13:41
это если база не на SQL а так напиши обработочку запрос на 1с
17 Sh18
 
23.07.12
13:43
(11) В запросе условие типа Регистратор.Представление Подобно &ЧоНадо и то не работает. Я их отловил по Регистратор.Дата is null. А как в отборе регистра это нарисовать?
18 СвинТуз
 
23.07.12
13:47
вот налл в отборе и задай
19 Nenaviwu1c20
 
23.07.12
13:49
ВЫБРАТЬ
   БракВПроизводстве.Регистратор,
   ПРЕДСТАВЛЕНИЕ(БракВПроизводстве.Регистратор)
ИЗ
   РегистрНакопления.БракВПроизводстве КАК БракВПроизводстве
ГДЕ
   (БракВПроизводстве.Период = NULL
           ИЛИ БракВПроизводстве.Период = ""
           ИЛИ БракВПроизводстве.Период = 0)
20 Nenaviwu1c20
 
23.07.12
13:49
например так
21 Nenaviwu1c20
 
23.07.12
13:50
на всякий все учел)
22 Sh18
 
23.07.12
13:50
(18) нельзя задать в отборе null. Там может быть только на равенство, с null сравнивать нельзя. Потому и существует is null, а не =null
23 sapphire
 
23.07.12
13:50
(13) Можно и более извращенно :)
Загрузить XML удаление набора записей :)
24 СвинТуз
 
23.07.12
13:51
(19)
Это не грамотно. скорее всего так

ГДЕ
   (БракВПроизводстве.Период IS NULL
25 СвинТуз
 
23.07.12
13:52
(22)
ну в общем случае нельзя )
26 Sh18
 
23.07.12
13:52
(19) В запросе я это дело получил, отбором Регистр.Дата is null. Но мне это помогает лишь посмотреть - получить запись регистра и удалить ее я таким образом не могу
27 sapphire
 
23.07.12
13:53
(24) Это тем более безграмотно ибо период всегда NOT NULL :))))
28 sapphire
 
23.07.12
13:54
(26) Да ладно :)
Запросом можешь, а запись никак? :))
29 СвинТуз
 
23.07.12
13:58
Остатки  = РегистрыНакопления.УчетНоменклатуры;
НаборЗаписей = Остатки.СоздатьНаборЗаписей();
Док = НаборЗаписей.Отбор.Регистратор;
Док.Установить(NULL);
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать();



а где Вы тут сравнение с налл видете?
30 СвинТуз
 
23.07.12
13:59
(27)
да я так пробежал )))
не интересно было особо
31 sapphire
 
23.07.12
14:03
(29) Опять-25 :))))
Огородник?
32 sapphire
 
23.07.12
14:03
(29) Регистратор не является NULL :)
33 СвинТуз
 
23.07.12
14:04
(31)
увы у меня базы нет
попробывать не могу )
тогда бодайтесь сами )
34 Nenaviwu1c20
 
23.07.12
14:05
(33) +
35 sapphire
 
23.07.12
14:05
_RecorderRRef NOT NULL в таблицах РН :)
36 СвинТуз
 
23.07.12
14:07
понятно что он не может быть НАЛЛ ...
я литературу то почитываю

ЭлементОтбора (FilterItem)
Установить (Set)
Синтаксис:

Установить(<Значение>, <Использование>)
Параметры:

<Значение> (необязательный)

Тип: Произвольный.
Значение сравнения.
37 Sh18
 
23.07.12
14:08
(29) Из помощника: "Важно! Отбор может устанавливаться только на равенство." То есть, Отбор.Регистратор.Вид сравнения всегда равно. А на равно с null не сравнивают. Потому как null не равно null! Я попробую сейчас, но не думаю, что сработает
38 СвинТуз
 
23.07.12
14:08
если этот способ не пройдет
тогда по другому вряд ли
потому что через движения не реально
потому что документа нет

лезте в БД руками
имена таблиц известны
проблем тоже вроде не видно )
39 СвинТуз
 
23.07.12
14:09
(37)
ну да ... ты еще и не пробывал
а уже отклонил
лень раньше тебя родилась
40 Sh18
 
23.07.12
14:11
(29) ошибок не выдает, но количество отобранных записей - 0 :(
41 sapphire
 
23.07.12
14:11
Запрос=Новый Запрос("
|ВЫБРАТЬ
|    БракВПроизводстве.Регистратор
|
|ИЗ
|    РегистрНакопления.БракВПроизводстве КАК БракВПроизводстве
|ГДЕ
|    БракВПроизводстве.Регистратор.Дата IS NULL");
Результат=Запрос.Выполнить.Выгрузить();
Для Каждого Строка Из Результат Цикл
     Остатки  = РегистрыНакопления.УчетНоменклатуры;
     НаборЗаписей = Остатки.СоздатьНаборЗаписей();
   
     Док = НаборЗаписей.Отбор.Регистратор;
     Док.Установить(Строка.Регистратор);      

     НаборЗаписей.Записать(); // Запись пустого набора
КонецЦикла;
42 Nenaviwu1c20
 
23.07.12
14:12
база на чем??файловая или как?
43 sapphire
 
23.07.12
14:12
(42) Да пофиг какая :)))
44 sapphire
 
23.07.12
14:13
//(40) что б тебя не сильно смущала раскраска в (41)
Запрос=Новый Запрос("
|ВЫБРАТЬ
|    БракВПроизводстве.Регистратор
|
|ИЗ
|    РегистрНакопления.БракВПроизводстве КАК БракВПроизводстве
|ГДЕ
|    БракВПроизводстве.Регистратор.Дата IS NULL");
Результат=Запрос.Выполнить.Выгрузить();
Для Каждого СтрокаРезультата Из Результат Цикл
     Остатки  = РегистрыНакопления.УчетНоменклатуры;
     НаборЗаписей = Остатки.СоздатьНаборЗаписей();
   
     Док = НаборЗаписей.Отбор.Регистратор;
     Док.Установить(СтрокаРезультата.Регистратор);      

     НаборЗаписей.Записать(); // Запись пустого набора

КонецЦикла;
45 Nenaviwu1c20
 
23.07.12
14:14
ну почему можно б было на SQL запрос толкать)))))
46 sapphire
 
23.07.12
14:15
(45) Да? Думаешь проще? Сомневаюсь :)
47 Sh18
 
23.07.12
14:15
База на сиквеле. У меня есть мысль, которая должна сработать. Создать документ, подставить ему нужный гуид. Потом этот док распровести (на всякий случай :)) и удалить. Точно сработает. Но придется искать, как кодируется гуид, там не надо группы цифр переставлять, не помню как.
Для начала попробую (44)
48 sapphire
 
23.07.12
14:20
(47) Бекап сделай на всякий случай :)
49 Sh18
 
23.07.12
14:22
Какой бэкап, там сорок орлов! Не сидеть же до восьми ))
50 Nenaviwu1c20
 
23.07.12
14:23
я б заочковал чесно))без бекапа
51 Sh18
 
23.07.12
14:32
(44) не работает :(

Никто не помнит навскидку как из <Объект не найден> (725:bdf0002354e006a011e1c7303a489937) создать гуид?
52 СвинТуз
 
23.07.12
14:34
(51)
конечно
разницы то нет
выборка возвращает NULL
53 СвинТуз
 
23.07.12
14:35
там две таблицы в склсервере
в консоль запросов надо зайти наверное
и все сделать
54 Aprobator
 
23.07.12
14:42
(44) хороший прикол )))
55 Sh18
 
23.07.12
14:42
(53) Никогда не общался с базой напрямую, есть где-нибудь описание?
56 Aprobator
 
23.07.12
14:43
+(54) выбираем БракВПоризводстве, а чистим УчетНоменклатуры.
57 hhhh
 
23.07.12
14:44
(55) сделай ТИИ с галкой Создавать объекты: оно тебе и создаст.
58 Aprobator
 
23.07.12
14:44
бухам это должно понравиться )
59 Sh18
 
23.07.12
14:45
(56) ?? БракВПроизводстве - это регистратор для УчетНоменклатуры. Ну и?
60 Sh18
 
23.07.12
14:46
(57) Ох не трогать бы лиха, пока оно тихо. Оно мне насоздает! за все четыре года базы... ))
61 Aprobator
 
23.07.12
14:47
(59) у тя кривые записи в каком регистре? Выборка идет по регистру накопления БракВПроизводстве, а чистится Регистр УчетНоменклатуры - это нормально?
62 hhhh
 
23.07.12
14:47
(60) так ты в копии создай, а в рабочую перенесешь один документ обработкой ВыгрузкаЗагрузкаXML. Мозги включай.
63 Sh18
 
23.07.12
14:49
(61) А, ну да, ошибся человек ) У меня все совсем по другому называется, я и не смотрел, только на идею )
64 Aprobator
 
23.07.12
14:50
(63) тогда странно, что не сработало. Запрос должен всяко возвращать результат. Или на каком этапе не срабатывает? Кстати, может быть отказ в записи при записи набора. Например из - за даты запрета.
65 Sh18
 
23.07.12
14:50
(62) я все-таки пойду проторенной тропкой - создавать документы и приписывать им нужные гуиды. Что-то подобное я делал - вполне новый объект под стертый встает. Только найти надо, как перекодировать гуид, там некоторые группы цифр переставляются
66 Sh18
 
23.07.12
14:51
(64) запрос возвращает. А вот потом почистить регистр не получается. Там в отборе сравнение на "равно", а null не равно null!
67 Aprobator
 
23.07.12
14:53
(66) какое еще NULL? Там сравнение с битой ссылкой с регистра должно быть.
68 ask76
 
23.07.12
14:53
Вот здесь глянь:

http://infostart.ru/public/14510/
69 Aprobator
 
23.07.12
14:54
СтрокаРезультата.Регистратор = NULL что ли?
70 Aprobator
 
23.07.12
14:56
а по поводу гуида, как вриант - Забираешь битую ссылку, создаешь новый документ и запихиваешь ее в УстановитьСсылкуНового.  Только тестить надо.
71 Aprobator
 
23.07.12
14:57
+(70) хотя вру - при проведении док движения очистит.
72 Aprobator
 
23.07.12
14:58
если конечно их в ТЗ предварительно не выгрузить, записать док с проведением и потом его движения подменить.
73 hhhh
 
23.07.12
15:00
не, (44) по-любому должно работать. Только регистры поставить нормально: или БракВПроизводстве, или УчетНоменклатуры.
74 Aprobator
 
23.07.12
15:01
(73) +100500.
75 Sh18
 
23.07.12
15:15
В общем, работает создание ссылки по гуиду и подстановка ссылки во вновь созданный документ. Я нашел, как получить гуид из строки "Объект не найден". Вот, запишите, может пригодиться

Функция ПолучитьГУИД_По_ОбъектНеНайден(Стр)
   // ГУИДУдОбъкта =  <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824)
   ГУИДУдОбъктаСтр = СтрЗаменить(Стр,"<Объект не найден> (","");
   ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,")","");
   ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,"0x","");
   ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, Найти(ГУИДУдОбъктаСтр,":")+1, СтрДлина(ГУИДУдОбъктаСтр));
   // Преобразуем GUID
   ГУИД = Сред(ГУИДУдОбъктаСтр,25,8)+"-"+Сред(ГУИДУдОбъктаСтр,21,4)
   +"-"+Сред(ГУИДУдОбъктаСтр,17,4)+"-"+Сред(ГУИДУдОбъктаСтр,1,4)
   +"-"+Сред(ГУИДУдОбъктаСтр,5,12);
   //и получаем ГУИД = 05dbe824-a4c6-11dd-bf56-00145e3710ab    
   Возврат Новый УникальныйИдентификатор(ГУИД);
КонецФункции
76 Aprobator
 
23.07.12
15:21
(75) нам не надо ) У нас (44) работает )))))
77 Aprobator
 
23.07.12
15:21
+(76) если, конечно все правильно реализовать.
78 Sh18
 
23.07.12
15:25
(77) Ну... Чудо! )) У меня не сработало, но через гуиды уже все поправил

Спасибо всем!
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший