Как найти ссылку на печатную форму

Получить ссылку на внешнюю печатную форму документа из обработки

Я
   Чинандалар Бонг

10.09.13 — 08:47

Надо из обработки получить ссылку на внешнюю печатную форму документа. Как это сделать?

   Нуф-Нуф

1 — 10.09.13 — 08:49

Программно? Не?

   Serg_1960

2 — 10.09.13 — 08:50

Ссылку? О_О

   Defender aka LINN

3 — 10.09.13 — 08:53

(0) Дятлы в атаке… Название конфигурации мы теперь угадывать должны?

И вообще — что за задача перед тобой стоит? Ну, кроме как выпятить на мисте свою некомпетентность.

   Serg_1960

4 — 10.09.13 — 08:55

Файл временный, контекст модуля — это как бы понимаю, но «ссылка» — это что? Включаю телепата :) Ссылка на запись в справочнике регистрации внешних? А кому и для чего она нужна? Нее, сломался телепат.

   Чинандалар Бонг

5 — 10.09.13 — 09:00

сорри. щас прочитал, действительно непонятно задал вопрос. Имеется ввиду внешняя печатная форма, которая в справочнике внешних печ форм.

   Чинандалар Бонг

6 — 10.09.13 — 09:01

из обработки создается документ, после чего его надо распечатать, для этого и надо получить его печ форму (внешнюю)

   Defender aka LINN

7 — 10.09.13 — 09:01

(5) Это мы и без тебя тут протелепали уже. Ты расскажи — нахрена.

   Defender aka LINN

8 — 10.09.13 — 09:02

(6) Скопипасти процедуру печати в свою обработку и не тилипи нам моск

   Serg_1960

9 — 10.09.13 — 09:06

(6) Грац. Вот что значит собрался и наконец-то спросил :) Наводящий вопрос: а если у документа несколько печатных форм?

PS: Справочник — он и есть справочник. Принципы работы неизменны.

   Чинандалар Бонг

10 — 10.09.13 — 09:06

(8) если по делу сказать нечего, то не стоит засорять форум пустыми словами

Нужна одна форма, чтобы не вносить изменения в обе сразу

   Чинандалар Бонг

11 — 10.09.13 — 09:07

(9) ну да. когда грамотно сформулировал вопрос, уже сам понял как сделать :)

   Serg_1960

12 — 10.09.13 — 09:14

вольная трактовка китайской мудрости чёрт знает какого века: Чтобы правильно задать вопрос — нужно знать большую часть ответа.

   Defender aka LINN

13 — 10.09.13 — 09:28

(10) Охренеть. Дятел будет решать, что по делу я говорю, а что нет. Куда побежишь, когда обработку в другой базе запустят?

   Serg_1960

14 — 10.09.13 — 09:32

(13) Остынь. Для того и форум чтобы спрашивать. Спрашивают тогда, когда не знают ответа. Потому и вопросы такие… эээ… малоинформативные :) Вопросы! А не автор. Ну, максимум что допустимо, поговорить о компетенции, но не о личности. Угомонись.

   mzelensky

15 — 10.09.13 — 09:47

(0) вообще-то конфа сама получит нужную форму. Тебе просто нужно вызвать необходимую процедуру. Точнее передать в процедуру «Печать» необходимые параметры и все.

   mzelensky

16 — 10.09.13 — 09:49

(15) сори, не «Печать», а вот в эту процедуру:

«УниверсальныеМеханизмы.ПечатьПоДополнительнойКнопке(«

   Serg_1960

17 — 10.09.13 — 09:53

(16) +1 Достаточно указать текст с наименованием этой печатной формы в кнопке «Печать» формы документа. Но есть более короткий путь — непосредственное обращение к записи справочника.

   Serg_1960

18 — 10.09.13 — 10:06

(17) + но должен заметить, что «короткий путь» не означает «простой путь». Если учитывать все условия, что могут быть описаны при регистрации печатной формы, то «короткий» путь совсем так не прост, как кажется.

  

mzelensky

19 — 10.09.13 — 10:13

(17) самое правильное это повторить то, что происходит при интерактивном действии (т.е. по нажатию кнопки печать). Тогда однозначно конечный результат будет идентичным. + не нужно долго разбираться с множеством параметров — конфа сама определит печатную форму (внешнюю или внутреннюю)

Для работы с внешними обработками (а внешняя печатная форма тоже является внешней обработкой) существует объект ВнешниеОбработки.

Рассмотрим два возможных случая:

Внешняя обработка хранится на диске отдельно от информационной базы

Для программного открытия внешней обработки в 1С нужно знать адрес ее файла. Зная его, можно либо открыть форму обработки, либо получить объект обработки для проведения с ним дальнейших действий (например, для вызова экспортных функций из модуля объекта).

Открытие формы внешней обработки

Для программного открытия формы внешней обработки в 1С используется функция ПолучитьФорму() объекта ВнешниеОбработки. Функция имеет несколько параметров. Рассмотрим простое открытие основной формы обработки:

//В переменной АдресФайла находится полный путь к файлу внешней обработки
Форма=ВнешниеОбработки.ПолучитьФорму(АдресФайла);
Форма.Открыть();

Для открытия неосновной формы внешней обработки необходимо указать ее имя.

//В переменной АдресФайла находится полный путь к файлу внешней обработки
Форма=ВнешниеОбработки.ПолучитьФорму(АдресФайла, «НеосновнаяФорма»);
Форма.Открыть();

Открытие внешней обработки как объекта

Для того чтобы получить внешнюю обработку как объект используется функция Создать() объекта ВнешниеОбработки.

//В переменной АдресФайла находится полный путь к файлу внешней обработки
ОбъектОбработки=ВнешниеОбработки.Создать(АдресФайла);

По умолчанию все обработки открываются в безопасном режиме. Чтобы его отключить, используются следующие параметры:

//В переменной АдресФайла находится полный путь к файлу внешней обработки
ОбъектОбработки=ВнешниеОбработки.Создать(АдресФайла, Ложь);

Внешняя обработка или печатная форма сохранена в информационной базе

Во многих конфигурациях существует возможность сохранять внешние печатные формы и обработки непосредственно в информационной базе. Для этого используется справочник ВнешниеОбработки. Сама внешняя обработка хранится в виде двоичных данных либо в реквизите ХранилищеВнешнейОбработки, либо в табличной части Принадлежность в реквизите ХранилищеВнешнейОбработки.

Для открытия внешней обработки нужно:

  1. Получить ее из хранилища.
  2. Сохранить файл с обработкой на диск.
  3. Открыть форму или получить объект обработки.
  4. Если мы имеем дело с внешней печатной формой, то можно заполнить стандартный реквизит СсылкаНаОбъект и вызвать экспортную функцию Печать.

//В переменной СпрСсылка находится ссылка на элемент справочника ВнешниеОбработки
ДвДанные=СпрСсылка.ХранилищеВнешнейОбработки.Получить();
АдресФайла=ПолучитьИмяВременногоФайла();
ДвДанные.Записать(АдресФайла);
ОбъектОбработки=ВнешниеОбработки.Создать(АдресФайла, Ложь);

//Для внешней печатной формы. СсылкаНаОбъект содержит ссылку на элемент, которому принадлежит печатная форма

ОбъектОбработки.СсылкаНаОбъект=СсылкаНаОбъект;
ТабДок=ОбъектОбработки.Печать();

Skip to content

1С, вставить ссылку в табличный документ (макет печатной формы)

Вставить ссылку в табличный документ (макет печатной формы)

Порядок действий:

  • Создать макет, добавить параметр. В свойствах параметра задать наименование реквизита «ПараметрРасшифровки»;

  • Создать процедуру печати, где заполним свойство «ПараметрРасшифровки», пример процедуры:

Обратите внимание, что в свойствах табличного документа «ТабДок.ТолькоПросмотр = Истина»

&НаСервере
Процедура ПечатьНаСервере()
	ТабДок = Новый ТабличныйДокумент;
	Макет = Обработки.ВставитьСсылкуВТабличныйДокумент.ПолучитьМакет("Макет");
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ЗаказПокупателя.Ссылка КАК Ссылка,
	|	ЗаказПокупателя.Представление КАК Представление
	|ИЗ
	|	Документ.ЗаказПокупателя КАК ЗаказПокупателя";
	Выборка = Запрос.Выполнить().Выбрать();
	ОбластьМакета = Макет.ПолучитьОбласть("Детали");
	
	Пока Выборка.Следующий() Цикл
		ОбластьМакета.Параметры.Представление = Выборка.Представление;
		ОбластьМакета.Параметры.Ссылка = Выборка.Ссылка; 
		ТабДок.Вывести(ОбластьМакета, Выборка.Уровень());
	КонецЦикла;
	
	ТабДок.ТолькоПросмотр = Истина; 
	ТабДок.Показать();
КонецПроцедуры

Связанные статьи

Изменение встроенных в типовые конфигурации печатных форм — это, вероятно, одна из наиболее распространенных доработок типовых конфигураций. Чтобы каждый раз не изменять саму конфигурацию, компания «1С» создала механизм внешних печатных форм.

Внешняя печатная форма — это обычная внешняя обработка, соответствующая определенным требованиям. Такую обработку можно подключить к какой-либо типовой конфигурации и тем самым добавить новую печатную форму и/или заменить существующую.

Кроме этого, нужно отметить, что создание внешних печатных форм различается для обычного приложения (Бухгалтерия 2.0.*, ЗиУП 2.5.*, УТ 10.3.*) и управляемого приложения (Бухгалтерия 3.0.*, ЗиУП 3.*, УТ 11.*). В статье будут рассмотрены оба варианта.

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

Содержание

  1. Внешняя печатная форма в управляемом приложении
  2. Создание
  3. Подключение
  4. Внешняя печатная форма в обычном приложении
  5. Создание
  6. Подключение

Внешняя печатная форма в управляемом приложении

Начнем с того, что в настоящее время встречается чаще — с управляемого приложения. В тексте ниже будет приведен пример создания и подключения внешней печатной формы для документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 3.0).

Создание

Как уже было сказано выше, внешняя печатная форма — это просто-напросто внешняя обработка соответствующая некоторым требованиям. Первым требованием является реализация в модуле печатной формы экспортной функции СведенияОВнешнейОбработке().

Итак, создаем новую внешнюю обработку и в модуле объекта этой обработки размещаем примерно такой код:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = Новый Структура;

//указываем сведения о внешней печатной форме

ПараметрыРегистрации.Вставить(«Вид», «ПечатнаяФорма»);

ПараметрыРегистрации.Вставить(«Версия», «1.2»);

ПараметрыРегистрации.Вставить(«ВерсияБСП», «3.0.1.287»);

ПараметрыРегистрации.Вставить(«Наименование», «Печатная форма для ПКО»);

ПараметрыРегистрации.Вставить(«Информация», «Внешняя печатная форма для документов»);

//используем безопасный режим, это накладывает некоторые ограничения

ПараметрыРегистрации.Вставить(«БезопасныйРежим», Истина);

//определим документы и/или справочники

//в которых будет использоваться эта печатная форма

ПараметрыРегистрации.Вставить(«Назначение», Новый Массив);

ПараметрыРегистрации.Назначение.Добавить(«Документ.ПриходныйКассовыйОрдер»);

//используется для дополнительных отчетов

//подключенных к подсистеме «Варианты отчетов»

ПараметрыРегистрации.Вставить(«ОпределитьНастройкиФормы», Ложь);

//если требуются исключения из безопасного режима, их можно запросить

ПараметрыРегистрации.Вставить(«Разрешения», Новый Массив);

ПараметрыРегистрации.Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(«https»,»yandex.ru»,80,»очень надо»));

//определяем таблицу команд

ПараметрыРегистрации.Вставить(«Команды», ПолучитьТаблицуКоманд());

//добавляем команду

Команда = ПараметрыРегистрации.Команды.Добавить();

Команда.Представление = «Печатная форма для ПКО (внешняя)»;

Команда.Идентификатор = «ПечатнаяФормаДляПКО»;

Команда.Использование = «ВызовСерверногоМетода»;

Команда.ПоказыватьОповещение = Истина;

Команда.Модификатор = «ПечатьMXL»;

Возврат ПараметрыРегистрации;

КонецФункции

Функция ПолучитьТаблицуКоманд()

Команды = Новый ТаблицаЗначений;

Команды.Колонки.Добавить(«Представление», Новый ОписаниеТипов(«Строка»));

Команды.Колонки.Добавить(«Идентификатор», Новый ОписаниеТипов(«Строка»));

Команды.Колонки.Добавить(«Использование», Новый ОписаниеТипов(«Строка»));

Команды.Колонки.Добавить(«ПоказыватьОповещение», Новый ОписаниеТипов(«Булево»));

Команды.Колонки.Добавить(«Модификатор», Новый ОписаниеТипов(«Строка»));

Команды.Колонки.Добавить(«ЗаменяемыеКоманды», Новый ОписаниеТипов(«Строка»));

Возврат Команды;

КонецФункции

Код в основном прокомментирован, но некоторые моменты нужно обговорить отдельно. Функция СведенияОВнешнейОбработке() является общей для всех внешних объектов. Вид внешнего объекта указывается в параметре «Вид» (у нас указана «ПечатнаяФорма»).

Большинство параметров не являются обязательными для заполнения. В нашем случае обязательно указать параметры «Вид», «Версия» и «Команды» — это обязательные параметры для всех видов внешних объектов («Команды» необязательны для отчетов). Кроме этого будет полезно указать параметры «Назначение». Но вообще, желательно указывать как можно больше информации — это поможет не запутаться как Вашим клиентам так и Вам самим.

Параметр «БезопасныйРежим» со значением «Истина» накладывает следующие ограничения:

  • игнорируется привилегированный режим;
  • запрещена работа с COM;
  • запрещена загрузка внешних компонент;
  • запрещен запуск внешних приложений и команд ОС;
  • запрещен доступ к файловой системе (кроме временных файлов);
  • запрещен доступ к интернету.

Параметру «БезопасныйРежим» рекомендуется присваивать значение «Истина». Если необходима какая-либо функциональность, запрещаемая безопасным режимом, то можно получить дополнительное разрешения на эту функциональность (как в примере выше).

Кроме функции СведенияОВнешнейОбработке() необходимо реализовать еще одну экспортную функцию — Печать(). Эта функция должна иметь следующие параметры:

  • МассивОбъектов — массив ссылок на объекты, для которых требуется сформировать табличные документы;
  • КоллекцияПечатныхФорм — служебная таблица значений, через нее передаются имена макетов для которых могут быть сформированы табличные документы, а также возвращаются синонимы (представления) макетов, сформированные табличные документы и другая информация;
  • ОбъектыПечати — список значений, к котором устанавливается соответствие между объектами и именами областей печати табличного документа (нужно для возможности печати комплектов документов);
  • ПараметрыВывода — структура с предопределенными ключами, через которую можно вернуть некоторые параметры.

Пример реализации функции Печать():

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, «ПечатнаяФормаДляПКО»);

Если ПечатнаяФорма <> Неопределено Тогда

ПечатнаяФорма.ТабличныйДокумент = СформироватьТабличныйДокумент(МассивОбъектов, ОбъектыПечати);

ПечатнаяФорма.СинонимМакета = «Печатная форма для ПКО»;

КонецЕсли;

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

Функция СформироватьТабличныйДокумент(МассивОбъектов, ОбъектыПечати)

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

Макет = ЭтотОбъект.ПолучитьМакет(«Макет»);

ОбластьСтрока = Макет.ПолучитьОбласть(«Строка»);

ПервыйДокумент = Истина;

Для Каждого ОбъектСсылка Из МассивОбъектов Цикл

Если Не ПервыйДокумент Тогда

//выводим документы на разных страницах

ТабДок.ВывестиГоризонтальныйРазделительСтраниц();

КонецЕсли;

ПервыйДокумент = Ложь;

НомерСтрокиНачало = ТабДок.ВысотаТаблицы + 1;

ОбластьСтрока.Параметры.Документ = ОбъектСсылка;

ТабДок.Вывести(ОбластьСтрока);

//зададим область печати объекта в табличном документе

УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДок,

НомерСтрокиНачало, ОбъектыПечати, ОбъектСсылка);

КонецЦикла;

Возврат ТабДок;

КонецФункции

В коде выше мы находим нашу печатную форму по идентификатору и формируем для нее табличный документ.

Подключение

Подключение нашей внешней печатной формы на примере «Бухгалтерии предприятия, редакция 3.0».

Вкратце повторю основные этапы:

  1. Открываем вкладку «Администрирование» и переходим в раздел «Печатные формы, отчеты и обработки»;
  2. Устанавливаем галку «Дополнительные отчеты и обработки» и переходим в раздел «Дополнительные отчеты и обработки»;
  3. Жмем кнопку «Добавить из файла» и выбираем файл печатной формы;
  4. (Необязательно) Меняем наименование, комментарии, настраиваем видимость, изменяем размещение;
  5. Жмем кнопку «Записать и закрыть».

Внешняя печатная форма в обычном приложении

Теперь рассмотрим создание внешней печатной формы в обычном приложении — создадим печатную форму для  документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 2.0). Несмотря на то, что задача та же, решается она по другому.

Создание

Внешняя печатная форма в обычном приложении — это внешняя обработка, в которой имеется реквизит «СсылкаНаОбъект» произвольного типа, в который будет передана ссылка на объект, для которого требуется выполнить печать, и экспортной функции Печать() в модуле объекта, которая вызывается без параметров и возвращает табличный документ.

Кроме этого может присутствовать реквизит «ДополнительныеПараметры» произвольного типа, через который, в виде структуры, будут передаваться дополнительные параметры примитивного типа.

Внешняя печатная форма в обычном приложении

Внешняя печатная форма в обычном приложении

Также во внешней печатной форме может присутствовать макет с названием «Параметры_Авторегистрации» в первой колонке которого можно перечислить объекты метаданных, к которым принадлежит печатная форма. Используется этот макет для автоматического заполнения принадлежности печатной формы.

Параметры_Авторегистрации

Параметры_Авторегистрации

Такой же макет (но с указанием табличной части) используется во внешних обработках табличных частей, о которых имеется отдельная статья.

Пример реализации функции Печать():

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Функция Печать() Экспорт

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

Макет = ЭтотОбъект.ПолучитьМакет(«Макет»);

ОбластьСтрока = Макет.ПолучитьОбласть(«Строка»);

ОбластьСтрока.Параметры.Документ = СсылкаНаОбъект;

ТабДок.Вывести(ОбластьСтрока);

//обращение к дополнительным параметрам рекомендуется снабдить

//соответствующими проверками

Если ЗначениеЗаполнено(ДополнительныеПараметры) Тогда

Если ДополнительныеПараметры.Свойство(«ТестПараметр») Тогда

ОбластьСтрока.Параметры.Документ = ДополнительныеПараметры.ТестПараметр;

ТабДок.Вывести(ОбластьСтрока);

КонецЕсли;

КонецЕсли;

Возврат ТабДок;

КонецФункции

Подключение

Подключим нашу внешнюю печатную форму на примере «Бухгалтерии предприятия, редакция 2.0».

Основные этапы:

  1. Открываем справочник внешних печатных форм (Сервис->Дополнительные отчеты и обработки->Дополнительные внешние печатные формы);
  2. Добавляем новый элемент справочника и указываем файл печатной формы;
  3. Записываем элемент.
  4. (Необязательно) Меняем имеющиеся настройки — представления, отборы, дополнительные параметры и прочее.

На этом все, надеюсь, что эта статья была Вам полезна.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Загрузка…

При использовании типовых конфигураций, может возникнуть необходимость подправить вывод печатной формы. Для этой цели в типовых конфигурациях предусмотрена возможность подключения внешних печатных форм. Для изменения печатных форм не рекомендуется разрешать изменения в конфигурации. Если разрешить изменения, то «автоматическое обновление» станет не возможным.

Процесс создания внешней печатной формы в обычном приложение значительно легче и проще, нежели в управляемом приложении. Внешняя печатная форма в обычном приложении — это обработка с реквизитом «СсылкаНаОбъект», экспортной функцией Печать() и макетом «Параметры_Авторегистрации».

Реквизит обработки «СсылкаНаОбъект»

Обязательный реквизит обработки. «Тип» реквизита определяется объектами для которых создана внешняя печатная форма. При срабатывании печатной формы в значении реквизита «СсылкаНаОбъет» будет находиться ссылка на объект печати.

Экспортная функция «Печать()»

Функция «Печать()», является обязательной. Она должна быть экспортной и располагаться в модуле обработки. Функция должна возвращать табличный документ, который будет выведен на печать.

Функция Печать() Экспорт

ТабДокумент

= Новый ТабличныйДокумент();//Заполнение табличного документа
//...
//...
//...
Возврат ТабДокумент;КонецФункции

Макет «Параметры_Авторегистрации»

Его наличие в обработке не обязательное. Имя макетя обязательно задаётся как «Параметры_Авторегистрации». Данный макет содержит информацию о печатной форме. В первой колонке задаются документы или справочники для которых предназначена данная печатная форма. Каждая строка в первой колонке — это ещё один вид документа или справочника, для которого предназначена печатная форма. Формат определения следующий: «Документы.ИмяДокумента», «Справочники.ИмяСправочника».


Макет Параметры_Авторегистрации

Понравилась статья? Поделить с друзьями:
  • Как найти свое созвездие по дате рождения
  • Как найти в компьютере вай фай настройки
  • Как составить представление после проверки
  • Как найти административное дело у мировому судье
  • Как найти мой отзыв на вайлдберриз