Имя: Пароль:
1C
1C 7.7
v7: Табличный документ в Excel
0 AAA
 
16.07.20
12:26
Всем доброго дня. Есть известная обработка, которая быстро и правильно сохраняет таблицы MXL в Excel. Она использует Formex и SpreadSheet (Yoksel). Объект "Сервис" из Formex ловит активный контекст и затем это добро сохраняется в Excel. Это все прекрасно работает. Быстро и правильно. Но вот есть отчеты, которые из "Таблица" переделаны в "ТабличныйДокумент" Йокселя. И тут вышла засада. "Сервис" не видит окно с табличным документом. Что тут можно сделать, может кто-то сталкивался? Сделать кнопку выгрузки отчета не предлагать, отчетов много.
1 Ёпрст
 
гуру
16.07.20
12:34
(0) переделаны во фрейм или в контрол на форме ?
2 Ёпрст
 
гуру
16.07.20
12:40
если последене, то так, например

Перем гТаблица,ВыбНазваниеЛиста,ВыбИмяФайла;

//-----------------------------------------------------------------------------

Функция Проверка ()
    
    Попытка
        Сервис = СоздатьОбъект("Сервис");
    Исключение
        Если ЗагрузитьВнешнююКомпоненту("formex")=0 Тогда
            Возврат 0;
        КонецЕсли;
    КонецПопытки;
    
    Попытка
        Табл = СоздатьОбъект("ТабличныйДокумент");
    Исключение
        Если ЗагрузитьВнешнююКомпоненту ("SpreadSheet.dll")=0 Тогда
            Возврат 0;
        КонецЕсли;        
    КонецПопытки;
        
    Сервис = СоздатьОбъект ("Сервис");
    Если Сервис.АктивныйКонтекст (гТаблица) = 1 Тогда
        Если ТипЗначенияСтр (гТаблица) = "Таблица" Тогда
            Возврат 1;
        Иначе
            Попытка
                гТаблица = гТаблица.Таблица;
                Возврат 1;
            Исключение
            КонецПопытки;
        КонецЕсли;
    КонецЕсли;
    Возврат 0;
КонецФункции

//-----------------------------------------------------------------------------

Процедура ВыполнитьСохранение ()
    ИмяФайла = ВыбИмяФайла;
    ИмяКаталога = ВосстановитьЗначение("ИмяКаталога");
    Если ФС.ВыбратьФайл (1, ИмяФайла, ИмяКаталога, "Укажите имя файла", "Книга Microsoft Excel (*.xls)|*.xls|Документ Adobe Acrobat (*.pdf)|*.pdf",
        "xls") = 0 Тогда
            
        Возврат;
    КонецЕсли;
    СохранитьЗначение("ИмяКаталога",ИмяКаталога);
    ВыбИмяФайла = ИмяКаталога + ИмяФайла;
    Документ = СоздатьОбъект ("ТабличныйДокумент");
    Если ТипЗначенияСтр(гТаблица)="Таблица" Тогда
        Документ.ЗагрузитьИзТаблицы(гТаблица);
    Иначе
        врИмя = КаталогВременныхФайлов()+"\"+_GetPerformanceCounter()+"mxl";
        гТаблица.Записать(врИмя);
        Документ.Открыть(врИмя);
    КонецЕсли;
    
    Если Прав(ВыбИмяФайла,3)="xls" Тогда
        Конвертер = СоздатьОбъект ("КонвертерExcel");
        Книга = Конвертер.Создать ();
        Книга.Листы.Добавить (ВыбНазваниеЛиста, Документ);
        Книга.ПараметрыКонвертера.РаспознаватьЧисловыеЗначения = 1;
        Книга.Записать (ВыбИмяФайла);
    Иначе
        Конвертер = СоздатьОбъект ("Йоксель.ГрафическийКонвертер.PDF");
    Конвертер.ВысотаСтраницы = 297*56.7;
    Конвертер.ШиринаСтраницы = 210*56.7;
        Конвертер.КоличествоБитНаПиксел = 24;
        Конвертер.Документ = Документ;
        Конвертер.ПолеСлева = 0;
        Конвертер.ПолеСверху = 0;
        Конвертер.ПолеСправа = 0;
        Конвертер.ПолеСнизу = 0;
        Конвертер.ЗаписатьВФайл (ВыбИмяФайла);
    КонецЕсли;
КонецПроцедуры

//-----------------------------------------------------------------------------

Процедура СохранитьТаблицу ()
    Попытка
        ВыполнитьСохранение ();
    Исключение
        Предупреждение ("Не удалось выполнить сохранение: " + ОписаниеОшибки() + " Возможно, указано неверное имя файла или " +
        "файл, куда выполняется сохранение, открыт",60);
    КонецПопытки;
КонецПроцедуры

Процедура ПриОткрытии ()
    СтатусВозврата(0);
    Если Проверка () = 0 Тогда
        Возврат;
        Сообщить ("Обнаружены ошибки - сохранение таблицы будет недоступно");
    КонецЕсли;
    ВыбНазваниеЛиста = "Лист 1";
    СохранитьТаблицу ();    
КонецПроцедуры

3 Djelf
 
гуру
16.07.20
12:49
(0) Есть еще метод Йоксель.ПолучитьАктивныйДокумент();
http://yoksel.net.ru/Ob'ektyVstroennogoJazyka/Jjoksel'/Poluchit'AktivnyjjDokument
4 AAA
 
16.07.20
13:50
Коллеги, огромной спасибо. Все получилось
Отдельное спасибо (3). В ALS не фидел этого метода, но у меня старый помощник