Cannot insert duplicate key. Кто виноват и что делать

Публикация № 1010017

Разработка - Обмен данными 1С - Распределенная БД (УРИБ, УРБД)

SQLServer ошибка исправление тестирование CANNOT INSERT DUPLICATE KEY

80
Ошибка "CANNOT INSERT DUPLICATE KEY" в базах 1С и связанная с ней "магия".

О чем речь

Одним прекрасным днем, приходя на работу, Вы обнаруживаете странные ошибки в системе "Cannot insert duplicate key row in object 'dbo.<имя таблицы>' with unique index '<имя индекса>'". Ошибки могут появляться и на русском языке, если установлена соответствующая локализация: "Не удается вставить повторяющуюся строку в объект "dbo.<имя таблицы>" с уникальным индексом "<имя индекса>".

Появление ошибки может происходить при различных действиях, но единственное что их объединяет - это попытка изменения данных в базе данных (ну? а как иначе, ошибка то на уровне СУБД). Причем характерно это как для файлового режима работы, так и для клиент-серверных баз. В рамках статьи мы будет делать упор на работу через SQL Server, но все актуально и для PostgreSQL.

Чаще всего подобные ошибки появляются при следующих действия:

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

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

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

Суть проблемы

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

Кластерный индекс документа

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

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

 
 Уникальность уникальных идентификаторов

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

 
 Какие индексы у таблиц бывают

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

Не могу создать документ

Иногда встречаются интеграции между системами, которые создают элементы в базе приемнике с такими же GUID'ами, как и в источнике. Это очень удобно, синхронизация по уникальным идентификаторам (ссылкам) самая надежная и простая. Но в этом случае есть бомба замедленного действия - что если в один прекрасный день уникальные идентификаторы для одного и того же объекта метаданных совпадут в разных базах?А если не уникальный?

Конечно, Вы будете говорить что это маловероятно, что нет смысла думать об этом. Ну совпадет и ладно. Просто пересоздадим объект и все, зато код работает хорошо и выглядит просто. Самое плохое тут в том, что ошибка может появится в самый неподходящий момент, например, в закрытие месяца. Окажется что из-за совпадения идентификатора не создался документ партии и все полетело к %I$#@(^. Интеграция ошибку не показала, а просто ее пропустила, никто не заметил и месяц уже закрыли. Все.

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

Вы можете воспроизвести подобную ошибку вставки просто выполнив подобный код.

	GUID = Новый УникальныйИдентификатор();
	
	НовЭлемент = Документы.ТестовыйДокумент.СоздатьДокумент();
	СсылкаНовогоЭлемента = Документы.ТестовыйДокумент.ПолучитьСсылку(GUID);
	НовЭлемент.УстановитьСсылкуНового(СсылкаНовогоЭлемента);
	НовЭлемент.Дата = ТекущаяДата();
	НовЭлемент.Записать();
	
	НовЭлемент = Документы.ТестовыйДокумент.СоздатьДокумент();
	СсылкаНовогоЭлемента = Документы.ТестовыйДокумент.ПолучитьСсылку(GUID);
	НовЭлемент.УстановитьСсылкуНового(СсылкаНовогоЭлемента);
	НовЭлемент.Дата = ТекущаяДата();
	// При попытке записи объекта с тем же идентификатором
	// получим ошибку
	НовЭлемент.Записать();

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

Ошибка вставки повторяющегося значенияВ этом случае решением будет - делать соответствие объектов между обмениваемыми системами и не идти по правилу "один GUID для элемента во всех базах".

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

Проблема при записи регистров

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

Простой пример

Есть независимый непериодический регистр сведений "ДанныеДоговоровКонтрагентов" с такой структурой.

Пример регистра сведений

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

Ошибка при записи в регистр сведений

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

Что же с данными моими стало

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

Ошибка при записи набора бухгалтерского регистраИстория возникновения у каждого своя, но типичные случаи все же:

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

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

Метаданные Назначение Имя таблицы SQL
РегистрБухгалтерии.Хозрасчетный Основная _AccRg786
РегистрБухгалтерии.Хозрасчетный ИтогиПоСчетам _AccRgAT0800
РегистрБухгалтерии.Хозрасчетный ИтогиПоСчетамССубконто1 _AccRgAT1819
РегистрБухгалтерии.Хозрасчетный ИтогиПоСчетамССубконто2 _AccRgAT2820
РегистрБухгалтерии.Хозрасчетный ИтогиПоСчетамССубконто3 _AccRgAT3821
РегистрБухгалтерии.Хозрасчетный ИтогиМеждуСчетами _AccRgCT822
РегистрБухгалтерии.Хозрасчетный ЗначенияСубконто _AccRgED823
РегистрБухгалтерии.Хозрасчетный НастройкиХраненияИтоговРегистраБухгалтерии _AccRgOpt825

Ошибка вставки не уникального значения была на таблице "_AccRgAT1819", а эта таблица итогов по счетам с субконто 1. Пока это ничего не дает, рассмотрим варианты решения.

 
 ВНИМАНИЕ! Для отчаянных администраторов и разработчиков!

Вариант №1: Просто отключи итоги

Поистине, самый простой вариант, даже инструкцию можно не писать. Шаги простые:

  1. Полностью отключаем итоги по регистру (вот некоторая информация на ИТС).
  2. Перепроводим / создаем / удаляем нужный документ.
  3. Включаем итоги обратно.

Вот и все!

Для ускорения пересчета итогов можно очистить таблицы (не для файловых баз) с помощью операции "TRUNCATE TABLE <ИмяТаблицы>, тогда платформа не будет долго удалять старые записи итогов, а сразу перейдет к расчету новых. Не забудьте перед этим сделать бэкап! В нашем случае, удаление предыдущих итогов будет таким:

-- ИтогиПоСчетам
TRUNCATE TABLE _AccRgAT0800;
-- ИтогиПоСчетамССубконто1
TRUNCATE TABLE _AccRgAT1819;
-- ИтогиПоСчетамССубконто2
TRUNCATE TABLE _AccRgAT2820;
-- ИтогиПоСчетамССубконто3
TRUNCATE TABLE _AccRgAT3821;
-- ИтогиМеждуСчетами
TRUNCATE TABLE _AccRgCT822;

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

  1. На больших базах пересчет итогов может занимать сутки, двое и даже больше. Иногда это не "лезет" ни в какие технологические окна для обслуживания и пересчет выполнить просто невозможно.
  2. Пересчет итогов может исправить некоторые старые, устоявшиеся ошибки. Все знают правило - если ошибка в данных не исправляется длительное время, то она превращается в особенность :). То есть пересчет может привести к повреждению старой отчетности и непредвиденным последствиям в поведении различных алгоритмов.

Применять его или нет - решать Вам, но если есть риск нестабильной работы системы после этого, то я бы не стал. Если же за "качеством" итогов Вы следите и пересчет для Вас обычное дело, то почему бы и нет? Дальше уже рассмотрим хардкорные варианты.

Вариант №2: Удаление дублей записей

Можно попытаться найти дубли записей и что-то с ними сделать. В нашем случае для поиска дублей записей в таблице "_AccRgAT1819" можно воспользоваться таким скриптом:

SELECT 
    COUNT(*) [RowCount],
	-- Список измерений, которые содержатся в основном кластером индексе
    [_Fld774],
	[_AccountRRef],
	[_Period],
	[_Fld787RRef],
	[_Value1_TYPE],
	[_Value1_RTRef],
	[_Value1_RRRef],
	[_Fld788RRef],
	[_Fld789RRef],
	-- Разделитель записей в режиме разделения итогов
	[_Splitter]
FROM [dbo].[_AccRgAT1819]
GROUP BY
	-- Список измерений, которые содержатся в основном кластером индексе
	[_Fld774],
	[_AccountRRef],
	[_Period],
	[_Fld787RRef],
	[_Value1_TYPE],
	[_Value1_RTRef],
	[_Value1_RRRef],
	[_Fld788RRef],
	[_Fld789RRef],
	-- Разделитель записей в режиме разделения итогов
	[_Splitter]
HAVING COUNT(*) > 1

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

SELECT 
    COUNT(*) [RowCount],
	-- Список измерений, которые содержатся в основном кластером индексе
    'Список измерений. Можно посмотреть в основном кластерном индексе' AS [Измерения]
FROM [dbo].[_AccRgAT1819]
GROUP BY
	-- Список измерений, которые содержатся в основном кластером индексе
	'Список измерений. Можно посмотреть в основном кластерном индексе'
HAVING COUNT(*) > 1

После того как дубли записей будут найдены можно выполнить одно из следующих действий над ними:

  1. Удалить из базы, если они действительно не нужны. Стоит учесть, что нужно будет удалить не только из одной таблицы, но и из всех связанных таблиц регистра (таблиц итогов несколько, нужно это понимать).
  2. Исправить данные как нужно с учетом также нескольких таблиц итогов.
  3. "Схлопнуть" данные по измерениям (полям кластерного индекса), тем самым убрав дубли.

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

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

Вариант №3: Отключаем уникальность индекса

Это 100% рабочий вариант, но только в качестве временного решения. Просто берем о перестраиваем индекс с отключением уникальности.

Отключение уникальности индекса

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

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

Но как временное решение способ идеальный. Можно отключить уникальность, а потом с помощью способов 1 или 2 исправить итоги. Или поискать причину дублей, просто проанализировав записи в итогах.

Вариант №4: Ручная корректировка данных

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

Это крайний вариант, когда другие способы не помогают. На практике было только один раз, и то его пришлось использовать из-за очень большого объема данных.

Примеров к нему нет смысла давать. Кому нужно, тот сам поймет и выстрадает :).

А что все таки было

В нашем случае могли бы помочь 1, 2 и 4 способ, но что же все таки было? Почему создавались дубли записей? И почему дублей не было до попытки записать проблемный документ?

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

Счет Период Вид субконто Тип субконто Значение субконто Остаток Оборот Дт Оборот Кт Оборот 
<ссылка> 01.12.4014 0:00 NULL NULL NULL 0.00 1000 0.00 1000
<ссылка> 01.12.4014 0:00 NULL NULL NULL 0.00 -1000 0.00 -1000
<ссылка> 01.01.4015 0:00 NULL NULL NULL 1000 0.00 0.00 0.00
<ссылка> 01.01.4015 0:00 NULL NULL NULL -1000 0.00 0.00 0.00
<ссылка> 01.02.4015 0:00 NULL NULL NULL 1000 0.00 0.00 0.00
<ссылка> 01.02.4015 0:00 NULL NULL NULL -1000 0.00 0.00 0.00
<ссылка> 01.03.4015 0:00 NULL NULL NULL 1000 0.00 0.00 0.00
<ссылка> 01.03.4015 0:00 NULL NULL NULL -1000 0.00 0.00 0.00
<ссылка> 01.04.4015 0:00 NULL NULL NULL 1000 0.00 0.00 0.00
<ссылка> 01.04.4015 0:00 NULL NULL NULL -1000 0.00 0.00 0.00
<ссылка> 01.05.4015 0:00 NULL NULL NULL 1000 0.00 0.00 0.00
<ссылка> 01.05.4015 0:00 NULL NULL NULL -1000 0.00 0.00 0.00
<ссылка> 01.06.4015 0:00 NULL NULL NULL 1000 0.00 0.00 0.00
<ссылка> 01.06.4015 0:00 NULL NULL NULL -1000 0.00 0.00 0.00

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

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

Но почему в одних случаях  изменение данных прошлых периодов проходит без ошибки, а в других мы наступаем на грабли и разбиваем себе лицо? И тут тоже все просто! Виновата некорректная аналитика по субконто. У счета в проводке должна стоять аналитика по 1 субконто. В таблице выше заметно, что тип, вид и значение субконто - все NULL! При подготовке данных для записи в таблицы регистра, платформа выполняет различные запросы, в которых можно заметить такие соединения как:

-- Примеры соединения двух таблиц, где 
--  Т1 - временная таблица с подготовленными данными
--  Т2 - таблица итогов "_AccRgAT1819"
T1._Value1_TYPE = T2._Value1_TYPE AND T1._Value1_RTRef = T2._Value1_RTRef

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

 
 Проблемный запрос обновления итогов

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

 
 Запрос, который вызывает исключение при вставке записи

Но, поскольку запись итогов все же уже есть в таблице, то происходит ошибка "Cannot insert duplicate key".

 
 NULL не равно NULL

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

Не загружается DT'шник базы

Иногда подобная ошибка встречается при переводе базы из файлового варианта в клиент-серверный через загрузку-выгрузку DT-файла.

На практике относительно мало работал с файловыми базами, но решать проблему удавалось двумя способами:

  1. Удалением или редактированием битых записей перед выгрузкой в DT. Это можно сделать через режим 1С:Предприятие, если проблема в основных таблицах. Или можно воспользоваться утилитой Tool1CD.
  2. В момент загрузки DT на SQL Server сделать триггер при создании и отключить ему уникальность с помощью скрипта. Далее уже анализировать проблему.

Иногда может помочь штатное тестирование и исправление, но этот инструмент не является панацеей от всех болезней. А иногда он может и навредить, используйте с умом!

Способы не универсальные, нужно смотреть по ситуации.

Что имеем в итоге

Какой сделать вывод? Проблемы вставки не уникальной записи - это не баг СУБД! Основные причины таких ошибок:

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

К счастью, все подобные вопросы можно решить и в абсолютном большинстве случаев без жертв.

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

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

Другие ссылки

80

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Дата
18. YPermitin 5017 10.06.19 15:46 Сейчас в теме
(17) никого не хотел обидеть...

I am sorry!
17. nytlenc 10.06.19 12:39 Сейчас в теме
(16) Пусть останется как есть для истории. (шучу... кнопки спутал спросонья, прошу прощения) :)
16. YPermitin 5017 10.06.19 12:16 Сейчас в теме
15. nytlenc 10.06.19 08:48 Сейчас в теме
(14) )))))) Статья отличная бесспорно. Спасибо. И Вам хорошего дня.
14. YPermitin 5017 10.06.19 07:07 Сейчас в теме
(13) Пусть статья остаенется как есть для истории.

Ваш коммментарий больше похож на троллинг, поэтому просто рекомендую почитать другие подобные статьи.

Удачного вам дня и хорошего настроения! Держитесь там! :)
13. nytlenc 10.06.19 06:54 Сейчас в теме
(12) Юрий, ничего злонамеренного :) Просто. Знаете ли Вы, что это нарушение лицензии (скорее всего знаете) и думаю стоит об этом упомянуть в статье (хотя может и есть, каюсь мог проглядеть).
И второе конечно, что режет глаз, слово "Метаданного", к сожалению такого слова нет, Метаданные всегда пишутся и произносятся во множественном числе, даже если идет речь о какой-то одной сущности конфигурации. То есть правильно будет писать:

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


Ваша статья довольно обширная и интересная. Но когда встречаешь подобные моменты за которые "цепляется глаз", доверие к источнику слегка падает.
Спасибо :)

Или как вариант так :

Платформа 1С автоматически создает множество индексов в зависимости от типа метаданных объекта конфигурации. Подробнее об индексах можно прочитать на ИТС, там есть подробная информация.
12. YPermitin 5017 10.06.19 06:40 Сейчас в теме
(11) что Вы хотите всем этим сказать и какого ответа ожидаете? :)
11. nytlenc 10.06.19 05:06 Сейчас в теме
Платформа 1С автоматически создает множество индексов в зависимости от типа метаданного. Подробнее об индексах можно прочитать на ИТС, там есть подробная информация.


Метаданного???? о_О Вы серьёзно?
Кстати вы в курсе, что ваша статья - это прямое нарушение лицензионного соглашения 1С? (п. 64)
Прикрепленные файлы:
10. YPermitin 5017 26.02.19 15:05 Сейчас в теме
(9) главное следить, чтобы NULL не появлялось в аналитике проводок там, где не следует.

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

В примере платформа сторнирует записи из-за ошибки в запросе,т.к. не нашла уже существующую запись итогов. Сторно быть не должно.

По поводу старого периода - если есть записи итогов в следующих датах, то период прошлый.
9. acanta 67 26.02.19 14:22 Сейчас в теме
Документ из прошлого периода, 2014 года, поэтому при изменении платформа не удаляет записи из таблицы итого, а сторнирует их!

По какому принципу платформа отличает прошлый период от текущего?
Например при рассчитанных итогах на 2020 год закрывать периоды с перепроведением документов начиная с 2014 в бухгалтерии - записи будут сторнироваться или удаляться и пересоздаваться заново?
Исходя из этого, насколько часто имеет смысл пересчитывать итоги?
8. YPermitin 5017 25.02.19 15:25 Сейчас в теме
(7) действительно, фантастика.

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

Если сможете как-то на демоданных сделать, то цены этой базе не будет.
7. lunjio 62 25.02.19 14:17 Сейчас в теме
(6) Нет, понимаю пересоздание индексов через скульное обслуживание, либо да, через тестирование исправление, хотя там по-моему реорганизует, т.е фрагментирует а не создает ,верно ?
В общем ситуация следующая, удалил из таблицы все документы, с движениями и т.п, изредка возникает ошибка описанная вами, при попытке перенести в эту базу документ удаленный раннее, т.е индекс не удалился при удалении строки, из разряда фантастики конечно, но имело место.
6. YPermitin 5017 25.02.19 13:49 Сейчас в теме
(5) не исключаю, конечно, что это могло бы помочь, но как?

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

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

Может под перестроением понимается запуск утилиты тестировпния и исправления?
5. lunjio 62 25.02.19 13:20 Сейчас в теме
(3) Конечно )) К примеру свертываешь большую базу, удаление приходится делать напрямую, если индексы не пересоздать, ошибки при вставке, описанные вами.
4. YPermitin 5017 25.02.19 12:08 Сейчас в теме
3. YPermitin 5017 25.02.19 12:07 Сейчас в теме
(1) а можете привести конкретный кейс, когда пересоздание индекса помогло? На моей практике вообще никогда не давпло результат.
2. vano-ekt 526 25.02.19 11:55 Сейчас в теме
сегодня есть, что плюсануть на ИС)
kuzyara; YPermitin; +2 Ответить 1
1. lunjio 62 25.02.19 06:28 Сейчас в теме
Не мешало бы ещё вариант, пересоздание индексов добавить, все таки имеет место быть и такое.
Оставьте свое сообщение

См. также

Восстановление индексов СУБД 9

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Тестирование и исправление

Восстановление индексов СУБД на основе структуры хранения базы данных 1С.

09.10.2019    910    kadr    0       

Исправление ошибки при открытии внешнего отчета "Не удалось обновить вспомогательные данные расширений" 2

Статья Программист Стажер Нет файла v8 Россия Бесплатно (free) Тестирование и исправление

Способы исправления ошибки при открытии внешнего отчета "Не удалось обновить вспомогательные данные расширений. Обратитесь к администратору."

30.05.2019    1560    AlkB    4       

MS SQL Ошибка СУБД: Предоставленный поток статистики разрушен. Как решить проблему с разрушенной статистикой 17

Статья Системный администратор Нет файла v8 1cv8.cf Бесплатно (free) Тестирование и исправление

MS SQL Ошибка СУБД: Предоставленный поток статистики разрушен... Как решить проблему с разрушенной статистикой

16.04.2019    2387    ikorulev    1       

Ошибка "В процессе обновления информационной базы произошла критическая ошибка". Bash в помощь 12

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Администрирование данных 1С

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

05.02.2019    4091    YRN    3       

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

Статья Программист Нет файла v8 Россия Бесплатно (free) Тестирование и исправление

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

17.01.2019    16090    PoZiTiFFF    52       

Восстановление базы 1С, ошибка источника потока 89

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Тестирование и исправление

Очередной кирпичик в основу решения проблемы восстановления работоспособности базы после динамического обновления.

09.01.2019    10532    idle    23       

Авто-восстановление "битых ссылок" при обменах с несколькими базами данных в режиме управляемых форм 6

Статья Системный администратор Программист Нет файла v8 v8::УФ 1cv8.cf Россия Бесплатно (free) Тестирование и исправление

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

31.07.2018    3710    SvkMaster    5       

Как отвязать информационную базу от РИБа -1

Статья Системный администратор Нет файла v8 1cv8.cf Россия Windows Бесплатно (free) Распределенная БД (УРИБ, УРБД)

Краткая инструкция для новичков о том, как в 2 клика отвязать информационную базу от РИБа.

03.05.2018    9026    user861285    10       

Расширения конфигурации и РИБ, друзья или враги? Или как мы передаем расширения подчиненным РИБ узлам 43

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) Распределенная БД (УРИБ, УРБД)

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

24.11.2017    13905    markers    8       

1С: Сценарное тестирование 3.0. Запись и отладка интерактивного сценария 9

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Тестирование и исправление

Конфигурация «Сценарное тестирование 3.0» (далее СТ) позволяет записывать интерактивные действия пользователей и формировать на их основании сценарий тестирования, который в последующем можно использовать в тестах. Рассмотрим это на примере.

07.11.2017    11064    user759624    5       

Окно "Зарегистрировано 0 изменений из 1 на узле "Имя узла"" 13

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Тестирование и исправление

Почему может появляться окно предупреждения "Регистрация изменений" с текстом " Зарегистрировано 0 изменений из 1 на узле "Имя узла" "" ? Как исправить проблему?

02.08.2017    15401    StudentM    3       

Рекурсия тестирования баз 1С. Когда однократного тестирования базы недостаточно 4

Статья Системный администратор Программист Нет файла v8 1cv8.cf Россия Windows Бесплатно (free) Тестирование и исправление

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

22.06.2017    7599    iskan    7       

Отладка не работает, или отладка фоновых заданий 14

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Тестирование и исправление

На написание данной статьи вдохновила статья http://infostart.ru/public/633522/ Я разработчик старой формации, до сих пор обслуживаю клиентов на платформах 7.7, 8.1, 8.2, времени изучать все мануалы и отслеживать новые тенденции не хватает. Цель этой статьи помочь разработчикам, таким же людям, как и я. Если эта статья сэкономит, хотя бы, 1 человеко-час жизни, значит, написана не зря.

16.06.2017    16297    IvanovAV    22       

Когда перестает работать отладчик 105

Статья Системный администратор Программист Нет файла v8 Россия Windows Бесплатно (free) Тестирование и исправление

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

13.06.2017    21191    mickey.1cx    20       

Перенос данных из базы с поврежденными таблицами 15

Статья Системный администратор Программист Нет файла v8 БП2.0 Казахстан БУ УУ Бесплатно (free) Тестирование и исправление Обмен через XML Перенос данных из 1C8 в 1C8

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

06.06.2017    12254    ermek6    14       

Ошибка формата потока. Решение с описанием проблемы 103

Статья Системный администратор Нет файла v8 1cv8.cf Россия Бесплатно (free) Тестирование и исправление

Ошибка формата потока. Страшная, но симпатишная своей загадочностью. 1С ничего толком не объясняет и не подсказывает. Ниже решение, которое мне помогает решать данную проблему на 100%. Всё очень просто. Данная ошибка возникает (на моей практике) только у клиент серверного варианта. просто потому что с другим форматом не работаю. Рекомендация: Старайтесь избегать динамического обновления, особенно если у вас возможны кратковременные проблемы с 220 и LAN. Далее описание лечения:

25.04.2017    20612    juker    1       

Ошибка в 1С: Не удается вставить повторяющуюся строку ключа в объект 12

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Тестирование и исправление

В 1С может появиться ошибка такого рода: Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове метода контекста (ПрочитатьИзменения): Попытка вставки неуникального значения в уникальный индекс: Microsoft SQL Server Native Client 11.0: Не удается вставить повторяющуюся строку ключа в объект "dbo._AccRgAT118760" с уникальным индексом "_AccR118760_ByPeriod_TRRRRN". Повторяющееся значение ключа: (ноя 1 5999 12:00AM, 0xab52f3e52b35efa847b0cfef9c90ff9d, 0x95eb00112f2a1abf11dac09f12116a47, NULL, NULL, NULL, NULL, 0). HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=E, native=2601, line=1 Техническая информация: Ошибка при чтении изменений при обмене РИБ: {ОбщийМодуль.ПроцедурыОбменаДанными.Модуль(1559)}: Ошибка при вызове метода контекста (ПрочитатьИзменения): Попытка вставки неуникального значения в уникальный индекс: Для ее решения делаем следующее:

18.04.2017    16697    tonn12    11       

Восстановление обмена в РИБ. Запущенный случай 17

Статья Системный администратор Программист Нет файла v8 Россия Windows Бесплатно (free) Распределенная БД (УРИБ, УРБД)

Удачная попытка восстановить обмен в РИБ при большом количестве объектов обмена и ошибках при обмене.

03.04.2017    11573    peterxx    13       

Что делать, если параметр запуска /resetmasternode приводит к вылету с дампом 10

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Распределенная БД (УРИБ, УРБД)

Для тех, кто столкнулся с проблемой отключения узловой базы от главного узла через параметр запуска /ResetMasterNode.

01.04.2017    12541    therva    4       

Проблема с обновлением типовой конфигурации УТП 1.2 (Украина) в дочернем узле 2

Статья Системный администратор Нет файла v8 1cv8.cf Украина Бесплатно (free) Распределенная БД (УРИБ, УРБД)

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

15.02.2017    10312    bulpi    4       

Конфигурация узла распределенной ИБ не соответствует ожидаемой 11

Статья Системный администратор Нет файла v8 Россия Бесплатно (free) Распределенная БД (УРИБ, УРБД)

Есть куча материалов, где описано решение возникающей ошибки при обмене с РИБ, но ни одно не помогло. Пришлось включить мозг, и, о чудо, было найдено простое решение.

26.01.2017    17829    virtmon    29       

Автоматизированная проверка конфигураций… и пара слов о стандартах разработки 265

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Тестирование и исправление

Предлагаю познакомиться с инструментом "Автоматизированная проверка конфигураций" и получить практику его применения

18.01.2017    43250    3    Vladimir Litvinenko    19       

BDD 1С по душе 78

Статья Программист Нет файла v8 Россия Бесплатно (free) Тестирование и исправление

Размышляя над проблемой тестирования, а точнее над проблемой качества решений, умные и не очень люди, в основном ломают копья над следующим противоречием “надо тестировать, но надо разрабатывать, а не тестировать” (Алексей Лустин) www.silverbulleters.org

15.01.2017    20632    dima_tuzov    44       

Решение для серверной базы при возникновении ошибки "Нарушена целостность структуры конфигурации" 37

Статья Системный администратор Программист Нет файла v8 1cv8.cf Россия Windows Бесплатно (free) Тестирование и исправление

После динамического обновления перестал открываться конфигуратор. При попытке открытия возникала ошибка "Нарушена целостность структуры конфигурации", после чего предлагался перезапуск или завершение программы. Решено с использованием материалов из сети. Описание личного опыта решения проблемы для клиент-серверного варианта на базе MS SQL 2012 и 1С Предприятие 8.3 (8.3.8.1675) при наличии прав администратора на сервере и резервных копий конфигурации

17.12.2016    14773    Dot78    12       

Планы обмена. Управляемый режим блокировок 131

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Распределенная БД (УРИБ, УРБД)

Статья о том, как устроен объект конфигурации 1С:Предприятие 8 "План обмена", в том числе на уровне СУБД SQL Server. Анализируются особенности его использования при управляемом режиме блокировок.

28.11.2016    34782    zhichkin    16       

Файловая база зависает при реструктуризации таблиц. 8.3 12

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Тестирование и исправление

Файловая база УНФ 1.6, платформа 8.3.7.1790. База перестала проходить Тестирование и исправление (ТиИ), при реструктуризации зависала на таблице Присоединенные файлы, при этом можно было закрыть окно ТиИ по кнопке Закрыть и закрыть потом конфигуратор, но база оставалась в монопольном режиме, помогало только принудительное удаление файла блокировок.

18.11.2016    11885    de0nis    2       

Highload обмен данными: постановка задачи 3

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Производительность и оптимизация (HighLoad) Распределенная БД (УРИБ, УРБД)

Цели статьи: определить, что такое "highload обмен", описать типовой сценарий обмена, сформулировать основные требования к обменам такого типа и предложить методику оценки производительности (пропускной способности).

04.11.2016    11915    zhichkin    3       

РИБ 200 узлов. Середина пути 116

Статья Системный администратор Программист Нет файла v8 Розница Россия Бесплатно (free) Распределенная БД (УРИБ, УРБД)

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

25.10.2016    34060    comol    215       

Результаты обновления и дополнительная обработка данных 20

Статья Системный администратор Программист Нет файла v8 ERP2 Windows Бесплатно (free) Тестирование и исправление

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

1 стартмани

26.04.2016    22685    dsitiy    10       

Восстановление SQL базы данных после неудачного обновления 32

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Тестирование и исправление

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

26.03.2016    14255    BlaSo    11       

В процессе обновления информационной базы произошла критическая ошибка по причине: Ошибка SDBL: Тип поля Code несовместим с типом литерала STRING 17

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Тестирование и исправление

В этой статье описан способ решения ошибки "В процессе обновления информационной базы произошла критическая ошибка по причине: Ошибка SDBL: Тип поля Code несовместим с типом литерала STRING". Сразу оговорюсь, что описанный метод больше похож на "танцы с бубнами", но, возможно, кому-нибудь сможет помочь или пригодится что-то из того, что я перепробовал. По крайней мере, поможет натолкнуть на правильную мысль, а также будут подняты другие проблемы, интересные к обсуждению.

16.03.2016    21933    Anesk    23       

Корректное отключение от главного узла РИБ и создание самостоятельной БД. Быстрое создание/восстановление узла РИБ без выгрузки начального образа для конфигураций на основе БСП 52

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Распределенная БД (УРИБ, УРБД)

В публикации описан один из способов создания тестовой БД для разработки с актуальными данными, быстрого восстановления работоспособности РИБ при "падении" одного из узлов, или "быстрого" создания/восстановления узла РИБ без выгрузки начального образа для конфигураций на основе БСП.

16.02.2016    85433    asg.aleks    12       

Автоматическое обновление конфигурации в узлах РИБ 22

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Распределенная БД (УРИБ, УРБД)

Вариант автоматического обновления конфигурации (без участия пользователей) периферийной базы РИБ. Очень простой способ без необходимости внесения кода в конфигурацию 1С. В дополнение к публикации http://infostart.ru/public/143517/. Спасибо автору, навел на эту идею!

22.01.2016    20932    Kitri    4       

Ошибка sdbl - Ожидается выражение (pos = 324) 14

Статья Системный администратор Программист Нет файла v8 БП2.0 Узбекистан Windows Бесплатно (free) Тестирование и исправление

В интернете нашли несколько вариантов исправления этой ошибки. Попробовали практически все. Некоторые оказались безуспешными. В итоге нашли самый простой способ решения этого вопроса.

06.01.2016    21516    Evgeniy.Pecheykin    15       

Отладка конвертации данных 2.1 в конфигурациях, построенных на БСП 2.1 (БП 3.0, УТ 11 etc.) 49

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Распределенная БД (УРИБ, УРБД) Обмен через XML БСП (Библиотека стандартных подсистем)

Отладка процесса выгрузки/загрузки данных при проведении синхронизации в новых конфигурациях 1С может вызвать (у меня вызвала) некоторые затруднения. О них и пойдёт речь.

29.10.2015    31545    NittenRenegade    16       

Один из способов спасти базу после вируса-шифратора 21

Статья Системный администратор Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Тестирование и исправление

К неудаче, на сервер пробралась программа шифратор, которая, как известно, все файлы зашифровала, добавив к наименованию в моем случае 1Cv8.1CD.id-{MVWMFZIOCVZRDVZDEIAESWASEIMESTYCDIMQ-07.10.2015 3@59@345085745}-email-vernutfiles@gmail.com-ver-4.0.0.0.cbf. У других id и почта могут быть другими, но суть в том, что расширение у фалов становится .cbf.

08.10.2015    29768    apostal86    62       

Как я восстанавливал разрушенную базу. АКТ 2 39

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Тестирование и исправление

Приёмы, которые помогут тебе устранить рассинхронизацию данных и метаданнах (на уровне SQL)

31.08.2015    19417    METAL    15       

Как я восстанавливал разрушенную базу 45

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Архивирование (backup) Распределенная БД (УРИБ, УРБД) Тестирование и исправление

УТ10.3 на Платформе 8.2 на базе MSSQL была разрушена после попытки её восстановить после неудачного динамического обновления. Таблица Config целевой базы была заменена на содержимое таблицы Config от другой рабочей базы. Но на самом деле конфигурации у них существенно отличались, поэтому после таких действий целевая база рухнула окончательно. Что же делать?

21.08.2015    23835    METAL    25       

"Распил" базы "БП 3.0 ПРОФ" с дальнейшим переносом в "БП 3.0 Базовая" ОДНОЙ организации 8

Статья Системный администратор Программист Нет файла v8 Россия Windows Бесплатно (free) Распределенная БД (УРИБ, УРБД)

Условия: Есть "БП 3.0 ПРОФ", в которой ведется учет по трем (неважно, скольким) Организациям. Необходимо оставить учет только по одной (к примеру) организации, и при этом перенести все данные по ней в "БП 3.0. Базовая"

14.08.2015    14110    Viktor_Ermakov    10       

Устранение ошибки "Объект не найден в Справочнике "ИдентификаторыОбъектовМетаданных" 14

Статья Системный администратор Программист Нет файла v8 1cv8.cf Бесплатно (free) Тестирование и исправление

При добавлении новых объектов в типовые конфигурации возможна ошибка при обращении к этому объекту в режиме 1C:Предприятие: "Объект не найден в Справочнике "ИдентификаторыОбъектовМетаданных". В данной статье описываются способы устранения этой ошибки.

25.06.2015    31811    ni_cola    15       

Автоматическое обновление конфигурации периферийного узла РИБ при обмене 31

Статья Системный администратор Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Распределенная БД (УРИБ, УРБД)

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

24.03.2015    25281    kondrat1C    20       

Выделение одной организации из Бухгалтерии редакция 3 через РИБ 21

Статья Системный администратор Нет файла v8 БП2.0 Россия Windows Бесплатно (free) Распределенная БД (УРИБ, УРБД)

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

16.02.2015    12200    shevelyov    4       

Ошибка SQL: Запись значения NULL в поле, не допускающее NULL 12

Статья Системный администратор Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Тестирование и исправление

При запуске тестировани и исправления появляется сообщение: В процессе обновления информационной базы произошла критическая ошибка по причине: Ошибка СУБД: Ошибка SQL: Запись значения NULL в поле, не допускающее NULL '_FLD891RREF' по причине: Ошибка SQL: Запись значения NULL в поле, не допускающее NULL '_FLD891RREF'

14.11.2014    24445    ptkrzy    10