Как проверить наличие обработки в 1С и открыть её?

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

Приветствуем вас! Сегодня мы с вами разберем одну из частых задач, возникающих при разработке в 1С: как проверить наличие обработки и, если она существует, открыть её. Эта задача может иметь несколько решений, в зависимости от типа обработки: встроенная в конфигурацию, внешняя, хранящаяся в справочнике "Дополнительные отчеты и обработки" (БСП) или просто внешний файл на диске. Давайте рассмотрим каждый сценарий подробно и выясним наиболее эффективные подходы.

Решение 1: Проверка и открытие встроенной обработки

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

  1. Проверка наличия обработки:

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

    Рассмотрим пример кода, который демонстрирует этот подход:

    
    ИмяОбработки = "ПоискИУдалениеДублей";
            
    Попытка
        // Пытаемся получить менеджер обработки по её имени
        // Если обработки нет, будет сгенерировано исключение
        МенеджерОбработки = Обработки[ИмяОбработки];
    Исключение
        // Если обработка не найдена, присваиваем Неопределено
        МенеджерОбработки = Неопределено;
    КонецПопытки;
            
    Если МенеджерОбработки <> Неопределено Тогда
        Сообщить("Обработка '" + ИмяОбработки + "' найдена в метаданных.");
        // Здесь мы можем перейти к открытию обработки
    Иначе
        Сообщить("Обработка '" + ИмяОбработки + "' не найдена в метаданных.");
    КонецЕсли;
    

    Обратите внимание на использование блока Попытка...Исключение...КонецПопытки. Это позволяет нам корректно обработать ситуацию, когда обработка с указанным именем отсутствует, предотвращая ошибку выполнения программы.

  2. Открытие встроенной обработки:

    После того как мы убедились в наличии обработки, мы можем её открыть. Для этого нам понадобится метод ПолучитьФорму() менеджера обработки. Этот метод возвращает объект формы обработки, которую затем можно открыть с помощью глобального метода ОткрытьФорму().

    Продолжим наш пример:

    
    ИмяОбработки = "ПоискИУдалениеДублей";
            
    Попытка
        МенеджерОбработки = Обработки[ИмяОбработки];
    Исключение
        МенеджерОбработки = Неопределено;
    КонецПопытки;
            
    Если МенеджерОбработки <> Неопределено Тогда
        Сообщить("Обработка '" + ИмяОбработки + "' найдена. Открываем форму...");
                
        // Получаем форму обработки. Можно указать конкретное имя формы, если их несколько.
        // Если имя формы не указано, будет открыта основная форма.
        ФормаОбработки = МенеджерОбработки.ПолучитьФорму();
                
        // Открываем полученную форму
        ФормаОбработки.Открыть();
    Иначе
        Сообщить("Обработка '" + ИмяОбработки + "' не найдена. Открытие невозможно.");
    КонецЕсли;
    

    Мы используем ФормаОбработки.Открыть() для непосредственного открытия формы. Если вам нужно передать параметры в форму, вы можете использовать перегруженный метод ПолучитьФорму(ИмяФормы, Параметры).

Решение 2: Проверка и открытие внешней обработки из справочника "Дополнительные отчеты и обработки" (БСП)

Многие современные конфигурации 1С используют Библиотеку Стандартных Подсистем (БСП), которая предоставляет удобный механизм для работы с внешними отчетами и обработками. Они хранятся в специальном справочнике, что позволяет подключать их без изменения кода конфигурации.

  1. Проверка наличия внешней обработки в справочнике:

    В этом случае, вместо метаданных, мы будем работать со справочником, который хранит информацию о подключенных внешних обработках. Как правило, это справочник ДополнительныеОтчетыИОбработки или аналогичный. Нам нужно найти элемент этого справочника по его наименованию или другим реквизитам.

    Давайте посмотрим, как это можно сделать:

    
    ИмяОбработкиБСП = "МояВнешняяОбработкаДляБСП"; // Наименование элемента в справочнике
    СсылкаНаОбработку = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмяОбработкиБСП);
            
    Если СсылкаНаОбработку <> Неопределено Тогда
        Сообщить("Внешняя обработка '" + ИмяОбработкиБСП + "' найдена в справочнике.");
        // Здесь мы можем перейти к открытию
    Иначе
        Сообщить("Внешняя обработка '" + ИмяОбработкиБСП + "' не найдена в справочнике.");
    КонецЕсли;
    

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

  2. Открытие внешней обработки из справочника:

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

    Проанализируем пример кода:

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

    В данном случае, открытие формы элемента справочника ДополнительныеОтчетыИОбработки обычно инициирует механизм БСП по загрузке и открытию самой внешней обработки. Если же вам нужно открыть конкретную форму внешней обработки, вы можете использовать второй вариант с указанием полного имени формы, как показано в закомментированном коде.

Решение 3: Проверка и открытие внешней обработки (файла .epf)

Если обработка представляет собой обычный файл .epf на диске, который не встроен в конфигурацию и не подключен через БСП, то подход будет иным. Мы будем работать непосредственно с файловой системой.

  1. Проверка существования файла обработки:

    Для проверки наличия файла на диске мы используем объект Файл и его метод Существует().

    Посмотрим на пример:

    
    ПутьКФайлуОбработки = "C:\МоиОбработки\МояВнешняяОбработка.epf";
            
    ФайлОбработки = Новый Файл(ПутьКФайлуОбработки);
            
    Если ФайлОбработки.Существует() Тогда
        Сообщить("Файл внешней обработки по пути '" + ПутьКФайлуОбработки + "' найден.");
        // Здесь мы можем перейти к открытию
    Иначе
        Сообщить("Файл внешней обработки по пути '" + ПутьКФайлуОбработки + "' не найден.");
    КонецЕсли;
    

    Метод Существует() возвращает Истина, если файл или каталог по указанному пути существует, и Ложь в противном случае. Убедитесь, что путь к файлу указан корректно и у пользователя есть права на чтение этого файла.

  2. Открытие внешней обработки (файла .epf):

    Открытие внешней обработки из файла осуществляется с помощью глобального метода ОткрытьФорму(), куда передается путь к файлу обработки.

    Разберем по шагам:

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

    Здесь мы снова используем Попытка...Исключение...КонецПопытки, так как при открытии внешнего файла могут возникнуть различные ошибки, например, неверный формат файла или проблемы с доступом. Важный момент: в тонком клиенте и веб-клиенте работа с файлами на стороне клиента ограничена. Для открытия файла внешней обработки на клиенте, файл должен быть доступен по прямому пути, либо его нужно сначала загрузить на сервер, а затем сервер уже откроет его и передаст форму клиенту. В большинстве случаев, для веб- и тонкого клиента, предпочтительнее использовать механизм БСП или встраивать обработки в конфигурацию.

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

← К списку