Имя: Пароль:
1C
1C 7.7
v7: программная печать на разные принтеры
0 BolshoySmal
 
30.01.17
12:04
Всем добрый день. Помогите решить проблему. Есть сервак терминальный 2012. на нем 7.7 живет.
Возникла необходимость в зависмости от признкака документа отправлять на разные принтеры.Принтеры сетевые . Значение задается через переменную
Сколько не бился, всё равно отправляет на последний отпечатанный.
вот код
Если ПустоеЗначение(докум.Хартман)=1 Тогда
    Таб3.Опции(0,0,0,0,"ОпцииПечатиРеализация3");                                 Таб3.ПараметрыСтраницы(2,,,,,,,,,1,,Устройство);
    Таб2.Опции(0,0,0,0,"ОпцииПечатиТитул1");                Таб2.ПараметрыСтраницы(1,,,,,,,,,1,,Устройство);          //Опись            
Иначе            Таб3.Опции(0,0,0,0,"ОпцииПечатиРеализация4");
            Таб3.ПараметрыСтраницы(2,,,,,,,,,1,,УстройствоХар);
            Таб2.Опции(0,0,0,0,"ОпцииПечатиТитул2");
            Таб2.ПараметрыСтраницы(1,,,,,,,,,1,,УстройствоХар);          //        
КонецЕСли;
        Таб3.КоличествоЭкземпляров(КолвоКопий);
        Таб3.Показать(глНазваниеДокументаВжурнале(Докум));  
        Таб3.Напечатать(0);
        
        Таб2.КоличествоЭкземпляров(КолвоКопий);
        Таб2.Показать(глНазваниеДокументаВжурнале(Докум));  
        Таб2.Напечатать(0);
Помогите плиз. буду очень признателен.
1 z80a
 
30.01.17
12:12
Нужно удалить в реестре DefaultPrinter
2 BolshoySmal
 
30.01.17
12:21
Не спасло.
3 Злопчинский
 
30.01.17
12:25
Пропиши четко ВЕЗДЕ в разных ветках если аккуратно

Таб.Опции(0,0,0,0,"ОпцииПечати_"+рбВидЭтикетки+ИмяПользователя()+"_лИмя");
Таб.ПараметрыСтраницы(3-рбВидЭтикетки,,1,0,0,0,0,0,0,1,1,ИмяТекущийПринтер);


ИмяТекущийПринтер - ПРАВИЛЬНОЕ ИМЯ, если будет неправильно - или в никуда уйдет или на умолчательный
4 Builder
 
30.01.17
12:25
(0) Была где то обработка - получала список принтеров, пользователь выбирал, сохранялись данные из реестра, в реестр прописывался выбранный принтер, отправлялось все на печать, дальше все возвращалось в реестре как было. Работало.
5 Злопчинский
 
30.01.17
12:25
то есть Опции+ПараметрыСтраницы - всегда парой, чтобы не терялись
6 z80a
 
30.01.17
12:27
(2) После каждой печати
[HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\" + НазваниеИБ + "\V7\" + ИмяПользователя() + "\Moxel\Default]
""DefaultPrinter""=-
7 Злопчинский
 
30.01.17
12:27
С прямой печатью сразу - была какая-то особенность, не помню уже... поройся в старых ветках
8 Garykom
 
гуру
30.01.17
12:28
Погугли EnumPrinterConnections у тя имена принтеров неправильные вероятно
9 Злопчинский
 
30.01.17
12:28
когда пропишешь все аккуратно в коде попробуй для разных принтеров сделать Показать и потом ручную печать

а потом то же самое без показать сразу Напечатать(...)
10 Garykom
 
гуру
30.01.17
12:29
(6) Не надо никакой "дефолтовый принтер" скидывать, все работает и с установленным.
11 torgm
 
30.01.17
12:33
(0) наименование принтеров по 8 символов.
12 z80a
 
30.01.17
12:36
(10) нет, не работает
13 Garykom
 
гуру
30.01.17
12:39
(12) с кислотой что то
14 Злопчинский
 
30.01.17
12:46
(13) плесень? грибы?
15 Garykom
 
гуру
30.01.17
12:51
(14) между плесенью и грибами разница в этой кислоте минимальна
16 BolshoySmal
 
30.01.17
13:56
нашкл вот такой тод
17 BolshoySmal
 
30.01.17
13:58
нашел вот такой код
  N=СоздатьОбъект("WScript.Network");
NetworkPrinters = N.EnumPrinterConnections();
Для Сч = 0 По NetworkPrinters.length - 1 Цикл
    Сообщить("Подключен сетевой принтер " + NetworkPrinters.Item(сч) + " [" + NetworkPrinters.Item(сч + 1) + "]");
    сч = сч + 1;
КонецЦикла;

Получаю вот
___________________________________________________
Подключен сетевой принтер 10.2.3.122 [Har_Sklad]
Подключен сетевой принтер 10.2.3.5 [Rozn_otd]
Подключен сетевой принтер 10.2.3.93 [OSn_Sklad]
Подключен сетевой принтер WSD-ce6cd131-395a-43e9-9adb-1965a2e5c612.006c [FS-C5150DN]
Подключен сетевой принтер PORTPROMPT: [Microsoft XPS Document Writer]
Подключен сетевой принтер PORTPROMPT: [Microsoft Print to PDF]
Подключен сетевой принтер SHRFAX: [Fax]
18 BolshoySmal
 
30.01.17
13:59
теперь пытаюсь сделать следующее
    Т=СоздатьОбъект("Таблица");
    Т.ВывестиСекцию("Шапка");
    Т.Показать();
   N=СоздатьОбъект("WScript.Network");
    PrinterDef="Osn_skald";
    PrinterPrint="Har_skald";
    N.SetDefaultPrinter(PrinterPrint);
    Т.ПараметрыСтраницы(1,,,10,0,0,0,0,0,1,1);
    Т.Напечатать(0);
и получаю ошибку  WSHNetwork.SetDefaultPrinter: Отсутствует принтер с именем "Har_skald".
19 BolshoySmal
 
30.01.17
13:59
а принтер первый в списке
20 BolshoySmal
 
30.01.17
13:59
почему так ? кто нить сможет сказать ?
21 Это_mike
 
30.01.17
14:01
Har_Sklad <> Har_skald
22 Garykom
 
гуру
30.01.17
14:03
(17) Гы с сетевыми принтерами все еще веселее, переименуй их в короткие имена без спецсимволов там где 1С запускается.
23 BolshoySmal
 
30.01.17
14:28
не понял
24 BolshoySmal
 
30.01.17
14:29
как перерименовать?
типа Har_skald в HarSklad
25 BolshoySmal
 
30.01.17
15:16
вот такой код
Ошибок не выдал, но и на печать не отправил
Тз=СоздатьОбъект("ТаблицаЗначений");
    Тз.НоваяКолонка("Итем");
    Тз.НоваяКолонка("Имя");
    Т=СоздатьОбъект("Таблица");
    Т.ВывестиСекцию("Шапка");
    Т.Показать();
    N=СоздатьОбъект("WScript.Network");
    NetworkPrinters = N.EnumPrinterConnections();
    Для Сч = 0 По NetworkPrinters.length - 1 Цикл
        Сообщить("Подключен сетевой принтер " + NetworkPrinters.Item(сч) + " [" + NetworkPrinters.Item(сч + 1) + "]");
        Тз.НоваяСтрока();
        Тз.Итем=NetworkPrinters.Item(сч + 1);
        Тз.Имя=СокрЛП(Строка(NetworkPrinters.Item(сч + 1)));    
        сч = сч + 1;
    КонецЦикла;
    НомСТр=0;
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()>0 цикл
        Если ТЗ.Имя="Har_Sklad" Тогда
            PrinterDef=ТЗ.Итем;
        КонецЕСли;    
        Если ТЗ.Имя="OSn_Sklad" Тогда
            PrinterPrint=ТЗ.Итем;
        КонецЕСли;    
    КонецЦикла;
    //PrinterDef=Har_sklad;
    //PrinterPrint=ТЗ.ПолучитьСТрокуПоомеру(1).Итем;
    N.SetDefaultPrinter(PrinterPrint);
    Т.ПараметрыСтраницы(1,,,10,0,0,0,0,0,1,1);
    Т.Напечатать(0);
    N.SetDefaultPrinter(PrinterDef);
    Т.ПараметрыСтраницы(1,,,10,0,0,0,0,0,1,1);
    Т.Напечатать(0);
26 BolshoySmal
 
30.01.17
15:57
В резултьтате получилось вот так
Может кому и пригодиться.
    Тз=СоздатьОбъект("ТаблицаЗначений");
    Тз.НоваяКолонка("Итем");
    Тз.НоваяКолонка("Имя");
    Т=СоздатьОбъект("Таблица");
    Т.ВывестиСекцию("Шапка");
    Т.Показать();
    N=СоздатьОбъект("WScript.Network");
    NetworkPrinters = N.EnumPrinterConnections();
    Для Сч = 0 По NetworkPrinters.length - 1 Цикл
        Сообщить("Подключен сетевой принтер " + NetworkPrinters.Item(сч) + " [" + NetworkPrinters.Item(сч + 1) + "]");
        Тз.НоваяСтрока();
        Тз.Итем=NetworkPrinters.Item(сч + 1);
        Тз.Имя=СокрЛП(Строка(NetworkPrinters.Item(сч + 1)));    
        сч = сч + 1;
    КонецЦикла;
    НомСТр=0;
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()>0 цикл
        //Если ТЗ.Имя="Har_Sklad" Тогда
        Если ТЗ.Имя="FS-C5150DN" Тогда
            PrinterDef=ТЗ.Итем;
        КонецЕСли;    
        Если ТЗ.Имя="OSn_Sklad" Тогда
            PrinterPrint=ТЗ.Итем;
        КонецЕСли;    
    КонецЦикла;
    //PrinterDef=Har_sklad;
    //PrinterPrint=ТЗ.ПолучитьСТрокуПоомеру(1).Итем;    
    Сообщить(PrinterDef);
    Сообщить(PrinterPrint);
    N.SetDefaultPrinter(PrinterPrint);
    //Т.ПараметрыСтраницы(1,,,10,0,0,0,0,0,1,PrinterPrint);
    Т.ПараметрыСтраницы(1,,,,,,,,,1,,PrinterPrint);
    Т.Напечатать(0);
    N.SetDefaultPrinter(PrinterDef);
    //Т.ПараметрыСтраницы(1,,,10,0,0,0,0,0,1,PrinterDef);    
    Т.ПараметрыСтраницы(1,,,,,,,,,1,,PrinterDef);
        Т.Напечатать(0);
27 BolshoySmal
 
30.01.17
15:58
Можно закрывать