gifts2017

Расширенная регистрация внешних печатных форм

Опубликовал Александр ягольник (Alex Y) в раздел Программирование - Практика программирования

Обработка позволяет авторегистрацию печатных форм с возможностью задать Заменяемую печатную форму, Дополнительные параметры и одинаковое  Представление объекта в нескольких строках.

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

Для тех, кто не раз регистрировал внешние печатные формы и хотел бы ускорить процесс, этот материал может оказаться интересным. Остальным рекомендую изучить «Внешние печатные формы в восьмерке» http://infostart.ru/public/16952/

После того, как я придумал печатную форму с возможностью выбора лица для подписи http://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. Добавлены настройки, ускоряющие ввод нескольких форм подряд. Галка "Новый файл = новая запись" позволяет при загрузке нового файла обработки автоматически создавать новую запись.  Если отмечено "Чистить таблицу при смене файла", то при загрузке нового файла чистится таблица принадлежности,  актуально при погашнной "Новый файл = новая запись". "Авторегистрация" подавляет вопрос "Указанная внешняя печатная форма содержит параметры авторегистрации. Использовать их при регистрации?".

Чтобы не считать в уме, сколько же новых обработок было добавлено, на форме размещен счетчик "Добавленых новых", а в служебных сообщениях указывается что добавлено.

Следует учесть, что если во ВнешнихОбработках уже есть печатная форма с таким же именем файла, то она заменяется новой без создания новой записи. Счетчик меняться не будет.

Теперь всё ещё проще, достаточно давить на две кнопки " Заменить" и "Записать"!

Новая форма вер.1.2

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ЗаполнениеПринадлежностиВнешнихПечатныхФорм81 Вер.1.2
.epf 24,49Kb
12.11.09
125
.epf 24,49Kb 125 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Наталия Ткаченко (natnat3) 14.02.12 14:35
Спасибо, только сегодня задумалась над этой темой, и бах, случайно поподается на глаза.
2. Иван Петров (BoryaMbi) 18.02.13 11:48
Благодарю! СУПЕР! Отличная ИДЕЯ. Как все гениальное - простая и лаконичная.
Огромный комплимент автору за публикацию.
Малое количество плюсов говорит о том, что реально не много людей пишет внешних печатных форм и обработок, которым требуется расширенная регистрация.
3. Иван Петров (BoryaMbi) 18.02.13 11:50
Хотел также спросить есть ли реализация автоматической регистрации печатной формы по шаблону при открытии формы обработки?
4. Александр ягольник (Alex Y) 20.02.13 10:12
(3) BoryaMbi, спасибо за отзыв. Не совсем понял вопрос. Если можно, опишите подробнее идею.
5. KeyMaster 26.08.13 16:25
Здравствуйте.
Простым конвертирование для платформы 8.2 не удается воспользоваться обработкой на конфигурации БП. Есть у Вас вариант для платформы 8.2?
6. Слава (SlavaVNL) 15.05.15 02:58
Большое спасибо за идею. Но у Вас не описано как в параметры регистрации добавить отбор.
Вечер раздумий, и на свежую голову родилось. Основная загвоздка в добавлении отбора (там построитель с которым я не дружу).

		
Попытка 
	Если ЗначениеЗаполнено(СтрокаТаблицыПринадлежности.ПредставлениеОтбораПостроителя) Тогда
		СтруктураОтбор = Новый Структура;
		ВремСтрока = СтрокаТаблицыПринадлежности.ПредставлениеОтбораПостроителя;
		ВремСтрока = СтрЗаменить(ВремСтрока,";",Символы.ПС);
		
		Если Метаданные.Документы.Содержит(МетаданныеОбъекта) Тогда
			Типп = "Документ.";
		ИначеЕсли Метаданные.Справочники.Содержит(МетаданныеОбъекта) Тогда
			Типп = "Справочник.";
		КонецЕсли;
		
		ИмяТаблицы     = Типп + МетаданныеОбъекта.Имя;
		СинонимТаблицы = МетаданныеОбъекта.Синоним;
		
		ПостроительОтчета = УниверсальныеМеханизмы.ИнициализироватьПостроительДопПечатныхФорм(ИмяТаблицы, СинонимТаблицы);
		Отбор=ПостроительОтчета.Отбор;
		
		Для н=1 По СтрЧислоСтрок(ВремСтрока) Цикл
			ВремПодСтрока = СтрЗаменить(ВремСтрока,"~",Символы.ПС);
			
			ЛевоеЗначение=СокрЛП(СтрПолучитьСтроку(ВремПодСтрока,1));
			ВидСр=Вычислить("ВидСравнения."+СокрЛП(СтрПолучитьСтроку(ВремПодСтрока,2)));
			ПравоеЗначение=Вычислить(СокрЛП(СтрПолучитьСтроку(ВремПодСтрока,3)));
			
			Отбор.Добавить("Ссылка."+ЛевоеЗначение);
			Отбор["Ссылка"+ЛевоеЗначение].Использование=Истина;
			Отбор["Ссылка"+ЛевоеЗначение].Значение=ПравоеЗначение;
			Отбор["Ссылка"+ЛевоеЗначение].ВидСравнения=ВидСр;
		КонецЦикла;	
		
		НоваяСтрока.НастройкиПостроителяДляОтбора = Новый ХранилищеЗначения(ПостроительОтчета.ПолучитьНастройки(Истина, Ложь, Ложь, Ложь, Ложь));
		
		НоваяСтрока.ПредставлениеОтбораПостроителя = СтрЗаменить(СтрокаТаблицыПринадлежности.ПредставлениеОтбораПостроителя,"~","");
	КонецЕсли;
Исключение
	Сообщить("Ошибка в параметрах авторегистрации (отборы)");
КонецПопытки
...Показать Скрыть


В параметр авторегистрации пишем строку такого формата:
ВидОперации~Равно~Перечисления.ВидыОперацийСервисноеОбслуживание.Шиномонтаж


По коду будет видно, как там что.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа