![]() |
![]() |
![]() |
|
Двухстороняя печать в 1С. Заработало | ☑ | ||
---|---|---|---|---|
0
Vinny
20.07.06
✎
18:23
|
Не так давно искал я метод как это сделать.
Делюсь результатами... Получилось. Но 1С v7.7 в части работы с принтерами - полное г...но Итак задача - пакетная (т.е. комплект всяких форм за один раз) потоковая (т.е. без ручной настройки принтера во время работы) печать документов Метод с физическим принтером, расшаренным на два сетевых устройства с фиксированными настройками не катит. т.к. падает спулер печати под NT :( ну не может он работать, когда на один физический IP адрес идут два потока данных... Решение ниже... |
|||
1
Vinny
20.07.06
✎
18:32
|
Начнем с граблей.
1) ПараметрыСтраницы - это настройки параметров документа, а не принтера. Успокойтесь те, кто пытается там выставить дуплекс. Его там нет. 2) ИмяОпцийПечати в ф-ции Опции - это не имя пользовательского набора свойств принтера... Это просто имя, под которым запишутся все прочие настройки, сделанные в этой функции.. 3)Далее лучше и веселее... Напечатать(0) приводит к очищению содержимого печатаемой таблицы. Зачем и почему - спросите программеров 1С 4) при сохранении таблицы в файл из таблицы напрочь вылетает информация о повторении строк при печати. тоже интересный аспект... |
|||
2
Vinny
20.07.06
✎
18:38
|
5) КоличествоЭкземпляров() :) хороший метод. Но при двухсторонней печати использование приведет к тому, что в случае, если в документе нечетное количество страниц, первая страница второго экземпляра будет напечатана на обороте последней странице первого. после чего документ можно выкинуть...
6) Присвоить имя заданию печати можно. Нам нужно, так как мы ведем логи - кто что печатал и потом разбрасывает затраты на направления бизнеса. Так надо, в общем. Ну так вот. Имя задания печати в 1С - это то, что вы пишете в параметре "заголовок" таблицы в функции "Показать" |
|||
3
Vinny
20.07.06
✎
18:45
|
Решение задачи:
1) Предположим, мы организовали структуру, в которой хранится - как, что и сколько раз мы будем печатать. А также там хранится информация о том - как печатать - в дуплексе, или нет, и как настроена брошюровка страниц. 2) Затем мы настраиваем принтера - заводим в них пресеты (пользовательские настройки), которые печатают так, как надо. После чего, в принципе, нам просто нужно сделать так, что бы они "вставали" в принтере в тот момент, который нужно. Для этого мы научимся их сохранять в файл и загружать из этого файла в принтер. А для этого мы используем кое что из арсенала windows. Набирайте в командной строке rundll32 printui.dll,PrintUIEntry /? и изучайте... Там есть возможность созранить пользовательский набор в файл и загрузить его оттуда. тока используйте модификатор u в конце команды. Он как раз указывает на то, что работаете вы с пользовательскими настройками. |
|||
4
Vinny
20.07.06
✎
18:46
|
Соответсвенно, мы сохраняем нужные нам пресеты в файлы. А обработку по печати учим читать эти грузить эти файлы в принтер по умолчанию.
Только называйте принтера без пробелов. И стремитесь к тому чтобы у всех пользователей сетевые принтеры звались одинаково - иначе замучаетесь. На этом подготовка принтеров заканчивается. И начинается мучения с 1С |
|||
5
Vinny
20.07.06
✎
18:52
|
3)Итого нам осталось - как напечать несколько экземпляров... И как присвоить имя заданию..
Отвечаю - печатать один экземпляр стока раз, сколько нужно. А иначе никак. Если нет повторяющихся строк - сохраняйте в файл, печатайте, загружайте из файла и снова печатайте и т.д. Вот только у меня есть разные формы (со строками и без) и нужно универсально, так что - без вариантов - печатем стока раз, сколько нужно один экземпляр, формируя его каждый раз заново. А имя задания - это совсем просто ... см ниже. можно попробовать просто вторую строчку, тоже должно работать тблТаблица.Показать(""+НазваниеФормы,, 0); // Имя заданию печати (!!!) тблТаблица.Показать(""+НазваниеФормы,,-1); // Имя заданию печати (!!!) |
|||
6
Широкий
20.07.06
✎
18:58
|
фу.. надо завязывать с вином на работе (это я про себя)
Автору ... ваше открытие давно уже можно найти а поиске... Т.е. мы это уже видели и знаем... иными словами юаян |
|||
7
Vinny
20.07.06
✎
18:59
|
Ну, на томже поиске с месяц наад искал - не нашел готового решения. А так.. ну раз известно давно - модераторы удалят
|
|||
8
Скользящий
20.07.06
✎
18:59
|
(0) В базу знаний отправлю.
|
|||
9
mrkorn
20.07.06
✎
19:00
|
(6) все известно, но искать надо по крупицам...
(8) согласен |
|||
10
Vinny
20.07.06
✎
19:01
|
Вот так как сам искал так, и хотелось написать все в одном месте и сразу
|
|||
11
Скользящий
20.07.06
✎
19:02
|
(10) Не слушай всяких идиотов. Я сам недавно парился с печатью, и знаю, сколько там всякой мутотени. Так что правильно все сделал.
|
|||
12
Vinny
20.07.06
✎
19:08
|
Кстати, там еще и нарушение спецификации языка 1С имеется.
Ну вот передача параметра в функцию по значению ... должна приводить к тому, что параметр внутри функции является независмым объектом, и его модификации внутри функции не влияют на состояние объекта за ее пределами. Казалось бы ... Функция Печ (Знач ТБЛ) ТБЛ.Напечатать(0); КонецФункции Ну так вот. Для таблицы - это не верно. Не спасет. По возврате в вызвавший модуль в переданной таблице вас будет ждать пустота. |
|||
13
Широкий
20.07.06
✎
19:08
|
(11) Ну вот .. меня идиотом обозвали ... в первый раз..
Я тоже в свое время были трудности с двусторонней печатью... Тоже использовал , как и автор , 2 виртуальных принтера - не помогла.. Нарыл статью про эту печать в поиске на мисте и не только ... но так уж получилось что ажиотаж поутих.. и я тихонечко замял вопрос с двухсторонкой (честно говоря такие методы мне казались ненадежными)... Насчет крупиц я не знаю.. ветки были и описано все было достаточно толково |
|||
14
Vinny
20.07.06
✎
19:09
|
И чего вы ругаетесь. В базе знаний такой инфы в одном месте нету. Да, нужно шарится и искать.
Ну вот теперь она есть. вопрос закрыт. |
|||
15
Vinny
20.07.06
✎
19:11
|
И потом - у каждого свой уровень. И свои открытия.
Всего хорошего вам. |
|||
16
Скользящий
20.07.06
✎
19:14
|
(15) Приходи еще. Больше статей в БЗ хороших и разных. :-)
|
|||
17
smaharbA
20.07.06
✎
19:38
|
Вот, пришел человек и все разложил по полочкам, а меня не понимають...
|
|||
18
smaharbA
20.07.06
✎
19:40
|
(12) Я еще больше скажу, таблицу присвоенную глперем можна потом печатать и печатать править и править
|
|||
19
smaharbA
20.07.06
✎
19:42
|
(4) А вот это батенька Вы врете...пох на имя принтера
|
|||
20
Vinny
20.07.06
✎
19:46
|
(18)
Т.е?? (19) Не вру. В далеком филиале пока все принтера не переименовали из "HP LaserJet 2300 - N" в "NetPrinterN" - не заработало. Кстати - большое спасибо smaharbA - собственно я у него идею подсмотрел |
|||
21
smaharbA
20.07.06
✎
19:52
|
(20) А она остается само сабой и можна интересный результат иметь
А имя незаработало в Таб.Напечатать(0) ? Пит знает почему, и не только он... |
|||
22
Vinny
20.07.06
✎
19:55
|
Типа просто присвоить глПТаблица = ТБЛ.
Без передачи по значению? |
|||
23
Vinny
20.07.06
✎
20:07
|
(21) Верно - таблицей она остается. только все из нее кудато девается :(
Так что... Увы. |
|||
24
smaharbA
20.07.06
✎
20:15
|
Да, но только для того чтобы в СЗ их можно было перебирать и пользовать, но это так балавство конечно
|
|||
25
smaharbA
20.07.06
✎
20:16
|
+(24) И еще имеют в глобальнике "ускоряющие" переменные чтобы не делать Создать...
|
|||
26
Vinny
20.07.06
✎
20:18
|
я с ТЗ тока что баловался...
Создал ТЗ с одной колонкой типа "Таблица", глобальная ТЗ. Ну и сперва пихаю туда стока строк, скока экземпляров. При Напечатать(0) таблицы с первой строки - все остальные очищаются тоже :( Счас список попробую |
|||
27
Vinny
20.07.06
✎
20:18
|
Ты то что все это не написал сюда??
Как автор, явно лучше разобравшийся |
|||
28
Vinny
20.07.06
✎
20:23
|
Со списком - та же проблема. После печати
глсзТаблицАвтопечати.ПолучитьЗначение(1).Напечатать(0) глсзТаблицАвтопечати.ПолучитьЗначение(2).Напечатать(0) непроходит |
|||
29
smaharbA
20.07.06
✎
20:25
|
(28) В смысле не проходит ? Не печатает ?
|
|||
30
Vinny
20.07.06
✎
20:25
|
не печатает :(
|
|||
31
Vinny
20.07.06
✎
20:26
|
давай завтра я тебе в аську постучусь, поговорим
|
|||
32
smaharbA
20.07.06
✎
20:26
|
Ааа, ты про второй раз, я просто про то что все что открываешь в СЗ и там их можно напечатать, закрыть, прочитать, узнать какие закрыты а какие еще навиду
|
|||
33
smaharbA
20.07.06
✎
20:27
|
Ладно, пока
|
|||
34
Vinny
20.07.06
✎
20:27
|
А..а. Ну так это, блин, не новость...
Я то думал - ты знаешь как проблему ч количество экземляров решить.. |
|||
35
smaharbA
20.07.06
✎
21:11
|
(34) Знаю
|
|||
36
Ggg
20.07.06
✎
21:31
|
(28) Значение из таблицы или списка сначала другой перем. присвойте, затем хоть запечатайся
|
|||
37
VVVV
20.07.06
✎
21:38
|
35) не ломайся, как Пит - скажи народу. Я эту ветку сохраню к себе в БЗ тогда.
|
|||
38
smaharbA
20.07.06
✎
21:42
|
(37) А пит намекает про проблемму народу, а никто не догадался, я тоже блин, хотя у меня и были у рук конфы в одной все ОК, а в другой не печатает пока параметрыстраницы не вызовешь или ветку не снесешь...
... А печатать нормально, не форсируя заново таблицу и методом Напечатать(0) несколько экземпляров при дуплексе, метода тупая до немагу... ... Процедура Сформировать() Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); Таб.Вывести(); Таб.КоличествоЭкземпляров(1); Таб.Напечатать(0); Таб.Показать(,,0); Для к=1 По КоличествоЭкземпляров Цикл Таб.Напечатать(0); КонецЦикла; Таб.Показать(,,-1); КонецПроцедуры |
|||
39
smaharbA
20.07.06
✎
21:43
|
Лишняя Напечатать(0) блин затясалась :)
|
|||
40
smaharbA
20.07.06
✎
21:48
|
+ Кстати Vinny был близок к этому ;)
|
|||
41
VVVV
20.07.06
✎
22:17
|
(0) - обобщи, протестируй и выложи в целом.
|
|||
42
mrkorn
20.07.06
✎
22:42
|
(40) вы с Питом никами махнулись?
ужос, смахарбА перстает код выкладывать, а Пит наоборот (чес слово, сам видел)... |
|||
43
smaharbA
20.07.06
✎
22:55
|
(42) Ага я тоже видел, а про решение не буду, просто скажу что пит прав был о том что конфу надо править
|
|||
44
VVVV
20.07.06
✎
23:00
|
Када Пит что-то выложил? Обычно - "у меня длиннее всех, но я никому ничего не скажу... Парьтесь, идиоты!". Пример кода от Пита - в студию!
|
|||
45
Vinny
21.07.06
✎
11:33
|
(38) Да.. Действительно тупо до безобразия. Посыпаю голову пеплом и отправляюсь тестировать.
|
|||
46
Vinny
21.07.06
✎
11:35
|
(41) Я не стал бы писать, если бы не работало. Я уже все протестировал. И все работает.
Но выкладывать всю конфигу и все обработки к ней :) не могу... |
|||
47
Vinny
21.07.06
✎
11:36
|
но в свете (38) счас там кое что поменяется, видимо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |