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

вызов внешней обработки из справочника

вызов внешней обработки из справочника
Я
   JuixyJes
 
19.02.21 - 16:39
Доброго дня, снова врываюсь в мисту с тупыми вопросами. Могу ли я вызвать внешнюю обработку из справоника?
   zak555
 
1 - 19.02.21 - 16:40
Привет.
да, можно
   dka80
 
2 - 19.02.21 - 16:41
справа красная буква Я
   Garykom
 
3 - 19.02.21 - 16:43
(1) не всегда
   JuixyJes
 
4 - 19.02.21 - 16:55
В общем и целом, может я что-то не так делаю. Но у меня сделана печатная форма, макетом которой является word документ (active document). и заполнение в модуле обработки. Могу ли я такую печатную форму использовать как внешнюю печатную форму? Если да, то как???
   JuixyJes
 
5 - 19.02.21 - 18:06
Вобщем сделать я сделала, но проблема возникла, ч не понимаю почему это так выглядит.... https://prnt.sc/100z54p
   JuixyJes
 
6 - 19.02.21 - 18:06
&НаКлиенте 
Процедура Печать(ИдентификаторКоманды, МассивОбъектов) Экспорт//Здесь МассивОбъектов и есть ссылка или ссылки на документ или справочник, в который добавлена обработка  

    Для Каждого Элемент Из МассивОбъектов Цикл
        СобратьМакет(Элемент);
    КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьДанные()
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ВидыЗанятостиСотрудников.ВидЗанятости КАК ВидЗанятости,
    |    ДокументыФизическихЛицСрезПоследних.Представление КАК ПаспортныеДанные,
    |    ПриемНаРаботу.Сотрудник КАК Сотрудник,
    |    ПриемНаРаботу.Должность КАК Должность,
    |    ПриемНаРаботу.ТрудовойДоговорНомер КАК ТрудовойДоговорНомер,
    |    ПриемНаРаботу.ТрудовойДоговорДата КАК ТрудовойДоговорДата,
    |    ПриемНаРаботу.Сотрудник.ФизическоеЛицо.ДатаРождения КАК СотрудникФизическоеЛицоДатаРождения,
    |    ПриемНаРаботу.Сотрудник.ФизическоеЛицо.ИНН КАК СотрудникФизическоеЛицоИНН,
    |    ПриемНаРаботу.Сотрудник.ФизическоеЛицо.Фамилия КАК СотрудникФизическоеЛицоФамилия,
    |    ПриемНаРаботу.Сотрудник.ФизическоеЛицо.Инициалы КАК СотрудникФизическоеЛицоИнициалы,
    |    ПриемНаРаботу.Сотрудник.ФизическоеЛицо.СтраховойНомерПФР КАК СотрудникФизическоеЛицоСтраховойНомерПФР,
    |    ВложенныйЗапрос.КонтактнаяИнформация КАК КонтактнаяИнформация,
    |    ВложенныйЗапрос.Вид КАК Вид,
    |    ПриемНаРаботу.ДолжностьПоШтатномуРасписанию.ОкладТариф КАК Оклад
    |ИЗ
    |    Документ.ПриемНаРаботу КАК ПриемНаРаботу
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВидыЗанятостиСотрудников КАК ВидыЗанятостиСотрудников
    |        ПО (ВидыЗанятостиСотрудников.Сотрудник = ПриемНаРаботу.Сотрудник)
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыФизическихЛиц.СрезПоследних КАК ДокументыФизическихЛицСрезПоследних
    |        ПО ПриемНаРаботу.Сотрудник.ФизическоеЛицо = ДокументыФизическихЛицСрезПоследних.Физлицо
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            ВидыКонтактнойИнформации.Ссылка КАК Вид,
    |            ФизическиеЛицаКонтактнаяИнформация.Представление КАК КонтактнаяИнформация,
    |            ФизическиеЛицаКонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей,
    |            ФизическиеЛицаКонтактнаяИнформация.Ссылка КАК ФизическоеЛицо
    |        ИЗ
    |            Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
    |                ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
    |                ПО (ФизическиеЛицаКонтактнаяИнформация.Вид = ВидыКонтактнойИнформации.Ссылка)
    |                    И (ВидыКонтактнойИнформации.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.СправочникФизическиеЛица))) КАК ВложенныйЗапрос
    |        ПО ПриемНаРаботу.ФизическоеЛицо = ВложенныйЗапрос.ФизическоеЛицо
    |ГДЕ
    |    ПриемНаРаботу.Сотрудник = &Сотрудник";
    
    Запрос.УстановитьПараметр("Сотрудник", Объект.СсылкаНаОбъект);
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
    Возврат РезультатЗапроса
КонецФункции// ПолучитьДанные()


Функция ПолучитьЗначениеСправочника()
    
    Возврат Справочники.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица;
    
КонецФункции// ПолучитьЗначениеСправочника()


Функция ПолучитьЗначениеПеречисления()
    
    Возврат Перечисления.ВидыЗанятости.ОсновноеМестоРаботы;
    
КонецФункции// ПолучитьЗначениеСправочника()



&НаКлиенте
Процедура СобратьМакет(СсылкаНаОбъект)
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("doc");
    Адрес = ФормированиеДоговораПоШаблону()//положить макет во временное хранилище на сервере и получить адрес на клиент

    Если Адрес = Неопределено Тогда
        Возврат;
    КонецЕсли;
    Макет = ПолучитьИзВременногоХранилища(Адрес);//получить макет из временного хранилища

    Макет.Записать(ИмяВременногоФайла)//создать документ на основе макета в TEMP клиента

        Word = Новый COMОбъект("Word.Application")//создаем COMОбъект

        Word.Visible = 1;
        Документ = Word.Documents.Open(ИмяВременногоФайла)//подключаем макет к созданному COMОбъект

    //открываем и активируем документ

    СсылкаМакет = Word.Application.Documents(1);
        
    РезультатЗапроса = ПолучитьДанные();
    
    Для каждого Параметр Из  СсылкаМакет.Fields Цикл
        ПолноеИмяПоля = Параметр.Code.Text;
        Если (Найти(ПолноеИмяПоля, " MERGEFIELD") = 1) Тогда
            ПозицияСлеша = Найти(ПолноеИмяПоля, "\*");
            КороткоеИмяПоля = СокрЛП(Сред(ПолноеИмяПоля, 12, ПозицияСлеша - 12));
            
            ЗначениеПоля = "";        
            
            Если КороткоеИмяПоля = "НомерДоговора" Тогда
                ЗначениеПоля = РезультатЗапроса[0].ТрудовойДоговорНомер;
            ИначеЕсли КороткоеИмяПоля = "ДатаДоговора" Тогда
                ЗначениеПоля = Формат(РезультатЗапроса[0].ТрудовойДоговорДата, "ДФ='dd MMMM yyyy'") + " года";
            ИначеЕсли КороткоеИмяПоля = "Организация" Тогда
                ЗначениеПоля = РезультатЗапроса[0].Сотрудник.ГоловнаяОрганизация.НаименованиеПолное;
            ИначеЕсли КороткоеИмяПоля = "ОрганизацияСокр" Тогда
                ЗначениеПоля = РезультатЗапроса[0].Сотрудник.ГоловнаяОрганизация.НаименованиеСокращенное;
            ИначеЕсли КороткоеИмяПоля = "Работник" Тогда
                Для каждого Строка Из РезультатЗапроса Цикл
                    
                    Если Строка.Вид = ПолучитьЗначениеСправочника() Тогда
                        ЗначениеПоля = Строка(РезультатЗапроса[0].Сотрудник) + " " + Строка(РезультатЗапроса[0].ПаспортныеДанные) + " зарегистрирован: " + Строка(Строка.КонтактнаяИнформация);
                        Прервать;
                    КонецЕсли;
                    
                КонецЦикла;
                
            ИначеЕсли КороткоеИмяПоля = "Должность" Тогда
                ЗначениеПоля =  РезультатЗапроса[0].Должность.Наименование;                     
            ИначеЕсли КороткоеИмяПоля = "МестоРаботы" Тогда
                ЗначениеПоля = "ЗАПОЛНИТЬ ВРУЧНУЮ";                     
            ИначеЕсли КороткоеИмяПоля = "ПостРабота" Тогда
                Для каждого Строка Из РезультатЗапроса Цикл
                    
                    Если Строка.ВидЗанятости = ПолучитьЗначениеПеречисления() Тогда
                        ЗначениеПоля = "основной";
                        Прервать;
                    КонецЕсли;
                    
                КонецЦикла;
                
            ИначеЕсли КороткоеИмяПоля = "Оклад" Тогда
                ЗначениеПоля = РезультатЗапроса[0].Оклад;
            ИначеЕсли КороткоеИмяПоля = "ОкладСтрокой" Тогда
                ПараметрыПредметаИсчисления = " , , , , , , , , 0";
                ЗначениеПоля = ЧислоПрописью(РезультатЗапроса[0].Оклад,,ПараметрыПредметаИсчисления);
            ИначеЕсли КороткоеИмяПоля = "ОкладЧислоПослеЗапятой" Тогда
                ЗначениеПоля = "00";
            ИначеЕсли КороткоеИмяПоля = "ФИОРаботника" Тогда
                ЗначениеПоля =  Строка(РезультатЗапроса[0].Сотрудник);                     
            ИначеЕсли КороткоеИмяПоля = "ДатаРождения" Тогда
                ЗначениеПоля = Формат(РезультатЗапроса[0].СотрудникФизическоеЛицоДатаРождения, "ДФ=dd.MM.yyyy") + " г.р.";                     
            ИначеЕсли КороткоеИмяПоля = "ПаспортныеДанные" Тогда
                ЗначениеПоля = Строка(РезультатЗапроса[0].ПаспортныеДанные);                     
            ИначеЕсли КороткоеИмяПоля = "АдресРегистрации" Тогда
                Для каждого Строка Из РезультатЗапроса Цикл
                    
                    Если Строка.Вид = ПолучитьЗначениеСправочника() Тогда
                        ЗначениеПоля = Строка(Строка.КонтактнаяИнформация);
                        Прервать;
                    КонецЕсли;
                    
                КонецЦикла;                   
            ИначеЕсли КороткоеИмяПоля = "ИННРаботника" Тогда
                ЗначениеПоля = Строка(РезультатЗапроса[0].СотрудникФизическоеЛицоИНН);   
            ИначеЕсли КороткоеИмяПоля = "СНИЛСРаботника" Тогда
                ЗначениеПоля = Строка(РезультатЗапроса[0].СотрудникФизическоеЛицоСтраховойНомерПФР);                        
            ИначеЕсли КороткоеИмяПоля = "ИнициалыРаботника" Тогда
                ЗначениеПоля = Строка(РезультатЗапроса[0].СотрудникФизическоеЛицоФамилия) + " " + Строка(РезультатЗапроса[0].СотрудникФизическоеЛицоИнициалы);                        
            КонецЕсли;
            
            Если ЗначениеПоля <> "" Тогда
                Параметр.Select();
                СсылкаМакет.Application.Selection.TypeText(ЗначениеПоля);
            КонецЕсли;            
        КонецЕсли;
        
    КонецЦикла;    
    //включаем видимость приложения

    СсылкаМакет.Activate();
    СсылкаМакет.Application.Visible = Истина;
    
    
КонецПроцедуры

&НаСервере
Функция ФормированиеДоговораПоШаблону()
    
    ИмяМакета = "Макет";
    АктивныйДокумент = ПолучитьМакетСервер(ИмяМакета);
    
    УИД = Новый УникальныйИдентификатор();
    Адрес = ПоместитьВоВременноеХранилище(АктивныйДокумент, УИД);
    
    Возврат Адрес;
    
    
КонецФункции

&НаСервере
Функция ПолучитьМакетСервер(ИмяМакета)
    
    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет(ИмяМакета);
    Возврат Макет;
    
КонецФункции// ПолучитьМакетСервер(ИмяМакета)()
   JuixyJes
 
7 - 19.02.21 - 18:06
Вот код, что лежит в форме и заполняет вроде из макета
   МимохожийОднако
 
8 - 19.02.21 - 18:24
Что показывает отладчик при заполнении макета?
   JuixyJes
 
9 - 20.02.21 - 09:04
(8)  Ничего... Почему-то при наведении мышки во время отладки пишет, что это СОМОбъект, но как только я пытаюсь его в табло занести все исчезает
   JuixyJes
 
10 - 20.02.21 - 09:16
Так, поняла, ком объекты долго прогружаются, но есть все равно проблема, шаблон то нормальный, но почему то он не видит его так как должен и выводит срань из (5)
   dka80
 
11 - 20.02.21 - 09:17
Документ = Word.Documents.Open(ИмяВременногоФайла)
СсылкаМакет = Word.Application.Documents(1);
 СсылкаМакет.Activate();
    СсылкаМакет.Application.Visible = Истина;

Вот так выводит твой макет в правильном виде?
   JuixyJes
 
12 - 20.02.21 - 09:55
(11) нет, макет не правильно грузит
   JuixyJes
 
13 - 20.02.21 - 10:10
Это вроде бы и видно. Но не ясно почему так

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