|
Печать любого документа в 1с | ☑ | ||
---|---|---|---|---|
0
Grigory123456789
22.05.13
✎
14:26
|
В общем через обработку хотелось бы получить печатную таблицу любого документа, но с небольшой оговоркой:
1) Мет=Ссылка.Метаданные(); Для каждого Макет Из Мет.Макеты Цикл СписВыб.Добавить(Макет.Имя,Макет.Имя); КонецЦикла; (могу получить нужный мне макет) 2) Ссылка.ПолучитьОбъект().Печать(Сокрлп(Элемент.Значение), 1, истина)(могу напечатать любо) |
|||
1
1Сергей
22.05.13
✎
14:28
|
см. УниверсальныеМеханизмы.НапечататьДокумент
|
|||
2
Grigory123456789
22.05.13
✎
14:30
|
блин не весь вопрос закинулся, сейчас дооформлю
|
|||
3
Grigory123456789
22.05.13
✎
14:32
|
3) Процедура СоздатьФайлПДФ(Таб, ИмяФайла)
Попытка ПДФПринтер = Новый COMОбъект("Bullzip.PDFPrinterSettings"); ПДФПринтер.SetValue("output",ИмяФайла); ПДФПринтер.SetValue("ShowSaveAS", "never"); ПДФПринтер.SetValue("ShowProgress", "no"); ПДФПринтер.SetValue("ShowProgressFinished", "no"); ПДФПринтер.SetValue("ShowSettings", "never"); ПДФПринтер.SetValue("ShowPDF", "no"); ПДФПринтер.SetValue("ConfirmOverwrite","no"); ПДФПринтер.WriteSettings(); Таб.Автомасштаб = Истина; Таб.ИмяПринтера = "doPDF v7";Таб.Напечатать(Истина); PDFФайл = Новый Файл(ИмяФайла); Пока НЕ PDFФайл.Существует() Цикл ОбработкаПрерыванияПользователя(); КонецЦикла; Исключение Сообщить(ОписаниеОшибки()); Сообщить("Скорее всего необходимо установить или переустановить ""Bullzip PDF Printer"); КонецПопытки; КонецПроцедуры вопрос в том как из пункта 2 получить таб для процедуры 3, это все во внешней обработке которая будет работать на разных компах, так что доступа к конфе не будет. |
|||
4
Зойч
22.05.13
✎
14:32
|
(3) начиная с 8.2.15 это не актуально
|
|||
5
Grigory123456789
22.05.13
✎
14:33
|
поясните, не понял
|
|||
6
1Сергей
22.05.13
✎
14:33
|
Таб = Ссылка.ПолучитьОбъект().Печать(Сокрлп(Элемент.Значение), 1, истина)
|
|||
7
Grigory123456789
22.05.13
✎
14:34
|
спс, сейчас попробую
|
|||
8
Grigory123456789
22.05.13
✎
14:38
|
Обращение к процедуре объекта как к функции (Печать)
|
|||
9
Grigory123456789
22.05.13
✎
14:38
|
ошибка
|
|||
10
Grigory123456789
22.05.13
✎
14:39
|
версия платформы (8.2.16.368)
|
|||
11
takefive
22.05.13
✎
14:42
|
(8) ЦПШ?
|
|||
12
Grigory123456789
22.05.13
✎
14:44
|
???
|
|||
13
takefive
22.05.13
✎
14:54
|
||||
14
Grigory123456789
22.05.13
✎
15:01
|
че про че???? причем тут цпш????
|
|||
15
Grigory123456789
22.05.13
✎
15:26
|
????
|
|||
16
Grigory123456789
22.05.13
✎
15:44
|
продолжение следует?
|
|||
17
1Сергей
22.05.13
✎
15:46
|
Всё зависит от конфигурации. Печать() - это не предопределенная процедура
|
|||
18
Grigory123456789
22.05.13
✎
15:48
|
с этим я более чем согласен, может есть отлавливать именно процедуру печти(есть механизмы?) через вк, через WMI?
|
|||
19
Grigory123456789
22.05.13
✎
16:17
|
неушто вариантов 0?
|
|||
20
Grigory123456789
23.05.13
✎
09:22
|
???
|
|||
21
Godofsin
23.05.13
✎
09:36
|
(20) да ну залезь уже в модуль объекта документа и посмотри экспортную процедуру Печать()
|
|||
22
Grigory123456789
23.05.13
✎
09:39
|
залез, посмотрел результат - это все во внешней обработке которая будет работать на разных компах, так что доступа к конфе не будет.(3)
|
|||
23
Godofsin
23.05.13
✎
09:41
|
(22) ааа... ты вон чо задумал...
|
|||
24
Grigory123456789
23.05.13
✎
09:44
|
ага)))
|
|||
25
Grigory123456789
23.05.13
✎
09:54
|
подскажите куда копать
|
|||
26
Grigory123456789
24.05.13
✎
09:57
|
Ну что ж огромное "спасибо" за помощь!!!! мож кому и понадобится -
Функция СформироватьПутьКPDFФайлу(ПолеТабличногоДокумента, ИмяФайлаВложения, ФайлВФорматеPDF) //ФайлВФорматеPDF – временный файл с расширением PDF //ИмяФайлаВложения – Желаемое имя сформированного файла //ПолеТабличногоДокумента – Табличное поле которое хотим сохранить в PDF формате //Указываем каталог временных файлов в нашей переменной КаталогВременногоФайла = "C:\";//КаталогВременныхФайлов(); //Подлючаем компоненту Попытка УтилитаПечати = Новый COMОбъект("PDFCreator.clsPDFCreator"); Исключение Сообщить("Не установлен драйвер принтера PDFCreator!", СтатусСообщения.Важное); //Возврат; КонецПопытки; Состояние("Настройка виртуального принтера …"); //Получаем наш принтер и устанавливаем для него настройки ПринтерыPDF = УтилитаПечати.cGetPDFCreatorPrinters(); Если ПринтерыPDF.Count() = 0 Тогда УтилитаПечати.cAddPDFCreatorPrinter("PDFCreator"); ПринтерыPDF = УтилитаПечати.cGetPDFCreatorPrinters(); КонецЕсли; ИмяПринтераPDF = ПринтерыPDF.Item(1); УтилитаПечати.cStart(); //Если настройки были сделаны ранее – загружаем их Если Не УтилитаПечати.cProfileExists("Печать 1С") Тогда УтилитаПечати.cAddProfile("Печать 1С", УтилитаПечати.cStandardOptions); КонецЕсли; НастройкиПоУмолчанию = УтилитаПечати.cReadOptions("Печать 1С"); НастройкиПоУмолчанию.UseAutosave = 1; НастройкиПоУмолчанию.UseAutosaveDirectory = 1; НастройкиПоУмолчанию.UseCreationDateNow = 1; НастройкиПоУмолчанию.AutosaveDirectory = КаталогВременногоФайла; //В настройках указываем имя выходного файла НастройкиПоУмолчанию.AutosaveFileName = ИмяФайлаВложения; НастройкиПоУмолчанию.AutosaveFormat = 0; // 0 = PDF, 1 = PNG, 2 = JPEG, 3 = BMP, 4 = PCX, 5 = TIFF, 6 = PS, 7 = EPS, 8 = TXT, 9 = PDF/A-1b, 10 = PDF/X, 11 = PSD, 12 = PCL, 13 = RAW НастройкиПоУмолчанию.AutosaveStartStandardProgram = 0; //Сохраняем ранее установленные параметры УтилитаПечати.cSaveOptions(НастройкиПоУмолчанию, "Печать 1С"); Состояние("Создание файлов …"); УтилитаПечати.cOptionsProfile = "Печать 1С"; // эта строка, по-моему, не работает УтилитаПечати.cOptions = НастройкиПоУмолчанию; //ТабДок = ПолеТабличногоДокумента; //СтароеИмяПринтера = ТабДок.ИмяПринтера; //ТабДок.ИмяПринтера = ИмяПринтераPDF; //ТабДок.Напечатать(); ////Далее приведен код по ожиданию формированию файла так как он формируется не моментально, а зависит от производительности компьютера. В случае если в течении ожидаемого времени файл не был сформирован – выходим из функции //ФайлСформирован = Истина; ФайлPDF = Новый Файл(КаталогВременногоФайла + «\»+ИмяФайлаВложения+».pdf»); Порог = ТекущаяДата() + 10; //Пока Не ФайлPDF.Существует() И ФайлСформирован Цикл //ОбработкаПрерыванияПользователя(); //Если ТекущаяДата() >= Порог Тогда //ФайлСформирован = Ложь; //КонецЕсли; //КонецЦикла; //Порог = ТекущаяДата() + 10; //Пока ФайлPDF.Размер() = 0 И ФайлСформирован Цикл //ОбработкаПрерыванияПользователя(); //Если ТекущаяДата() >= Порог Тогда //ФайлСформирован = Ложь; //КонецЕсли; КонецЦикла; //Если Не ФайлСформирован Тогда //Сообщить(«Ожидание отклика завершено. Файл не создан!», СтатусСообщения.Важное); // Попытка //УтилитаПечати.cClose(); //Исключение //Сообщить(«Нормальное завершение процесса печати невозможно!», СтатусСообщения.ОченьВажное); КонецПопытки; //УтилитаПечати = Неопределено; //НастройкиПоУмолчанию = Неопределено; //Состояние(); //Возврат «»; //КонецЕсли; ////Перемещаем файл в файл с необходимым именем //ПереместитьФайл(ФайлPDF.ПолноеИмя, ФайлВФорматеPDF) ; //ТабДок.ИмяПринтера = СтароеИмяПринтера; УтилитаПечати.cClose(); УтилитаПечати = Неопределено; НастройкиПоУмолчанию = Неопределено; Состояние(); Конецфункции Процедура Кнопка3Нажатие(Элемент) СформироватьПутьКPDFФайлу("",ЭлементыФормы.ТабличнаяЧастьИсходящихДокументов.Колонки.Наименование,"C:\"); КонецПроцедуры а далее уже Ссылка.ПолучитьОбъект().Печать(Сокрлп(Элемент.Значение), 1, истина) а далее с полученным файлом делаем все что хотим, перед вызовом. Всяких выборов принтеров не выходит, в общем пользователь ничего и не увидет. Результат - все чинно и благородно!!!! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |