Создание внешних печатных форм под управляемым приложением с нуля

25.03.19

Разработка - Инструментарий разработчика

Когда мне пришлось создавать внешние печатные формы под приложения на БСП ("1С: Бухгалтерия предприятия 3.0", "1С: Управление торговлей 11"), я обнаружил, что нет грамотных инструкций. Те, что имелись, использовали так называемые шаблоны: готовые обработки, в которых необходимо выполнять определенные корректировки. Но как создать сам шаблон, конкретных мануалов не было, справочную информацию я нашел на сайте ИТС и, обработав ее, написал статью, где подробно и понятно объясняются все этапы создания внешней печатной формы для управляемого приложения на примере конфигурации "1С: Бухгалтерия предприятия 3.0"

Скачать исходный код

Наименование Файл Версия Размер
Счет на оплату (для документа "Счет на оплату Покупателю") БП 3.0
.epf 16,03Kb
99
.epf 16,03Kb 99 Скачать
ТОРГ 12 (для документа "Реализация товаров и услуг") БП 3.0
.epf 19,79Kb
21
.epf 19,79Kb 21 Скачать
ПКО (для документа "Приходно кассовый ордер") БП 3.0
.epf 11,51Kb
13
.epf 11,51Kb 13 Скачать
Требование накладная + М11 (для документа "Требование накладная") БП 3.0
.epf 14,39Kb
15
.epf 14,39Kb 15 Скачать
Счет на оплату (для документов "Счета на оплату" и "Заказы клиенту") УТ 11.4
.epf 23,76Kb
61
.epf 23,76Kb 61 Скачать
ТОРГ 12 (для документа "Реализация товаров и услуг") УТ 11.4
.epf 26,71Kb
25
.epf 26,71Kb 25 Скачать
УПД (для документа "Реализация товаров и услуг" и "Счет-фактура выданный") УТ 11.4
.epf 39,21Kb
24
.epf 39,21Kb 24 Скачать

UPD Статья и обработки к ней обновлены на февраль 2019 года

UPD 25.03.2019 Добавлены примеры внешних печатных форм для УТ 11.4

В этой статье мы научимся создавать внешнюю печатную форму для "1С: Бухгалтерия предприятия 3.0". Причем создавать с нуля, не используя так называемые шаблоны. Вы сами научитесь создавать шаблоны внешних печатных форм.

Все это делается довольно просто))

И так, создадим новую обработку.

Мы будем создавать внешний счет на оплату покупателю, поэтому обработку так и назовем: «СчетНаОплатуВнешний».

 

 

 Сохраним ее на жесткий диск.

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

Зайдем в модуль обработки, и создадим экспортную функцию СведенияОВнешнейОбработке.

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

Внутри этой функции создадим структуру ПараметрыРегистрации, которая будет содержать определенный список полей. Каждое поле мы разберем в отдельности.

Функция СведенияОВнешнейОбработке() Экспорт 
	
	ПараметрыРегистрации = Новый Структура;
	
КонецФункции

Создадим первый элемент структуры, он будет иметь ключ с название «Вид».

ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид",);

Значением данной связки КлючИЗначение идет одна из строк:

  • «ДополнительнаяОбработка»
  • «ДополнительныйОтчет»
  • «ЗаполнениеОбъекта»
  • «Отчет»
  • «ПечатнаяФорма»
  • «СозданиеСвязанныхОбъектов»

В нашем случае должна быть строка "ПечатнаяФорма".

ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид","ПечатнаяФорма");

 Следующий элемент структуры должен иметь ключ с названием Назначение.

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

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

Они должны иметь тип строка, и быть в следующем формате:

Документ."НазваниеДокумента"

Справочник."НазваниеСправочника"

У нас этот массив будет возвращать отдельная функция ПолучитьНазначениеОбработки.

Создадим ее.

Функция ПолучитьНазначениеОбработки()
	Массив = Новый Массив;
	Массив.Добавить("Документ.СчетНаОплатуПокупателю");
	
	Возврат Массив;
КонецФункции	

Допишем созданный последним элемент структуры.

ПараметрыРегистрации.Вставить("Назначение",ПолучитьНазначениеОбработки());

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

ПараметрыРегистрации.Вставить("Вид","ПечатнаяФорма");
ПараметрыРегистрации.Вставить("Назначение",ПолучитьНазначениеОбработки());
ПараметрыРегистрации.Вставить("Наименование","Счет на оплату ВНЕШНИЙ");

Следующий элемент структуры будет иметь название «Версия»,  значением данного элемента будет версия обработки. Задается программистом на его усмотрение.

ПараметрыРегистрации.Вставить("Вид","ПечатнаяФорма");
ПараметрыРегистрации.Вставить("Назначение",ПолучитьНазначениеОбработки());
ПараметрыРегистрации.Вставить("Наименование","Счет на оплату ВНЕШНИЙ");
ПараметрыРегистрации.Вставить("Версия","1.0");

 Следующий элемент имеет название «Информация», который содержит краткую информацию по обработке.

ПараметрыРегистрации.Вставить("Вид","ПечатнаяФорма");
ПараметрыРегистрации.Вставить("Назначение",ПолучитьНазначениеОбработки());
ПараметрыРегистрации.Вставить("Наименование","Счет на оплату ВНЕШНИЙ");
ПараметрыРегистрации.Вставить("Версия","1.0");
ПараметрыРегистрации.Вставить("Информация","Счет на оплату (внешняя печатная форма)");

 Следующий элемент имеет название «БезопасныйРежим», его необходим устанавливать в значение истина или ложь, в зависимости от того необходимо устанавливать или отключать безопасный режим во время выполнения обработки. Мы установим значение  Истина.

ПараметрыРегистрации.Вставить("Вид","ПечатнаяФорма");
ПараметрыРегистрации.Вставить("Назначение",ПолучитьНазначениеОбработки());
ПараметрыРегистрации.Вставить("Наименование","Счет на оплату ВНЕШНИЙ");
ПараметрыРегистрации.Вставить("Версия","1.0");
ПараметрыРегистрации.Вставить("Информация","Счет на оплату (внешняя печатная форма)");
ПараметрыРегистрации.Вставить("БезопасныйРежим",Истина);

И в последнем параметре необходимо добавить команды, которые будут поставляться обработкой.  Для этого нам необходимо создать и заполнить таблицу команд. Разработаем функцию, которая создает и возвращает таблицу с определенным набором полей. Делать это будем в функции ПолучитьТаблицуКоманд.

Создадим функцию и таблицу значений внутри нее.

Функция ПолучитьТаблицуКоманд() 
	
	Команды = Новый ТаблицаЗначений;
	
КонецФункции	

Теперь создадим пять колонок этой таблицы.

И первая колонка – Представление (тип строка).

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

Эта колонка – представление команды в пользовательском интерфейсе, т.е. то, что пользователь увидит при нажатии меню"Печать" в документе или справочнике.

Вторая колонка – Идентификатор.

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

Это может быть любая текстовая строка, уникальная в пределах данной обработки.

Третья колонка – Использование.

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

Параметр данной колонки типа строка, должен принимать одно из четырех  значений –

  • ОткрытиеФормы – Открывает форму обработки.
  • ВызовКлиентскогоМетода – будет вызвана клиентская процедура из модуля формы обработки.
  • ВызовСерверногоМетода  - будет вызвана серверная процедура из модуля обработки.
  • СценарийВБезопасномРежиме – тоже будет вызвана серверная процедура из модуля обработки в безопасном режиме.

 

Конкретно мы будем использовать вызов серверного метода.

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

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

И последняя колонка – модификатор. Это дополнительный модификатор команды. В нашем случае будет иметь название ПечатьXML.

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

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

Теперь создадим процедуру, которая будет заполнять данную таблицу значений.


Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры

 

В данном коде все понятно.

 В функции СведенияОВнешнейОбработке создадим команду и заполним ее.

Создаем таблицу значений: 

//....
ПараметрыРегистрации.Вставить("БезопасныйРежим",Истина);
	
Команды = ПолучитьТаблицуКоманд();

Теперь заполним ее.

Команды = ПолучитьТаблицуКоманд();

ДобавитьКоманду(Команды,"Счет на оплату (внешняя печатная форма)",
						"СчетНаОплатуВнешний",
						"ВызовСерверногоМетода",
						Ложь,
					    "ПечатьMXL");

Еще раз пройдемся по параметрам.

  • Первый параметр, непосредственно таблица команд вновь созданная.
  • Второй параметр, как будет отображаться команда пользователю на форме (документа, справочника).
  • Третий – уникальный идентификатор команды, запомните его, он нам еще пригодится!
  • Четвертый параметр – использование, что вызовет Ваша команда.
  • Пятый  параметр – показывать оповещение, мы не будем это делать.
  • Шестой параметр – модификатор, в нашем случае он всегда один ПечатьXML.

Теперь передадим вновь созданную таблицу команд в структуру ПараметрыРегистрации.

И пусть наша функция СведенияОВнешнейОбработке возвращает данную структуру.

ПараметрыРегистрации.Вставить("Команды",Команды);
Возврат ПараметрыРегистрации;

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

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

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

И вот начинается самое интересное, теперь вам необходимо войти в аналогичную процедуру в менеджере объекта счет на оплату покупателю, или в обработке, которая, по сути, является менеджером печати. 

Как узнать, где находится нужная нам функция? 

Откроем модуль менеджера документа Счет на оплату покупателю.

 

И найдем процедуру ДобавитьКомандыПечати, которая заполняет список команд .

В этой процедуре найдем код, где добавляется команда для нужной нам печатной формы (список команд добавляется в таблицу значений КомандыПечати). И обратим внимание на свойство МенеджерПечати. Если этому свойству присваивается какое-нибудь значение - это путь к объекту метаданных, как правило к обработке, то значит при выводе нужной печатной формы будет отработан код в процедуре Печать, которая находится в модуле менеджере этого объекта (в обработке). А если это свойство в принципе не фигурирует при заполнении команды печати, то значит будет отработан код в процедуре Печать, которая находится в модуле менеджера нашего основного объекта (в нашем случае это документ СчетНаОплатуПокупателю)

Посмотрим на процедуру ДобавитьКомандыПечати в модуле менеджера документа "Счет на оплату покупателя".

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

А если бы мы решили сделать внешнюю печатную форму договора счета на оплату (второе добавление в таблицу значений КомандыПечати), то нам нужно было бы найти процедуру Печать в модуле менеджера документа СчетНаОплатуПокупателя.

Откроем модуль менеджера обработки ПечатьСчетаНаОплату.

И раскроем процедуру Печать.

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

Внимание! Копировать напрямую процедуру Печать из модуля менеджера (без разницы обработка это, документ или справочник) не следует. Поскольку у них отличается количество параметров, в последствие это приводит к ошибкам при работе.

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

Так же из модуля менеджера обработки скопируем процедуру СформироватьПечатнуюФорму.


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

	

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

ТаблицаСведенийСчетНаОплату = МенеджерОбъекта.ПолучитьТаблицуСведенийСчетаНаОплату(ОбъектыТипа.Значение, ДокументыБезСчетовНаОплату);

Эта таблица получается при помощи функции модуля менеджера объекта (в нашем случае это документ СчетНаОплатуПокупателю). Найдем эту функцию в модуле менеджера документа СчетНаОплатуПокупателю.

И скопируем её в модель нашей внешней обработки.

А сам код процедуры СформироватьПечатнуюФорму в модуле внешней обработки исправим, убрав все не нужное от туда.

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

Если мы сейчас сделаем проверку модуля внешней обработки, то выйдет две ошибки. Первая, что не определена переменная ПараметрыПечати в процедуре Печать, и, что не найдена функция ПолучитьТекстЗапросаДляФормированияТаблицыСведенийСчетаНаОплату в функции ПолучитьТаблицуСведенийСчетаНаОплату. 

Создадим переменную ПараметрыПечати в процедуре Печать. Это будет простая структура.

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

А потом найдем функцию ПолучитьТекстЗапросаДляФормированияТаблицыСведенийСчетаНаОплату в модуле менеджера документа  СчетНаОплатуПокупателю и скопируем её в модуль внешней обработки.

Должен получится следующий состав процедур и функций модуля внешней обработки (для удобства я разделил их на две области). 

Еще раз делаем проверку модуля. Ошибок не обнаружено.

Продолжаем, теперь нам необходимо, что бы брался наш макет, и печатался по нашей команде.

Нас интересует процедура СформироватьПечатнуюФорму, а в ней мы уделим внимание методу ПечатьСчетаНаОплату общего модуля ПечатьТорговыхДокументов.

Очевидно, она непосредственно формирует табличный документ. Перейдем в этот общий модуль, и скопируем функцию ПечатьСчетаНаОплату в модуль нашей внешней обработки.

Делаем проверку модуля внешней обработки. Ругается на несуществующие методы ВывестиЗаголовокПредупреждение и НомерСчетаНаОплату.

 

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

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

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

Проверяем еще раз ошибки. Все нормально.

Не забудем в процедуре СформироватьПечатнуюФорму убрать вызов метода ПечатьСчетаНаОплату из общего модуля.

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

Теперь зайдем в скопированную функцию ПечатьСчетаНаОплату, и посмотрим, где в ней подтягивается макет.

Находим данный макет в общих макетах и копируем его в макеты нашей обработки.

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

Макет = ПолучитьМакет("ПФ_MXL_СчетЗаказ");

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

Вернемся обратно в процедуру Печать нашей внешней обработки.

И теперь осталась одна небольшая хитрость, без которой ваш внешний отчет не будет работать. Необходимо текст "СчетЗаказ" (это идентификатор типовой печатной формы).

 Заменить на название идентификатора команды ("СчетНаОплатуВнешний").

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

Все, сохраняем данную обработку. И запускаем "1С: Предприятие" из конфигуратора.

Идем в администрирование. В дополнительные отчеты и обработки.

Нажимаем на кнопку "Добавить из файла" и выбираем нашу созданную обработку.

Записываем. И смотрим, как выходит наша печатная форма.

Оригинал статьи

Ниже приведены примеры внешних печатных форм для конфигураций:

"1С: Бухгалтерия предприятия" (релиз 3.0.67.67).

  • Счета на оплату,
  • ТОРГ 12, 
  • ПКО ,
  • М11  и Требование накладная в одной обработке (документ Требование накладная).

"1С: Управление торговлей 11.4" (релиз 11.4.6.230).

  • Счет на оплату (для документов Счета на оплату и Заказы клиенту, выполняется в небезопасном режиме из-за использования штрих-кода)
  • ТОРГ12 (для документа Реализация товаров и услуг, выполняется в небезопасном режиме из-за использования штрих-кода, три команды: печать простая, печать с гтд, печать без услуг)
  • УПД  (для документа Реализация товаров и услуг и Счет-фактура выданная, выполняется в небезопасном режиме из-за использования штрих-кода)

8.3 внешняя печатная форма Бухгалтерия предприятия 3.0 БП программирование в

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    125390    683    389    

734

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    7885    24    6    

42

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    4351    12    2    

36

SALE! %

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2280 руб.

14.01.2013    178764    1084    0    

862

Бустер Конвертации данных 3 (Infostart Toolkit)

Инструментарий разработчика 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    15031    3    12    

37

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99715    239    97    

298

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28376    4    10    

16

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18459    6    8    

40
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
99. signum2009 1029 07.02.19 11:51 Сейчас в теме
114. fish249 04.04.19 08:26 Сейчас в теме
(98) Правильно. И заодно версию БСП указать.
100. Darklight 32 07.02.19 14:18 Сейчас в теме
Здорово! Вот бы ещё такую статью. про создание внешних отчетов
101. signum2009 1029 07.02.19 14:34 Сейчас в теме
102. пользователь 07.02.19 18:29
Сообщение было скрыто модератором.
...
103. Поручик 4674 08.02.19 08:25 Сейчас в теме
Когда мне потребовалось создавать внешние печатные формы под приложения на БСП, то не было вообще никаких инструкций, даже неграмотных. Разобрался за день без инструкций
136. baracuda 2 28.03.22 12:09 Сейчас в теме
104. Vida 15 13.02.19 20:46 Сейчас в теме
Спасибо!
Все получилось, кроме того что
(вам наверное это уже 100 раз писали)
у вас функция

Функция ПолучитьТаблицуКоманд()
ничего не возвращает

пришлось думать)))
107. signum2009 1029 14.02.19 07:13 Сейчас в теме
109. Vida 15 14.02.19 13:41 Сейчас в теме
Подскажите вот это место в отчете откуда берется? Дело в том, что у нас там еще кнопка как-то не работает.
Прикрепленные файлы:
110. Vida 15 14.02.19 13:51 Сейчас в теме
(109) Кажется это форма ПечатьДокументов в Общих формах
111. prozet-z 17.02.19 09:10 Сейчас в теме
Может, я что-то упустил из виду, но в самом начале статьи указано, что СведенияОВнешнейОбработке() - процедура. А потом выясняется, что это функция, так как возвращает некий результат.
112. signum2009 1029 18.02.19 08:18 Сейчас в теме
113. user1162240 23.02.19 17:52 Сейчас в теме
Спасибо огромное автору статьи. Все очень доходчиво написано. На последнем релизе общепита все работает.
115. ruslan-80 16.05.19 12:40 Сейчас в теме
Добрый день!
Спасибо за статью, все работает.
Вопрос: можно ли также скопировать счет в расширение?
116. signum2009 1029 20.05.19 09:21 Сейчас в теме
(115) Если у Вас имеется возможность использовать расширения, то нет смысла создавать внешние печатные формы. Вы можете в расширении создать новую печатную форму. Будет проще

