Внешняя печатная форма БП 3.0

1. pvl_mksv 20 12.03.13 01:09 Сейчас в теме
Здравствуй, Инфостарт!
Осваиваю внешние печатные формы и внешние отчеты под управляемое приложение. Делаю внешнюю печатную форму с собственным макетом для документа "СчетНаОплатуПокупателю". И в отладочной обработке и "в-живую" вылетает на участке
ВнешняяОбработка.Печать(ИдентификаторКомандыОбработки, ОбъектыНазначенияМассив);
с ошибкой
Недостаточно фактических параметров ВнешняяОбработка.Печать(ИдентификаторКомандыОбработки, ОбъектыНазначенияМассив);
Тестируется на Демо БП 3.0.11.6
http://www.1c-pro.ru/topic26882.html читал.
Совершенно не могу уловить связи между параметрами команды и содержимым модуля, подскажите ЧЯДНП.
Спасибо заранее, модуль и обраба прилагаются.
//Функция ПолучитьТАблицуКоманд():
//Создаем ТЗ Команды
//Добваляем Колонки:
//	Представление(Строка) - описание печатной формы для пользователя
//	Идентификатор(Строка) - имя макета, ид клманды в обработке печати(я не знаю что он имеет в виду)
//	ИСпользование(Строка) - способ вызова команды обработки
//		-ОткрытиеФормы - в колонке Идентификатор указываетс имя нужной формы(в каком формате, догадайся, мол, сама... :(   )		
//		-ВызовКлиентскогоМетода - вызов киентской экспортной процедуры МОДУЛЯ ФОРМЫ
//		-ВызовСерверногоМетода - вызов серверной экспортной процедуры МОДУЛЯ ОБЪЕКТА
//	ПоказыватьОповещение(Булево) - показывать ли оповещение при начале и окончании отработки
//	Модификатор(Строка) - для печатной формыдолжен содержать строку ПечатьXML (ну, не можем мы по-простому)
Функция ПолучитьТАблицуКоманд()
	//Создаем таблицу и колонки
	Команды = Новый ТаблицаЗначений;
	Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
	Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
	Команды.Колонки.Добавить("ИСпользование", Новый ОписаниеТипов("Строка"));
	Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
	Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
	Возврат Команды;
КонецФункции	

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

Функция СведенияОВнешнейОбработке() Экспорт
	
	//======================== от сих предопределенное содержимое===================
	//выходные данные?
	ПараметрыРегистрации= Новый Структура;
	
	//еще одна нужная весчь
	МассивНАзначений = Новый Массив;
	
	// Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать. 
    // Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
	//Для доп отсета соотвественно - ПараметрыРегистрации.Вставить("Вид", "ДополнительныйОТчет");
	
	  // Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
    // Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе, 
    // которые поддерживают механизм ВПФ
	МассивНАзначений.Добавить("Документы.СчетНаОплатуПокупателю");//Значение вида Документ.* дает феерический результат ))))
	ПараметрыРегистрации.Вставить("Начзначение", МассивНазначений);
	
	 // Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
	 ПараметрыРегистрации.Вставить("Наименование", "Печать счета ИП");//Именно наименование, так как имя реквизита справочника ДопБлаБлаБла
	 
	  // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
	  // Нахрена- не знаю, но надо
	 ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
	 
	 //Добавим инормацию об обработке
	 ПараметрыРегистрации.Вставить("Версия", "Первая и единственная");
	 ПараметрыРегистрации.Вставить("Информация", "Печать счета ИП");
	 
	 //Создадм таблицу команд см. ниже
	 ТаблицаКоманд= ПолучитьТаблицуКоманд();
	 
	 //добавим команду
	 ДобавитьКоманду(ТаблицаКоманд, "Печать", "Печать", "ВызовСерверногоМетода", Истина, "ПечатьXML");
	 
	 //передадим в структуру
	 ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
	 
	 Возврат ПараметрыРегистрации;
	//======================== до сих предопределенное содержимое===================	
КонецФункции
// Формирует и возвращает текст запроса для выборки данных,
// необходимых для формирования печатной формы
Функция ПолучитьТекстЗапросаДляФормированияПечатнойФормыСчетаНаОплат­уПокупателю()
	
	ЧастьЗапросаДляВыбораСодержанияУслуг = ОбщегоНазначенияБПВызовСервера.ПолучитьЧастьЗапросаДляВыбораСодержанияУслуг("ЗаказПокупателя");
	
	ТекстЗапроса =
	"ВЫБРАТЬ
	|	Реквизиты.Ссылка,
	|	Реквизиты.Номер,
	|	Реквизиты.Дата,
	|	Реквизиты.ДоговорКонтрагента,
	|	Реквизиты.Организация,
	|	Реквизиты.ПодразделениеОрганизации,
	|	Реквизиты.СтруктурнаяЕдиница,
	|	Реквизиты.СтруктурнаяЕдиница.ТекстКорреспондента КАК ТекстКорреспондента,
	|	Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов КАК БанкДляРасчетов,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов.Наименование + "" "" + Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов.Город
	|		ИНАЧЕ Реквизиты.СтруктурнаяЕдиница.Банк.Наименование + "" "" + Реквизиты.СтруктурнаяЕдиница.Банк.Город
	|	КОНЕЦ КАК НаименованиеБанкаПолучателя,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов
	|		ИНАЧЕ Реквизиты.СтруктурнаяЕдиница.Банк
	|	КОНЕЦ КАК БанкПолучателя,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов.Код
	|		ИНАЧЕ Реквизиты.СтруктурнаяЕдиница.Банк.Код
	|	КОНЕЦ КАК БикБанкаПолучателя,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов.КоррСчет
	|		ИНАЧЕ Реквизиты.СтруктурнаяЕдиница.Банк.КоррСчет
	|	КОНЕЦ КАК СчетБанкаПолучателя,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов.Город
	|		ИНАЧЕ Реквизиты.СтруктурнаяЕдиница.Банк.Город
	|	КОНЕЦ КАК ГородБанкаПолучателя,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА Реквизиты.СтруктурнаяЕдиница.Банк.КоррСчет
	|		ИНАЧЕ Реквизиты.СтруктурнаяЕдиница.НомерСчета
	|	КОНЕЦ КАК НомерСчетаПолучателя,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА "" р/с "" + Реквизиты.СтруктурнаяЕдиница.НомерСчета + "" в "" + Реквизиты.СтруктурнаяЕдиница.Банк.Наименование + "" "" + Реквизиты.СтруктурнаяЕдиница.Банк.Город
	|	КОНЕЦ КАК БанкТекстКорресподента,
	|	Реквизиты.Контрагент КАК Покупатель,
	|	Реквизиты.Организация КАК Руководители,
	|	Реквизиты.Организация КАК Поставщик,
	|	Реквизиты.ОрганизацияПолучатель КАК Получатель,
	|	Реквизиты.СуммаДокумента,
	|	Реквизиты.ВалютаДокумента,
	|	Реквизиты.СуммаВключаетНДС,
	|	ЗаказПокупателя.Номенклатура КАК Номенклатура,
	|	ЗаказПокупателя.Номенклатура.НаименованиеПолное КАК Товар,
	|	ВЫБОР
	|		КОГДА &ДополнительнаяКолонкаПечатныхФормДокументов = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул)
	|			ТОГДА ЗаказПокупателя.Номенклатура.Артикул
	|		КОГДА &ДополнительнаяКолонкаПечатныхФормДокументов = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяКолонкаПечатныхФормДокументов.Код)
	|			ТОГДА ЗаказПокупателя.Номенклатура.Код
	|		КОГДА &ДополнительнаяКолонкаПечатныхФормДокументов = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяКолонкаПечатныхФормДокументов.НеВыводить)
	|			ТОГДА """"
	|	КОНЕЦ КАК Артикул,
	|	ЗаказПокупателя.Количество КАК Количество,
	|	ЗаказПокупателя.Номенклатура.ЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения,
	|	ЗаказПокупателя.Цена КАК Цена,
	|	ЗаказПокупателя.Сумма КАК Сумма,
	|	ЗаказПокупателя.СуммаНДС КАК СуммаНДС,
	|	ЗаказПокупателя.НомерСтроки КАК НомерСтроки,
	|	1 КАК ID
	|ИЗ
	|	Документ.СчетНаОплатуПокупателю.Товары КАК ЗаказПокупателя
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю КАК Реквизиты
	|		ПО (ЗаказПокупателя.Ссылка = Реквизиты.Ссылка)
	|ГДЕ
	|	ЗаказПокупателя.Ссылка В(&МассивОбъектов)
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	Реквизиты.Ссылка,
	|	Реквизиты.Номер,
	|	Реквизиты.Дата,
	|	Реквизиты.ДоговорКонтрагента,
	|	Реквизиты.Организация,
	|	Реквизиты.ПодразделениеОрганизации,
	|	Реквизиты.СтруктурнаяЕдиница,
	|	Реквизиты.СтруктурнаяЕдиница.ТекстКорреспондента КАК ТекстКорреспондента,
	|	Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов КАК БанкДляРасчетов,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов.Наименование + "" "" + Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов.Город
	|		ИНАЧЕ Реквизиты.СтруктурнаяЕдиница.Банк.Наименование + "" "" + Реквизиты.СтруктурнаяЕдиница.Банк.Город
	|	КОНЕЦ КАК НаименованиеБанкаПолучателя,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов
	|		ИНАЧЕ Реквизиты.СтруктурнаяЕдиница.Банк
	|	КОНЕЦ КАК БанкПолучателя,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов.Код
	|		ИНАЧЕ Реквизиты.СтруктурнаяЕдиница.Банк.Код
	|	КОНЕЦ КАК БикБанкаПолучателя,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов.КоррСчет
	|		ИНАЧЕ Реквизиты.СтруктурнаяЕдиница.Банк.КоррСчет
	|	КОНЕЦ КАК СчетБанкаПолучателя,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов.Город
	|		ИНАЧЕ Реквизиты.СтруктурнаяЕдиница.Банк.Город
	|	КОНЕЦ КАК ГородБанкаПолучателя,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА Реквизиты.СтруктурнаяЕдиница.Банк.КоррСчет
	|		ИНАЧЕ Реквизиты.СтруктурнаяЕдиница.НомерСчета
	|	КОНЕЦ КАК НомерСчетаПолучателя,
	|	ВЫБОР
	|		КОГДА Реквизиты.СтруктурнаяЕдиница.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.Банки.ПустаяСсылка)
	|			ТОГДА "" р/с "" + Реквизиты.СтруктурнаяЕдиница.НомерСчета + "" в "" + Реквизиты.СтруктурнаяЕдиница.Банк.Наименование + "" "" + Реквизиты.СтруктурнаяЕдиница.Банк.Город
	|	КОНЕЦ КАК БанкТекстКорресподента,
	|	Реквизиты.Контрагент,
	|	Реквизиты.Организация,
	|	Реквизиты.Организация,
	|	Реквизиты.ОрганизацияПолучатель,
	|	Реквизиты.СуммаДокумента,
	|	Реквизиты.ВалютаДокумента,
	|	Реквизиты.СуммаВключаетНДС,
	|	"+ ЧастьЗапросаДляВыбораСодержанияУслуг +",
	|	"+ ЧастьЗапросаДляВыбораСодержанияУслуг +",
	|	ВЫБОР
	|		КОГДА &ДополнительнаяКолонкаПечатныхФормДокументов = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул)
	|			ТОГДА ЗаказПокупателя.Номенклатура.Артикул
	|		КОГДА &ДополнительнаяКолонкаПечатныхФормДокументов = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяКолонкаПечатныхФормДокументов.Код)
	|			ТОГДА ЗаказПокупателя.Номенклатура.Код
	|		КОГДА &ДополнительнаяКолонкаПечатныхФормДокументов = ЗНАЧЕНИЕ(Перечисление.ДополнительнаяКолонкаПечатныхФормДокументов.НеВыводить)
	|			ТОГДА """"
	|	КОНЕЦ,
	|	ЗаказПокупателя.Количество,
	|	ЗаказПокупателя.Номенклатура.ЕдиницаИзмерения.Наименование,
	|	ЗаказПокупателя.Цена,
	|	ЗаказПокупателя.Сумма,
	|	ЗаказПокупателя.СуммаНДС,
	|	ЗаказПокупателя.НомерСтроки,
	|	2
	|ИЗ
	|	Документ.СчетНаОплатуПокупателю.Услуги КАК ЗаказПокупателя
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю КАК Реквизиты
	|		ПО (ЗаказПокупателя.Ссылка = Реквизиты.Ссылка)
	|ГДЕ
	|	ЗаказПокупателя.Ссылка В(&МассивОбъектов)
	|
	|УПОРЯДОЧИТЬ ПО
	|	ID,
	|	НомерСтроки";

	Возврат ТекстЗапроса;

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

// Сформировать печатные формы объектов
// Функция формирует печатную форму документа.
//
// Параметры:
// МассивОбъектов - Массив - массив документов для печати - обязательный содержит массив ссылок на объекты аналог СсылкаНаОбъект в обычном

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

		Если НЕ ПервыйДокумент Тогда
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
		ПервыйДокумент = Ложь;
		
		// Запомним номер строки, с которой начали выводить текущий документ.
		НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
		
		// Выводим шапку счета

		СведенияОПолучателе = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата);
		ОбластьМакета       = Макет.ПолучитьОбласть("ЗаголовокСчета");
		ОбластьМакета.Параметры.Заполнить(Шапка);
		ОбластьМакета.Параметры.ИННПолучателя = СведенияОПолучателе.ИНН;
		ОбластьМакета.Параметры.КПППолучателя = СведенияОПолучателе.КПП;
		Если ТипЗнч(Шапка.СтруктурнаяЕдиница) = Тип("СправочникСсылка.БанковскиеСчета") Тогда
			ОбластьМакета.Параметры.БИКБанкаПолучателя               = Шапка.БикБанкаПолучателя;
			ОбластьМакета.Параметры.БанкПолучателя                   = Шапка.БанкПолучателя;
			ОбластьМакета.Параметры.БанкПолучателяПредставление      = СокрЛП(Шапка.НаименованиеБанкаПолучателя);
			ОбластьМакета.Параметры.СчетБанкаПолучателя              = Шапка.СчетБанкаПолучателя;
			ОбластьМакета.Параметры.СчетБанкаПолучателяПредставление = Шапка.СчетБанкаПолучателя;
			ОбластьМакета.Параметры.СчетПолучателяПредставление      = Шапка.НомерСчетаПолучателя;
			ОбластьМакета.Параметры.СчетПолучателя                   = Шапка.НомерСчетаПолучателя;
		КонецЕсли;
		
		Если ПустаяСтрока(Шапка.ТекстКорреспондента) Тогда
			ТекстКорреспондента = СведенияОПолучателе.НаименованиеДляПечатныхФорм;
			Если ЗначениеЗаполнено(Шапка.БанкДляРасчетов) Тогда
				ТекстКорреспондента = ТекстКорреспондента + Шапка.БанкТекстКорресподента;
			КонецЕсли;
		Иначе
			ТекстКорреспондента = Шапка.ТекстКорреспондента;
		КонецЕсли;
		ОбластьМакета.Параметры.ПредставлениеПолучателя = ТекстКорреспондента;
		
		ТабличныйДокумент.Вывести(ОбластьМакета);

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

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

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

		ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
		ОбластьКодов  = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
		ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
		ОбластьСуммы  = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");

		ТабличныйДокумент.Вывести(ОбластьНомера);
		Если ВыводитьКоды Тогда
			Если ДополнительнаяКолонкаПечатныхФормДокументов = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
				ОбластьКодов.Параметры.ИмяКолонкиКодов = "Артикул";
			ИначеЕсли ДополнительнаяКолонкаПечатныхФормДокументов = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
				ОбластьКодов.Параметры.ИмяКолонкиКодов = "Код";
			КонецЕсли;
			ТабличныйДокумент.Присоединить(ОбластьКодов);
		КонецЕсли;
		ТабличныйДокумент.Присоединить(ОбластьДанных);
		ТабличныйДокумент.Присоединить(ОбластьСуммы);

		ОбластьКолонкаТовар = Макет.Область("Товар");
		Если Не ВыводитьКоды Тогда
			ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки + Макет.Область("КолонкаКодов").ШиринаКолонки;
		КонецЕсли;

		ОбластьНомера = Макет.ПолучитьОбласть("Строка|НомерСтроки");
		ОбластьКодов  = Макет.ПолучитьОбласть("Строка|КолонкаКодов");
		ОбластьДанных = Макет.ПолучитьОбласть("Строка|Данные");
		ОбластьСуммы  = Макет.ПолучитьОбласть("Строка|Сумма");

		Сумма    = 0;
		СуммаНДС = 0;
		ВсегоСкидок    = 0;
		ВсегоБезСкидок = 0;
		НомерСтроки    = 0;
		
		Пока Шапка.Следующий() Цикл
			
			НомерСтроки = НомерСтроки + 1;
			ОбластьНомера.Параметры.НомерСтроки = НомерСтроки;
			ТабличныйДокумент.Вывести(ОбластьНомера);

			Если ВыводитьКоды Тогда
				ОбластьКодов.Параметры.Заполнить(Шапка);
				ТабличныйДокумент.Присоединить(ОбластьКодов);
			КонецЕсли;
			
			ОбластьДанных.Параметры.Товар            = СокрЛП(Шапка.Товар);
			ОбластьДанных.Параметры.Количество       = Шапка.Количество;
			ОбластьДанных.Параметры.ЕдиницаИзмерения = Шапка.ЕдиницаИзмерения;
			ОбластьДанных.Параметры.Цена             = Шапка.Цена;
			
			ТабличныйДокумент.Присоединить(ОбластьДанных);
			
			ОбластьСуммы.Параметры.Сумма = Шапка.Сумма;
			
			ТабличныйДокумент.Присоединить(ОбластьСуммы);
			Сумма    = Сумма    + Шапка.Сумма;
			СуммаНДС = СуммаНДС + Шапка.СуммаНДС;
			
		КонецЦикла;
		
		// Вывести Итого
		ОбластьНомера = Макет.ПолучитьОбласть("Итого|НомерСтроки");
		ОбластьКодов  = Макет.ПолучитьОбласть("Итого|КолонкаКодов");
		ОбластьДанных = Макет.ПолучитьОбласть("Итого|Данные");
		ОбластьСуммы  = Макет.ПолучитьОбласть("Итого|Сумма");

		ТабличныйДокумент.Вывести(ОбластьНомера);
		Если ВыводитьКоды Тогда
			ТабличныйДокумент.Присоединить(ОбластьКодов);
		КонецЕсли;
		ТабличныйДокумент.Присоединить(ОбластьДанных);
		ОбластьСуммы.Параметры.Всего = ОбщегоНазначенияБПВызовСервера.ФорматСумм(Сумма);
		ТабличныйДокумент.Присоединить(ОбластьСуммы);

		// Вывести ИтогоНДС
		ОбластьНомера = Макет.ПолучитьОбласть("ИтогоНДС|НомерСтроки");
		ОбластьКодов  = Макет.ПолучитьОбласть("ИтогоНДС|КолонкаКодов");
		ОбластьДанных = Макет.ПолучитьОбласть("ИтогоНДС|Данные");
		ОбластьСуммы  = Макет.ПолучитьОбласть("ИтогоНДС|Сумма");
		
		ТабличныйДокумент.Вывести(ОбластьНомера);
		Если ВыводитьКоды Тогда
			ТабличныйДокумент.Присоединить(ОбластьКодов);
		КонецЕсли;
		Если СуммаНДС <> 0 Тогда
			ОбластьДанных.Параметры.НДС     = ?(Шапка.СуммаВключаетНДС, "В том числе НДС:", "Сумма НДС:");
			ОбластьСуммы.Параметры.ВсегоНДС = ОбщегоНазначенияБПВызовСервера.ФорматСумм(СуммаНДС);
		Иначе
			ОбластьДанных.Параметры.НДС     = "Без налога (НДС)";
			ОбластьСуммы.Параметры.ВсегоНДС = "-";
		КонецЕсли;
		ТабличныйДокумент.Присоединить(ОбластьДанных);
		
		ТабличныйДокумент.Присоединить(ОбластьСуммы);
		
		// Вывести ИтогоКОплате
		ОбластьНомера = Макет.ПолучитьОбласть("ИтогоКОплате|НомерСтроки");
		ОбластьКодов  = Макет.ПолучитьОбласть("ИтогоКОплате|КолонкаКодов");
		ОбластьДанных = Макет.ПолучитьОбласть("ИтогоКОплате|Данные");
		ОбластьСуммы  = Макет.ПолучитьОбласть("ИтогоКОплате|Сумма");
		ТабличныйДокумент.Вывести(ОбластьНомера);
		Если ВыводитьКоды Тогда
			ТабличныйДокумент.Присоединить(ОбластьКодов);
		КонецЕсли;
		ТабличныйДокумент.Присоединить(ОбластьДанных);
		СуммаКОплате = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);
		ОбластьСуммы.Параметры.ИтогоКОплате = ОбщегоНазначенияБПВызовСервера.ФорматСумм(СуммаКОплате);
		ТабличныйДокумент.Присоединить(ОбластьСуммы);
		
		// Вывести Сумму прописью
		ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
		СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);
		ОбластьМакета.Параметры.ИтоговаяСтрока ="Всего наименований " + Шапка.Количество()
			+ ", на сумму " + ОбщегоНазначенияБПВызовСервера.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента);
		ОбластьМакета.Параметры.СуммаПрописью = ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента);
		ТабличныйДокумент.Вывести(ОбластьМакета);

		// Вывести подписи
		Если ОбщегоНазначения.ПолучитьЗначениеРеквизита(Шапка.Получатель, "ЮридическоеФизическоеЛицо")
			= Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо Тогда
			ОбластьМакета = Макет.ПолучитьОбласть("ПодвалСчета");
			
			ПодразделениеОтветственныхЛиц = Шапка.ПодразделениеОрганизации;
			
			Руководители = ОбщегоНазначенияБПВызовСервера.ОтветственныеЛица(Шапка.Организация, Шапка.Дата, ПодразделениеОтветственныхЛиц);
			Руководитель = Руководители.РуководительПредставление;
			Бухгалтер    = Руководители.ГлавныйБухгалтерПредставление;
			
			ОбластьМакета.Параметры.ФИОРуководителя = Руководитель;
			ОбластьМакета.Параметры.ФИОБухгалтера   = Бухгалтер;
			
		Иначе
			ОбластьМакета = Макет.ПолучитьОбласть("ПодвалСчетаПредприниматель");
			
			ФЛ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Шапка.Получатель, "ИндивидуальныйПредприниматель");
			ДанныеФЛ = РегистрыСведений.ФИОФизическихЛиц.СрезПоследних(Шапка.Дата, Новый Структура("ФизическоеЛицо",ФЛ));
			Если ДанныеФЛ.Количество() > 0 Тогда
				Предприниматель = СокрЛП(ДанныеФЛ[0].Фамилия) + " " + Лев(СокрЛП(ДанныеФЛ[0].Имя),1) + ". " + Лев(СокрЛП(ДанныеФЛ[0].Отчество),1) + ".";
			Иначе
				Предприниматель = "";
			КонецЕсли;
			
			ОбластьМакета.Параметры.ФИОПредпринимателя = Предприниматель;
			
		КонецЕсли;

		ОбластьМакета.Параметры.Заполнить(Шапка);
		ТабличныйДокумент.Вывести(ОбластьМакета);
		
		// В табличном документе зададим имя области, в которую был 
		// выведен объект. Нужно для возможности печати покомплектно.
		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, 
			НомерСтрокиНачало, ОбъектыПечати, Шапка.Ссылка);

	КонецЦикла;

	Возврат ТабличныйДокумент;
КонецФУнкции	

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

КонецПроцедуры // Печать()
Показать
Прикрепленные файлы:
ПечатнаяФормаСчет.epf
По теме из базы знаний
Найденные решения
2. mikr 12.03.13 05:48 Сейчас в теме
(1) pvl_mksv, у Вас в процедуре "Печать" объявлено 3 параметра, а при вызове этой процедуры Вы ей передаёте 2 фактических параметра. Вот и выводит сообщение

Недостаточно фактических параметров ВнешняяОбработка.Печать(ИдентификаторКомандыОбработки, ОбъектыНазначенияМассив);


Ройте в этом направлении.
nana_rge; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. mikr 12.03.13 05:48 Сейчас в теме
(1) pvl_mksv, у Вас в процедуре "Печать" объявлено 3 параметра, а при вызове этой процедуры Вы ей передаёте 2 фактических параметра. Вот и выводит сообщение

Недостаточно фактических параметров ВнешняяОбработка.Печать(ИдентификаторКомандыОбработки, ОбъектыНазначенияМассив);


Ройте в этом направлении.
nana_rge; +1 Ответить
3. pvl_mksv 20 12.03.13 10:53 Сейчас в теме
(2) mikr,
Спасибо, друг! Так и знал, что уже спать пора было )))
4. Vasiliy_A 09.02.16 12:22 Сейчас в теме
(3) pvl_mksv, И тебе спасибо, Друг,
У меня такая-же проблема, с параметрами, поделись как решил проблему
или хотя-бы, структуру параметров опиши.
Спасибо.
6. pvl_mksv 20 14.08.19 10:57 Сейчас в теме
(2),(3),(4) И, да поправит меня уважаемый mikr, во внешней печатной форме объявляется экспортная процедура Печать, это требование объясняется использованием БСП (библиотеки стандартных подсистем), следующим образом:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати) Экспорт
...
КонецПроцедуры // Печать()

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

с двумя параметрами ИдентификаторКомандыОбработки, ОбъектыНазначенияМассив.
Мы не можем изменить модули БСП, соотвественно подгоняем объявление процедуры под вызов, то есть выкидываем параметр "Объекты печати" из объявления процедуры, станет
роцедура Печать(МассивОбъектов, КоллекцияПечатныхФорм) Экспорт

Я полагаю, так.
Обраба старая, возможно понадобится подгон под современные версии БСП.
7. user1215199 18.08.19 21:14 Сейчас в теме
5. user1215199 13.08.19 17:18 Сейчас в теме
(1)На сегодняшний день та же проблема.. Подскажите, как решили, если не сложно..
Оставьте свое сообщение

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