Имя: Пароль:
1C
1C 7.7
v7: Активный контекст
0 Масянька
 
26.03.13
12:51
День добрый!

Открыта печ. форма док-та. Хочу сохранить эту печ. форму в файл.
На панель инструментов добавила кнопку, на кнопку повесила свою обработку.
В обработке - ПриОткрытии - как получить эту таблицу?

Спасибо.
1 DGorgoN
 
26.03.13
12:54
7-как точно?
2 Aleksey
 
26.03.13
12:55
можно и в 7-ке, но через ВК
3 Aleksey
 
26.03.13
12:58
пример можно тут глянуть http://infostart.ru/public/18989/
4 Масянька
 
26.03.13
13:00
(2) Я знаю - как?

   мСервис = СоздатьОбъект("Сервис");
   mxl_doctorВК = СоздатьОбъект("AddIn.mxl_doctor");
   mxl_doctorВК.ВылечитьMXL();
Сообщить("1 - " + мСервис.АктивныйКонтекст(РабочаяОбласть));    
   Если мСервис.АктивныйКонтекст(РабочаяОбласть) = 0 Тогда
       Возврат;
   Конецесли;
5 Попытка1С
 
26.03.13
13:01
Кнопку на панель с вызовом обработки

Обработка с кодом

Процедура ПриОткрытии()
   Перем ВыбИмяФайла;
   Перем ВыбИмяКаталога;
   Перем АктивныйКонтекст;
   
   СтатусВозврата(0);
   
   Если (глСервис.АктивныйКонтекст(АктивныйКонтекст) = 1) Тогда
       Если (ТипЗначенияСтр(АктивныйКонтекст) = "Таблица") тогда
           Если (ФС.ВыбратьФайл(1, ВыбИмяФайла, ВыбИмяКаталога, "Выберите файл", "*.xls|*.xls", "xls") = 1) Тогда
               НедопустимыеСимволы = "\/:*?""<>| ";
               
               Для СчетчикЦикла = 1 По СтрДлина(НедопустимыеСимволы) Цикл
                   ВыбИмяФайла = СтрЗаменить(ВыбИмяФайла, Сред(НедопустимыеСимволы, СчетчикЦикла, 1), "_");
               КонецЦикла;
               
               Если НЕ(ВРег(Прав(ВыбИмяФайла, 4)) = ВРег(".xls")) Тогда
                   ВыбИмяФайла = ВыбИмяФайла + ".xls";
               КонецЕсли;
               
               СохранитьМакетВфайл=ВыбИмяКаталога+ВыбИмяФайла;
               
               Если ФС.СуществуетФайл(СохранитьМакетВфайл)=1 Тогда
                   ФС.УдалитьФайл(СохранитьМакетВфайл);
               КонецЕсли;
               
               ТабДокумент = СоздатьОбъект ("ТабличныйДокумент");
               ТабДокумент.ЗагрузитьИзТаблицы (АктивныйКонтекст);
               ТабДокумент.Записать(СохранитьМакетВфайл, 1);
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры // ПриОткрытии()
6 Попытка1С
 
26.03.13
13:03
Если (ЗагрузитьВнешнююКомпоненту(КаталогКомпонент + "FormEx.dll") = 1) Тогда
глСервис = СоздатьОбъект("Сервис");
7 Масянька
 
26.03.13
13:14
(5) Спасибо!
8 Масянька
 
26.03.13
13:21
(7) Еще раз - СПАСИБО!!!!!!
Пошла бантики вешать :))))))))))))
9 Масянька
 
26.03.13
13:22
(5) Маленький вопрос: а можно получить имя таблицы?
10 Злопчинский
 
26.03.13
13:25
Масяня, не изобретай велосипедов
http://infostart.ru/public/14180/
.
упомянутая обработка передает перехваченную таблицу (или таблицы) для отправки на почту, есть точно такой же вариант - который вместо отправки на почту дает возможность сохранить - эксель, моксель, пнг. + куча бантиков дополнительных. в т.ч. и сохранение таблиц прилепленных к форме (например регламентная отчетность).
11 Масянька
 
26.03.13
13:27
(10) ХОЧУ! (веписед :))))))
12 Конфигуратор1с
 
26.03.13
13:29
(11) Анечка! Переходите на 8ку. Ну будь ласочка
13 Масянька
 
26.03.13
13:32
(12)На фиг, на фиг.... И, кстати, захватите, свой график :))))
14 Злопчинский
 
26.03.13
14:41
(10) Оформляй заказ, в течении суток порсле оплаты получишь. С запретом перепродажи/сдачи в аренду/безвозмездного дарения/и прочего третьим лицам. Только себе. А то мы знаем, вас, франчей... ;-0
15 Злопчинский
 
26.03.13
14:42
(12) а шо, в снеговике уже можно извне перехватить любую печформу?
16 chief accountant
 
26.03.13
14:46
(15) ага щаз
17 Масянька
 
26.03.13
14:56
Хватит тут базарить :))))
Как же получить имя таблицы или окна?
18 Масянька
 
26.03.13
15:02
Информатор не помог.....
19 Попытка1С
 
модератор
26.03.13
15:04
Может это подойдет

ПолучитьИменаТаблицы(<?>)
Синтаксис:
ПолучитьИменаТаблицы(<Таблица>)
Назначение:
Возвращает таблицу значений с адресами и идентификаторами поименованных областей
(колонки ТЗ: 'Адрес', 'Идентификатор', 'Лево', 'Верх', 'Право', 'Низ').
Параметры:
<Таблица> - объект "Таблица";
20 Масянька
 
26.03.13
15:13
(19) Не-а.

А где Ёпрст?
21 Масянька
 
26.03.13
16:03
Эх вы.....
А все так просто (до безобразия).

PS А я умнее (тут я язык показываю) :))))))
22 Ёпрст
 
26.03.13
16:34
(20)

на,кинешь в поделку, повешаешь вызов на кнопку в панели струментов:
Перем гТаблица,ВыбНазваниеЛиста,ВыбИмяФайла;

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

Функция Проверка ()
   
   Попытка
       Сервис = СоздатьОбъект("Сервис");
   Исключение
       Если ЗагрузитьВнешнююКомпоненту("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";
   СохранитьТаблицу ();    
КонецПроцедуры
23 Масянька
 
26.03.13
16:50
(22) Ты, блин, поздно пришел :))))

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

Все получилось! Спасибо!
24 Ёпрст
 
26.03.13
16:55
(23)если красиво - то пихай в определенную ячейку мокселя в расшифровку название документа, её и имей потом в качестве названия файла.
25 Ёпрст
 
26.03.13
16:56
когда контекст открытой формы мокселя получишь.
26 Ёпрст
 
26.03.13
16:56
в поделке сохранения
27 Масянька
 
26.03.13
17:10
(26) Вот ты, блин, УМНЫЙ :)))))))
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.