УТ 10.3.14.5. Работа на сервере, принтера проброшены через RDP.
Вобщем настроен принтер этикеток, печатает нормально.
Проблема в том что если на одном компе стоит обычный принтер и принтер этикеток, начинаются проблемы.
Зашел под пользователем, сформировал форму этикетки, нажал предпросмотр, выбрал принтер этикеток. убрал все поля. И все замечательно, можно печать этикетки, но....
До тех пор пока в предварительном просмотре не выберешь обычный принтер. Как только ты его выбрал, потом выбираешь обратно принтер этикеток, и ВСЕ - размер бумаги становиться как A4 по высоте, но узкая по ширине. И дальше хоть убейся, ничего не помогает!!!
Может перед печатью имя принтера присваивать ТабДоку? Ну и соответственно от того что печатаете задавать табдоку параметры все
Я так когда-то решал подобного рода задачу, только с печатью документов, один документ на одном принтере, другой документ с цветной печатью на другом.
Есть один скрипт который по умолчанию возвращает имя принтера установленного по умолчанию.
(3)через отладчик я в таб доку смотрю там имя принтера правильное стоит. А размер бумаги не цепляется правильный все равно. Может в Таб Документ запихать размеры бумаги, хотя помоему я уже это пробовал, не помогло.
(6) Не очень понимаю куда это все сохраняется. И как восстановить сохраненные настройки?
Вот типовой код процедуры печать, из обработки ПечатьЭтикеток.
Процедура Печать(ТаблицаТоваров) Экспорт
КолвоПереданныхТоваров = ТаблицаТоваров.Количество();
Если КолвоПереданныхТоваров = 0 Тогда
Предупреждение("В списке нет ни одного товара со штрихкодом, заполните список товаров,"
+ Символы.ПС + "для которых надо распечатать этикетки. ");
Возврат;
КонецЕсли;
ПечататьБезЦены = Ложь;
Если ПечататьЦену Тогда
Для Каждого СтрокаИзСписка Из ТаблицаТоваров Цикл
Если СтрокаИзСписка.Цена = 0 И СтрокаИзСписка.Количество > 0 Тогда
Ответ = Вопрос("У некоторых товаров не указаны цены! Печатать этикетки для этих товаров?",
РежимДиалогаВопрос.ДаНетОтмена);
Если Ответ = КодВозвратаДиалога.Отмена Тогда
Возврат;
ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда
ПечататьБезЦены = Истина;
ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда
ПечататьБезЦены = Ложь;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ТекКолонка = 1;
ТекСтрока = 1;
Таб = Новый ТабличныйДокумент;
//Таб.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка1"+СокрЛП(ИмяКомпьютера());
// Добавил в имя параметров, еще имя пользователя, т.к. все работают через терминал и имя пк у всех - СЕРВЕР!!!
Таб.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка1"+СокрЛП(ИмяКомпьютера())+СокрЛП(ПараметрыСеанса.ТекущийПользователь);
Макет = ПолучитьОбщийМакет("Этикетка");
ЭтикеткаОбласть = Макет.ПолучитьОбласть(1,1,4,2);
ОбластьНоменклатура = ЭтикеткаОбласть.Области.Номенклатура;
ОбластьШтрихкод = ЭтикеткаОбласть.Области.ОбластьШтрихкод;
РисунокШтрихкод = ЭтикеткаОбласть.Рисунки.Штрихкод;
ОбластьЦена = ЭтикеткаОбласть.Области.Цена;
ОбластьНоменклатура.ВысотаСтроки = ВысотаЭтикетки * 2.65 * 0.35;
ОбластьШтрихкод.ВысотаСтроки = ВысотаЭтикетки * 2.65 * 0.5;
РисунокШтрихкод.Расположить(ОбластьШтрихкод);
ОбластьЦена.ВысотаСтроки = ВысотаЭтикетки * 2.65 * 0.35;
ЭтикеткаОбласть.Область(2,2,2,2).ШиринаКолонки = ШиринаЭтикетки*0.53;
Если ФорматЭтикетки = 1 Тогда //принтер этикеток.
ВсегоСтрок = 1;
КоличествоКолонок=1;
ИначеЕсли ФорматЭтикетки = 2 Тогда //А4 по колонкам.
ОбластьГраницаСправа = Макет.ПолучитьОбласть(2,4,4,4);
ОбластьНизГраницыСправа = Макет.ПолучитьОбласть(5,4,5,4);
ОбластьГраницаСнизу = Макет.ПолучитьОбласть(6,2,6,2);
ОбластьНачалоГраницыСнизу = Макет.ПолучитьОбласть(6,1,6,1);
ОбластьГраницаСправа.Рисунки.ГраницаСправа.Высота = ВысотаЭтикетки*1.09;
ОбластьГраницаСнизу.Рисунки.ГраницаСнизу.Ширина = ШиринаЭтикетки;
ОбластьГраницаСправа.Область(1,1,1,1).ВысотаСтроки = ВысотаЭтикетки*2.65;
ОбластьГраницаСнизу.Область(1,1,1,1).ШиринаКолонки = ШиринаЭтикетки*0.53;
ВсегоСтрок = 19;
КоличествоКолонок = 5;
КонецЕсли;
ВсегоКолонок = КоличествоКолонок;
Если ВсегоКолонок > 1 Тогда
ВсегоКолонок = ВсегоКолонок+ВсегоКолонок - 1; //добавляем разделители колонок.
КонецЕсли;
ВывелиХотяБыОдинШтрихКод = Ложь;
Для Каждого СтрокаИзСписка Из ТаблицаТоваров Цикл
Если ПечататьЦену И СтрокаИзСписка.Цена = 0
И Не ПечататьБезЦены Тогда
Продолжить;
КонецЕсли;
ТипКода = ПолучитьЗначениеТипаШтрихкодаДляЭУ(СтрокаИзСписка.ТипШтрихкода);
Если ТипКода = -1 Тогда
ОбщегоНазначения.СообщитьОбОшибке("Для штрихкода формата """ + СтрокаИзСписка.ТипШтрихкода
+ """ не существует соответствующего типа в ЭУ ""1С:Печать штрихкодов"".
| Позиция будет пропущена");
Продолжить;
КонецЕсли;
Если РаботаСТорговымОборудованием.ПроверитьШтрихКод(?(ПустаяСтрока(СтрокаИзСписка.ПредставлениеШтрихкода),
СтрокаИзСписка.Штрихкод,
СтрокаИзСписка.ПредставлениеШтрихкода),
СтрокаИзСписка.ТипШтрихкода) Тогда
ЭтикеткаОбласть.Рисунки.Штрихкод.Объект.ТипКода = ТипКода;
ЭтикеткаОбласть.Рисунки.Штрихкод.Объект.Сообщение = ?(ПустаяСтрока(СтрокаИзСписка.ПредставлениеШтрихкода),
СтрокаИзСписка.Штрихкод,
СтрокаИзСписка.ПредставлениеШтрихкода);
ОбластьНоменклатура.Текст = СокрЛП(СтрокаИзСписка.Номенклатура) + ФормированиеПечатныхФорм.ПредставлениеСерий(СтрокаИзСписка);
Если ПечататьЦену И СтрокаИзСписка.Цена <> 0 Тогда
Если Не ЗначениеЗаполнено(ДопТипЦены) Тогда
//ОбластьЦена.Текст = "Цена: " + ОбщегоНазначения.ФорматСумм(СтрокаИзСписка.Цена,СтрокаИзСписка.Валюта) + " за " + СтрокаИзСписка.ЕдиницаИзмерения;
ОбластьЦена.Текст = СокрЛП(ТипЦены.ДляПечатиЭтикеток) + ": " + ОбщегоНазначения.ФорматСумм(СтрокаИзСписка.Цена,СтрокаИзСписка.Валюта) + " за " + СтрокаИзСписка.ЕдиницаИзмерения;
Иначе
ОбластьЦена.Текст = СокрЛП(ТипЦены.ДляПечатиЭтикеток) + ": " + ОбщегоНазначения.ФорматСумм(СтрокаИзСписка.Цена,СтрокаИзСписка.Валюта) + " за " + СтрокаИзСписка.ЕдиницаИзмерения;
ОбластьЦена.Текст = ОбластьЦена.Текст + Символы.ПС + СокрЛП(ДопТипЦены.ДляПечатиЭтикеток) + ": " + ОбщегоНазначения.ФорматСумм(СтрокаИзСписка.ДопЦена,СтрокаИзСписка.Валюта) + " за " + СтрокаИзСписка.ЕдиницаИзмерения;
КонецЕсли;
КонецЕсли;
Для Копий = 1 По СтрокаИзСписка.Количество Цикл
Если ТекКолонка > ВсегоКолонок Тогда //новая строка.
Если ВсегоСтрок <> 1 Тогда //выведем разделитель.
Для Сч = 1 по ВсегоКолонок Цикл
Если Сч = 1 Тогда
Таб.Вывести(ОбластьНачалоГраницыСнизу);
Иначе
Таб.Присоединить(ОбластьНачалоГраницыСнизу);
КонецЕсли;
Таб.Присоединить(ОбластьГраницаСнизу);
Таб.Присоединить(ОбластьНизГраницыСправа);
Сч = Сч + 1;
КонецЦикла;
ТекСтрока = ТекСтрока + 1;
КонецЕсли;
Если ТекСтрока/ВсегоСтрок = Цел(ТекСтрока/ВсегоСтрок) Тогда
Таб.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТекСтрока = ТекСтрока + 1;
ТекКолонка=1;
КонецЕсли;
Если ТекКолонка<>1 Тогда //выведем разделитель.
Таб.Присоединить(ОбластьГраницаСправа);
ТекКолонка = ТекКолонка + 1;
Таб.Присоединить(ЭтикеткаОбласть);
ТекКолонка = ТекКолонка + 1;
Иначе
Таб.Вывести(ЭтикеткаОбласть);
ТекКолонка = ТекКолонка + 1;
КонецЕсли;
ВывелиХотяБыОдинШтрихКод = Истина;
КонецЦикла;
Иначе
ТекстСообщения = "У товара """ + СтрокаИзСписка.Номенклатура + """ штрихкод не задан или имеет неверный формат!";
Если КолвоПереданныхТоваров = 1 Тогда
Предупреждение(ТекстСообщения);
Иначе
Сообщить(ТекстСообщения,СтатусСообщения.БезСтатуса);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ВывелиХотяБыОдинШтрихКод Тогда
УниверсальныеМеханизмы.НапечататьДокумент(Таб, 1, СразуНаПринтер, "Этикетки");
Иначе
Сообщить("На печать не выведено ни одной этикетки!");
КонецЕсли;
КонецПроцедуры // Печать()
8.
jobkostya1c_ERP
10008.08.14 20:13 Сейчас в теме
Ну настройки формы обработки печати сохраняются в конфигурации. Посмотрел в последнем релизе УТ 10.3 на рисунке. А вот про принтер и параметры его листа на первый взгляд не вижу. А вообще знакомая процедура печати. Все те же грабли. Для отдельного принтера этикеток приходилось опытным путем менять коэффициенты масштабирования
Вообще проблем нету, только задавать для каждого документа свои
ТабДок.ИмяПараметровПечати
ТабДок.ИмяПринтер
Может пригодится код для поиска принтера под нужную сессию.
Принтер = ИмяПринтера (from ИмяКомпьютера);
А функция возвращает с имя принтера с учетом "перенаправлено"
Функция ПринтерВТерминале(Принтер)
ServiceSet=GetCOMObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2");
PrinterSet=ServiceSet.Get("Win32_Printer");
Попытка
Items=ServiceSet.ExecQuery("Sel ect * fr om Win32_Printer");
Исключение
Сообщить(ОписаниеОшибки());
Отказ=Истина;
возврат Принтер;
КонецПопытки;
Для каждого стр из Items Цикл
Если Найти(стр.Name, Принтер)>0 Тогда
возврат (стр.Name);
КонецЕсли;
КонецЦикла;
Здравствуйте! Заказывал себе принтер в одной очень крутой компании,всё очень понравилось.Хорошие цены,большой ассортимент товара.Советую и вам попробовать заказать у них http://print-code.ru