Microclimate.su

IT Новости
11 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Внешняя печатная форма в word

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

ЯLeoKeyn

Здравствуйте. Печатную форму и заполнение ее вроде создал и все вроде как работает как надо, но вот только как ее добавить на форму в конфу. Почитал, что то наваял, на всякий случай дам полный код и ошибку:

ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить(«Документ.ПриемНаРаботу»); //Указываем документ к которому делаем внешнюю печ. форму
ПараметрыРегистрации.Вставить(«Вид», «ПечатнаяФорма»); //может быть — ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов.
ПараметрыРегистрации.Вставить(«Назначение», МассивНазначений);
ПараметрыРегистрации.Вставить(«Наименование», «Трудовой договор»); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
ПараметрыРегистрации.Вставить(«БезопасныйРежим», ЛОЖЬ);
ПараметрыРегистрации.Вставить(«Версия», «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);

Читать еще:  Ошибка winword exe модуль wwlib dll

MSWord.Application.Visible = Истина;
MSWord.Activate();

Исключение
// Если произойдет ошибка, выводятся данные об ошибке, и объект закрывается.
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
MSWord.Application.Quit();
КонецПопытки;

<ОбщийМодуль.СтандартныеПодсистемыКлиент.Модуль(117)>: Ошибка при вызове метода контекста (ОткрытьФорму)
ОткрытьФорму(«ОбщаяФорма.Вопрос», Параметры. ОписаниеОповещенияОЗавершении);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘val’:
форма: Элемент
имя: val
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘КодВозвратаДиалога’

Помогите пожалуйста с регистрацией формы, а то мозг скоро потечет, зачем они так усложнили все, раньше ведь просто было. Заранее спасибо тем, кто поможет!

Ваш браузер устарел, пожалуйста обновите ваш браузер пройдя по ссылке www.microsoft.com/download

Внешняя печатная форма с шаблоном Word

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

Первое, что необходимо сделать, это собственно создать внешнюю печатную форму. Создается она просто и в интернете полно информации, как это делать.

Далее необходимо определиться, каким образом будет выполняться вызов команд. И тут есть несколько вариантов: вызов клиентского метода или вызов серверного метода. Информация обо всех вариантах, в том числе и о создании внешней обработки, прикреплена ниже, «Дополнительные отчеты и обработки (документация)».

Но вот после создания возникли проблемы.

Первой была проблема получения макета, который был прикреплен к самой обработке.

Решается она очень просто, как оказалось:

Таким образом удалось получить макет, который по сути уже является вордовским документом. То есть никаких дополнительных дейсвий выполнять не надо, берем и работаем.

В случае необходимости получить сам объект воспользуйтесь командой «ПолучитьОбъект()».

Так как используется вызов клиентского метода, то в процедуре печати есть всего 2 параметра, что также очень удобно. Параметры определяют, какой командой была вызвана печать и какой/какие объекты печатаются.

С вызовом серверного метода не разбирался, но и не очень хотелось, так как очень понравился клиентский. Ниже также прикреплен файл заготовки внешней печатной формы на шаблоне ворд, содержищий подробные коментарии по выполняемым действиям и примеры некоторые команды работы с вордовским документом/макетом, а также документация по процедуре «Печать()»

Читать еще:  Фото в word онлайн

Еще возможна проблема, когда ВПФ не подключается к документу, для которого она предназначена. В этом случае необходимо сделать следующее: «Общая команда «ДополнительныеПечатныеФормыОбъекта» — тип параметра ко м анда — поставить галку у вашего документа. Так что если типовая то не взлетит». Полное описание проблемы читайте тут: http://www.forum.mista.ru/topic.php? >

По поводу добавления команд печати на форму, то для ВПФ, она формируется автоматически. Формирование кнопки для простой печати и прочие вопросы, связанные с печатью описаны в документе «Печать», прикреплен ниже.

По отладке могут возникать проблемы. Поэтому создан реквизит «Ссылка на объект», Команда «Печать» и процедура в модуле формы. Чтобы войти в отладку, достаточно поставить точку останова в процедуре «ПечатьОтладка» или в другом любом месте, но только если ВПФ запущена как внешняя обработка, а не вызване непосредственно из документа. В Реквизите «СсылкаНаОбъект» поменяйте тип значения на документ, которвый вам нужен.

Приложенная заготовка протестирована и формирует документ, как на скриншотах.

Создание внешней печатной формы в формате документа Word


В статье на ИТС и в первой статье описывается создание печатной формы, но при этом для печатной формы используется метод менеджера объекта, что предполагает внесение изменения в конфигурацию или в расширение конфигурации.

В моей статье описывается, как это обойти и внести все нужные изменения во внешнюю обработку.

Сама печатная форма создается на клиентской стороне.

Шаг 1. Создание внешней обработки.

Создать внешнюю обработку, в модуле объекта обработки заполнить функцию СведенияОВнешнейОбработке.

Ниже пример из обработки к статье

Также у вас должен быть файл Word, который будет использоваться для формирования печатной формы. Поддерживаются формат как doc , так и docx .

Шаг 2. Создание макета.

Во внешней обработке надо создать новый макет . Тип макета- двоичные данные, имя макета- ПФ_DOC_МакетОтчета.

В файле Word , который будет загружен в этот макет обработки, надо выделить области .

Этих областей может быть три типа, про это есть описание на ИТС. Тип Общая- область , используемая один раз, СтрокаТаблицы — область для вывода табличной части.

Области выделяются «тегами»: начало области >, конец области >

Пример описания области .

< v 8 Область.Заголовок>— Начало области с именем Заголовок, это обычный текст в файле, в печатной форме он отображаться не будет

… Здесь содержимое области

— Окончание этой области

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

< v 8 НаименованиеОрганизации>— описание параметра НаименованиеОрганизации. Т.е. у параметров есть только открывающий тег и нет служебного слова Область.

Оформление областей можно посмотреть на ИТС и в обработке к этой статье.

После оформления областей этот документ надо загрузить в макет обработки.

Шаг 3. Создание функции подготовки данных для печати.

На ИТС и в демо-базе БСП эта функция располагается в менеджере объекта, для которого создается печатная форма.

Для внешней печатной формы эту функцию надо разместить в форме обработки — печатная форма создается на стороне клиента.

Ниже текст этой функции

Шаг 4. Создание служебных функций и процедуры

  1. функция ДанныеЗаполненияОтчета(СсылкаНаОбъект)
  2. функция ПолучитьОписаниеОбластейОфисногоДокумента()
  3. процедура ВыполнитьПечатьвWord(ДокументСсылка, МакетИДанныеОбъекта, ИмяМакета)

Эти две функции и процедура будут уникальными для конкретной печатной формы.

Читать еще:  Конвертировать pdf в word программа

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

Вышеприведенная функция подставляет параметры ДатаДокумента и НаименованиеОрганизации .

В файле Word эти параметры оформлены следующим образом:

< v 8 НаименованиеОрганизации>, в лице < v 8 ДолжностьПодписанта>< v 8 ФИОПодписанта>, действующего на основании < v 8 ДокументПодписанта>, именуемое в дальнейшем “Работодатель”, с одной стороны и гр. < v 8 ФИО>, именуемый (ая) в дальнейшем “Работник” с другой стороны, именуемые в дальнейшем “Стороны”, заключили в соответствии с Трудовым кодексом Российской Федерации настоящие дополнения

В этой функции описаны области в файле Word . Видно, что в этом файле выделено 4 области, три из которых вызываются один раз, а область СтрокаТаблицы отображает данные из табличной части.

Ниже процедура, которая выполняется на стороне клиента и выводит эти области

Обработка , прилагаемая к статье используется в конфигурации ЗУП 3.1.8.246 с версией подсистемы БСП 3.0.1.369

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

  • Надо изменить функции и процедуру , которые описаны на шаге 4:
    • функцию ДанныеЗаполненияОтчета(СсылкаНаОбъект)
    • функцию ПолучитьОписаниеОбластейОфисногоДокумента()
    • процедуру ВыполнитьПечатьвWord(ДокументСсылка, МакетИДанныеОбъекта, ИмяМакета)
  • В вашем файле Word оформить области и загрузить в макет обработки

Универсальная печатная форма договора в формате Word с выводом доп. реквизитов для 1С:УТ 11.3

Напишите, пожалуйста, свое мнение о разработке в комментарии.

В отличии от предыдущей версии обработки, в эту добавлена возможность вывода в текст печатной формы дополнительных реквизитов и контактной информации организаций и контрагентов из документа. Но это еще не все: для продвинутых пользователей возможен доступ к обычным реквизитам документа, организации и контрагента для вывода их в текст договора. Новый функционал представлен во втором видео на этой странице обработки. А после просмотра видео вы можете прочитать статью: «Расширенная настройка Универсальной формы договора для 1С».

«Универсальная печатная форма договора в формате Word с выводом доп. реквизитов для 1С:УТ 11.3» может использоваться для самостоятельного конструирования печатных форм документов (прежде всего, Реализация товаров и услуг, Поступление товаров и услуг, Договор контрагента, Счет на оплату клиенту) и др. объектов в формате Word с учетом индивидуальных потребностей. В обработке содержится образец макета договора поставки.

Эта универсальная форма может работать с организациям и контрагентами независимо от их вида: юридическое лицо, индивидуальный предприниматель или физическое лицо.

Для использования обработки нужно добавить ее как внешнюю (НСИ и администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки), в необходимом документе в меню «Печать» выбрать нашу обработку. Обработка откроет заполненный документ Word с договором к выбранному документу. Вы можете отредактировать/создать необходимый вам макет договора, используя Конфигуратор и приложение Word (см. видеоинструкцию ниже).

Заметьте следующую особенность!
Для того, чтобы шаблоны [КонтрагентФИОРуководитель], [КонтрагентДолжностьРуководителя], [КонтрагентФИОБух], и т.п. отображались, необходимо, чтобы для контактного лица контрагента, который является руководителем в реквизите «Дополнительная информация» было написано «Руководитель», а главным бухгалтером — «Главный бухгалтер».

В новой версии добавлена возможность использовать тэги, заполняемые дополнительными реквизитами и контактной информацией, созданными вами:

Видеоинструкция по использованию обработки. Эта инструкция покажет как добавить обработку и ее основной функционал:

Видеоинструкция по использованию обработки. Эта инструкция покажет дополнительный функционал обработки, добавленный в новой версии:

Ссылка на основную публикацию
Adblock
detector