gifts2017

Конвертация в ПДФ из 1С 7.7 через 1С 8.х

Опубликовал transt в раздел Обмен - Перенос данных из 1С7.7 в 1C8.X

Инет пестрит вариантами конвертаций из 1С7.7 в PDF, но устраивающего варианта так и не нашел.
Сел, подумал и  написал свой конвертер на 1С 8.х

Собственно решение на поверхности:

1. Сохраняем табллицу 1С 7.7 в mxl

2. При помощи 1C 8.х конвертируем mxl в pdf (вызов через командную строку)

 

код для 1С 7.7 (взято из рабочей внешней формы):

		Если Вопрос("Конвертировать в ПДФ для отправки по email?","Да+Нет")="Да" Тогда  
			ТекИмя = ВосстановитьЗначение("ИмяФайлаСчетаДляEmail");
			Если СокрЛП(ТекИмя) = "" Тогда
			    ТекИмя = "Счет.pdf";
			КонецЕсли;
		    ТекКаталог = ВосстановитьЗначение("КаталогФайловДляEmail");
			Если ФС.ВыбратьФайл(1,ТекИмя,ТекКаталог,"Укажите имя файла для email","PDF (*.pdf) |*.pdf","pdf")=1 Тогда
			    СохранитьЗначение("ИмяФайлаСчетаДляEmail",ТекИмя);   
			    СохранитьЗначение("КаталогФайловДляEmail",ТекКаталог);   
				ПолноеИмя = ""+ТекКаталог+"\"+СтрЗаменить(ТекИмя,".pdf",".mxl");
				ИсхТабл.Записать(ПолноеИмя);
				ЗапуститьПриложение("""C:\Program Files (x86)\1cv8\8.3.8.1652\bin\1cv8.exe"" enterprise /f""E:\1C_Base_v8\КонверторПДФ"" /c"""+ПолноеИмя+"""");
			КонецЕсли;
		КонецЕсли;

Код для 1С 8.х (в Модуль Обычного Приложения):

Процедура ПриНачалеРаботыСистемы()
	
	ИмяФайла = СокрЛП(ПараметрЗапуска);
	
	ТекФайл = Новый Файл(ИмяФайла);
	Если ТекФайл.Существует() Тогда
	
		ИмяНовогоФайла = СтрЗаменить(ТекФайл.ПолноеИмя,".mxl",".pdf");
		НовыйФайл  = Новый Файл(ИмяНовогоФайла);
		
		ТабДок = Новый ТабличныйДокумент;
		ТабДок.Прочитать(ТекФайл.ПолноеИмя);
		ТабДок.АвтоМасштаб = Истина;
		
		ПереместитьФайл(ТекФайл.ПолноеИмя,ИмяНовогоФайла); //трём mxl
		ТабДок.Записать(ИмяНовогоФайла,ТипФайлаТабличногоДокумента.PDF);
			
	КонецЕсли; 
	
	ЗавершитьРаботуСистемы();
	
	
КонецПроцедуры

Всё!

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Конфигурация 1С 8: "Конвертер ПДФ"
.1CD 1,13Mb
01.06.16
0
.1CD 1,13Mb 0 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей (Che) Коцюра (CheBurator) 01.06.16 21:02
осталось вместо любого бесплатного ПДФ принтера взять платную восьмерку...
2. transt 08.06.16 06:50
(1) CheBurator, Сейчас почти все официальную бухгалтерию на 8ке ведут...
Из-за горстки клиентов у которых 7ки остались приходится иногда голову греть.
3. transt 08.06.16 06:53
На сейчас выяснены следующие неудобства: разделитель страниц игнорируется, т.е. в ПДФе получается всё слитно независимо от исходника
4. Максим Шивирдинов (Ветер в поле) 12.06.16 08:52
Так чем не устроил Йоксель? Работает быстро, корректно. Есть только пара нареканий: в этих PDF не работает поиск и качество заточено для просмотра на экране - для распечатки на принтере видна зернистость.
Вот мой вариант сохранения в PDF. Он интересен тем, что есть автоподбор ширины для A4.
Функция глПолучитьСтандартныеМетаданныеPDF(Заголовок="", Тема="", Автор=0, КлючевыеСлова=0, ГенераторОригинальногоДокумента=0, ГенераторДокументаPDF=0) Экспорт
	
	спМД = СоздатьОбъект("СписокЗначений");
	спМД.ДобавитьЗначение(СокрЛП(глОсновнаяФирма.ПолнНаименование), "Автор");
	спМД.ДобавитьЗначение("1С:Предприятие 7.7", "ГенераторОригинальногоДокумента");
	спМД.ДобавитьЗначение("Йоксель", "ГенераторДокументаPDF");
	спМД.ДобавитьЗначение("", "КлючевыеСлова");
	
	спМД.ДобавитьЗначение(Заголовок, "Заголовок");
	спМД.ДобавитьЗначение(Тема, "Тема");
	
	Если ТипЗначенияСтр(Автор) = "Строка" Тогда
		спМД.Установить("Автор", Автор);
	КонецЕсли;
	
	Если ТипЗначенияСтр(КлючевыеСлова) = "Строка" Тогда
		спМД.Установить("КлючевыеСлова", КлючевыеСлова);
	КонецЕсли;
	
	Если ТипЗначенияСтр(ГенераторОригинальногоДокумента) = "Строка" Тогда
		спМД.Установить("ГенераторОригинальногоДокумента", ГенераторОригинальногоДокумента);
	КонецЕсли;
	
	Если ТипЗначенияСтр(ГенераторДокументаPDF) = "Строка" Тогда
		спМД.Установить("ГенераторДокументаPDF", ГенераторДокументаPDF);
	КонецЕсли;
	
	спМД.ДобавитьЗначение(Заголовок, "Заголовок");
	
	Возврат спМД;
	
КонецФункции //глПолучитьСтандартныеМетаданныеPDF

//*****************************************************************************
Функция глКонвертироватьPDF(Таб, ИмяФайла, Знач спМетаданных="") Экспорт
	Перем ЧЧ, ММ, СС;
	
	ТабДокумент = СоздатьОбъект("ТабличныйДокумент");
	ТабДокумент.ЗагрузитьИзТаблицы(Таб);
	
	//автоопределение ширины PDF-файла
	ШиринаТаблицыВСимволах = 0;
	Для К = 1 По ТабДокумент.ШиринаТаблицы() Цикл
		ШиринаТаблицыВСимволах = ШиринаТаблицыВСимволах + ТабДокумент.Область(1, К).ШиринаСтолбца();
	КонецЦикла;
	
	//масштабируем исходя из 567 твипов в 1 см. Коэф. 116.2 в одном символе определен экспериментально
	ШиринаСтраницыВТвипах = Макс(11907, Окр(ШиринаТаблицыВСимволах * 116.2));
	Отступы = Окр(567 * ШиринаСтраницыВТвипах / 11907);
	
	Конвертер = СоздатьОбъект("Йоксель.ГрафическийКонвертер.PDF");
	Конвертер.ВысотаСтраницы = Окр(ШиринаСтраницыВТвипах * 297 / 210);
	Конвертер.ШиринаСтраницы = ШиринаСтраницыВТвипах;
	Конвертер.КоличествоБитНаПиксел = 24;
	Конвертер.Документ = ТабДокумент;
	Конвертер.ПолеСлева = Отступы;
	Конвертер.ПолеСверху = Отступы;
	Конвертер.ПолеСправа = Отступы;
	Конвертер.ПолеСнизу = Отступы;
	
	Если ПустоеЗначение(спМетаданных) = 1 Тогда
		спМетаданных = глПолучитьСтандартныеМетаданныеPDF();
	КонецЕсли;
	
	Данные = Конвертер.СтандартныеМетаданные;
	Данные.Автор = спМетаданных.Получить("Автор");
	Данные.Заголовок = спМетаданных.Получить("Заголовок");
	Данные.Тема = спМетаданных.Получить("Тема");
	Данные.КлючевыеСлова = спМетаданных.Получить("КлючевыеСлова");
	Данные.ГенераторОригинальногоДокумента = спМетаданных.Получить("ГенераторОригинальногоДокумента");
	Данные.ГенераторДокументаPDF = спМетаданных.Получить("ГенераторДокументаPDF");
	
	ДатаСоздания = ТекущаяДата();
	ВремяСоздания = ТекущееВремя(ЧЧ, ММ, СС);
	Данные.УстановитьДатуСоздания(ДатаГод(ДатаСоздания), ДатаМесяц(ДатаСоздания), ДатаЧисло(ДатаСоздания), ЧЧ, ММ, СС);
	
	Конвертер.ЗаписатьВФайл(ИмяФайла);
	
	Возврат 1;
	
КонецФункции //глКонвертироватьPDF
...Показать Скрыть
5. transt 12.06.16 14:05
(4) Ветер в поле, подозреваю, что есть ещё вариантов 20 "приготовления подобного супа".

Личное отношение к Йокселю: проект давно не поддерживается, пожелания про зернистость не исправили, авторов не найти, что там ещё может быть в этой "шкатулке" неизвестно, откуда скачать оригинальный Йоксель в данных реалиях - загадка.

Данная статья просто идея таким же 1Сникам как я сам. Каков будет конечный "рецепт" - пусть решает каждый сам.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа