1. Мегаконкурс в апреле "Приведи друзей на codeby". Дарим деньги, подписку на журнал хакер и выдаем статус "Paid Access". Подробнее ...

    Скрыть объявление

1С+word

Тема в разделе "1C и всё что с ней связано", создана пользователем SeverBap, 24 окт 2008.

Наш партнер Genesis Hackspace
  1. SeverBap

    SeverBap Well-Known Member
    1C Team

    Регистрация:
    18 сен 2007
    Сообщения:
    450
    Симпатии:
    0
    :) ли создовать документ в фомате word из 1С??? и обратно импортировать в 1С 7.7 (если конечно документ соответсвует шаблону)????
    Где можно достать информацию с примерами по использованию worda????

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

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

    kaa Гость

    [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]
    Есть еще по мелочам :)
     
  3. SeverBap

    SeverBap Well-Known Member
    1C Team

    Регистрация:
    18 сен 2007
    Сообщения:
    450
    Симпатии:
    0
    Ты просто крут!!!!!! Спасибо!!!
    Что у тебя есть по мелочам??? :blink: :)
     
  4. kaa

    kaa Гость

    Долго живу много работаю :)
     
  5. sergeyji

    sergeyji Гость

    Книга Андрея Михайлова 1С предприятие системное прграммирование
     
  6. SeverBap

    SeverBap Well-Known Member
    1C Team

    Регистрация:
    18 сен 2007
    Сообщения:
    450
    Симпатии:
    0
    sergeyji
    да есть оно уже у меня вот читал!!!
     
  7. sergeyji

    sergeyji Гость

    так а что конкретно надо
     
  8. SeverBap

    SeverBap Well-Known Member
    1C Team

    Регистрация:
    18 сен 2007
    Сообщения:
    450
    Симпатии:
    0
    Как альтернатива опен офиса???

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

    sergeyji Гость

    А что такое open?
     
  10. SeverBap

    SeverBap Well-Known Member
    1C Team

    Регистрация:
    18 сен 2007
    Сообщения:
    450
    Симпатии:
    0
    Опен офис - альтернатива майкрософта!!!
     
  11. kaa

    kaa Гость

    Код (Text):
    Состояние("Создаем документ 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 найди мне в свое время очень помогло
     

Поделиться этой страницей