При выполнении стандартного обновления конфигурации «1С:Бухгалтерия предприятия 3.0» пользователи иногда сталкиваются с критической ошибкой: система сообщает о наличии дублей в плане счетов, в таких случаях полезно проверять любые конфигурации на наличие ошибок. Ситуация осложняется тем, что в Конфигураторе всё выглядит корректно, а стандартные инструменты, такие как Тестирование и исправление (ТиИ) или поиск и замена дублей, не приносят результата. В этой статье мы детально разберем причины возникновения этой проблемы и пошагово рассмотрим методы ее решения.
Прежде всего, проанализируем, почему платформа может выдавать сообщение «обнаружено дублирование ключевых полей Ссылка». Если в режиме Конфигуратора дублей нет, а в режиме Предприятия они видны только в определенных списках, проблема может крыться не в физическом наличии двух одинаковых счетов, а в механизме отображения данных или в нарушении логических связей. Рассмотрим основные причины:
ВидыСубконто, из-за чего при левом соединении в запросе одна ссылка на счет превращается в две строки.Рассмотрим конкретный пример запроса, который часто используется в типовых конфигурациях для вывода плана счетов. Разберем ситуацию, когда разработчик добавляет соединение с таблицей Константы. Если в этой таблице по какой-то причине (технический сбой) оказалось более одной записи, происходит «размножение» строк плана счетов.
Проанализируем пример кода запроса, который может вызывать дублирование:
ВЫБРАТЬ
Хозрасчетный.Ссылка КАК Ссылка,
Хозрасчетный.Код КАК Код,
Хозрасчетный.Наименование,
ВЫБОР
КОГДА Хозрасчетный.Вид = ЗНАЧЕНИЕ(ВидСчета.Активный) ТОГДА "А"
ИНАЧЕ ВЫБОР
КОГДА Хозрасчетный.Вид = ЗНАЧЕНИЕ(ВидСчета.Пассивный) ТОГДА "П"
ИНАЧЕ "АП"
КОНЕЦ
КОНЕЦ КАК Вид,
Субконто1.Субконто КАК Субконто1,
Хозрасчетный.Порядок
ИЗ
Константы КАК Константы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный КАК Хозрасчетный
ЛЕВОЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ
ХозрасчетныйВидыСубконто.ВидСубконто.Наименование КАК Субконто,
ХозрасчетныйВидыСубконто.Ссылка КАК Ссылка
ИЗ
ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
ГДЕ
ХозрасчетныйВидыСубконто.НомерСтроки = 1
) КАК Субконто1
ПО Хозрасчетный.Ссылка = Субконто1.Ссылка
В данном примере ВНУТРЕННЕЕ СОЕДИНЕНИЕ с таблицей Константы без условия связи является потенциальной угрозой. Если в таблице констант в СУБД физически присутствует более одной строки, каждая запись из таблицы Хозрасчетный будет продублирована столько раз, сколько строк в константах. Для исправления ситуации необходимо убедиться, что таблица констант содержит только одну запись, или переписать запрос, исключив это соединение.
Выясним причину, связанную с предопределенными данными. В современных версиях 1С:Предприятия связь между объектом конфигурации и объектом базы данных осуществляется по внутреннему имени. При обновлении «1С:Бухгалтерии» могут добавляться новые предопределенные счета. Если в базе уже существует счет с таким же кодом, созданный вручную, механизм обновления может дать сбой.
Для решения этой проблемы выполним следующие действия:
Важно: обычный поиск и удаление дублей не всегда видит такие элементы, так как они помечены системой как «Предопределенные», и их удаление заблокировано на уровне платформы. В таком случае в Конфигураторе на время процедуры можно разрешить редактирование предопределенных данных, но делать это нужно крайне осторожно.
Проанализируем ситуацию, когда дублирование возникает из-за некорректных данных в табличных частях. План счетов Хозрасчетный имеет подчиненную таблицу ВидыСубконто. Если из-за программного сбоя для одного счета в этой таблице записаны две строки с одинаковым НомерСтроки (например, две записи с номером 1), любой запрос с левым соединением по этому номеру строки выдаст дубль.
Чтобы проверить эту теорию, выполним простой запрос в консоли запросов:
ВЫБРАТЬ
ВидыСубконто.Ссылка,
ВидыСубконто.НомерСтроки,
КОЛИЧЕСТВО(ВидыСубконто.НомерСтроки) КАК КолВо
ИЗ
ПланСчетов.Хозрасчетный.ВидыСубконто КАК ВидыСубконто
СГРУППИРОВАТЬ ПО
ВидыСубконто.Ссылка,
ВидыСубконто.НомерСтроки
ИМЕЮЩИЕ
КОЛИЧЕСТВО(ВидыСубконто.НомерСтроки) > 1
Если запрос вернул данные, значит, мы нашли физическую причину дублирования строк. Исправить это можно программным удалением лишних записей из табличной части счета через объектную модель 1С.
Если все вышеперечисленные методы не помогли, а Тестирование и исправление не находит ошибок, вероятно, проблема кроется в кэшированных данных сервера 1С или в повреждении индексов таблиц на уровне СУБД. Выясним, как правильно произвести глубокую очистку.
Пошаговый алгоритм действий для серверной базы:
C:\Program Files\1cv8\srvinfo\reg_1541\...).snacc. Именно в ней хранятся скомпилированные описания метаданных, которые могут вызывать конфликты при обновлении плана счетов.DBCC DBREINDEX или аналоги).Мы рассмотрели сложную техническую проблему дублирования счетов в «1С:Бухгалтерия 3.0». Подведем итоги: чаще всего проблема вызвана либо некорректным кодом в динамическом списке (взаимодействие с константами), либо конфликтом предопределенных данных при обновлении.
Для предотвращения подобных ситуаций в будущем рекомендуем перед каждым обновлением выполнять не только создание резервной копии, но и проверку конфигурации на наличие пользовательских счетов, коды которых могут совпасть с планируемыми изменениями в типовом плане счетов. Использование консоли запросов является самым надежным способом диагностики подобных ошибок на ранних стадиях.