|
Как удалить пустые записи из регистра сведений, подчиненного регистратору (файло | ☑ | ||
---|---|---|---|---|
0
necro
09.12.14
✎
10:20
|
Тема не нова: есть регистра сведений ЦеныНоменклатурыКонтрагентов, в котором имеется несколько пустых записей, то есть в которых не заполнен в том числе и регистратор. Как это получается - я не знаю, но сталкивался уже два раза и наверняка столкнусь еще. Основная проблема - конфигурацию невозможно обновить, так как "есть записи с одинаковым регистратором и номером строки". Что пробовал:
1. Удалить такие записи программно: невозможно, так как отбор набора записей по пустому регистратору не включается; 2. Проверку файла БД (chdbfl.exe): всё в порядке; 3. Тестирование и исправление: не удалось провести, не хватило памяти То есть, остался вариант с удалением регистра и созданием его заново (есть на мисте), но мне кажется это уже перебор. Есть ли какое-то нормальное решение проблемы? |
|||
1
Лефмихалыч
09.12.14
✎
10:22
|
(0) не заполнен регистратор - это "объект не найден" или прямо пустая ссылка?
|
|||
2
vicof
09.12.14
✎
10:22
|
В скл перевести и напрямую убить в таблицах
|
|||
3
necro
09.12.14
✎
10:22
|
ЧТобы было понятнее:
<InformationRegisterRecordSet.ЦеныНоменклатурыКонтрагентов> <Filter> <Recorder>00000000-0000-0000-0000-000000000000</Recorder> </Filter> <Records> <Record> <Recorder xsi:type="DocumentRef.УстановкаЦенНоменклатурыКонтрагентов">00000000-0000-0000-0000-000000000000</Recorder> <Period>0001-01-01T00:00:00</Period> <Active>false</Active> <ТипЦен>00000000-0000-0000-0000-000000000000</ТипЦен> <Номенклатура>00000000-0000-0000-0000-000000000000</Номенклатура> <Договор>00000000-0000-0000-0000-000000000000</Договор> <ЕдиницаИзмерения>00000000-0000-0000-0000-000000000000</ЕдиницаИзмерения> <Валюта>00000000-0000-0000-0000-000000000000</Валюта> <Цена>0</Цена> <ЕстьВНаличииУЮриста>false</ЕстьВНаличииУЮриста> <ОплатаДоставки/> <ПроцентЗасора>0</ПроцентЗасора> <НомерПротокола>0</НомерПротокола> </Record> |
|||
4
Cube
09.12.14
✎
10:22
|
(0) "3. Тестирование и исправление: не удалось провести, не хватило памяти"
А ты не включай все галочки сразу... |
|||
5
pessok
09.12.14
✎
10:22
|
добавить памяти и таки провести ТиИ. В целом, конечно, можно удалить регистр, сделать реструктуризацию (который опять таки не хватит памяти) а потом выполнить объединение, но ну его нафик, имхо
|
|||
6
Maxus43
09.12.14
✎
10:23
|
<Recorder>00000000-0000-0000-0000-000000000000</Recorder>
файловая даёт такое делать? скульная б ругнулась... |
|||
7
vicof
09.12.14
✎
10:24
|
Сколько ж там гигов в файловой базе, что ТиИ падает?
|
|||
8
necro
09.12.14
✎
10:24
|
(4) Включаю проверку ссылочной целостности и ограничение времени 2 часа - не помогает.
|
|||
9
Cube
09.12.14
✎
10:24
|
(0) Выгрузи регистр в файл, удали ненужные записи в файле, очисти регистр в 1С, загрузи из файла.
Обработка на ИТС |
|||
10
necro
09.12.14
✎
10:25
|
(9) обработка очистки регистра на ИТС? как называется?
|
|||
11
Maxus43
09.12.14
✎
10:26
|
записей сколько в регистре? вариант (9) норм, выгрузи в xml, прям там отбор при выгрузке можно сделать на не пустые
|
|||
12
pessok
09.12.14
✎
10:26
|
(6) нормально дает
Набор = РегистрыСведений.СостояниеРаботниковОрганизаций.СоздатьНаборЗаписей(); Набор.Отбор.Регистратор.Установить(Документы.ВозвратНаРаботуОрганизаций.ПустаяСсылка()); Набор.Прочитать(); |
|||
13
Maxus43
09.12.14
✎
10:26
|
(10) очистка регистра - это просто СоздатьНаборЗаписей() и Записать() без отбора. Если много там - может сдохнуть...
|
|||
14
Maxus43
09.12.14
✎
10:27
|
(12) я про записать, а не про прочитать
|
|||
15
Cube
09.12.14
✎
10:27
|
(10) Обработка выгрузказагрудкаданныхxml, но она регистр не чистит, это делай другими средствами. В УПП, например, есть обработка Универс. обмен данными XML, там есть такая возможность.
|
|||
16
pessok
09.12.14
✎
10:29
|
(14) а, не вкурил, я думал, что посмотреть нельзя :)
|
|||
17
Maxus43
09.12.14
✎
10:30
|
автор, а чего ты говоришь что "отбор набора записей по пустому регистратору не включается", хотя вот в (12) норм. Кто то из вас врёт
|
|||
18
pessok
09.12.14
✎
10:32
|
+(17) и даже с NULL отрабатывает. другой вопрос - хз что там в наборе, не на чем такое проверить
|
|||
19
necro
09.12.14
✎
10:33
|
(17)
{Форма.Форма.Форма(239)}: Ошибка при вызове метода контекста (Записать) НаборЗаписей.Записать(); по причине: Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Цены номенклатуры контрагентов) |
|||
20
Лефмихалыч
09.12.14
✎
10:33
|
(13) подчиненный регистр пустой набор без отбора по регистратору не запишет. Выгрузка-загрузка xml тоже не спасет, т.к. регистр подчиненный.
Тут либо в скуль грузить и там править, либо найти железяку, на которой ТИИ пройдет, либо при помощи tool_1cd.exe табличку полностью грохнуть, создать новую такую же и потом заполнить правильными данными из копии как раз уже выгрузкой-загрузкой xml. |
|||
21
Лефмихалыч
09.12.14
✎
10:34
|
в общем, автор, я тебе сочувствую
|
|||
22
pessok
09.12.14
✎
10:35
|
(19) а в наборе что?
|
|||
23
pessok
09.12.14
✎
10:36
|
в смысле, как его читаешь?
|
|||
24
Лефмихалыч
09.12.14
✎
10:37
|
(23) он не читает, он пишет
|
|||
25
pessok
09.12.14
✎
10:37
|
(24) чтобы набор записать, его надо сначала прочитать
|
|||
26
pessok
09.12.14
✎
10:38
|
(24) если не надо полностью обнулить, ессно, но тут (20), да
|
|||
27
ProxyInspector
09.12.14
✎
10:39
|
А может быть в регистре временно поставить какую-нибудь галочку, чтобы давала удалять записи без регистратора? А потом вернуть обратно
|
|||
28
Maxus43
09.12.14
✎
10:39
|
(20) зачем сложности с tool_1cd и прочее? в конфигураторе удалить таблицу и всё, потом новую сделать (сравнением-объединением, чтоб идентификатор был такой же) - и загрузить
|
|||
29
pessok
09.12.14
✎
10:40
|
(27) не можно, к сожалению
|
|||
30
Лефмихалыч
09.12.14
✎
10:40
|
(26) ему читать бестолку - он уже всё прочитал (3)
задача у автора - удалить запись с пустым регистратором. Чтобы из регистра удалить запись, надо записать набор. Набор не запишется, пока не будет установлен непустой регистратор. (28) или так, но это будут реструктуризаяца, а у него железо дохлое |
|||
31
pessok
09.12.14
✎
10:41
|
(30) т.е. твердо при установке в качестве регистратора пустой ссылки или nulla не запишется? Просто не на чем проверить
|
|||
32
Лефмихалыч
09.12.14
✎
10:42
|
а чтобы идентификатор был гарантированно тот же, нужно загружать метаданные из xml. Если конфигурация поставщика не пустая, ИД может в итоге отличаться. но ты этого не заметишь, пока не включишь поддержку без возможности изменений, а это приведет опять к пересозданию
|
|||
33
Лефмихалыч
09.12.14
✎
10:42
|
(31) автор уже проверил (19)
|
|||
34
pessok
09.12.14
✎
10:42
|
(33) мы не знаем, что именно автор туда писал
|
|||
35
Лефмихалыч
09.12.14
✎
10:44
|
(34) у меня не сложилось впечатление, что автор способен перепутать жопу с пальцем
|
|||
36
pessok
09.12.14
✎
10:44
|
(35) согласен, конечно. но и на старуху, как известно
|
|||
37
necro
09.12.14
✎
10:59
|
(35) В общем, как бы там ни было, результат дает только
удаление регистра - сохранение конфы БД - загрузка старой конфы и опять сохранение - загрузка записей регистра. База у меня, будь он неладна, естественно сидит на обмене, так что в прошлый раз я выгрузил регистр обменом а сейчас попробовал выгрузкой/загрузкой XML. Результат как будто одинаковый. Средства редактирования таблиц в 1CD еще не изобрели? |
|||
38
pessok
09.12.14
✎
11:00
|
(37) tool_1CD
|
|||
39
AS_DANCE
09.12.14
✎
11:05
|
А если собрать все эти записи, и привязать их к какому-либо документу.
Ну а потом уже вместе с доком удалить? |
|||
40
necro
09.12.14
✎
11:06
|
(39) Регистр сведений, как известно - не ссылочный тип, и запись определяется именно набором измерений.
|
|||
41
Лефмихалыч
09.12.14
✎
11:12
|
(39) ну, да, как же мы раньше-то не догадались просто собрать и просто привести
|
|||
42
necro
09.12.14
✎
11:15
|
В любом случае, для меня осталось тайной, почему среди нескольких десятков одинаковых баз, в которые по идее уходят одинаковые цены, битые пока только две.
|
|||
43
Лефмихалыч
09.12.14
✎
11:18
|
(42) потому что битые данные не с обменом появились, а при отрубании липистричеств всяких во время транзакций. В файловой базе некому атомарность транзакции обеспечивать, кроме клиента
|
|||
44
necro
09.12.14
✎
11:20
|
(43) это да, есть у меня там база которая две недели на генераторе сидела и валилась каждый раз как документ печатали на лазерном принтере... Но файловая-то проверка молчит!
|
|||
45
Лефмихалыч
09.12.14
✎
11:26
|
(44) файловая проверка весьма условная штуковина. Она не умеет находить логические ошибки в данных. Если таблицы сами по себе не повреждены - то есть начинаются и заканчиваются правильными байтами, странички тоже не повреждены, то база считается исправной. Даже если во всех индексах дубли, в подчиненных регистрах сабж и что угодно еще с данными не так
|
|||
46
Cube
09.12.14
✎
12:04
|
(44) Ты (9) то попробовал?
|
|||
47
necro
09.12.14
✎
12:10
|
(46) Я не знаю, как очистить регистр.
|
|||
48
pessok
09.12.14
✎
12:31
|
(47) подчиненный регистратору - никак, в данном случае
|
|||
49
necro
09.12.14
✎
12:40
|
(48) раз люди советуют, то наверное как-то можно
|
|||
50
Cube
09.12.14
✎
12:47
|
(47) Конфа какая? Про УПП я писал в (15)
|
|||
51
Cube
09.12.14
✎
12:47
|
(48) С чего это вдруг?
|
|||
52
Phace
09.12.14
✎
12:50
|
Я бы наверное, как уже писалось выше, попробовал все-таки воспользоваться Tool_1CD, меня она в свое время здорово спасла, помню выгружал проблемную таблицу в файл, что-то там делал, загружал обратно.
|
|||
53
pessok
09.12.14
✎
12:50
|
(49) единственно, как, вероятно, оно может сработать
Набор = РегистрыСведений.СостояниеРаботниковОрганизаций.СоздатьНаборЗаписей(); Набор.Отбор.Регистратор.Установить(Документы.ВозвратНаРаботуОрганизаций.ПустаяСсылка()); Набор.Прочитать(); ТЗ = Набор.Выгрузить(); ТЗ.ЗаполнитьЗначение(КакойТоРегистратор, "Регистратор"); Набор.Загризить(ТЗ); Набор.Записать(); ИЛИ Набор.Отбор.Регистратор.Установить(Документы.ВозвратНаРаботуОрганизаций.ПустаяСсылка()); Набор.Прочитать(); МассивЗаписей = Новый Массив; Для Каждого Запись Из Набор МассивЗаписей.Добавить(Запись); КонецЦикла Для Каждого ЭлЗапись Из МассивЗаписей Цикл Набор.Удалить(ЭлЗапись ) КонецЦикла |
|||
54
necro
09.12.14
✎
12:55
|
(50) В указанной обработке запись происходит менеджером записи, а не набором записи, точно не помню, кажется я так пробовал и тоже не получилось.
|
|||
55
Cube
09.12.14
✎
12:56
|
(54) Ай, блин, точно, там только объекты можно удалить и независимые РС...
Ну, тогда, гаси обработкой... |
|||
56
Cube
09.12.14
✎
12:58
|
Попробуй просто выгрузить всю конфу в XML и загрузить в чистую конфу.
|
|||
57
necro
09.12.14
✎
12:58
|
(56) Да ну нафиг ) Она и так пять гигов ))
|
|||
58
Cube
09.12.14
✎
12:59
|
(57) А если записать набор с пустым регистратором?
|
|||
59
pessok
09.12.14
✎
13:00
|
(58) не запишет
|
|||
60
Cube
09.12.14
✎
13:00
|
Ну, тогда, пусть ТИИ делает частями.
|
|||
61
pessok
09.12.14
✎
13:01
|
вот кстати, а не пора ли замутить свертку базы то?
|
|||
62
necro
09.12.14
✎
13:05
|
(61) Увы, почти весь объем состоит из справочников
|
|||
63
pessok
09.12.14
✎
13:11
|
(62) (53) не помогло?
|
|||
64
necro
09.12.14
✎
13:34
|
(63) Даже не пробуя, могу предположить, что в первом варианте будет ошибка про несоответствие отбора, а во втором - про отсутствие отбора (при записи).
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |