Вместо постановки задачи
Я ленивый, просто супер ленивый! (надеюсь, потенциальные работодатели не читают Инфостарт).
Мне лень хранить лишнюю информацию в голове, ведь на это тоже уходит энергия. Мне лень удерживать в своей оперативной памяти внутреннюю реализацию какого-либо функционала: хочется сразу протестировать, отладить и высвободить память.
Чтобы доработать, например, форму документа, после реализации каждого логически завершенного блока мне нужно завершить предыдущую отладку, обновить конфигурацию, запустить 1С:Предприятие в режиме отладки, открыть меню операции, выбрать подменю документы, напечатать первые несколько символов имени документа (да, да… мне лень помнить состав меню), найти отлаживаемый документ (еще и номер помнить!). Как же мне лень!
Насколько же проще отлаживать внешние обработки:
- Ctrl+S (сохранить)
- Alt+Tab (перейти из конфигуратора в окно 1С предприятия)
- Alt+A(Ф),1 (открыть последнюю обработку из меню «Файл»)
Решение: производить максимальное количество доработок, используя внешние обработки.
Приемы:
1. Быстрое редактирование и отладка формы документа (справочника)
2. Редактирование нескольких форм документов и произвольного общего модуля
3. Открытие формы документа или справочника, сохраненной в дополнительных внешних отчетах
- Быстрое редактирование и отладка формы документа (справочника):
Самый простой вариант:
в случае если предполагается отладка на одном объекте, то просто копируем форму во внешнюю обработку, а в обработчике события «ПередОткрытием» формы прописываем всего 1 строчку, которую, естественно, нужно удалить перед возвратом формы в конфигурацию:ДокументОбъект = Документы.ИмяДокумента.НайтиПоНомеру("НомерДокумента", ТекущаяДата()).ПолучитьОбъект();
СправочникОбъект = Справочники.ИмяСправочника.НайтиПоКоду("Код").ПолучитьОбъект();
- Создаем внешнюю обработку.
- Копируем форму списка и форму документа (элемента) в обработку:
- Добавляем на форму документа (элемента) реквизит "Обработка":
- Для поля списка документа (справочника) реализуем обработчики событий ПередНачаломДобавления и ПередНачаломИзменения:
Процедура ДокументСписокПередНачаломДобавления(Элемент, Отказ, Копирование) Отказ = Истина; Форма = Обработка.ПолучитьФорму("ФормаДокумента"); Если Копирование Тогда Форма.ДокументОбъект = ЭлементыФормы.ДокументСписок.ТекущаяСтрока.Скопировать(); Иначе Форма.ДокументОбъект = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); КонецЕсли; Форма.Открыть(); КонецПроцедуры Процедура ДокументСписокПередНачаломИзменения(Элемент, Отказ) Отказ = Истина; Форма = Обработка.ПолучитьФорму("ФормаДокумента"); Форма.ДокументОбъект = ЭлементыФормы.ДокументСписок.ТекущаяСтрока.ПолучитьОбъект(); Форма.Открыть(); КонецПроцедуры
- Редактируем и отлаживаем форму документа (элемента) после чего возвращаем модуль формы обратно в конфигурацию или меняем форму целиком.
- Редактирование нескольких форм документов и произвольного общего модуля:
Для доработки нескольких форм документов или справочников копируем их формы во внешнюю обработку. Создаем основную форму обработки, из которой открываем модифицируемые формы.
При необходимости редактирования общего модуля – помещаем его в модуль обработки. В модулях форм меняем «имя общего модуля» на «имя общего модуля» + «суффикс» и добавляем реквизит формы (тип – внешняя обработка) с таким же именем.
Удобно при рефакторинге, выносе дублирующегося функционала форм в общий модуль.
- Создаем внешнюю обработку
- Копируем общий модуль в модуль обработки.
- Копируем 2 экземпляра каждой формы в обработку (одну для редактирования и резервную копию). Называем первую по имени объекта, вторую - имя объекта + "_bak":
- Добавляем на все формы реквизит с типом внешняя обработка и называем его ИмяОбщегоМодуля + "_Обработка":
- Меняем в модулях форм текст ИмяОбщегоМодуля + "." на ИмяОбщегоМодуля + "_Обработка.":
- Добавляем основную форму обработки, создаем поля ввода, соответствующие по наименованию именам форм. Реализуем для всех полей ввода общий обработчик события "Открытие":
Процедура ЭлементОткрытие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДокументСсылка = ЭтаФорма[Элемент.Имя]; Форма = ПолучитьФорму(Элемент.Имя); Форма.ДокументОбъект = ДокументСсылка.ПолучитьОбъект(); Форма.Открыть(); КонецПроцедуры
- Редактируем и отлаживаем формы документов (элемента) после чего возвращаем все обработано в конфигурацию, не забыв произвести обратную замену ИмяОбщегоМодуля + "_Обработка." на ИмяОбщегоМодуля + ".".
- Открытие формы документа или справочника, сохраненной в дополнительных внешних отчетах:
На этапе внедрения бывает удобно сохранить форму документа (справочника) в дополнительных внешних отчетах для максимально быстрой доработки формы без обновления конфигурации. Для этого достаточно заменить обработчик события "ПередОткрытием" формы в конфигурации.Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Отказ = Истина; СсылкаНаОбъект = Справочники.ВнешниеОбработки.ПолучитьСсылку(Новый УникальныйИдентификатор("e3e52588-8594-11e6-8cde-005056ab2498")); ИмяФайла = ПолучитьИмяВременногоФайла(); ДвоичныеДанные = СсылкаНаОбъект.ХранилищеВнешнейОбработки.Получить(); ДвоичныеДанные.Записать(ИмяФайла); ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяФайла); Форма = ВнешняяОбработка.ПолучитьФорму(); Форма.СправочникОбъект = ЭтаФорма.СправочникОбъект; Форма.Открыть(); КонецПроцедуры