|
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. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |