1. user666770_anastasiyatretyakova 1 16.04.18 15:52 Сейчас в теме +0.1 $m

ВПФ М15 КА 2

Добрый день. Помогите, пожалуйста.
Срочно нужна ВПФ для КА 2 М15.
Нашла описание, как сделать из встроенной формы сделать ВПФ.
Вроде бы сделала, как написано. Но выходит ошибка
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(235)}: Недостаточно фактических параметров
ВнешняяОбработкаОбъект.Печать(

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

	ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
	Возврат ПараметрыРегистрации;
КонецФункции
&НаСервере

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

КонецПроцедуры
&НаСервере

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

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

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

Процедура ЗаполнитьТабличныйДокументМ15(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати)
	
	ВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
	
	Макет = ПолучитьМакет("ПФ_MXL_М15");
	
	ДанныеПечати        = ДанныеДляПечати.РезультатПоШапке.Выбрать();
	ВыборкаПоДокументам = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	ПервыйДокумент = Истина;
	Пока ДанныеПечати.Следующий() Цикл
		
		СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка);
		ВыборкаПоДокументам.Сбросить();
		Если НЕ ВыборкаПоДокументам.НайтиСледующий(СтруктураПоиска) Тогда
			Если ТипЗнч(ДанныеПечати.Ссылка) = Тип("ДокументСсылка.РеализацияУслугПрочихАктивов") Тогда
				Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Для документа %1 печать М-15 не требуется'"),
					ДанныеПечати.Ссылка);
			Иначе
				Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'В документе %1 отсутствуют товары. Печать накладной не требуется'"),
					ДанныеПечати.Ссылка);
			КонецЕсли;
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
				Текст,
				ДанныеПечати.Ссылка);
			Продолжить;
		КонецЕсли;
		
		Если Не ПервыйДокумент Тогда
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
		ПервыйДокумент = Ложь;
		НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
		
		// Выводим общие реквизиты шапки
		ЗаполнитьРеквизитыШапкиМ15(ДанныеПечати, Макет, ТабличныйДокумент);
		
		// Выводим заголовок таблицы
		ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
		ТабличныйДокумент.Вывести(ЗаголовокТаблицы);
		
		НомерСтраницы   = 1;
		
		// Инициализация итогов в документе
		ИтоговыеСуммы = СтруктураИтоговыеСуммы();
		
		// Создаем массив для проверки вывода
		МассивВыводимыхОбластей = Новый Массив;
		
		// Выводим многострочную часть документа
		ОбластьМакета  = Макет.ПолучитьОбласть("Строка");
		ОбластьПодвала = Макет.ПолучитьОбласть("Подвал");
		
		НомерСтроки = 0;
		ДобавитьИтоговыеДанныеПодвала(ИтоговыеСуммы, НомерСтроки, ВалютаРегламентированногоУчета);
		ЗаполнитьРеквизитыПодвалаМ15(ОбластьПодвала, ДанныеПечати, ИтоговыеСуммы);
		
		Если ДанныеДляПечати.РезультатПоШапке.Колонки.Найти("ВыводитьКодНоменклатуры") <> Неопределено Тогда
			ВыводитьКодНоменклатуры = ДанныеПечати.ВыводитьКодНоменклатуры;
		Иначе
			ВыводитьКодНоменклатуры = Истина;
		КонецЕсли;
		
		СтрокаТовары = ВыборкаПоДокументам.Выбрать();
		КоличествоСтрок = СтрокаТовары.Количество();
		Пока СтрокаТовары.Следующий() Цикл
			
			НомерСтроки = НомерСтроки + 1;
			ЗаполнитьРеквизитыСтрокиТовара(СтрокаТовары, ОбластьМакета, НомерСтроки, ВыводитьКодНоменклатуры);
			
			МассивВыводимыхОбластей.Очистить();
			МассивВыводимыхОбластей.Добавить(ОбластьМакета);
			
			Если НомерСтроки = КоличествоСтрок Тогда
				МассивВыводимыхОбластей.Добавить(ОбластьПодвала);
			КонецЕсли;
			
			Если НЕ ТабличныйДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
				НомерСтраницы = НомерСтраницы + 1;
				ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
				СтруктураПараметров = Новый Структура;
				СтруктураПараметров.Вставить("НомерСтраницы", "Страница " + НомерСтраницы);
				ЗаголовокТаблицы.Параметры.Заполнить(СтруктураПараметров);
				ТабличныйДокумент.Вывести(ЗаголовокТаблицы);
			КонецЕсли;
			
			ТабличныйДокумент.Вывести(ОбластьМакета);
			РассчитатьИтоговыеСуммы(ИтоговыеСуммы, СтрокаТовары);
			
		КонецЦикла;
		
		// Выводим итоги по документу
		ДобавитьИтоговыеДанныеПодвала(ИтоговыеСуммы, НомерСтроки, ВалютаРегламентированногоУчета);
		ЗаполнитьРеквизитыПодвалаМ15(ОбластьПодвала, ДанныеПечати, ИтоговыеСуммы);
		ТабличныйДокумент.Вывести(ОбластьПодвала);
		
		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);
		
	КонецЦикла;
	
КонецПроцедуры

Функция СтруктураИтоговыеСуммы()
	
	Структура = Новый Структура;
	
	СтруктураРесурсовДляИтогов = СтруктураРесурсовДляИтогов();
	
	Для Каждого Элемент Из СтруктураРесурсовДляИтогов Цикл
		Структура.Вставить("Итого"+Элемент.Ключ+"НаСтранице", 0);
		Структура.Вставить("Итого"+Элемент.Ключ, 0);
	КонецЦикла;
	
	Возврат Структура;
	
КонецФункции

Процедура ДобавитьИтоговыеДанныеПодвала(ИтоговыеСуммы, ВсегоНомеров, ВалютаРегламентированногоУчета)
	
	ИтоговыеСуммы.Вставить("КоличествоПорядковыхНомеровЗаписейПрописью", ЧислоПрописью(ВсегоНомеров, ,",,,,,,,,0"));
	ИтоговыеСуммы.Вставить("СуммаПрописью", РаботаСКурсамиВалют.СформироватьСуммуПрописью(ИтоговыеСуммы.ИтогоСуммаСНДС, ВалютаРегламентированногоУчета));
	
КонецПроцедуры

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

Процедура РассчитатьИтоговыеСуммы(ИтоговыеСуммы, СтрокаТовары)
	
	СтруктураСуммПоСтроке = СтруктураРесурсовДляИтогов();
	
	ЗаполнитьЗначенияСвойств(СтруктураСуммПоСтроке, СтрокаТовары);
	ОкруглитьДоЦелого(СтруктураСуммПоСтроке.КоличествоМест);
	Для Каждого Элемент Из СтруктураСуммПоСтроке Цикл
		Если ЗначениеЗаполнено(Элемент.Значение) Тогда
			ИтоговыеСуммы["Итого"+Элемент.Ключ+"НаСтранице"] = ИтоговыеСуммы["Итого"+Элемент.Ключ+"НаСтранице"] + Элемент.Значение;
			ИтоговыеСуммы["Итого"+Элемент.Ключ] = ИтоговыеСуммы["Итого"+Элемент.Ключ] + Элемент.Значение;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

Функция СтруктураРесурсовДляИтогов()
	
	Структура = Новый Структура;
	
	Структура.Вставить("СуммаБезНДС",       0);
	Структура.Вставить("СуммаНДС",          0);
	Структура.Вставить("СуммаСНДС",         0);
	Структура.Вставить("Количество",        0);
	Структура.Вставить("КоличествоМест",    0);
	Структура.Вставить("КоличествоПринято", 0);
	Структура.Вставить("МассаБрутто",       0);
	Структура.Вставить("МассаНетто",        0);
	Структура.Вставить("Сумма",             0);
	
	Структура.Вставить("РазницаБезНДСУвеличение", 0);
	Структура.Вставить("РазницаБезНДСУменьшение", 0);
	Структура.Вставить("РазницаНДСУвеличение",    0);
	Структура.Вставить("РазницаНДСУменьшение",    0);
	Структура.Вставить("РазницаСНДСУвеличение",   0);
	Структура.Вставить("РазницаСНДСУменьшение",   0);
	
	Возврат Структура;
	
КонецФункции

Процедура ОкруглитьДоЦелого(ОкругляемоеЧисло)
	Если ЗначениеЗаполнено(ОкругляемоеЧисло) Тогда
		Если ОкругляемоеЧисло <> Цел(ОкругляемоеЧисло) Тогда
			ОкругляемоеЧисло = Цел(ОкругляемоеЧисло) + 1;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

Процедура УстановитьПараметр(ОбластьМакета, ИмяПараметра, ЗначениеПараметра)
	ОбластьМакета.Параметры.Заполнить(Новый Структура(ИмяПараметра, ЗначениеПараметра));
КонецПроцедуры
Показать
Прикрепленные файлы:
ВнешняяОбработка1.epf
Вознаграждение за ответ
Показать полностью
Сортировка: Древо
В этой теме еще нет сообщений.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Ведущий программист 1С
Москва
зарплата от 150 000 руб. до 180 000 руб.
Полный день

Руководитель проектов 1С
Москва
Полный день

Консультант-аналитик 1С: ЗУП
Санкт-Петербург
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день

Программист 1С
Санкт-Петербург
Полный день