Сохранения параметров печати табличного документа

1. Jovi 19.01.22 10:31 Сейчас в теме
Добрый день. УТ 10, 8.3, обычные формы.
На форуме подобные темы находил, но решения так и не нашёл. Подскажите пожалуйста, как программно сохранить параметры печати табличного документа для печати наклейки на всех принтерах, компьютерах и из разных мест? Вызываю свою созданную процедуру, в которой создаётся, заполняется и печатается документ из трёх разных мест: через форму документа, через журнал документов и через предпросмотр страницы. На моём компьютере печатается всё хорошо, у нескольких коллег тоже. Также хорошо печатается на одинаковых базах как у меня так и у некоторых коллег. НО, всё же не у всех коллег. К примеру через форму документа печатается всё хорошо, с моим параметрами, а через другие места - параметры не передаются. Попытался найти решение на различных форумах - не получилось. Вот пример когда:

Эта процедура находится в модуле объекта документа, в процедуре Печать():
Процедура ПечатьЭтикетка(НаПринтер)
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;    
    ТабДокумент.ИмяПринтера = ИмяПринтера;
    ТабДокумент.АвтоМасштаб = Истина;
    ТабДокумент.РазмерСтраницы = "Custom";
    ТабДокумент.ШиринаСтраницы = 80;
    ТабДокумент.ВысотаСтраницы = 60;
    ТабДокумент.ПолеСверху = 3;    
    ТабДокумент.ПолеСнизу = 3;
    ТабДокумент.ПолеСлева = 0;
    ТабДокумент.ПолеСправа = 0;    
    ТабДокумент.РазмерКолонтитулаСверху = 0;
    ТабДокумент.РазмерКолонтитулаСнизу = 0;
    ТабДокумент.КоличествоЭкземпляров = 1;
    ТабДокумент.Вывод = ИспользованиеВывода.Разрешить;
    
    ПараметрыПечати = Новый Структура;    
    ПараметрыПечати.Вставить("НомерДокумента", НомерДокумента);
    ПараметрыПечати.Вставить("ДатаДокумента", ДатаДокумента);    
    ПараметрыПечати.Вставить("Контрагент", Контрагент);
    ПараметрыПечати.Вставить("Телефон", Телефон);
    ПараметрыПечати.Вставить("Доставка", Доставка);
    ПараметрыПечати.Вставить("Направление", Направление);
    ПараметрыПечати.Вставить("Адрес", Адрес);
    ПараметрыПечати.Вставить("Комментарий", Комментарий);
    
    Макет = ПолучитьМакет("Этикетка");
    
    ОбластьШапкаДокумента = Макет.ПолучитьОбласть("ШапкаДокумента");        
    ОбластьШапкаДокумента.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьШапкаДокумента);
    
    ОбластьШапкаКонтрагента = Макет.ПолучитьОбласть("ШапкаКонтрагента");
    ОбластьШапкаКонтрагента.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьШапкаКонтрагента);
    
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка";
    
    Если НаПринтер Тогда
        ТабДокумент.Напечатать();
    Иначе
        ФормаПечати = ПолучитьОбщуюФорму("ПечатьДокументов", , Новый УникальныйИдентификатор);
        ФормаПечати.ОбъектПечати = Ссылка;
        ФормаПечати.ПечатныйДокумент = ТабДокумент;
        ФормаПечати.Заголовок =  ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект);
        ФормаПечати.Защита = УправлениеДопПравамиПользователей.ЗащитаТаблиц();
        ФормаПечати.Открыть();                
    КонецЕсли;
    
КонецПроцедуры
Показать


Эта процедура находится в журнале документов:
Процедура ДействияФормыПечатьЭтикетка(Кнопка)
    
    ДокументОбъект = Документ.ПолучитьОбъект();
    ДокументОбъект.Печать("Этикетка", 1, Истина);

КонецПроцедуры


P.S. Большая просьба отвечать по существу и по теме, а не засырать тему издёвками.
По теме из базы знаний
Найденные решения
17. Jovi 20.01.22 11:51 Сейчас в теме
В общем решение моей "проблемы" оказалось довольно банальным - пренебрежение значением свойства, а именно "ИмяПринтера". К примеру, на некоторых компьютерах имя принтера было задано как "host\КакоеТоИмяПринтера", а на некоторых "host.local\КакоеТоИмяПринтера". Я передавал в свойство "ИмяПринтера" именно значение "host\КакоеТоИмяПринтера". Так вот на компьютерах, где имена совпадали с переданным мной именем, всё печаталось хорошо, а где иначе - плохо. Возникает вопрос: "Очевидно же, что нужно было проверить сразу название принтеров на каждом компьютере, так почему не проверили?". А не проверили потому, что хоть и имена разные, но на печать документ выводился, то есть функционал выполнялся (частично), вот и пропустили как то этот момент. Как только имена везде подредактировали - всё заработало сразу же. Ну и если всё заработало, то код немного переделали и подогнали под печать стандартных процедур. Спасибо всем за попытки помочь. Тема закрыта.

Функция ПечатьЭтикетка()
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка";
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;    
    ТабДокумент.АвтоМасштаб = Ложь;
    ТабДокумент.ШиринаСтраницы = 82;
    ТабДокумент.ВысотаСтраницы = 60;
    ТабДокумент.ПолеСверху = 3;    
    ТабДокумент.ПолеСнизу = 0;
    ТабДокумент.ПолеСлева = 2;
    ТабДокумент.ПолеСправа = 0;
    ТабДокумент.РазмерКолонтитулаСверху = 0;
    ТабДокумент.РазмерКолонтитулаСнизу = 0;
    ТабДокумент.МасштабПечати = 100;
    ТабДокумент.ДвусторонняяПечать = ТипДвустороннейПечати.Нет;
    ТабДокумент.ЧерноБелаяПечать = Ложь;
    ТабДокумент.ЭкземпляровНаСтранице = 1;
    ТабДокумент.ЧередованиеРасположенияСтраниц = ЧередованиеРасположенияСтраниц.НеИспользовать;
    ТабДокумент.РазборПоКопиям = Ложь;
    
    ПараметрыПечати = Новый Структура;    
    ПараметрыПечати.Вставить("НомерДокумента", НомерДокумента);
    ПараметрыПечати.Вставить("ДатаДокумента", ДатаДокумента);    
    ПараметрыПечати.Вставить("Контрагент", Контрагент);
    ПараметрыПечати.Вставить("Телефон", Телефон);
    ПараметрыПечати.Вставить("Доставка", Доставка);
    ПараметрыПечати.Вставить("Направление", Направление);
    ПараметрыПечати.Вставить("Адрес", Адрес);
    ПараметрыПечати.Вставить("Комментарий", Комментарий);
    
    Макет = ПолучитьМакет("Этикетка");
    
    ОбластьШапкаДокумента = Макет.ПолучитьОбласть("ШапкаДокумента");        
    ОбластьШапкаДокумента.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьШапкаДокумента);
    
    ОбластьШапкаКонтрагента = Макет.ПолучитьОбласть("ШапкаКонтрагента");
    ОбластьШапкаКонтрагента.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьШапкаКонтрагента);
    
    Возврат ТабДокумент;
    
КонецФункции
Показать
user1706724; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. -AI- 19.01.22 11:39 Сейчас в теме
(1)
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка"

1) эта строка сбрасывает все настройки что были выше.
2) лучше эту строчку делать ДО первого
ТабДокумент.Вывести()

3) если хочется что бы пользовательские настройки не сохранялись, сделайте
эту строку сразу после
ТабДокумент = Новый ТабличныйДокумент;

тогда все настройки что вы делаете кодом будут "железобетонными"
(не будут сохраняться, если пользователь будет их менять)
16. Nik-An 27 19.01.22 23:23 Сейчас в теме
(1) Мне помог такой вариант:
&НаКлиенте
Процедура ШтрихкодПриИзменении()
	Настройки = ТаблицаОтчета.КлючПараметровПечати; //сохраняем старые параметры перед формированием отчета
	ФормированиеШтрихКодаНаСервере();
	ТаблицаОтчета.КлючПараметровПечати = Настройки; //восстанавливаем сохраненные параметры
КонецПроцедуры
2. onetone 19.01.22 10:39 Сейчас в теме
У табличного документа
КлючПараметровПечати (PrintParametersKey)
Использование:
Чтение и запись.
Описание:
Тип: Строка.
Содержит ключ значения, в котором сохраняются параметры печати таблицы. Параметры печати, настроенные и сохраненные с данным ключом, впоследствии восстанавливаются при следующем показе таблицы.
4. Jovi 19.01.22 10:46 Сейчас в теме
(2) ИмяПараметровПечати и КлючПараметровПечати - это по сути одно свойство, просто ИмяПараметровПечати использовалось в 8.1 и осталось для совместимости, а КлючПараметровПечати это название для платформы 8.2. Но я пробовал и Ваш вариант - эффект такой же. К тому же, в типовой конфе при текущих распечаток используется именно ИмяПараметровПечати.
3. onetone 19.01.22 10:46 Сейчас в теме
Ах да, раньше этот параметр назывался ИмяПараметровПечати.
5. homer_ 78 19.01.22 11:02 Сейчас в теме
Добавить
ФормаПечати.ПараметрыПечатногоДокумента = ТабДокумент ;
6. Jovi 19.01.22 11:17 Сейчас в теме
(5)
ФормаПечати
вызывается в том случае, если пользователь захочет осуществить предварительный просмотр, то есть он может сразу печатать либо из формы документа (не заходят в ФормаПечати) либо из журнала документов (в котором тоже не зайдёт в ФормаПечати). Следовательно, печать также будет работать не корректно.
7. user1203706 13 19.01.22 11:25 Сейчас в теме
(1)
для программной печати:
// ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка";


если с открытием общей формы, то установи полю табличного документа все свойства после открытия общей формы, такие как автомасштаб, отступы, имяпринтёра, то что в коде выше у тебя.

ЗЫ: и забудь навсегда про ИмяПараметровПечати /КлючПараметровПечати - ты все настройки задал уже в коде.
9. Jovi 19.01.22 12:08 Сейчас в теме
(7)
для программной печати:
// ТабДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПокупателя_Этикетка";
Если убрать это свойство, то при распечатке мои настройки печати не применяются ещё в больших случаях (у большего количество пользователей), а берутся настройки самого принтера.

если с открытием общей формы, то установи полю табличного документа все свойства после открытия общей формы, такие как автомасштаб, отступы, имяпринтёра, то что в коде выше у тебя.
Так вот же :
ФормаПечати.ПечатныйДокумент = ТабДокумент;

ЗЫ: и забудь навсегда про ИмяПараметровПечати /КлючПараметровПечати - ты все настройки задал уже в коде.
Почему то так не работает)
10. user1203706 13 19.01.22 12:23 Сейчас в теме
(9)

1. должно быть всё норм, можешь очистить настройки пользователя, при желании

2.

>>>ФормаПечати.ПечатныйДокумент = ТабДокумент;

Не угадал, там потом копирование области, посмотри код общей формы.
11. Jovi 19.01.22 13:35 Сейчас в теме
(10)
должно быть всё норм, можешь очистить настройки пользователя, при желании
и раньше очищал - не работало, и сейчас перепроверил - такая же история

Не угадал, там потом копирование области, посмотри код общей формы.
А разве это не заполнение свойств:
Процедура ПриОткрытии()
	
	ЭлементыФормы.ПолеТабличногоДокумента.ВставитьОбласть(ПечатныйДокумент.Область());
	
	ЭлементыФормы.ПолеТабличногоДокумента.ОтображатьЗаголовки = Ложь;
	ЭлементыФормы.ПолеТабличногоДокумента.ОтображатьСетку     = Ложь;
	ЭлементыФормы.ПолеТабличногоДокумента.Защита              = Защита;
	ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр      = Истина;
	ЭлементыФормы.ПолеТабличногоДокумента.ИмяПараметровПечати = ПечатныйДокумент.ИмяПараметровПечати;
	ЭлементыФормы.ПолеТабличногоДокумента.ПовторятьПриПечатиСтроки = ПечатныйДокумент.ПовторятьПриПечатиСтроки;
	
	ЭлементыФормы.ПолеТабличногоДокумента.АвтоМасштаб = ПечатныйДокумент.АвтоМасштаб;
	ЭлементыФормы.ПолеТабличногоДокумента.ПолеСверху = ПечатныйДокумент.ПолеСверху;
	ЭлементыФормы.ПолеТабличногоДокумента.ПолеСлева = ПечатныйДокумент.ПолеСлева;
	ЭлементыФормы.ПолеТабличногоДокумента.ПолеСнизу = ПечатныйДокумент.ПолеСнизу;
	ЭлементыФормы.ПолеТабличногоДокумента.ПолеСправа = ПечатныйДокумент.ПолеСправа;
	ЭлементыФормы.ПолеТабличногоДокумента.РазмерКолонтитулаСверху = ПечатныйДокумент.РазмерКолонтитулаСверху;
	ЭлементыФормы.ПолеТабличногоДокумента.РазмерКолонтитулаСнизу = ПечатныйДокумент.РазмерКолонтитулаСнизу;
	ЭлементыФормы.ПолеТабличногоДокумента.ОриентацияСтраницы = ПечатныйДокумент.ОриентацияСтраницы;
		
КонецПроцедуры
Показать
12. user1203706 13 19.01.22 14:19 Сейчас в теме
(11) там не все свойства, ИмяПринтера и т.д нема
13. Jovi 19.01.22 14:20 Сейчас в теме
(12)
ИмяПринтера
ну я вот скинул процедуру, и проверил каждой поле, которое передаётся для заполнение и заполняется ли. И кроме
ЭлементыФормы.ПолеТабличногоДокумента.ПовторятьПриПечатиСтроки = ПечатныйДокумент.ПовторятьПриПечатиСтроки;
, так как я его сам не заполняю, всё заполняется корректно.
14. user1203706 13 19.01.22 14:21 Сейчас в теме
Очисти табличку _SystemSettings для нужных пользователей, если не файловая, по имени пользователя. В неё твои настройки печати валяются
17. Jovi 20.01.22 11:51 Сейчас в теме
В общем решение моей "проблемы" оказалось довольно банальным - пренебрежение значением свойства, а именно "ИмяПринтера". К примеру, на некоторых компьютерах имя принтера было задано как "host\КакоеТоИмяПринтера", а на некоторых "host.local\КакоеТоИмяПринтера". Я передавал в свойство "ИмяПринтера" именно значение "host\КакоеТоИмяПринтера". Так вот на компьютерах, где имена совпадали с переданным мной именем, всё печаталось хорошо, а где иначе - плохо. Возникает вопрос: "Очевидно же, что нужно было проверить сразу название принтеров на каждом компьютере, так почему не проверили?". А не проверили потому, что хоть и имена разные, но на печать документ выводился, то есть функционал выполнялся (частично), вот и пропустили как то этот момент. Как только имена везде подредактировали - всё заработало сразу же. Ну и если всё заработало, то код немного переделали и подогнали под печать стандартных процедур. Спасибо всем за попытки помочь. Тема закрыта.

Функция ПечатьЭтикетка()
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка";
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;    
    ТабДокумент.АвтоМасштаб = Ложь;
    ТабДокумент.ШиринаСтраницы = 82;
    ТабДокумент.ВысотаСтраницы = 60;
    ТабДокумент.ПолеСверху = 3;    
    ТабДокумент.ПолеСнизу = 0;
    ТабДокумент.ПолеСлева = 2;
    ТабДокумент.ПолеСправа = 0;
    ТабДокумент.РазмерКолонтитулаСверху = 0;
    ТабДокумент.РазмерКолонтитулаСнизу = 0;
    ТабДокумент.МасштабПечати = 100;
    ТабДокумент.ДвусторонняяПечать = ТипДвустороннейПечати.Нет;
    ТабДокумент.ЧерноБелаяПечать = Ложь;
    ТабДокумент.ЭкземпляровНаСтранице = 1;
    ТабДокумент.ЧередованиеРасположенияСтраниц = ЧередованиеРасположенияСтраниц.НеИспользовать;
    ТабДокумент.РазборПоКопиям = Ложь;
    
    ПараметрыПечати = Новый Структура;    
    ПараметрыПечати.Вставить("НомерДокумента", НомерДокумента);
    ПараметрыПечати.Вставить("ДатаДокумента", ДатаДокумента);    
    ПараметрыПечати.Вставить("Контрагент", Контрагент);
    ПараметрыПечати.Вставить("Телефон", Телефон);
    ПараметрыПечати.Вставить("Доставка", Доставка);
    ПараметрыПечати.Вставить("Направление", Направление);
    ПараметрыПечати.Вставить("Адрес", Адрес);
    ПараметрыПечати.Вставить("Комментарий", Комментарий);
    
    Макет = ПолучитьМакет("Этикетка");
    
    ОбластьШапкаДокумента = Макет.ПолучитьОбласть("ШапкаДокумента");        
    ОбластьШапкаДокумента.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьШапкаДокумента);
    
    ОбластьШапкаКонтрагента = Макет.ПолучитьОбласть("ШапкаКонтрагента");
    ОбластьШапкаКонтрагента.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьШапкаКонтрагента);
    
    Возврат ТабДокумент;
    
КонецФункции
Показать
user1706724; +1 Ответить
15. user1203706 13 19.01.22 14:23 Сейчас в теме
(13) И ? У поля табличного поля ИмяПринтёра не будет заполнено - ибо заполнения нет. Раньше, в типовых, в этой проце вообще ничего не заполнялось.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот