|   |   | 
| 
 | v7: Выгрузка из ЗиК в WORD | ☑ | ||
|---|---|---|---|---|
| 0
    
        olmi 25.10.12✎ 23:47 | 
        Кадровиков не устраивает формат приказов в 1С, они их вручную перебивают в WORD, в болванку из Консультанта Плюс. Просят автоматизировать. С Excelем я работала, с WORDом не приходилось.
  Заранее благодарю за любую подсказку!) | |||
| 1
    
        vah1 25.10.12✎ 23:52 | 
        в сто раз удобней чем в ексель, и потом править могут, типа расшифровку подписи, если желание есть
  (0) под рукой примера нет, но в консультанте возми любой, где название конторы выводится - больше ничего знать и не надо | |||
| 2
    
        olmi 26.10.12✎ 00:07 | 
        (1) Что я могу взять в Консультанте? И где там смотреть? Я с ним не работала, но доступ есть.
  Мне надо операторы Word-овские знать для поиска нужного места в WORD-овском файле и вставки туда значений через ОЛЕ. Я наискось прочитала, что есть что-то типа шаблонов и закладки какие-то, но с этим не знакома пока. | |||
| 3
    
        zladenuw 26.10.12✎ 00:25 | 
        если предложу опен офис :). если не против. помогу     | |||
| 4
    
        zladenuw 26.10.12✎ 00:26 | 
        в опене находил нужное и менял на свое. в удаленке кописпаст сделаю     | |||
| 5
    
        zladenuw 26.10.12✎ 00:28 | 
        ня. я щедрый
  Процедура ПечатьОпен(пЗаявка,ИмяФайла) Экспорт мВыбФайл = "\\1CSQL2\storage\1С\Total\ВнешниеПечатныеФормы\"+ИмяФайла; sUrl = URLИзИмениФайла(мВыбФайл); Файл = Соединение.LoadComponentFromURL(sUrl, "_blank", 0, MassivParametrov); Масс = Новый Массив(); КолЛистов = Файл.GetSheets().GetCount(); Если Найти(ИмяФайла,"F1")>0 Тогда Попытка ТекущийЛист = Файл.sheets.getByIndex(0); ReplaceDescriptor = ТекущийЛист.createReplaceDescriptor(); ReplaceDescriptor.SearchString = "code"; ReplaceDescriptor.ReplaceString = СокрЛП(пЗаявка.Номер); ТекущийЛист.replaceAll(ReplaceDescriptor); ReplaceDescriptor = ТекущийЛист.createReplaceDescriptor(); ReplaceDescriptor.SearchString = "Date"; ReplaceDescriptor.ReplaceString = СокрЛП(пЗаявка.Дата); ТекущийЛист.replaceAll(ReplaceDescriptor); ReplaceDescriptor = ТекущийЛист.createReplaceDescriptor(); ReplaceDescriptor.SearchString = "@incde"; ReplaceDescriptor.ReplaceString = СокрЛП(пЗаявка.Авто.Кузов); ТекущийЛист.replaceAll(ReplaceDescriptor); ReplaceDescriptor = ТекущийЛист.createReplaceDescriptor(); ReplaceDescriptor.SearchString = "Klient"; ReplaceDescriptor.ReplaceString = СокрЛП(пЗаявка.Клиент); ТекущийЛист.replaceAll(ReplaceDescriptor); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Иначе Попытка ТекущийЛист = Файл.sheets.getByIndex(0); ReplaceDescriptor = ТекущийЛист.createReplaceDescriptor(); ReplaceDescriptor.SearchString = "code"; ReplaceDescriptor.ReplaceString = СокрЛП(пЗаявка.Номер); ТекущийЛист.replaceAll(ReplaceDescriptor); ReplaceDescriptor = ТекущийЛист.createReplaceDescriptor(); ReplaceDescriptor.SearchString = "Date"; ReplaceDescriptor.ReplaceString = СокрЛП(пЗаявка.Дата); ТекущийЛист.replaceAll(ReplaceDescriptor); ReplaceDescriptor = ТекущийЛист.createReplaceDescriptor(); ReplaceDescriptor.SearchString = "@incde"; ReplaceDescriptor.ReplaceString = СокрЛП(пЗаявка.Авто.Кузов); ТекущийЛист.replaceAll(ReplaceDescriptor); ReplaceDescriptor = ТекущийЛист.createReplaceDescriptor(); ReplaceDescriptor.SearchString = "Klient"; ReplaceDescriptor.ReplaceString = СокрЛП(пЗаявка.Клиент); ТекущийЛист.replaceAll(ReplaceDescriptor); ReplaceDescriptor = ТекущийЛист.createReplaceDescriptor(); ReplaceDescriptor.SearchString = "emploe"; ReplaceDescriptor.ReplaceString = СокрЛП(пЗаявка.Менеджер); ТекущийЛист.replaceAll(ReplaceDescriptor); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли; //ТекущийЛист.replaceAll(ReplaceDescriptor); //Args = Новый COMSafeArray("copycount", 1); //Файл.Print(MassivParametrovPrint); мВыбФайл = "\\1CSQL2\storage\1С\Total\Печать\"+СокрЛП(глТекущийПользователь)+ИмяФайла; sUrl = URLИзИмениФайла(мВыбФайл); Попытка Файл.storeAsURL(sUrl, MassivParametrovSave); Файл.Close(true); ЗапуститьПриложение(мВыбФайл); Исключение Сообщить("Такой файл уже открыт. закройте его!"); КонецПопытки; // //Файл = Неопределено; //ТекущийЛист = Неопределено; КонецПроцедуры //Подключение к серверу автоматизации OpenOffice Попытка OpenOffice = Новый COMОбъект("com.sun.star.ServiceManager"); scr = Новый COMОбъект("MSScriptControl.ScriptControl"); scr.language = "javascript"; scr.eval("MassivParametrov = new Array()"); MassivParametrov = scr.eval("MassivParametrov"); scr.AddObject("OpenOffice", OpenOffice); scr.eval("MassivParametrov[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("MassivParametrov[0].Name='Hidden'"); scr.eval("MassivParametrov[0].Value=true"); scr.eval("MassivParametrovSave = new Array()"); MassivParametrovSave = scr.eval("MassivParametrovSave"); scr.eval("MassivParametrovSave[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("MassivParametrovSave[0].Name='Overwrite'"); scr.eval("MassivParametrovSave[0].Value=true"); scr.eval("MassivParametrovPrint = new Array()"); MassivParametrovPrint = scr.eval("MassivParametrovPrint"); scr.eval("MassivParametrovSave[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("MassivParametrovSave[0].Name='copycount'"); scr.eval("MassivParametrovSave[0].Value=1"); Соединение = OpenOffice.createInstance("com.sun.star.frame.Desktop"); Исключение Сообщить(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice не установлена на данном компьютере!"); КонецПопытки; | |||
| 6
    
        vah1 26.10.12✎ 00:29 | 
        док открыть и как в екселе макросы редактировать знаешь, так и в ворде - это ж не отдельные проги в мс офис, да и в опене аналогично     | |||
| 7
    
        vah1 26.10.12✎ 00:33 | 
        + в доке текст зарание рисуешь, а переменные д/подстановки рисуешь например так
  ФИО _ФИО_ что бы не перепутать | |||
| 8
    
        vah1 26.10.12✎ 00:37 | 
        вообще-то и гугле примеров дофика:
  1C Word | |||
| 9
    
        olmi 26.10.12✎ 00:38 | 
        Завтра с утра все посмотрю, спасибо, ребята). Я тут пока тоже нарыла всякого). Если что не пойму - завтра спрошу, а пока пора и отдохнуть). Спокойной ночи и хорошего настроения!)     | |||
| 10
    
        olmi 26.10.12✎ 01:05 | 
        Думаю, сделаю просто через закладки, завтра поэкспериментирую).
  Что-то в этом духе: Word=СоздатьОбъект("Word.Application"); Документ=Word.Application.Documents.Open(НазваниеФайла); КолЗакладок=Документ.Bookmarks.Count; Для Инд=1 По КолЗакладок Цикл Закладка=Документ.Bookmarks(1).Name; Если Закладка="ДатаДоговора" Тогда Документ.Bookmarks(Инд).Range.Text="01 января 2004г."; ИначеЕсли Закладка="НомерДоговора" Тогда Документ.Bookmarks(Инд).Range.Text="Е-200/15"; КонецЕсли; КонецЦикла; Word.Application.DisplayAlerts = 0; Документ.PrintOut(); Word.Quit(); Word=""; Еще не смотрела, что такое DisplayAlerts, а так все предельно просто). | |||
| 11
    
        zladenuw 26.10.12✎ 01:05 | 
        оно везде так. если понимаешь     | |||
| 12
    
        vah1 26.10.12✎ 01:09 | 
        (10) ну, легче чем ячейки многострочные в екселе программно раздвигать?     | |||
| 13
    
        vah1 26.10.12✎ 01:11 | 
        вообщем, когда пиво будешь - нас позови :))     | |||
| 14
    
        zladenuw 26.10.12✎ 01:27 | 
        (13) далеко. но я за. надо сказать модерам. за счетчик пива за ТС :) и за сроки реализации пива :) ы     | |||
| 15
    
        olmi 30.10.12✎ 01:34 | 
        (11)-(13) Золотые мои ребята!) С пивом, увы, только виртуально, а так все работает). Спасибо за поддержку!)
  Сделала через шаблон вот по такой болваночке, решив, что пусть они печатают, если хочут, и пусть видят, чего печатали). ПутьШаблона = СокрЛП(КаталогИБ()+"\ExtForms\Закладки.dot"); Если ФС.СуществуетФайл(ПутьШаблона)=0 Тогда Предупреждение("Не найден файл "+ПутьШаблона); Возврат; КонецЕсли; Word = СоздатьОбъект("Word.Application"); Word.visible=0; Word.Documents.Add(ПутьШаблона); Док = Word.ActiveDocument; КолЗакладок=Док.Bookmarks.Count; Для Инд=1 По КолЗакладок Цикл Закладка=Док.Bookmarks(Инд).Name; Если Закладка="З1" Тогда Док.Bookmarks(Инд).Range.Text=СокрЛП(Сотрудник.Наименование); ИначеЕсли Закладка="З2" Тогда Док.Bookmarks(Инд).Range.Text=Строка(ДатаПриема); ИначеЕсли Закладка="З3" Тогда Док.Bookmarks(Инд).Range.Text=СокрЛП(Подразделение.Наименование); ИначеЕсли Закладка="З4" Тогда Док.Bookmarks(Инд).Range.Text=СокрЛП(Должность.Наименование); КонецЕсли; КонецЦикла; Док.SaveAs("c:\...\Приказ о приеме на работу № "+НомерДок+" от "+Строка(ДатаДок)+".rtf"); Word.Application.DisplayAlerts = 0; Если Вопрос("Печатаем?","Да+Нет")="Да" Тогда Док.PrintOut(-1); //Док.PrintOut(); КонецЕсли; Word.visible=1; Word.Activate(); //Word.Quit(); //Word=""; Сорри за задержку ответа, другим пришлось заняться). Успехов, хорошего настроения, прохладного пива в теплой комнате!) | |||
| 16
    
        Ant1773 30.10.12✎ 07:34 | 
        У меня стандартный вопрос - А ЗАЧЕМ??? 
  Ну не устраивает их типовая форма приказа в 1С - нужно сделать такую, чтобы устраивала. | |||
| 17
    
        Морозов Александр 30.10.12✎ 07:38 | 
        а чего внешнюю печатную форму никак?     | |||
| 18
    
        dk 30.10.12✎ 07:58 | 
  | |||
| 19
    
        dk 30.10.12✎ 08:00 | 
        это для 2010-го, но в 2007 тоже должон нормально работать     | |||
| 20
    
        mzelensky 30.10.12✎ 08:15 | 
        (18) а зачем эти ухищрения:
  Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl"); Скрипт.language="javascript"; Ворд = Скрипт.Eval("new ActiveXObject('Word.Application')"); ??? | |||
| 21
    
        dk 30.10.12✎ 08:27 | 
        (20) чтобы новый экземпляр ворда получить, а не "приклеиваться" к существующему.     | |||
| 22
    
        mzelensky 30.10.12✎ 09:02 | 
        (21) попробовал с этим....честно говоря разницы не увидел :(     | |||
| 23
    
        dk 30.10.12✎ 09:27 | 
        это критично, если пользователь уже интерактивно работает с Excel / Word и в коде используются selection или еще что-нить интерактивное.
  Например ты выполняешь код на VBA, а юзер тут решил закрыть приложение --- кому-то критично, а кому-то пофиг | |||
| 24
    
        olmi 15.11.12✎ 21:02 | 
        Ребята, уже задним числом сюда заглянула)... Все просто решилось - налепила закладок, сделала шаблоны, в ExtForms их, в документах приказов в СписокЗначений забила нужное для закладок текстами, и все в обработочку. При закрытии обработки по ОК вызываю процедурку создания файла WORD, и в ней из списка в закладки все закидываю, потом документ сохраняю и активизирую). 
  Вот код процедурки: Процедура ПолучитьФайлWORD(КодОш) Если ТекКаталог="" Тогда Сообщить("Константа пути к файлам приказов данного вида не заполнена!","!"); КодОш=1; Возврат; КонецЕсли; ПутьШаблона = СокрЛП(КаталогИБ()+"\ExtForms\"+НаимШаблона+".dot"); Если ФС.СуществуетФайл(ПутьШаблона)=0 Тогда Предупреждение("Не найден файл "+ПутьШаблона); КодОш=1; Возврат; КонецЕсли; НовыйФайл=СокрЛП(ТекКаталог)+"\"+НаимДок+".rtf"; Если ФС.СуществуетФайл(НовыйФайл)=1 Тогда Если Вопрос("Файл данного документа в WORD уже создан. Перезаписать?","Да+Нет")="Да" Тогда ФС.УдалитьФайл(НовыйФайл); Иначе Возврат; КонецЕсли; КонецЕсли; Word = СоздатьОбъект("Word.Application"); Word.visible=0; Word.Documents.Add(ПутьШаблона); Док = Word.ActiveDocument; КолЗакладок=Док.Bookmarks.Count; //Для Инд=1 По КолЗакладок Цикл // Сообщить(Док.Bookmarks(Инд).Name); //КонецЦикла; //Док.Close(); //Word.Quit(); //Возврат; Если КолЗакладок=СписокПараметров.РазмерСписка() Тогда Для Инд=1 По КолЗакладок Цикл Док.Bookmarks(Инд).Range.Text=СписокПараметров.ПолучитьЗначение(Инд); КонецЦикла; Иначе Сообщить("Количество закладок в шаблоне WORD не соответствует количеству выводимых реквизитов документа." +РазделительСтрок+"Обратитесь к программисту 1С.","!"); Word.Quit(); Word=""; КодОш=1; Возврат; КонецЕсли; Док.SaveAs(НовыйФайл); Word.Application.DisplayAlerts = 0; //Если Вопрос("Печатаем?","Да+Нет")="Да" Тогда // Док.PrintOut(-1); //КонецЕсли; Word.visible=1; Word.Activate(); //Предупреждение("Файл "+НовыйФайл+" создан и открыт."); Сообщить("Файл "+НовыйФайл+" создан и открыт."); КонецПроцедуры | |||
| 25
    
        Lama12 15.11.12✎ 22:13 | 
        Как все усложняет :)
  Сохраняем в mxl Открываем в "работа с файлами 1с" Сохраняем в word. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |