Почему в 1С перепутался список документов Создать на основании и как это исправить

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

В процессе работы с конфигурацией «Управление торговым предприятием» (УТП) версии 1.2 или другими решениями на базе обычных форм пользователи иногда сталкиваются с крайне странным поведением интерфейса. При нажатии на кнопку «Создать на основании» в форме документа вместо привычного перечня документов, которые должны вводиться на основании текущего, программа выводит список документов, которые сами являются основанием для него. Происходит своего рода «логическая инверсия» меню. Проанализируем, почему это происходит и какими методами можно устранить данную техническую проблему.

Разберем причину возникновения ошибки

Данная ситуация не является следствием неправильной настройки конфигурации пользователем или ошибок в программном коде конкретного документа. Рассмотрим техническую сторону вопроса: это известный баг платформы 1С:Предприятие 8.2, который наиболее остро проявлялся в релизах ветки 8.2.18 (например, 8.2.18.61, 8.2.18.102).

Суть проблемы заключается в некорректной работе механизма кеширования метаданных. Платформа при динамическом построении командного интерфейса ошибочно обращается не к той коллекции объектов. Вместо того чтобы прочитать список документов, где текущий объект указан в свойстве Вводится на основании, она подставляет список из свойства Является основанием для самого этого документа. В итоге на документе «Реализация товаров и услуг» мы видим предложение создать «Заказ покупателя», хотя логически должно быть наоборот.

Метод 1. Обновление платформы (Рекомендуемый способ)

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

  1. Проанализируем текущую версию платформы через меню «Справка — О программе». Если версия относится к ветке 8.2.18.хх и номер сборки ниже 1289, вы находитесь в зоне риска.
  2. Установим обновленную версию платформы. Официально проблема считается решенной в релизе 8.2.18.1289 и во всех последующих версиях ветки 8.2.19.
  3. Если конфигурация позволяет, рассмотрим возможность перехода на платформу 8.3 с использованием режима совместимости. Это полностью исключает проявление старых багов интерфейса 8.2.

Метод 2. Очистка локального и серверного кеша

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

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

  1. Закроем все сеансы 1С.
  2. Перейдем в каталоги временных файлов (пути могут варьироваться в зависимости от ОС):
    • %AppData%\Local\1C\1Cv82
    • %AppData%\Roaming\1C\1Cv82
  3. Удалим все папки с длинными буквенно-цифровыми названиями (идентификаторы баз).

Также эффективно использовать параметр запуска /ClearCache. Для этого в окне списка информационных баз выберем нужную базу, нажмем «Изменить», перейдем на последнюю закладку и в поле «Дополнительные параметры запуска» впишем:

/ClearCache

Этот параметр принудительно очистит кеш запросов к серверу при следующем запуске.

Метод 3. Принудительная реструктуризация метаданных

Если «снятие с поддержки» помогло автору вопроса, это произошло потому, что данное действие вызывает полную перезапись внутренних таблиц связей метаданных в файле базы данных (или таблиц SQL). Однако снимать конфигурацию с поддержки — это радикальный и не всегда оправданный шаг. Разберем более мягкие варианты реструктуризации.

Способ А: Фиктивное изменение.

  1. Зайдем в «Конфигуратор».
  2. Найдем любой документ, участвующий в проблеме (например, ту же «Реализацию»).
  3. Внесем любое незначительное изменение, которое потребует обновления конфигурации базы данных (например, добавим пробел в поле «Комментарий» в свойствах объекта или немного изменим описание).
  4. Нажмем «Обновить конфигурацию базы данных» (F7).
  5. После обновления вернем изменение назад и снова нажмем F7. Это заставит платформу пересчитать дерево объектов.

Способ Б: Тестирование и исправление (ТиИ). Проанализируем состояние базы через штатную утилиту:

  1. В Конфигураторе выберем пункт меню «Администрирование — Тестирование и исправление».
  2. Установим флажки на пунктах:
    • «Реиндексация таблиц информационной базы»
    • «Проверка логической целостности»
    • «Реструктуризация таблиц информационной базы» (самый эффективный, но долгий процесс).
  3. Запустим процесс. Это обновит внутренние индексы и исправит возможные ошибки в структуре таблиц, отвечающих за связи «основание — подчиненный».

Метод 4. Сброс пользовательских настроек интерфейса

Иногда платформа запоминает некорректное состояние командного интерфейса в настройках конкретного пользователя. В этом случае полезно выполнить сброс панелей. Посмотрим, как это сделать в режиме «1С:Предприятие»:

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

Резюме

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

← На главную