Для тех, кто не раз регистрировал внешние печатные формы и хотел бы ускорить процесс, этот материал может оказаться интересным. Остальным рекомендую изучить «Внешние печатные формы в восьмерке» //infostart.ru/public/16952/
После того, как я придумал печатную форму с возможностью выбора лица для подписи //infostart.ru/public/60105, захотелось большего. Например, сделать одну форму для нескольких сходных по структуре документов. Сказано – сделано. Благо в печатной форме можно использовать «Дополнительные параметры». При регистрации достаточно для каждой строки таблицы «Принадлежность печатной формы» указать параметр, а в функции Печать() по этому параметру выбрать нужный алгоритм получения табличного документа.
ИмяМакета = "";
Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда
ДополнительныеПараметры.Свойство("ПечатнаяФорма", ИмяМакета);
КонецЕсли;
Если ИмяМакета = "АктВал" Тогда
ТабДокумент = ПечатьАктаОбОказанииУслуг(Ложь);
ИначеЕсли ИмяМакета = "АктРуб" Тогда
ТабДокумент = ПечатьАктаОбОказанииУслуг(Истина);
Иначе
ТабДокумент = ПечатьАктаНашегоОбОказанииУслуг();
КонецЕсли;
Однако, если у вас не одна база и не одна печатная форма, то каждый раз добавлять строки в таблицу, прописывать Представление объекта, Заменяемую печатную форму и параметры покажется трудоемким и рутинным делом.
Но в 1С 8.1 УПП 1.2 есть возможность в печатной форме указать параметры авторегистрации! Увы, максимально, чего можно добиться, это автоматом добавлять в табличную часть уникальные объекты в первую колонку. К счастью, есть исходный код стандартной формы справочника «ВнешниеОбработки». Всё не так запущено. Добавить новые возможности авторегистрации не так уж и сложно. Удивительно, что это не сделали авторы конфигурации.
Поскольку речь идет не о полностью универсальной обработке для тиражирования в массы, то ограничимся минимумом. Условимся, что в макете «Параметры_Авторегистрации» регистрируемой печатной формы третья колонка – это «Заменяемая печатная форма», четвертая – «Дополнительные параметры». При этом параметры пишем в формате «имя параметра1=значение параметра1; имя параметра2=значение параметра2».
Сама обработка делается на раз-два. Создаем пустую обработку. Бросаем в формы форму «ФормаЭлемента» из справочника «ВнешниеОбработки» и … всё! Обработку можно использовать! Слава 1С! Правда новая форма будет делать то же самое, что и старая. Т.е. регистрировать внешние печатные формы «без наворотов».
Что ж, и нам есть работа. Правим процедуру «КоманднаяПанельФайлаИсточникаЗаменитьФайл». Добавим новые колонки:
ТаблицаПринадлежности = Новый ТаблицаЗначений;
ТаблицаПринадлежности.Колонки.Добавить("МетаданныеОбъекта");
ТаблицаПринадлежности.Колонки.Добавить("ТабличнаяЧастьИмя");
ТаблицаПринадлежности.Колонки.Добавить("ЗаменяемаяПечатнаяФорма");
ТаблицаПринадлежности.Колонки.Добавить("ДополнительныеПараметрыОбработки");
Выберем выберем значения из макета
ЗаменяемаяПечатнаяФорма = Макет.Область(индекс, 3, индекс, 3).Текст;
ДополнительныеПараметрыОбработки = Макет.Область(индекс, 4, индекс, 4).Текст;
Дополним СтрокаТаблицыПринадлежности значениями Заменяемой печатной формы и Дополнительных параметров
СтрокаТаблицыПринадлежности.ЗаменяемаяПечатнаяФорма = ЗаменяемаяПечатнаяФорма;
СтрокаТаблицыПринадлежности.ДополнительныеПараметрыОбработки = ДополнительныеПараметрыОбработки;
Здесь спотыкаемся о запрет добавлять строки с одинаковым значением в первом столбце и благополучное его обходим, просто закомментировав.
//Позволяем добавлять одинаковые строки
//Если Принадлежность.НайтиСтроки(Новый Структура("МетаданныеОбъекта,ТабличнаяЧастьИмя", СтрокаТаблицыПринадлежности.МетаданныеОбъекта, СтрокаТаблицыПринадлежности.ТабличнаяЧастьИмя)).Количество() = 0 Тогда
Теперь самое интересное – заполнение «Дополнительных параметров». Выглядит страшно, заполняется просто.
//Добавляем колонки для заполнения заменяемой печатной формы и Дополнительных параметров
Попытка
НоваяСтрока.ЗаменяемаяПечатнаяФорма = СтрокаТаблицыПринадлежности.ЗаменяемаяПечатнаяФорма;
Если ЗначениеЗаполнено(СтрокаТаблицыПринадлежности.ДополнительныеПараметрыОбработки) Тогда
СтруктураПараметрыОбработки = Новый Структура;
ВремСтрока = СтрокаТаблицыПринадлежности.ДополнительныеПараметрыОбработки;
ВремСтрока = СтрЗаменить(ВремСтрока,";",Символы.ПС);
Для н=1 По СтрЧислоСтрок(ВремСтрока) Цикл
ВремПодстрока = СокрЛП(СтрПолучитьСтроку(ВремСтрока,н));
п = Найти(ВремПодстрока, "=");
Если (п > 2) и (п < СтрДлина(ВремПодстрока)) Тогда
СтруктураПараметрыОбработки.Вставить(СокрЛП(Сред(ВремПодстрока,1,п-1)), СокрЛП(Сред(ВремПодстрока,п+1)));
КонецЕсли;
КонецЦикла;
Если СтруктураПараметрыОбработки.Количество() > 0 Тогда
Попытка
ХранилищеПараметрыОбработки = Новый ХранилищеЗначения(СтруктураПараметрыОбработки);
НоваяСтрока.ДополнительныеПараметрыОбработки = ХранилищеПараметрыОбработки;
Исключение
//Предупреждение("" );
КонецПопытки;
КонецЕсли;
КонецЕсли;
Исключение
КонецПопытки;
Вот и все! Ах, да. В конце модуля надо добавить
ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.ПечатнаяФорма
Теперь форма знает, что мы имеем дело не с какой-то обработкой, а с печатной формой.
Загружаем обработку «ЗаполнениеПринадлежностиВнешнихПечатныхФорм», из неё загружаем печатную форму с настроенными параметрами авторегистрации и получаем заполненную табличную часть с «Заменяемыми печатными формами» и «Дополнительными параметрами».
Конечно, здесь многое можно добавить. Например, разбирать параметры не только, как строковые значения, но и как числа, даты и более сложные типы. Флаг вам в руки!
Обновление от 09.11.09. Добавлена возможность не только создавать новые но и изменять старые зарегистрированные печатные формы. Теперь у поля "Код" появились кнопки "Выбор" и "Очистка". На выборе мы переходим в список печатных форм. На очистке возвращаемся к вводу новой печатной формы.
Процедура КодНачалоВыбора(Элемент, СтандартнаяОбработка)
//Выберем обработку из имеющихся для редактирования
СтандартнаяОбработка = Ложь;
ФормаВыбора = Справочники.ВнешниеОбработки.ПолучитьФормуВыбора("ФормаСписка",ЭтаФорма, ВидОбработки);
Результат = ФормаВыбора.ОткрытьМодально();
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
СправочникОбъект = Результат.ПолучитьОбъект();
КонецПроцедуры
Процедура КодОчистка(Элемент, СтандартнаяОбработка)
//Вернемся к вводу новой обработки
СтандартнаяОбработка = Ложь;
СправочникОбъект = Справочники.ВнешниеОбработки.СоздатьЭлемент();
ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.ПечатнаяФорма;
Обновить();
КонецПроцедуры
Обновление от 09.11.12. Добавлены настройки, ускоряющие ввод нескольких форм подряд. Галка "Новый файл = новая запись" позволяет при загрузке нового файла обработки автоматически создавать новую запись. Если отмечено "Чистить таблицу при смене файла", то при загрузке нового файла чистится таблица принадлежности, актуально при погашнной "Новый файл = новая запись". "Авторегистрация" подавляет вопрос "Указанная внешняя печатная форма содержит параметры авторегистрации. Использовать их при регистрации?".
Чтобы не считать в уме, сколько же новых обработок было добавлено, на форме размещен счетчик "Добавленых новых", а в служебных сообщениях указывается что добавлено.
Следует учесть, что если во ВнешнихОбработках уже есть печатная форма с таким же именем файла, то она заменяется новой без создания новой записи. Счетчик меняться не будет.
Теперь всё ещё проще, достаточно давить на две кнопки " Заменить" и "Записать"!