Как открыть конкретный отчет или обработку в веб-клиенте 1С через параметры URL?

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

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

Разбор основного механизма: параметр запуска «C»

Для передачи произвольных данных в конфигурацию при запуске используется ключ C (латинская «си»). В контексте веб-клиента этот параметр добавляется в строку URL. Структура ссылки выглядит следующим образом:

http://сервер/имя_базы/?C=ИмяНужногоОбъекта

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

Реализация обработчика в модуле управляемого приложения

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

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


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

Важный нюанс: Почему мы не открываем нужный отчет напрямую из ПриНачалеРаботыСистемы? Использование промежуточной обработки позволяет разделить логику инициализации системы и логику поиска/подключения внешних объектов, что делает код более чистым и безопасным.

Создание обработки-открывашки для внешних объектов

Часто отчеты и обработки хранятся в справочнике ДополнительныеОтчетыИОбработки (или ВнешниеОбработки). Чтобы запустить такой объект по его имени, переданному в URL, рассмотрим программный код внутри нашей вспомогательной обработки.

Воспользуемся событием ПриОткрытии на клиенте и серверными функциями для извлечения двоичных данных. Проанализируем пример кода:


&НаСервере
Функция ПолучитьДанныеОбработки(ИмяОбработки)
    // Ищем объект в справочнике по наименованию
    СсылкаНаОбъект = Справочники.ВнешниеОбработки.НайтиПоНаименованию(ИмяОбработки);
    
    Если СсылкаНаОбъект.Пустая() Тогда
        Возврат Неопределено;
    КонецЕсли;

    // Получаем двоичные данные из хранилища
    ДвоичныеДанные = СсылкаНаОбъект.ХранилищеВнешнейОбработки.Получить();
    АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
    Возврат АдресХранилища;
КонецФункции

&НаСервере
Функция ПодключитьИПолучитьИмя(АдресХранилища)
    // Регистрируем внешнюю обработку в сеансе
    Возврат ВнешниеОбработки.Подключить(АдресХранилища);
КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    Если Параметры.Свойство("ИмяОбъектаДляОткрытия") Тогда
        Попытка
            Адрес = ПолучитьДанныеОбработки(Параметры.ИмяОбъектаДляОткрытия);
            
            Если Адрес <> Неопределено Тогда
                ИмяПодключенной = ПодключитьИПолучитьИмя(Адрес);
                // Открываем форму подключенной обработки
                ОткрытьФорму("ВнешняяОбработка." + ИмяПодключенной + ".Форма");
                // Закрываем саму "открывашку"
                ЭтаФорма.Закрыть();
            КонецЕсли;
        Исключение
            Сообщить("Ошибка при запуске: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
    
КонецПроцедуры

Передача нескольких параметров через ключ «C»

Если нам нужно передать не просто имя отчета, но и, например, дату начала периода или конкретную организацию, строка C становится сложнее. Поскольку 1С воспринимает всё после C= как одну строку, нам необходимо использовать разделители. Рассмотрим наиболее эффективный метод — использование функции СтрРазделить().

Пример URL: .../?C=Продажи;01.01.2023;ОсновнойСклад

Разберем, как десериализовать эти данные:


// В модуле обработки-открывашки
МассивПараметров = СтрРазделить(ПараметрЗапуска, ";");
ИмяОтчета = МассивПараметров[0];
ДатаНачала = МассивПараметров[1];

Для передачи сложных структур рекомендуем использовать JSON. Строка JSON должна быть предварительно закодирована в формат URL (percent-encoding), чтобы спецсимволы (кавычки, скобки) не нарушили структуру ссылки.

Автоматизация авторизации: параметры N и P

Чтобы пользователь не вводил логин и пароль при каждом переходе, в URL можно добавить ключи N (Name) и P (Password). Внимание: это небезопасно для открытых сетей, так как пароль будет виден в истории браузера. Однако в закрытых корпоративных сетях это допустимо.

Пример полной ссылки: http://server/base/?N=Ivanov&P=SuperPass123&C=ReportDaily

Если в базе настроена аутентификация по протоколам OpenID или SAML, параметры N и P указывать не нужно — система узнает пользователя автоматически по его доменной учетной записи.

Альтернатива: Навигационные ссылки (e1cib)

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

http://server/base/#e1cib/app/Отчет.Продажи

Сравним методы:

  1. Параметр C: Гибкий. Позволяет передавать любые данные, выполнять сложные проверки прав, программно заполнять настройки отчета перед открытием.
  2. Навигационная ссылка (e1cib): Простой. Не требует кода, но ограничен стандартным открытием формы без предопределенных параметров.

Особенности работы на веб-серверах (Apache/Linux)

Рассмотрим технические нюансы публикации. Если ваша база опубликована на Apache под управлением Linux, обратите внимание на файл default.vrd. В нем не должно быть жестко прописанных параметров авторизации в секции <authentication>, если вы планируете передавать разных пользователей через URL. Также помните, что Linux чувствителен к регистру символов в путях, хотя для параметров внутри строки запроса 1С это обычно не играет роли.

Повышение безопасности при использовании «открывашки»

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

Рекомендуемые меры защиты:

Упрощенный интерфейс для руководителей

Для «высокопоставленных пользователей», которым нужен только отчет и ничего лишнего, рекомендуем использовать параметр O=Simple. Это запустит веб-клиент в режиме, где скрыты панели разделов, меню функций и другие «тяжелые» элементы интерфейса. Ссылка примет вид:

http://server/base/?O=Simple&C=MyExecutiveDashboard

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

← На главную