Введение.
Нам нужно было перенести более 200 объектов из 8.2 в новую конфигурацию. При этом возник вопрос как получить быстрый доступ к добавляем объектам? Как их быстрее отлаживать?
Пришлось оставить обычные формы, а управляемые позже писать. Соответственно запускаем как обычное приложение, так и управляемое.
Было придумано решение похожее на некоторый Рабочий стол.
1) Оно автоматически показывает все объекты расширений(я).
2) Можно протестировать на открытие/закрытие форм расширений
3) можно добавить , отдельно объекты (или формы) для быстрого доступа
4) и ещё реализовано меню с кнопками. Для удобства освоения пользователями.
Открытие
При открытии обработка заполняет список и показывает только объекты из расширений. При двойном клике открывается объект. Все объекты сгруппированы по типу, и объекты можно открыть из данного рабочего стола.
Список содержит различные поля , в то числе показывает к какому расширению относится объект.
Тестирование форм.
Нажимаете "тестирование форм", заполняется полный список форм расширений. Потом они автоматически проверяются на открытие/закрытие. В случае ошибки, можно нажать "Продолжить тестирование". Если нет синтаксических ошибок формы, ставиться флаг "Открылась форма". В итоге можно отфильтровать список , и оставить только формы с ошибками. Формы где ложные ошибки, можно поставить флаг "не проверять". Обязательно сохраните список по кнопке "Сохранить не проверяемые". Это позволит в следующий раз пропустить форму, при проверке.
Кнопка "Фокус" перейдёт к строке списка где было остановка программы.
Если основная форма объекта не указана, то тестируется открытие объекта или записи без формы.
Для Каждого ФормаИзРасширения Из Мета.Формы Цикл
СтрокаЗапуска = Мета.Полноеимя()+ ".Форма."+ФормаИзРасширения.Имя;
НовСтр = СписокФорм.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр,Мета);
НовСтр.СтрокаЗапуска = СтрокаЗапуска;
НовСтр.ИмяРасширения = Расширение.Имя;
НовСтр.ТипФормы = ФормаИзРасширения.ТипФормы;
КонецЦикла;
Если ЭлементМассива = "Справочники" или ЭлементМассива = "Документы"
И (Мета.ОсновнаяФормаОбъекта = Неопределено) Тогда
СтрокаЗапуска = Мета.Полноеимя()+ ".ФормаОбъекта";
ИначеЕсли ЭлементМассива = "РегистрыСведений"
и Мета.ОсновнаяФормаЗаписи = Неопределено Тогда // или ЭлементМассива = "РегистрыНакопления"
СтрокаЗапуска = Мета.Полноеимя()+ ".ФормаЗаписи";
Иначе
Продолжить;
КонецЕсли;
НовСтр = СписокФорм.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр,Мета);
НовСтр.СтрокаЗапуска = СтрокаЗапуска;
НовСтр.ИмяРасширения = Расширение.Имя;
НовСтр.ТипФормы = "Нет формы объекта";
Избранные элементы.
Правой кнопкой мыши можно добавить элемент Объекта или Формы в "Текущая работа".
Это позволит быстрее находить и тестировать выбранные элементы. При открытии "Рабочего стола" восстанавливается вкладка "Текущая работа".
**
Дополнительно в расширении имеется шаблон создания печатных форм. Базовое описание Здесь1 и Здесь2 .
Печатные формы будут активны при снятом флаге "безопасный режим".
Код процедур
Процедура Документы(СписокОбъектов)
Для Каждого Мета из Метаданные.Документы ЦИкл
Расширение = мета.РасширениеКонфигурации();
Если Расширение =неопределено тогда
иначе
НовСтр = СписокОбъектов.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр,Мета);
НовСтр.вид = "Документ";
НовСтр.ИмяРасширения = Расширение.Имя;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СписокОбъектовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтрокаЭлементы = Новый Структура;
СтрокаЭлементы.Вставить("Вид",Элемент.ТекущиеДанные.вид );
СтрокаЭлементы.Вставить("Имя",Элемент.ТекущиеДанные.Имя );
СтандартнаяОбработка = ложь;
СтрокаЗапуска = "";
Если СтрокаЭлементы.вид = "Справочник" Тогда
СтрокаЗапуска = "Справочник." +Элемент.ТекущиеДанные.Имя +".ФормаСписка";
ИначеЕсли СтрокаЭлементы.вид = "Документ" тогда
СтрокаЗапуска = "Документ." +Элемент.ТекущиеДанные.Имя +".ФормаСписка";
ИначеЕсли СтрокаЭлементы.вид = "Регистры Сведений" тогда
СтрокаЗапуска = "РегистрСведений." +Элемент.ТекущиеДанные.Имя +".ФормаСписка";
ИначеЕсли СтрокаЭлементы.вид = "Регистры Накопления" тогда
СтрокаЗапуска = "РегистрНакопления." +Элемент.ТекущиеДанные.Имя +".ФормаСписка";
ИначеЕсли СтрокаЭлементы.вид = "Отчёт" тогда
СтрокаЗапуска = "Отчет." +Элемент.ТекущиеДанные.Имя +".Форма";
ИначеЕсли СтрокаЭлементы.вид = "Обработка" тогда
СтрокаЗапуска = "Обработка." +Элемент.ТекущиеДанные.Имя +".Форма";
КонецЕсли;
ОткрытьФорму(СтрокаЗапуска);
КонецПроцедуры
Кнопки меню делаются программно. Имя элемента меню должно совпадать с именем в конфигурации. Делается несколько команд без назначенных процедур.
Программное создание команд к кнопке
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Сч= 10000; // Создаём кнопки меню
ДЛя Каждого Эл Из Элементы цикл
// проверять кнопку, чтобы только нужные
Если ТипЗнч(Эл) = Тип("КнопкаФормы") и ЗначениеЗаполнено(Эл.Заголовок) Тогда
Сч= Сч + 1;
ИмяКоманды = "Команда"+Формат(Сч,"ЧГ=0");
Команда = ЭтаФорма.Команды.Добавить(ИмяКоманды); // уникальные названия нужны
Команда.Действие = "ОткрытьОбъектКонфигурации";
Команда.Заголовок = Эл.Имя;
Если Эл.ИмяКоманды = "ОткрытьДокумент" Тогда
Команда.Подсказка = "Документ";
Эл.ИмяКоманды = ИмяКоманды;
ИначеЕсли Эл.ИмяКоманды = "ОткрытьСправочник" Тогда
Команда.Подсказка = "Справочник";
Эл.ИмяКоманды = ИмяКоманды;
ИначеЕсли Эл.ИмяКоманды = "ОткрытьРегистрСведений" Тогда
Команда.Подсказка = "РегистрСведений";
Эл.ИмяКоманды = ИмяКоманды;
ИначеЕсли Эл.ИмяКоманды = "ОткрытьРегистрНакопления" Тогда
Команда.Подсказка = "РегистрНакопления";
Эл.ИмяКоманды = ИмяКоманды;
ИначеЕсли Эл.ИмяКоманды = "ОткрытьОтчет" Тогда
Команда.Подсказка = "Отчет";
Эл.ИмяКоманды = ИмяКоманды;
ИначеЕсли Эл.ИмяКоманды = "ОткрытьОбработка" Тогда
Команда.Подсказка = "Обработка";
Эл.ИмяКоманды = ИмяКоманды;
иначе // другая команда, не нужно действие
ЭтаФорма.Команды.Удалить(Команда);
КонецЕсли;
//Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьОбъектКонфигурации(Команда) // Для меню
СтрокаЗапуска ="";
ОткрытьОбъектКонфигурацииНаСервере(Команда.Имя , СтрокаЗапуска);
ОткрытьФорму(СтрокаЗапуска);
КонецПроцедуры
&НаСервере
Процедура ОткрытьОбъектКонфигурацииНаСервере(Имя, СтрокаЗапуска) // Команда
Команда = ЭтаФорма.Команды[Имя];
СтрокаЗапуска = Команда.Подсказка+"." + Команда.Заголовок;
Если Команда.Подсказка = "Отчет" или Команда.Подсказка = "Обработка" ТОгда
СтрокаЗапуска = СтрокаЗапуска + ".Форма" ;
иначе
СтрокаЗапуска = СтрокаЗапуска + ".ФормаСписка" ;
КонецЕсли;
КонецПроцедуры
Контактная информация автора есть в обработке в модуле объекта и справке.
Сделано в виде обработки и расширения. В расширении "рабочий стол" автоматически открывается.
Проверялось на "обычных формах" и управляемых. На конфигурациях БП, ЗУП , БСП
8.3.15 и 8.3.17.