Выполнение операции невозможно так как строка была удалена 1с
Итак, перед нами "мёртвая" файловая база. Задача, которая стоит перед нами на текущий момент - всесторонне обследовать базу, составить максимально полный перечень проблемных мест (ошибок). Одной из распространённых ошибок у начинающих специалистов является следующая: они либо сразу и надолго "ныряют" в содержимое файла базы в hex-редакторе, пытаясь вручную разобраться в тоннах байт, что, естественно, через некоторое время вызывает эффект отторжения, либо, попробовав один какой-нибудь инструмент, и получив неудачу, выдают заключение: "База не подлежит ремонту". Лично я считаю, что к услугам hex-редактора нужно прибегать только в исключительных случаях, либо изредка, на минутку, например, чтобы своими глазами посмотреть содержимое, находящееся по определённому смещению.
А перечень инструментов и приёмов для получения информации о проблемных местах вообще довольно широк, причём даже сама платформа 1С предоставляет, как минимум, два штатных способа. Рассмотрим их поподробнее.
1. Утилита chdbfl.exe из поставки 1С:Предприятие. Запускаем её с установленной галкой "Исправлять обнаруженные ошибки".
Сразу хочу оговориться, что на данном этапе эта утилита будет использоваться нами исключительно для диагностики, поэтому, даже если она и выдаст нам какой-то изменённый, якобы отремонтированный файл базы, мы не имеем на него каких-то видов, и просто "выкидываем". Однако, внимательно изучаем протокол работы и фиксируем перечень ошибок, найденных этой утилитой.
Например, "Поврежден заголовок файла базы данных" чаще всего означает просто некорректно записанную в нём длину файла в блоках, а не полное его разрушение (чтобы в этом убедиться, достаточно на пару секунд обратиться к hex-просмотрщику или редактору, если в начале файла сигнатура 1CDBMSV8 на месте, значит, проблема только в поле длины). "Повреждено содержимое внутреннего файла " означает, что в корневом объекте существуют "битые записи", с некорректными номерами блоков заголовков, либо с испорченными блоками заголовков. И так далее.
1С:Предприятие начинает загрузку базы с чтения содержимого системных таблиц. Системными таблицами являются:
V8USERS - таблица с данными пользователей (для баз версий 8.2 и выше)
DBSCHEMA - схема (структура) БД
_USERSWORKHISTORY - история работы пользователей
_COMMONSETTINGS, _FRMDTSETTINGS, _REPSETTINGS, _REPVARSETTINGS, _SYSTEMSETTINGS - хранилища различных настроек
а также системные таблицы-каталоги:
PARAMS - содержит файлы с параметрами БД
FILES - содержит прочие системные (служебные) файлы
CONFIG - содержит файлы конфигурации БД. Здесь же, в файлах с названиями вида GUID.GUID хранятся конфигурации поставщика (отсутствие таковых является нормальной ситуацией, означающей, что либо конфигурация полностью совпадает с типовой (не включен режим изменения), либо она снята с поддержки, либо является самописной).
CONFIGSAVE - содержит файлы основной конфигурации. Отсутствие записей в ней является нормальной ситуацией, означающей, что основная конфигурация полностью совпадает с конфигурацией БД. Стоит отметить, что здесь могут содержаться не все файлы конфигурации, а только изменённые (отличающиеся от файлов конфигурации БД).
Системные таблицы-каталоги являются, по сути, аналогами каталога в обычной файловой системе, т.е. являются хранилищем некоторого набора файлов, и имеют следующие поля:
FILENAME - имя файла
CREATION/MODIFIED - дата создания/изменения
ATTRIBUTES - атрибуты
DATASIZE - размер файла
BINARYDATA - содержимое файла (двоичные данные)
Теперь мы понимаем, что записи в ТЖ типа
22:42.0169-1,DBV8DBEng,2,process=1cv8,Trans=0,Func=selectFileName,FileName=ibparams.inf
22:42.0170-3,DBV8DBEng,1,process=1cv8,Trans=0,Func=readFile,CatName=Params,FileName=ibparams.inf
означают чтение файла "ibparams.inf" из таблицы PARAMS.
3. Открываем нашу базу при помощи утилиты Tool_1CD. Здесь мы можем просмотреть таблицы, а также их содержимое (данные записей), причём для системных таблиц (DBSCHEMA, PARAMS и т.д.) поддерживается автоматическая распаковка содержимого BLOB-полей, вплоть до показа содержимого упакованных контейнеров (в таблицах CONFIG и CONFIGSAVE). Наиболее пристальное внимание уделяем тем проблемным объектам, которые были нами найдены по результатам действий из пунктов 1 и 2, а также системным таблицам (хотя, зачастую список проблемных объектов, составленный по п. 1 и 2, ограничивается именно системными таблицами).
При просмотре перечня таблиц смотрим, есть ли таблицы с окончаниями "OG" - их наличие означает, что крах базы произошёл при ТиИ или реструктуризации (в процессе выполнения этих операций 1С создаёт новые таблицы с такими окончаниями, куда пишутся данные реструктуризованных таблиц, затем исходная таблица удаляется, а новой назначается исходное имя). Также бывает полезно сравнить перечень таблиц с содержимым старого бэкапа (при его наличии, и при условии, что конфигурация не обновлялась, иначе состав таблиц, связанных с метаданными, конечно, будет различаться), это поможет выявить отсутствующие таблицы.
При просмотре таблицы CONFIG обращаем внимание, есть ли в ней файлы с окончаниями ".new" - их наличие означает, что крах базы произошёл при обновлении конфигурации БД.
Также утилита позволяет сохранить конфигурацию БД в cf-файл, что и рекомендуется сделать. Загружаем далее эту конфигурацию из файла в пустую базу, и пробуем запустить. Если всё запустилось успешно, значит, проблема нашей базы не в конфигурации.
5. Загрузка базы в систему восстановления баз 1С restoration-base-1c8. По состоянию дел на текущий момент, в данном продукте многие функции не реализованы, а некоторые, на мой взгляд, реализованы не совсем прозрачно. Кроме того, практически вся смысловая обработка данных происходит на стороне 1С, что далеко не лучшим образом сказывается на быстродействии. Например, у меня полная загрузка файла размером 230 Мб длилась около часа, за это время я уже всесторонне обследовал базу другими инструментами, и приступил к непосредственному ремонту. Окончания же загрузки файла размером 1,5 Гб я вообще не дождался - закончилось терпение. Ещё один нюанс: поскольку система является конфигурацией для 1С, то все данные исходной базы загружаются также в базу 1С, но оказываются они в табличной части одного справочника. Следовательно, даже не принимая во внимание скорость загрузки, в случае файловой базы не получится загрузить файл с исходной базой размером более 4 Гб (из-за ограничений формата). Тем не менее, проект является свободным, с открытым кодом, доступным для изменения и доработки, поэтому не могу не упомянуть про него.
Загрузив нашу базу в систему restoration-base-1c8, мы можем иследовать список таблиц:
а также просмотреть и отредактировать данные любого блока во встроенном hex-редакторе:
Просмотр записей таблиц, к сожалению, не реализован.
На этом наш список, а также сам этап обследования заканчивается. Аккуратно фиксируем и систематизируем всю собранную информацию, которую мы будем использовать далее, в процессе "лечения". Конкретные, наиболее типичные проблемные ситуации и способы их устранения будут рассмотрены в следующих статьях.
Привет всем, такая вот ошибка, и все это после того как я в цикле перебираю строки в модуле объекта документа, и в определенный момент выполняю метод Прочитать; С чем может быть связанно?
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>) Прочитать (Read) Синтаксис: Прочитать Описание: Считывает данные документа из базы данных. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Примечание: Позволяет прочесть данные заново. Недопустим для нового объекта. Пример: РасходнаяНакладная.Прочитать;
Если ты что не напрямую, то я просто в модуле объекта выполняюсь
"и в определенный момент выполняю метод Прочитать; С чем может быть связанно?" Ответ в вопросе.
Ты умеешь нормально выражать свои мысли? Я спросил в чем разница между картинкой и текстом, информативность одинаковая. В модуле объекта документа, я СОБРАЛСЯ читать документ
Это я перечитываю документ, на случай если в задаче я изменю его, перезапишу и тд
Я нахожусь в модуле объекта Документа, и мне надо прочитать документ, а не задчу
Это происходит потому, что при вызове Прочитать перечитываются и пересоздаются в памяти все данные документа, в том числе и ТЧ, которую перебираешь. Комиссия премии Дарвина берет на карандашик программистов, которые пишут такой код.
нам за паяльником сходить или выложите весь код в студию?
на Это не обращайте внимания, это я начал заплатку ставить, оригинальный код без этой строки
так я и так в модуле объекта, мне не нужна пресловутая "РасходнаяНакладная.", чтобы обратиться к . В это нет ошибки - это 100 %
Что говорит отладчик когда ты останавливаешься на строке "стр = Распоряжения.Получить(ИндексСтроки);" ?
все остальное в счет, не надо гадать я еще в это сказал
Интересные эти маленькие мальчики, которые не понимают основ и гнут пальчики свои. Типа крутые такие.
У тебя тема как называется?? >>Ошибка "Выполнение операции невозможно, так как строка была удалена" Может стоит мозги напрячь??
Ругается, что Поле объекта не обнаружено (Контрагент). Что не так? Как правильно добавлять элемент?
Добавлено через 3 минуты
тьфу, блин. Поняла. )
Вывести ТаблицуЗначений на форму
Проблема следующая. Создала форму, на ней реквизит:ТаблицаДокумента, тип: ТаблицаЗначений.
Выгрузить ТаблицуЗначений в табличный документ
Понимаю, что вопрос глупый, но все же. Есть процедура; Процедура ВыбратьНоменклатуру()Экспорт .
Tklwegsd, а не подскажите ещё что это за такая забавная ошибка
": Ошибка при получении значения атрибута контекста (Банк)
НайденнаяСтрока = ТЗСнятияСДепозитов.Найти(Строка.Банк, "Банк");
по причине:
Выполнение операции невозможно, т.к. строка была удалена.
"
Что это такое? Я ничего не удаляла, колонка Банк создана.
Tklwegsd, тогда вообще непонятно. Ведь по этой строке и раньше искались значения, только в другой ТЗ и это работало.раньше
в другой
а в этой слабО поставить брейк пойнтер ? )) и посмотреть, что он там с чем должен сравнить и найтить ?
Выполнение операции невозможно, т.к. строка была удалена. Но старайтесь в названиях параметров, элементов, объектов и т.п. не использовать элементы языка 1С. Например, ваше - Строка или (часто встречаются ошибки) ЭтотОбъект, т.к. возможны ошибки. Строка - есть такой оператор в языке, назовите нСтрока, НужнаяСтрока, Стр и т.п. В частности, ваша ошибка может быть из-за этого Создать список, ввести элемент и добавить этот элемент в начало списка
создать список,ввести элемент и добавить этот элемент в начало списка
Двусвязный список - Добавить элемент после заданного, удалить заданный элемент
Реализуйте списочную структуру в виде класса. работа состоит из двух частей: из класса (структуры.
Как добавить элемент в очередь, используя указатель на последний элемент?
Не пойму как добавить элемент в очередь используя указатель на последний элемент. Выполняю задание.
Не спрашивайте, чем плохи стандартные методы работы с XML, реализованные в восьмерке. Просто разные парсеры и компиляторы - это моя слабость. Ну а потом, не видел (но, может, и ошибаюсь), чтобы стандартный парсер сразу выплевывал на форму дерево структуры XML-документа, позволял его редактировать, а потом снова сохранял в xml-документ.
В общем, эта обработка поможет тем, кто по каким-либо причинам не хочет (не может, боится) использовать типовые функции работы с XML. С "парсером от планета" XML - это просто! :)
Берите, тестируйте, пользуйтесь. Разработка снабжена подробной инструкцией.
Буду очень рад комментариям.
Отвечая на вопрос Чебуратора: ". а сабж - это что. ", приведу небольшие примеры кода. Парсер позволяет читать, разбирать и создавать XML-файлы на интуитивном уровне.
Примеры создания xml:
Примеры чтения XML:
Пример построения дерева:
Обновил обработку. Добавил возможность выбора кодировки при чтении и записи файла. Также нашел примеры нестандартных XML, которые тоже теперь отрабатываются корректно.
Не отрабатывались XML без отдельного закрывающего тега. Такие XML - не есть канон. Но теперь и они нормально воспринимаются парсером.
Посмотрел-посмотрел на это чудо, добавил на форму командную панельку, привязал ее к дереву, а в состав методов прописал формирование XML-файла по структуре дерева. Вот и получился редактор. Теперь можно загрузить любой XML-файл, изменить в нем что-то в таблице дерева и сохранить снова в XML. При этом, можно перекодировать. Думаю, особо одаренные, кому эта тема интересна, могут добавить кучу разных полезностей. Например, чтобы можно было сразу добавлять что-то по данным из документов, реквизитов элементов справочника. Да мало ли что можно сделать, чтобы работать было быстро и удобно.
Обновление:
30.09.09 18:42 - Появилась полоса загрузки и парсится при построении дерева теперь в десятки тысяч раз быстрее. Исправил ошибку с кодировкой при записи.
30.09.09 19:17 - Исправил некорректную отработку специальных символов при парсинге
Читайте также: