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