Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Экспорт печатной формы акта и счета-фактуры в файл (http://forums.kuban.ru/f1040/eksport_pechatnoj_formy_akta_i_scheta-faktury_v_fajl-3228043.html)

Nikitz 26.10.2012 13:36

Экспорт печатной формы акта и счета-фактуры в файл
 
Есть внешняя обработка, которая формирует на основании счетов акты и счета-фактуры, а затем печатает их.

Стоит задача помимо печати акта и СЧФ, еще и сохранять их в файлы в любом виде (в указанную директорию), пригодном для печати или отправки электронной почтой.

Это реально? Если да, то буду благодарен за примерный код или любые ссылки и наводки.

Сли то 26.10.2012 13:49

ТабДок.Записать("C:\My Documents\Таблица2.mxl");

Либо я чего то не понимаю?

roma n 26.10.2012 13:52

Раз обработка печатает табличные документы самостоятельно, пусть и сохраняет их ... в чем проблема?
Метод Записать() Табличного документа...

Nikitz 26.10.2012 13:56

Спасибо, Друзья! Похоже, да, нужен метод Записать().

Я просто с 1С встречаюсь пару раз в полгода, поэтому плаваю.

Доброго вам здоровьичка!

Чучундер 26.10.2012 16:11

готовое решение
[url]http://infostart.ru/public/14180/[/url]
.
совершенно аналогичное - для сохранения в папку.

Nikitz 29.10.2012 10:35

Нет, видимо, я еще глуп и чего-то не понимаю.
Вот кусок кода, который печатает акт:

Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка РТУ
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.СчетНаОплатуПокупателю.Ссылка = &Счет";
Запрос.УстановитьПараметр("Счет", Счет.Ссылка);

Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
Сообщить("Из данного счета уже делали реализацию");
Сообщить(Результат.РТУ);
РТУ=Результат.РТУ;
РТУ=РТУ.ПолучитьОбъект();
Иначе
Сообщить("Создаём новую реализацию");
РТУ = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
РТУ.Заполнить(Счет.Ссылка);
НаименованиеДоговора= "Счет" + " № " + ОбщегоНазначения.ПолучитьНомерНаПечать(Счет) + " от " + Формат(Счет.Дата, "ДФ='дд ММ гггг'")+ " г.";
НайтиДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(НаименованиеДоговора,,,Счет.Контрагент);
Если Не НайтиДоговор.Пустая() Тогда
РТУ.ДоговорКонтрагента=НайтиДоговор.Ссылка;
КонецЕсли;
РТУ.Дата = ТекущаяДата();
РТУ.ВидОперации=Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;
РТУ.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли; //Если реализации нет

// ТУТ ИДЕТ ПЕЧАТЬ ДОКУМЕНТА, ПЫТАЕМСЯ ЕГО СОХРАНИТЬ
РТУ.Печать("Акт", 2, ИСТИНА, ИСТИНА);
РТУ.Записать("C:\акт-1.mxl");

И на последней строке при выполнении этого участка кода получаю ошибку:

Ошибка при вызове метода контекста (Записать) РТУ.Записать("C:\Акт-1.mxl");
по причине: Несоответствие типов (параметр номер '1')

Что я делаю не так?

Nikitz 29.10.2012 10:36

Использую 1С:Предприятие 8.2 (8.2.16.368)

roma n 29.10.2012 11:10

[quote=Nikitz;27467752]Что я делаю не так?[/quote]
Метод Записать() [u]Табличного документа[/u] пытаешься применить к объекту совсем другого типа

Nikitz 29.10.2012 12:40

А как же добраться до табличного документа и есть ли он здесь вообще?

roma n 29.10.2012 12:58

8-Nikitz > он вот здесь внутри спрятан
РТУ.Печать("Акт", 2, ИСТИНА, ИСТИНА)

qweqwe123123 29.10.2012 15:05

(5) самое простое, процедуру Печать переделать на функцию и возвращать макет. но это, конечно, уже изменение конфигурации.
без изменения конфигурации - вынести и переделать процедуру печати в обработку.

Nikitz 29.10.2012 15:34

9-roma n > ругается:

Обращение к процедуре объекта как к функции (Печать)
ТабДок = РТУ.Печать("Акт", 2, ИСТИНА, ИСТИНА);

roma n 29.10.2012 15:45

11-Nikitz > я бы тоже ругался. Кури (10) вдумчиво...

i555 29.10.2012 17:07

Может я чего-то не понимаю, но если есть печатающийся файл, и нужен файл любого формата для e-mail и печати, то прямой путь к виртуальному PDF принтеру, и ничего курить не придется.

qweqwe123123 29.10.2012 17:13

13-i555 > то есть выбирать принтер каждый раз? тогда можно и через "Сохранить как..." ручками сохранять в нужную папку.

11-Nikitz > а можно отправлять по почте прямо из 1С, в 1С:"Управление торговлей", например, такое есть.

roma n 29.10.2012 17:14

13-i555 > +100500. Только вот как задать ИмяПринтера (а точнее двух принтеров - для реальной печати и для печати в PDF) при условии использования экспортной процедуры модуля объекта без её переделки?

qweqwe123123 29.10.2012 17:14

13-i555 > в обработке файла нет, нет макета. его в любом случае надо как-то сначала получить в обработку.

i555 29.10.2012 17:39

14, 16> Одно из двух: или файла нет, или Сохранить как... Как работает обработка: печатает сама, или юзер нажимает кнопочку Печать - не знаю, но, думаю, нажимает.
15> Да, на два принтера печатать проблемно, вернее много курить надо. Но, если сначала напечатать на PDF принтер, то, что получится, можно потом печатать, как угодно. Недостаток - придется кнопочку Печать нажать два раза. Если это пересилит обкуривание, то да, согласен, надо курить дальше.

lalex23 29.10.2012 20:14

нужен вменяемый 1с-ник, там на пол-часа-час делов максимум

Nikitz 30.10.2012 08:30

17-i555> Обработка работает без нажатия каких-либо кнопочек, участие человека недопустимо (вообще, бред — привлекать человека к задачам, которые должна делать машина).

18-lalex23> Слишком просто и неинтересно.

roma n 30.10.2012 09:04

19-Nikitz > Ну тогда у тебя 2 варианта
- мало-мало изменить конфигурацию в части формирования печатной формы (чтоб можно было ТабДок заиметь). Я бы вносил изменения не (10), а одну строку в УниверсальныеМеханизмы.НапечататьДокумент (если используется типовая) - пригодится.
- организовать формирование ТабДок непосредственно в своей обработке, без использования РТУ.Печать(...


Текущее время: 17:26. Часовой пояс GMT +3.