• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Проблема с печатью из 1С

  • Автор темы Vladimir Malyk
  • Дата начала
Статус
Закрыто для дальнейших ответов.
V

Vladimir Malyk

Принтер HP-LaserJet_2200 расшарен при помощи CUPS на машине под управлением Debian.

Этот принтер установлен на машине под управлением Windows 2003 как сетевой. Доступ к принтеру осуществляется по IPP.

Пробные страницы из-под CUPS и Windows 2003 печатаются нормально.

Возникает проблема с печатью расходных накладных в программе "1:С Предприятие 7.7 для SQL, Оперативный учет" (7.70.020) , которая установлена на машине с Windows2003.
Особенность печати расходных накладных - они отправляются на печать сразу, без отображения на экране эскиза сформированного документа и диалогового окна параметров печати документа.

Документы, в которых эскиз формируется и доступно окно параметров печати документа (пункт меню Файл-Печать), распечатываются нормально.

Подскажите, как решить проблему с печатью расходных накладных.
 
V

VasilyKushnir

Это проблема быстрой печати на хьюлеты. У меня подобная мерзость также и с НР1200. Пока толкового лечения не нашел. Юзаю следующее: перед печатью сношу ветку реестра Moxel по пути:
HKEY_СURRENT_USER - Software - 1C - 1Cv7 - 7.7 - V7 - [Пользователь] - Moxel. Вернее дал юзерам возможность самим сносить эту ветку (в принципе можно похырить всю ветку [Пользователь] - результат тот же). Пробовал и дрова обновлять и с установками игрался - не хочет эта сволочь быстро печатать... Хотя НР1160 пашет как часики.
 
V

Vladimir Malyk

Спасибо за совет! Решение радикальное, но действительно помогает. Если найду достойную альтернативу - дам знать :).
 
V

Vladimir Malyk

Вопрос по поводу ветки реестра, которую надо сносить.

Было предложено сносить ветку:
HKEY_СURRENT_USER - Software - 1C - 1Cv7 - 7.7 - V7 - [Пользователь] - Moxel
У меня ветка имеет вид HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\НазваниеБазы\V7\ИмяПользователя\Moxel

То есть присутствует не только имя пользователя но и название базы (то, которое прописано в окне запуска 1С).
Хочу дописать в конфигурацию автоматическое удаление этого ключа. Средставми 1С могу получить ИмяПользователя(). Не могу получить Название Базы.

Как организовать автоматическое удаление ветки перед печатью?

Еще. Если верить , то проблему можно решить, если установить клиентские опции Internet Explorer на "ниже среднего" или "низкий". Тогда Windows будет выполнять "RPC Printer Connection Through Web Browser" (RPC "true-connect" printer connection) вместо "HTTP Printer Connection Through Web Browser".
У меня на резервном Windows 2003 сработало, на основном (рабочем) - нет.
 
V

VasilyKushnir

Вопрос по поводу ветки реестра, которую надо сносить.

Было предложено сносить ветку:
HKEY_СURRENT_USER - Software - 1C - 1Cv7 - 7.7 - V7 - [Пользователь] - Moxel
У меня ветка имеет вид HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\НазваниеБазы\V7\ИмяПользователя\Moxel

То есть присутствует не только имя пользователя но и название базы (то, которое прописано в окне запуска 1С).
Хочу дописать в конфигурацию автоматическое удаление этого ключа. Средставми 1С могу получить ИмяПользователя(). Не могу получить Название Базы.

Как организовать автоматическое удаление ветки перед печатью?

Это я ошибся у меня тоже присутствует имя базы. И где-то у меня завалялось решение, как определить имена подключеных баз. На вскидку уже не помню, но ежели найду - скину на мыло (надеюсь адрес у тебя открыт).

Еще. Если верить , то проблему можно решить, если установить клиентские опции Internet Explorer на "ниже среднего" или "низкий". Тогда Windows будет выполнять "RPC Printer Connection Through Web Browser" (RPC "true-connect" printer connection) вместо "HTTP Printer Connection Through Web Browser".
У меня на резервном Windows 2003 сработало, на основном (рабочем) - нет.

А вот это иентересно. Буду пробовать.
 
V

Vladimir Malyk

Спасибо за беспокойство :).
E-mail, как оказалось, у меня был закрыт. Открыл.
На всякий случай e-mail: vladimir.malyk@gmail.com, ICQ 190147637.
 
V

Vladimir Malyk

Спасибо :). Выглядит обнадеживающе.
Буду пробовать!
 
V

VasilyKushnir

Если что получится - черкни на мыло.
 
V

VasilyKushnir

Владимир, ёханый бабай, только сейчас сообразил прочитать твои данные - оказывается Земляки! Только мои Черкассы чуть севернее. Во, блин мы даем! А пишу собственно вот зачем: проблему печати ты решил. Это хорошо. А для других участников, как думаешь интересно будет как? Чего уж там, не жмись, давай выкладывай решение на общак, тем более, что за него стыдно не будет (по крайней мере, на многих форумах я пока ничего путного по этой теме не находил).
ДЛЯ ДРУГИХ УЧАСТНИКОВ ФОРУМА: ребята, Владимир действительно сделал нечно стоящее - можно применять. Но если кто предложит более изящное решение, или обяснит мне, тупому, почему слетает реестр - милости просим. А пока, за неимением других вариантов (поверьте на слово - на очень многих форумах я подымал этот вопросс) этот вариант имеет одно неоспоримое преимущество - он таки РАБОТАЕТ!
 
V

Vladimir Malyk

Да, земляки ;). На общак выложить действительно стоит.
Вот решение проблемы:

//Сохранение названий баз
Ключ="HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles";
ИмяКаталога=СокрЛП(КаталогПользователя());
ИмяБазы=СокрЛП(каталогИБ());
Если прав(ИмяКаталога,1)<>"\" Тогда ИмяКаталога=ИмяКаталога+"\" КонецЕсли;
Если прав(ИмяБазы,1)<>"\" Тогда ИмяБазы=ИмяБазы+"\" КонецЕсли;
ИмяБазыСтр=Симв(34)+СтрЗаменить(ИмяБазы,"\","\\")+Симв(34);
ИмяФ=ИмяПользователя()+".reg";
КомандаСистемы("Regedit /ea "+Симв(34)+ИмяКаталога+ИмяФ+Симв(34)+" "+Симв(34)+Ключ+Симв(34));
Текст=СоздатьОбъект("Текст");
Текст.КодоваяСтраница(0);
Текст.Открыть(ИмяКаталога+ИмяФ);

//Поиск названия текущей базы в созданном файле с названиями баз
Стр="";
Для сч=1 по Текст.КоличествоСтрок() Цикл
Стр=СокрЛП(Текст.ПолучитьСтроку(сч));
Если Найти(Стр,ИмяБазыСтр)<>0 Тогда
прервать;
КонецЕсли;
КонецЦикла;

//Выборка названия базы
Стр = СтрЗаменить(Сред(Стр,Найти(Стр,"=")+2,СтрДлина(Стр)-Найти(Стр,"=")-2),"\","");

//Удаление ключа реестра
РеестрКлюч = СоздатьОбъект("Текст");
РеестрКлюч.ДобавитьСтроку("REGEDIT4");
РеестрКлюч.ДобавитьСтроку("[HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\"+Стр+"\V7\"+ИмяПользователя()+"\Moxel\Default]");
РеестрКлюч.ДобавитьСтроку(Симв("34")+"DefaultPrinter"+Симв("34")+" =-");
РеестрКлюч.Записать(ИмяКаталога+ИмяПользователя()+".reg");
РеестрКлюч = "";
КомандаСистемы("regedit.exe -s "+ИмяКаталога+ИмяПользователя()+".reg");
КомандаСистемы("del "+ИмяКаталога+ИмяПользователя()+".reg");

Для определения имени базы Использовались материалы с .

Предложеное решение реализует следующее: удаляет в реестре упоминание о текущем принтере, сделанное 1С. В момент вызова Напечатать(0) 1С обращается в реестр за названием принтера, естественно его там не находит и иницирует запрос к Windows, которая в ответ выполняет "HTTP Printer Connection Through Web Browser".
Принтеры, доступ к которым осуществляется по IPP создаются Windows по запросу на время печати, после чего удаляются.
Вероятно, 1С рассчитана на работу с "RPC Printer Connection" и не учитывает всех особенностей работы "HTTP Printer Connection Through Web Browser".

Возможная альтернатива - использование Напечатать(1). В этом режиме 1С выдаст оконо параметров печати и, естественно, выполнит нужный запрос.

Вот, в общем то и все ;).
 
R

Romas

У меня эта проблема (зависания 1Ски при массовой печати из под винды 2000 или XP, иногда и вообще не отправлялось ничего на печать...) с принтером HP5100tn решилась бональным скачиванием нового драйвера с сайта hp. Оказалось, что у меня стоит не самая последняя версия этого драйвера. После обновления в свойствах поставил "начинать печать после помещения в очередь всего задания", и поставил крыжик "первыми печатать документы из очереди". А то доки шли на печать в разноброс... и еще запретил двусторонний обмен данными (правда не знаю надо это или нет, но на всяк случай отключил...) Хоть драйвер был 2004 года, но он все равно помог!
Над этой проблемой бился уже очень долго.... а оказалось все так просто!
 
V

VasilyKushnir

В том-то и дело, что обновление драйверов ничего не дало. Кстати, по адресу еще один вариант чистки реестра, если не жалко - перед скачиванием (или после) - проголосуйте рейтингом. Именно этот вариант отработал у меня уже неделю и никаких фокусов.
 
V

Vladimir Malyk

Нашлось замечательное решение проблемы.
Ветку реестра удалять не нужно. Вообще делать ничего не нужно.
Достаточно, чтобы имя принтера не было больше 13-ти символов.
То есть, на принтере с именем \\http://172.16.48.113:631\HP-LaserJet_2200 проблемы с быстрой печатью обязательно будут.
Если этому же принтеру дать имя \\http://172.16.48.113:631\Prn, то быстрая печать работает без сучка и задоринки.

Кроме того замечено следующее:
1) Принтер с длинным именем откликается на Напечатать(1) в несколько раз дольше, чем принтер с коротким.
3) У принтера с длинным именем висят отпечатанные задания, у принтера с коротким нет.
В обоих случаях был один и тот-же принтер, но расшаренный при помощи CUPS по IPP под разными именами.

Вот такие странности при печати из 1С (запущенной в терминале windows 2003) на принтеры, доступ к которым осуществляется по IPP.
Лично я в шоке :).
По материалам .

Еще, как варимант, перед каждой печатью можно делать:
ПараметрыСтраницы(...,1); - То есть вместо принтера указываем 1.
В этом случае длина имени принтера роли не играет. Быстрая печать тоже начинает нормально работать.
 
V

VasilyKushnir

Ну ни фига себе! Вот это номера 1С откалывает! Спасибо, попробую поигратся с именами.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!