Яндекс.Метрика

Как программно изменить размер страницы

Используем реестр 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

 

Вот в принципе основные моменты. Если, что-то не понятно или есть какие-то вопросы или замечания, готов выслушать. Спасибо за внимание.    

Ваше имя

Отзыв

Отправить
Andrey
А можно ли все-таки решить в 1С 7.7 проблему программно задавать двухстороннюю печать? Поделитесь знаниями.
Ответ:
Извиняюсь, давно не заходил сюда. Уже пару лет прошло с тех пор как я решал эту задачу. Вроде как двухсторонняя печать у меня работала. Просто в настройках самого принтера нужно чтобы это было указано. В самой 1С, вроде как, ничего задавать не нужно было.
Антон
Спасибо. Вот только проблема неожиданная: где взять ComServices.dll?!
Ответ:
Напишите свой email, где-то у меня был, если найду отправлю.

photo

Всем привет,  меня зовут Тимур. Я работаю программистом 1С.

Хочу поблагодарить моего друга Александра,
благодаря которому появился на свет этот блог

создание сайтов в симферополе