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

Эта процедура находится в модуле объекта документа, в процедуре Печать():

```1c
    Процедура ПечатьЭтикетка(НаПринтер)

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    ТабДокумент.ИмяПринтера = ИмяПринтера;
    ТабДокумент.АвтоМасштаб = Истина;
    ТабДокумент.РазмерСтраницы = "Custom";
    ТабДокумент.ШиринаСтраницы = 80;
    ТабДокумент.ВысотаСтраницы = 60;
    ТабДокумент.ПолеСверху = 3;
    ТабДокумент.ПолеСнизу = 3;
    ТабДокумент.ПолеСлева = 0;
    ТабДокумент.ПолеСправа = 0;
    ТабДокумент.РазмерКолонтитулаСверху = 0;
    ТабДокумент.РазмерКолонтитулаСнизу = 0;
    ТабДокумент.КоличествоЭкземпляров = 1;
    ТабДокумент.Вывод = ИспользованиеВывода.Разрешить;

    ПараметрыПечати = Новый Структура;
    ПараметрыПечати.Вставить("НомерДокумента", НомерДокумента);
    ПараметрыПечати.Вставить("ДатаДокумента", ДатаДокумента);
    ПараметрыПечати.Вставить("Контрагент", Контрагент);
    ПараметрыПечати.Вставить("Телефон", Телефон);
    ПараметрыПечати.Вставить("Доставка", Доставка);
    ПараметрыПечати.Вставить("Направление", Направление);
    ПараметрыПечати.Вставить("Адрес", Адрес);
    ПараметрыПечати.Вставить("Комментарий", Комментарий);

    Макет = ПолучитьМакет("Этикетка");

    ОбластьШапкаДокумента = Макет.ПолучитьОбласть("ШапкаДокумента");
    ОбластьШапкаДокумента.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьШапкаДокумента);

    ОбластьШапкаКонтрагента = Макет.ПолучитьОбласть("ШапкаКонтрагента");
    ОбластьШапкаКонтрагента.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьШапкаКонтрагента);

    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка";

    Если НаПринтер Тогда
    ТабДокумент.Напечатать();
    Иначе
    ФормаПечати = ПолучитьОбщуюФорму("ПечатьДокументов", , Новый УникальныйИдентификатор);
    ФормаПечати.ОбъектПечати = Ссылка;
    ФормаПечати.ПечатныйДокумент = ТабДокумент;
    ФормаПечати.Заголовок = ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект);
    ФормаПечати.Защита = УправлениеДопПравамиПользователей.ЗащитаТаблиц();
    ФормаПечати.Открыть();
    КонецЕсли;

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

Эта процедура находится в журнале документов:

```1c
    Процедура ДействияФормыПечатьЭтикетка(Кнопка)

    ДокументОбъект = Документ.ПолучитьОбъект();
    ДокументОбъект.Печать("Этикетка", 1, Истина);

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

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

```1c
    Функция ПечатьЭтикетка()

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

    ПараметрыПечати = Новый Структура;
    ПараметрыПечати.Вставить("НомерДокумента", НомерДокумента);
    ПараметрыПечати.Вставить("ДатаДокумента", ДатаДокумента);
    ПараметрыПечати.Вставить("Контрагент", Контрагент);
    ПараметрыПечати.Вставить("Телефон", Телефон);
    ПараметрыПечати.Вставить("Доставка", Доставка);
    ПараметрыПечати.Вставить("Направление", Направление);
    ПараметрыПечати.Вставить("Адрес", Адрес);
    ПараметрыПечати.Вставить("Комментарий", Комментарий);

    Макет = ПолучитьМакет("Этикетка");

    ОбластьШапкаДокумента = Макет.ПолучитьОбласть("ШапкаДокумента");
    ОбластьШапкаДокумента.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьШапкаДокумента);

    ОбластьШапкаКонтрагента = Макет.ПолучитьОбласть("ШапкаКонтрагента");
    ОбластьШапкаКонтрагента.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьШапкаКонтрагента);

    Возврат ТабДокумент;

    КонецФункции
```
---
```1c
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка"
```

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

