Как исправить ситуацию, когда подчиненный справочник в 1С 7.7 перестал фильтроваться по владельцу?

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет
← На главную

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

Проверка режима иерархического просмотра («Кнопка Бананов»)

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

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

Программная установка связи через ИспользоватьВладельца

Если манипуляции с кнопками не помогают, нам необходимо заглянуть «под капот» конфигурации. В системе 1С 7.7 связь между справочниками может быть настроена в метаданных, но управляться программно. Рассмотрим ситуацию, когда форма открывается не стандартными средствами, а через встроенный язык.

Проанализируем программный код в модуле формы списка подчиненного справочника. Найдем процедуру ПриОткрытии(). Для того чтобы справочник понимал, по какому владельцу ему фильтровать данные, должна быть вызвана соответствующая функция. Разберем пример правильного кода:


Процедура ПриОткрытии()
    // Если форма открывается из формы владельца, контекст передается автоматически
    // Однако для надежности можно явно указать владельца
    Если ПустоеЗначение(Форма.Параметр) = 0 Тогда
        ИспользоватьВладельца(Форма.Параметр);
    КонецЕсли;
КонецПроцедуры

Если в процессе «переделки» конфигурации эта строка была удалена или закомментирована, автоматическая фильтрация работать не будет. Стоит проверить также, как вызывается форма из справочника-владельца. Если используется команда ОткрытьФорму, убедимся, что в качестве параметра передается ссылка на текущий элемент (владельца).

Сбой индексных файлов базы данных (.CDX)

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

Рассмотрим порядок действий для восстановления индексов:

  1. Завершим работу всех пользователей в базе данных.
  2. Перейдем в каталог базы данных (путь к ней можно посмотреть в окне запуска 1С).
  3. Найдем и удалим все файлы с расширением .CDX. Внимание: файлы с расширением .DBF трогать нельзя — это сами данные!
  4. Запустим 1С:Предприятие в монопольном режиме.
  5. Система автоматически предложит произвести переиндексацию. Дождемся завершения процесса.

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

Восстановление пользовательских настроек и файла 1Cv7.CFG

В тексте обращения упоминалось, что «слетели настройки пользователей». Это важный симптом. В 1С 7.7 индивидуальные настройки (положение окон, состояние кнопок иерархии, видимость колонок) хранятся в файле 1Cv7.CFG, который находится в папке конкретного пользователя внутри каталога базы.

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

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

Исправление ошибок в метаданных (MD-файл)

Иногда проблема кроется глубже — в файле метаданных 1Cv7.MD. При многократном редактировании «старой и переделанной» конфигурации внутренние идентификаторы объектов могут конфликтовать. Разберем способ «перерегистрации» связи в Конфигураторе:

  1. Откроем Конфигуратор и найдем наш подчиненный справочник.
  2. В свойствах справочника временно установим значение поля «Владелец» в положение «Не указан».
  3. Сохраним конфигурацию (нажмем кнопку с дискетой).
  4. Снова зайдем в свойства и вернем владельца (справочник «Номенклатура»).
  5. Снова сохраним конфигурацию.

Этот нехитрый прием заставляет систему обновить внутренние ссылки в структуре таблиц. После этого крайне желательно выполнить операцию «Тестирование и исправление ИБ» (пункт меню «Администрирование»), выбрав проверки на ссылочную целостность и проверку структуры словаря данных.

Особенности работы с SQL-версией

Если ваша база работает на MS SQL Server, рассинхронизация может произойти на уровне таблиц SQL. Посмотрим на техническую сторону: в SQL-версии связь по владельцу реализуется через поле PARENTEXT (или аналогичное, в зависимости от версии). Если индексы в SQL-базе дефрагментированы или повреждены, фильтрация может давать сбои.

В этом случае, помимо тестирования и исправления средствами 1С, рекомендуется выполнить регламентные задания на самом SQL-сервере: REINDEX и UPDATE STATISTICS для таблиц справочников. Это гарантирует, что движок базы данных корректно обрабатывает условия WHERE, накладываемые платформой 1С при работе с подчиненными объектами.

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

← На главную