Перейти к содержимому


Загрузил

Тема поддержки файла Информация

  • Загружен: Mar 02 2014 06:00
  • Последнее обновление: Mar 02 2014 06:00
  • Размер: 2.72К
  • Просмотров: 301
  • Скачан: 4
Услуги программиста 1С
Профессиональные программисты 1С.
Весь комплекс услуг сопровождения 1С.

Курсы 1С
Бухгалтерам, менеджерам
и программистам.
Бесплатно!
Живое индивидуальное обучение по 1С.

Хитрости отладки кода 1С

- - - - -



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

При кодировании и отладке часто нужно проверять код на реальных данных и просмотр результата что получилось.
Пишем код, запускаем 1С в режиме отладки (F5) после правки кода.
Воспроизводим случай отладки/тестирования (например: открываем документы, нажимаем на кнопку печать и т.д.).
Проверяем код.
При этом очень часто открытие данных для анализа (пункт 3), может занимать продолжительное время. Можно исключить пункт 2 и 3 используя вынос кода процедуры во внешнюю обработку.

Вот пример
Отладка = ВнешниеОбработки.Создать("ПУТЬ К ОБРАБОТКЕ");
Отладка.ИМЯ_ПРОЦЕДУРЫ(Параметр1, Параметр2, Параметр3);

Можно использовать обертку. Код процедуры ниже.
ОтладитьКодВВнешняяОбработка("ПУТЬ К ОБРАБОТКЕ").
ИМЯ_ПРОЦЕДУРЫ(Параметр1, Параметр2, Параметр3);

Простой пример использования.
Есть процедура печати в модуля формы документа:
// Формирует печатную форму "Макет"
//
// Возвращаемое значение:
// сформированный табличный документ:
//
Функция ПечатьМакет() Экспорт

Макет = ПолучитьМакет("Макет");

Запрос = Новый запрос;
Запрос.Текст ="ВЫБРАТЬ
| Дата,
| Номер
|ИЗ
| Документ.Документ КАК Документ
|ГДЕ
| Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Документ", Ссылка);

ТабДок = Новый ТабличныйДокумент;

Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();

ТабДок.Вывести(Шапка);

Возврат ТабДок;

КонецФункции

Копируем код процедуры из модуля документа в модуль обработки отладки.
В модуле документа меняем код процедуры

// Формирует печатную форму "Макет"
//
// Возвращаемое значение:
// сформированный табличный документ:
//
Функция ПечатьМакет() Экспорт

Возврат ОтладитьКодВВнешняяОбработка("ПУТЬ К ОБРАБОТКЕ", ЭтотОбъект).
ПечатьМакет();

КонецФункции

В модуле отладки обработки меняем только строку
Запрос.УстановитьПараметр("Документ", _ЭтотОбъект.Ссылка);
Теперь отлаживаем код быстро и легко, исправляем код, сохраняем обработку, кнопка печать.
Перенос кода происходит тоже быстро Ctrl + Н ( Замена) удаляем все вхождения «_ ЭтотОбъект .»
Вот пример моего модуля (из файлов ОтладкаКода.epf). Процедуру ОтладитьКодВВнешняяОбработка необходимов вынести в общий модуль.

////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ

Перем _ЭтотОбъект Экспорт; // переменная объекта отладки.
Перем _ФормаОбъекта Экспорт; //переменная основной формы отладки.

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОТЛАДКА КОДА

// Функция предназначена для создания обработки отладки
//
// Параметры
// ИмяФайлаОтладки - Строка> - путь к текущему файлу
//
// ОбъектОтладки - ОбъектОтладки - Объект отладки
//
// ОсновнаяФорма - ОсновнаяФорма - Основная форма отладки
//
// КэшироватьОбработкуОтладки - Булево - признак кэширования внешней обработки отладки
// для ускорения работы при многократном использовании
// Возвращаемое значение:
//
Функция _ОтладитьКодВВнешняяОбработка(ИмяФайлаОтладки, ОбъектОтладки = Неопределено, ОсновнаяФорма = Неопределено, КэшироватьОбработкуОтладки = Ложь) Экспорт

ВнешняяОбработкаОтладки = Неопределено;

Если КэшироватьОбработкуОтладки Тогда
//для кэширования ищем ВнешняяОбработкаОтладки в ДополнительныеСвойства
ВнешняяОбработкаОтладки = НайтиОбработкаОтладкиВПеременнойОбъекте(ОбъектОтладки);
КонецЕсли;

Если ВнешняяОбработкаОтладки = Неопределено Тогда //создаем предмет отладки
ВнешняяОбработкаОтладки = ВнешниеОбработки.Создать(ИмяФайлаОтладки);

Если КэшироватьОбработкуОтладки Тогда
//попытка поместить ВнешняяОбработкаОтладким в ДополнительныеСвойства, для кэширования
Выполнено = ПоместитьОбработкаОтладкиВПеременнуюОбъект(ОбъектОтладки, ВнешняяОбработкаОтладки);
КонецЕсли;
КонецЕсли;

ВнешняяОбработкаОтладки._ЭтотОбъект = ОбъектОтладки;
ВнешняяОбработкаОтладки._ФормаОбъекта = ОсновнаяФорма;

Возврат ВнешняяОбработкаОтладки;

КонецФункции // ОтладитьКод
//
Функция НайтиОбработкаОтладкиВПеременнойОбъекте(ПеременнаяОбъект)

Если ПеременнаяОбъект = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;

Попытка

ДополнительныеСвойства = ПеременнаяОбъект.ДополнительныеСвойства;
Если ДополнительныеСвойства.Свойство("Отладка") Тогда
Возврат ДополнительныеСвойства.Отладка;
КонецЕсли;

Исключение

Возврат Неопределено;

КонецПопытки;

КонецФункции
//
Функция ПоместитьОбработкаОтладкиВПеременнуюОбъект(ПеременнаяОбъект, ОбработкаОтладки)

Выполнено = Ложь;

Если ПеременнаяОбъект = Неопределено Тогда
Возврат Выполнено;
КонецЕсли;

Попытка

ДополнительныеСвойства = ПеременнаяОбъект.ДополнительныеСвойства;
ДополнительныеСвойства.Вставить("Отладка", ОбработкаОтладки);
Выполнено = Истина;

Исключение

Возврат Выполнено;

КонецПопытки;

Возврат Выполнено;

КонецФункции

////////////////////////////////////////////////////////////////////////////////
// ПРИМЕРЫ СОЗДАНИЯ ОБРАБОТКИ ОТЛАДКИ КОДА

//////////////////////////////////////////////////////////////////////////////
//ОтладитьКодВВнешняяОбработка("ПУТЬ К ОБРАБОТКЕ").
// ИМЯ_ПРОЦЕДУРЫ();

/////////////////////////////////////////////////////////////////////////////////
//Отладка = ВнешниеОбработки.Создать("ПУТЬ К ОБРАБОТКЕ");
//Отладка.ИМЯ_ПРОЦЕДУРЫ();


////////////////////////////////////////////////////////////////////////////////
// ОТЛАЖИВАЕМЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ОТЛАДКА КОДА

Процедура ИМЯ_ПРОЦЕДУРЫ() Экспорт

КонецПроцедуры // ИМЯ_ПРОЦЕДУРЫ()



Администрация не несет ответственности за возможный вред, причиненный этим материалом.





  • 8618 Всего файлов
  • 9 Всего категорий
  • 45 Всего авторов
  • 22868 Всего загрузок
  • Акт списания ТМЦ Последний файл
  • kozavva Последний автор

8 посетителей за последние 15 минут

0 пользователей, 7 гостей, 0 анонимных


Yandex (1)