&НаКлиенте
Процедура ПЦЭ_ПриОткрытииПосле(Отказ)
ПЦЭ_НастройкиПринтераПоУмолчанию();
КонецПроцедуры
&НаКлиенте
Процедура ПЦЭ_НастройкиПринтераПоУмолчанию()
Попытка
COMОбъект = ПолучитьCOMОбъект("winmgmts:\\.\root\CIMV2");
Выборка = COMОбъект.ExecQuery("SELECT * FROM Win32_Printer",,48);
Для Каждого Эл Из Выборка Цикл
Элементы.ПринтерПоУмолчанию.СписокВыбора.Добавить(Эл.Caption);
КонецЦикла;
ПринтерСтрока=Неопределено;
COMОбъект = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv");
COMОбъект.GetStringValue("2147483649","Software\Microsoft\Windows NT\CurrentVersion\Windows","Device",ПринтерСтрока);
ПринтерСистемыПоУмолчанию=СтрРазделить(ПринтерСтрока,",")[0];
Исключение
КонецПопытки;
ПЦЭ_ПолучитьНастройкиПринтерПоУмолчанию(ИмяКомпьютера());
Если ПринтерПоУмолчанию="" ИЛИ
Элементы.ПринтерПоУмолчанию.СписокВыбора.НайтиПоЗначению(ПринтерПоУмолчанию)=Неопределено Тогда
ПринтерПоУмолчанию=ПринтерСистемыПоУмолчанию;
ИспользоватьПринтерПоУмолчанию=Ложь;
ПЦЭ_ИспользоватьПринтерПоУмолчаниюПриИзмененииПосле(Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПЦЭ_ИспользоватьПринтерПоУмолчаниюПриИзмененииПосле(Элемент)
ПЦЭ_СохранитьНастройкиПринтерПоУмолчанию(ИмяКомпьютера());
Элементы.ПринтерПоУмолчанию.Доступность=ИспользоватьПринтерПоУмолчанию;
КонецПроцедуры
&НаКлиенте
Процедура ПЦЭ_ПринтерПоУмолчаниюПриИзмененииПосле(Элемент)
ПЦЭ_СохранитьНастройкиПринтерПоУмолчанию(ИмяКомпьютера());
КонецПроцедуры
&НаСервере
Процедура ПЦЭ_ПолучитьНастройкиПринтерПоУмолчанию(ИмяКомпьютераКлиент)
УстановитьПривилегированныйРежим(Истина);
КлючОбъекта = "НастройкиПринтерПоУмолчанию";
КлючНастроек = КлючОбъекта;
ОписаниеНастроек = КлючОбъекта;
НастройкиПринтерПоУмолчанию = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, "");
ИспользоватьПринтерПоУмолчанию=Ложь;
ПринтерПоУмолчанию="";
Если ТипЗнч(НастройкиПринтерПоУмолчанию) = Тип("Структура") Тогда
Соответствие=НастройкиПринтерПоУмолчанию.Список.Получить(ИмяКомпьютераКлиент);
Если Соответствие<>Неопределено Тогда
ИспользоватьПринтерПоУмолчанию=Соответствие.ИспользоватьПринтерПоУмолчанию;
ПринтерПоУмолчанию=Соответствие.ПринтерПоУмолчанию;
КонецЕсли;
КонецЕсли;
Элементы.ПринтерПоУмолчанию.Доступность=ИспользоватьПринтерПоУмолчанию;
КонецПроцедуры
&НаСервере
Процедура ПЦЭ_СохранитьНастройкиПринтерПоУмолчанию(ИмяКомпьютераКлиент)
УстановитьПривилегированныйРежим(Истина);
КлючОбъекта = "НастройкиПринтерПоУмолчанию";
КлючНастроек = КлючОбъекта;
ОписаниеНастроек = КлючОбъекта;
НастройкиПринтерПоУмолчанию = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, "");
Соответствие=Новый Соответствие;
Если ТипЗнч(НастройкиПринтерПоУмолчанию) = Тип("Структура") Тогда
Соответствие=НастройкиПринтерПоУмолчанию.Список;
КонецЕсли;
НастройкиПринтерПоУмолчанию=Новый Структура;
НастройкиПринтерПоУмолчанию.Вставить("ИмяКомпьютераКлиент", ИмяКомпьютераКлиент);
НастройкиТекущие=Новый Структура;
НастройкиТекущие.Вставить("ИспользоватьПринтерПоУмолчанию",ИспользоватьПринтерПоУмолчанию);
НастройкиТекущие.Вставить("ПринтерПоУмолчанию",ПринтерПоУмолчанию);
Соответствие.Вставить(ИмяКомпьютераКлиент,НастройкиТекущие);
НастройкиПринтерПоУмолчанию.Вставить("Список", Соответствие);
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, НастройкиПринтерПоУмолчанию, ОписаниеНастроек, "");
КонецПроцедуры
&НаКлиенте
Процедура ПЦЭ_ПечатьПеред(Команда)
ПЦЭ_СохранитьНастройкиПринтерПоУмолчанию(ИмяКомпьютера());
КонецПроцедуры
&НаКлиенте
Процедура ПЦЭ_ШаблоныПЦЭ_ПринтерыПосле(Команда)
Список=ПолучитьШаблоныПЦЭ_Принтеры();
Оповещение=Новый ОписаниеОповещения("ПЦЭ_ШаблоныПЦЭ_ПринтерыЗавершение",ЭтаФорма);
Список.ПоказатьВыборЭлемента(Оповещение,"Шаблоны->Принтеры");
КонецПроцедуры
&НаКлиенте
Процедура ПЦЭ_ШаблоныПЦЭ_ПринтерыЗавершение(Результат,ДопПараметры) ЭКСПОРТ
Если Результат=Неопределено Тогда
Возврат;
КонецЕсли;
Оповещение=Новый ОписаниеОповещения("ПЦЭ_ШаблоныПЦЭ_ВыборПринтераЗавершение",ЭтаФорма,Результат.Значение);
Список=Элементы.ПринтерПоУмолчанию.СписокВыбора;
Список.ПоказатьВыборЭлемента(Оповещение,"Принтер для шаблона "+Результат.Значение);
КонецПроцедуры
&НаКлиенте
Процедура ПЦЭ_ШаблоныПЦЭ_ВыборПринтераЗавершение(Результат,ДопПараметры) ЭКСПОРТ
Если Результат=Неопределено Тогда
Возврат;
КонецЕсли;
ПЦЭ_УстановитьИмяПринтераШаблон(ДопПараметры,Результат.Значение);
ПоказатьПредупреждение(,"Установлен принтер по умолчанию для шаблона ПЦЭ"+
Символы.ПС+ДопПараметры+" -> "+Результат.Значение);
ПараметрыФормы=Новый Структура("Ключ",ДопПараметры);
Форма=ОткрытьФорму("Справочник.ХранилищеШаблонов.Форма.ФормаЭлемента",ПараметрыФормы,ЭтаФорма);
Форма.ВыполнитьДействия("ОткрытьФормуРедактированияМакета("""")");
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьШаблоныПЦЭ_Принтеры()
УстановитьПривилегированныйРежим(Истина);
Запрос=Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ХранилищеШаблонов.Ссылка КАК Ссылка,
| ХранилищеШаблонов.Шаблон КАК Шаблон
|ИЗ
| Справочник.ХранилищеШаблонов КАК ХранилищеШаблонов
|ГДЕ
| НЕ ХранилищеШаблонов.ЭтоГруппа";
Выборка=Запрос.Выполнить().Выбрать();
Список=Новый СписокЗначений;
Пока Выборка.Следующий() Цикл
Шаблон=Выборка.Шаблон.Получить();
ИмяПринтера="";
Если Шаблон.Свойство("РедакторТабличныйДокумент") Тогда
ИмяПринтера=Шаблон.РедакторТабличныйДокумент.ИмяПринтера;
КонецЕсли;
Список.Добавить(Выборка.Ссылка,""+Выборка.Ссылка+" -> "+ИмяПринтера);
КонецЦикла;
Возврат Список;
КонецФункции
&НаСервереБезКонтекста
Процедура ПЦЭ_УстановитьИмяПринтераШаблон(Ссылка,ИмяПринтера)
УстановитьПривилегированныйРежим(Истина);
Эл=Ссылка.ПолучитьОбъект();
Шаблон=Ссылка.Шаблон.Получить();
Если Шаблон.Свойство("РедакторТабличныйДокумент") Тогда
РедакторТабличныйДокумент=Шаблон.РедакторТабличныйДокумент;
РедакторТабличныйДокумент.ИмяПринтера=ИмяПринтера;
Шаблон.Удалить("РедакторТабличныйДокумент");
Шаблон.Вставить("РедакторТабличныйДокумент",РедакторТабличныйДокумент);
КонецЕсли;
Если Шаблон.Свойство("МакетЭтикетки") Тогда
МакетЭтикетки=Шаблон.РедакторТабличныйДокумент;
МакетЭтикетки.ИмяПринтера=ИмяПринтера;
Шаблон.Удалить("МакетЭтикетки");
Шаблон.Вставить("МакетЭтикетки",МакетЭтикетки);
КонецЕсли;
Эл.Шаблон=Новый ХранилищеЗначения(Шаблон);
Эл.Записать();
КонецПроцедуры