Имя: Пароль:
1C
1С v8
Сохранение в формате PDF
,
0 Gossar1C
 
15.04.13
10:47
Здравствуйте. Подскажите пожалуйста, при выполнении этого кода

// Заполнение и сохранение в формате PDF, шаблона dot (MSWord)
// Макет тип - Active Document;
Функция Печать(Ссылка) Экспорт
   
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ДоговорыКонтрагентов.Ссылка,
   |    ДоговорыКонтрагентов.Код,
   |    ДоговорыКонтрагентов.Дата,
   |    ДоговорыКонтрагентов.Партнер КАК Партнер,
   |    КонтактныеЛицаПартнеров.Наименование КАК КонтактноеЛицоПартнера,
   |    ДоговорыКонтрагентов.Контрагент КАК КонтрагентДляПоиска,
   |    ДоговорыКонтрагентов.БанковскийСчетКонтрагента.НомерСчета КАК РСПокупателя,
   |    ДоговорыКонтрагентов.БанковскийСчетКонтрагента.Банк.Наименование КАК ВПокупателя,
   |    ДоговорыКонтрагентов.БанковскийСчетКонтрагента.Банк.Код КАК БИКПокупателя,
   |    ДоговорыКонтрагентов.БанковскийСчетКонтрагента.Банк.КоррСчет КАК КСПокупателя
   |ИЗ
   |    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
   |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
   |        ПО ДоговорыКонтрагентов.Партнер = КонтактныеЛицаПартнеров.Владелец
   |ГДЕ
   |    ДоговорыКонтрагентов.Ссылка В(&Ссылка)";
   Запрос.УстановитьПараметр("Ссылка",Ссылка);
   
   РезультатЗапроса = Запрос.Выполнить();
   
   Если НЕ РезультатЗапроса.Пустой() Тогда
       
       Выборка = РезультатЗапроса.Выбрать();
       Выборка.Следующий();
       
       Сведения = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(Выборка.КонтрагентДляПоиска,ТекущаяДата());
       
       ТелефонПартнера = ФормированиеПечатныхФорм.ПолучитьТелефонИзКонтактнойИнформации(Выборка.Партнер);
       АдресПочтыПартнера = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта(Выборка.Партнер,ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.EmailПартнера"));
       ТелефонПокупателя = ФормированиеПечатныхФорм.ПолучитьТелефонИзКонтактнойИнформации(Выборка.КонтрагентДляПоиска);
       АдресПочтыПокупателя = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта(Выборка.КонтрагентДляПоиска,ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.EmailКонтрагента"));
       ОбщаяСтрокаСДатой = "«" + День(Выборка.Дата) + "» " + Формат(Выборка.Дата, "ДФ=ММММ") + " " + Год(Выборка.Дата) + "г.";
       
       ДоговорПоставки = ПолучитьМакет("ДоговорПредоплаты");
       
       MsWord = ДоговорПоставки.Получить();
       //макет является ActiveDocument с загруженым в него Word-файлом
       Попытка
           
           MsWord.Application.Visible = 0;
           Word = MsWord.Application;
           Док = Word.Documents(1);
           Док.Activate();
           
           
           Замена = Док.Content.Find;
           Замена.Execute("[НомерДоговора]", Ложь, Истина, Ложь, , , Истина, , Ложь," " + Выборка.Код);
           
           Замена = Док.Content.Find;
           Замена.Execute("[ОбщаяСтрокаДатой]", Ложь, Истина, Ложь, , , Истина, , Ложь, ОбщаяСтрокаСДатой);
           
           Замена = Док.Content.Find;
           Замена.Execute("[Партнер]", Ложь, Истина, Ложь, , , Истина, , Ложь, Выборка.Партнер.Наименование);
           
           Замена = Док.Content.Find;
           Замена.Execute("[КонтактноеЛицоПартнера]", Ложь, Истина, Ложь, , , Истина, , Ложь, Выборка.КонтактноеЛицоПартнера);
                       
           Замена = Док.Content.Find;
           Замена.Execute("[НазваниеФирмыПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, Сведения["ПолноеНаименование"]);
       
           Замена = Док.Content.Find;
           Замена.Execute("[ЮридическийАдресПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, Сведения["ЮридическийАдрес"]);
           
           Замена = Док.Content.Find;
           Замена.Execute("[ФактическийАдресПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, Сведения["ФактическийАдрес"]);
           
           Замена = Док.Content.Find;
           Замена.Execute("[ТелефонПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, ?(НЕ ЗначениеЗаполнено(ТелефонПокупателя),ТелефонПартнера,ТелефонПокупателя));
           
           Замена = Док.Content.Find;
           Замена.Execute("[ПочтовыйАдресПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, ?(НЕ ЗначениеЗаполнено(АдресПочтыПокупателя),АдресПочтыПартнера,АдресПочтыПокупателя));
                       
           Замена = Док.Content.Find;
           Замена.Execute("[ИННПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, Сведения["ИНН"]);
           
           Замена = Док.Content.Find;
           Замена.Execute("[ОКПОПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, Сведения["КодПоОКПО"]);
                       
           Замена = Док.Content.Find;
           Замена.Execute("[Р/СПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, ?(ЗначениеЗаполнено(Выборка.РСПокупателя),Выборка.РСПокупателя,"<не указан>"));
           
           Замена = Док.Content.Find;
           Замена.Execute("[ВПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, ?(ЗначениеЗаполнено(Выборка.ВПокупателя),Выборка.ВПокупателя,"<не указан>"));
           
           Замена = Док.Content.Find;
           Замена.Execute("[БИКПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, ?(ЗначениеЗаполнено(Выборка.БИКПокупателя),Выборка.БИКПокупателя,"<не указан>"));
           
           Замена = Док.Content.Find;
           Замена.Execute("[К/СПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, ?(ЗначениеЗаполнено(Выборка.КСПокупателя),Выборка.КСПокупателя,"<не указан>"));
           
           Файл = "C:\VremHran" + "\" + "ДоговорПоставки " + СтрЗаменить(Выборка.Код,"/","_");
           //Сохраняем в формате pdf
           Док.SaveAs(Файл,17);
           Док.Close(0);
           
           //Запускаем приложение pdf
           ЗапуститьПриложение(Файл + ".pdf");
       Исключение
           Сообщить(ОписаниеОшибки());
           Word.Quit();
       КонецПопытки;
       
       Word.Quit();
   КОнецЕсли;

КонецФункции

файл сохраняется на сервере где стоит 1С или же у пользователя на компьютере? Клиент - серверный вариант. Просто пытаюсь узнать из за чего крашится база, пишет "Произошла исключательная ошибка и тд.". В файловом варианте работает нормально, заменяет сохраняет открывает. На сервере office стоит
1 cw014
 
15.04.13
10:49
"Произошла исключательная ошибка и тд." - вот самое интересное то наверное в "и тд." находится наверное. да?
2 ДенисЧ
 
15.04.13
10:49
Процедура где выполняется? Если НАСервере, то и файл там же окажется.
3 Gossar1C
 
15.04.13
10:54
(2) на сервере исполняется, папку я могу спокойно создать админских прав не требует (1) что интересно через раз как то выскакивает
4 mzelensky
 
15.04.13
11:00
(3) так а ошибка на каком моменте выходит?! У тебя в нее весь код засунут.

Что-том не ИМХОЕТСЯ, что ты в это

" Замена.Execute("[ЮридическийАдресПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, Сведения["ЮридическийАдрес"]);
"

пытаешься слишком большой текст засунуть. Там ограничение в 128 символов. Если пытаешься засунуть больше -выдается ошибка. Вот и все.
5 mzelensky
 
15.04.13
11:02
(4) Так что убирай свое исключение, отладчик запускай и пошагово прогоняй свой код. Тогда станет все ясно.
6 Wobland
 
15.04.13
11:03
это автор сохраняет вордовский документ с расширением пдф и думает, что это будет пдф? или я где-то недоглядел?
7 mzelensky
 
15.04.13
11:05
(6) походу недоглядел:

" Док.SaveAs(Файл,17);"

на скок я понимаю "17" это код сохраняемого файла (точнее его тип)
8 Fedot200
 
15.04.13
11:06
(6) Док.SaveAs(Файл,17); может эта хитрая строка в ПДФ сохраняет?
9 Aleks73
 
15.04.13
11:08
Зашёл в ворд, сохранил док как пдф. ЧЯНТД ?
10 Wobland
 
15.04.13
11:08
17я строка по списку в мсдне - XML template format
11 Wobland
 
15.04.13
11:10
не, английским по белому сказано, что пдф ;)
http://msdn.microsoft.com/en-us/library/office/bb238158(v=office.12).aspx
12 Gossar1C
 
15.04.13
11:12
(4) тогда почему в файловом нормально заменяет и сохраняет?
13 mzelensky
 
15.04.13
11:14
(12) одно и тоже?! Т.е. в файловом работает ,а в серверном ЭТОЖЕ не работает?!

Проверяй. В любом случае снимай свою попытку и прогоняй отладчиком.

но то, что там ограничение на строку, это 100 ПУДОВ!
14 Gossar1C
 
15.04.13
11:15
(13) ок спс, буду смотреть
15 mzelensky
 
15.04.13
11:17
(14) не забудь о результатах отписаться :)
Основная теорема систематики: Новые системы плодят новые проблемы.