1С+word

SeverBap

Well-Known Member
18.09.2007
451
0
34
г. Брянск
#1
:) ли создовать документ в фомате word из 1С??? и обратно импортировать в 1С 7.7 (если конечно документ соответсвует шаблону)????
Где можно достать информацию с примерами по использованию worda????

Много как всегда хочу!!! Но что поделать!!!

Задумка простая, прикольно но у меня wordа как такового не установлено (у меня опен офисссссссссссссс - блин) вот так я работаю!!!!
 
K

kaa

Гость
#2
[codebox]Если СокрЛП(ПутьКПечФорме)<>"" Тогда
Если Найти(ПутьКПечФорме,".odt")>0 Тогда //OpenOffice
Состояние("Создаем документ OO Writer...");

scr=СоздатьОбъект("MSScriptControl.ScriptControl");
scr.language="javascript";
scr.eval("Massiv=new Array()");
Massiv=scr.eval("Massiv"); //создали массив на ява
ServiceManager=СоздатьОбъект("com.sun.star.ServiceManager");
Scr.AddObject("ServiceManager",ServiceManager);
Desktop=ServiceManager.createInstance("com.sun.star.frame.Desktop"); //сом объект

FileNameSh = СокрЛП(ПутьКПечФорме);
URL = СтрЗаменить(FileNameSh," ","%20");
URL = СтрЗаменить(URL,"\","/");
URL ="file://localhost/" + URL;

Попытка
DocumentSh=Desktop.LoadComponentFromURL(URL,"_blank",0, Massiv ); //шаблон текста
Document=Desktop.LoadComponentFromURL("private:factory/swriter","_blank",0, Massiv ); //новый документ
Исключение
КонецПопытки;

dispatcher = ServiceManager.createInstance("com.sun.star.frame.DispatchHelper"); //компанента для копирования

dispatcher.executeDispatch(DocumentSh.CurrentController.Frame, ".uno:SelectAll", "", 0, Massiv);//выделить все
dispatcher.executeDispatch(DocumentSh.CurrentController.Frame, ".uno:Copy", "", 0, Massiv);//копировать
dispatcher.executeDispatch(Document.CurrentController.Frame, ".uno:Paste", "", 0, Massiv);//вставить в новый документ

DocumentSh.Close(0); //закрываем шаблон

Для Инд=1 По Закладки.РазмерСписка() Цикл
Закладка = СокрЛП(Закладки.ПолучитьЗначение(Инд));
ЗакладкаЦ = Закладка;
Текст = Подстановка(Закладка);
// ишем и заменяем
SearchDesc=Document.createReplaceDescriptor();//компанента для поиска
SearchDesc.SearchString = Закладка;//искомый текст
SearchDesc.ReplaceString = Текст;//замена
Document.replaceAll(SearchDesc);// заменяем все по шаблону
КонецЦикла;

//Сетка
TextTables = Document.getTextTables();//список таблиц документа
Table = TextTables.getByIndex(12);//получаем нужную таблицу
Rows = Table.getRows();//список строк таблицы

ТТрафика = СоздатьОбъект("Справочник.ТипыТрафика");
ТСетка = СоздатьОбъект("Справочник.СеткаТарифов");

ТТрафика.ИспользоватьВладельца(Тариф);
Валюта = Подстановка("ТарифВалюта");
ПервыйПроход=0;
Н=3;
ТТрафика.ВыбратьЭлементы();
Пока ТТрафика.ПолучитьЭлемент()=1 Цикл

Если ТТрафика.ЯвляетсяТарифицируемым = 0 Тогда
Продолжить;
КонецЕсли;
//шапка

Если ПервыйПроход=0 Тогда
Table.getCellByPosition(0,Н).setString(ТТрафика.Наименование);
Cell=Table.getCellByPosition(0,Н); //Ячейка таблицы
CellCursor = Cell.createTextCursor();//выделяем текст
CellCursor.paraAdjust = 0;//0 по левому краю
Н=Н+1;
Rows.insertByIndex(Н,1);//добавляем строку
Table.getCellByPosition(0,Н).setString("Объем трафика");

Cell=Table.getCellByPosition(0,Н); //Ячейка таблицы
CellCursor = Cell.createTextCursor();//выделяем текст
CellCursor.paraAdjust = 1;//1 по правому краю

Table.getCellByPosition(2,Н).setString("Стоимость");
ПервыйПроход=1;
Иначе
Н=Н+1;
Rows.insertByIndex(Н,1);//добавляем строку
Table.getCellByPosition(0,Н).setString(ТТрафика.Наименование);

Cell=Table.getCellByPosition(0,Н); //Ячейка таблицы
CellCursor = Cell.createTextCursor();//выделяем текст
CellCursor.paraAdjust = 0;//0 по левому краю
Н=Н+1;
Rows.insertByIndex(Н,1);//добавляем строку
Table.getCellByPosition(0,Н).setString("Объем трафика");

Cell=Table.getCellByPosition(0,Н); //Ячейка таблицы
CellCursor = Cell.createTextCursor();//выделяем текст
CellCursor.paraAdjust = 1;//1 по правому краю

Table.getCellByPosition(2,Н).setString("Стоимость");
КонецЕсли;
//сетка
ЗнакОбъема = ?(Тариф.ТарифМегабайт=1," Mб."," Гб.");
SearchDesc.SearchString = "ЗнакОбъема";//искомый текст
SearchDesc.ReplaceString = ЗнакОбъема;//замена
Document.replaceAll(SearchDesc);


ТСетка.ИспользоватьВладельца(ТТрафика.ТекущийЭлемент());
ТСетка.ПорядокРеквизита("Интервал");
ТСетка.ВыбратьЭлементы();
ПерваяСтрочкаСетки=0;
Пока ТСетка.ПолучитьЭлемент() = 1 Цикл
Н=Н+1;
Rows.insertByIndex(Н,1);//добавляем строку

Если ПерваяСтрочкаСетки=0 Тогда
Table.getCellByPosition(0,Н).setString("1 Мб.");
Table.getCellByPosition(1,Н).setString(?(ТСетка.Интервал>=9999999.000,"и более",Строка(ТСетка.Интервал)+ЗнакОбъема));
Table.getCellByPosition(2,Н).setString(СокрЛП(Строка(Формат(ТСетка.Стоимость,"Ч15.2. "))));
Table.getCellByPosition(3,Н).setString(Строка(Валюта + ". за 1 "+ЗнакОбъема));
ИнтервалОт=Строка(ТСетка.Интервал);
ПерваяСтрочкаСетки=1;
Иначе
Table.getCellByPosition(0,Н).setString(ИнтервалОт+ЗнакОбъема);
Table.getCellByPosition(1,Н).setString(?(ТСетка.Интервал>=9999999.000,"и более",Строка(ТСетка.Интервал)+ЗнакОбъема));
Table.getCellByPosition(2,Н).setString(СокрЛП(Строка(Формат(ТСетка.Стоимость,"Ч15.2. "))));
Table.getCellByPosition(3,Н).setString(Строка(Валюта + ". за 1 "+ЗнакОбъема));
ИнтервалОт=Строка(ТСетка.Интервал);
КонецЕсли;
КонецЦикла;
КонецЦикла;
dispatcher.executeDispatch(Document.CurrentController.Frame, ".uno:GoToStartOfDoc", "", 0,Massiv);//в начало документа
Иначе//MS Word
Состояние("Создаем документ MS Word...");
Если ФС.СуществуетФайл(ПутьКПечФорме) = 0 Тогда
Предупреждение("Файл шаблона не найден");
Возврат;
КонецЕсли;
Word=СоздатьОбъект("Word.Application");
Word.Options.CheckSpellingAsYouType = 0;
Word.Options.CheckGrammarAsYouType = 0;
Word.Options.CheckGrammarWithSpelling = 0;

Word.Documents.Add(ПутьКПечФорме);
Document=Word.ActiveDocument;

//
ЗнакОбъема = ?(Тариф.ТарифМегабайт=1," Mб."," Гб.");
//
к = Закладки.РазмерСписка();
Для н = 1 по к Цикл
Закладка = СокрЛП(Закладки.ПолучитьЗначение(н));
ЗакладкаЦ = Закладка;
Текст = Подстановка(Закладка);
// Заменяем пока закладки не кончатся
ц = 0;
Пока ц < 10 Цикл
Метка2Текст(ЗакладкаЦ, Текст);
ц = ц + 1;
ЗакладкаЦ = Закладка + СокрЛП(ц);
КонецЦикла;
КонецЦикла;

// Сетка
BookMark = Document.Bookmarks("НачалоСетки");
BookMark.Select();

ТТрафика = СоздатьОбъект("Справочник.ТипыТрафика");
ТСетка = СоздатьОбъект("Справочник.СеткаТарифов");

ТТрафика.ИспользоватьВладельца(Тариф);
ТТрафика.ВыбратьЭлементы();
Валюта = Подстановка("ТарифВалюта");
первый = 1;
Пока ТТрафика.ПолучитьЭлемент() = 1 Цикл
Если ТТрафика.ЯвляетсяТарифицируемым = 0 Тогда
Продолжить;
КонецЕсли;
ВидТрафика = ТТрафика.ТекущийЭлемент();
Для н = 1 по к Цикл
Закладка = СокрЛП(Закладки.ПолучитьЗначение(н));
ЗакладкаЦ = Закладка;
Текст = Подстановка(Закладка);
// Заменяем пока закладки не кончатся
ц = 0;
Пока ц < 10 Цикл
Метка2Текст(ЗакладкаЦ, Текст);
ц = ц + 1;
ЗакладкаЦ = Закладка + СокрЛП(ц);
КонецЦикла;
КонецЦикла;
Если первый = 0 Тогда
Word.Selection.InsertRowsBelow(1);
КонецЕсли;
первый = 0;
Word.Selection.TypeText(СокрЛП(ТТрафика));
Word.Selection.ParagraphFormat.Alignment = 0;
Word.Selection.Borders(-4).LineStyle = 0;
Word.Selection.MoveRight(1);
Word.Selection.Borders(-4).LineStyle = 0;
Word.Selection.MoveRight(1);
Word.Selection.Borders(-4).LineStyle = 0;
Word.Selection.MoveRight(1);
Word.Selection.InsertRowsBelow(1);
Word.Selection.TypeText("Объем трафика");
Word.Selection.ParagraphFormat.Alignment = 2;
Word.Selection.Borders(-4).LineStyle = 0;
Word.Selection.MoveRight(1);
Word.Selection.Borders(-4).LineStyle = 1;
Word.Selection.MoveRight(1);
Word.Selection.TypeText("Стоимость");
Word.Selection.Borders(-4).LineStyle = 0;
Word.Selection.MoveRight(1);
Word.Selection.MoveRight(1);
Word.Selection.InsertRowsBelow(1);
ТСетка.ИспользоватьВладельца(ТТрафика.ТекущийЭлемент());
ТСетка.ПорядокРеквизита("Интервал");

ТСетка.ВыбратьЭлементы();
Если ТСетка.ПолучитьЭлемент() = 1 Тогда
Интервал = ТСетка.Интервал;
Стоимость = ТСетка.Стоимость;
Word.Selection.TypeText("1 Мб");
Word.Selection.Borders(-4).LineStyle = 1;
Word.Selection.MoveRight(1);
Если ТСетка.ПолучитьЭлемент() = 0 Тогда
Word.Selection.TypeText("и более");
Последний = 1;
Иначе
Word.Selection.TypeText(СокрЛП(Интервал)+ЗнакОбъема);
Последний = 0;
КонецЕсли;
Word.Selection.Borders(-4).LineStyle = 1;
Word.Selection.MoveRight(1);
Word.Selection.TypeText(Формат(СокрЛП(Стоимость),"Ч15.2. "));
Word.Selection.Borders(-4).LineStyle = 1;
Word.Selection.MoveRight(1);
Word.Selection.Borders(-4).LineStyle = 1;
Word.Selection.TypeText(Валюта + ". за 1 "+ЗнакОбъема);
Word.Selection.Borders(-4).LineStyle = 1;
КонецЕсли;
Пока Последний = 0 Цикл
Стоимость = ТСетка.Стоимость;
Word.Selection.InsertRowsBelow(1);
Word.Selection.TypeText(СокрЛП(Интервал)+ЗнакОбъема);
Word.Selection.Borders(-4).LineStyle = 1;
Word.Selection.MoveRight(1);
Интервал = ТСетка.Интервал;
Если ТСетка.ПолучитьЭлемент() = 0 Тогда
Word.Selection.TypeText("и более");
Последний = 1;
Иначе
Word.Selection.TypeText(СокрЛП(Интервал)+ЗнакОбъема);
КонецЕсли;
Word.Selection.Borders(-4).LineStyle = 1;
Word.Selection.MoveRight(1);
Word.Selection.TypeText(Формат(СокрЛП(Стоимость),"Ч15.2. "));
Word.Selection.Borders(-4).LineStyle = 1;
Word.Selection.MoveRight(1);
Word.Selection.TypeText(Валюта + ". за 1 "+ЗнакОбъема);
Word.Selection.Borders(-4).LineStyle = 1;
КонецЦикла;
КонецЦикла;

Word.Visible=1;
КонецЕсли;[/codebox]
Есть еще по мелочам :)
 
S

sergeyji

Гость
#5
Книга Андрея Михайлова 1С предприятие системное прграммирование
 

SeverBap

Well-Known Member
18.09.2007
451
0
34
г. Брянск
#8
Как альтернатива опен офиса???

Ведь не у всех установлен офис, но и опен!!!!
у кого есть пример с работой?
 
K

kaa

Гость
#11
Код:
Состояние("Создаем документ OO Writer...");

scr=СоздатьОбъект("MSScriptControl.ScriptControl");
scr.language="javascript";
scr.eval("Massiv=new Array()");
Massiv=scr.eval("Massiv"); //создали массив на ява
ServiceManager=СоздатьОбъект("com.sun.star.ServiceManager");
Scr.AddObject("ServiceManager",ServiceManager);
Desktop=ServiceManager.createInstance("com.sun.star.frame.Desktop"); //сом объект

FileNameSh = СокрЛП(ПутьКПечФорме);
URL = СтрЗаменить(FileNameSh," ","%20");
URL = СтрЗаменить(URL,"\","/"); 
URL ="file://localhost/" + URL;

Попытка
DocumentSh=Desktop.LoadComponentFromURL(URL,"_blank",0, Massiv ); //шаблон текста
Document=Desktop.LoadComponentFromURL("private:factory/swriter","_blank",0, Massiv ); //новый документ
Исключение  	
КонецПопытки;

dispatcher = ServiceManager.createInstance("com.sun.star.frame.DispatchHelper"); //компанента для копирования

dispatcher.executeDispatch(DocumentSh.CurrentController.Frame, ".uno:SelectAll", "", 0, Massiv);//выделить все
dispatcher.executeDispatch(DocumentSh.CurrentController.Frame, ".uno:Copy", "", 0, Massiv);//копировать
dispatcher.executeDispatch(Document.CurrentController.Frame, ".uno:Paste", "", 0, Massiv);//вставить в новый документ

DocumentSh.Close(0); //закрываем шаблон

Для Инд=1 По Закладки.РазмерСписка() Цикл
Закладка = СокрЛП(Закладки.ПолучитьЗначение(Инд));
ЗакладкаЦ = Закладка;
Текст = Подстановка(Закладка); 
// ишем и заменяем
SearchDesc=Document.createReplaceDescriptor();//компанента для поиска
SearchDesc.SearchString = Закладка;//искомый текст
SearchDesc.ReplaceString = Текст;//замена
Document.replaceAll(SearchDesc);// заменяем все по шаблону
КонецЦикла;

//Сетка
TextTables = Document.getTextTables();//список таблиц документа
Table = TextTables.getByIndex(12);//получаем нужную таблицу
Rows = Table.getRows();//список строк таблицы

ТТрафика = СоздатьОбъект("Справочник.ТипыТрафика");
ТСетка = СоздатьОбъект("Справочник.СеткаТарифов");

ТТрафика.ИспользоватьВладельца(Тариф);
Валюта = Подстановка("ТарифВалюта");
ПервыйПроход=0; 
Н=3;
ТТрафика.ВыбратьЭлементы();
Пока ТТрафика.ПолучитьЭлемент()=1 Цикл 

Если ТТрафика.ЯвляетсяТарифицируемым = 0 Тогда
Продолжить;
КонецЕсли;
//шапка

Если ПервыйПроход=0 Тогда
Table.getCellByPosition(0,Н).setString(ТТрафика.Наименование); 
Cell=Table.getCellByPosition(0,Н); //Ячейка таблицы
CellCursor = Cell.createTextCursor();//выделяем текст
CellCursor.paraAdjust = 0;//0 по левому краю
Н=Н+1;
Rows.insertByIndex(Н,1);//добавляем строку
Table.getCellByPosition(0,Н).setString("Объем трафика");

Cell=Table.getCellByPosition(0,Н); //Ячейка таблицы
CellCursor = Cell.createTextCursor();//выделяем текст
CellCursor.paraAdjust = 1;//1 по правому краю

Table.getCellByPosition(2,Н).setString("Стоимость");
ПервыйПроход=1;
Иначе
Н=Н+1;
Rows.insertByIndex(Н,1);//добавляем строку 																			
Table.getCellByPosition(0,Н).setString(ТТрафика.Наименование);

Cell=Table.getCellByPosition(0,Н); //Ячейка таблицы
CellCursor = Cell.createTextCursor();//выделяем текст
CellCursor.paraAdjust = 0;//0 по левому краю
Н=Н+1;
Rows.insertByIndex(Н,1);//добавляем строку
Table.getCellByPosition(0,Н).setString("Объем трафика"); 

Cell=Table.getCellByPosition(0,Н); //Ячейка таблицы
CellCursor = Cell.createTextCursor();//выделяем текст
CellCursor.paraAdjust = 1;//1 по правому краю

Table.getCellByPosition(2,Н).setString("Стоимость");					
КонецЕсли;
//сетка
ЗнакОбъема = ?(Тариф.ТарифМегабайт=1," Mб."," Гб.");
SearchDesc.SearchString = "ЗнакОбъема";//искомый текст
SearchDesc.ReplaceString = ЗнакОбъема;//замена
Document.replaceAll(SearchDesc);


ТСетка.ИспользоватьВладельца(ТТрафика.ТекущийЭлемент());
ТСетка.ПорядокРеквизита("Интервал");
ТСетка.ВыбратьЭлементы();
ПерваяСтрочкаСетки=0;
Пока ТСетка.ПолучитьЭлемент() = 1 Цикл
Н=Н+1;
Rows.insertByIndex(Н,1);//добавляем строку 

Если ПерваяСтрочкаСетки=0 Тогда
Table.getCellByPosition(0,Н).setString("1 Мб.");		 		
Table.getCellByPosition(1,Н).setString(?(ТСетка.Интервал>=9999999.000,"и более",Строка(ТСетка.Интервал)+ЗнакОбъема));
Table.getCellByPosition(2,Н).setString(СокрЛП(Строка(Формат(ТСетка.Стоимость,"Ч15.2. ")))); 
Table.getCellByPosition(3,Н).setString(Строка(Валюта + ". за 1 "+ЗнакОбъема));
ИнтервалОт=Строка(ТСетка.Интервал);
ПерваяСтрочкаСетки=1;
Иначе
Table.getCellByPosition(0,Н).setString(ИнтервалОт+ЗнакОбъема); 
Table.getCellByPosition(1,Н).setString(?(ТСетка.Интервал>=9999999.000,"и более",Строка(ТСетка.Интервал)+ЗнакОбъема));
Table.getCellByPosition(2,Н).setString(СокрЛП(Строка(Формат(ТСетка.Стоимость,"Ч15.2. ")))); 
Table.getCellByPosition(3,Н).setString(Строка(Валюта + ". за 1 "+ЗнакОбъема));
ИнтервалОт=Строка(ТСетка.Интервал);
КонецЕсли;
КонецЦикла;					
КонецЦикла;
dispatcher.executeDispatch(Document.CurrentController.Frame, ".uno:GoToStartOfDoc", "", 0,Massiv);//в начало документа
OpenOffice.org.BASIC Guide найди мне в свое время очень помогло