Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 04:34

Как вылечить регистр сведений с битыми данными?

Автор andante, 10 фев 2015, 23:25

0 Пользователей и 1 гость просматривают эту тему.

andante

Здравствуйте. Столкнулся с такой вот проблемой. При попытке выгрузить ИБ выскочила ошибка "Количество таблиц в запросе превышает 256"
Попытался запустить проверку целостности с исправлением ошибок. Вылетела на регистре ИсторияОбменаДанными на 90% обработки регистра. Прочитал данные регистра запросом. Ближе к концу (90%) в данных регистра явный мусор, но ключевые поля (Период и Измерения) заполнены корректно. Попытки добраться обходом до битых записей неудачны, вылет по ошибке. Попытка очистить все записи регистра методом

Набор = РегистрыСведений.ИсторияОбменаДанными.СоздатьНаборЗаписей();
Набор.Записать();

привела к той же ошибке "Количество таблиц в запросе превышает 256".  Удалить регистр не могу, так как он предопределен в используемой базовой конфигурации.
    Пробовал предпринять восстановление целостности в SQL Server. Вылетает по ошибке сразу.
    Как последний шанс попробовал сделать копию базы в SQL Server. О чудо! Копия создана без ошибок. Накатил копию назад восстановлением. Все восстановилось, в том числе и "нечитаемый" злополучный регистр.

    Всё. Мысли иссякли. Подскажите, люди добрые чем убить регистр?


vitasw

читайте РС с отбором по измерению. В принипе можно отюор на любое измерение, главное чтоб не читать весь РС целиком.

LexaK

если данные регистра ИсторияОбменаДанными не нужны
попробуйте следующее
1.сохраните конфигурацию в файл
2.удалите этот регистр из конфигурации, нажмите кнопку применить
3.через сравнить/объединить конфигурации, верните назад регистр, нажмите кнопку применить

если помогло нажмите: Спасибо!

andante

Цитата: LexaK от 11 фев 2015, 11:09
2.удалите этот регистр из конфигурации, нажмите кнопку применить

    Данные в регистре не нужны. Там хранятся данные о прошедших обменах. Проблема в том, что удалить этот РС я не могу, он
является составной частью конфигурации Управление торговлей, на основе которой была разработана рабочая версия конфигурации. Может быть есть какой-то нештатный способ удалить предопределенный РС?

Добавлено: 11 фев 2015, 16:29


Цитата: vitasw от 11 фев 2015, 02:21
читайте РС с отбором по измерению. В принипе можно отюор на любое измерение, главное чтоб не читать весь РС целиком.

    Создавая новый (пустой) набор записей и пытаясь его записать, я вообще пытаюсь не читать регистр. Но он таки читается и вылетает по ошибке. Проблема не в том, чтобы прочитать часть инфы из РС, а в том, как бы его грохнуть, не читая (не инициируя ошибку).

LexaK

Цитата: LexaK от 11 фев 2015, 11:09
если данные регистра ИсторияОбменаДанными не нужны
попробуйте следующее
1.сохраните конфигурацию в файл
2.удалите этот регистр из конфигурации, нажмите кнопку применить
3.через сравнить/объединить конфигурации, верните назад регистр, нажмите кнопку применить

пункт 3 дочитайте!
если помогло нажмите: Спасибо!

vitasw

Цитата: andante от 11 фев 2015, 16:26
Цитата: LexaK от 11 фев 2015, 11:09
2.удалите этот регистр из конфигурации, нажмите кнопку применить

    Данные в регистре не нужны. Там хранятся данные о прошедших обменах. Проблема в том, что удалить этот РС я не могу, он
является составной частью конфигурации Управление торговлей, на основе которой была разработана рабочая версия конфигурации. Может быть есть какой-то нештатный способ удалить предопределенный РС?

Добавлено: 11 фев 2015, 16:29


