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

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

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

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

P.S. Большая просьба отвечать по существу и по теме, а не засырать тему издёвками.
1 lodger
 
19.01.22
10:30
P.S. Большая просьба отвечать по существу и по теме, а не засырать тему издёвками. - провоцируешь на обратное.
2 Bon Jovi
 
19.01.22
10:36
(1) Процедура ПечатьЭтикетка(НаПринтер) находится в модуле объекта документа, в процедуре Печать().
3 lodger
 
19.01.22
10:44
обычно хватало параметра ИмяПараметровПечати
он нигде не сбрасывается?
4 Bon Jovi
 
19.01.22
10:50
(3) Процедуру ПечатьЭтикетка() я вызываю только при одном условии, если нужно распечатать именно этикетку, и больше ни что с ней не взаимодействует, соответственно, сбрасываться не может, по крайней мере программно я это не выявил. Проблема в том, что ИмяПараметровПечати почему то не применяется в определённом моменте, хотя в ХранилищеСистемныхНастроек запись есть и параметры в ней мои заданы.
5 Bon Jovi
 
19.01.22
10:52
И опять же, как тогда объяснить, что у некоторых всё хорошо применяется и распечатывается, а у некоторых нет? Также и с базой. На одной и той же базе у меня всё хорошо, у другого нет.
6 Ryzeman
 
19.01.22
14:48
Я сталкивался с подобной проблемой, пришёл к тому, что из 1с всё печатается через ХранилищеСистемныхНастроек. На всё остальное ей пофиг. Для решения своей задачи я удалил программно настройки по нужному мне объекту у пользователей, у которых были косяки, помогло.
7 Bon Jovi
 
20.01.22
11:50
В общем решение моей "проблемы" оказалось довольно банальным - пренебрежение значением свойства, а именно "ИмяПринтера". К примеру, на некоторых компьютерах имя принтера было задано как "host\КакоеТоИмяПринтера", а на некоторых "host.local\КакоеТоИмяПринтера". Я передавал в свойство "ИмяПринтера" именно значение "host\КакоеТоИмяПринтера". Так вот на компьютерах, где имена совпадали с переданным мной именем, всё печаталось хорошо, а где иначе - плохо. Возникает вопрос: "Очевидно же, что нужно было проверить сразу название принтеров на каждом компьютере, так почему не проверили?". А не проверили потому, что хоть и имена разные, но на печать документ выводился, то есть функционал выполнялся (частично), вот и пропустили как то этот момент. Как только именна везде подредактировали - всё заработало сразу же. Ну и если всё заработало, то код немного переделали и подогнали под печать стандартных процедур. Спасибо всем за попытки помочь. Тема закрыта.

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