|
вызов внешней обработки из справочника | ☑ | ||
---|---|---|---|---|
0
JuixyJes
19.02.21
✎
16:39
|
Доброго дня, снова врываюсь в мисту с тупыми вопросами. Могу ли я вызвать внешнюю обработку из справоника?
|
|||
1
zak555
19.02.21
✎
16:40
|
Привет.
да, можно |
|||
2
dka80
19.02.21
✎
16:41
|
справа красная буква Я
|
|||
3
Garykom
гуру
19.02.21
✎
16:43
|
(1) не всегда
|
|||
4
JuixyJes
19.02.21
✎
16:55
|
В общем и целом, может я что-то не так делаю. Но у меня сделана печатная форма, макетом которой является word документ (active document). и заполнение в модуле обработки. Могу ли я такую печатную форму использовать как внешнюю печатную форму? Если да, то как???
|
|||
5
JuixyJes
19.02.21
✎
18:06
|
Вобщем сделать я сделала, но проблема возникла, ч не понимаю почему это так выглядит.... https://prnt.sc/100z54p
|
|||
6
JuixyJes
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 = Истина; КонецПроцедуры &НаСервере Функция ФормированиеДоговораПоШаблону() ИмяМакета = "Макет"; АктивныйДокумент = ПолучитьМакетСервер(ИмяМакета); УИД = Новый УникальныйИдентификатор(); Адрес = ПоместитьВоВременноеХранилище(АктивныйДокумент, УИД); Возврат Адрес; КонецФункции &НаСервере Функция ПолучитьМакетСервер(ИмяМакета) Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет(ИмяМакета); Возврат Макет; КонецФункции // ПолучитьМакетСервер(ИмяМакета)() |
|||
7
JuixyJes
19.02.21
✎
18:06
|
Вот код, что лежит в форме и заполняет вроде из макета
|
|||
8
Мимохожий Однако
19.02.21
✎
18:24
|
Что показывает отладчик при заполнении макета?
|
|||
9
JuixyJes
20.02.21
✎
09:04
|
(8) Ничего... Почему-то при наведении мышки во время отладки пишет, что это СОМОбъект, но как только я пытаюсь его в табло занести все исчезает
|
|||
10
JuixyJes
20.02.21
✎
09:16
|
Так, поняла, ком объекты долго прогружаются, но есть все равно проблема, шаблон то нормальный, но почему то он не видит его так как должен и выводит срань из (5)
|
|||
11
dka80
20.02.21
✎
09:17
|
Документ = Word.Documents.Open(ИмяВременногоФайла)
СсылкаМакет = Word.Application.Documents(1); СсылкаМакет.Activate(); СсылкаМакет.Application.Visible = Истина; Вот так выводит твой макет в правильном виде? |
|||
12
JuixyJes
20.02.21
✎
09:55
|
(11) нет, макет не правильно грузит
|
|||
13
JuixyJes
20.02.21
✎
10:10
|
Это вроде бы и видно. Но не ясно почему так
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |