Меню

1с реструктуризация таблиц информационной базы ошибка

Прошло немало времени, и все же хотелось бы продолжить и поделиться мало ли кому поможет.

Текущая платформа 1С 8.3.13.1690, все остальные технические параметры остались прежними и ничего не менялось.

(экспериментировать с другими версиями платформы не стал, так как на этой версии сидим давно и вроде бы все работало же….)

Конфигурация до недавнего времени находилась как было описано выше в режиме совместимости 8.3.10, благодаря чему реструктуризация из под конфигуратора проходила штатно и не превносила сюрпризов, казалось бы жили да жили так дальше без новых возможностей…

Месяц назад, после очередной такой реструктуризации которая прошла штатно поломалась часть объектов (при чем уже более значительная, открытие которых в режиме 1С приводило к SDBL разного рода), час икс настал :) благо это случилось в выходной день. Откат базы к бэкапу недельной давности, наращивание логами транзакции до момента поломки. Выгрузка в DT которая кстати проходит штатно как и выгрузка CF как и загрузка того и другого обратно.

Поднял тестовую базу и начал экспериментировать (на боевой запретил все регламенты по реструктуризации и пересчетам итогов по выходным), в итоге пришлось полностью убить все имеющиеся планы обмена (выгрузка CF удаление всех планов обмена, сравнением объединение с CF чтобы планы обмена вернулись обратно и до настройка их в 1С), так как оказалось в них откуда то взялись данные зарегистрированные для узла ЭтотУзел (подозреваем это привнесла одна из платформ так как там находилась часть данных а не все что могло бы туда попасть за прошлые года). Пришлось лишиться записей в регистре сведений «История изменений» — самопальный механизм которые регистрировал любые настроенные изменения любых настроенных объектов (изменения реквизитов или табличных частей) — в этом регистре были сотни миллионов записей, штатно очистить не представлялось возможным из за недостатка времени, поэтому TRUNCATE TABLE на SQL решил проблему моментально.

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

Что это было остается догадываться, возможно оно до сих пор сидит в базе, но сейчас все работает.

Всем удачи :) я поделился исключительно своим опытом и своими «колдобинами» при мучении с базой объемом под 300 гб, и не настаиваю что всем это поможет, но в друг кому то пригодится :).

Иногда в работе с программой 1С 8.3 могут возникнуть какие-то непредвиденные ситуации — сбои в работе, программа выдает какие-то ошибки, не проводится документ или же просто некорректно отображаться информация. В таких случаях, первое что может помочь — это произвести тестирование и исправление информационной базы 1С 8.3.

Содержание

  • Тестирование и исправление информационной базы 1С
  • Тестирование базы 1С, проверка на ошибки
    • Реиндексация таблиц информационной базы 1С: что это
    • Проверка логической целостности информационной базы 1С
    • Проверка ссылочной целостности информационной базы 1С
    • Пересчет итогов
    • Сжатие таблиц информационной базы 1С
    • Реструктуризация таблиц информационной базы 1С

Запускаем информационную базу 1С в режиме Конфигуратор и заходим в пункт меню Администрирование — Тестирование и исправление.

Стоит помнить, что перед любыми действиями с информационной базой 1С необходимо выполнить ее резервное копирование.

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

Тестирование базы 1С, проверка на ошибки

Реиндексация таблиц информационной базы 1С: что это

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

В результате программного сбоя индексы могут сбиваться, вследствие чего появляются ошибки, например в документе отсутствует наименование или количество, не заполнено поле и т.п.

Для исправления такого рода ошибок в базе 1С устанавливаем галочку Реиндексация таблиц информационной базы.

При тестировании и исправлении в 1С реиндексируются все таблицы. И хотя данный пункт занимает длительное время, он помогает решить большую часть проблем.

Проверка логической целостности информационной базы 1С

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

При этом программа 1С может работать, но ошибка будет возникать при обращении к тому документу (или объекту) в момент создания которого произошел сбой.

При тестировании и исправлении и установке данной галочки будет произведена проверка логических ошибок в структурах таблиц информационной базы.

Проверка ссылочной целостности информационной базы 1С

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

При тестировании и исправлении и обнаружении ссылок на несуществующие объекты в 1С предлагается три варианта действия — создать объект, очистить ссылку или не изменять, при обнаружении частично потерянных данных объекта — создать, удалить объект, или не изменять его. При выполнении действия:

  • Создавать объекты, система создает своего рода объект-заглушку, которые впоследствии можно будет исправить.
  • Очищать ссылки, удалять объект — битые ссылки будут очищены, объекты удалены.
  • Не изменять — в этом случае проверка лишь покажет ошибки, не предпринимая никаких действий.

Пересчет итогов

Иногда в отчетах могут отражаться неверные данные. Мы исправляем, перепроводим документы, а они не меняются… Видим цифру, открываем карточку счета — документа нет. В чем может быть проблема? Все просто — сбились итоги.

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

Например, данные из таблицы итогов по регистру Остатки материалов, позволяют нам быстро определить их остатки на складах на определенную дату. Установив галочку при тестировании — Пересчет итогов, будут пересчитаны итоги во всей информационной базе 1С и заново занесены в таблицы итогов.

Сжатие таблиц информационной базы 1С

При удалении объектов в информационной базе 1С (документов, справочников и т.п.) они не удаляются физически, эти записи остаются в таблицах, но пользователь их не видит. В результате накопления таких объектов, увеличивается объем информационной базы 1С, что приводит к замедлению работы.

Сжатие таблиц в 1С 8.3 — это физическое удаление записей, которые ранее были помечены на удаление и удалены из программы, информация о них удаляется полностью из информационной базы, в результате таблицы базы становятся меньше. Такого же эффекта можно достичь путем выгрузки и загрузки файла информационной базы через Конфигуратор (*.dt).

Реструктуризация таблиц информационной базы 1С

Это создание заново структуры информационной базы, создание новых таблиц, и перенос старых данных в новые таблицы. Реструктуризация также происходит при обновлении информационной базы. В результате этих действий также возможно исправление некоторого рода ошибок программы 1С.

Обращаем внимание на переключатель, который задает что делать при тестировании — выполнять Только тестирование (в этом случае будет выведена только информация об ошибках) или Тестирование и исправление ошибок.

После установки параметров тестирования, нажимаем кнопку Выполнить и ждем результат.

В строке состояния отображается информация о ходе тестирования.

По окончании тестирования 1С будет выведена информация об ошибках и их исправлении.

Если в ходе тестирования возникли какие то проблемы, можно восстановить информационную базу из резервной копии, созданной до начала тестирования.

См. также:

  • 1С оптимизация: что делать, если программа тормозит
  • Обновление 1С: как обновить конфигурацию самостоятельно
  • Утилита chdbfl.exe для 8.3
  • Свертка базы 1С 8.3
  • Резервное копирование 1С 8.3 Бухгалтерия 3.0
  • Как удалить помеченные на удаление документы в 1С 8.3

Если Вы еще не являетесь подписчиком системы БухЭксперт8:

Активировать демо-доступ бесплатно →

или

Оформить подписку на Рубрикатор →

После оформления подписки вам станут доступны все материалы по 1С Бухгалтерия, записи поддерживающих эфиров и вы сможете задавать любые вопросы по 1С.

Подписывайтесь на наши YouTube и Telegram чтобы не пропустить
важные изменения 1С и законодательства

Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

testirovanie-i-ispravlenie-000.pngСуществуют вещи настолько привычные, что кажется все про них знают, но это весьма обманчивое впечатление. Да, о них почти все знают, почти все используют, но мало кто представляет происходящие при этом процессы, скрытые за привычной внешней формой инструмента. При этом те, кто знает не спешат делиться, ведь это «общеизвестно», а те, кто не знает стесняются спросить по той же самой причине. Но мы не будем стесняться, а подробно расскажем о том, что делает каждая опция данного инструмента, заглянув каждый раз немного глубже простого описания.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Давно известно: как вы лодку назовете — так она и поплывет. Это в полной мере применимо к такому известному инструменту как Тестирование и исправление информационной базы, название выбрано крайне неудачно, так как предполагает, что использовать представленные в нем возможности следует при возникновении проблем с информационной базой и исправлении ошибок. На самом деле это не так. Любой имеющий опыт работы с «серьезными» СУБД найдет в этом списке привычные ему инструменты обслуживания баз данных, которые следует применять регулярно для поддержания высокой производительности сервера. Но речь сейчас не о них, а о начинающих, либо имеющих к 1С опосредованное отношение.

testirovanie-i-ispravlenie-001.pngОписание этой таблички можно найти много где, но в большинстве случаем там будут стандартные абзацы вроде:

Проверка логической целостности информационной базы проверяет и исправляет логические ошибки в структурах таблиц

Что это за ошибки, откуда они берутся, чем чреваты? Кто в теме — тот знает, а кто нет? Спросить? Да как бы неудобно, это же все знают… Вот и сводится большинство «знания» к тому, как правильно расставить в этой форме галочки и не забыть перед этим обязательно сделать резервную копию, а то мало ли…

Поэтому давайте разбираться, мы специально упростили многие вопросы, постаравшись сделать их понятными даже тем, кто имеет смутное представление о структуре и принципах работы баз данных.

Реиндексация таблиц информационной базы

Начнем с того, что такое индексы и для чего они нужны. Если рассматривать базу данных логически — то это некая совокупность связанных друг с другом таблиц, которые в свою очередь содержат какие-либо данные. Физически таблицы хранятся на диске в виде страниц и чем больше размер таблицы, тем большее количество страниц она будет содержать.

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

testirovanie-i-ispravlenie-002.pngНо ведь это чудовищно неэффективно, скажет внимательный читатель и будет прав. Что же делать? К счастью, все уже давно придумано. Хранение данных в СУБД можно сравнить с библиотекой, где таблицы — это залы библиотеки, а страницы — стеллажи. И когда вам нужна какая-то книга библиотекарь ведь не обходит физически все стеллажи, а сразу идет куда надо и приносит вам то, что вы просили. Чтобы быстро искать книги в библиотеках существуют каталоги, где книги перечислены в упорядоченном виде, и каждая карточка содержит сведения о том, где именно хранится тот или иной экземпляр.

В нашем случае роль такого каталога выполняет индекс. Это — специальный набор записей, связанный с определенным ключом — полем таблицы, в нашем случае фамилией, и указывающий на каких страницах хранятся интересующие записи. После того как мы создали индекс программе больше не нужно последовательно считывать всю таблицу, потому что известно, что записи, связанные с ключом Иванов, хранятся только на первой и третьей страницах.

testirovanie-i-ispravlenie-003.pngПо мере работы с программой эффективность индексов снижается, особенно если вы активно удаляли или добавляли данные. Также индексы могут подвергаться фрагментации. Если снова сравнить с библиотекой, то за день работы посетители перепутали несколько ящиков, а работники библиотеки карточки новых книг поставили в конец и забыли убрать отсутствующие. Но все равно поиск по такому каталогу окажется быстрее, чем обход всех стеллажей в зале. А что нужно сделать, чтобы вернуть поиску прежнюю эффективность? Правильно, навести порядок в каталоге. Именно этим и занимается реиндексация, которая заново формирует индексы таблиц базы данных и устраняет их фрагментацию, что важно, если вы используете обычные жесткие диски или недорогие SSD.

Реиндексация — это простой и достаточно недорогой способ повысить эффективность работы с информационной базой, причем эффект может быть виден сразу, особенно в файловых базах. Поэтому реиндексацию делать нужно и желательно регулярно, включив ее в обязательный план регламентного обслуживания информационных баз.

Проверка логической целостности информационной базы

Если говорить о СУБД, то любая система управления базами данных, в том числе и та, которая используется файловой версией 1С, обеспечивает целостность данных встроенными средствами и вам вряд ли придется заниматься этим вопросом, если только, конечно, не произошло физического повреждения базы данных. Как мы уже говорили выше, база данных — это набор взаимосвязанных таблиц и самой СУБД в общем то все равно что мы храним в этих таблицах, для нее таблица Документа ничем не отличается от таблицы Справочника, кроме состава полей.

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

Давайте рассмотрим следующую схему, отражающую некоторый набор бизнес-логики. У нас есть два документа: Реализация и Оплата, которые делают движения по некоторым регистрам. Так при реализации мы списываем нужное количество товара со склада и вносим в регистр взаиморасчетов задолженность покупателя. В момент оплаты мы вносим полученную сумму в регистр денежных средств и закрываем задолженность покупателя по отгрузке полностью или частично. Но как мы определим, какую именно задолженность погасил клиент? А для этого мы введем в документе оплата обязательное поле Основание, в котором будем указывать нужную реализацию.

testirovanie-i-ispravlenie-004.pngПри этом документ Оплата будет являться подчиненным к документу Реализация и в случае его отмены также должен быть отменен, так как перестает существовать основание для оплаты. Теперь представим, что в результате какой-то нештатной ситуации или некорректных действий пользователя у нас в документе Оплата пропала ссылка на документ основание, т.е. нарушилась структура подчиненности. Найти такую ошибку будет не так-то просто. Потому что все записи в базе данных останутся, и каждая из них по отдельности будет верная. Так правильным останется количество товаров на складах и суммы денежных средств предприятия, а вот взаиморасчеты враз станут неверны.

testirovanie-i-ispravlenie-005.pngВнешне это может проявляться так: отчеты по реализациям и оплатам от контрагента совпадают, а вот отчет по взаиморасчетам или акт сверки формируется неправильно. При этом вы можете раз за разом пересчитывать суммы руками, все будет сходиться, но отчет снова и снова будет давать неверный результат.

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

Как часто нужно запускать эту проверку? Время от времени, особенно в файловых базах с обязательным изучением лога проверки, чем раньше вы узнаете о возможных проблемах в структуре данных и устраните их — тем лучше.

Проверка ссылочной целостности информационной базы

Данная проверка является одним из вариантов проверки логической целостности базы и выявляет проблемы со ссылками на отсутствующие элементы базы данных. Как мы уже говорили, база — это набор связанных между собой таблиц. В одной из них мы можем хранить контрагентов, в другой номенклатуру, в третьей — список складов, а внося запись о реализации товаров просто делаем ссылки на нужные элементы других таблиц. Например, наш условный документ Реализация может ссылаться на справочники Контрагенты, Номенклатура, Склады, выбирая и указывая в документе соответствующие значения мы не создаем дополнительных записей в таблице реализации, а даем ссылки на элементы связанных таблиц.

testirovanie-i-ispravlenie-007.pngКонтроль ссылочной целостности является подмножеством контроля логической целостности и осуществляется на уровне конфигурации. С ним сталкивался каждый, кто пытался удалить какой-либо объект их базы, а в ответ получал сообщение, что это невозможно, так как данный объект используется и приводился список мест использования.

Но что будет, если используемый объект все-таки удалить? Возникнет битая ссылка. Внешне она выглядит как запись со ссылкой на уникальный идентификатор отсутствующего объекта:

<Объект не найден> (95:bc09ecd68a04705d11eb44а671518376)

Если подходить с чисто теоретических позиций, то битых ссылок в информационной базе быть не должно. Но не все так просто, если в базе используется РИБ, либо иные технологии обмена с другими базами и внешними источниками, то ряд второстепенных реквизитов может не передаваться. Например, сведения о подключаемом оборудовании.

testirovanie-i-ispravlenie-008.png

В данном случае это нормально (Конфигурация Розница 2.3), так как конкретный экземпляр оборудования подключен именно к конкретному рабочему месту и передавать эти данные куда-то еще лишено особого смысла.

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

testirovanie-i-ispravlenie-006.png

А вот после, установив сам факт их наличия следует думать. В ряде случаев, если выявленные ссылки являются второстепенными объектами подчиненных баз не нужно делать ничего. Наоборот, любая попытка «исправления» может привести к нарушению нормальной работы информационной базы. А вот в других надо предпринимать какие-либо действия.

Давайте посмотрим какие варианты у нас есть. Начнём со ссылок на несуществующие объекты. Здесь все довольно просто, мы можем или очистить ссылку, или создать новый объект нужного типа. Допустим, если запись справочника Номенклатура оказалась повреждена, но мы точно знаем по бумажным документам, что именно реализовывали, то ставим Создавать объекты, после чего переходим к ним и заполняем нужные реквизиты. Если же это какой-то второстепенный реквизит, то можем просто очистить ссылки. Второй вариант довольно часто применяется в тех случаях, когда надо быстро почистить базу и ряд объектов удаляется без контроля ссылочной целостности.

Теперь о частичной потере данных объектов. К ним могут относиться элемент подчиненного справочника без владельца или движение без регистратора. Мы можем либо удалить такие объекты, либо создать связанные с ними. Чаще всего такие объекты имеет смысл удалять, особенно если это движения, хотя если это элемент справочника, владелец которого потерян, то в ряде случаев имеет смысл создать владельца.

Внимание! Перед любыми исправлениями ссылочной целостности в базе обязательно создайте резервную копию. Помните, что данная операция необратима и может привести к полной или частичной потере данных!

Но даже имея показания к исправлению некоторых битых ссылок следует иметь ввиду, что данный инструмент применит выбранное действие ко всем ссылкам без разбора, что во многих случаях неприемлемо. Поэтому чаще всего проблему битых ссылок следует решать иными путями, один из них — выгрузка необходимых справочников или документов в XML из резервной копии и загрузка их в целевую базу в тех случаях когда просто восстановиться из бекапа невозможно.

Когда следует запускать эту проверку? В тех случаях, когда в базе не обнаружены битые ссылки или когда проверка логической целостности выявляет ошибки. Но в любом случае первый запуск следует производить с действиями Не изменять, а последующие решения принимать на основании глубокого анализа ситуации.

Пересчет итогов

В составе конфигурации 1С имеются специальные объекты — регистры, которые предназначены для хранения записей в разрезе определенных измерений. Например, регистр сведения Цены хранит сведения о ценах в разрезе измерений Номенклатура и Дата, а регистр накопления Товары хранит сведения об остатках товаров в разрезе Номенклатуры, Вида движения (расход или приход), Количества и Даты.

Начем с более простого, регистров сведения, допустим мы хотим получить действующие цены на определенную дату. Но если мы просто получим записи за этот день, то увидим, что цены менялись только для некоторых позиций номенклатуры, чтобы получить полный набор цен нам надо прочитать записи регистра на неопределенное количество дней назад, пока мы не получим последние цены для каждой позиции номенклатуры. Чтобы этого не делать регистр сведений имеет специальную виртуальную таблицу — СрезПоследних, которая содержит последние актуальные цены на каждый день. Теперь нам достаточно один раз обратиться к этой таблице, чтобы получить нужные сведения на интересующую дату.

testirovanie-i-ispravlenie-009.png

Немного сложнее с регистрами накопления, записи в них содержат только сведения о движениях, скажем, такого-то числа в такое-то время на склад пришло 10 позиций некоторой номенклатуры, затем тем же днем продали 1 шт, потом 3 шт, за ней снова 5 шт и после еще 1 шт. При этом ряд вопросов, которые могут нас интересовать гораздо шире. Нас могут интересовать остатки на произвольный момент времени, либо обороты за некоторый период.

Чтобы не делать глубоких выборок по регистрам накоплений в них предусмотрены виртуальные таблицы Остатки, Обороты, Остатки и обороты. Каждая из них содержит актуальные данные за определенный период, в нашем случае день. И если таблица остатков в особом пояснении не нуждается, то таблица оборотов на нашей схеме может вызвать вопросы, так как ее содержимое полностью совпадает со значениями регистра. На самом деле редко когда регистр содержит единственную запись за день, чаще всего там множество записей движения: утром привезли на склад товар, потом его активно продавали, затем довезли еще немного и продолжили торговлю. При этом таблица обороты отобразит общий оборот за период.

testirovanie-i-ispravlenie-010.png

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

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

Сжатие таблиц информационной базы

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

testirovanie-i-ispravlenie-011.pngКакой практический смысл этой операции? Да особо никакого, фрагментация данных от этого не уменьшится, а скорее всего даже увеличится. Единственный смысл сжатия базы — это если вы удалили из нее значительный объем данных и теперь просто оптимизируете общее занимаемое место.

Когда следует выполнять данное действие? Только если вы удалили из базы значительный объем данных, ну или если размер файла базы для вас критичен.

Реструктуризация таблиц информационной базы

Если реиндексация только перестраивала индексы, то реструктуризация полностью перестраивает содержимое базы данных, для каждой таблицы создается копия и записывается в отдельное место на диске, затем вся база данных полностью замещается копией. В чем смысл этого действия? Фактически мы произвели дефрагментацию базы данных, если ранее данные таблицы могли быть разбросаны по диску, то теперь они будут расположены последовательно.

testirovanie-i-ispravlenie-012.pngЕсть ли в этом практический смысл? В общем и целом, нет, чтение из страниц таблицы носит преимущественно случайный характер, последовательно считывание все таблицы — это уже ошибка построителя запросов. Но реструктуризация все-таки имеет смысл, скажем если вы добавили в базу собственный набор реквизитов или обновили релиз конфигурации (в этом случае реструктуризация будет выполнена автоматически). В любом случае лучше, чтобы связанные данные лежали рядом. Но следует понимать, что в процессе реструктуризации придется переместить весь объем информационной базы, а это может занять весьма продолжительное время.

И как раз-таки после реструктуризации будет уместно выполнить сжатие. Так как данные перемещать уже не надо, а пустое пространство уже сосредоточено в одном месте.

Как часто следует запускать? По необходимости, в том случае если вы изменили набор метаданных.

Пересоздание автономной конфигурации

Достаточно специфическая функция и относится к мобильному клиенту с возможностью автономной работы. Потеряв связь с основной базой данных такой клиент переключается в автономный режим и начинает использовать автономную конфигурацию. Если в данном режиме автономный клиент ведет себя неадекватно, то автономную конфигурацию следует пересоздать.

Проверка логической целостности расширений конфигурации

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

Данная проверка аналогична проверке логической целостности, только с учетом подключенных расширений, которых может быть и не одно. Если вы используете расширения, то обязательно включайте данную проверку вместе с проверкой логической целостности.

Заключение

По умолчанию фирма 1С предлагает достаточно сбалансированный набор действий: реиндексация и пересчет итогов благотворно влияют на производительность, а проверка логической целостности позволяет на ранних этапах выявить возможные проблемы. Если вы используете расширения, то добавьте туда проверку логической целостности расширений.

Остальные проверки и действия следует выполнять только при наличии необходимости. Так обнаружив ошибки в логической целостности следует выполнить проверку ссылочной целостности, а существенно изменив структуру базы данных имеет смысл выполнить реструктуризацию.

Надеемся, что данный материал окажется вам полезен, а также поможет по-новому взглянуть и глубже понять привычные действия.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

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

Данная статья объяснит откуда берутся ошибки, что делать что бы снизить вероятность их появления. а также что делать в случае. если последние уже появились на компьютере/ в базе.

Причины ошибки

Причин может существовать множество. Главная задача. определить какая именно вызывает сбой в системе. Сперва нужно понять — сбой возникает на сервере или на конкретном компьютере, но об этом позже.

Основные симпотмы и предпосылки к сбоям — компьютеры без рабочего антивируса. На компьютере стоит устаревшее ПО или же файрвол конфликтует с базой, соответственно так же с последней может конфликтовать и антивирус.

Ошибка формата потока

При запуске 1С пользователи могут столкнуться с проблемой «ошибка формата потока»..

Решение ошибки информационной базы 1C

1) При возникновении подобной трудности требуется удалить все временные файлы, которые создает приложение при входе.

  • На рисунке ниже показано какие файлы нужно удалить

Решение ошибки информационной базы 1C

2) Очистка кеша программы.

  • При входе необходимо удалить пункт из списка ниже и добавить заново.
  • Решение ошибки информационной базы 1C

3) При удалении кеша способом выше — кеш фактически будет оставаться на компьютере. Взамен в программе просто будут создаваться новые данные. Компьютер будет засоряться.

Неверный формат хранилища

4) Вышеуказанная проблема также вызывается из-за захламления кешем.

  • Решение ошибки информационной базы 1C

Ошибка данных СУБД

Решение ошибки информационной базы 1C

Такое возникает при повреждении системного программного файлика, который показан ниже

Решение ошибки информационной базы 1C

  • Основной способ избавиться от проблемы — переустановить систему.
  • Также имеет смысл не переустанавливать, а просто обновить систему.
  • Попробуйте протестировать и исправить

Тестирование базы данных

Протестировать на наличие проблем можно при помощи специального расширения

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

Тестирование базы данных в конфигураторе

Реиндексация таблиц информационной базы 1С

Реиндексация таблиц, т.е. исправление ошибок и сбоев в индексах.

При тестировании необходимо ставить галочку на проведение проверки по данному пункту, т.к. это позволит решить многие сбои.

Проверка ссылочной целостности

Приложение устраняет несуществующие ссылки. Прежде чем выбирать этот пункт — подумайте. что необходимо сделать со ссылками — удалить, изменить или добавить новую ссылку.

1С Пересчет итогов

Возникает ошибка в программе в результате которой система выводит ложную информацию, расшифровывая которую не видно детализации. Таким образом складывается ситуация, когда количество (цифра) по товару имеется, а сведений что за товар — нет. Установите галочку и программа постарается восстановить нарушенную связь между предметом и его числом.

Сжатие таблиц информационной базы

При удалении информации, в таблице фактически она сохраняется, в результате чего происходит захламление. При пометке указанного пункта — сведения удаляются в таблице, в результате чего размер данных становится меньше.

Реструктуризация таблиц информационной базы

Действие переносит в новые таблицы сведения из старых. Пометка такого действия устраняет определенные косяки.

Запуск

После выборки нужных действий при проверке, жмите «Продолжить», некоторые ошибки, или все, будут устранены.

Рекомендации после исправления ошибки

  • Установите антивирус и проверьте компьютер на наличие вирусов;
  • Обновите программное обеспечение;
  • Скачивайте новые программы только с официальных сайтов;
  • Убедитесь в актуальности версии 1С

Реструктуризация таблиц Информационной базы

Я
   vanyshan

29.12.15 — 10:50

Всем доброго дня! Прошу помощи. После очередного обновления конфигурации решил выполнить ТИИ информационной базы. Все пункты кроме последнего ошибок не выявили, а вот при реструктуризации база зависает на регистре бухгалтерии «налоговый» и напрочь отказывается делать что либо дальше. Через некоторое время отваливается сеанс в консоле администрирования, и появляется сообщение: «прекращена работа программы 1с.windows может провести поиск способа устранения этой ошибки в интернете». И далее предложение закрыть программу или искать решение проблеммы в интернете.

1с УПП, конфигурация 1.3.65 не типовая, платформа 8.3.5.1231, клиент-сервер, размер базы не большой (mdf файл порядка 17 ГБ). Облазил все в интернете, но ничего подходящего для решения проблемы не нашел, вот и решил в отчаянии написать на форум в надежде на помощь.

   ДенисЧ

1 — 29.12.15 — 10:53

для начала dbcc checkdb сделай…

Потом попробуй выгрузить в файловую.

   vanyshan

2 — 29.12.15 — 10:59

Это же только для файловой делается или для серверной тоже можно?

   ДенисЧ

3 — 29.12.15 — 10:59

если шо, dbcc checkdb — это для MSSQL…

   vanyshan

4 — 29.12.15 — 11:00

Все понял, сейчас сделаю, должно помочь?

   tixis

5 — 29.12.15 — 11:02

(4) хотя бы увидишь состояние

   vanyshan

6 — 29.12.15 — 11:08

Тогда, подскажите пожалуйста как запустить эту проверку.

   ДенисЧ

7 — 29.12.15 — 11:09

(6) Может, сисадмина грамотного лучше позвать?

   vanyshan

8 — 29.12.15 — 11:12

Думаю справлюсь. Если правильно понял, запрос к базе данных с текстом «dbcc checkdb»

   rs_trade

9 — 29.12.15 — 11:19

выгрузку-загрузку сделай сначало. нафиг чек дб

   vanyshan

10 — 29.12.15 — 11:29

Результат теста: CHECKDB обнаружил 0 ошибок размещения и 0 ошибок согласованности в базе данных «Test».

   vanyshan

11 — 29.12.15 — 11:30

Просто выгрузить dt и снова в нее же загрузить?

   Serg_1960

12 — 29.12.15 — 11:33

(11) Выгрузить и загрузить в копию(!). «Все эксперименты на мышах»(с)  — не эксперементирую на живыхз людях. Да простят меня защитники животных.

   vanyshan

13 — 29.12.15 — 11:36

Само собой! Попробую, займет на все про все времени около часа, надеюсь что поможет, ну а если нет, есть еще какие варианты? Просто у меня подозрения, что после реструктуризации база как то пошустрей работает.

   Serg_1960

14 — 29.12.15 — 11:47

Какие ещё есть варианты? Да стандартный, можно сказать типовой, совет: «Обнови платформу!»(цы)

   rs_trade

15 — 29.12.15 — 11:47

(13) В любой не понятной ситуации с базой первым делом надо делать выгрузку-загрузку. В большинстве случаев все лечится.

   vanyshan

16 — 29.12.15 — 11:49

Спасибо за советы, пробую! Обязательно сообщу результат.

   makfromkz

17 — 03.01.16 — 11:43

(16) А результат таки не сообщил 😉

   ICWiner

18 — 03.01.16 — 11:52

Ну он же не говорил когда сообщит. Так что нормально все.

  

Necessitudo

19 — 04.01.16 — 21:15

(1)  Ты читал?

http://habrahabr.ru/post/136979/

TurboConf — расширение возможностей Конфигуратора 1С

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

В процессе обновления информационной базы произошла критическая ошибка по причине: Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец таблицы «.dbo.»; в столбце запрещены значения NULL. Ошибка в INSERT.

Описание ошибки:
Столкнулся с ошибкой при выполнении процедуры Тестирование и исправление… на этапе реструктуризации таблиц информационной базы. База клиент-серверная. 1С: Управление торговлей 10.3.31. Платформа 1С: Предприятие 8.3.9

Найденные решения:

Сложно сказать, что посчастливилось, но все же ошибка преследовала меня в базе не единожды. Но по своей сути каждая последующая формулировка «В процессе обновления информационной базы произошла критическая ошибка…» отличалсь в причине и решении незначительно. С такой ошибкой столкнулся, если быть откровенным, впервые, но интернет в принятии решения устранения ошибки сильно не помог, кроме вот этого обсуждения на форуме Как удалить строки содержащие NULL в таблице где NULL недопустимо. Зацепок решения не было. Но все же решение было найдено. Читаем… ниже.

1С 8 ошибки в конфигураторе тестирование и исправление базы данных, В процессе обновления информационной базы произошла критическая ошибка

Итак, начнем с первого факта возникновения ошибки при выполнении тестирования и исправления базы данных на этапе реструктуризации таблиц базы данных.

1С 8 критическая ошибка по причине: Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец , таблицы   ".dbo."; в столбце запрещены значения NULL. Ошибка в INSERT.

Кнопка «Подробно…»:

1С 8, конфигуратор, тестирование, как исправить ошибку HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1

Полный текст ошибки:
В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец «_Fld412», таблицы «Торговля.dbo._Reference19NG»; в столбце запрещены значения NULL. Ошибка в INSERT.
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1

Если взглянуть скрином ранее, то нельзя упустить из виду подсказку, оставленую программой в левом нижнем углу окна программы, в строке состояния, о том, что выполнение реструктуризации прервалось на справочнике «Банковские счета». В базе справочник имел более 3х с половиной тысяч элементов, поэтому сходу было сложно понять, в каком из них скрывается ошибка. Была написана простая обработка, которая просто должны была обойти все элементы справочника и перезаписать их. Надежда была на то, что запись проблемного элемента завершиться ошибкой.

Исполняемый код обработки прост:

Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
               | БанковскиеСчета.Ссылка
               |ИЗ
               | Справочник.БанковскиеСчета КАК БанковскиеСчета»;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
       СпрОбъект = Выборка.Ссылка.ПолучитьОбъект();
       СпрОбъект.Записать();
КонецЦикла;

Предположение было оправдано. Ошибка при записи возникла. Теперь было понятно, элемент с каким кодом может быть причиной критической ошибки в процессе обновления информационной базы.

1C 8 как исправить ошибку при тестировании и исправлении в конфигураторе В процессе обновления информационной базы произошла критическая ошибка по причине: Ошибка СУБД: Microsoft SQL Server Native Client 11.0

Это оказался элемент справочника, у которого не был заполнен ни одни реквизит, так что мне даже не удавалось пометить такой элемент на удаление. Дальше была написана простая обработка для удаления выбранного элемента справочника без проверки ссылочной целостности. Элемент был удален.

Тестирование и исправление было запущено повторно. Но уже вскоре после запуска процедуры в режиме реструктуризация таблиц базы мен ожидала идентичная ошибка, но уже связанная со справочником «Организации».

Новый текст ошибки отличался лишь немногим, названием таблицы и именем столбца:
В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец «_Fld888», таблицы «Торговля.dbo._Reference66NG»; в столбце запрещены значения NULL. Ошибка в INSERT.
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1

1С 8 ошибка в конфигураторе как исправить Не удалось вставить значение NULL в столбец "_Fld888", таблицы   "Торговля.dbo._Reference66NG"; в столбце запрещены значения NULL. Ошибка в INSERT.

По опыту предыдущей инцидента уже казалось понятным, что в справочнике у какого-то элемента не заполнены данные. Так и оказалось. Проблемный элемент справочника был найден мгновенно и в этом случае повезло больше элемент можно было пометить на удаление, был помечен и удален с помощью «Удаление помеченных объектов».

1С предприятие 8 ошибка при тестировании базы как устранить HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1

Тестирование и исправление было запущено в третий раз. Но и этот раз не обошелся без «критической ошибки в процессе обновления информационной базы».

Текст третьей ошибки:
В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец «_Fld1024RRef», таблицы «Торговля.dbo._Reference88NG»; в столбце запрещены значения NULL. Ошибка в INSERT.
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1

1С 8 конфигуратор ошибка при тестировании и исправлении, реструктуризация таблиц информационной базы, В процессе обновления информационной базы произошла критическая ошибка по причине: Ошибка СУБД:

Но и в этот раз программа оставила подсказку, что проблема содержится в записях справочника «ТипыЦенНоменклатурыКонтрагентов».

Удалить проблемные элементы справочника пришлось программно с помощью все той же, указанной выше простой обработки непосредственного удаления без проверки ссылочной целостности.

1С 8 ошибка конфигуратора Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец таблицы   dbo, в столбце запрещены значения NULL. Ошибка в INSERT. HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1

И в итоге очередной запуск, уже четвертый по счету, в режиме «Реструктуризация таблиц информационной базы» в рамках тестирования и исправления завершился успешно.

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

31-10-2018

Журавлев А.С.
(Сайт azhur-c.ru)

Оптимизация реструктуризации базы данных

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Мы разработали новый механизм реструктуризации базы данных, который позволяет ускорить обновление конфигурации в среднем в 3-4 раза, а в отдельных случаях на порядки. Ускорение достигается за счёт минимизации манипуляций над данными и максимального их переноса на уровень системы управления базой данных (СУБД).

Что такое реструктуризация?

Реструктуризация это изменение структуры и состава таблиц базы данных, и перенос имеющихся данных в изменённые таблицы. Обычно реструктуризация выполняется в тот момент, когда вы нажимаете Обновить конфигурацию базы данных в Конфигураторе. Но выполняется она не каждый раз.

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

Если рассматривать реструктуризацию с точки зрения манипулирования данными, то существует база данных и схема данных, которая соответствует конфигурации базы данных. После того, как вы обновляете конфигурацию базы данных, создаются новые структуры данных, в которые переносятся старые данные.

01.png

«Традиционная» реструктуризация

В процессе реструктуризации последовательно анализируются все объекты конфигурации. Не углубляясь в подробности можно сказать, что для каждого объекта выполняется:

  • Анализ его изменений;
  • Создание новых таблиц в базе данных, которые соответствуют новой структуре объекта;
  • Перенос данных.

Из этих трёх шагов перенос данных занимает наибольшее количество времени. При этом сами операции переноса данных могут быть простыми и сложными.

Например, к простым и быстрым операциям относятся те, которые вызваны добавлением или удалением столбцов таблицы. В этом случае отдельным запросом создаётся новая таблица (с изменённой структурой) и данные переносятся в неё.

02.png

Все остальные операции являются сложными, могут занимать длительное время, и для их выполнения требуется участие Конфигуратора (или серверной части платформы, если обновление выполняется на сервере). Потому что процесс переноса данных может сопровождаться различными вспомогательными действиями, обусловленными спецификой 1С:Предприятия.

03.png

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

Новый механизм реструктуризации

Главное изменение заключается в том, что оптимизация реструктуризации достигнута не за счёт локальных изменений «традиционного» механизма, а за счёт создания полностью нового механизма реструктуризации.

Это непростая и трудоёмкая задача, потому что механизм реструктуризации должен обеспечивать транзакционность изменений, то есть надежность и целостность базы данных во всех случаях. Механизм должен быть готов к тому, что процесс реструктуризации может прерваться в любой момент (в результате сбоя, например), и при этом система должна остаться в консистентном состоянии. То есть либо в виде старой версии, либо в виде новой версии. Старый механизм для этого создавал новые версии изменённых таблиц, и заполнял их. А потом подменял все старые версии на новые.

Новый механизм тоже обеспечивает транзакционность, но более сложным способом.

Кроме этого новый механизм основан на ряде идей, которые позволили получить значительное ускорение:

  • Максимальное количество операций делегируется на уровень СУБД, потому что это наиболее близкая к данным часть, и она имеет большие возможности изменения данных.
  • Обрабатываются только те таблицы СУБД, в которых изменения конфигурации могут вызвать изменение данных. В «традиционном» механизме это было не всегда так. Например, при изменении реквизита табличной части документа копировались данные и основной таблицы, и всех табличных частей документа.
  • Табличные части реструктуризируются отдельно. При этом возможно отдельное «пореквизитное» их изменение. Например, если вы добавили реквизит к табличной части, то к таблице просто добавляется новый столбец, без модификации основной таблицы.

04.png

На основе этих идей мы достигли максимальной оптимизации на тех изменениях конфигурации, которые приводят к следующим операциям с данными:

  • Добавление или удаление столбцов таблиц. Эти операции проводятся теперь на текущих таблицах (раньше создавались новые таблицы и в них переносились данные). Необходимость добавления или удаления столбцов возникает, например, при добавлении или удалении реквизитов, при изменении некоторых свойств объекта конфигурации (иерархия справочника и столбец _ParentID) и др.
  • Добавление или удаление индексов. Просто создаётся новый индекс, без создания новых таблиц и переноса данных. Эти операции выполняются, если вы установили индексирование у реквизита, например.
  • Изменение существующих индексов. Также выполняется без создания таблиц и переноса данных. Например, кластерный индекс регистра сведений меняется тогда, когда вы добавляете измерение.

В других операциях перенос данных требуется как и раньше, но практически всегда (в большей части операций) он осуществляется на уровне СУБД. Данные переносятся единым запросом. Это может быть INSERT для новых таблиц, или UPDATE существующих таблиц.

Конечно, существуют такие изменения, которые всё равно проходят обработку на сервере с выгрузкой данных построчно. Например, преобразование строки в число, или в дату. Такие операции нецелесообразно делать на уровне СУБД, к тому же они довольно редко встречаются. Но наиболее частые изменения проводятся всё же на уровне СУБД, одним запросом на одну таблицу.

В среднем ускорение достигает 4 раз. Это, конечно, зависит от конкретной конфигурации, от конкретных изменений, и даже конкретных данных. В отдельных случаях ускорение может быть до 20 раз. Такое возможно, например, при удалении реквизита в большой таблице, или если изменения затрагивают маленькие таблицы, но сам объект при этом является довольно большим.

Помимо ускорения есть и другой положительный момент. Во многих случаях не перестраиваются индексы. Это позволяет сохранить их актуальность, сохранить статистику, сократить место, требуемое для реструктуризации.

Мы провели несколько сравнительных экспериментов на реальных информационных базах, и получили следующие результаты:

  • Добавление реквизитов к документам и измерений к регистрам сведений. База 400 Гб. Новый механизм позволяет ускорить реструктуризацию с 2 часов до 15 минут.
  • Изменение режима совместимости с 8.2.19 на 8.3.6. База 6 Тб. Ускорение с 5 дней до 12 часов.

Особенности текущей реализации

Новый механизм реструктуризации мы планируем включить в версию 8.3.11 в статусе бета. Он реализован только на сервере, причём на сервере должна быть установлена Java 8.

Чтобы использовать новый механизм реструктуризации, вы можете запустить Конфигуратор в пакетном режиме. Кроме этого в файле conf.cfg вы также можете указать необходимость использования нового механизма. Тогда новая реструктуризация будет выполняться при нажатии КонфигурацияКонфигурация базы данныхОбновить конфигурацию базы данных на сервере. Если никаких специальных действий не предпринимать (просто установить новую платформу), то стандартно будет использоваться старый механизм.

Пока поддерживаются только две СУБД: MS SQL Server и PostgreSQL.

На текущий момент мы оптимизировали реструктуризацию не всех объектов конфигурации, а только основных:

  • Планов обмена,
  • Справочников,
  • Документов,
  • Журналов документов,
  • Планов видов характеристик,
  • Планов счетов,
  • Регистров сведений,
  • Регистров накопления,
  • Регистров бухгалтерии.

Для перечисленных объектов (кроме регистров) оптимизированы любые их изменения. Для регистров мы оптимизировали реструктуризацию движений и реструктуризацию таблиц регистрации изменений. Операции пересчёта итогов и пересчёта срезов для регистра сведений мы пока не оптимизировали. Однако, несмотря на это, использование нового механизма уже даёт существенное ускорение всего обновления регистров в целом.

Мы рассматриваем возможность увеличения охвата операций и расширения состава объектов конфигурации, реструктуризация которых оптимизирована в новом механизме.

Ускорение реструктуризации таблиц

Иногда, может сложиться так, что на уже долгое время работающей базе нужно изменить типа реквизита, или добавить индексируемые поля, или просто добавить реквизит. Так вот после этого, нас ожидает долгий процесс (если база больших размеров)реструктуризации таблицы. В этой статье я рассмотрю алгоритм значительного сокращения времени реструктуризации.

Итак. Программисты 80lvl скорее всего знают все и даже больше, чем описано в статье, поэтому эта публикация будет ориентирована в первую очередь на новичков. А так как у новичка скорее всего ни репутации и стартмани — все скрипты я не буду прикреплять, а выложу в статье.

Поехали. Предположим в вашей конфигурации есть некий документ, с 5 табличными частями. В СУБД (в нашем примере PosgreSQL, но все ниже сказанное справедливо и других СУБД) такой документ предстанет в виде 6 таблиц

Предположим вам необходимо добавить реквизит в табличную часть _document39_vt415, узнать какая именно табличная часть можно либо специальными обработками, либо просто посмотрев несколько записей из таблицы в самой СУБД. Что произойдет далее, точнее что сделает платформа 1С, она создаст копии всех 6 (!) таблиц документа и начнет копирование в них данных из старых таблиц — начнется реструктуризация. Процесс этот, мягко говоря, не быстрый. Почему я вообще пишу эту статью, потому что в моем случаи: количество документов (записей в _document39 было 1М) и записей в табличных частях 25М, процесс реструктуризации документа средствами 1С занял 48 часов. Так вот мы попытаемся обмануть платформу.

Продолжаем, добавляем реквизит в табличную часть в конфигураторе, у меня это число длинной 10, точность 0 (во время всех манипуляций его можно не закрывать), сохраняем, но не обновляем. Переименовываем все таблицы документа в pgAdmin или чем вы там пользуетесь (у меня это пара pgAdmin и EMS SQL Manager PostgreSQL), например _document39 в _document39_src

И создаем копии наших переименованных таблиц (пустые) с первоначальными именами, в нашем примере делаем пустую копию _document39_src с именем _document39.

Копии я создавал в EMS SQL Manager лишь потому, что в нем это проще, но можно и в pgAdmin. В нем надо в контекстном меню таблицы выбрать Скрипты — CREATE и в окне SQL редактора изменить имя таблицы на новое.

Если посмотреть в предприятии, у нас нет ни одного документа.

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

Смотрим какое имя получила новая колонка таблицы, которая соответствует новому реквизиту.

У меня это _fld1097. Возвращаемся к нашей исходной таблице, которую мы переименовали в _document39_src, добавляем новую колонку в нее

Ставим значение по умолчанию, здесь 0 и жмем ОК. Весь процесс занял около 1 часа (в 48 раз быстрее). После того как колонка создана, стираем значение по умолчанию и переименовываем таблицу обратно (у нас в _document39)

Запускаем предприятие и проверяем. Радуемся или плачем.

Итак, это мы добавили реквизит, рассмотрим теперь случай, если нам надо изменить тип реквизита, например, было число (5, 2), надо число (10, 4), или добавить индексов.

Тут есть два варианта.

Вариант первый. Создаем копии таблиц и заливаем в них данные из основной таблицы

SELECT * INTO _document39_copy FROM _document39; SELECT * INTO _document39_vt415_copy FROM _document39_vt415; SELECT * INTO _document39_vt431_copy FROM _document39_vt431; SELECT * INTO _document39_vt434_copy FROM _document39_vt434; SELECT * INTO _document39_vt437_copy FROM _document39_vt437; SELECT * INTO _document39_vt444_copy FROM _document39_vt444;

После этого очищаем исходные таблицы, т.е. доходим до момента, когда 1С думает, что у нас нет записей в таблицах документ. Делаем все необходимые изменения в конфигураторе и обновляем. Теперь нам надо вернуть данные назад

NSERT INTO _document39( _idrref, _version, _marked, _date_time, _numberpfix, _number, _posted, _fld556, _fld392rref, _fld393rref, _fld394, _fld395, _fld579, _fld396, _fld397, _fld398rref, _fld399, _fld400, _fld401rref, _fld1018rref, _fld403, _fld402rref, _fld404rref, _fld405, _fld538rref, _fld406, _fld407, _fld408rref, _fld409rref, _fld410rref, _fld411rref, _fld412rref, _fld413, _fld414) select * from _document39_copy; —

60min (1.5 M records) INSERT INTO _document39_vt431( _document39_idrref, _keyfield, _lineno432, _fld433rref) select * from _document39_vt431_copy; INSERT INTO _document39_vt434( _document39_idrref, _keyfield, _lineno435, _fld436rref) select * from _document39_vt434_copy; INSERT INTO _document39_vt437( _document39_idrref, _keyfield, _lineno438, _fld439rref, _fld440rref, _fld441, _fld442rref) select * from _document39_vt437_copy; INSERT INTO _document39_vt444( _document39_idrref, _keyfield, _lineno445, _fld446rref) select * from _document39_vt444_copy; —3 min INSERT INTO _document39_vt415( _document39_idrref, _keyfield, _lineno416, _fld426rref, _fld423, _fld419rref, _fld421, _fld420, _fld536, _fld425, _fld418, _fld422, _fld428rref, _fld427rref, _fld417rref, _fld429, _fld424) select * from _document39_vt415_copy; —16588297 строк, 18.5 h

Запускаем предприятие и проверяем. Радуемся или плачем.

Вариант второй. Кто-то считает, что INSERT INTO работает медленно, поэтому можно использовать следующие скрипты, работающие не с копиями таблицы а с файлами на диске

COPY BINARY _document39 TO ‘e:/_document39’; COPY BINARY _document39_vt431 TO ‘e:/_document39_vt431’; COPY BINARY _document39_vt434 TO ‘e:/_document39_vt434’; COPY BINARY _document39_vt437 TO ‘e:/_document39_vt437’; COPY BINARY _document39_vt444 TO ‘e:/_document39_vt444’; COPY BINARY _document39_vt415 TO ‘e:/_document39_vt415’;

где ‘e:/_document39’ это файл в корне диска е.

Скрипт загружающий данные обратно

COPY BINARY _document39 FROM ‘e:/_document39’; COPY BINARY _document39_vt431 FROM ‘e:/_document39_vt431’; COPY BINARY _document39_vt434 FROM ‘e:/_document39_vt434’; COPY BINARY _document39_vt437 FROM ‘e:/_document39_vt437’; COPY BINARY _document39_vt444 FROM ‘e:/_document39_vt444’; COPY BINARY _document39_vt415 FROM ‘e:/_document39_vt415’;

На этом, пожалуй все.

Как видно, процесс это все равно долгий (около 18 часов у меня). Что мы получили, около 19 часов против 48 при изменении типа реквизита и добавлении индексов, и около 1 часа против 48 часов при добавлении реквизита.

PS. У меня есть подозрение, что на других СУБД реструктуризация средствами платформы будет быстрей. К тому же у меня стоял старый PosgresSQL, еще 8.2.4-3.1

Тестирование и исправление базы 1С 8.3

Иногда в работе с программой 1С 8.3 могут возникнуть какие-то непредвиденные ситуации — сбои в работе, программа выдает какие-то ошибки, не проводится документ или же просто некорректно отображаться информация. В таких случаях, первое что может помочь — это произвести тестирование и исправление информационной базы 1С 8.3.

Тестирование и исправление информационной базы 1С

Запускаем информационную базу 1С в режиме Конфигуратор и заходим в пункт меню Администрирование — Тестирование и исправление .

Стоит помнить, что перед любыми действиями с информационной базой 1С необходимо выполнить ее резервное копирование.

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

Тестирование базы 1С, проверка на ошибки

Реиндексация таблиц информационной базы 1С: что это

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

В результате программного сбоя индексы могут сбиваться, вследствие чего появляются ошибки, например в документе отсутствует наименование или количество, не заполнено поле и т.п.

Для исправления такого рода ошибок в базе 1С устанавливаем галочку Реиндексация таблиц информационной базы .

При тестировании и исправлении в 1С реиндексируются все таблицы. И хотя данный пункт занимает длительное время, он помогает решить большую часть проблем.

Проверка логической целостности информационной базы 1С

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

При этом программа 1С может работать, но ошибка будет возникать при обращении к тому документу (или объекту) в момент создания которого произошел сбой.

При тестировании и исправлении и установке данной галочки будет произведена проверка логических ошибок в структурах таблиц информационной базы.

Проверка ссылочной целостности информационной базы 1С

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

При тестировании и исправлении и обнаружении ссылок на несуществующие объекты в 1С предлагается три варианта действия — создать объект, очистить ссылку или не изменять, при обнаружении частично потерянных данных объекта — создать, удалить объект, или не изменять его. При выполнении действия:

  • Создавать объекты , система создает своего рода объект-заглушку, которые впоследствии можно будет исправить.
  • Очищать ссылки, удалять объект — битые ссылки будут очищены, объекты удалены.
  • Не изменять — в этом случае проверка лишь покажет ошибки, не предпринимая никаких действий.

Пересчет итогов

Иногда в отчетах могут отражаться неверные данные. Мы исправляем, перепроводим документы, а они не меняются… Видим цифру, открываем карточку счета — документа нет. В чем может быть проблема? Все просто — сбились итоги.

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

Например, данные из таблицы итогов по регистру Остатки материалов , позволяют нам быстро определить их остатки на складах на определенную дату. Установив галочку при тестировании — Пересчет итогов , будут пересчитаны итоги во всей информационной базе 1С и заново занесены в таблицы итогов.

Сжатие таблиц информационной базы 1С

При удалении объектов в информационной базе 1С (документов, справочников и т.п.) они не удаляются физически, эти записи остаются в таблицах, но пользователь их не видит. В результате накопления таких объектов, увеличивается объем информационной базы 1С, что приводит к замедлению работы.

Сжатие таблиц в 1С 8.3 — это физическое удаление записей, которые ранее были помечены на удаление и удалены из программы, информация о них удаляется полностью из информационной базы, в результате таблицы базы становятся меньше. Такого же эффекта можно достичь путем выгрузки и загрузки файла информационной базы через Конфигуратор (*.dt).

Реструктуризация таблиц информационной базы 1С

Это создание заново структуры информационной базы, создание новых таблиц, и перенос старых данных в новые таблицы. Реструктуризация также происходит при обновлении информационной базы. В результате этих действий также возможно исправление некоторого рода ошибок программы 1С.

Обращаем внимание на переключатель, который задает что делать при тестировании — выполнять Только тестирование (в этом случае будет выведена только информация об ошибках) или Тестирование и исправление ошибок .

После установки параметров тестирования, нажимаем кнопку Выполнить и ждем результат.

В строке состояния отображается информация о ходе тестирования.

По окончании тестирования 1С будет выведена информация об ошибках и их исправлении.

Если в ходе тестирования возникли какие то проблемы, можно восстановить информационную базу из резервной копии, созданной до начала тестирования.

См. также:

Если Вы еще не являетесь подписчиком системы БухЭксперт8:

Активировать демо-доступ бесплатно →

или

Оформить подписку на Рубрикатор →

После оформления подписки вам станут доступны все материалы по 1С Бухгалтерия, записи поддерживающих эфиров и вы сможете задавать любые вопросы по 1С.

Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

Похожие публикации

    У вас нет доступа на просмотр Чтобы получить доступ:Оформите коммерческую.ФНС в Письме от 13.08.2020 N СД-4-3/13009@ дала разъяснения, что..Для организаций, установивших с апреля 2020 года льготный тариф МСП.

(2 оценок, среднее: 5,00 из 5)

Обсуждение (3)

В какой последовательности лучше выставлять режимы проверки? Ведь устанавливать все флаги сразу не совсем правильное решение?

Ошибка при выполнении операции с информационной базой 1С 8.3

Причины возникновения ошибки

Если копирование баз в архив выполнялось давно или вообще не выполнялось, ситуация становится близка к катастрофе. Приходится восстанавливать хозяйственные операции за большой период, а это всегда несет с собой риск появления новых ошибок.

Причины, вызывающие эту ошибку, могут быть совершенно разными:

  • несовместимая версия файла базы данных;
  • файл базы данных поврежден;
  • ошибка соединения с сервером 1С: Предприятия 8.3;
  • переустановка баз на сервере;
  • проблема с портами на сервере
  • и т.д.

Ошибки такого уровня очень серьезны. А в случае возникновения их на сервере — однозначно требуют обращения к специалистам. И если организации, устанавливающие клиент-серверный вариант, рассчитанный на большое число пользователей, обычно имеют в штате системных администраторов и программистов, отвечающих за сервер, то пользователи, работающие на обычных файловых вариантах 1С, должны уметь самостоятельно разобраться с этой проблемой и решить ее.

Как правило, ошибка при выполнении операции с информационной базой в файловом режиме работы означает, что произошло повреждение файла базы данных. Причин может быть множество:

  • сетевые проблемы при записи файла;
  • неудачное копирование базы;
  • отключение электропитания в момент работы программы;
  • и т.д.

В данной статье мы рассмотрим возникновение этой ошибки для пользователей файловых 1С и дадим два инструмента решения проблемы:

  • Тестирование и исправление;
  • использование утилиты chdbfl.exe.

Тестирование и исправление

Пошаговая инструкция Тестирования и исправления базы.

Шаг 1. Запустите 1С в режиме Конфигуратор.

Шаг 2. В конфигурации выберите пункт меню Администрирование — Тестирование и исправление.

Перед открытием формы тестирования программа напомнит о необходимости сделать копию базы перед проверкой. Если копия сделана — нажимаете на кнопку Продолжить.

Шаг 3. Настройка тестирования.

Форма тестирования предлагает несколько вариантов проверок и режимов, не зависящих друг от друга. Выполнить нужно все проверки в полном объеме, поэтому установите флажки напротив тех вариантов, где они не поставлены по умолчанию.

Форма тестирования и исправления информационной базы должна иметь следующий вид.

Рассмотрим основные группы переключателей проверки.

Группа переключателей проверки и режимы

Позволяет сделать выбор между режимом, производящим только проверку информационной базы и режимом, производящим коррекцию обнаруженных ошибок.

Проверка информационной базы:

  • проверка логической целостности информационной базы;
  • проверка ссылочной целостности информационной базы.

Коррекция обнаруженных ошибок:

  • реиндексация таблиц информационной базы;
  • пересчет итогов;
  • сжатие таблиц информационной базы;
  • реструктуризация таблиц информационной базы.

Группа переключателей тестирования

Варианты тестирования:

  • Тестирование и исправление;
  • Только тестирование.

Переключатель Тестирование и исправление выставлен по умолчанию, т. е. программа 1С будет не только искать ошибки, но и пытаться их исправить по заложенному разработчиками алгоритму.

При установке переключателя в положение Только тестирование будет произведен поиск ошибок без исправления. Просмотрев характер ошибок, пользователь сам примет решение: будет ли передавать ситуацию на автоматическое программное исправление или нет.

Группа при наличии ссылок на несуществующие объекты

Эта группа определяет, должна ли программа при обнаружении ссылок на несуществующие объекты:

  • создавать объекты;
  • удалять ссылки;
  • не изменять.

По умолчанию установлен самый безопасный вариант Не изменять. При использовании первых двух вариантов в сложных случаях возможны искажения информации в базах 1С.

Группа переключателей при частичной потере данных объектов

Эта группа задает поведение программы, если было обнаружено, что данные объектов были частично потеряны, но оставшихся данных достаточно для того, чтобы восстановить потерянные. Пользователь самостоятельно выбирает вариант:

  • создавать объекты;
  • удалять объект;
  • не изменять.

По умолчанию установлен самый безопасный вариант Не изменять. При использовании первых двух вариантов в сложных случаях возможны искажения информации в базах 1С.

Кнопка выполнить

При нажатии на кнопку Выполнить начинается процесс тестирования и исправления. По окончании проверки программа выдает системное сообщение об успешном окончании тестирования или список возможных проблем.

При просмотре сообщений обращайте внимание на сообщения типа:

Значение должно быть… Сохранено значение…

Если сообщения нарушения целостности в отчете есть, запустите тестирование повторно после исправления, чтобы убедиться, что программа решила проблему: эти сообщения должны уйти.

Утилита CHDBFL.EXE

Утилита включена в Платформу 1С и поставляется отдельно для каждой Платформы 1С.

Пошаговая инструкция работы с утилитой chdbfl.exe.

Определение платформы 1С

Откройте на вашем компьютере папку с Платформой, на которой работает ваша база. Как правило, это последняя установленная вами Платформа 1С, но могут быть случаи, когда запуск происходит с более старых версий специально, поэтому этот момент нужно уточнить. Сделать это можно, например, в конфигурации по справке о программе: меню Справка — О программе.

Место установки Платформы на компьютере зависит от ее разрядности:

  • 32-разрядные Платформы 1С устанавливаются в каталог С:Program Files (x86)1cv8
  • 64-разрядные Платформы 1С устанавливаются в каталог С:Program Files1cv8

Запуск утилиты CHDBFL.EXE

В выбранной Платформе 1С перейдите в папку bin и запустите утилиту chdbfl.exe.

Настройка проверки базы данных

Для настройки проверки физической целостности необходимо:

  • выбрать файл информационной базы, где выходит ошибка;
  • установить флажок Исправлять обнаруженные ошибки.

После нажатия на кнопку Выполнить запустится проверка физической целостности файла БД.

При успешном окончании проверки будет выдано соответствующее сообщение о том, что проверка завершилась без обнаружения ошибок или список таблиц, в которых было выполнено исправление.

Если рассмотренные здесь методы не помогли войти в базу данных и при запуске 1С выдается ошибка выполнения операции с информационной базой, то для восстановления целостности информационной базы и исправления ошибок следует обратиться к специалистам 1С.

Обслуживание

Заказать консультацию

По этой или иной ошибке Вы можете обратиться к нашим специалистам, мы Вам поможем решить Вашу проблему.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • 1с публикация мобильного приложения ошибка 404
  • 1с профессионал сколько ошибок