|
Создание внешней печатной формы в WORD (УФ) | ☑ | ||
---|---|---|---|---|
0
LeoKeyn
19.12.17
✎
17:00
|
Здравствуйте. Печатную форму и заполнение ее вроде создал и все вроде как работает как надо, но вот только как ее добавить на форму в конфу. Почитал, что то наваял, на всякий случай дам полный код и ошибку:
Функция СведенияОВнешнейОбработке() ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; МассивНазначений.Добавить("Документ.ПриемНаРаботу"); //Указываем документ к которому делаем внешнюю печ. форму ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов... ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); ПараметрыРегистрации.Вставить("Наименование", "Трудовой договор"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("Информация", "Форма трудового договора"); ТаблицаКоманд = Получить Таблицу Команд(); ДобавитьКоманду(ТаблицаКоманд, "ПечатнаяФорма", "ПечатьТД", "ВызовСерверногоМетода", Истина, "ПечатьMXL"); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции // СведенияОВнешнейОбработке() Функция Получить Таблицу Команд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));//как будет выглядеть описание печ.формы для пользователя Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); //имя макета печ.формы Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); //ВызовСерверногоМетода Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПечатьТД", "Трудовой договор", ВывестиПечать()); КонецПроцедуры // Печать() Функция ВывестиПечать() Экспорт ФизЛицо = СсылкаНаОбъект.ФизическоеЛицо; Для каждого Строка из ФизЛицо.КонтактнаяИнформация Цикл Если Строка.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И Строка.Вид = Справочники.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица Тогда АдресПрописки = Строка.Представление; ИначеЕсли Строка.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И Строка.Вид = Справочники.ВидыКонтактнойИнформации.АдресМестаПроживанияФизическиеЛица Тогда АдресПроживания = Строка.Представление; КонецЕсли; КонецЦикла; Документ = РегистрыСведений.ДокументыФизическихЛиц.СоздатьНаборЗаписей(); Документ.Отбор.ФизЛицо.Значение = Справочники.ФизическиеЛица.НайтиПоНаименованию(ФизЛицо); Документ.Отбор.ФизЛицо.Использование = Истина; Документ.Прочитать(); Если НЕ Документ.Количество() = 0 Тогда ВидДокумента = Документ[0].ВидДокумента.Наименование; СерияДокумента = Документ[0].Серия; НомерДокумента = Документ[0].Номер; КемДатаВыдачи = Документ[0].КемВыдан + " от " + Формат(Документ[0].ДатаВыдачи,"ДФ='дд ММММ гггг'"); КонецЕсли; ДокументНачисление = СсылкаНаОбъект.Начисления[0].Начисление; ВидРасчета = ДокументНачисление.КраткоеНаименование; ПериодРасчета = ДокументНачисление.ПериодРасчетаБазовыхНачислений; Если СсылкаНаОбъект.ГрафикРаботы = Справочники.ГрафикиРаботыСотрудников.НайтиПоНаименованию("Пятидневка 40") Тогда РежимРаботы = "продолжительностью 8 часов в день с понедельника по пятницу (с 9-00 до 18-00) с перерывом один час на обед (с 13-00 до 14-00), при пятидневной рабочей неделе с двумя выходными днями (суббота, воскресенье)"; ИначеЕсли СсылкаНаОбъект.ГрафикРаботы = Справочники.ГрафикиРаботыСотрудников.НайтиПоНаименованию("Шестидневка") Тогда РежимРаботы = "продолжительностью 7 часов в день с понедельника по пятницу (с 9-00 до 17-00) и 5 часов в день в субботу (с 9-00 до 15-00) с перерывом один час на обед (с 13-00 до 14-00), при шестидневной рабочей неделе с одним выходным днем (воскресенье)"; ИначеЕсли Найти(СсылкаНаОбъект.ГрафикиРаботыСотрудников.Наименование, "вахта") <> 0 Тогда Иначе РежимРаботы = "__________________НЕОБХОДИМО ЗАПОЛНИТЬ________________________"; КонецЕсли; Гражданство = РегистрыСведений.ГражданствоФизическихЛиц.СоздатьНаборЗаписей(); Гражданство.Отбор.ФизическоеЛицо.Значение = Справочники.ФизическиеЛица.НайтиПоНаименованию(ФизЛицо); Гражданство.Отбор.ФизическоеЛицо.Использование = Истина; Гражданство.Прочитать(); Если НЕ Гражданство.Количество() = 0 Тогда ГражданствоФизЛица = Гражданство[0].Страна.Наименование; КонецЕсли; Табельный = СсылкаНаОбъект.Сотрудник.Код; НомерДоговора = СсылкаНаОбъект.ТрудовойДоговорНомер; ДатаДоговора = СсылкаНаОбъект.ТрудовойДоговорДата; ДатаНачалаТД = СсылкаНаОбъект.ДатаПриема; ИспытательныйСрок = СсылкаНаОбъект.ДлительностьИспытательногоСрока; ДатаОкончанияТД = СсылкаНаОбъект.ДатаЗавершенияТрудовогоДоговора; Должность = СсылкаНаОбъект.Должность; ПодразделениеОтдел = СсылкаНаОбъект.Подразделение; Макет = "ТД"; Договор=ПолучитьМакет(Макет); //Получить объект из макета. MSWord = Договор.Получить(); Попытка Документ = MSWord.Application.Documents(1); // Получить объект, который будем использовать для поиска и замены. Замена = Документ.Content.Find; Замена.Execute("<НомерТД>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, НомерДокументаБезНулей(СсылкаНаОбъект.ТрудовойДоговорНомер), 2); // Замена = Документ.Content.Find; // Замена.Execute("<ФИО>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, СсылкаНаОбъект.ФизическоеЛицо.ФИО, 2); // Замена = Документ.Content.Find; // Замена.Execute("<ДатаНачалаКаз>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, Формат(ДатаНачала,"Л=kk_KZ; ДЛФ=DD"), 2); // Замена = Документ.Content.Find; Замена.Execute("<ДатаНачалаТД>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, Формат(ДатаДоговора,"Л=ru_RU; ДЛФ=DD"), 2); Замена = Документ.Content.Find; // Замена.Execute("<ДатаОкончанияКаз>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, Формат(ДатаОкончания,"Л=kk_KZ; ДЛФ=DD"), 2); // Замена = Документ.Content.Find; // Замена.Execute("<ДатаОкончания>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, Формат(ДатаОкончания,"Л=ru_RU; ДЛФ=DD"), 2); // Замена = Документ.Content.Find; // Замена.Execute("<Должность>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, СсылкаНаОбъект.Должность.Наименование, 2); // Замена = Документ.Content.Find; // Замена.Execute("<График>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, РежимРаботы, 2); // Замена = Документ.Content.Find; // Замена.Execute("<Оклад>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, СсылкаНаОбъект.ОсновныеНачисления[0].Показатель1, 2); // Замена = Документ.Content.Find; // Замена.Execute("<ОкладПрописью>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, ЧислоПрописью(СсылкаНаОбъект.ОсновныеНачисления[0].Показатель1, "Л=ru_Ru;ДП=Истина", "тенге, тенге, тенге, м, тиын, тыин, тыин, м, 2"), 2); // Замена = Документ.Content.Find; // Замена.Execute("<ОкладПрописьюКаз>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, ЧислоПрописью(СсылкаНаОбъект.ОсновныеНачисления[0].Показатель1, "Л=kk_KZ;ДП=Истина", "тенге, тенге, тенге, м, тиын, тыин, тыин, м, 2"), 2); // Замена = Документ.Content.Find; // Замена.Execute("<ИНН>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, Число(СсылкаНаОбъект.ФизЛицо.ИдентификационныйКодЛичности), 2); // //Замена = Документ.Content.Find; // //Замена.Execute("<Удостоверение>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, НомерУдостоверения, 2); // //Замена = Документ.Content.Find; // //Замена.Execute("<Выдан>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, ДатаВыдачи, 2); // //Замена = Документ.Content.Find; // //Замена.Execute("<Адрес>", Ложь, Истина, Ложь, Ложь, , Истина, , Ложь, АдресФактический, 2); MSWord.Application.Visible = Истина; MSWord.Activate(); Исключение // Если произойдет ошибка, выводятся данные об ошибке, и объект закрывается. Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = ОписаниеОшибки(); Сообщение.Сообщить(); MSWord.Application.Quit(); КонецПопытки; КонецФункции Функция НомерДокументаБезНулей(НомерДокумента) Ошибка: {ОбщийМодуль.СтандартныеПодсистемыКлиент.Модуль(117)}: Ошибка при вызове метода контекста (ОткрытьФорму) ОткрытьФорму("ОбщаяФорма.Вопрос", Параметры,,,,,ОписаниеОповещенияОЗавершении); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'val': форма: Элемент имя: {http://v8.1c.ru/8.2/mngsrv/ws}val по причине: Ошибка отображения типов: Отсутствует отображение для типа 'КодВозвратаДиалога' Помогите пожалуйста с регистрацией формы, а то мозг скоро потечет, зачем они так усложнили все, раньше ведь просто было. Заранее спасибо тем, кто поможет! |
|||
1
nordbox
19.12.17
✎
17:04
|
Ты про директивы
&НаСервере &НаКлиенте и их использование слышал? |
|||
2
LeoKeyn
19.12.17
✎
17:05
|
(1) Если я правильно понимаю они используются в модуле формы, а это модуль объекта, или я что то не так понял?
|
|||
3
LeoKeyn
19.12.17
✎
17:23
|
Ни в курсе ни кто? :-) или вечер? :-)
|
|||
4
nordbox
19.12.17
✎
17:24
|
(2)>> ОткрытьФорму("ОбщаяФорма.Вопрос", Параметры,,,,,ОписаниеОповещенияОЗавершении);
Отсутствует отображение для типа 'КодВозвратаДиалога' |
|||
5
LeoKeyn
19.12.17
✎
17:25
|
(4) только что с этим делать, ошибка вылезает из основного модуля. Не пойму, я что то не так отправляю или в коде конфы ошибка
|
|||
6
nordbox
19.12.17
✎
17:26
|
Где у тебя этот кусок?
|
|||
7
nordbox
19.12.17
✎
17:27
|
Ты показал
>>Функция НомерДокументаБезНулей(НомерДокумента) Ошибка: {ОбщийМодуль.СтандартныеПодсистемыКлиент.Модуль(117)}: Ошибка при вызове метода контекста (ОткрытьФорму) ОткрытьФорму("ОбщаяФорма.Вопрос", Параметры,,,,,ОписаниеОповещенияОЗавершении); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Остальное где? |
|||
8
LeoKeyn
19.12.17
✎
17:31
|
(7) Эта функция в данный момент не используется. Ошибка возникает, когда я пытаюсь добавить ВПФ в конфигурацию, а не исполнить код
|
|||
9
LeoKeyn
19.12.17
✎
17:32
|
"Дополнительная обработка (Создание)" сюда
|
|||
10
nordbox
19.12.17
✎
17:37
|
http://catalog.mista.ru/public/286059/
Вот тут думаю найдешь ответ |
|||
11
LeoKeyn
19.12.17
✎
17:39
|
(10) отсюда и делал)
|
|||
12
nordbox
19.12.17
✎
17:39
|
(8)>>Эта функция в данный момент не используется.
Ну а почему ты вызываешь ее?? |
|||
13
nordbox
19.12.17
✎
17:40
|
Где у тебя эта строка?
|
|||
14
nordbox
19.12.17
✎
17:40
|
ОткрытьФорму("ОбщаяФорма.Вопрос", Параметры,,,,,ОписаниеОповещенияОЗавершении);
|
|||
15
LeoKeyn
19.12.17
✎
17:41
|
(14) Открыть форму вызывает конфа, при подключении ВПФ. Она не моя, это пройедура ОбщегоМодуля
|
|||
16
nordbox
19.12.17
✎
17:44
|
А что и где у тебя возвращает Функция ВывестиПечать()
|
|||
17
LeoKeyn
19.12.17
✎
17:45
|
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПечатьТД", "Трудовой договор", ВывестиПечать());
|
|||
18
nordbox
19.12.17
✎
17:46
|
(17) Внутри функции Возврат
где? |
|||
19
LeoKeyn
19.12.17
✎
17:47
|
(18) Так а мне возврат ненужен, она просто откроет ворд. Через форму работает
|
|||
20
nordbox
19.12.17
✎
17:48
|
)))) Дык это вообще то Функция которая должна что то вернуть
Это процедура тупо выполняет что сказали ) |
|||
21
nordbox
19.12.17
✎
17:56
|
Ты напиши НЕ Функция ВывестиПечать()
а Процедура ВывестиПечать() |
|||
22
nordbox
19.12.17
✎
17:59
|
И в конце тоже поправь НЕ КонецФункции
а КонецПроцедуры |
|||
23
nordbox
19.12.17
✎
18:00
|
На всякий случай почитай
http://howknow1c.ru/jazyk-1s/funkcii-1s-i-procedury-1s.html |
|||
24
LeoKeyn
21.12.17
✎
09:03
|
(21) {ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(46,110)}: Обращение к процедуре как к функции (ВывестиПечать)
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПечатьТД", "Трудовой договор", <<?>>ВывестиПечать()); (Проверка: Сервер) |
|||
25
LeoKeyn
21.12.17
✎
09:04
|
Ничего пока так и не вышло, может еще кто идейки кинет? :-)
|
|||
26
regniws
21.12.17
✎
09:13
|
ВывестиПечать процедура
|
|||
27
nordbox
21.12.17
✎
09:19
|
(26) я ему уже объяснял
(24) ты чо такой нудный как ёжик с причёской ??? )) зайди в Общие модули УправлениеПечатью открой, найди там ВывестиТабличныйДокументВКоллекцию(..... и смотри какие параметры надо тебе ясно 1с сказала ПечатьТД", "Трудовой договор", <<?>>ВывестиПечать()); чего то много или не хватает )) смотри и читай |
|||
28
LeoKeyn
21.12.17
✎
10:56
|
(27) Он ругается на ВывестиПечать из-за того, что я пытаюсь вызвать процедуру как функцию :-) после того как исправил ее на процедуру. Да я нудный :-) хочется понять и сделать :-)
|
|||
29
nordbox
21.12.17
✎
11:49
|
(28) Тогда делай функцию
только правильно делай ) |
|||
30
LeoKeyn
21.12.17
✎
11:58
|
(29) Так вот что не правильно тут, и она вообще не при чем, до нее ДЕЛО НЕ ДОХОДИТ! проблема в подключении к конфе, она еще ничего не выполняет
|
|||
31
nordbox
21.12.17
✎
12:08
|
||||
32
Мимохожий Однако
21.12.17
✎
12:09
|
ОФФ:Чем больше клюв, тем меньше мозга.((
|
|||
33
LeoKeyn
21.12.17
✎
16:45
|
http://catalog.mista.ru/public/445207/?detail=Y
Нашел то, что мне нужно, жаль он не расписал :-( |
|||
34
LeoKeyn
21.12.17
✎
16:46
|
(32) Извиняйте, просто мозг уже плывет. Ошибка при подключении была тупой не сделал Функции и Процедуры Экспортными. Теперь проблемы после
|
|||
35
LeoKeyn
21.12.17
✎
16:47
|
Везде описано как сделать печатную форму, а как это переделать в печатную форму на вывод в ворд пока докумекать никак
|
|||
36
LeoKeyn
21.12.17
✎
16:48
|
Теперь она вроде и подвязалась но вот только функция по заполнению данных не отрабатывает, просто не заполненный макет открывает
|
|||
37
LeoKeyn
22.12.17
✎
17:23
|
Наконец все сделал и получилось, спасибо всем за терпение и помощь!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |