Вопрос по созданию внешней печатной формы для УНФ 1.6

1. bladeson 17.08.17 06:42 Сейчас в теме
Доброго времени суток! Подскажите, пожалуйста, как исправить проблему. Пытаюсь сделать внешнюю печатную форму для УНФ 1.6, но при добавлении выдает следующую ошибку:

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

Метод объекта не обнаружен (СведенияОВнешнейОбработке)"

Собственно, сам код:

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

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

Функция ПолучитьНазначениеОбработки()

	Массив = Новый Массив;
    Массив.Добавить("Документ.АктВыполненныхРабот");
    
    Возврат Массив;

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

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

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

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

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

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

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

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

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

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

КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
19. fortran 02.02.18 16:49 Сейчас в теме
(1) Ваша функция ПолучитьТаблицуКоманд не возвращает никакого значения, в этом и есть проблема. Добавьте в конец
Возврат Команды;
Должно взлететь. Сам прошелся по этим граблям.
20. kild 89 03.02.18 20:09 Сейчас в теме
(1)
Столько лишних кусоков кода: Функция ПолучитьТаблицуКоманд(), ДобавитьКоманду(). Эти функции вызывются лишь раз за всю жизнь обработки, так зачем усложнять и выводить в отдельные функции, чтобы продавать количество строк кода?
Сколько раз обсуждали на форумах, пользуйтесь БСП. Скачайте конфигурацию библиотеки стандартных подсистем и посмотрите как там реализованы внешние обработки. Куча вариантов. И в ИТС есть подробная инструкция. https://its.1c.ru/db/bsp242doc#content:2351:1

Вот пример:
Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Версия = "1.3";
    // Определение объектов, к которым подключается эта обработка.
    ПараметрыРегистрации.Назначение.Добавить("Документ._ДемоСчетНаОплатуПокупателю");
    // Добавление команды печати "Счет на оплату".
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Счет на оплату (внешняя печатная форма)'");
    НоваяКоманда.Идентификатор = "СчетНаОплату";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.Модификатор = "ПечатьMXL";
    Возврат ПараметрыРегистрации;
КонецФункции
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "СчетНаОплату");
    Если ПечатнаяФорма <> Неопределено Тогда
        ПечатнаяФорма.ТабличныйДокумент = СформироватьСчетНаОплатуПокупателю(МассивОбъектов, ОбъектыПечати);
        ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Счет на оплату'");
    КонецЕсли;
КонецПроцедуры
Функция СформироватьСчетНаОплатуПокупателю(МассивОбъектов, ОбъектыПечати)
    ТабличныйДокумент = Новый ТабличныйДокумент;
     ....
    Возврат ТабличныйДокумент;
КонецФункции
Показать
2. uk09 17.08.17 06:48 Сейчас в теме
Добрый день!
Надо положить функцию в модуль обработки
3. uk09 17.08.17 06:50 Сейчас в теме
Сервисная экспортная функция. Вызывается в основной программе при регистрации обработки в информационной базе
// Возвращает структуру с параметрами регистрации
//
// Возвращаемое значение:
// Структура с полями:
// Вид - строка, вид обработки, один из возможных: "ДополнительнаяОбработка", "ДополнительныйОтчет",
// "ЗаполнениеОбъекта", "Отчет", "ПечатнаяФорма", "СозданиеСвязанныхОбъектов"
// Назначение - Массив строк имен объектов метаданных в формате:
// <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>].
// Например, "Документ.СчетЗаказ" или "Справочник.*". Параметр имеет смысл только для назначаемых обработок, для глобальных может не задаваться.
// Наименование - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию.
// Информация - строка - Краткая информация или описание по обработке.
// Версия - строка - Версия обработки в формате “<старший номер>.<младший номер>” используется при загрузке обработок в информационную базу.
// БезопасныйРежим - булево - Принимает значение Истина или Ложь, в зависимости от того, требуется ли устанавливать или отключать безопасный режим
// исполнения обработок. Если истина, обработка будет запущена в безопасном режиме.
//
//
Функция СведенияОВнешнейОбработке() Экспорт

//Инициализируем структуру с параметрами регистрации

ПараметрыРегистрации = ПолучитьПараметрыРегистрации();
ПараметрыРегистрации.Вид = "ДополнительнаяОбработка";
ПараметрыРегистрации.Версия = "1.0.4";

//Определяем команды для вывода формы

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

ДобавитьКоманду(ТаблицаКоманд,
ПараметрыРегистрации.Наименование, // Представление команды в пользовательском интерфейсе
"УниверсальныеПодборИОбработкаОбъектовУФ", // Уникальный идентификатор команды
"ОткрытиеФормы"
);

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

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

Вот, к примеру, вот так.
4. bladeson 17.08.17 06:58 Сейчас в теме
(3) А в у меня в начале не она разве?
5. uk09 17.08.17 07:09 Сейчас в теме
Она, но где она у Вас расположена ? В модуле формы ?
6. bladeson 17.08.17 07:10 Сейчас в теме
7. uk09 17.08.17 07:11 Сейчас в теме
а нужно в модуле обработки
8. bladeson 17.08.17 07:13 Сейчас в теме
(7)Не так выразился. Она расположено в модуле объекта, как и всё остальное.
9. uk09 17.08.17 07:25 Сейчас в теме
Откройте обработку в конфигураторе, внизу кнопка "Действия", там выбрать модуль объекта
11. bladeson 17.08.17 07:35 Сейчас в теме
(9) Этот код из модуля объекта обработки.

Если не затруднит, то можно попробовать, как встанет.
10. uk09 17.08.17 07:26 Сейчас в теме
может отправить Вам пробную, посмотрите, как у Вас она встанет в конфу ?
12. uk09 17.08.17 08:40 Сейчас в теме
13. uk09 17.08.17 08:42 Сейчас в теме
Только , обратите, пожалуйста, внимание, что это - обработка. Для внешней формы нужно сервисную по-другому писать
14. bladeson 17.08.17 08:46 Сейчас в теме
(13) Спасибо. Видел, что обработка. Написана, вроде, СведенияОВнешнейОбработкe нормально у меня. Не могу только понять никак, почему не регистрирует, где конкретно ошибка.
15. uk09 17.08.17 09:03 Сейчас в теме
то, что отослала - регистрируется ?
16. bladeson 17.08.17 09:10 Сейчас в теме
17. uk09 17.08.17 09:14 Сейчас в теме
18. bladeson 17.08.17 09:16 Сейчас в теме
Оставьте свое сообщение

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