Очистка очереди печати конкретного принтера

07.11.23

Интеграция - Периферийные устройства

Очистка очереди печати выбранного принтера, перезапуск службы печати, вывод списка системных принтеров, открытие свойств принтера из 1С.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Очистка очереди печати конкретного принтера:
.epf 7,84Kb ver:1.0
3
3 Скачать (1 SM) Купить за 1 850 руб.

1С тесно связана с печатью и бывает так, что процесс печати подвисает и в очереди начинают накапливаться файлы. Есть разные штатные варианты, как это решить: 

  • перезапустить службу печати - вполне неплохой вариант, однако, если с 1С ведется работа из терминального сервера, на котором проброшено множество других принтеров, то это приведет к отмене всей печати;
  • очистить очередь печати штатными средствами - тоже работает, но не всегда пользователи хотят запоминать, как это сделать, поэтому часто админам приходится это делать самим.

Данная обработка позволяет в привычном интерфейсе 1С и с минимальными итерациями решить проблему подвисшей печати даже неподготовленным пользователям без вмешательства админа.

Обработка универсальная и может открываться и работать в конфигурации 1С 8.3, тестирование проводилось на платформе 8.3.22.1709

P.S. перезапуск службы печати в обработке тоже присутствует, но могут быть проблемы с правами доступа.

 

Также эта обработка может послужить наглядным примером для разработки своего функционала, приведу готовые функции:

1. Как получить список системных принтеров:

&НаКлиенте
Функция ПолучитьСписокПринтеров()
    ВыборПринтеров = Новый СписокЗначений;
    Принтеры = Новый COMОбъект ("WScript.Network"); 
    prn = Принтеры.EnumPrinterConnections(); 
    i = 0; 
    Пока i < prn.Count()-1 Цикл 
        текПринтер = СокрЛП(prn.Item(i+1));
        Если (СтрНайти(текПринтер, "OneNote") = 0) Тогда
            ВыборПринтеров.Добавить(prn.Item(i+1));
        КонецЕсли;    
        i = i + 2; 
    КонецЦикла; 
    Возврат ВыборПринтеров;
КонецФункции

2. Очистить очередь печати выбранного принтера:

&НаКлиенте
Процедура ОчиститьОчередьПечати(Команда)
    Если СокрЛП(Принтер) = "" Тогда
        Предупреждение("Не выбран принтер!");
    КонецЕсли;    

    ВременныйСкрипт = ПолучитьИмяВременногоФайла(".ps1");

    Текст = Новый ЗаписьТекста(
    ВременныйСкрипт,
    КодировкаТекста.ANSI, // кодировка
    Символы.ПС, // разделитель строк (необ.)
    Ложь // перезаписывать файл, а не дописывать в конец (необ.)
    );    

    Текст.ЗаписатьСтроку("Get-PrintJob -PrinterName """ + СокрЛП(Принтер) + """ | Remove-PrintJob");
    Текст.Закрыть();
    
    стрКоманда = "powershell -executionpolicy RemoteSigned -file """ + ВременныйСкрипт + """";
    WshShell = Новый COMОбъект("WScript.Shell"); 
    WshShell.Run(стрКоманда, 0, -1); 
    
    Пауза(1000*2);
    
    Предупреждение("Очередь печати очищена!");
    
КонецПроцедуры

3. Пауза

&НаКлиенте
Процедура Пауза(МиллиСекунды)

    ТаймерМС = ТекущаяУниверсальнаяДатаВМиллисекундах() + МиллиСекунды;
    Пока ТаймерМС > ТекущаяУниверсальнаяДатаВМиллисекундах() Цикл
        Состояние(ОКР((ТаймерМС-ТекущаяУниверсальнаяДатаВМиллисекундах())/1000),1);
    КонецЦикла;

КонецПроцедуры

4. Перезапустить службу печати:

&НаКлиенте
Процедура ПерезапуститьСлужбуПечати(Команда)
    РежимДиалога = РежимДиалогаВопрос.ДаНет; 
    ТекстВопроса = "Будет остановлена печать на всех принтерах." + Символы.ПС + "Продолжить?";
    Ответ = Вопрос(ТекстВопроса, РежимДиалога, 0); 
    Если Ответ = КодВозвратаДиалога.Да Тогда
        ВременныйBat = ПолучитьИмяВременногоФайла(".bat");
        
        Текст = Новый ЗаписьТекста(
        ВременныйBat,
        КодировкаТекста.ANSI, // кодировка
        Символы.ПС, // разделитель строк (необ.)
        Ложь // перезаписывать файл, а не дописывать в конец (необ.)
        );    
        
        Текст.ЗаписатьСтроку("net stop spooler");
        Текст.ЗаписатьСтроку("del %systemroot%\system32\spool\printers\*.shd /F /S /Q");
        Текст.ЗаписатьСтроку("del %systemroot%\system32\spool\printers\*.spl /F /S /Q");
        Текст.ЗаписатьСтроку("net start spooler");
        Текст.Закрыть();

        ЗапуститьПриложение(ВременныйBat); 
    КонецЕсли;    
КонецПроцедуры

6. Открыть параметры принтера:

&НаКлиенте
Процедура ПринтерОткрытие(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Если СокрЛП(Принтер) <> "" Тогда
        стрКоманда = "rundll32 printui.dll,PrintUIEntry /p /n """ + Принтер + """";
        WshShell = Новый COMОбъект("WScript.Shell"); 
        WshShell.Run(стрКоманда, 0, -1); 
    КонецЕсли;    
КонецПроцедуры

 

обработка принтер печать

См. также

Периферийные устройства Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 Россия Абонемент ($m)

Пример работы для разработчика с оборудованием принтер чеков в рамках новейшей библиотеки подключаемого оборудования.

10 стартмани

14.11.2024    588    2    aximo    0    

3

Периферийные устройства Системный администратор Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Абонемент ($m)

Простая в использовании обработка https://infostart.ru/1c/tools/1001819/ в целом решает поставленную задачу, но имеет явный недостаток - взаимодействует только с принтерами, подключенными к серверу. Доработанная версия позволяет работать как с принтерами на клиенте, так и на сервере

1 стартмани

30.08.2024    428    3    Sergey1CSpb    0    

4

Периферийные устройства Пользователь Платформа 1С v8.3 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Розничная и сетевая торговля (FMCG) Россия Абонемент ($m)

Расширение для вывода информации для покупателя из РМК на второй монитор. Также реализован вывод картинок из каталога в левую часть экрана покупателя. Разработано для УТ 11.5, УНФ 3.0.6 и 3.0.9.

1 стартмани

12.08.2024    1220    23    Rastopchinss    15    

3

Периферийные устройства Пользователь Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

Вывод для клиента на второй монитор (информационное табло) номера заказа в браузер (по умолчанию, например, Яндекс). Внешняя обработка может быть легко переделана под другие конфигурации (нужды) даже начинающим программистом.

1 стартмани

02.08.2024    728    0    AlOkt    0    

5

Периферийные устройства Программист Пользователь Платформа 1С v8.3 1С:Розница 3.0 Абонемент ($m)

Пример работы с эмулятором дисплея покупателя через библиотеку БПО.

6 стартмани

10.07.2024    755    6    aximo    0    

3

Периферийные устройства Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Речь пойдет не о сканерах штрихкодов 2D/3D/RF/распознавании лиц и прочего, а о старом добром аппарате, позволяющем считать страницу и отправить ее образ в ПК через COM/USB порт. Рассмотрим, как можно подключить и использовать сканер в типовых 1С-конфигурациях. И что делать, если никак не найти команду настройки сканера.

1 стартмани

28.05.2024    1115    Sergey1CSpb    2    

7

Периферийные устройства Пользователь Платформа 1С v8.3 1С:Розница 2 Россия Абонемент ($m)

Расширение для 1С: Розница 2.3 версий 2.3.15.ХХХ и выше. Удобный способ изменения принтера по умолчанию во встроенной обработке печати ценников и этикеток. Только для операционной системы Windows.

1 стартмани

13.05.2024    1081    5    independ    0    

5
Оставьте свое сообщение