Кое-что про это рассказано здесь: https://infostart.ru/public/628422/
117. aldan 22 22.07.19 10:35 Сейчас в теме
Спасибо за статью. В начале есть небольшая опечатка: "Шестой параметр – модификатор, в нашем случае он всегда один ПечатьXML", а в листинге стоит ПечатьMXL
kosenkovsv; +1 Ответить
118. kosenkovsv 06.08.19 13:58 Сейчас в теме
Статья просто отличная!
Огромное спасибо за неё.
Мне, как начинающему программисту 1С, многое стало понятно. По крайней мере, сам алгоритм - откуда что берется.
119. Aleksandr_prof 192 07.08.19 10:14 Сейчас в теме
Может кому-то пригодится ссылка в дополнение.
Универсальная печатная форма
120. lev6975 08.09.19 11:19 Сейчас в теме
Приветствую. Я создал обработку, которая должна печатать данные в ворд, и, макет Active Document типа Word. Печатает в Word, но, при печати в базе открывается форма: Печать документа Печатная форма недоступна. Как сделать чтобы не открывалась?
Прикрепленные файлы:
121. lev6975 08.09.19 11:19 Сейчас в теме
(120) То есть эта штука просто мешается
122. Aleksandr_prof 192 08.09.19 12:19 Сейчас в теме
Как вам реализация идеи универсальной внешней печатной формы на управляемых формах? Почти готова для подстановки своего макета. https://infostart.ru/public/1038757/
Жду конструктивную критику.
123. user1319182 04.12.19 15:06 Сейчас в теме
Собственно от незнания вопрос. Макет (значения параметров) в данном случае "заполняется" какой-то внутренней процедурой?
124. ntc75 18.01.20 12:11 Сейчас в теме
Отличная статья!
Подробно и доступно. Спасибо Автору!
125. Дуб 79 22.01.20 17:53 Сейчас в теме
Благодарность автору.
Хотя в целом технология - вырвиглазная. По сравнению что с v7 методикой, что со "старой" методикой v8, что, чёрт побери, с аксесом :)
126. kako1toxren 03.03.20 16:22 Сейчас в теме
Спасибо за статью. Всё сделал как указано в статье, но при формировании в предприятии выходит ошибка - "Макет "ПФ_MXL_СчетЗаказ" не существует. Операция прервана". Подскажите, что упускаю? Конфигурация БП 3.0.75.100
127. kako1toxren 04.03.20 00:15 Сейчас в теме
(126) Решил свой вопрос. После переноса функции ПечатьСчетаНаОплату в модуль объекта, поменял команды инициализации переменной Макет.
Было:
Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ПФ_MXL_СчетЗаказ");

Стало:
Макет = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_СчетЗаказ");
128. vovan77_06 12.03.20 16:38 Сейчас в теме
Спасибо автору , очень полезная статья
129. user1277848 04.04.20 15:53 Сейчас в теме
Добрый день!

Сделал как в описании, но формируется печатная форма без моих изменений в макете, подскажите что я сделал не так ?
БП 3.0.72.60
130. signum2009 1029 05.04.20 13:11 Сейчас в теме
(129) Проверьте от куда макет берется, скорее всего общий подтягиваете
131. anna80 24.11.20 11:29 Сейчас в теме
132. OldGarry 06.12.20 20:29 Сейчас в теме
Спасибо огромное! Очень доходчиво написано!
Я начинающий и по статье смог создать свою форму для документа "ЗаказКлиента" в УТ 11.

Пробовал по 1С документации разобраться, но что-то лыжи не едут.

Кто знает почему в документации по БСП написано про процедуру ПЕЧАТЬ() с 5-ю параметрами:

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

а везде используется с 4-мя?
133. user1744849 15.02.22 17:23 Сейчас в теме
Счет на оплату (для документов "Счета на оплату" и "Заказы клиенту") УТ 11.4

скачал и основания нет((( это стандартная печатная форма???
134. Gadzhalik 01.03.22 11:00 Сейчас в теме
135. baracuda 2 28.03.22 11:36 Сейчас в теме
Мануал годный, очень помог.
137. user1346098 14.12.22 14:44 Сейчас в теме
Добрый день, очень помогла статья. Все работает - создавала печатную форму Торг - 12, на УТ 11.5.
Решила дальше поучится и печать сделать торг -12 из расходного ордера. Не могу ни где найти информацию, как теперь прописать менеджер обьекта, чтобы он взял по ссылке из заказа. а потом реализацию
138. NikolayKam 09.01.23 16:09 Сейчас в теме
Если я правильно понимаю, то ковычки должны быть сначала строки:
Документ."НазваниеДокумента"
139. houpl 18.04.23 14:15 Сейчас в теме
Отличная статья. Как раз натолкнула на мысль почему не формируется в итоге ПФ. Оказалось дело все было в идентификаторе, об этом автор как раз и упоминал.
Оставьте свое сообщение