1С:Повторяющиеся ключи (duplicate key) и потерянные проводки

Повторяющиеся ключи (duplicate key) и потерянные проводки Сначала определения. Повторяющиеся ключи это значения из набора столбцов некоторой таблицы, которые встречаются в данной таблице более одного раза. Потерянные проводки это строки таблицы _1SENTRY или _1SOPER. Вы спросите – «Почему данные термины используются в заголовке темы вместе?». Потому, что часто (хотя и не всегда) потерянные проводки проявляются как строки с повторяющимися ключами.

Сначала определения.

Повторяющиеся ключи это значения из набора столбцов некоторой таблицы, которые встречаются в данной таблице более одного раза.

Потерянные проводки это строки таблицы _1SENTRY или _1SOPER.

Вы спросите – «Почему данные термины используются в заголовке темы вместе?». Потому, что часто (хотя и не всегда) потерянные проводки проявляются как строки с повторяющимися ключами.

В одной из моих статьей я уже писал как бороться с повторяющимися ключами. Теперь же рассмотрим ситуации, при которых возникают сообщения об ошибках в результате появления повторяющихся ключей. А таковых бывает несколько. Набираем в известном всем Books Online (BOL) сочетание «duplicate key», сортируем по колонке «Местонахождение» и перемещаемся на строки с разделом «Troubleshooting». Получаем:

Native error Код ошибки SQL Severity Уровень «серьезности» ошибки Текст ошибки
1505 14 CREATE UNIQUE INDEX terminated because a duplicate key was found for index ID %d. Most significant primary key is '%S_KEY'.
Невозможно создать уникальный индекс так как в талибце найдены повторяющиеся ключи
1508 14 CREATE INDEX terminated because a duplicate row was found. Primary key is '%S_KEY'.
Невозможно создать кластерный индекс так как в таблице найдены повторяющиеся ключи
2601 14 Cannot insert duplicate key row in object '%.*ls' with unique index '%.*ls'.
Невозможно вставить строки (обновить строки) в таблице, так как для нее создан уникальный индекс и строка с таким ключом уже есть в таблице

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

В том же BOL в качестве способа нахождения повторяющихся ключей указан такой оператор:

Select field,…, fieldN form table group by field,…, fieldN,

здесь field,…, fieldN – набор полей таблицы, по которому создан индекс, уникальный которого нарушается. Это конечно неудобно, так как приходится пролистывать весь запрос для нахождения повторяющихся ключей. Удобнее будет использовать следующий запрос:

select field,…, fieldN, "Count"=count(*) from Table Group by field,…, fieldN having count(*)>1

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

Теперь вернемся к потерянным проводкам. Часто такие сообщения появляются для таблиц _1SENTRY и _1SOPER. Поэтому метод описанные выше также подходит для исправления данных в таблице проводок и операций. Однако кроме этого существуют специфичные для 1С методы борьбы с потерянными проводками:

  • Поставить признак для документа, создающего бухгалтерские проводки, «Всегда создавать операцию». Данный способ лучше всего применять для конфигураций, которые еще не «в бою», то есть только на этапе создания. При разработке конфигурации для SQL платформы всегда ставьте признак «Всегда» ;) для уменьшения вероятности возникновения потерянных проводок.
  • Отмена проведения + проведение документа (ов). Обычно не помогает документам, у которых не стоит признак создавать операцию всегда. И именно при проведении документа возникает данная ошибка.
  • Выгрузка – загрузка данных. Очень действенный метод, но очень долгий.
  • Тестирование + исправление конфигурации. Иногда помогает.

Что рекомендую. Сначала пробуйте отменить проведение документа и провести его заново. Иногда бывает трудно определить у какого документа потерялись проводки. В этом случае данная операция может занять столько же (если не больше) времени сколько загрузка и выгрузка. Если не поможет – тестирование + исправление конфигурации. Если не поможет – почистить проводки с помощью метода борьбы с повторяющимися ключами, провести документ(ы). Крайняя мера – загрузка – выгрузка. Изменение признака операции на «создавать всегда» приведет к пересчету бухгалтерских итогов, поэтому данная операция сравнима по времени с выгрузкой – загрузкой и тестированием с пересчетом итогов. Данную операцию я не применял, но думаю, что ее можно использовть вместо тестирования – исправления конфигурации. В любом случае если вы исправили положение, то для всех бухгалтерских документов лучше поставить признак создавать операцию всегда.

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

-- есть проводки по непроведенным документам
-- такое безобразие нужно "покоцать"
delete from _1sentry (nolock)
where docid in (select iddoc from _1sjourn (nolock)
where closed=0)


-- есть проводки, но нет соответствующих документов
-- такое безобразие нужно "покоцать"
delete from _1sentry (nolock)
where docid not in (select iddoc from _1sjourn (nolock))


-- есть проводки, но нет соответствующих операций
-- такое безобразие нужно "покоцать"
delete from _1sentry (nolock)
where docid not in (select docid from _1soper (nolock))


-- есть операции, но нет соответствующих документов
-- такое безобразие нужно "покоцать"
delete from _1soper (nolock)
where docid not in (select iddoc from _1sjourn (nolock))


-- проверка правильности заполнения DATE_TIME_DOCID в _1sentry
-- вместо проверки - замена на правильный DATE_TIME_DOCID
update _1sentry set DATE_TIME_DOCID=_1sjourn.DATE_TIME_idDOC
from _1sjourn (nolock)
--select _1sentry.DATE_TIME_DOCID,_1sjourn.DATE_TIME_idDOC
from _1sentry (nolock), _1sjourn (nolock)
where _1sentry.DOCID=_1sjourn.idDOC and
      _1sentry.DATE_TIME_DOCID<>_1sjourn.DATE_TIME_idDOC


-- здесь можно сделать установку поля APPCODE, которое содержит
-- флаги, к какой компоненте принадлежит документ (см. статью на
-- hare.ru в разделе Коллективный разум про структуру базы)
-- поле устанавливается для определенного вида документа IDDOCDEF
-- то есть известно какой документ, по какой компоненте делает
-- движения
-- проверка правильности заполнения APPCODE в _1Sjourn
--Update _1Sjourn set appcode=appcode+32
--where appcode<32 and IDDOCDEF<>1356 and
--      iddoc in (select docid from _1sentry (nolock))
-- 32 – заменить на нужный APPCODE
-- 1356 –заменить на нужный IDDOCDEF


-- проверка базы - можно раскомментировать
--dbcc checkdb
-- переиндексация базы данных - можно раскомментировать
--exec _1sp_dbreindex

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

Вот и все. Пишите мне, если у вас есть свои методы борьбы с описанными ситуациями – пополним наш арсенал вашим оружием!

Удачной борьбы с потерянными проводками и повторяющимся ключам – глюками 1С!

Шемякин Павел
1csql@udmnet.ru
http://1csql.virtualave.net/1csql/

Начать дискуссию

Проблема навигации на «Клерке». 20 лет мы искали решение и вот

Теперь навигационное меню можно свернуть и оно запомнит свое состояние.

Проблема навигации на «Клерке». 20 лет мы искали решение и вот

Курсы повышения
квалификации

20
Официальное удостоверение с занесением в госреестр Рособрнадзора

Сравнение сервисов для подачи отчетности. Обзор для бухгалтера

Статья представляет сравнительный обзор трех сервисов для подачи отчетности: 1С-Отчетность, СБИС и Контур Экстерн. Описаны их ключевые функции и ценовые предложения.

Правильно подобрали переводчиков и локализовали сайт: как за 2 месяца мы помогли торговой компании открыть филиалы в ОАЭ, Турции и Казахстане

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

Правильно подобрали переводчиков и локализовали сайт: как за 2 месяца мы помогли торговой компании открыть филиалы в ОАЭ, Турции и Казахстане
Лучшие спикеры, новый каждый день

Грядет очередной эксперимент по маркировке

C 1 сентября 2024 по 31 августа 2025 года Минпромторг планирует проведение эксперимента по маркировке отдельных видов смазочных материалов и специальных автомобильных жидкостей.

К 2036 году у 99% населения России будет интернет

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

Зачем обращаются в Росреестр чаще всего: официальные данные

Росреестр отчитался, с какими вопросами чаще всего обращались заявители в 2023 году.

Опытом делятся эксперты-практики, без воды
Ведение бизнеса

Выручка малых технологических компаний должны вырасти в 7 раз

Для достижения национальной цели «Технологическое лидерство» президент поставил целевой показатель по росту выручки малых технологических компаний (МТК).

Названы приоритетные направления для развития новых технологий

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

Все что вам нужно знать о штрафах за работу с самозанятыми. Реальный опыт юриста

Разберу на примере реальных  судебных дел, как предприниматели «попадают» на штрафы за работу с самозанятыми и теряют миллионы. Отвечу на 3 самых популярных вопроса и развею мифы.

1
Проверки ФАС

6 основных инструментов ФАС по борьбе с недобросовестной конкуренцией

Антимонопольная служба подвела итоги работы по противодействию недобросовестной конкуренции за 2023 год.

Бесплатно с Увольнение

Увольнение с отработкой: что такое, как правильно оформить, образец заявления

Увольнение с отработкой — это не нормативное, а обиходное выражение. Корректнее говорить об увольнении по собственному желанию или расторжении трудового договора по инициативе работника. Но важнее не термины, а правильное оформление.

Иллюстрация: Вера Ревина/Клерк.ру
Обзоры новостей

⚡️ Итоги дня: Microsoft создала нейросеть для спецслужб, Ozon сгенерирует фото одежды на моделях, а в Москве продают мангал за 350 тысяч

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

Миникурсы, текстовые и видеоинструкции для бухгалтеров
Маркетплейсы

На Wildberries появился раздел с белорусскими товарами

Маркетплейс выделил целый раздел для сертифицированных белорусских товаров. Сейчас для заказа доступно 2,7 тысяч позиций.

Общество

Болгария не выдает россиянам шенгенские визы

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

HR

У «Клерка» новый телеграм-канал для HR-специалистов. О карьере без купюр

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

У «Клерка» новый телеграм-канал для HR-специалистов. О карьере без купюр
Налог на прибыль

Шохин: повышение налога на прибыль должно затронуть не всю прибыль

Александр Шохин назвал дифференциацию по налогу на прибыль организаций справедливой и важной для развития страны.

Стало известно, кого будут активно переводить на российское ПО

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

Страховые взносы

Единственных учредителей ООО не будут освобождать от взносов на ОПС

В Минфин поступило предложение освободить от страховых взносов на ОПС директоров-единственных учредителей микробизнеса, которые к тому же – пенсионеры. Но Минфин ответил отказом.

Что такое оборачиваемость активов и как ее рассчитать бухгалтеру

Чтобы бизнесу понимать, какую выручку приносит 1 рубль, вложенный в активы компании, нужно рассчитать коэффициент оборачиваемости активов.

Интересные материалы

Налоговики требуют переделать декларации по УСН: доходы должны расти. 📉 «Ночной бухгалтер» № 1679

Если в декларации по УСН строка 113 меньше, чем 112, у налоговиков – разрыв шаблонов. Кредиты будут давать с разрешения родственников. Зарплата будет выше, жилплощадь – больше. И другие новости дня.

Иллюстрация: Вера Ревина/Клерк.ру