Цитата: vitasw от 11 фев 2015, 02:21
читайте РС с отбором по измерению. В принипе можно отюор на любое измерение, главное чтоб не читать весь РС целиком.

    Создавая новый (пустой) набор записей и пытаясь его записать, я вообще пытаюсь не читать регистр. Но он таки читается и вылетает по ошибке. Проблема не в том, чтобы прочитать часть инфы из РС, а в том, как бы его грохнуть, не читая (не инициируя ошибку).
Ваше писать не читая, на уровне платформы означает, что считать весь РС целиком, удалить все записи и записать пустой набор. На чтении большого объема платформа и валится.
Не хотите - делайте, как посоветовали, через объединение - тоже достаточно неплохой вариант.

andante

Цитата: LexaK от 11 фев 2015, 16:37
Цитата: LexaK от 11 фев 2015, 11:09
если данные регистра ИсторияОбменаДанными не нужны
попробуйте следующее
1.сохраните конфигурацию в файл
2.удалите этот регистр из конфигурации, нажмите кнопку применить
3.через сравнить/объединить конфигурации, верните назад регистр, нажмите кнопку применить

пункт 3 дочитайте!


Да я дочитал. В предложенном Вами алгоритме я застрял на втором пункте, поэтому и привел его в цитате.
Не доступен этот регистр для удаления. Не могу я его удалить, поэтому и перейти к третьему пункту алгоритма не могу :(

Попробую вставить фото.

Добавлено: 11 фев 2015, 22:39


vitasw, спасибо за разъяснение, попробую откусывать данные частями. Позже отпишусь, что вышло.
Добавлено: 11 фев 2015, 23:18


Вот такой обработкой стал удалять записи регистра. Удалил в два приема. Сначала записи до 31.12.2013. Все удалились. Затем до 31.12.2014.
Выборка = РегистрыСведений.ИсторияОбменаДанными.Выбрать(,'20141231');    // Отбор
    Пока Выборка.Следующий() Цикл
            // удаление существующей
        Выборка.ПолучитьМенеджерЗаписи().Удалить();

    КонецЦикла;

Удалились все здоровые записи до первой битой (дата 30.11.2014).
Затем вылет по ошибке (Фото 1)
Попробовал на уже урезанном регистре снова записать пустой набор записей, снова получил ошибку (Фото 2)

дфтын

в сикул сервере  - DELETE * FROM
Добавлено: 12 фев 2015, 00:23


только, прошу, базу скопируйте.. а то будет как cdx удалили...
Помог? Нажми - Спасибо :)
skype: Soprov1C

andante

Цитата: дфтын от 11 фев 2015, 23:53
в сикул сервере  - DELETE * FROM
Добавлено: 12 фев 2015, 00:23


только, прошу, базу скопируйте.. а то будет как cdx удалили...

   Да, похоже спасение где-то в недрах SQL.
Научился находить объекты 1С в таблицах SQL.
Команда DELETE не сработала, вылетела по ошибке.
Ошибки показала и проанализировала DBCC CHECKTABLE. Порекомендовала исправить их в режиме repair_allow_data_loss.
Оказалось, что этот режим возможен только при однопользовательском запуске SQL.
Читаю буквари, пытаюсь разобраться, как же этот однопользовательский режим запустить...

В общем, с ностальгией вспоминаю время месячной давности, когда я понятия не имел какой жизнью живет 1С. Бурное знакомство, однако...

дфтын

вы издеваетесь что ли? вы там кто?
ЦитироватьОказалось, что этот режим возможен только при однопользовательском запуске SQL.
а вы не можете обеспечить монопольный запуск чтоли?
слушайте НЕ МОРОЧТЕ НАМ ГОЛОВЫ.
если вы не админ, не надо туда лезть. срочно отойдите от компьютера!!!!

Добавлено: 12 фев 2015, 04:25


Я вам написал что надо делать. ненадо ничего в 1с удалять добавлять. нужно просто зантЦо SQlем
а некоторым книги почитать

Добавлено: 12 фев 2015, 04:27


andante, я абсолютно уверен, что вам этого делать не надо, вызовите програмера. денег не дают? ну скажите директору, что базы больше не будет.
такие ошибки просто так не возникают
Помог? Нажми - Спасибо :)
skype: Soprov1C

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск