Печать из 1С в шаблоны Word #469232


#0 by poligraf
Думал всегда, что неплохо Ворд знаю, но тут заковыка Есть вот такая обработка - Не могу и все поле в документе добавить! Делаю, как написано в инструкции - ничего не добавляет. При том, любые поля документа, DocProperty которые, добавляет. Может сначала требуется где-нибудь описать поля?
#1 by hd1
не смотрел обработку, печатаю с закладки word.
#2 by vde69
себе писал универсальную обработку // Обработка выводит в копию файла шаблона ТЗ // Файл шаблона должен иметь название СокрЛП(ИмяШаблона) + ".doc" // и лежать в каталоге  КаталогИБ + "ExtFormsPrnForms" // // Параметры запуска должен быть списком значения: // "Идентификатор"                    - Обязательный // "КаталогДляСохранения"              - Обязательный // "ИмяФайла"                          - Не обязательный (если пусто, то используеться имя шаблона) // "СписокПеременных"               - Не обязательный (Список значений, связь по представлению, см ниже) //   //***************************************************************************************************** //   //              Настройка шаблона WORD //                                                   // В шаблоне должны использоваться поля типа {DOCVARIABLE ИмяПеременной } // переменные Document.Variables могут не существовать, обработка сама добавляет необходимые // Перем СписокПараметров;   Перем ИмяШаблона, КаталогДляСохранения, ИмяФайла, ТЗ;   //******************************************* // функция возвращает строку индикатор длиной 100 символов Функция Обмен_Индикатор(значение, максимум=100)    Если максимум > 0 Тогда        Длина=50;                            Если значение<=0 тогда            стр="";            Для е = 1 по Длина Цикл                стр=стр+".";            КонецЦикла;                    Возврат "[" + стр + "]";        КонецЕсли;                е1="";                    Для е = 1 По Длина Цикл            Если е<=((значение*Длина)/максимум) Тогда                е1=е1+"|";            Иначе                е1=е1+".";            КонецЕсли;                КонецЦикла;        Возврат "[" + е1 + "]";    Иначе        Возврат "";    КонецЕсли; КонецФункции     // функция устанавливает связь с WORD // в качестве параметра требуется имя открываемого файла // в случае удачи возвращает соответствие из обьектов ОЛЕ, в случае не удачи - 0 Функция   WORD_УстановитьСвязь (ПолноеИмяФайла)Экспорт        Результат = 0;    Состояние("Идет установка связи, ждите.....");        Попытка        Результат = СоздатьОбъект("СписокЗначений");        Результат.УдалитьВсе;                                    BaseOLE = СоздатьОбъект("Word.Application");        BaseOLE.ScreenUpdating = 0;          BaseOLE.Visible = 0;        Результат.Установить("WORD", BaseOLE);                                  WORDФайл = BaseOLE.Documents.Add(ПолноеИмяФайла);        Результат.Установить("WORDФайл", WORDФайл);                                        МассивПеременныхДокумента =  СоздатьОбъект("СписокЗначений");        МассивПеременныхДокумента.УдалитьВсе;                                                  КоличествоПеременных = WORDФайл.Fields.Count;          Для е = 1 по КоличествоПеременных Цикл         //Result  Code            ИмяПеременной = "";            ЗнПоля = СокрЛП(WORDФайл.Fields(е).Code.text);            Если ВРег(Лев(ЗнПоля,11)) = "DOCVARIABLE" Тогда                ЗнПоля = СокрЛП(Сред(ЗнПоля, 12));                ИмяПеременной = СокрЛП(Лев(ЗнПоля, Найти(ЗнПоля, " ")));            КонецЕсли;                        Если ИмяПеременной <> "" Тогда                МассивПеременныхДокумента.ДобавитьЗначение(ИмяПеременной);            КонецЕсли;        КонецЦикла;                Результат.Установить("Переменные", МассивПеременныхДокумента);    Исключение        Результат = 0;        Сообщить("Ошибка создания обьекта Microsoft Word" + ОписаниеОшибки);    КонецПопытки;        Возврат Результат; КонецФункции // функция разрывает связь с WORD // в качестве параметра требуеться структура созданая при установке соединения Процедура WORD_РазорватьСвязь (СписокОбьектов) Экспорт    Попытка            СписокОбьектов.Получить("WORDФайл").Close;                СписокОбьектов.Получить("WORD").Quit;        СписокОбьектов.Установить("WORD", 0);        СписокОбьектов.УдалитьВсе;    Исключение        Сообщить(ОписаниеОшибки);    КонецПопытки;                   КонецПроцедуры Процедура ЗакрытьОбработку (ТекстСообщения = "", СписокЗагрузки = 0)    Если ТипЗначенияСтр(СписокЗагрузки) = "СписокЗначений" Тогда        WORD_РазорватьСвязь (СписокЗагрузки);    КонецЕсли;    Если СокрЛП(ТекстСообщения) <> "" Тогда        Сообщить(ТекстСообщения);    КонецЕсли;                                                        СтатусВозврата;          Форма.Закрыть;     КонецПроцедуры Процедура Сохранить        Если    (СокрЛП(КаталогДляСохранения) = "")        или (ФС.СуществуетФайл(СокрЛП(КаталогДляСохранения)) = 0) Тогда        ЗакрытьОбработку ("Не верный каталог для сохранения");        Возврат;    КонецЕсли;                  // подработка имени каталога    Если Прав(СокрЛП(КаталогДляСохранения),1) <> "" Тогда        КаталогДляСохранения = СокрЛП(КаталогДляСохранения) + "";    КонецЕсли;        // подработка имени файла    Если Найти(СокрЛП(ИмяФайла),".") > 0 Тогда        ИмяФайла = Лев(СокрЛП(ИмяФайла), Найти(СокрЛП(ИмяФайла),".") - 1);    КонецЕсли;                // будем подключаться    СписокЗагрузки = WORD_УстановитьСвязь (КаталогИБ + "ExtFormsPrnForms"+ СокрЛП(ИмяШаблона) + ".doc");                Если СписокЗагрузки = 0 тогда          ЗакрытьОбработку ("Ошибка подключения к шаблону");        Возврат;    КонецЕсли;              Попытка                                                    СписокЗагрузки.Получить("WORD").DisplayAlerts = 0;        СписокЗагрузки.Получить("WORDФайл").SaveAs(СокрЛП(КаталогДляСохранения) + СокрЛП(ИмяФайла) + ".doc");        СписокЗагрузки.Получить("WORD").DisplayAlerts = -1;    Исключение        ЗакрытьОбработку ("Неудачное копирование шаблона, " + ОписаниеОшибки, СписокЗагрузки);        Возврат;    КонецПопытки;                      СписокПеременныхДокумента = СписокЗагрузки.Получить("Переменные");        Для е = 1 по СписокПеременныхДокумента.РазмерСписка Цикл                  Состояние("Заполнение шапки " + Обмен_Индикатор(е, СписокПеременныхДокумента.РазмерСписка));                ИмяПеременной = СокрЛП(СписокПеременныхДокумента.ПолучитьЗначение(е));        ЗначениеПеременной = СписокПараметров.Получить(ИмяПеременной);        Если СокрЛП(ЗначениеПеременной) = "" Тогда            ЗначениеПеременной = " ";  // пустое значение в переменную ворда не записывается, будем писать пробел        КонецЕсли;        ЕстьПерем = 0;        КоличествоПеременных = СписокЗагрузки.Получить("WORDФайл").Variables.Count;        Для е1 = 1 по КоличествоПеременных Цикл            Если СокрЛП(СписокЗагрузки.Получить("WORDФайл").Variables(е1).Name) = ИмяПеременной Тогда                ЕстьПерем = 1;                Прервать;            КонецЕсли;            КонецЦикла;                                Если ЕстьПерем = 0 Тогда            СписокЗагрузки.Получить("WORDФайл").Variables.Add(ИмяПеременной, ЗначениеПеременной);        Иначе            СписокЗагрузки.Получить("WORDФайл").Variables(ИмяПеременной).Value = ЗначениеПеременной;        КонецЕсли;    КонецЦикла;        // все теперь запишем    Попытка        СписокЗагрузки.Получить("WORD").DisplayAlerts = 0;        СписокЗагрузки.Получить("WORDФайл").Fields.Update;        СписокЗагрузки.Получить("WORDФайл").SaveAs(СокрЛП(КаталогДляСохранения) + СокрЛП(ИмяФайла) + ".doc");          СписокЗагрузки.Получить("WORD").DisplayAlerts = -1;    Исключение        ЗакрытьОбработку ("Неудачное сохранение шаблона", СписокЗагрузки);        Возврат;    КонецПопытки;                          // усе, можно выходить    ЗакрытьОбработку ("Файл удачно сохранен", СписокЗагрузки); КонецПроцедуры Процедура ПриОткрытии    ТекСписокПараметров = Форма.Параметр;                Если ТипЗначенияСтр(ТекСписокПараметров) = "СписокЗначений" Тогда        // загрузим параметры        Попытка            ИмяШаблона                = СокрЛП(ТекСписокПараметров.Получить("Идентификатор"));            КаталогДляСохранения    = СокрЛП(ТекСписокПараметров.Получить("КаталогДляСохранения"));            ИмяФайла                = СокрЛП(ТекСписокПараметров.Получить("ИмяФайла"));            СписокПараметров        = ТекСписокПараметров.Получить("СписокПеременных");            Если СокрЛП(ИмяФайла) = "" Тогда                ИмяФайла = ИмяШаблона;            КонецЕсли;                        Если ТипЗначенияСтр(СписокПараметров) <> "СписокЗначений" Тогда                СписокПараметров = СоздатьОбъект("СписокЗначений");                СписокПараметров.УдалитьВсе;            КонецЕсли;        Исключение            ЗакрытьОбработку ("Ошибка параметров");            Возврат;        КонецПопытки;                                              // авто выполнение        Сохранить;        Форма.Закрыть;    КонецЕсли;     КонецПроцедуры                               ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.Очистить; СписокПараметров = СоздатьОбъект("СписокЗначений"); СписокПараметров.УдалитьВсе; Описание = "Обработка выводит в копию файла шаблона список переменных |Файл шаблона должен иметь название СокрЛП(ИмяШаблона) + "".doc"" |и лежать в каталоге  КаталогИБ + ""ExtFormsPrnForms"" | |Параметры запуска должен быть списком значения: |""Идентификатор"" - Обязательный |""КаталогДляСохранения"" - Обязательный |""ИмяФайла"" - Не обязательный (если пусто, то используеться имя шаблона) |""СписокПеременных"" - Не обязательный (Список значений, связь по представлению, см ниже) |"
#3 by poligraf
та обработка, как я понимаю то же самое делает. У тебя, судя по "КоличествоПеременных = WORDФайл.Fields.Count", тоже работает с полями в документе. Я не могу в Ворде поля создать:) Через вставить - поле - DocVariable Имя поля пишу - ничего не добавляется
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С