← На главную
При внесении изменений в метаданные 1С — особенно при добавлении новых субконто на счета бухгалтерского учета — платформа запускает процесс реструктуризации таблиц базы данных. В клиент-серверном варианте на MS SQL Server этот процесс может сопровождаться «зависанием» конфигуратора, длительной работой на протяжении сотен минут или завершаться критической ошибкой вида: «Попытка вставки неуникального значения в уникальный индекс...». В этой статье мы подробно разберем, почему возникает такая ситуация, как ее диагностировать и какими способами можно восстановить работоспособность базы данных.
Причины зависания и сбоев при реструктуризации
Проанализируем механику работы платформы 1С при добавлении субконто к счету. Регистр бухгалтерии состоит из нескольких физических таблиц в СУБД: таблицы движений, итогов и таблицы дополнительных видов субконто (хранящей значения аналитики). Добавление субконто существенно увеличивает разрезы данных и экспоненциально меняет структуру таблицы значений субконто. В момент применения конфигурации платформа создает временные таблицы (с суффиксом NG в MS SQL) и пытается перенести в них все существующие движения с созданием уникальных индексов по периоду и измерениям.
Зависание или критическая ошибка обычно происходят по следующим причинам:
- Большой объем данных: На крупных базах реструктуризация регистра бухгалтерии требует временно утроенного дискового пространства и длительного времени выполнения. Конфигуратор при этом переходит в статус «Не отвечает», что является стандартным проведением фонового процесса выполнения SQL-запросов.
- Аномальные даты или некорректные ссылки: В регистре могут присутствовать записи с ошибками ввода (например, даты 4011 года), битыми ссылками или значениями
NULL там, где платформа ожидает заполненость.
- Нарушение уникальности в таблицах субконто: При переносе записей во временную таблицу вида
dbo._AccRgED...NG и формировании индекса _AccRgED_ByPeriodNG СУБД обнаруживает дублирующие ключи. Это говорит о некорректно сформированных ранее итогах или сбоях прошлых реструктуризаций.
Способ 1. Проведение тестирования и исправления через файловый вариант
Если серверный вариант выдает ошибку создания уникального индекса, проверенным практическим способом является обработка базы в файловом режиме.
Рассмотрим порядок действий по шагам:
- Сделаем резервную копию информационной базы (выгрузку в файл
.dt).
- Создадим чистую локальную файловую информационную базу и загрузим в нее полученный
.dt.
- В файловом режиме запустим утилиту
chdbfl.exe (Check DataBase FiLe), находящуюся в каталоге bin установленной платформы 1С, для проверки структуры файла базы данных.
- Зайдем в конфигуратор файловой базы и выполним меню Администрирование — Тестирование и исправление со следующими установленными флагами:
- Реиндексация таблиц информационной базы
- Проверка логической целостности информационной базы
- Пересчет итогов
- После успешного завершения тестирования применим изменения конфигурации (добавим нужные субконто) в файловом режиме. В файловой базе платформе проще обработать индексы без жестких ограничений блокировок SQL.
- Выгрузим обновленную базу обратно в файл
.dt и загрузим на сервер MS SQL Server.
Способ 2. Диагностика и исправление ошибок непосредственно в MS SQL Server
Если размер базы данных не позволяет выгрузить ее в файловый вариант из-за ограничений по объему, потребуется работа со структурой хранения на уровне SQL-сервера.
Выясним порядок действий для системного администратора и разработчика:
- Определим физическое имя проблемной таблицы с помощью метода 1С
ПолучитьСтруктуруХраненияБазыДанных(). Из текста ошибки можно узнать имя служебного объекта, например, _AccRgED498 (где ED обозначает таблицу дополнительных видов субконто регистра бухгалтерии).
- В среде SQL Server Management Studio (SSMS) с помощью T-SQL запросов найдем повторяющиеся строки в таблице движений и таблице субконто, сгруппировав данные по полям индекса с условием
HAVING COUNT(*) > 1.
- Проверим наличие записей с аномальными датами (например, далекое будущее или сбойные значения) и зафиксируем документы-регистраторы, сформировавшие эти записи.
- Распроведем или исправляем проблемные документы в режиме 1С, после чего запустим повторный пересчет итогов регистра через **Тестирование и исправление**.
Способ 3. Альтернативные архитектурные решения без добавления субконто
Добавление субконто к группам счетов или активно используемым счетам учета — это тяжелая операция, существенно снижающая производительность системы. Во многих ситуациях добавлять субконто в конфигураторе вовсе не обязательно.
Проанализируем альтернативные способы реализации бизнес-требований:
- Использование дополнительных реквизитов и сведений: В современных конфигурациях детализацию учета можно организовать через механизмы ПВХ «Дополнительные реквизиты и сведения» без изменения структуры таблиц БД.
- Составной тип существующих субконто: Если на счете уже есть субконто, можно расширить его тип (например, разрешить выбор как объектов справочника
Номенклатура, так и Номенклатурные группы), не увеличивая число измерений регистра.
- Организация учета через параллельные регистры накопления: Для целей управленческого и аналитического учета лучше использовать отдельный регистр накопления, не перегружая планов счетов и регистр бухгалтерии.
- Точечное назначение субконто: Если субконто критически необходимо, добавляйте его строго к конкретным субсчетам нижнего уровня (например, только к 50.03 или 50.23), избегая назначения субконто на родительские счета.