Имя: Пароль:
1C
1С v8
Как распечатать внешний *.jpg *.png файл из 1с.
0 1sik
 
08.05.14
12:58
Есть папка с файлами которые привязаны к документам. Можно ли вывести их на печать из 1с, не вставляя предварительно в макет, а сразу, с помощью какой либо команды системы.
Я пытался сначала в cmd  проверить работоспособность команды, написал следующее: print /d:HP_LaserJet_Professional_P_1102w c:\1c.png
у меня в первый раз пишет- c:\1c.png в настоящее время печатается, но на принтер ничего не выходит.
Во второй и последующий разы уже пишет - не удается инициализировать устройство HP_LaserJet_Professional_P_1102w .
В чем может быть проблема?
1 ptiz
 
08.05.14
13:07
Мы через xnview печатаем
2 AndyD
 
08.05.14
13:14
табдок, в него программно вставляешь и печатаешь
3 Kamas
 
08.05.14
13:15
макет макет в него картинка из файла и печать на принтер по умолчанию
4 Kamas
 
08.05.14
13:15
(2) блин опоздал
5 spectre1978
 
08.05.14
13:18
Про print забудьте, это только для текстовых файлов в поддерживаемой принтером кодировке.
6 1sik
 
08.05.14
13:25
(2)(3) Я сначала хотел в таб.док. добавить, но у меня внешняя обработка,и в модуле формы макет не получить. Можно получить его в модуле объекта, но от туда на форму ничего не возвращается, несмотря на то, что функция экспортная, говорят на внешних такое не работает.  Следовательно начал придумывать как командой системы напечатать.
(5)Спасибо, теперь буду знать, что в эту сторону капать больше не  стоит.
7 Fish
 
08.05.14
13:32
(6) Попробуй так:
Shell = Новый COMОбъект("Shell.Application");
Shell.ShellExecute(ИмяТвоегоФайла, "", "", "print", 1);                    

Но подойдёт не для всех файлов.
8 1sik
 
08.05.14
13:40
(7) Попробовал, открывается форма для печати, т.е пользователю надо будет еще раз нажать кнопку печать, а мне надо в фоновом режиме все распечатать, так как файлов может быть много.
(6)решил проблему получения макета ...

Где-то написали что можно так....
    
ЭтотОбъект=РеквизитФормыВЗначение("Объект");
Макет = ЭтотОбъект.ПолучитьМакет("Макет");
Возврат Макет;

Но у меня только так взлетело..    
Макет = РеквизитФормыВЗначение("Объект").ЭтотОбъект.ПолучитьМакет("МакетПФ");
Возврат Макет;

в первом случае ругалось...
{Форма.ФормаОсновная.Форма(127)}: Поле объекта недоступно для записи (ЭтотОбъект)
    ЭтотОбъект=РеквизитФормыВЗначение("Объект");

Следовательно буду теперь копать в сторону формирования таб доку и отправки его на печать единым документом.
9 ptiz
 
08.05.14
13:42
Всё-таки интересно, чем xnview не подошел?
10 Базис
 
naïve
08.05.14
14:01
Принтер покороче назови, сделай дефолтным.
11 1sik
 
08.05.14
14:27
(9) Если я правильно понял, то это внешняя программка, т.е. ее придеться устанавливать на всех серверах, а мне надо чтобы можно было привязать обработку и все.
(10) Принтер и так дефолтный, а смысл делать название короче?
К тому же у каждого пользователя свой принтер.
12 ptiz
 
08.05.14
14:50
(11) Да, по крайней мере 1 раз запустить придется от того юзера, кто пользоваться будет. Но если есть сетевая шара - можно в неё положить.
13 1sik
 
08.05.14
16:23
В продолжении...
Печать настроил через макет.
    Для каждого ПутьКартинки Из Объект.СписокФайлов Цикл
        текПуть    = ПутьКартинки.ИмяФайла;
        
        ТабДок = Новый ТабличныйДокумент;
        Макет = ПолучитьМакетНаСервере();
        Область = Макет.ПолучитьОбласть("ОбластьКартинки");
        Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
        
        Рисунок.Верх = 0;
        Рисунок.Высота = 290;
        Рисунок.Ширина = 210;         
        Рисунок.Лево = 0;
        
        
        Рисунок.Картинка = Новый Картинка(текПуть);
        
        ТабДок.АвтоМасштаб = Истина;
        ТабДок.ОтображатьСетку = Ложь;
    
        ТабДок.Вывести(Область);
        ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
    КонецЦикла;
Есть недочет, на печать выходят картинки с черной рамкой по периметру.
Обладает ли кто тайным знанием по тому как от нее избавиться? Отображать сетку убрал, не помогло.
14 ptiz
 
08.05.14
16:34
Рисунок.ГраницаСверху = Ложь и т.п.?
15 1sik
 
08.05.14
16:45
(14) Спасибо.Сработало.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший