Добавление дополнительных отчетов и обработок в тонком клиенте БП 3.0, ЗУП 3.0, УТ 11 Любой отчет и обработку можно подключить пользователям как дополнительные отчеты или обработки, вот например пункт в БП - Банк:
Добавление происходит через
далее Дополнительные отчеты и обработки , в списке нажмите Создать и Выберите Файл отчета/обработки:
Перед добавлением файл нужно подготовить, дописать в модуль объекта код подключения:
Для обработок код:
Код 1C v 8.3 Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации. Вставить( "Вид" , "ДополнительнаяОбработка" ) ;
ПараметрыРегистрации. Вставить( "Назначение" , Новый СписокЗначений) ;
ПараметрыРегистрации. Вставить( "Наименование" , "Сравнение документов БУХ и УТ" ) ;
ПараметрыРегистрации. Вставить( "Версия" , "1.0" ) ;
ПараметрыРегистрации. Вставить( "БезопасныйРежим" , Истина ) ;
ПараметрыРегистрации. Вставить( "Информация" , "" ) ;
ПараметрыРегистрации. Вставить( "Команды" , Новый СписокЗначений) ;
ТаблицаКоманд = ПолучитьТаблицу_Команд( ) ;
ДобавитьКоманду( ТаблицаКоманд,
"Сравнение документов БУХ и УТ" ,
"Сравнение документов БУХ и УТ" ,
"ОткрытиеФормы" ,
Ложь ,
"" ) ;
ПараметрыРегистрации. Вставить( "Команды" , ТаблицаКоманд) ;
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицу_Команд()
Команды = Новый ТаблицаЗначений;
Команды. Колонки. Добавить( "Представление" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Идентификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Использование" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "ПоказыватьОповещение" , Новый ОписаниеТипов( "Булево" ) ) ;
Команды. Колонки. Добавить( "Модификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "" )
НоваяКоманда = ТаблицаКоманд. Добавить( ) ;
НоваяКоманда. Представление = Представление;
НоваяКоманда. Идентификатор = Идентификатор;
НоваяКоманда. Использование = Использование;
НоваяКоманда. ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда. Модификатор = Модификатор;
КонецПроцедуры
Для отчетов и печатных форм меняйте параметр Вид :
Код 1C v 8.3
ПараметрыРегистрации. Вставить( "Вид" , "ДополнительнаяОбработка" ) ;
Возможные значения этого поля приведу в виде таблицы
Значение поля "Вид" Расположение команды
Расширение
файла
ПечатнаяФорма В меню "Печать" на форме объекта или списка epf ЗаполнениеОбъекта В меню "Заполнить" на форме объекта или списка epf СозданиеСвязанныхОбъектов В меню "Создать на основании" - "Создание связанных объектов.." на форме объекта или списка epf Отчет В меню "Отчеты" на форме объекта или списка erf ДополнительнаяОбработка В списке соответствующих подсистем в меню "Сервис" - "Дополнительные обработки" epf ДополнительныйОтчет В списке соответствующих подсистем в меню "Сервис" - "Дополнительные отчеты" erf
Это поле может принимать одно из значений, возвращаемых функциями в типовых конфигурациях:
ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки<Вид>(). Например, для вида "ПечатнаяФорма" есть функция ВидОбработкиПечатнаяФорма().
Категория:
Внешние печатные формы, отчеты и обработк�… Добавление дополнительных отчетов и обработок в управляемом приложении Для добавления отчета или обработки нужно в модуле добавить Функцию СведенияОВнешнейОбработке()
Код 1C v 8.2 УП Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
ПараметрыРегистрации. Вставить( "Вид" , "ДополнительнаяОбработка" ) ;
ПараметрыРегистрации. Вставить( "Назначение" , МассивНазначений) ;
ПараметрыРегистрации. Вставить( "Наименование" , "Выгрузка проводок в БП 2.0" ) ;
ПараметрыРегистрации. Вставить( "БезопасныйРежим" , Истина ) ;
ПараметрыРегистрации. Вставить( "Версия" , "1.0" ) ;
ПараметрыРегистрации. Вставить( "Информация" , "Обработка 'Выгрузка проводок в БП 2.0'" ) ;
ТаблицаКоманд = ПолучитьТаблицуКоманд( ) ;
ДобавитьКоманду( ТаблицаКоманд,
"Выгрузка проводок в БП 2.0" ,
"ВыгрузкапроводоквБП20" ,
"ОткрытиеФормы" ,
Ложь ,
"" ) ;
ПараметрыРегистрации. Вставить( "Команды" , ТаблицаКоманд) ;
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды. Колонки. Добавить( "Представление" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Идентификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Использование" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "ПоказыватьОповещение" , Новый ОписаниеТипов( "Булево" ) ) ;
Команды. Колонки. Добавить( "Модификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "" )
НоваяКоманда = ТаблицаКоманд. Добавить( ) ;
НоваяКоманда. Представление = Представление;
НоваяКоманда. Идентификатор = Идентификатор;
НоваяКоманда. Использование = Использование;
НоваяКоманда. ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда. Модификатор = Модификатор;
КонецПроцедуры
После сохранения приступим к добавлению в программу:
Ставим галку Дополнительные отчеты и обработки
Открываем дополнительные отчеты и обработки и жмем создать, появляется окно выбора файла, после выбора:
Укажите Размещение (в каком разделе отображать данный отчет/обработку) и в списке в колонке Быстрый доступ выберите пользователей, которым будет доступен данный отчет/обработка.
Если при добавлении вы получаете ошибку:
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(2621)}: Поле объекта не обнаружено (ХранилищеВариантов)
Если ВнешнийОбъектМетаданные.ХранилищеВариантов <> Неопределено Тогда
То нужно заменить в модуле объекта, в ф ункции СведенияОВнешнейОбработке() :
Код 1C v 8.2 УП РегистрационныеДанные. Вставить( "Вид" , "ДополнительнаяОтчет" ) ;
на:
РегистрационныеДанные. Вставить( "Вид" , "ДополнительнаяОбработка" ) ;
Категория:
Внешние печатные формы, отчеты и обработк�… Как при печати выводить шапку на каждой странице (ПовторятьПриПечатиСтроки)? Необходимо при печати, если происходит переход на следующую страницу таблицы, выводить шапку таблицы вверху на новой странице.
для печати шапки на каждой странице в языке программирования есть специальный метод - ПовторятьПриПечатиСтроки
Примеры его использования:
Код 1C v 8.х ТабДок. ПовторятьПриПечатиСтроки = ТабДок. Область( 1 , , 2 , ) ;
ЭлементыФормы. Поле_ТД. ПовторятьПриПечатиСтроки = Макет. Область( "Шапка_Спецификации" ) ;
ЭлементыФормы. Поле_ТД. ПовторятьПриПечатиСтроки = Макет. Область( "R777:R778" ) ;
Полный код вывода табличного документа с повторением шапки на каждой странице:
Код 1C v 8.х Функция ПечатьПриказаТ11а()
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент. ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПечатнаяФорма_МатериальнаяПомощь_Т11а" ;
ТабДокумент. ПовторятьПриПечатиСтроки = ТабДокумент. Область( "R21:R22" ) ;
Макет = ПолучитьМакет( "Т11а" ) ;
ОбластьМакетаШапкаДокумента = Макет. ПолучитьОбласть( "Шапка" ) ;
ОбластьПовторятьПриПечати = Макет. ПолучитьОбласть( "ПовторятьПриПечати" ) ;
ОбластьМакетаСтрока = Макет. ПолучитьОбласть( "Строка" ) ;
ОбластьМакетаПодвал = Макет. ПолучитьОбласть( "Подвал" ) ;
ВыборкаДляШапкиДокумента = СформироватьЗапросДляШапкиДокумента( ) . Выбрать( ) ;
ВыборкаРаботники = СформироватьЗапросДляТабличнойЧасти( 1 ) . Выбрать( ) ;
Если ВыборкаРаботники. Количество( ) = 0 Тогда
ВыборкаРаботники = СформироватьЗапросДляТабличнойЧасти( 2 ) . Выбрать( ) ;
КонецЕсли ;
ВыводимыеОбласти = Новый Массив( ) ;
ВыводимыеОбласти. Добавить( ОбластьМакетаСтрока) ;
Пока ВыборкаДляШапкиДокумента. Следующий( ) Цикл
ОбластьМакетаШапкаДокумента. Параметры. Заполнить( ВыборкаДляШапкиДокумента) ;
ОбластьМакетаШапкаДокумента. Параметры. НазваниеОрганизации = СокрЛП( ОбластьМакетаШапкаДокумента. Параметры. НазваниеОрганизации) ;
КонецЦикла ;
ТабДокумент. Вывести( ОбластьМакетаШапкаДокумента) ;
ном= 0 ;
Пока ВыборкаРаботники. Следующий( ) Цикл
ОбластьМакетаСтрока. Параметры. Заполнить( ВыборкаРаботники) ;
ном= ном+ 1 ;
ОбластьМакетаСтрока. Параметры. ПодразделениеОрганизации = ВыборкаРаботники. ПодразделениеОрганизации. ПолноеНаименование( ) ;
ОбластьМакетаСтрока. Параметры. ном= ном;
ТабДокумент. Вывести( ОбластьМакетаСтрока) ;
КонецЦикла ;
ОбластьМакетаПодвал. Параметры. Заполнить( ВыборкаДляШапкиДокумента) ;
ТабДокумент. Вывести( ОбластьМакетаПодвал) ;
Если ТабДокумент. ВысотаТаблицы > 0 Тогда
Возврат УниверсальныеМеханизмы. НапечататьДокумент( ТабДокумент, 1 , Ложь , ОбщегоНазначения. СформироватьЗаголовокДокумента( СсылкаНаОбъект, "Приказ о поощрении работника " ) ) ;
КонецЕсли ;
КонецФункции
Категория:
Табличный документ Пример создания внешней печатной формы для управляемого приложения Пример создания внешней печатной формы АКТа для Бухгалтерии 3.0
1. В конфигураторе 1C Предприятия 8 создаем внешнюю обработку (Файл->Новый->Внешняя обработка), задаем имя.
2. В модуле обработки пишем код. Постараюсь его максимально комментировать. Главное должно быть:
функция ПечатьВнешнейПечатнойФормы табличного документа - которая выведет данные в макет функция Печать - вызывается из конфигурации! в нее передается массив печатаемых объектов и функция СведенияОВнешнейОбработке(). Она необходима для регистрации печатной формы в справочнике ДополнительныеОтчетыИОбработки, в ней собирается структура с данными для подключения формы. Эта функция, а также ряд сопутствующих ей, практически одинаковы для всех печатных форм, поэтому их можно просто копировать в новую печатную форму ничего не меняя.
Код 1C v 8.3
Функция ПечатьВнешнейПечатнойФормы(МассивОбъектов, ОбъектыПечати, Подписант) Экспорт
ТабДок = новый ТабличныйДокумент;
Макет = ПолучитьМакет( "Макет" ) ;
ОбластьШапки = Макет. ПолучитьОбласть( "Шапка" ) ;
ОбластьДанные = Макет. ПолучитьОбласть( "Данные" ) ;
ОбластьПодвал = Макет. ПолучитьОбласть( "Подвал" ) ;
Запрос = новый запрос;
Запрос. УстановитьПараметр( "МассивОбъектов" , МассивОбъектов) ;
Запрос. Текст = "ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.Сумма,
| РеализацияТоваровУслугТовары.Количество,
| РеализацияТоваровУслугТовары.Цена,
| РеализацияТоваровУслугТовары.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка В(&МассивОбъектов)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РеализацияТоваровУслугУслуги.Номенклатура,
| РеализацияТоваровУслугУслуги.Сумма,
| РеализацияТоваровУслугУслуги.Количество,
| РеализацияТоваровУслугУслуги.Цена,
| РеализацияТоваровУслугУслуги.Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги
|ГДЕ
| РеализацияТоваровУслугУслуги.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка" ;
ОбщаяВыборка = Запрос. Выполнить( ) . Выгрузить( ) ;
Для Каждого СсылкаНаОбъект из МассивОбъектов Цикл
ОбластьШапки. Параметры. ТекстЗаголовка = "Акт № " + СсылкаНаОбъект. Номер;
ОбластьШапки. Параметры. Организация = СсылкаНаОбъект. Организация;
ТабДок. Вывести( ОбластьШапки) ;
Отбор = Новый Структура;
Отбор. Вставить( "Ссылка" , СсылкаНаОбъект) ;
Выборка = ОбщаяВыборка. НайтиСтроки( Отбор) ;
ИтогоСумма = 0 ;
ИтогоКоличество = 0 ;
Для Каждого Стр из Выборка Цикл
ЗаполнитьЗначенияСвойств( ОбластьДанные. Параметры, Стр) ;
ИтогоСумма = ИтогоСумма + Стр. Сумма;
ИтогоКоличество = ИтогоКоличество + Стр. Количество;
ТабДок. Вывести( ОбластьДанные) ;
КонецЦикла ;
ОбластьПодвал. Параметры. ИтогоСумма = ИтогоСумма;
ОбластьПодвал. Параметры. Подписант = Подписант;
ТабДок. Вывести( ОбластьПодвал) ;
ТабДок. ВывестиГоризонтальныйРазделительСтраниц( ) ;
КонецЦикла ;
Возврат ТабДок;
КонецФункции
Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью. НужноПечататьМакет( КоллекцияПечатныхФорм, "АКТПечатьВнешняя" ) Тогда
ТабличныйДокумент = ПечатьВнешнейПечатнойФормы( МассивОбъектовНазначения, ОбъектыПечати, "" ) ;
УправлениеПечатью. ВывестиТабличныйДокументВКоллекцию( КоллекцияПечатныхФорм, "АКТПечатьВнешняя" , "АКТ (внешний)" , ТабличныйДокумент) ;
ИначеЕсли УправлениеПечатью. НужноПечататьМакет( КоллекцияПечатныхФорм, "АКТПечатьВнешняяИван" ) Тогда
ТабличныйДокумент = ПечатьВнешнейПечатнойФормы( МассивОбъектовНазначения, ОбъектыПечати, "Иванов А.Ю." ) ;
УправлениеПечатью. ВывестиТабличныйДокументВКоллекцию( КоллекцияПечатныхФорм, "АКТПечатьВнешняяИван" , "АКТ (внешний) Иванов" , ТабличныйДокумент) ;
ИначеЕсли УправлениеПечатью. НужноПечататьМакет( КоллекцияПечатныхФорм, "АКТПечатьВнешняяПетр" ) Тогда
ТабличныйДокумент = ПечатьВнешнейПечатнойФормы( МассивОбъектовНазначения, ОбъектыПечати, "Петров В.С." ) ;
УправлениеПечатью. ВывестиТабличныйДокументВКоллекцию( КоллекцияПечатныхФорм, "АКТПечатьВнешняяПетр" , "АКТ (внешний) Петров" , ТабличныйДокумент) ;
КонецЕсли ;
КонецПроцедуры
#Область СведенияОВнешнейОбработке
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации. Вставить( "Вид" , "ПечатнаяФорма" ) ;
МассивНазначений = Новый Массив;
МассивНазначений. Добавить( "Документ.РеализацияТоваровУслуг" ) ;
ПараметрыРегистрации. Вставить( "Назначение" , МассивНазначений) ;
ПараметрыРегистрации. Вставить( "Наименование" , "АКТ (Внешний)" ) ;
ПараметрыРегистрации. Вставить( "БезопасныйРежим" , ЛОЖЬ ) ;
ПараметрыРегистрации. Вставить( "Версия" , "1.0" ) ;
ПараметрыРегистрации. Вставить( "Информация" , "Дополнительная печатная форма" ) ;
ТаблицаКоманд = ПолучитьТаблицуКоманд( ) ;
ДобавитьКоманду( ТаблицаКоманд, "Внешний: АКТ" , "АКТПечатьВнешняя" , "ВызовСерверногоМетода" , Истина , "ПечатьMXL" ) ;
ДобавитьКоманду( ТаблицаКоманд, "Внешний: АКТ (Иванов)" , "АКТПечатьВнешняяИван" , "ВызовСерверногоМетода" , Истина , "ПечатьMXL" ) ;
ДобавитьКоманду( ТаблицаКоманд, "Внешний: АКТ (Петров)" , "АКТПечатьВнешняяПетр" , "ВызовСерверногоМетода" , Истина , "ПечатьMXL" ) ;
ПараметрыРегистрации. Вставить( "Команды" , ТаблицаКоманд) ;
Возврат ПараметрыРегистрации;
КонецФункции
#КонецОбласти
#Область Вспомогательное
Функция ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы = Неопределено, НаименованиеОбработки = "" , Информация = "" , Версия = "1.0" )
Если ТипЗнч( ОбъектыНазначенияФормы) = Тип( "Строка" ) Тогда
ОбъектНазначенияФормы = ОбъектыНазначенияФормы;
ОбъектыНазначенияФормы = Новый Массив;
ОбъектыНазначенияФормы. Добавить( ОбъектНазначенияФормы) ;
КонецЕсли ;
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации. Вставить( "Вид" , "ПечатнаяФорма" ) ;
ПараметрыРегистрации. Вставить( "БезопасныйРежим" , Истина ) ;
ПараметрыРегистрации. Вставить( "Назначение" , ОбъектыНазначенияФормы) ;
Если Не ЗначениеЗаполнено( НаименованиеОбработки) Тогда
НаименованиеОбработки = ЭтотОбъект. Метаданные( ) . Представление( ) ;
КонецЕсли ;
ПараметрыРегистрации. Вставить( "Наименование" , НаименованиеОбработки) ;
Если Не ЗначениеЗаполнено( Информация) Тогда
Информация = ЭтотОбъект. Метаданные( ) . Комментарий;
КонецЕсли ;
ПараметрыРегистрации. Вставить( "Информация" , Информация) ;
ПараметрыРегистрации. Вставить( "Версия" , Версия) ;
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды. Колонки. Добавить( "Представление" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Идентификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "Использование" , Новый ОписаниеТипов( "Строка" ) ) ;
Команды. Колонки. Добавить( "ПоказыватьОповещение" , Новый ОписаниеТипов( "Булево" ) ) ;
Команды. Колонки. Добавить( "Модификатор" , Новый ОписаниеТипов( "Строка" ) ) ;
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ВызовСерверногоМетода" , ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL" )
НоваяКоманда = ТаблицаКоманд. Добавить( ) ;
НоваяКоманда. Представление = Представление;
НоваяКоманда. Идентификатор = Идентификатор;
НоваяКоманда. Использование = Использование;
НоваяКоманда. ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда. Модификатор = Модификатор;
КонецПроцедуры
#КонецОбласти
3. Добавляем макет вывода печатной формы:
4. Сохраняем и добавляем в конфигурацию:
Подключается через Администрирование - Печатные формы, отчеты и обработки:
Создаете новую обработку, записывайте и при открытии документа Реализация, нажав на Печать - появляются доступные печатные формы с разными подписывающими.
Скачать Шаблон внешней печатной формы для управляемого приложения
Категория:
Внешние печатные формы, отчеты и обработк�… Авто добавление обработки в справочник Внешних обработок Чтобы не изменять типовую конфигурацию приходится использовать типовой механизм внешних печатных форм и обработок. Данный код проверяет - добавлена ли открываемая обработка в конфигурацию, если нет - задает вопрос и при положительном ответе - автоматически добавляет в конфигурацию:
Код 1C v 8.х ПолноеИмяФайлаОбработки = ЭтотОбъект. ИспользуемоеИмяФайла;
Запрос = Новый Запрос;
Запрос. УстановитьПараметр( "Наименование" , ЭтотОбъект. Метаданные( ) . Синоним) ;
Запрос. УстановитьПараметр( "ВидОбработки" , Перечисления. ВидыДополнительныхВнешнихОбработок. ПечатнаяФорма) ;
Запрос. Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВнешниеОбработки.Ссылка
|ИЗ
| Справочник.ВнешниеОбработки КАК ВнешниеОбработки
|ГДЕ
| ВнешниеОбработки.Наименование = &Наименование
| И ВнешниеОбработки.ВидОбработки = &ВидОбработки" ;
Если НЕ Запрос. Выполнить( ) . Пустой( ) Тогда Возврат ; КонецЕсли ;
Если Вопрос( "Зарегистрировать обработку как печатную форму для документа "" ЗарплатаКВыплатеОрганизаций"" в справочнике "" Внешние обработки"" ?" , РежимДиалогаВопрос. ДаНет) = КодВозвратаДиалога. Да Тогда
ВнешняяОбработка = Справочники. ВнешниеОбработки. СоздатьЭлемент( ) ;
ВнешняяОбработка. Наименование = ЭтотОбъект. Метаданные( ) . Синоним;
ВнешняяОбработка. ХранилищеВнешнейОбработки = Новый ХранилищеЗначения( Новый ДвоичныеДанные( ПолноеИмяФайлаОбработки) ) ;
ВнешняяОбработка. ВидОбработки = Перечисления. ВидыДополнительныхВнешнихОбработок. ПечатнаяФорма;
ВнешняяОбработка. Комментарий = "Внешняя печатная форма для документа "" ЗарплатаКВыплатеОрганизаций"" " ;
ВнешняяОбработка. КомментарийКФайлуИсточнику = ПолучитьКомментарийКФайлу( ПолноеИмяФайлаОбработки) ;
НовСтр = ВнешняяОбработка. Принадлежность. Добавить( ) ;
НовСтр. ПредставлениеОбъекта = "Документ "" Зарплата к выплате организаций"" " ;
НовСтр. ХранилищеВнешнейОбработки = Новый ХранилищеЗначения( Новый ДвоичныеДанные( ПолноеИмяФайлаОбработки) ) ;
НовСтр. СсылкаОбъекта = Документы. ЗарплатаКВыплатеОрганизаций. ПустаяСсылка( ) ;
Попытка
ВнешняяОбработка. Записать( ) ;
Исключение
Сообщить( ОписаниеОшибки( ) , СтатусСообщения. Важное) ;
КонецПопытки ;
КонецЕсли ;
Категория:
1С Общие вопросы - Обычные формы Выгрузка в PDF из 1С (Средствами OpenOffice) Возникла задача отправлять счета почтой. PDFcreator не подошёл поскольку не удалось вместить счёт на одну страницу по ширине. Решил попробовать OpenOffice. Как сохранять в PDF нашёл быстро, а вот как уместить счёт на одну страницу вширь искал долго.
В версии 1С 8.2.232 появилась возможность сохранять табличный документ в xls файл на сервера под линуксом. А вот работать с Опеном офисом из-под линукса пока не получается. Собственно комментари ненужны. Вот весь код. Самое интересное это бодание со стилями страниц в Опене Офисе. Жаль что этот фрагмент работает только на клиенте. На сервере вопрос не решается *08
Код 1C v 8.2 УП Процедура КнопкаВыполнитьНажатие(Кнопка)
Если Письмо. Основание. Пустая( ) Тогда
Возврат
КонецЕсли ;
Попытка
ServiceManager = Новый COMОбъект( "com.sun.star.ServiceManager" ) ;
Исключение
Возврат
КонецПопытки ;
Заказ = Письмо. Основание. ПолучитьОбъект( ) ;
Расшифровка= Новый Структура;
Расшифровка. Вставить( "СсылкаНаВнешнююОбработку" , Константы. ПФСчетаДляКлиента. Получить( ) ) ;
Расшифровка. Вставить( "ВидПечатнойФормы" , Перечисления. ВидыДополнительныхВнешнихОбработок. ПечатнаяФорма) ;
Расшифровка. Вставить( "НомерСтроки" , 1 ) ;
тд = УниверсальныеМеханизмы. НапечататьВнешнююФорму( Заказ, Расшифровка) ;
ВременныйФайл = ПолучитьИмяВременногоФайла( ) ;
ВременныйФайлXLS = ВременныйФайл + ".xls" ;
ВременныйФайлPDF = ВременныйФайл + ".pdf" ;
тд. Записать( ВременныйФайлXLS, ТипФайлаТабличногоДокумента. XLS97) ;
Desktop = ServiceManager. createInstance( "com.sun.star.frame.Desktop" ) ;
НастройкиОткрытия = Новый COMSafeArray( "VT_VARIANT" , 1 ) ;
PropertyValue = ServiceManager. Bridge_GetStruct( "com.sun.star.beans.PropertyValue" ) ;
PropertyValue. Name = "Hidden" ;
PropertyValue. Value = Истина ;
НастройкиОткрытия. SetValue( 0 , PropertyValue) ;
ВременныйФайлXLS_какУРЛ = "file:///" + СтрЗаменить( ВременныйФайлXLS, "\" , "/" ) ;
ОпенОфис = Desktop. LoadComponentFromURL( ВременныйФайлXLS_какУРЛ, "_blank" , 0 , НастройкиОткрытия) ;
Стили = ОпенОфис. StyleFamilies. getByName( "PageStyles" ) ;
Для поз = 0 по Стили. count - 1 Цикл
МойСтиль = Стили. getByIndex( поз) ;
МойСтиль. ScaleToPagesX = 1 ;
КонецЦикла ;
НастройкиСохранения = Новый COMSafeArray( "VT_VARIANT" , 1 ) ;
PropertyValue = ServiceManager. Bridge_GetStruct( "com.sun.star.beans.PropertyValue" ) ;
PropertyValue. Name = "FilterName" ;
PropertyValue. Value = "calc_pdf_Export" ;
НастройкиСохранения. SetValue( 0 , PropertyValue) ;
ВременныйФайлPDF_какУРЛ = "file:///" + СтрЗаменить( ВременныйФайлPDF, "\" , "/" ) ;
ОпенОфис. storeToURL( ВременныйФайлPDF_какУРЛ, НастройкиСохранения) ;
ОпенОфис. close( - 1 ) ;
ОпенОфис = Неопределено ;
объектПисьмо = Письмо. ПолучитьОбъект( ) ;
стрВложение = объектПисьмо. Вложения. Добавить( ) ;
стрВложение. ИмяФайла = "Счёт " + Строка( Заказ. Номер) + ".pdf" ;
стрВложение. Файл = Новый ХранилищеЗначения( Новый ДвоичныеДанные( ВременныйФайлPDF) ) ;
объектПисьмо. Записать( ) ;
Попытка
УдалитьФайлы( ВременныйФайлXLS) ;
УдалитьФайлы( ВременныйФайлPDF) ;
Исключение
КонецПопытки ;
КонецПроцедуры
Автор:
Трактор
Функция позволяющая выполнить выгрузку табличного документа в PDF средствами OpenOffice
Код 1C v 8.х
Функция ВыгрузитьТабличныйДокументВPDF(ДанныеВыгрузки, ПутьВыгрузки, ИмяФайлаБезРасширения)
Если НЕ ЗначениеЗаполнено( ПутьВыгрузки) Тогда
ПутьВыгрузки = КаталогВременныхФайлов( ) ;
КонецЕсли ;
ПутьВыгрузки = ? ( Прав( ПутьВыгрузки, 1 ) = "\" , ПутьВыгрузки, ПутьВыгрузки + "\" ) ;
РасширениеXSL = ".xls" ;
РасширениеPDF = ".pdf" ;
ПолноеИмяФайлаXLS = ПутьВыгрузки + ИмяФайлаБезРасширения + РасширениеXSL;
#Если Клиент Тогда
Состояние( "Создание временного файла..." ) ;
#КонецЕсли
Попытка
Если ТипЗнч( ДанныеВыгрузки) = Тип( "ТабличныйДокумент" ) Тогда
ДанныеВыгрузки. Записать( ПолноеИмяФайлаXLS, "XLS" ) ;
ИначеЕсли ТипЗнч( ДанныеВыгрузки) = Тип( "ТекстовыйДокумент" ) Тогда
ДанныеВыгрузки. Записать( ПолноеИмяФайлаXLS, "XLS" ) ;
Иначе
#Если Клиент Тогда
Сообщить( "Данные для выгрузки переданы в неподдерживаемом формате. Дальнейшее выполнение невозможно." + Символы. ПС + ОписаниеОшибки( ) ) ;
#КонецЕсли
Возврат 0 ;
КонецЕсли ;
Исключение
#Если Клиент Тогда
Сообщить( "Произошла ошибка при выгрузке временного файла. Возможно ошибка доступа к папке, в которую происходит запись." + Символы. ПС + ОписаниеОшибки( ) ) ;
#КонецЕсли
Возврат 0 ;
КонецПопытки ;
Попытка
#Если Клиент Тогда
Состояние( "Открытие компоненты OpenOffice..." ) ;
#КонецЕсли
ServiceManager = Новый COMОбъект( "com.sun.star.ServiceManager" ) ;
Скрипт = Новый COMОбъект( "MSScriptControl.ScriptControl" ) ;
Скрипт. language = "javascript" ;
Скрипт. AddObject( "OpenOffice" , ServiceManager) ;
#Если Клиент Тогда
Состояние( "Открытие временного файла..." ) ;
#КонецЕсли
Скрипт. eval( "Массив=new Array()" ) ;
Массив = Скрипт. eval( "Массив" ) ;
Скрипт. eval( "Массив[0] = OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')" ) ;
Скрипт. eval( "Массив[0].Name = 'Hidden'" ) ;
Скрипт. eval( "Массив[0].Value = true" ) ;
Скрипт. AddCode( "function SetItem(ind,val){Массив[ind]=val}" ) ;
Скрипт. AddObject( "ServiceManager" , ServiceManager) ;
Desktop = ServiceManager. createInstance( "com.sun.star.frame.Desktop" ) ;
Document = Desktop. LoadComponentFromURL( "file:///" + ПолноеИмяФайлаXLS, "_blank" , 0 , Массив) ;
#Если Клиент Тогда
Состояние( "Запись в PDF..." ) ;
#КонецЕсли
Скрипт. eval( "Массив2=new Array()" ) ;
Массив2 = Скрипт. eval( "Массив2" ) ;
Скрипт. eval( "Массив2[0] = OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')" ) ;
Скрипт. eval( "Массив2[0].Name = 'FilterName'" ) ;
Скрипт. eval( "Массив2[0].Value = 'writer_pdf_Export'" ) ;
ПолноеИмяФайлаPDF = "file:///" + СтрЗаменить( ПолноеИмяФайлаXLS, РасширениеXSL, РасширениеPDF) ;
ПолноеИмяФайлаPDF = СтрЗаменить( ПолноеИмяФайлаPDF, ВРег( РасширениеXSL) , РасширениеPDF) ;
ПолноеИмяФайлаPDF = СтрЗаменить( ПолноеИмяФайлаPDF, "\" , "/" ) ;
Document. storeToURL( ПолноеИмяФайлаPDF, Массив2 ) ;
Document. close( - 1 ) ;
Document = Неопределено ;
Desktop = Неопределено ;
#Если Клиент Тогда
Состояние( "Удаление временного файла..." ) ;
#КонецЕсли
Попытка
УдалитьФайлы( ПолноеИмяФайлаXLS) ;
Исключение
#Если Клиент Тогда
Сообщить( "Произошла ошибка при удалении временного файла. Возможно, потребуется удалить его вручную." + Символы. ПС + ОписаниеОшибки( ) ) ;
#КонецЕсли
КонецПопытки ;
ПолноеИмяФайлаPDF = СтрЗаменить( ПолноеИмяФайлаPDF, "file:///" , "" ) ;
ПолноеИмяФайлаPDF = СтрЗаменить( ПолноеИмяФайлаPDF, "/" , "\" ) ;
#Если Клиент Тогда
Состояние( "Выгрузка выполнена." ) ;
Предупреждение( "Выгрузка выполнена." + Символы. ПС + ПолноеИмяФайлаPDF) ;
#КонецЕсли
Возврат ПолноеИмяФайлаPDF;
Исключение
Document. close( - 1 ) ;
#Если Клиент Тогда
Предупреждение( ОписаниеОшибки( ) ) ;
#КонецЕсли
Возврат 0 ;
КонецПопытки
КонецФункции
Автор:
doom_2001 Категория:
Работа с Microsoft Office и OpenOffice