Вход | Регистрация



Создание внешней печатной формы в WORD (УФ)

Создание внешней печатной формы в WORD (УФ)
Я
   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
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'КодВозвратаДиалога'

Помогите пожалуйста с регистрацией формы, а то мозг скоро потечет, зачем они так усложнили все, раньше ведь просто было. Заранее спасибо тем, кто поможет!
 
 
   nordbox
 
1 - 19.12.17 - 17:04
Ты про директивы 
&НаСервере
&НаКлиенте
и их использование слышал?
   LeoKeyn
 
2 - 19.12.17 - 17:05
(1) Если я правильно понимаю они используются в модуле формы, а это модуль объекта, или я что то не так понял?
   LeoKeyn
 
3 - 19.12.17 - 17:23
Ни в курсе ни кто? :-) или вечер? :-)
   nordbox
 
4 - 19.12.17 - 17:24
(2)>> ОткрытьФорму("ОбщаяФорма.Вопрос", Параметры,,,,,ОписаниеОповещенияОЗавершении); 
 Отсутствует отображение для типа 'КодВозвратаДиалога'
   LeoKeyn
 
5 - 19.12.17 - 17:25
(4) только что с этим делать, ошибка вылезает из основного модуля. Не пойму, я что то не так отправляю или в коде конфы ошибка
   nordbox
 
6 - 19.12.17 - 17:26
Где у тебя этот кусок?
   nordbox
 
7 - 19.12.17 - 17:27
Ты показал 
>>Функция НомерДокументаБезНулей(НомерДокумента)

Ошибка:

{ОбщийМодуль.СтандартныеПодсистемыКлиент.Модуль(117)}: Ошибка при вызове метода контекста (ОткрытьФорму) 
    ОткрытьФорму("ОбщаяФорма.Вопрос", Параметры,,,,,ОписаниеОповещенияОЗавершении); 
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:

Остальное где?
   LeoKeyn
 
8 - 19.12.17 - 17:31
(7) Эта функция в данный момент не используется. Ошибка возникает, когда я пытаюсь добавить ВПФ в конфигурацию, а не исполнить код
   LeoKeyn
 
9 - 19.12.17 - 17:32
"Дополнительная обработка (Создание)" сюда
   nordbox
 
10 - 19.12.17 - 17:37
http://catalog.mista.ru/public/286059/
Вот тут думаю найдешь ответ
 
 Рекламное место пустует
   LeoKeyn
 
11 - 19.12.17 - 17:39
(10) отсюда и делал)
   nordbox
 
12 - 19.12.17 - 17:39
(8)>>Эта функция в данный момент не используется.
Ну а почему ты вызываешь ее??
   nordbox
 
13 - 19.12.17 - 17:40
Где у тебя эта строка?
   nordbox
 
14 - 19.12.17 - 17:40
ОткрытьФорму("ОбщаяФорма.Вопрос", Параметры,,,,,ОписаниеОповещенияОЗавершении);
   LeoKeyn
 
15 - 19.12.17 - 17:41
(14) Открыть форму вызывает конфа, при подключении ВПФ. Она не моя, это пройедура ОбщегоМодуля
   nordbox
 
16 - 19.12.17 - 17:44
А что и где у тебя возвращает Функция ВывестиПечать()
   LeoKeyn
 
17 - 19.12.17 - 17:45
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПечатьТД", "Трудовой договор", ВывестиПечать());
   nordbox
 
18 - 19.12.17 - 17:46
(17) Внутри функции Возврат
где?
   LeoKeyn
 
19 - 19.12.17 - 17:47
(18) Так а мне возврат ненужен, она просто откроет ворд. Через форму работает
   nordbox
 
20 - 19.12.17 - 17:48
)))) Дык это вообще то Функция которая должна что то вернуть
Это процедура тупо выполняет что сказали )
   nordbox
 
21 - 19.12.17 - 17:56
Ты напиши НЕ Функция ВывестиПечать()
а Процедура ВывестиПечать()
   nordbox
 
22 - 19.12.17 - 17:59
И в конце тоже поправь НЕ КонецФункции
а КонецПроцедуры
   nordbox
 
23 - 19.12.17 - 18:00
На всякий случай почитай
http://howknow1c.ru/jazyk-1s/funkcii-1s-i-procedury-1s.html
   LeoKeyn
 
24 - 21.12.17 - 09:03
(21) {ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(46,110)}: Обращение к процедуре как к функции (ВывестиПечать)
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПечатьТД", "Трудовой договор", <<?>>ВывестиПечать());  (Проверка: Сервер)
   LeoKeyn
 
25 - 21.12.17 - 09:04
Ничего пока так и не вышло, может еще кто идейки кинет? :-)
   regniws
 
26 - 21.12.17 - 09:13
ВывестиПечать процедура
   nordbox
 
27 - 21.12.17 - 09:19
(26) я ему уже объяснял
(24) ты чо такой нудный как ёжик с причёской ??? ))
зайди в Общие модули  УправлениеПечатью
открой, найди там
ВывестиТабличныйДокументВКоллекцию(.....
и смотри какие параметры надо
тебе ясно 1с сказала 
ПечатьТД", "Трудовой договор", <<?>>ВывестиПечать());  
чего то много или не хватает )) смотри и читай
   LeoKeyn
 
28 - 21.12.17 - 10:56
(27) Он ругается на ВывестиПечать из-за того, что я пытаюсь вызвать процедуру как функцию :-) после того как исправил ее на процедуру. Да я нудный :-) хочется понять и сделать :-)
   nordbox
 
29 - 21.12.17 - 11:49
(28) Тогда делай функцию
только правильно делай )
   LeoKeyn
 
30 - 21.12.17 - 11:58
(29) Так вот что не правильно тут, и она вообще не при чем, до нее ДЕЛО НЕ ДОХОДИТ! проблема в подключении к конфе, она еще ничего не выполняет
   nordbox
 
31 - 21.12.17 - 12:08
   МимохожийОднако
 
32 - 21.12.17 - 12:09
ОФФ:Чем больше клюв, тем меньше мозга.((
   LeoKeyn
 
33 - 21.12.17 - 16:45
http://catalog.mista.ru/public/445207/?detail=Y
Нашел то, что мне нужно, жаль он не расписал :-(
 
 
   LeoKeyn
 
34 - 21.12.17 - 16:46
(32) Извиняйте, просто мозг уже плывет. Ошибка при подключении была тупой не сделал Функции и Процедуры Экспортными. Теперь проблемы после
   LeoKeyn
 
35 - 21.12.17 - 16:47
Везде описано как сделать печатную форму, а как это переделать в печатную форму на вывод в ворд пока докумекать никак
   LeoKeyn
 
36 - 21.12.17 - 16:48
Теперь она вроде и подвязалась но вот только функция по заполнению данных не отрабатывает, просто не заполненный макет открывает
   LeoKeyn
 
37 - 22.12.17 - 17:23
Наконец все сделал и получилось, спасибо всем за терпение и помощь!


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