Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Табличный документ в Excel

v7: Табличный документ в Excel
Я
   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";
    СохранитьТаблицу ();    
КонецПроцедуры


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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.