Доброго времени суток! Подскажите, пожалуйста, как исправить проблему. Пытаюсь сделать внешнюю печатную форму для УНФ 1.6, но при добавлении выдает следующую ошибку:
"Невозможно подключить дополнительную обработку из файла.
Возможно, она не подходит для этой версии программы.
Метод объекта не обнаружен (СведенияОВнешнейОбработке)"
Собственно, сам код:
Функция СведенияОВнешнейОбработкe() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "Печатная форма");
ПараметрыРегистрации.Вставить("Назначение", ПолучитьНазначениеОбработки());
ПараметрыРегистрации.Вставить("Наименование", "Акт выполненных работ внешний");
ПараметрыРегистрации.Вставить("Версия", "v1");
ПараметрыРегистрации.Вставить("Информация", "Внешняя печатная форма акта выполненных работ");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
Команды = ПолучитьТаблицуКоманд();
ДобавитьКоманду(Команды, "Внешняя печатная форма акта выполненных работ", "АктВыполненныхРаботВнешний", "ВызовСерверногоМетода", Ложь, "ПечатьXML");
ПараметрыРегистрации.Вставить("Команды", Команды);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьНазначениеОбработки()
Массив = Новый Массив;
Массив.Добавить("Документ.АктВыполненныхРабот");
Возврат Массив;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Функция УниверсальныйЗапросПоДаннымДокумента(МассивОбъектов)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.Текст =
"ВЫБРАТЬ
| АктВыполненныхРабот.Ссылка КАК Ссылка
| ,АктВыполненныхРабот.Номер КАК Номер
| ,АктВыполненныхРабот.Дата КАК ДатаДокумента
| ,АктВыполненныхРабот.Организация КАК Организация
| ,АктВыполненныхРабот.Организация.ФайлЛоготип КАК ФайлЛоготип
| ,АктВыполненныхРабот.Контрагент КАК Контрагент
| ,АктВыполненныхРабот.ПодписьРуководителя.РасшифровкаПодписи КАК РасшифровкаПодписиВыполнилРаботыУслуги
| ,АктВыполненныхРабот.КонтактноеЛицоПодписант.Наименование КАК РасшифровкаПодписиПринялРаботыУслуги
| ,АктВыполненныхРабот.СуммаВключаетНДС КАК СуммаВключаетНДС
| ,АктВыполненныхРабот.ВалютаДокумента КАК ВалютаДокумента
| ,АктВыполненныхРабот.Организация.Префикс КАК Префикс
| ,АктВыполненныхРабот.ОснованиеПечатиСсылка
| ,АктВыполненныхРабот.ОснованиеПечати
| ,АктВыполненныхРабот.Комментарий
| ,АктВыполненныхРабот.РаботыИУслуги.(
| НомерСтроки КАК НомерСтроки
| ,Выбор когда (Выразить(АктВыполненныхРабот.РаботыИУслуги.Номенклатура.НаименованиеПолное КАК СТРОКА(1000))) = """"
| Тогда АктВыполненныхРабот.РаботыИУслуги.Номенклатура.Наименование
| Иначе Выразить(АктВыполненныхРабот.РаботыИУслуги.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) Конец КАК ПредставлениеНоменклатуры
| ,Номенклатура.Артикул КАК Артикул
| ,Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры
| ,ЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения
| ,Количество КАК Количество
| ,Цена КАК Цена
| ,Сумма КАК Сумма
| ,СуммаНДС КАК СуммаНДС
| ,Всего КАК Всего
| ,Характеристика
| ,Содержание
| ,ПроцентСкидкиНаценки
| ,Выбор когда АктВыполненныхРабот.РаботыИУслуги.ПроцентСкидкиНаценки <> 0
| ИЛИ АктВыполненныхРабот.РаботыИУслуги.СуммаАвтоматическойСкидки <> 0
| Тогда 1
| Иначе 0 Конец КАК ЕстьСкидка
| ,СуммаАвтоматическойСкидки
| ) КАК ТаблицаРаботыУслуги
|Из Документ.АктВыполненныхРабот КАК АктВыполненныхРабот
|Где АктВыполненныхРабот.Ссылка В(&МассивОбъектов)
|Упорядочить по Ссылка, НомерСтроки";
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "АктОбОказанииУслуг");
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
ПечатнаяФорма.ТабличныйДокумент.КлючПараметровПечати = Обработки.ПечатьАктаОбОказанииУслуг.КлючПараметровПечати();
ПечатнаяФорма.ПолныйПутьКМакету = Обработки.ПечатьАктаОбОказанииУслуг.ПолныйПутьКМакету(Ложь);
ПечатнаяФорма.СинонимМакета = Обработки.ПечатьАктаОбОказанииУслуг.ПредставлениеПФ();
ДанныеОбъектовПечати = УниверсальныйЗапросПоДаннымДокумента(МассивОбъектов);
Обработки.ПечатьАктаОбОказанииУслуг.СформироватьПФ(ПечатнаяФорма, ДанныеОбъектовПечати, ОбъектыПечати, Ложь);
КонецЕсли;
// параметры отправки печатных форм по электронной почте
УправлениеНебольшойФирмойСервер.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
КонецПроцедуры
(1)
Столько лишних кусоков кода: Функция ПолучитьТаблицуКоманд(), ДобавитьКоманду(). Эти функции вызывются лишь раз за всю жизнь обработки, так зачем усложнять и выводить в отдельные функции, чтобы продавать количество строк кода?
Сколько раз обсуждали на форумах, пользуйтесь БСП. Скачайте конфигурацию библиотеки стандартных подсистем и посмотрите как там реализованы внешние обработки. Куча вариантов. И в ИТС есть подробная инструкция. https://its.1c.ru/db/bsp242doc#content:2351:1
Вот пример:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Версия = "1.3";
// Определение объектов, к которым подключается эта обработка.
ПараметрыРегистрации.Назначение.Добавить("Документ._ДемоСчетНаОплатуПокупателю");
// Добавление команды печати "Счет на оплату".
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Счет на оплату (внешняя печатная форма)'");
НоваяКоманда.Идентификатор = "СчетНаОплату";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "СчетНаОплату");
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = СформироватьСчетНаОплатуПокупателю(МассивОбъектов, ОбъектыПечати);
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Счет на оплату'");
КонецЕсли;
КонецПроцедуры
Функция СформироватьСчетНаОплатуПокупателю(МассивОбъектов, ОбъектыПечати)
ТабличныйДокумент = Новый ТабличныйДокумент;
....
Возврат ТабличныйДокумент;
КонецФункции
Сервисная экспортная функция. Вызывается в основной программе при регистрации обработки в информационной базе
// Возвращает структуру с параметрами регистрации
//
// Возвращаемое значение:
// Структура с полями:
// Вид - строка, вид обработки, один из возможных: "ДополнительнаяОбработка", "ДополнительныйОтчет",
// "ЗаполнениеОбъекта", "Отчет", "ПечатнаяФорма", "СозданиеСвязанныхОбъектов"
// Назначение - Массив строк имен объектов метаданных в формате:
// <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>].
// Например, "Документ.СчетЗаказ" или "Справочник.*". Параметр имеет смысл только для назначаемых обработок, для глобальных может не задаваться.
// Наименование - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию.
// Информация - строка - Краткая информация или описание по обработке.
// Версия - строка - Версия обработки в формате “<старший номер>.<младший номер>” используется при загрузке обработок в информационную базу.
// БезопасныйРежим - булево - Принимает значение Истина или Ложь, в зависимости от того, требуется ли устанавливать или отключать безопасный режим
// исполнения обработок. Если истина, обработка будет запущена в безопасном режиме.
//
//
Функция СведенияОВнешнейОбработке() Экспорт
//Инициализируем структуру с параметрами регистрации
ДобавитьКоманду(ТаблицаКоманд,
ПараметрыРегистрации.Наименование, // Представление команды в пользовательском интерфейсе
"УниверсальныеПодборИОбработкаОбъектовУФ", // Уникальный идентификатор команды
"ОткрытиеФормы"
);
(13) Спасибо. Видел, что обработка. Написана, вроде, СведенияОВнешнейОбработкe нормально у меня. Не могу только понять никак, почему не регистрирует, где конкретно ошибка.