Имя: Пароль:
1C
1С v8
Получение макета ActiveDocument
0 Gossar1C
 
20.08.13
10:17
5 месяцев все работало нормально, и вдруг заглючило =\ заглючило на методе MSWord = ДоговорПоставки.Получить() (Договор Оболочка актив документ), по отладке зависает именно на этом методе =\ перезагрузка, перезапуск службы и тд не помогли...

Функция Печать(Ссылка,ВидДоговора) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ДоговорыКонтрагентов.Ссылка,
    |    ДоговорыКонтрагентов.Код,
    |    ДоговорыКонтрагентов.Дата,
    |    ДоговорыКонтрагентов.Партнер КАК Партнер,
    |    КонтактныеЛицаПартнеров.Наименование КАК КонтактноеЛицоПартнера,
    |    ДоговорыКонтрагентов.Контрагент КАК КонтрагентДляПоиска,
    |    ДоговорыКонтрагентов.БанковскийСчетКонтрагента.НомерСчета КАК РСПокупателя,
    |    ДоговорыКонтрагентов.БанковскийСчетКонтрагента.Банк.Наименование КАК ВПокупателя,
    |    ДоговорыКонтрагентов.БанковскийСчетКонтрагента.Банк.Код КАК БИКПокупателя,
    |    ДоговорыКонтрагентов.БанковскийСчетКонтрагента.Банк.КоррСчет КАК КСПокупателя,
    |    ДоговорыКонтрагентов.Контрагент.ОГРН КАК ОГРНКонтрагента,
    |    ДоговорыКонтрагентов.Контрагент.ОКВЭД КАК ОКВЭДКонтрагента
    |ИЗ
    |    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
    |        ПО ДоговорыКонтрагентов.Партнер = КонтактныеЛицаПартнеров.Владелец
    |ГДЕ
    |    ДоговорыКонтрагентов.Ссылка В(&Ссылка)
    |    И КонтактныеЛицаПартнеров.РолиКонтактногоЛица.РольКонтактногоЛица.Наименование = &Роль";
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    Запрос.УстановитьПараметр("Роль","Генеральный директор");
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Если НЕ РезультатЗапроса.Пустой() Тогда
        
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий();
        
        Сведения = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(Выборка.КонтрагентДляПоиска,ТекущаяДата());
        
        ТелефонПартнера = ФормированиеПечатныхФорм.ПолучитьТелефонИзКонтактнойИнформации(Выборка.Партнер);
        АдресПочтыПартнера = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта(Выборка.Партнер,ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации.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("[ВПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, ?(ЗначениеЗаполнено(Выборка.ВПокупателя),Выборка.ВПокупателя,"<не указан>"));
            
            Замена = Док.Content.Find;
            Замена.Execute("[БИКПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, ?(ЗначениеЗаполнено(Выборка.БИКПокупателя),Выборка.БИКПокупателя,"<не указан>"));
            
            Замена = Док.Content.Find;
            Замена.Execute("[КСПокупателя]", Ложь, Истина, Ложь, , , Истина, , Ложь, ?(ЗначениеЗаполнено(Выборка.КСПокупателя),Выборка.КСПокупателя,"<не указан>"));
            
            Файл = "C:\VremHran" + "\" + "ДоговорПоставки";
            //Сохраняем в формате pdf
            Док.SaveAs(Файл,17);
            
            
            
            ДокументPDF = Новый ДвоичныеДанные(Файл + ".pdf");
            Адрес = ПоместитьВоВременноеХранилище(ДокументPDF);

        Исключение
            Сообщить(ОписаниеОшибки());
            Word.Quit();
        КонецПопытки;
        
        Word.Quit();
        
    КОнецЕсли;
    
    Возврат Адрес;

КонецФункции
1 Gossar1C
 
20.08.13
10:24
up
2 Gossar1C
 
20.08.13
10:34
upp
3 Cyberhawk
 
20.08.13
10:39
Оберни в попытку, а сообщение об ошибке пиши в ЖР в исключении
4 Cyberhawk
 
20.08.13
10:39
Также проверь на другой ОС с другой версией Ворда
5 Gossar1C
 
20.08.13
11:39
Ошибка вызова метода контекста Получить() =\ за 5 месяцев впервые, конфигурацию не обновляли, макеты целые, по отладчику смотрю ДоговорПоставки - ОболочкаАктивДокумента, что за чушь =\
6 Gossar1C
 
20.08.13
11:46
up3
7 Gossar1C
 
20.08.13
12:06
up4
8 Gossar1C
 
20.08.13
12:17
интересно в СП написано что ОболочкаАктивДокумент, метод Получить() Толстый клиент, но ведь до этого работало же в модуле менеджера
9 Gossar1C
 
20.08.13
12:19
да кстати у нас клиент-серверный вариант
10 Gossar1C
 
20.08.13
12:22
up5
11 Cube
 
20.08.13
12:30
Что, никто не помогает? Вместо апов, лучше бы проблему описал нормально. А то выглядит как: Угадайте, что у меня в левом кармане!
12 Gossar1C
 
20.08.13
12:43
(11) вроде бы нормально описал... у нас тонкий клиент (клиент-серверный вариант), есть wordo-вский шаблон, храниться он в макете ActiveDocument, процедура которую я привел выше находится в модуле менеджера. Собственно до этой недели процедура выполнялась на ура, на сервере она получала шаблон, заполняла его, сохраняла в формате PDF, помещала во временное хранилище (Двоичные данные) и на клиенте эти двоичные данные приходили, у пользователя создавался на компьютере рабочий, заполненный PDF - документ. Но теперь почему то стало зависать на методе Получить()...

ОболочкаActiveDocument (ActiveDocumentShell)
Методы:

Записать (Write)
Получить (Get)

Описание:

Используется для доступа к Active document. Объект может быть записан в файл.

Доступность:

Сервер, толстый клиент.

ОболочкаActiveDocument.Получить (ActiveDocumentShell.Get)
ОболочкаActiveDocument (ActiveDocumentShell)
Получить (Get)
Синтаксис:

Получить()
Возвращаемое значение:

Тип: COMОбъект.

Описание:

Получает COMОбъект для программного управления Active document.

Доступность:

Толстый клиент.

ДА, метод Получить() доступен только в Толстом клиенте, скажите дурак мол, но тогда почему эта гребанный метод уже 5 месяцев работал на сервере получается???! конфигурацию мы не обновляли.
13 Gossar1C
 
20.08.13
13:13
up6 или недостаточно ясно объяснил проблему?
14 Gossar1C
 
20.08.13
13:24
up7
15 Gossar1C
 
20.08.13
13:56
up8 сам спросил, сам отвечаю...
16 Ёпрст
 
20.08.13
13:59
переставили платформу/офис/ и тде ?
17 Ёпрст
 
20.08.13
13:59
работало в толстом поди всегда , да ?
18 Gossar1C
 
20.08.13
14:02
(16) попробую сегодня офис переставить

(17) в тонком все, командой в модуль менеджера, насколько я знаю модуль менеджера в УФ выполняется на сервере, однако все работало
19 Gossar1C
 
20.08.13
14:10
Ёпрст, ты на два фронта работаешь чтоли?)
20 Ёпрст
 
20.08.13
14:11
(19) а че ?
я везде :)
21 Gossar1C
 
20.08.13
14:13
:) и все же я удивляюсь выходками 1С... и не могу понять почему работало в модуле менеджера (на сервере), а доступность тонкий клиент
22 Gossar1C
 
20.08.13
14:14
(21) тьфу, доступность толстый клиент*