Используем реестр Windows. Переходим в ветку: HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\НазваниеБазы\V7\ИмяПользователя\Moxel\Default. Нас интересует параметр Paper. Опытным путем я установил, что значение "9", отвечает за размер бумаги А4, а значение "11", за формат А5. Соответственно, если вам будет нужен другой размер бумаги А3 или еще какой, вам просто нужно будет вызвать печатную форму какого-либо документа, выставить необходимый формат и посмотреть в реестре, значение параметра Paper.
С теорией вроде разобрались. Перейдем к программной реализации. Была создана глобальная процедура "глИзменитьФорматБумаги(ФорматБумаги)" и две константы для указания имен принтеров.
Процедура глИзменитьФорматБумаги(ФорматБумаги)
Перем ПутьККлючу, ИмяПараметра, Значение, ИмяПараметра2, Значение2, Reg;
COMServices = СоздатьОбъект("COMServices.COM"); // Подключаем библиотека ComServices.dll
HKEY_CURRENT_USER = 2147483649;
ПутьККлючу = "Software\1C\1Cv7\7.7\ "Название вашей базы данных" \V7\"+ИмяПользователя()+"\Moxel\Default";
Reg = COMServices.GetCOMObject("winmgmts:{impersonationLevel=impersonate}!\\" + ИмяКомпьютера() + "\root\default:StdRegProv");
ИмяПараметра = "Paper";
ИмяПараметра2 = "DefaultPrinter";
Если ФорматБумаги = "Д4" Тогда
Значение = СокрЛП(9);
Значение2 = СокрЛП(Константа.ПринтерСклад4);
ИначеЕсли ФорматБумаги = "Д5" Тогда
Значение = СокрЛП(11);
Значение2 = СокрЛП(Константа.ПринтерСклад5);
КонецЕсли;
Reg.SetStringValue(HKEY_CURRENT_USER, ПутьККлючу, ИмяПараметра, Значение);
Reg.SetStringValue(HKEY_CURRENT_USER, ПутьККлючу, ИмяПараметра2, Значение2);
КонецПроцедуры
Теперь рассмотрим простой пример. Требуется автоматом распечать все расходные накладные за заданные период, но там где клиент плательщик НДС, распечатать на А4, а где нет на А5.
Получится примерно такой код (привожу только основной фрагмент)
Если Клиент.ПлательщикНДС = 1 Тогда
ГлИзменитьФорматБумаги("Д4");
ОткрытьФормуМодально(ДокРН, "печНДС"); // здесь ДокРН, ссылка на наш объект типа документ РН, а "ПечНДС" параметр который мы передаем в открываемую форму
Иначе
ГлИзменитьФорматБумаги("Д5");
ОткрытьФормуМодально(ДокРН, "печБезНДС");
Затем в модуле документа расходная накладная в процедуре ПриОткрытии(), пишем следующее:
Если Форма.Параметр = "печНДС" Тогда
ПечНДСА4(); // Это непосредственно процедура отвечающая за вывод на печать документа
статусВозврата(0);
возврат();
ИначеЕсли Форма.Параметр = "печБезНДС" Тогда
ПечНДСА5(); // Это непосредственно процедура отвечающая за вывод на печать документа
статусВозврата(0); // здесь мы автоматически закрываем форму
возврат();
КонецЕсли;
Ну и в самих процедурах вывода на печать в конце пишем следующее
Таб.Показать(,,1); // показываем печатную форму
Таб.Напечатать(0); // автоматом отправляем на печать
Таб.Показать(,,-1); // закрываем печатную форму
Ссылка на COMServices.COM: https://cloud.mail.ru/public/MjCw/dcXgUD9s8
Вот в принципе основные моменты. Если, что-то не понятно или есть какие-то вопросы или замечания, готов выслушать. Спасибо за внимание.