Как исправить ошибку «двоения» и зацикливания иерархии в справочнике «Номенклатура»

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При работе с крупными справочниками, такими как Номенклатура, в конфигурациях на базе управляемых форм (например, УТ 11, ERP 2 или КА 2) пользователи иногда сталкиваются с крайне неприятным визуальным артефактом. При попытке раскрыть группу или просто при скроллинге списка группы начинают «двоиться», а сам список зацикливается: после последней папки снова отображается первая, и так до бесконечности. Это не просто визуальный баг, а серьезная проблема, мешающая корректному выбору товара и навигации.

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

Причины возникновения проблемы

Проанализируем ситуацию: чаще всего эта проблема проявляется на платформе версии 8.3.10.x (например, 2505, 2639, 2699). Основная причина кроется в некорректной работе механизма динамической выборки данных (ДинамическийСписок) при активном использовании расширений конфигурации. Когда расширение заимствует форму списка или сам объект (справочник), платформа может некорректно строить дерево иерархии, путая индексы строк при отрисовке интерфейса «Такси».

Разберем основные методы решения этой проблемы — от радикальных до «хитрых» программных обходов.

Способ 1. Работа с расширениями (Радикальный, но действенный)

Как показывает практика и сообщения опытных разработчиков, основной конфликт возникает при наличии справочника Номенклатура в составе расширения. Выясним, как это лечится:

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

Способ 2. Очистка системных настроек пользователя

Иногда обычная чистка локального кэша (папок AppData\Local\1C) не помогает, так как настройки формы сохраняются непосредственно в информационной базе. Разберем, как выполнить глубокую очистку:

  1. Перейдем в раздел Администрирование — Настройки пользователей и прав.
  2. Выберем пункт Очистка настроек.
  3. Найдем пользователя, у которого наблюдается глюк, и удалим все настройки, связанные с формой списка справочника Номенклатура.
  4. Это заставит платформу заново сформировать структуру формы при следующем открытии, игнорируя «битые» сохраненные состояния колонок и группировок.

Способ 3. Программный обход бага (Workaround)

Если вы не можете изменить расширение или обновить платформу прямо сейчас, существует интересный способ «протолкнуть» построитель иерархического списка. Рассмотрим алгоритм действий:

  1. Найдем в программе любое поле, где возможен выбор папки номенклатуры (например, в любом отчете или обработке, где есть отбор по группе).
  2. Начнем вводить название папки и нажмем кнопку Выбрать из списка (или кнопку с троеточием), чтобы открылось окно выбора.
  3. Построитель списка при таком вызове инициирует принудительный поиск позиции. Если список открылся корректно до нужной папки, визуальный баг в основном окне справочника также должен исчезнуть.
  4. Этот метод является временным и помогает не в 100% случаев, но он позволяет пользователю продолжить работу без перезагрузки сервера.

Способ 4. Настройка аппаратного ускорения

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

Попробуем запустить тонкий клиент с параметром отключения аппаратного ускорения:

"C:\Program Files\1cv8\common\1cestart.exe" /GPU off

Если после этого «двоение» прекратилось, значит, проблема носит чисто визуальный характер и связана с рендерингом форм.

Способ 5. Проверка режима совместимости

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

Посмотрим, как это проверить:

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

Способ 6. Тестирование и исправление (ТиИ)

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

  1. Запустим конфигуратор и перейдем в меню Администрирование — Тестирование и исправление.
  2. Выберем пункты:
    • Реиндексация таблиц информационной базы;
    • Проверка логической целостности;
    • Реструктуризация таблиц информационной базы.
  3. Особое внимание уделим проверке ссылочной целостности. Иногда «двоение» возникает из-за того, что у элемента справочника поле Родитель ссылается на само себя или на удаленный объект (битую ссылку).

Способ 7. Полнотекстовый поиск

Замечено, что в редких случаях индекс полнотекстового поиска может влиять на отображение списков с включенным быстрым поиском. Попробуем выполнить полное обновление индекса:


Процедура ОбновитьИндексПП()
    ПолнотекстовыйПоиск.УстановитьРежимПереиндексации(РежимПереиндексацииПолнотекстовогоПоиска.Полная);
    ПолнотекстовыйПоиск.ОбновитьИндекс(Истина);
КонецПроцедуры

После завершения операции проверьте работу справочника Номенклатура.

Резюме

Наиболее эффективным решением для платформы 8.3.10 является удаление объекта из расширения или обновление платформы до версий 8.3.12 и выше, где большинство ошибок динамических списков было исправлено разработчиками 1С. Если обновление невозможно, используйте метод сброса настроек пользователя и проверку режима совместимости расширений.

← На главную