```1c
    ТабДокумент.Вывести()
```

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

```1c
    ТабДокумент = Новый ТабличныйДокумент;
```

тогда все настройки что вы делаете кодом будут "железобетонными"
(не будут сохраняться, если пользователь будет их менять)
---
Мне помог такой вариант:

```1c
    &НаКлиенте
    Процедура ШтрихкодПриИзменении()
    Настройки = ТаблицаОтчета.КлючПараметровПечати; //сохраняем старые параметры перед формированием отчета
    ФормированиеШтрихКодаНаСервере();
    ТаблицаОтчета.КлючПараметровПечати = Настройки; //восстанавливаем сохраненные параметры
    КонецПроцедуры
```
---
У табличного документа
КлючПараметровПечати (PrintParametersKey)
Использование:
Чтение и запись.
Описание:
Тип: Строка.
Содержит ключ значения, в котором сохраняются параметры печати таблицы. Параметры печати, настроенные и сохраненные с данным ключом, впоследствии восстанавливаются при следующем показе таблицы.
---
ИмяПараметровПечати и КлючПараметровПечати - это по сути одно свойство, просто ИмяПараметровПечати использовалось в 8.1 и осталось для совместимости, а КлючПараметровПечати это название для платформы 8.2. Но я пробовал и Ваш вариант - эффект такой же. К тому же, в типовой конфе при текущих распечаток используется именно ИмяПараметровПечати.
---
Ах да, раньше этот параметр назывался ИмяПараметровПечати.
---
Добавить
ФормаПечати.ПараметрыПечатногоДокумента = ТабДокумент ;
---
ФормаПечати вызывается в том случае, если пользователь захочет осуществить предварительный просмотр, то есть он может сразу печатать либо из формы документа (не заходят в ФормаПечати) либо из журнала документов (в котором тоже не зайдёт в ФормаПечати). Следовательно, печать также будет работать не корректно.
---
для программной печати:

```1c
    // ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка";
```

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

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

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

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

ЗЫ: и забудь навсегда про ИмяПараметровПечати /КлючПараметровПечати - ты все настройки задал уже в коде.Почему то так не работает)
---
1. должно быть всё норм, можешь очистить настройки пользователя, при желании

2.

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

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

Не угадал, там потом копирование области, посмотри код общей формы.А разве это не заполнение свойств:

```1c
    Процедура ПриОткрытии()

    ЭлементыФормы.ПолеТабличногоДокумента.ВставитьОбласть(ПечатныйДокумент.Область());

    ЭлементыФормы.ПолеТабличногоДокумента.ОтображатьЗаголовки = Ложь;
    ЭлементыФормы.ПолеТабличногоДокумента.ОтображатьСетку = Ложь;
    ЭлементыФормы.ПолеТабличногоДокумента.Защита = Защита;
    ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр = Истина;
    ЭлементыФормы.ПолеТабличногоДокумента.ИмяПараметровПечати = ПечатныйДокумент.ИмяПараметровПечати;
    ЭлементыФормы.ПолеТабличногоДокумента.ПовторятьПриПечатиСтроки = ПечатныйДокумент.ПовторятьПриПечатиСтроки;

    ЭлементыФормы.ПолеТабличногоДокумента.АвтоМасштаб = ПечатныйДокумент.АвтоМасштаб;
    ЭлементыФормы.ПолеТабличногоДокумента.ПолеСверху = ПечатныйДокумент.ПолеСверху;
    ЭлементыФормы.ПолеТабличногоДокумента.ПолеСлева = ПечатныйДокумент.ПолеСлева;
    ЭлементыФормы.ПолеТабличногоДокумента.ПолеСнизу = ПечатныйДокумент.ПолеСнизу;
    ЭлементыФормы.ПолеТабличногоДокумента.ПолеСправа = ПечатныйДокумент.ПолеСправа;
    ЭлементыФормы.ПолеТабличногоДокумента.РазмерКолонтитулаСверху = ПечатныйДокумент.РазмерКолонтитулаСверху;
    ЭлементыФормы.ПолеТабличногоДокумента.РазмерКолонтитулаСнизу = ПечатныйДокумент.РазмерКолонтитулаСнизу;
    ЭлементыФормы.ПолеТабличногоДокумента.ОриентацияСтраницы = ПечатныйДокумент.ОриентацияСтраницы;

    КонецПроцедуры
```
---
там не все свойства, ИмяПринтера и т.д нема
---
ИмяПринтера ну я вот скинул процедуру, и проверил каждой поле, которое передаётся для заполнение и заполняется ли. И кроме
```1c
    ЭлементыФормы.ПолеТабличногоДокумента.ПовторятьПриПечатиСтроки = ПечатныйДокумент.ПовторятьПриПечатиСтроки;
```
, так как я его сам не заполняю, всё заполняется корректно.
---
Очисти табличку _SystemSettings для нужных пользователей, если не файловая, по имени пользователя. В неё твои настройки печати валяются
---
В общем решение моей "проблемы" оказалось довольно банальным - пренебрежение значением свойства, а именно "ИмяПринтера". К примеру, на некоторых компьютерах имя принтера было задано как "host\КакоеТоИмяПринтера", а на некоторых "host.local\КакоеТоИмяПринтера". Я передавал в свойство "ИмяПринтера" именно значение "host\КакоеТоИмяПринтера". Так вот на компьютерах, где имена совпадали с переданным мной именем, всё печаталось хорошо, а где иначе - плохо. Возникает вопрос: "Очевидно же, что нужно было проверить сразу название принтеров на каждом компьютере, так почему не проверили?". А не проверили потому, что хоть и имена разные, но на печать документ выводился, то есть функционал выполнялся (частично), вот и пропустили как то этот момент. Как только имена везде подредактировали - всё заработало сразу же. Ну и если всё заработало, то код немного переделали и подогнали под печать стандартных процедур. Спасибо всем за попытки помочь. Тема закрыта.

```1c
    Функция ПечатьЭтикетка()

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

    ПараметрыПечати = Новый Структура;
    ПараметрыПечати.Вставить("НомерДокумента", НомерДокумента);
    ПараметрыПечати.Вставить("ДатаДокумента", ДатаДокумента);
    ПараметрыПечати.Вставить("Контрагент", Контрагент);
    ПараметрыПечати.Вставить("Телефон", Телефон);
    ПараметрыПечати.Вставить("Доставка", Доставка);
    ПараметрыПечати.Вставить("Направление", Направление);
    ПараметрыПечати.Вставить("Адрес", Адрес);
    ПараметрыПечати.Вставить("Комментарий", Комментарий);

    Макет = ПолучитьМакет("Этикетка");

    ОбластьШапкаДокумента = Макет.ПолучитьОбласть("ШапкаДокумента");
    ОбластьШапкаДокумента.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьШапкаДокумента);

    ОбластьШапкаКонтрагента = Макет.ПолучитьОбласть("ШапкаКонтрагента");
    ОбластьШапкаКонтрагента.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьШапкаКонтрагента);

    Возврат ТабДокумент;

    КонецФункции
```
---
И ? У поля табличного поля ИмяПринтёра не будет заполнено - ибо заполнения нет. Раньше, в типовых, в этой проце вообще ничего не заполнялось.
---
ПараметрыПечДокумента = Новый Структура("АвтоМасштаб,ПолеСверху,ПолеСлева,ПолеСнизу,ПолеСправа,РазмерКолонтитулаСверху,РазмерКолонтитулаСнизу,ОтображатьЗаголовки, ОтображатьСетку, ТолькоПросмотр, Защита, ИмяПараметровПечати",Истина,0,0,0,0,0,0);
 УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент,КоличествоЭкземпляров,НаПринтер,Заголовок,НепосредственнаяПечать)