Имя: Пароль:
1C
1С v8
ActiveX екселя внутри 1С
0 AdApter
 
05.08.11
11:43
Подскажите как отобразить окно Excel на форме 1С8, чтобы пользователь мог ввести данные в лист? Наверное надо какой-то ActiveX использовать. Пробовал OWC SpreadSheet, но он не поддерживает многих функций большого экселя. Например переносы в строках. Хорошо было бы использовать Internet Explorer, но в нем при открытии xls вопрос выскакивает "открыть или сохранить". Как бы обойти это окошко через DOM браузера например?
1 AdApter
 
05.08.11
11:47
Up
2 crazy_killer
 
05.08.11
11:52
может через active document как-нибудь, там вроде полноценный эксель выскакивает
3 AdApter
 
05.08.11
11:54
active document не дает пользователю возможность интерактивной работы с excel, можно менять только программно
4 AdApter
 
05.08.11
12:00
В браузере можно открыть xls и этой воможности вполне достаточно для интерактивной работы пользователя (т.е. IE использует какой то ActiveX Excel)

Rак сделать html, чтобы при открытии он сам загружал и показывал xls?
5 AdApter
 
05.08.11
12:15
up
6 Asmody
 
05.08.11
12:20
Реквизит1="<html><body style=""margin:0;padding:0;""><iframe width=100% height=100% src=""file:///c:\doc.doc"">Нет фреймам!</iframe></body></html>";
7 vde69
 
05.08.11
12:22
зачем? ну открыл что-то сделал и дальше чего с файлом делаешь?
8 AdApter
 
05.08.11
12:31
(6) открылся пустой фрейм. Можешь htm на мыло сбросить ?

(7) ну дальше уже для вопроса не важно, есть механизм который обрабатывает данные этих файлов. Надо чтобы пользователь внес туда цифры, а потом сохранил файл кнопкой на форме 1С.
9 Asmody
 
05.08.11
12:33
(8) весь html в (6)
10 vde69
 
05.08.11
12:38

Процедура ПередЗакрытиемДокументаWord(Документ, Отмена)
   
   Документ.Save();
   
КонецПроцедуры

Процедура ВыходИзWord()
   
   ВременноеХранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяВременногоФайла));
   
   // удалим временный файл
   ИмяКаталога = ""; ИмяФайла = "";
   РаботаСФайлами.ПолучитьКаталогИИмяФайла(ИмяВременногоФайла, ИмяКаталога, ИмяФайла);
   УдалитьФайлы(ИмяКаталога, ИмяФайла);
   
   ИмяВременногоФайла = "";
   Модифицированность = Истина;
   
КонецПроцедуры

......
......
......

       ИмяВременногоФайла = ПолучитьИмяВременногоФайла("doc");
       Если ВременноеХранилище <> Неопределено Тогда
           Doc = ВременноеХранилище.Получить();
       ИначеЕсли ЗначениеЗаполнено(Хранилище) тогда
           Doc = Хранилище.Шаблон.Получить();
       Иначе
           Doc = Неопределено;
       КонецЕсли;
       
       Word = Новый COMОбъект("Word.Application");
       Word.Visible = Ложь;
       Попытка
           
           Если Doc <> Неопределено Тогда
               Doc.Записать(ИмяВременногоФайла);
               Word.Documents.Open(ИмяВременногоФайла,,,,,,,,,,,Ложь);
               
//Function Open ( _
//    1 FileName As Object, _
//    2 ConfirmConversions As Object, _
//    3 ReadOnly As Object, _
//    4 AddToRecentFiles As Object, _
//    5 PasswordDocument As Object, _
//    6 PasswordTemplate As Object, _
//    7 Revert As Object, _
//    8 WritePasswordDocument As Object, _
//    9 WritePasswordTemplate As Object, _
//    10 Format As Object, _
//    11 Encoding As Object, _
//    12 Visible As Object, _
//    13 OpenAndRepair As Object, _
//    14 DocumentDirection As Object, _
//    15 NoEncodingDialog As Object, _
//    15 XMLTransform As Object _
//) As Document                
               
           Иначе
               Word.Documents.Add();
               Word.Documents(1).SaveAs(ИмяВременногоФайла);
           КонецЕсли;
           
           Document = Word.Documents(1);
           Document.Activate();
           Selection = Word.Selection;

           Word.Visible = Истина;
           
           Если не ТолькоЧтение Тогда
               ДобавитьОбработчик Word.DocumentBeforeClose, ПередЗакрытиемДокументаWord;
               ДобавитьОбработчик Word.Quit, ВыходИзWord;
           Иначе
               // если ворд открыт на чтение, то имя файла нигде не нужно
               ИмяВременногоФайла = "";
           КонецЕсли;
           
       Исключение
           Word.Visible = Истина;
       КонецПопытки;

[\1c]

поставь отладчик в первые 2 процедуры и будешь удивлен :)
11 AdApter
 
05.08.11
12:54
О, ДобавитьОбработчик. Классная штука! попробую через нее. Конечно не очень юзабельно что будет открываться второе окно, за пределами окна 1С, но лучше чем ничего
12 AdApter
 
05.08.11
12:57
при этом придется заморачиваться с защитой листа, ячеек, убирать программно панели редактирования Ексель. и все равно остаются еще дырки для изменения структуры таблички, шрифтов, форматирования и пр.
13 AdApter
 
05.08.11
12:59
to vde69 - но у меня почему-то пустой фрейм, док в нем не загружается, ошибок не выдает. а у тебя как?
14 vde69
 
05.08.11
13:00
(13) к сожалению работает только на толстом клиенте
15 vde69
 
05.08.11
13:00
(13) 100% рабочий код, использую больше года
16 AdApter
 
05.08.11
13:07
да, стало открывать! проблема была в русских буквах и пробелах в пути к файлу. только все равно выдает запрос "открыть \сохранить".

(А мне толстый клиент и нужен)
17 AdApter
 
05.08.11
13:08
как сделать чтобы открывалось без запроса?
18 AdApter
 
05.08.11
13:34
up2
19 vde69
 
05.08.11
13:40
(17) код показывай

что-бы не было вопросов используй DisplayAlerts = 0
http://infostart.ru/public/57401/

только используй ОСТОРОЖНО, вещь опасная :)
20 AdApter
 
05.08.11
13:47
код твой :)

<html>
<head>
</head>

<body>

<p><iframe name="I1" src="file:///O:/test1.xls">
sdfsdfsdf
</iframe></p>

</body>

</html>

в окне вопроса есть галочка "больше не спрашивать". Видимо у тебя установлена, поэтому не выскакивает. А мне под каждого пользователя руками ее ставить?
21 vde69
 
05.08.11
13:55
(20) тагды в хелп екселя, ищи параметры запуска, там вроде было что-то подобное
22 AdApter
 
05.08.11
15:38
есть!. Чтобы в браузере запрос не выскакивал надо поправить реестр

[HKEY_CLASSES_ROOT\Excel.Sheet.8]
"EditFlags"=dword:00010000

Всем спасибо!
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.