Быстрая доработка и отладка "обычных" форм без перезапуска конфигуратора

31.10.16

Разработка - Инструментарий разработчика

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

Вместо постановки задачи

Я ленивый, просто супер ленивый! (надеюсь, потенциальные работодатели не читают Инфостарт).

Мне лень хранить лишнюю информацию в голове, ведь на это тоже уходит энергия. Мне лень удерживать в своей оперативной памяти внутреннюю реализацию какого-либо функционала: хочется сразу протестировать, отладить и высвободить память.

Чтобы доработать, например, форму документа, после реализации каждого логически завершенного блока мне нужно завершить предыдущую отладку, обновить конфигурацию, запустить 1С:Предприятие в режиме отладки, открыть меню операции, выбрать подменю документы, напечатать первые несколько символов имени документа (да, да… мне лень помнить состав меню), найти отлаживаемый документ (еще и номер помнить!). Как же мне лень!

Насколько же проще отлаживать внешние обработки:

  • Ctrl+S (сохранить)
  • Alt+Tab (перейти из конфигуратора в окно 1С предприятия)
  • Alt+A(Ф),1 (открыть последнюю обработку из меню «Файл»)

Решение: производить максимальное количество доработок, используя внешние обработки.

Приемы:

1. Быстрое редактирование и отладка формы документа (справочника)

2. Редактирование нескольких форм документов и произвольного общего модуля

3. Открытие формы документа или справочника, сохраненной в дополнительных внешних отчетах

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

Тестирование отладка перезапуск

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122171    670    389    

714

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 15300 руб.

06.10.2023    7294    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8000 руб.

10.11.2023    3541    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177753    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99347    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18116    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28110    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23604    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. json 3297 01.11.16 09:37 Сейчас в теме
Уберите мои фамилию и имя из текста статьи
2. wojwoo 71 01.11.16 10:11 Сейчас в теме
3. kuzyara 1900 02.11.16 09:22 Сейчас в теме
4. artbear 1448 02.11.16 20:09 Сейчас в теме
А потом появляется соблазн все навечно и оставить во внешних обработках :(
roma_semenov79; wojwoo; +2 Ответить
5. wojwoo 71 03.11.16 09:21 Сейчас в теме
(4) artbear,
Согласен, если с этим соблазном не бороться и навечно оставлять доработанный функционал в доп. обработках, конфигурация быстро превратиться в коллекцию заплаток.
6. Yashazz 4709 07.11.16 20:36 Сейчас в теме
Автор, наверное, думает, что он один такой супер-ленивый первооткрыватель. И те, кто за эту фигню ему наплюсил, тоже, вероятно, в восторге от новизны. Огорчу вас, господа: этот способ успешно применялся ещё 18 лет назад на тогдашних "клюшках". Вдобавок, тогда ещё была такая замечательная директива #ЗагрузитьИзФайла, удобная штука... Так что, увы, ничего нового.
7. wojwoo 71 08.11.16 09:39 Сейчас в теме
(6) Yashazz,
Как раз потеря восьмеркой данной директивы рождают идеи у топовых авторов инфостарта реализовывать в модулях конфигурации следующий сценарий:
#ifndef DEBUG
Debugger.Foo();
#endif
Foo();

Где Debugger – встроенная обработка, которая «дергает» внешнюю.

Вместо раздутого комментария к описанной статье родилась данная.

То, что очевидно для вас или меня, не означает, что это очевидно всем. Некоторые просто не ставили себе подобной задачи.

Видя успех статьи (26 плюсов за 3 дня), решил добавить забавную картинку и наивное описание задачи. Вероятно, я хреновый маркетолог )))
8. webester 26 15.12.16 08:24 Сейчас в теме
Чтобы доработать, например, форму документа, после реализации каждого логически завершенного блока мне нужно завершить предыдущую отладку, обновить конфигурацию, запустить 1С:Предприятие в режиме отладки

Я один не понял, зачем перезапускать конфигуратор?
9. spacecraft 15.12.16 08:55 Сейчас в теме
(8) и где там про перезапуск конфигуратора?
10. webester 26 15.12.16 09:15 Сейчас в теме
(9)Да собственно жирными буквами в заголовке и в описании http://i.imgur.com/sNAGCIQ.png
11. spacecraft 15.12.16 10:54 Сейчас в теме
(10) ясно. Я анализировал цитату.
Оставьте свое сообщение