Подробнее о мероприятии  
Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Форум 1С » 1C Предприятие 7.7 » Платформа 7.7
Страницы: 1 2 След.
Настройка принтера печати
Здраствуйте!
Подскожите пожалуйста, есть такие отчеты которые нужно печатать на обеих сторонах бумаги.
Как програмно указать настройки для принтера, чтобы нужный документ печатался на двух сторонах листа, при нажатии на печать?
Ну попробуй 1 раз все настроить, а потом

Опции(<ВыводСетки>, <ВыводЗаголовков>, <ФиксСтрок>, <ФиксСтолбцов>,

<ИмяОпцийПечати>, <ИмяСохрРазмОкна>, <ФлагЧерноБелогоПросмотра>,

<НаправлениеПерехода>)

Англоязычный синоним:

Options

Параметры:

<ВыводСетки>
Необязательный параметр. Числовое выражение — флаг вывода сетки: 1 — показывать, 0 не показывать. Значение по умолчанию — 1.

<ВыводЗаголовков>
Необязательный параметр. Числовое выражение — флаг вывода заголовков строк и столбцов: 1 — показывать, 0 не показывать. Значение по умолчанию — 1.

<ФиксСтрок>
Необязательный параметр. Числовое выражение — количество фиксируемых строк. Значение по умолчанию — 0.

<ФиксСтолбцов>
Необязательный параметр. Числовое выражение — количество фиксируемых столбцов. Значение по умолчанию — 0.

<ИмяОпцийПечати>
Необязательный параметр. Строковое выражение — идентификатор набора опций печати для данной таблицы. Значение по умолчанию — пустая строка — в этом случае используются системные опции печати по умолчанию.

<ИмяСохрРазмОкна>
Необязательный параметр. Строковое выражение — идентификатор сохраняемых параметров размеров окна. Если этот параметр указан, то система будет сохранять размер окна и использовать его при следующем открытии табличного документа. Фактически, указывая этот параметр можно указать системе режим сохранения и восстановления размеров окна для данного табличного документа, который идентифицируется этой строкой. Параметр необязателен. Значение по умолчанию — пустая строка — в этом случае размеры окна не запоминаются.

<ФлагЧерноБелогоПросмотра>
Необязательный параметр. Число: 1 — чернобелый просмотр; 0 — обычный режим просмотра. Значение по умолчанию — 0.

<НаправлениеПерехода>
Необязательный параметр. Число: 1 — по строкам, т. е. при вводе данных в ячейки при нажатии клавиши <Enter> будет автоматически выполняться переход к следующей вводимой ячейке в этой строке, а если таковых нет, то в самой левой вводимой ячейке следующей строки; 2 — по столбцам, т. е. при вводе данных в ячейки при нажатии клавиши <Enter> будет автоматически выполняться переход к следующей вводимой ячейке в этом столбце, а если таковых нет, то в самой верхней вводимой ячейке следующего столбца; 3 — при вводе данных в ячейки автоматический переход при нажатии клавиши <Enter> выполняться не будет. Значение по умолчанию 1.
Может я не правильно поняла вопрос :unsure:, но печатать сразу с двух сторон можно только при наличии такой возможности у принтера. В любом другом случае, листы нужно будет переворачивать
Цитата
<ИмяОпцийПечати>
Необязательный параметр. Строковое выражение — идентификатор набора опций печати для данной таблицы. Значение по умолчанию — пустая строка — в этом случае используются системные опции печати по умолчанию.

1 Раз можно настроить, но только есть документы, которые надо печатать и по одному листу, тоесть опять придется перенастраивать.

А вот <ИмяОпцийПечати> подробнее есть какое-нибудь описание? Что там нужно писать?

Наличие возмоности у принтера, печать на двух сторонах, - есть.
Пишешь любое имя.
Запускаешь таблицу.
Вручную настраиваешь печать.
1С запоминает настройки.

ЖКК:
Даный метод позволяет назначить для каждой таблицы свой собственный набор опций печати, который сохраняется в системе под именем <ИмяОпцийПечати>. Набор опций печати привязан к конкретному рабочему месту (компьютеру) и запоминается всякий раз, когда в режиме исполнения при открытом окне редактирования таблицы пользователь перенастраивает параметры настройки печати (главное меню — «Файл» — «Печать»).
Нифига не получается, настроики самого принтера не сохраняются smile:(
Знаю ответ - двухстороннюю печать устанавливают в Панели управления. Если нужно печатать и так и так, создается два принтера (физически один, а виртуальных два), в одном указывается двусторонняя печать, а в другом односторонняя. Принтер указывается в параметрах страницы.
Например - Табл.ПараметрыСтраницы(1,,,5,5,5,5,,,1,,Принт);
где Принт - принтер, который ты выбираешь.

Вот пример выбора принетера
//============================================
Процедура ИзмПринтер()
Попытка
COMServices = СоздатьОбъект("COMServices.COM");
Исключение
Сообщить("Ошибка загрузки COM-объекта COMServices.");
СтатусВозврата(0);
Возврат;
КонецПопытки;
HKEY_CURRENT_USER = 2147483649;
ИмяСервера = ".";
ИмяКонф = "База1";
ПутьККлючу = "Software\1C\1Cv7\7.7\"+ИмяКонф+"\V7\"+ИмяПользователя()+"\Moxel\Default";
Reg = COMServices.GetCOMObject("winmgmts:{impersonationLevel=impersonate}!\\"+ИмяСервера+"\root\default:StdRegProv");
ИмяПараметра = "DefaultPrinter";
Значение = Принтер.ПолучитьЗначение(Принтер.ТекущаяСтрока());
Reg.SetStringValue(HKEY_CURRENT_USER, ПутьККлючу, ИмяПараметра, Значение);
КонецПроцедуры

Вот таки образом меняется реестр. И при печати все идет на нужный принтер. Загвозка - где взять "ИмяКонф". Кто знает - ответьте ЗДЕСЬ - отдельная тема.
Я пишу в стартере название конфигурации такое же как и в конфигураторе, т.е. "База1".
Мiй телефон 911...
ПутьККлючу = "Software\1C\1Cv7\7.7\"+ИмяКонф+"\V7\"+ИмяПользователя()+"\Moxel\Default";

Переменная среды %USERNAME%==ИмяПользователя() ???

Давайте голосование устроим у кого есть так по жизни. Уж тогда тоже через комсервисы какие-нибудь октопать реального пользователя, если шаришь в них.
информационные технологии меняют мир www.r-34.ru
Помогли люли добрые - сам докумекал - получилось вот что:
//==========================================
Функция глПолучитьНазваниеБазы() Экспорт
Ключ="HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles";
ИмяКаталога=СокрЛП(КаталогПользователя());
ИмяБазы=СокрЛП(каталогИБ());
Если прав(ИмяКаталога,1)<>"\" Тогда ИмяКаталога=ИмяКаталога+"\" КонецЕсли;
Если прав(ИмяБазы,1)<>"\" Тогда ИмяБазы=ИмяБазы+"\" КонецЕсли;
ИмяБазыСтр=Симв(34)+СтрЗаменить(ИмяБазы,"\","\\")+Симв(34);
ИмяФайла="USER.TXT";
Команда="Regedit /ea "+Симв(34)+ИмяКаталога+ИмяФайла+Симв(34)+" "+Симв(34)+Ключ+Симв(34);
КомандаСистемы(Команда);
Текст=СоздатьОбъект("Текст");
Текст.КодоваяСтраница(0);
Текст.Открыть(ИмяКаталога+ИмяФайла);
//Текст.Показать();
Стр=""; Нашли=0;
Для сч=1 по Текст.КоличествоСтрок() Цикл
Стр=СокрЛП(Текст.ПолучитьСтроку(сч));
//Сообщить(Стр);
Если Найти(стр,ИмяБазыСтр)<>0 Тогда
Возврат Сред(СтрЗаменить(Стр,"""",""),Найти(Стр,"=")-1,СтрДлина(Стр));
прервать;
КонецЕсли;
КонецЦикла;
Возврат "";
КонецФункции

//=====================================
Процедура глИзменитьАвтоПринтер(Принтер="") Экспорт
Перем COMServices, ИмяСервера, ИмяКонф, ПутьККлючу,ИмяПараметра, Значение, Reg;
// Вот так и работаем!!!
Попытка
COMServices = СоздатьОбъект("COMServices.COM");
Исключение
Сообщить("Ошибка загрузки COM-объекта COMServices.");
СтатусВозврата(0);
Возврат;
КонецПопытки;
HKEY_CURRENT_USER = 2147483649;
ИмяСервера = ".";
ИмяКонф = глПолучитьНазваниеБазы();
//Находим имя конфигурации

ПутьККлючу = "Software\1C\1Cv7\7.7\"+ИмяКонф+"\V7\"+ИмяПользователя()+"\Moxel\Default";
Reg = COMServices.GetCOMObject("winmgmts:{impersonationLevel=impersonate}!\\"+ИмяСервера+"\root\default:StdRegProv");
ИмяПараметра = "DefaultPrinter";
Значение = СокрЛП(Принтер);
Reg.SetStringValue(HKEY_CURRENT_USER, ПутьККлючу, ИмяПараметра, Значение);
КонецПроцедуры

Принтер запоминаем, и в параметрах страницы проставляем:

Таб.ПараметрыСтраницы(1,,,5,5,5,5,,,1,,Принт);
Только все это помогает не всегда - не все принтеры устанавливаются. Одни устанавливаюся. а другие нет. Может кто знает...
Мiй телефон 911...
Не кажется странным создавать временный файл в одном месте для всех пользователей и не ожидать коллизии?

Не кажется странным править реестр во время выполнения и ожидать положительного эфекта?

____________________

Юзай con2prt с парметром /cd из микрософт ресурс кита, сделай на каждую базу свой ярлык с cmd-шником, где вначале будет установлен принтер по умолчанию, а потом запсутится нужная база. Популярно и надёжно.

____________________

Я тут через месяцок одну тулзень хочу дописать, и приглашаю в ряды почётных бетатестеров, потому-что так насиловать программы не каждый сумеет smile:)
информационные технологии меняют мир www.r-34.ru
Цитата
Не кажется странным создавать временный файл в одном месте для всех пользователей и не ожидать коллизии?
- вот ответ
Цитата
Команда="Regedit /ea "+Симв(34)+ИмяКаталога+ИмяФайла+Симв(34)+" "+Симв(34)+Ключ+Симв(34);
- для каждого юзера - свой файл.

Цитата
Не кажется странным править реестр во время выполнения и ожидать положительного эфекта?
- а как иначе предложите: юзер может печатать на разных принтерах, а при автоматической печати нужен строго определенный принтер.

Критиковать можно, но это работает, хоть не без проблем. некоторые принтеры не хотят выбираться, не знаю почему.
Может есть спецы на форуме, не знаю почему они молчат... :ph34r:

Мiй телефон 911...
Цитата
почему они молчат...


В ИТ есть золотые стандарты, в которых обязаны разбираться все, а есть "частные решения", которые далеко не всех интересуют.

Вот выиграешь путёвку в Пуэрто Рико на 2 недели, а дело никому передать не сможешь, если всё везде реализовано по такому частному случаю.
информационные технологии меняют мир www.r-34.ru
Зато путевку сможет передать!!! smile:D
Исчерпывающие ответы, главное по теме...

Модераторы! На вас вся надежда...

P.S. Вот Чужой, Профиль, Группа: Продвинутые Сообщений: 483.
А вот такие сообщения тоже засчитываюся?

Я на форуме не так давно, насчет частных решений не знаю, только ответ никто так и не дал, потому, что не знает никто, или не хочет писать... А вот это... просто спам...
Мiй телефон 911...
У меня тут акцесс виолешин возникает, если у TreeView свойство скрол не установлено, не догоняю почему, может кто скомпиляет на вскидку зрительно?
bool InventoryList_AddBase80f77(LPTSTR szName,LPTSTR szBackupName,LPTSTR szPath,OBJTYPE type)
{ TCHAR fCh[9]={'\\','/',':','?','"','*','<','>','|'};
if (lstrlen(szName)==0)
{ MessageBox(hWndMain,TEXT("Не указано имя базы"),TEXT(""),MB_OK);
return false; }
if (lstrlen(szBackupName)==0)
{ MessageBox(hWndMain,TEXT("Не указано имя бэкапа"),TEXT(""),MB_OK);
return false; }
else for(int i=0;i<9;i++)
if(StrChr(szBackupName,fCh[i])!=NULL)
{ MessageBox(hWndMain,TEXT("Имя бэкапа используется при именовании файла выгрузки и не может содержать символов \\/:?\"*<>|"),TEXT(""),MB_OK); return false; }
if (lstrlen(szPath)==0)
{ MessageBox(hWndMain,TEXT("Не указан путь к базе"),TEXT(""),MB_OK);
return false; }

clObjInfo *Obj=new clObjInfo(type);
lstrcpyn(Obj->data.V80F77.Name,szName,MAX_PATH);
lstrcpyn(Obj->data.V80F77.BackupName,szBackupName,MAX_PATH);
lstrcpyn(Obj->data.V80F77.Path,szPath,MAX_PATH);
InvTree->AddItem(Obj);
return true;}


Если я выложу это на лучшие форумы, то меня там замочат (или почистят), и правильно сделают. Спрашивается: "Ч-о т-е под дотNet'ом то не сидится?". Нервная реакция на извращенский подход - это норма, если же т-е кажется, что другие не всё знают о твоей ситуации и надо делать именно так, то придётся мириться с критикой.


По теме:
есть стандартная утилита con2prt с элементарнейшим интерфейсом командной строки: con2prt /f (отключить все принтеры), con2prt /c \\printershare (подключить), con2prt /cd \\printershare (подключить и сделать по умолчанию). Утилиту можно использовать для доподключения на любом этапе, т.е. если принтер уже подключен она не будет сыпаться матом - это нормально, но не очевидно сразу. Разумно разбираться со всми принтерами до запуска 1С, т.е. не использовать ПриНачалеРаботыСистемы() и прочие событийные процедуры. Лучше с принтерами разобраться при логоне, а потом манипулировать через ПараметрыСтраницы() как угодно.

Цитата
не все принтеры устанавливаются.

То ли не устанавливаются, то ли устанавливаются и не выбираются параметрами страницы? Даже если не устанавливаются, может там пробелы в названии или руские символы, котрые надо в другой кодировке КОМу передавать? А может права на ком не настроены?
информационные технологии меняют мир www.r-34.ru
KSupalo
Цитата
Исчерпывающие ответы, главное по теме...

Модераторы! На вас вся надежда...

P.S. Вот Чужой, Профиль, Группа: Продвинутые Сообщений: 483.
А вот такие сообщения тоже засчитываюся?

Я на форуме не так давно, насчет частных решений не знаю, только ответ никто так и не дал, потому, что не знает никто, или не хочет писать... А вот это... просто спам...


Не понял, в чем вопрос ? Что должны сделать модераторы ?
Цитата
Не понял, в чем вопрос ? Что должны сделать модераторы ?


Нет времени вчитываться в правила форума, обычно юзеры медераторам не советуют и не обсуждают их действия. А спам - он и есть спам, фильтровать его и все...

По теме.
Цитата
некоторые принтеры не хотят выбираться
- это когда принтер в реестре устанвлен правильно, только при печати страницы уходят на принтер по умолчанию. А хотелось бы на тот, что прописан в реестре (1С прописывает его там, когда идет печать в интерактивном режиме). Часть принтеров выбираются нормально, а другие никак... Вот в чем проблема.
А так все работает почти год. Столкнулся недавно, вот и пытаюсь получить ответ. У нас печатаются документы одновременно на двух принтерах. Причем один поток документов идет на принтер1, а второй на 2-й. Потоки документов не перепутываются (вот почему нельзя объеденить принтеры в пулл). И принтеры загружены, печать идет быстрее. Все автоматом. Вот так. А третий принтер подключен к другому компу и не хочет выбираться, хоть разбей его...

Мiй телефон 911...
KSupalo
Ну это не спам, а флейм. Типа он Вашу ветку наверх плоднимает smile:)
Цитата
И принтеры загружены, печать идет быстрее. Все автоматом. Вот так. А третий принтер подключен к другому компу и не хочет выбираться, хоть разбей его...

Возможно следующее:
1. Криво права на принтер... (или его установку на сервере...)
2. Кривые дрова на принтер (особенно веселые дрова у Cenon, Lexmark ...)
3. В названии принтера и/или компа русские буквы или пробелы или слишком длинное название...
Цитата
не хочет выбираться


Т.е. он есть в ситеме, подключен и функционирует нормально, но не выбирается методом ПараметрыСтраницы() или "не выбирается" всмысле "не функционирует так как хочется" твой патентованный код?
информационные технологии меняют мир www.r-34.ru
Метод ПараметрыСтраницы(,,,,,ИмяПринтера) не работает изначально. По крайней мере у меня (23-й релиз SQL версия, базы dbf). Печать идет либо на последний выбранный принтер в 1С, либо на принтер о умолчанию (Винды).
Моим методом принтер выбирается правильно, но не для всех принтеров.
Объясняю подробно. После формирования таблицы идет метод
Напечатать(Диалог);, где Диалог =0 или 1 - показывать или нет диалог выбора принтера.
Так вот. Если выполняется мой код, то в диалоге выбора принтера уже стоит НУЖНЫЙ принтер. Это я называю "Выбирается принтер". Методом ПараметрыСтраницы() устанавливается обычно последний используемый принтер в 1С или принтер по умолчанию (Виндовс) - тот, что указан в параметрах обычно не кстанавливается. Если показывать диалог выбора принтера (Напечатать(1)), то проблемы нет, юзер может сам выбрать нужный принтер, и документ нормально распечатается. Если же нужна автоматическая печать (Напечатать(0)), то нужно сделать выбор принтера автоматически, иначе документ уходит на другой принтер. Вот такая проблема.

Цитата
Т.е. он есть в ситеме, подключен и функционирует нормально, но не выбирается методом ПараметрыСтраницы() или "не выбирается" всмысле "не функционирует так как хочется" твой патентованный код
- это значит и то и другое. Никаким из перечисленных способов принтер не выбирается - печать идет на др. принтер.
Мiй телефон 911...
Я проверил, у меня параметры страницы тоже через раз работают. Люди в инете юзают WMI, проверил - работает безотказно:

Код
WshNetwork=CreateObject&#40;&#34;WScript.Network&#34;&#41;;
Если парам=1 Тогда
 &nbsp;WshNetwork.SetDefaultPrinter&#40;&#34;&#092;&#092;server-domain&#092;ricoh&#34;&#41;;
Иначе
 &nbsp;WshNetwork.SetDefaultPrinter&#40;&#34;&#092;&#092;sekretar2&#092;HP LaserJet 2200 Series PCL 6&#34;&#41;;
КонецЕсли;


- это вместо ПараметрыСтраницы() перед Напечатать(), причём нормально жуёт и пробелы и кирилицу.
информационные технологии меняют мир www.r-34.ru
Цитата
Опции(<ВыводСетки>, <ВыводЗаголовков>, <ФиксСтрок>, <ФиксСтолбцов>,

      <ИмяОпцийПечати>, <ИмяСохрРазмОкна>, <ФлагЧерноБелогоПросмотра>,

      <НаправлениеПерехода>)
******************
<ИмяОпцийПечати>
Необязательный параметр. Строковое выражение — идентификатор набора опций печати для данной таблицы. Значение по умолчанию — пустая строка — в этом случае используются системные опции печати по умолчанию.


А если туда строку засунуть, то он ЗАПОМНИТ ПРИНТЕР и будет его туда подставлять, т.е. если в тексте

ПараметрыСтраницы(,,,,,ИмяПринтера);
Опции(...);

То принтер будет из ОПЦИЙ!!!
Цитата
ПараметрыСтраницы(,,,,,ИмяПринтера)
- дык оно не всегда схватывается, понимаешь? Вот он и запомнит тот, который и без того по дефолту установлен.
информационные технологии меняют мир www.r-34.ru
Блин, оно схватывается, а потом он тянет имя еще раз из ОПЦИЙ
Страницы: 1 2 След.
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)