Лучше пол часа потерять, а потом за 5 минут долететь.
При кодировании и отладке часто нужно проверять код на реальных данных и просмотр результата что получилось. Получается
- Пишем код.
- Запускаем 1С в режиме отладке (F5) после правки кода.
- Воспроизводим случай отладки/тестирования. (например: открываем документы, жмякаем на кнопку печать и т.д. ).
- Проверяем код.
При этом очень часто открытие данных для анализа (пункт 3), может занимать продолжительное время. Можно исключить пункт 2 и 3 используя вынос кода процедуры во внешнюю обработку.
Вот пример
Отладка = ВнешниеОбработки.Создать("ПУТЬ К ОБРАБОТКЕ");
Отладка.ИМЯ_ПРОЦЕДУРЫ(Параметр1, Параметр2, Параметр3);
Я используя обёртку. Код процедуры ниже.
ОтладитьКодВВнешняяОбработка("ПУТЬ К ОБРАБОТКЕ").
ИМЯ_ПРОЦЕДУРЫ(Параметр1, Параметр2, Параметр3);
Часто у меня получается: отлаживаешь код, думаешь сейчас быстренько поправлю, не буду выносить, и каждый раз поправил не много кода, запускаешь предприятие опять долго воспроизводишь и опять правишь, запускаешь… , и наконец выносишь, скорость правки существенно увеличивается.
Вот простой пример использования.
Есть процедура печати в модуля формы документа:
// Формирует печатную форму "Макет"
//
// Возвращаемое значение:
// сформированный табличный документ:
//
Функция ПечатьМакет() Экспорт
Макет = ПолучитьМакет("Макет");
Запрос = Новый запрос;
Запрос.Текст ="ВЫБРАТЬ
| Дата,
| Номер
|ИЗ
| Документ.Документ КАК Документ
|ГДЕ
| Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Документ", Ссылка);
ТабДок = Новый ТабличныйДокумент;
Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();
ТабДок.Вывести(Шапка);
Возврат ТабДок;
КонецФункции
Копируем код процедура из модуля документа в модуль обработки отладки.
В модуле документа меняем код процедуры
// Формирует печатную форму "Макет"
//
// Возвращаемое значение:
// сформированный табличный документ:
//
Функция ПечатьМакет() Экспорт
Возврат ОтладитьКодВВнешняяОбработка("ПУТЬ К ОБРАБОТКЕ", ЭтотОбъект).
ПечатьМакет();
КонецФункции
В модуле отладки обработки меняем только строку
Запрос.УстановитьПараметр("Документ", _ЭтотОбъект.Ссылка);
Теперь отлаживаем код быстро и легко, исправляем код, сохраняем обработку, кнопка печать.
Перенос кода происходит тоже быстро Ctrl + Н ( Замена) удаляем все вхождения «_ ЭтотОбъект .»
Вот пример моего модуля (из файлов ОтладкаКода.epf). Процедуру ОтладитьКодВВнешняяОбработка необходимов вынести в общий модуль.
///////////////////////////////////////////////////////////////////////////////
// ОТЛАДКА КОДА
// Эта обработка предназначена для отладки кода
// Created by Куришко Андрей, //infostart.ru/profile/21352/
////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
Перем _ЭтотОбъект Экспорт; // переменная объекта отладки.
Перем _ФормаОбъекта Экспорт; //переменная основной формы отладки.
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОТЛАДКА КОДА
// Функция предназначена для создания обработки отладки
//
// Параметры
// ИмяФайлаОтладки - Строка> - путь к текущему файлу
//
// ОбъектОтладки - ОбъектОтладки - Объект отладки
//
// ОсновнаяФорма - ОсновнаяФорма - Основная форма отладки
//
// КэшироватьОбработкуОтладки - Булево - признак кэширования внешней обработки отладки
// для ускорения работы при многократном использовании
// Возвращаемое значение:
//
Функция _ОтладитьКодВВнешняяОбработка(ИмяФайлаОтладки, ОбъектОтладки = Неопределено, ОсновнаяФорма = Неопределено, КэшироватьОбработкуОтладки = Ложь) Экспорт
ВнешняяОбработкаОтладки = Неопределено;
Если КэшироватьОбработкуОтладки Тогда
//для кэширования ищем ВнешняяОбработкаОтладки в ДополнительныеСвойства
ВнешняяОбработкаОтладки = НайтиОбработкаОтладкиВПеременнойОбъекте(ОбъектОтладки);
КонецЕсли;
Если ВнешняяОбработкаОтладки = Неопределено Тогда //создаем предмет отладки
ВнешняяОбработкаОтладки = ВнешниеОбработки.Создать(ИмяФайлаОтладки);
Если КэшироватьОбработкуОтладки Тогда
//попытка поместить ВнешняяОбработкаОтладким в ДополнительныеСвойства, для кэширования
Выполнено = ПоместитьОбработкаОтладкиВПеременнуюОбъект(ОбъектОтладки, ВнешняяОбработкаОтладки);
КонецЕсли;
КонецЕсли;
ВнешняяОбработкаОтладки._ЭтотОбъект = ОбъектОтладки;
ВнешняяОбработкаОтладки._ФормаОбъекта = ОсновнаяФорма;
Возврат ВнешняяОбработкаОтладки;
КонецФункции // ОтладитьКод
//
//
Функция НайтиОбработкаОтладкиВПеременнойОбъекте(ПеременнаяОбъект)
Если ПеременнаяОбъект = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Попытка
ДополнительныеСвойства = ПеременнаяОбъект.ДополнительныеСвойства;
Если ДополнительныеСвойства.Свойство("Отладка") Тогда
Возврат ДополнительныеСвойства.Отладка;
КонецЕсли;
Исключение
Возврат Неопределено;
КонецПопытки;
КонецФункции
//
//
Функция ПоместитьОбработкаОтладкиВПеременнуюОбъект(ПеременнаяОбъект, ОбработкаОтладки)
Выполнено = Ложь;
Если ПеременнаяОбъект = Неопределено Тогда
Возврат Выполнено;
КонецЕсли;
Попытка
ДополнительныеСвойства = ПеременнаяОбъект.ДополнительныеСвойства;
ДополнительныеСвойства.Вставить("Отладка", ОбработкаОтладки);
Выполнено = Истина;
Исключение
Возврат Выполнено;
КонецПопытки;
Возврат Выполнено;
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// ПРИМЕРЫ СОЗДАНИЯ ОБРАБОТКИ ОТЛАДКИ КОДА
//////////////////////////////////////////////////////////////////////////////
//ОтладитьКодВВнешняяОбработка("ПУТЬ К ОБРАБОТКЕ").
// ИМЯ_ПРОЦЕДУРЫ();
/////////////////////////////////////////////////////////////////////////////////
//Отладка = ВнешниеОбработки.Создать("ПУТЬ К ОБРАБОТКЕ");
//Отладка.ИМЯ_ПРОЦЕДУРЫ();
////////////////////////////////////////////////////////////////////////////////
// ОТЛАЖИВАЕМЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ОТЛАДКА КОДА
//
//
Процедура ИМЯ_ПРОЦЕДУРЫ() Экспорт
КонецПроцедуры // ИМЯ_ПРОЦЕДУРЫ()
// ОТЛАЖИВАЕМЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ОТЛАДКА КОДА
////////////////////////////////////////////////////////////////////////////////