Контроль уникальности 1с отключить

Обновлено: 08.07.2024

Типичные вопросы при работе с предопределенными данными

При работе с предопределенными данными могут встречаться следующие ошибки:

  • Попытка обратиться к предопределенному элементу приводит к ошибке "Предопределенный элемент отсутствует в данных". Возможные причины появления такой ошибки:
    • Это периферийный узел и предопределенные данные из центрального узла еще не загружены.
    • Область информационной базы инициализирована, когда обновление предопределенных данных отключено на уровне информационной базы или на уровне проблемного объекта метаданных.
    • Предопределенные данные удалены.
    • У предопределенных данных очистили значение реквизита "ИмяПредопределенныхДанных".
    • Предопределенные элементы созданы в режиме "ОбменДанными.Загрузка = Истина". Например, при обмене данными в РИБ.

    Анализ причин ошибок при работе с предопределенными данными и способы их устранения.

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

    Отсутствие предопределенных элементов в данных

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

    • Данные:
      • Изменение предопределенных данных,
      • Удаление предопределенных данных,
      • Установка инициализации предопределенных данных,
      • Обновление предопределенных данных,
      • Установка обновления предопределенных данных.

      По событиям в списке можно понять, почему предопределенный элемент не обнаружен.
      Если в журнале имеется события " Данные. Изменение предопределенных данных ", у которых новое имя предопределенных данных – пустая строка. Это значит, что пользователь или код на встроенном языке очистил имя предопределенных данных, сделав элемент не предопределенным. Для восстановления элемента достаточно вернуть свойству ИмяПредопределенныхДанных старое значение. Желательно доработать конфигурацию таким образом, чтобы не допустить повторение такой ситуации: изменить права, модифицировать код на встроенном языке.
      Если в конфигурации есть событие " Данные. Удаление предопределенных данных ", то это означает, что предопределенные данные удалены пользователем или из встроенного языка. Для исправления необходимо создать недостающий предопределенный элемент. Изменить конфигурацию таким образом, чтобы не допускать удаления используемых предопределенных данных.
      Если в журнале имеется событие " Данные. Установка инициализации предопределенных данных ", в которых установлен признак инициализации предопределенных данных, то это означает, что из встроенного языка был установлен признак инициализации предопределенных данных, а предопределенные элементы не созданы (все или частично). Для исправления необходимо модифицировать конфигурацию, чтобы создавались все предопределенные данные, либо не было обращений к отсутствующим данным.
      Если в журнале имеется событие " ИнформационнаяБаза. Обновление предопределенных данных ", в котором есть комментарий "Обновление предопределенных данных отключено". Это означает, что в базе данных на уровне ИБ, узла или объекта метаданных отключено автоматическое обновление предопределенных данных. В таком случае платформа не выполняет реструктуризацию предопределенных данных. Для выяснения источника проблемы необходимо:

      Дублирование предопределенных данных.

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

      Рекомендации по работе с предопределенными данными

      Если вы не планируете самостоятельно управлять предопределенными данными и ожидаете, что они всегда есть в базе данных, то вам следует:

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

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

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

      Разместил: E_Migachev  Версии: |  Дата: 25.12.2009   Прочитано: 12714

      Распечатать

      Похожие FAQ

      1C медленно работает по сети с базой на SQL Server  20
      Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П Альтернативный перенос остатков между 7.7 и 8.1 (обработкой с ИТС ЗагрузкаДанныхИзТаблДокум)  2
      Нашел альтернативный, практически моментальный способ переноса остатков между семерой и восьмерой (так и между восмерками). Не требуется никаких дополнительных усилий, программирования, писания обработок и т.д. и т.п. На ИТС есть обработка под наз В этом периоде очередность проведения не контролировалась  1
      Контролировать или нет выбирается в: Сервис - Настройка программы - Контроль проведения Если галка не стоит, то Установить - ОК Если галка уже стоит, то ее Снять - ОК, зайти снова и Установить - ОК Взаимодействие с Контрольно-Кассовыми Машинами (ККМ)  1
      Имеется ли возможность взаимодействия конфигурации Управление торговлей с контрольно-кассовыми машинами (ККМ)? Данная возможность реализована в конфигурации в трех вариантах: ККМ в режиме фискального регистратора, ККМ в режиме Offline, ККМ в Выгрузка в PDF из 1С (Средствами OpenOffice)  0
      Возникла задача отправлять счета почтой. PDFcreator не подошел поскольку не удалось вместить счет на одну страницу по ширине. Решил попробовать OpenOffice. Как сохранять в PDF нашел быстро, а вот как уместить счет на одну страницу вширь искал долго. Посмотреть все результаты поиска похожих

      Варианты решения:

      1. В SQL Server managment studio физически уничтожаем сбойный индекс (в моем случае это был индекс по таблице итогов регистра бухгалтерии). В 1С распроводим сбойные документы. В режиме тестирования и исправления ставим галки реиндексация таблиц + пересчет итогов. 1С воссоздает индекс уже без ошибки. Проводим ранее сбоившие документы.

      2. 1) С помощью Management Studio 2005 сгенерировала create-скрипт на создание индекса, который глючил, и сохранила в файлик.
      2) Вручную убила косячный индекс из таблицы _AccumRgTn19455
      3) Запустила запрос вида
      Код SQL
      После того, как индекс был убит, у меня отобразилось 15 дублирующихся записей, хотя до выполнения п.2 запрос ничего не возвращал.
      4) Просмотрела все записи и вручную почистила дубликаты. На самом деле, я ещё пользовалась обработкой "Структура отчёта", чтобы понять, с чем вообще имею дело. Оказалось, что в таблице _AccumRgTn19455 хранится регистр накопления "Выпуск продукции (налоговый учёт)". Я ещё поковырялась sql-запросами, выявила 15 неуникальных документов и после окончания всех действ проверила в 1С, что эти документы проводятся нормально, без ошибок. Просто так чистить таблицы наобум, конечно, не стоит: важно понимать, что чистится и чем это может обернуться.
      5) Запустила запрос на создание индекса, который был сохранён в файле.
      6) Перевела базу в однопользовательский режим и запустила dbcc checkdb - на этот раз ни одной ошибки не выдалось.
      7) Перевела базу обратно в однопользовательский режим.
      Всё. проблема побеждена. Ну ещё в 1С запустила "Тестирование и исправление", там тоже всё прошло нормально, перестало ругаться на неуникальный индекс.

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

      1. Если проблема загрузкой базы данных, то:
      1.1. Если Вы делаете загрузку (используйете dt-файл) в базу MS SQL Server, то при создании базы перед загрузкой укажите смещение дат - 2000.
      Если уже база создана со смещением 0, то создайте новую с 2000.

      1.2. Если есть возможность в файловом варианте работать с базой, то выполните Тестирование и Исправление, а также Конфигурация - Проверка конфигурации - Проверка логической целостности конфигурации + Поиск некорректных ссылок.

      1.3. Если нет файлового варианта, попробуйте загрузить из DT в клиент-серверный вариант с DB2 (который менее требователен к уникальности), и затем выполнить Тестирование и Исправление, а также Конфигурация - Проверка конфигурации - Проверка логической целостности конфигурации + Поиск некорректных ссылок.

      1.4. Для локализации проблемы можно определить данные объекта, загрузка которого не удалась. Для этого надо включить во время загрузки трассировку в утилите Profiler или включите запись в технологический журнал событий DBMSSQL и EXCP.

      2. Если проблема неуникальности проявляется во время работы пользователей:

      2.1. Найти с помощью метода пункта 1.4 проблемный запрос.

      2.1.2. Иногда ошибка возникает во время исполнения запросов, например:

      Данная ошибка возникает из-за того что в модуле регистра накопления "Рабочее время работников организаций" в процедуре "ЗарегистрироватьПерерасчеты" в запросе не стоит служебное слово "РАЗЛИЧНЫЕ".
      Код 1C v 8.х
      В последних выпущенных релизах ЗУП и УПП ошибка не возникает, т.к. там стоит "РАЗЛИЧНЫЕ".

      2.2. После нахождения проблемного индекса из предыдущего пункта, необходимо найти неуникальную запись.
      2.2.1. «Рыба» скрипта для определения неуникальных записей с помощью SQL:
      Код SQL

      2.2.2 Пример. Индекс в ошибке называется "_Document140_VT1385_IntKeyIndNG".
      Перечень полей таблицы:
      _Document140_IDRRef, _KeyField, _LineNo1386, _Fld1387, _Fld1388, _Fld1389, _Fld1390, _Fld1391RRef, _Fld1392RRef, _Fld1393_TYPE, _Fld1393_RTRef, _Fld1393_RRRef, _Fld1394,_Fld1395, _Fld1396RRef, _Fld1397, _Fld1398, _Fld1399RRef, _Fld22260_TYPE, _Fld22260_RTRef, _Fld22260_RRRef, _Fld22261_TYPE, _Fld22261_RTRef, _Fld22261_RRRef
      Перед выполнением приведенной ниже процедуры сделайте резервную копию базы данных.
      Выполните в MS SQL Server Query Analizer:
      Код SQL
      С его помощью узнайте значения колонок _Document140_IDRRef, _KeyField, дублирующихся записей (id, key).

      При помощи запроса:
      Код SQL
      посмотрите на значения других колонок дублирующихся записей.
      Если обе записи имеют осмысленные значения и эти значения разные, то исправьте значение _KeyField на уникальное. Для этого определите максимальное занятое значение _KeyField (keymax):
      Код SQL
      Замените значение _KeyField в одной из повторяющихся записей на правильное:
      Код SQL
      Здесь _LineNo1386 = - дополнительное условие, которое позволяет выбрать одну из двух повторяющихся записей.

      Если одна (или обе) из повторяющихся записей имеет очевидно неправильное значение, то ее нужно удалить:
      Код SQL
      Если повторяющиеся записи имеют одинаковые значения во всех колонках, то из них нужно оставить одну:
      Код SQL

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

      2.2.3. Второй пример:
      Код SQL

      2.3.4 Пример определения неуникальных записей с помощью запроса 1С:Предприятие:
      Код 1C v 8.х

      Читайте также: