Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

В печатной форме сложная ошибка, которую невозможно отладить

В печатной форме сложная ошибка, которую невозможно отладить
Я
   ilnar4888
 
19.08.20 - 16:55
Написал печатную форму для ЗУП31(управляемое приложение). Суть в том что на сервере получаем макет в виде двоичного документа(в двоичном документе содержится документ Ворд), кладём в временное хранилище и вытаскиваем его на клиенте. И всё это работает когда я его тестирую через "файл открыть". Но самое интересное впереди. Когда загружаю печатную форму в дополнительные отчёты и обработки и вызываю его из документа он отрабатывает нормально, но когда вызываю из другого документа(где он по условиям должен подтянуть другой макет) он вызывает старый макет который был открыт ранее. Подскажите в чём может быть причина?
&НаКлиенте
Процедура СобратьМакет(СсылкаНаОбъект)
    
    //Данные = ПолучитьДанные(СсылкаНаОбъект); //получить данные для заполнения макета по параметрам в виде структуры
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("doc");
    Адрес = ФормированиеДоговораПоШаблону(); // положить макет во временное хранилище на сервере и получить адрес на клиент
    
    Если Адрес = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Макет = ПолучитьИзВременногоХранилища(Адрес); //получить макет из временного хранилища
    Макет.Записать(ИмяВременногоФайла); //создать документ на основе макета в TEMP клиента
    УдалитьИзВременногоХранилища(Адрес);
    Документ = ПолучитьCOMОбъект(ИмяВременногоФайла);
    //Word = Новый COMОбъект("Word.Application");
    //Word.Documents.add(ИмяВременногоФайла);//создаем COMОбъект
    //Документ = Word.Documents.Open(ИмяВременногоФайла); //подключаем макет к созданному COMОбъект
    Попытка
        //ДокументЗаполнение = Документ.Application.Documents(1);
        //Получить объект, который будем использовать для поиска и замены.
        //Данные.Вставить("НомерДоговора", "125");
        //ДокументЗаполнение = Документ.Application.Documents(1);
        //Документ = Word.Application.Documents(1);
        //ДокументВорд.Activate();
        Выборка = ЗапросВМассиве(СсылкаНаОбъект)[0];
        Документ.Variables.Item("ДоговорНомер").Value= Выборка.ДоговорНомер;
        Документ.Variables.Item("ДоговорДата").Value= Формат(Выборка.ДоговорДата, "ДЛФ=ДД");
        Документ.Variables.Item("ДолжностьРуководителя").Value = Выборка.ДолжностьРуководителя;
        Документ.Variables.Item("Руководитель").Value= Выборка.Руководитель;
        Документ.Variables.Item("ДоверенностьРуководителя").Value= Выборка.ДоверенностьРуководителя;
        Документ.Variables.Item("Сотрудник").Value= Выборка.Сотрудник;  
        Документ.Variables.Item("Подразделение").Value= Выборка.Подразделение;
        //Документ.Variables.Item("ИспытательныйСрок").Value= Выборка.ИспытательныйСрок;
        Документ.Variables.Item("Должность").Value= Выборка.Должность;
        Документ.Variables.Item("ДатаПриема").Value= Формат(Выборка.ДатаПриема, "ДЛФ=ДД");
        Документ.Variables.Item("ВидЗанятости").Value= Выборка.ВидЗанятости;
        Документ.Variables.Item("ГодРожденияСотрудника").Value= Формат(Выборка.ГодРожденияСотрудника, "ДЛФ=ДД");
        Если Выборка.ДаНетНормированный = "Пятидневка" Тогда
            Документ.Variables.Item("ТекстГрафикРаботы1").Value= "4.1. Рабочий день Работника устанавливается:";
            Документ.Variables.Item("ТекстГрафикРаботы2").Value= "- нормальный рабочий день с 08.00 часов по 17.00 часов;";
            Документ.Variables.Item("ТекстГрафикРаботы3").Value= "- общая продолжительность нормального рабочего дня (смены) 8 часов;";
            Документ.Variables.Item("ТекстГрафикРаботы4").Value= "- количество рабочих дней в неделе 5 дней;";
            Документ.Variables.Item("ТекстГрафикРаботы5").Value= "- продолжительность рабочей недели 40 часов;";
            Документ.Variables.Item("ТекстГрафикРаботы6").Value= "- льготы по сокращению рабочего времени, если есть____---------____ (согласно ст. 92, 93,94 ТК РФ).";
            Документ.Variables.Item("ТекстГрафикРаботы7").Value= "4.2. Рабочий день Работника является: нормированным.";
        Иначе
            Документ.Variables.Item("ТекстГрафикРаботы1").Value= "4.1. Рабочий день Работника устанавливается:";
            Документ.Variables.Item("ТекстГрафикРаботы2").Value= "- сменный режим работы и суммированный учет рабочего времени с учетным периодом равным 1 (одному) кварталу;";
            Документ.Variables.Item("ТекстГрафикРаботы3").Value= "- продолжительность рабочей недели 40 часов;";
            Документ.Variables.Item("ТекстГрафикРаботы4").Value= "- время начала и окончания ежедневной работы устанавливается правилами внутреннего трудового распорядка и графиками сменности, утвержденными Работодателем;";
            Документ.Variables.Item("ТекстГрафикРаботы5").Value= "- льготы по сокращению рабочего времени, если есть -------------------- (согласно ст. 92, 93,94 ТК РФ).";
            Документ.Variables.Item("ТекстГрафикРаботы6").Value= "4.2. Рабочий день Работника является (указать нормированным, не нормированным, посменным): посменным.";
            Документ.Variables.Item("ТекстГрафикРаботы7").Value= " ";
        КонецЕсли;
        
                
        Документ.Variables.Item("Оклад").Value= Выборка.Оклад;
        Документ.Variables.Item("ИОФРуководитель").Value= Выборка.ИОФРуководитель;
        Документ.Variables.Item("ГодРожденияСотрудника").Value= Выборка.ГодРожденияСотрудника;
        Документ.Variables.Item("Паспорт").Value= Выборка.Паспорт;
        Документ.Variables.Item("ИНН").Value= Выборка.ИНН;
        Документ.Variables.Item("НомерСтраховогоСвидетельства").Value= Выборка.НомерСтраховогоСвидетельства;
        Документ.Variables.Item("ДомашнийАдрес").Value= Выборка.ДомашнийАдрес;
        Документ.Variables.Item("ДатаРегистрацийДомашнийАдрес").Value= Формат(Выборка.ДатаРегистрацийДомашнийАдрес, "ДЛФ=ДД");
        Документ.Variables.Item("ИОФСотрудник").Value= Выборка.ИОФСотрудник;
        
        Документ.Application.Visible = Истина;//установить видимость документа
        Документ.Activate();
        Документ.Fields.UpDate();//открыть документ пользователю
    Исключение
        Сообщение = Новый СообщениеПользователю();
        Сообщение.Текст = ОписаниеОшибки();
        Сообщение.Сообщить();    
        Документ.Application.Quit();
    КонецПопытки;
КонецПроцедуры

&НаСервере
Функция ФормированиеДоговораПоШаблону()
    Если Объект.Документ.Должность.Наименование = "Водитель автомобиля-экспедитор" Тогда
        ИмяМакета = "Водитель";
    Иначе
        Если Объект.Документ.ГрафикРаботы.Наименование = "Пятидневка" Тогда
            ИмяМакета = "График52";
        Иначе
            ИмяМакета = "График22";
        КонецЕсли;
    КонецЕсли;
    //АктивныйДокумент = ПолучитьМакетСервер(ИмяМакета);
    АктивныйДокумент = ПолучитьМакетНаСервере(ИмяМакета);
    УИД = Новый УникальныйИдентификатор();
    Адрес = ПоместитьВоВременноеХранилище(АктивныйДокумент, УИД);
    //Адрес = ПоместитьВоВременноеХранилище(АктивныйДокумент);
    Возврат Адрес;
КонецФункции
   acht
 
1 - 19.08.20 - 17:09
> АктивныйДокумент = ПолучитьМакетНаСервере(ИмяМакета); 

И ?
   ilnar4888
 
2 - 20.08.20 - 07:59
Далее Адрес = ПоместитьВоВременноеХранилище(АктивныйДокумент, УИД);
   acht
 
3 - 20.08.20 - 10:11
(2) Ну, во-первых убедись, что ПолучитьМакетНаСервере возвращает нужный макет.
А во-вторых, перед тем, как вызывать печать другого документа, закрой ворд. Потому как ПолучитьCOMОбъект возвращает ссылку на уже существующий объект.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.