Почему не отображается справка во внешней обработке 1С и как это исправить?

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

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

В этой статье мы подробно разберем причины такого поведения платформы 1С:Предприятие 8.3 и рассмотрим несколько эффективных способов решения: от простой очистки кэша до создания надежной системы вывода справки через HTML-макеты.

Выясним основные причины проблемы

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

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

Способ 1. Базовая проверка настроек и очистка кэша

Первым делом проверим самые очевидные моменты. Рассмотрим алгоритм действий:

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

Если обработка зарегистрирована через справочник «Дополнительные отчеты и обработки», необходимо полностью перезагрузить файл в справочнике. Проанализируем нюанс: платформа кэширует эти файлы в папке AppData\Local\1C\1cv8\.... Если стандартное обновление не помогает, удалите запись из справочника, запишите изменения и создайте её заново.

Способ 2. Программный вызов справки через ОткрытьСправку()

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

Посмотрим на пример реализации команды на форме:


&НаКлиенте
Процедура ОткрытьСправкуОбъекта(Элемент)
    ИмяПути = ПолучитьИмяДляСправки();
    ОткрытьСправку(ИмяПути);
КонецПроцедуры

&НаСервере
Функция ПолучитьИмяДляСправки()
    // Преобразуем объект в строку для получения типа
    ИмяОбъекта = Строка(РеквизитФормыВЗначение("Объект"));
    
    // Заменяем внутренние имена на понятные платформе пути
    ИмяОбъекта = СтрЗаменить(ИмяОбъекта, "ВнешняяОбработкаОбъект", "ВнешняяОбработка");
    
    // Формируем путь: ВнешняяОбработка.[Имя].Форма.[ИмяФормы].Справка
    Возврат ИмяОбъекта + ".Форма.ФормаОтчета.Справка";
КонецФункции

Этот метод более надежен, но он также может страдать от проблем кэширования, если платформа не успевает обновить внутренние индексы после загрузки новой версии обработки.

Способ 3. Самый надежный метод: использование HTML-макета

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

Разберем реализацию по шагам:

  1. Создадим в обработке новый макет с типом HTML документ. Назовем его, например, МакетСправки.
  2. Вставим в него текст справки. Здесь можно использовать полноценную HTML-верстку и даже оформление стилями.
  3. На форме обработки создадим реквизит ТекстСправки с типом ФорматированныйДокумент или Строка (для отображения в поле HTML-документа).
  4. Добавим на форму поле с видом Поле HTML документа.

Теперь напишем код для вывода этой справки:


&НаКлиенте
Процедура ПоказатьСвоюСправку(Команда)
    ЗаполнитьСправкуНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСправкуНаСервере()
    // Получаем объект обработки для доступа к макетам
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    
    // Извлекаем текст из HTML-макета
    Макет = ОбработкаОбъект.ПолучитьМакет("МакетСправки");
    ТекстHTML = Макет.ПолучитьТекст();
    
    // Если используем Поле HTML документа напрямую (строковый реквизит)
    ЭтаФорма.ПолеHTML = ТекстHTML;
    
    // Если используем ФорматированныйДокумент для более сложного вывода
    // Вложения = Новый Структура;
    // Объект.РеквизитФорматированныйДокумент.УстановитьHTML(ТекстHTML, Вложения);
КонецПроцедуры

Важное преимущество этого метода: вы полностью контролируете визуальное представление. Если в справке нужны картинки, их можно хранить в дополнительных макетах типа Картинка и программно подставлять в HTML-код через навигационные ссылки 1С (e1cib/tempstorage/...).

Дополнительные рекомендации

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

Таким образом, мы рассмотрели все основные способы борьбы с "невидимой" справкой. Начните с проверки свойств метаданных и очистки кэша, а если задача требует 100% гарантии отображения на любом компьютере — используйте вариант с HTML-макетом и программным выводом.

← На главную