Имя: Пароль:
1C
1С v8
Печать любого документа в 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, истина)


а далее с полученным файлом делаем все что хотим, перед вызовом. Всяких выборов принтеров не выходит, в общем пользователь ничего и не увидет. Результат - все чинно и благородно!!!!
Ошибка? Это не ошибка, это системная функция.