Имя: Пароль:
1C
 
Как открыть (выполнить) внешнюю обработку программно ?
, ,
0 Анастасия Изотова
 
13.06.16
05:50
День добрый. Не подскажите, можно ли обратиться(вызвать, открыть) внешнюю обработку, нажатием на кнопку или ссылку в интерфейсе ?
1С 8.1.
Есть справочник Внешние Обработки (да думаю он у всех есть)), в нем отчеты, выполненные в виде внешних обработок. Открываю, нажимаю Выполнить, открывается форма (уже собственно Обработки), выбираю что надо и т.д.
Вот как можно обратиться к обьекту (это же обьект, да ?) справочника Внешние Обработки, с указаением нужной (например по Наименованию), и без всяких "Выполнить", сразу ее запустить ?
Пыталась вот так:

НаименованиеЭлемента = "Отчет по видам услуг";
    Спр = Справочники.ВнешниеОбработки.Выбрать();
    //Спр.ПолучитьФорму("ФормаЭлемента",НаименованиеЭлемента).Открыть();
    Пока Спр.Следующий() Цикл
    //....
    спр.ПолучитьОбъект().ПолучитьФорму("ФормаЭлемента",НаименованиеЭлемента).Открыть();
    КонецЦикла;

Но не хочет. Все варианты - или норовит СоздатьНовый Обьект Справочника, или упирается в  - Выполнить ....
1 PR
 
13.06.16
05:55
О, Владик :))
2 PR
 
13.06.16
05:56
ОткрытьФорму же вроде как
3 Анастасия Изотова
 
13.06.16
06:32
Нет (  или ошибку выдает, или упирается лбом в обьект справочника, с кнопками - заменить, скачать, наименование, выполнить ... ((
4 PR
 
13.06.16
06:34
(3) Посмотри, как сделано в типовых, в той же ERP, там сохраненная настройка пользователя показывается в интерфейсе как гиперссылка и по ней открывается отчет с этим вариантом.
5 Мимохожий Однако
 
13.06.16
07:28
Открыть можно только ту обработку, в которой есть для этого форма. Подсказку можно увидеть в справочнике Внешние обработки в обработке при нажатии на выбранный элемент.
6 NorthWind
 
13.06.16
08:09
(0)

    спрВО = Справочники.ВнешниеОбработки;
    ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет;
    
    ВыбраннаяСтрока = спрВО.НайтиПоКоду(Код);
    Если ВыбраннаяСтрока = Неопределено Тогда
        Предупреждение ("Дополнительный отчет код '" + Код + "' не найден.");
        Возврат;
    КонецЕсли;    
    
    ЭтоОбработка = ?(ВыбраннаяСтрока.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Обработка, Истина, Ложь);
    ЭтоОтчет = ?(ВыбраннаяСтрока.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет, Истина, Ложь);
    
    
    Если Не ЭтоОбработка и Не ЭтоОтчет Тогда
        Предупреждение ("Внешний модуль код '" + Код + "' не является дополнительным отчетом или обработкой.");
        Возврат;
    КонецЕсли;
    
    Попытка
        
        ИмяФайла = ПолучитьИмяВременногоФайла();
        ДвоичныеДанные = ВыбраннаяСтрока.ХранилищеВнешнейОбработки.Получить();
        ДвоичныеДанные.Записать(ИмяФайла);
        
        Если ЭтоОбработка Тогда
            
            Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);
            
        Иначе
            
            Форма = ВнешниеОтчеты.ПолучитьФорму(ИмяФайла);
            
        КонецЕсли;
        
        Если Не Форма = Неопределено Тогда
            
            Форма.Открыть();
            
        Иначе
            
            Если ЭтоОбработка Тогда
                ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяФайла);
            Иначе
                ВнешнийОтчет = ВнешниеОтчеты.Создать(ИмяФайла);
                Форма = ВнешнийОтчет.ПолучитьФорму();
                Если Форма <> Неопределено Тогда
                    Форма.Открыть();
                КонецЕсли;
            КонецЕсли;
            
        КонецЕсли;
        
    Исключение
        
        Если ЭтоОбработка Тогда
            
            Предупреждение("Выбранный файл не является внешней обработкой.
            |Либо, данная обработка не предназначена для
            |запуска в этой конфигурации.");
        Иначе
            Предупреждение("Выбранный файл не является внешним отчетом.
            |Либо, данный отчет не предназначена для
            |запуска в этой конфигурации.");
        КонецЕсли;
        
    КонецПопытки;
7 NorthWind
 
13.06.16
08:13
этот код, как видно, можно раза в два уменьшить, если вы точно знаете что вы хотите открыть - отчет или обработку.
8 Jump
 
13.06.16
08:35
(0) Вы уж определитесь что вам надо-
Открыть обработку - т.е показать форму обработки пользователю.
Или
Выполнить обработку - т.е выполнить код обработки.
9 PR
 
13.06.16
09:02
(8) Причем здесь выполнить код обработки?
Где в (0) речь про выполнение кода?
10 NorthWind
 
13.06.16
09:02
(8) в семерке автоматическое выполнение кода я делал параметром. Т.е. в форму передавался параметр, и если он имел определенное значение, то выполнялся код, после чего открытие завершалось с отказом (СтатусВозврата (0)). В восьмерке не было необходимости такого делать, но думаю, так же можно.
11 NorthWind
 
13.06.16
09:06
(9) она действительно пишет
>>  и без всяких "Выполнить", сразу ее запустить ?
12 Лефмихалыч
 
13.06.16
09:33
У справочника есть реквизит ХранилищеВнешнейОбработки с типом ХранилищеЗначения. В этом хранилище значения лежат ДвоичныеДанные - файл epf или erf. Соответственно, надо получить двоичные данных из хранилища значения, записать двоичные данные во временный файл, из временного файла создать объект внешней обработки и уже с этим объектом делать все, что надо.


//Ссылка - ссылка на нужны элемент справочника внешних обработок.
ВременныйФайл = ПолучитьИмяВременногоФайла();
ДвоичныеДанныеОбработки = Ссылка.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанныеОбработки.Записать(ВременныйФайл);
ВнешняяОбработкаОбъект = ВнешниеОбработки.Создать(ВременныйФайл);

ВнешняяОбработкаОбъект.ПолучитьФорму("НужнаяФорма").Открыть();
// ну, или
ВнешняяОбработкаОбъект.ВыполнитьЭкспортныйМетодМодуляОБработки()
13 Лефмихалыч
 
13.06.16
09:34
+ (12) ну, и учесть, что там может быть не обработка, а отчет, тогда надо не ВнешниеОбработки кастовать, а ВнешниеОтчеты.
14 Анастасия Изотова
 
13.06.16
12:10
to ЛевМихалыч
Думала-думала : а где ссылку-то взять ? у менять есть только название. Наименование то есть. Привязать "Ссылка" к полю-строке выбора-перечислению и пр. не могу -  мне напро прописать программного - Кнопка-Вызов по ней ....
сделала так:
Ссылка = "Отчет по видам услуг";

далее как ты сказал:
но...
{Обработка.РабочееМестоРуководителя.Форма.Форма(68)}: Значение не является значением объектного типа (ХранилищеВнешнейОбработки)
ДвоичныеДанныеОбработки = Ссылка.ХранилищеВнешнейОбработки.Получить();

:(
15 Лефмихалыч
 
13.06.16
12:14
(14) >а где ссылку-то взять ?
программиста позови, Чтобы он помог тебе НайтиПоНаименованию, например
16 Лефмихалыч
 
13.06.16
12:14
>сделала так:
>Ссылка = "Отчет по видам услуг";

не твое это, Настя. Не твое
AdBlock убивает бесплатный контент. 1Сергей