Ошибки в 1С, связанные с контекстным методом

Содержание

Типичные ошибки пользователей 1С Бухгалтерия 8. Курсы 1С Бухгалтерия

Ошибки в 1С, связанные с контекстным методом

12 декабря 2016 года

В этой небольшой статье я попытаюсь собрать воедино типичные ошибки, которые совершают начинающие пользователи 1С Бухгалтерии 8.

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

Ниже приводится список наиболее распространённых «граблей», на которые не устают наступать пользователи на моих курсах по 1С Бухгалтерии, несмотря на многократные повторения.

«Кривая» дата документа

Эта ошибка настолько распространена, что она обсуждается в отдельной статье. Ставьте правильную дату в документах!

Закрывание окон крестиком по поводу и без

Аналогично предыдущему пункту, это вынесено в отдельную статью. Не забывайте, зачем вы изначально открывали то или иное окно!

Попытка писать там, где нужно выбирать

Как всем известно, в 1С Бухгалтерии есть поля, предназначенные для выбора значения. Такие поля обозначаются кнопкой с троеточием, буквой Т или стрелкой вниз в правой части поля. Вот два примера.

artemvm.info_0c393ce839951181982f6b556ec2a4d3 artemvm.info_0c393ce839951181982f6b556ec2a4d3

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

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

artemvm.info_0c393ce839951181982f6b556ec2a4d3

Из этого правила есть исключения, которые мы рассматриваем на моих курсах по 1С Бухгалтерии 8. Но в целом могу порекомендовать следовать правилу: видите поле с элементом для выбора — выбирайте!

Попытка печатать в поле табличной части, в котором нет курсора

Если вам требуется ввести данные в ячейку строки табличной части, то проследите чтобы данная ячейка была активна (как в Excel), иначе при попытке ввода текста сработает быстрый поиск! Пример приведён ниже.

artemvm.info_0c393ce839951181982f6b556ec2a4d3

Это была попытка напечатать текст в выделенной ячейке без её активации. Следовало сделать вот так.

artemvm.info_0c393ce839951181982f6b556ec2a4d3

Вот это — правильно. Ошибка очень распространённая. Чтобы печатать в ячейке, дважды щелкните на ней, либо выделите и нажмите F2!

Поля, отмеченные красным, заполнять обязательно!

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

artemvm.info_0c393ce839951181982f6b556ec2a4d3

Если пропустить такое поле, то документ не проведется.

Не путать кнопку Печать и вкладку Печать

Характерно для 1С Бухгалтерии 8.2 и ниже. Проблема связана с плохим знанием интерфейса Windows. На приведенном рисунке вкладка Печать подчеркнута сверху, а кнопка аналогичного названия — снизу.

artemvm.info_0c393ce839951181982f6b556ec2a4d3

Вкладка Печать предназначена для ввода данных печатной формы, а кнопка — для формирования этой самой печатной формы! Печатная форма по умолчанию — слева от кнопки печати (для 1С Бухгалтерии 8.2)

Стремление побыстрее нажать кнопку проведения / записи / OK

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

Не забывать ставить галочку Услуга у номенклатуры

Если номенклатура является услугой, то её следует заносить в группу Услуги и обязательно ставить галочку Услуга. Про особенности групп в справочнике Номенклатура я рассказывал в этой статье.

artemvm.info_0c393ce839951181982f6b556ec2a4d3

Табличные части могут быть длинными!

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

artemvm.info_0c393ce839951181982f6b556ec2a4d3

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

Двойной щелчок для редактирования элемента

… не работает в том случае, когда окно открыто для выбора! Если окно открыто для выбора (легко определяется по наличию кнопки Выбрать), то используйте F2 или кнопку редактирования на панели инструментов!

artemvm.info_0c393ce839951181982f6b556ec2a4d3

Нажимание кнопки, принадлежащей другому окну

Ниже приведён пример того, как НЕ НАДО делать.

artemvm.info_0c393ce839951181982f6b556ec2a4d3

Зелёным подчеркнута нужная кнопка, а красным — кнопка, принадлежащая СОВСЕМ ДРУГОМУ ОКНУ!

Это исключительно проблема с интерфейсом Windows (проблемы с умением определять границы окон и других объектов) и 1С Бухгалтерия («я ведь только учусь!!!») тут ни при чём! Конечно, иногда можно случайно промазать мышкой, задумавшись о чем-то. Но когда это происходит раз за разом, то не пора ли изучить интерфейс операционной системы?

Для большей убедительности привожу ту же самую картинку, на которой ГРАНИЦЫ нужного окна обведены зелёной линией. Стрелочка-указатель на правильную кнопку прилагается.
artemvm.info_0c393ce839951181982f6b556ec2a4d3

В 1С Бухгалтерии 8.3 окна открываются в отдельных вкладках, так что эта проблема там менее распространена (в фирме 1С тоже заметили проблему?), но полностью не исчезла.

В полях с числами нули после запятой — дробная часть

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

artemvm.info_0c393ce839951181982f6b556ec2a4d3

В приведённом примере это не двадцать тысяч, а двадцать рублей!

Обратите внимание на то, что иногда в полях с суммами после запятой не два нуля, как и положено у копеек, а три (шутка разработчиков? привет «программистам» из центрального офиса 1С, не учившим математику в школе). Мне встречалось в одной из версий 1С Бухгалтерии даже пять нулей! Особенная путаница с тремя нулями. Не забывайте, что это копейки!

Быстрый поиск не по тому полю в таблице

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

Подведём итоги

Наверняка я что-то упустил, но перечислять все эти «грабли», на которые наступают почти все пользователи 1С Бухгалтерии, слишком долго. Если вспомню что-то ещё, то допишу.

Все эти ошибки, а также многие другие мы разбираем на моих курсах по 1С Бухгалтерии 8 Запомните типичные ошибки других людей и постарайтесь не совершать их сами! В бухгалтерии достаточно много других «заморочек», чтобы отвлекаться на такие мелочи..

Ошибки в 1С, связанные с контекстным методом

Ошибки в 1С, связанные с контекстным методом

Ошибки при использовании той или другой программы встречаются самого разного рода. Из них есть целая серия — которые возникают по нашей вине. Рассмотрим, как исправить ошибку при выводе метода контекста в 1С, возникающую в результате несоблюдения правил и методов контекста.

Понимание принципов функционирования метода контекста поможет избежать ошибок при работе в 1С.

Контекстные правила и методы

Любой программный продукт архитектурно состоит из модулей (module, англ.), частей. Модульные части программы 1С и их местоположение показаны на рисунке:

Программные модули, в свою очередь, состоят из разделов:

Контекст (context, англ.) — это одно из важнейших понятий в программировании. В 1С под ним понимается окружение модуля и его разделов, — какие именно переменные, свойства, объекты, метод (method) и события могут быть ему доступны в каждой конкретной точке. В разных точках context, как правило, уже другой.

Разработчик (доработчик) должен понимать — какие контекстные свойства имеет точка и какой method является доступным для использования в ней.

В восьмёрке выделены контекстные виды:

  • В любой точке конфигурации доступен Глобальный context. Отдельная ветка синтаксис-помощника показывает доступные для вызова функции: 
  • Локальный context (более низкого уровня) доступен в точках каждой модульной части;
  • Ещё ниже уровень — локальный context процедуры и так далее.

Базовыми являются основные четыре правила для доступа процедур, переменных, и ф-ций в модулях:

  • В общих модульных частях не будут доступными для экспорта переменные, процедуры и ф-ции модульных приложений;
  • В модульных приложениях есть доступ для экспорта процедур и ф-ций общих модулей;
  • Для общих мод. частей открыт доступ к экспорту процедур и ф-ций прочих общих модулей;
  • Для модульных прикладных объектов и для модульных форм являются доступными переменные, функции и процедуры модулей приложений для экспорта и общих модулей.

Если какой-либо форме присвоен основной реквизит, то в контексте этой формы будут содержаться свойство и method, отвечающие этому основному реквизиту. К примеру, в модуле формы для элемента справочника Номенклатура доступен method и свойства объекта СправочникОбъект.Номенклатура.

Иллюстрация приведённых правил на схеме:

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

Несоблюдение правил и методов программного контекста

Все программисты встречались с уведомлением об ошибке 1С при вызове метода контекста. Рассмотрим такой пример:

Ошибки команд

При создании запроса в справочнике в его параметре «текст» был внесён фрагмент:

В конструкции «ГДЕ» было внесено «И», но само условие осталось непрописанным.

Реакция программы была такой:

{МОДСеанса(21)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();

Как узнать правильный метод?

Для того чтобы получить подсказку платформы 1С о том, как использовать какой-либо method, поставьте курсор на нужную функцию и нажмите «Ctrl + F1». При возникновении ошибок нужно проверить параметры, которые передаются в функцию, а также правильность использования функции.

Что полезно знать об ошибках

Напоследок проведём общий анализ ошибок в 1С. Любая из них может быть причиной тех, которым посвящена тема статьи:

  • Нарушение как логической, так физической целостности информационной базы;
  • Ошибки пользователей при обращении с платформой;
  • Ошибочно введённый разработчиком (доработчиком) код;
  • Человеческий фактор — например, забывчивость;
  • Чрезвычайные ситуации (отсутствие света, метель, дождь, град, ураган, наводнение).

Провести анализ ошибки:

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

Дополнительно о причинах ошибок:

  • Часть ошибок — это результат использования нелицензионного программного обеспечения (и windows тоже);
  • Повреждённая платформа — это самый распространённый пример. Всего один патч способен взломать версию платформы. После чего можно не обнаружить базу (или лицензию);
  • При первичном столкновении с ошибкой стоит поискать решение в поисковике — возможно решение её уже кем-то найдено;
  • Следите за актуальностью релиза конфигурации (особенно если из них сдаётся регламентированная отчётность);
  • Актуальность релиза платформы — для каждой конфигурации рекомендован свой релиз;Все события, происходящие в 1С, протоколируются в технологическом журнале!
  • Перед началом каких-то действий с базой необходимо делать архивную копию!

Теперь вы знаете что такое context, почему возникают связанные с ним ошибки, как анализировать ошибки в 1С и как их решать.

Ошибки в 1с, рассмотрение основных ошибок в 1с и их исправление

Ошибки в 1С, связанные с контекстным методом

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

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

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

Любой наш программист 1с всегда готов Вам помочь в решении любых вопросов связанных с ошибками 1с!

Из-за чего возникают ошибки в базе 1с ?

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

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

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

Ну и замыкают этот список ошибки возникающие в базе 1с из-за оборудования установленного на компьютере. В частности одна из самых частых ошибок это нехватка оперативной памяти на компьютере который выбрали в качестве сервера. Любые ошибки возникающие в 1с 8.2 и 1с 8.

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

Ошибок в 1с может быть великое множество и происходить они могут по самым разным причинам.

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

Мы условно называем их «виды» так как содержание ошибки которое показывает Вам программа как правило всегда различное, а суть часто бывает одинаковая. Итак выделим самые часто встречающиеся ошибки в базе 1с:
  1. Ошибка формата потока
  2. Поле объекта не обнаружено
  3. Индекс находится за границами массива
  4. Метод объекта не обнаружен
  5. Недостаточно памяти
  6. Ошибки связанные с таблицами SQL (актуальны для серверов 1с которые работают на реляционных базах данных, например MySQL)
  7. Ошибка доступа 1с

Ошибка формата потока в 1с

Данная ошибка очень часто проявляется при ошибочном чтении последовательности команд из байт-кода в потоке, поэтому она и называется ошибка формата потока 1с.

Любая транзакция будет прервана если в следствии ее исполнения возникает данная ошибка. Подобные ошибки требуют немедленного исправления так как они могут навредить работе системы 1С Предприятие.

Данные ошибки могут исправить только квалифицированные программисты 1с.

Поле объекта не обнаружено

Если система 1с выдает вам сообщение об ошибке с текстом «Поле объекта не обнаружено«, то это означает следующее, что ошибка возникает в ситуации когда программа пытается обратится к реквизиту (полю) объекта которого просто не существует. Данная ошибка носит характер «ошибки времени выполнения» если она возникает в 1С Предприятии. Ошибки этого рода также исправить могут только программисты.

Индекс находится за границами массива

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

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

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

Данная ошибка очень часто проявляется при ошибочном чтении последовательности команд из байт-кода в потоке, поэтому она и называется ошибка формата потока 1с.

Любая транзакция будет прервана если в следствии ее исполнения возникает данная ошибка. Подобные ошибки требуют немедленного исправления так как они могут навредить работе системы 1С Предприятие.

Данные ошибки могут исправить только квалифицированные программисты 1с.

Недостаточно памяти в 1с

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

Возможное исправление ошибки 1с «Недостаточно памяти»

Ошибка кроется в ограниченном выделении адресной памяти операционной системой под ПО (программное обеспечение).
Ограничения для адресной памяти по умолчанию составляют:

  • для 32 битной системы – 2гб
  • для 64 битной – 4 гб

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

  1. Запустите командную строку: “Пуск – Выполнить” – введите CMD и нажмите клавишу enter
  2. Теперь в командной строке введите текст без кавычек “bcdedit /set increaseuserva 3072″, где 3072 – размер желаемой адресной памяти
  3. Перезагрузите Вашу операционную систему (компьютер)
  4. Попробуйте выполнить то действие в 1С, которое не получалось ранее и приводило к ошибке.
  5. Если всё получилось и операция повторяется не так часто – рекомендуется вернуть размер адресной памяти к значению по умолчанию с помощью команды “bcdedit /deletevalue increaseuserva”

Ошибки связанные с таблицами SQL

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

Такая ошибка может возникать из-за не правильной настройки сервера, а также из-за повреждения таблиц SQL.

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

Данная ошибка происходит тогда когда пользователь пытается выполнить какое-либо действие которое запрещено правами доступа (роли). Именно поэтому система выдает ошибку доступа в 1с. Роли настраиваются в конфигураторе программистом.

Не получилось исправить ошибку в 1с ?

Если у Вас не получилось исправить какую-нибудь ошибку в 1с не стоит отчаиваться, поднимите трубку и позвоните нам! Наши специалисты всегда готовы Вам помочь в решении любых вопросов связанных с 1с, в том числе и с ошибками возникающими при работе системы.

Проблема неуникальных индексов 1с:предприятие 8

Ошибки в 1С, связанные с контекстным методом

В этой статье будет описано, что делать, если при работе с 1С:Предприятие 8.1 Вам встретилось сообщение, содержащее строки:

Cannot insert duplicate key row in object

или

Попытка вставки неуникального значения в уникальный индекс.

Что такое индекс?

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

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

Индексы сокращают объем данных, которые необходимо считать, чтобы возвратить результирующий набор.

Хотя индекс и связан с конкретным столбцом (или столбцами) таблицы, все же он является самостоятельным объектом базы данных.

Индексы таблиц в базе данных 1С:Предприятие создаются неявным образом при создании объектов конфигурации, а также при тех или иных настройках объектов конфигурации.

Физическая сущность индексов в MS SQL Server 2005

Физически данные хранятся на 8Кб страницах. Сразу после создания, пока таблица не имеет индексов, таблица выглядит как куча (heap) данных. Записи не имеют определенного порядка хранения.

Когда вы хотите получить доступ к данным, SQL Server будет производить сканирование таблицы (table scan). SQL Server сканирует всю таблицу, что бы найти искомые записи.

Отсюда становятся понятными базовые функции индексов:— увеличение скорости доступа к данным,

— поддержка уникальности данных.

Несмотря на достоинства, индексы так же имеют и ряд недостатков. Первый из них – индексы занимают дополнительное место на диске и в оперативной памяти.

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

Второй недостаток – замедляются операции вставки, обновления и удаления записей.
В среде MS SQL Server 2005 реализовано несколько типов индексов:

  • некластерные индексы;
  • кластерные (или кластеризованные) индексы;
  • уникальные индексы;
  • индексы с включенными столбцами
  • индексированные представления
  • полнотекстовый
  • XML

Уникальный индекс

Уникальность значений в индексируемом столбце гарантируют уникальные индексы.

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

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

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

Для обеспечения целостности данных в столбце можно определить ограничение целостности UNIQUE или PRIMARY KEY, а не прибегать к уникальным индексам.

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

1С:Предприятие 8.1 начиная с версии 8.1 активно использует кластерные уникальные индексы. Это означает, что при конвертации с 8.0 или переходе с 8.1.7 можно получить ошибку неуникального индекса.

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

Что делать?

1. Если проблема загрузкой базы данных, то:

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

Если уже база создана со смещением 0, то создайте новую с 2000.

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

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

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

1.5. Если доступна узел (планы обменов), то выполнить обмен. Можно также дополнительно перед обменом выполнить пункт 2.3.5

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

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

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

Данная ошибка возникает из-за того что в модуле регистра накопления «Рабочее время работников организаций» в процедуре «ЗарегистрироватьПерерасчеты» в запросе не стоит служебное слово «РАЗЛИЧНЫЕ».

Т.е. должно быть:

Запрос = Новый Запрос(«ВЫБРАТЬ РАЗЛИЧНЫЕ

|   Основные.ФизЛицо,

. . . . .

В последних выпущенных релизах ЗУП и УПП ошибка не возникает, т.к. там стоит «РАЗЛИЧНЫЕ».

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

2.2.1. «Рыба» скрипта для определения неуникальных записей с помощью SQL:SELECT COUNT(*) Counter, from GROUP BY

HAVING Counter > 1

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:

select count(*), _Document140_IDRRef, _KeyFieldfrom _Document140_VT1385group by _Document140_IDRRef, _KeyField

having count(*) > 1

С его помощью узнайте значения колонок _Document140_IDRRef, _KeyField, дублирующихся записей (id, key).

При помощи запроса:

select *from _Document140_VT1385

where _Document140_IDRRef = id1 and _KeyField = key1 or _Document140_IDRRef = id2 and _KeyField = key2 or …

посмотрите на значения других колонок дублирующихся записей.

Если обе записи имеют осмысленные значения и эти значения разные, то исправьте значение _KeyField на уникальное. Для этого определите максимальное занятое значение _KeyField (keymax):

select max(_KeyField)from _Document140_VT1385

where _Document140_IDRRef = id1

Замените значение _KeyField в одной из повторяющихся записей на правильное:

update _Document140_VT1385set _KeyField = keymax + 1

where _Document140_IDRRef = id1 and _LineNo1386 = lineno1

Здесь _LineNo1386 = — дополнительное условие, которое позволяет выбрать одну из двух повторяющихся записей.

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

delete from _Document140_VT1385
where _Document140_IDRRef = id1 and _LineNo1386 = lineno1

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

select distinct *into #tmp1from _Document140_VT1385

where _Document140_IDRRef = id1 and _KeyField = key1

delete from _Document140_VT1385
where _Document140_IDRRef = id1 and _KeyField = key1

insert into _Document140_VT1385
select #tmp1

drop table #tmp1

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

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

SELECT     COUNT(*) AS Expr2, _IDRRef AS Expr1, _DescriptionFROM         _Reference8_GROUP BY _IDRRef, _Description

HAVING      (COUNT(*) > 1)

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

ВЫБРАТЬ Справочник.СсылкаИЗ Справочник.Справочник КАК СправочникСГРУППИРОВАТЬ ПО Справочник.Ссылка

ИМЕЮЩИЕ КОЛИЧЕСТВО(*) > 1

или для бухгалтерии

ВЫБРАТЬПодзапрос.Период,Подзапрос.Регистратор,,СУММА(Подзапрос.КоличествоЗаписей) КАК КоличествоЗаписейИЗ(ВЫБРАТЬХозрасчетный.Период КАК Период,Хозрасчетный.Регистратор КАК Регистратор,,1 КАК КоличествоЗаписейИЗ

РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный) КАК Подзапрос

СГРУППИРОВАТЬ ПОПодзапрос.Период,Подзапрос.Регистратор,

ИМЕЮЩИЕ
СУММА(Подзапрос.КоличествоЗаписей) > 1

2.3.5 Сделать индекс субд не уникальным. Заксриптовать индекс с помощью Management Studio.

Далее удалить текущий индекс, скорректировать текст и создать скриптом неуникальный индекс.

2.3.6 Частный случай при обмене в РБД. Ошибка приходится на «вспомогательные» таблицы, связанные с расчетом итогов или аналитики. Например:

Ошибка при вызове метода контекста (Записать): Попытка вставки неуникального значения в уникальный индекс:Microsoft OLE DB Provider for SQL Server: Cannot insert duplicate key row in object ‘dbo._AccntRegED10319’ with unique index ‘_Accnt10319_ByPeriod_TRNRN’.

HRESULT=80040E2F, SQLSrvr: Error state=1, Severity=E, native=2601, line=1

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

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.