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

20.03.12

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

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

Скачать файлы

Наименование Файл Версия Размер
ОтладкаКода
.epf 5,10Kb
108
.epf 5,10Kb 108 Скачать

 Лучше пол часа потерять, а потом за 5 минут долететь.


При кодировании и отладке часто нужно проверять код на реальных данных и просмотр результата что получилось. Получается

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

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

Вот пример

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

Я  используя обёртку. Код процедуры ниже.

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

 

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

Вот простой пример использования.

Есть процедура печати в модуля формы документа:

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

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

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

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

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

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

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


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

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

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

В модуле документа меняем код процедуры

 

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


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

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

В модуле отладки обработки меняем только строку

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

Теперь отлаживаем код быстро и легко, исправляем код, сохраняем обработку, кнопка печать. 

Перенос кода происходит тоже быстро Ctrl + Н ( Замена) удаляем все вхождения «_ ЭтотОбъект .»

 

Вот пример моего модуля (из файлов ОтладкаКода.epf). Процедуру ОтладитьКодВВнешняяОбработка необходимов вынести в общий модуль.

///////////////////////////////////////////////////////////////////////////////
// ОТЛАДКА КОДА
// Эта обработка предназначена для отладки кода
// Created by Куришко Андрей, //infostart.ru/profile/21352/

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

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

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

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

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

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

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

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

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

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

КонецФункции
// ОтладитьКод

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

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

    Попытка

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

    Исключение

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

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

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

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

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

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

    Попытка

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

    Исключение

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

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

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

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

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

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

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


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

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



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

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



См. также

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    121630    670    389    

711

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7266    21    6    

39

SALE! 20%

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

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

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

10000 8000 руб.

10.11.2023    3512    11    1    

33

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177729    1073    0    

849

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

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

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

5000 руб.

07.02.2018    99342    239    97    

296

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

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

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

3000 руб.

27.08.2019    18104    6    8    

39

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

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

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

2040 руб.

27.12.2017    28099    3    10    

15

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

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

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

2400 руб.

24.09.2019    23598    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. w22u 30 20.03.12 23:19 Сейчас в теме
Сразу вспомнилось #ЗагрузитьИзФайла TEXT.TXT в 1С 7.7
2. boggonzikov 339 20.03.12 23:28 Сейчас в теме
(1) w22u,
Аналогично, можно делать через "Выполнить(ТекстКода)".
Но плюс этого способа, в отладке можешь пошагово анализировать код.
Рамзес; +1 Ответить
3. mtv:) 1027 21.03.12 05:32 Сейчас в теме
(0) Спасибо за идею, понравилась.
4. bol 7 21.03.12 06:32 Сейчас в теме
5. bulpi 215 21.03.12 10:10 Сейчас в теме
Уважаемый автор! Представьте, что Вы- это не Вы , такой умный, а простой читатель Инфостарта. Такая вот актерская разминка. Внимательно почитайте эту публикацию. Как я . Один раз, второй, третий.... Вы хоть что-нибудь поняли ?
Впрочем, судя по плюсам, это я такой глупый...
6. AndreyNit 59 21.03.12 11:07 Сейчас в теме
Полностью согласен с автором, спасибо. Возьму на вооружение.
7. i132 122 21.03.12 11:28 Сейчас в теме
В вызов внешней процедуры стоит добавить проверку существования файла внешней обработки:

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

Если вдруг забудите удалить этот вызов из рабочей базы - у пользователей файл не найдется и процедура выполнится в обычном режиме.
boggonzikov; +1 Ответить
8. Sergey___ 61 21.03.12 11:57 Сейчас в теме
Полезно. Спасибо. Автору плюс.
9. sergb1979 21.03.12 12:12 Сейчас в теме
а В планах обмена при конвертации можно это использовать?
10. boggonzikov 339 21.03.12 12:31 Сейчас в теме
(9) sergb1979,
Не понятно что ты имеешь ввиду.
11. sergb1979 21.03.12 12:42 Сейчас в теме
(10) Сории что не изучил до конца, вопрос. Это интерактивная отладка. Иногда требуется отладка в конвертации данных
12. i132 122 21.03.12 13:29 Сейчас в теме
(9) конечно! в правилах конвертации добавляешь подключаемые обработки, например БиблиотекаВыгрузки

а в обработчке перед выгрузкой данных пишешь:

ФайлОбработки = Новый Файл("U:\ConvData\ExtForms\БиблиотекаВыгрузки.epf");
Если ФайлОбработки.Существует() Тогда
; ДопОбработки.БиблиотекаВыгрузки=ВнешниеОбработки.Создать(ФайлОбработки.ПолноеИмя);
КонецЕсли;

В правилах конвертации прописать вызывы функциий из обработоки.
после отладки-изменний обработки -не забыть загрузить изменненную обработку.
sergb1979; +1 Ответить
13. sergb1979 21.03.12 13:33 Сейчас в теме
(12) i132, Вот это я и хотел понять, просто не четко выразился.
14. Арчибальд 2706 21.03.12 14:24 Сейчас в теме
Я противник такого подхода. Свою позицию изложил в 49-м комменте к http://infostart.ru/public/121283/
15. boggonzikov 339 21.03.12 14:57 Сейчас в теме
(14) Арчибальд,
В твоих словах есть разумное зерно. Согласен, что многие сейчас пишут снизу в вверх, не задумываясь про структуру логику, только лепя запладки. Но для разных случаев есть свои инструменты.
Пример: тебе дают сложный написанный не тобой код, ну так на 3 экрана )). По твоему способу я должен медитировать над кодом, чтобы понять как он работает, и прозрев исправить или дописать 2-е свои строчки.
17. larisab 160 21.03.12 16:14 Сейчас в теме
(15)
По твоему способу я должен медитировать над кодом, чтобы понять как он работает, и прозрев исправить или дописать 2-е свои строчки

Да, должен. Этому учат на курсах по конфигурированию в типовых решениях.
По большому счету спец должен понимать код без всяких отладчиков, хотя он ускоряет понимание, да :)
МимохожийОднако; +1 Ответить
18. Boroda 90 21.03.12 18:57 Сейчас в теме
(17) Иногда некогда понимать, кужно сделать, и сделать быстро. Грубо говоря, выдать быстро "на гора" продукцию. Вот здесь-то и пригодится этот приём. Да и понимается через отладчик лучше, тоже поможет при изучении.
А насчёт того, чтобы стремиться "понимать код, как открытую книгу"... никто же и не спорит....
Bassgood; daho; +2 Ответить
20. daho 8 22.03.12 07:25 Сейчас в теме
(18) Boroda, Это точно... всегда на позавчера... незнаю ктобы бы мог сходу за 5 минут наварганить что-нибудь более-менее полезное на незнакомой да еще и доморощенной конфигурации, про которую пользователи не могут внятно что-либо сказать... максимум - поставили - работает...
25. awk 741 23.03.12 11:15 Сейчас в теме
(14) Арчибальд, Программирование - это процесс внесения ошибок, тестирование - процесс нахождения , а отладка - процесс их исправления. Тут не важны инструменты, тут важен процесс. Используешь ты отладчик или строишь в уме поведение программы - ты все равно занимаешься отладкой. А если бы я не встречал в 1С недокументированное поведение (1С 7.7 функция Окр(Число, Точность, Способ) какой способ не ставил, округляло одинаково), то наверное согласился бы, что ум лучше (просто он иногда незаменим).

(0) Вся статья - это идея что не перезагружая 1С отлаживать быстрее? Если так, то статью надо переписывать, а то за деревьями леса не видно.
CratosX; boggonzikov; Арчибальд; +3 Ответить
26. Арчибальд 2706 23.03.12 11:54 Сейчас в теме
(25)
просто он иногда незаменим
Зачет!
(23) Вот именно.
16. fromon 21.03.12 16:05 Сейчас в теме
Полезная фишка, беру на вооружение!
19. fixin 4252 21.03.12 21:12 Сейчас в теме
Гуру знают, а новичкам полезно....
21. aimerlive 22.03.12 08:43 Сейчас в теме
Считаю Публикацию весьма полезной. Потому что я считаю без отладчика весьма сложно в чем то разобраться особенно новичку. а через 50 лет то наверно да... буду намного меньше им пользоваться.
22. students 22.03.12 11:26 Сейчас в теме
Статья интересная. Но на мисте более подробно было написано про отладку.
23. Модератор раздела 22.03.12 15:38 Сейчас в теме
Профессионалы как раз редко пользуются отладчиком, только в исключительных случаях.
Сабжевый метод давно известен и удобен для простой доработки кода, а не только для отладки. Отладка здесь вторична.
24. ivm032 8 23.03.12 10:55 Сейчас в теме
интересная идея. Надо попробовать.
27. materiy_boec 23.03.12 17:51 Сейчас в теме
28. Psylocibine 24.03.12 08:11 Сейчас в теме
А есть какие нибудь удобные способы отладки обработок обслуживания торгового оборудования?
29. пользователь 24.03.12 09:18
Сообщение было скрыто модератором.
...
30. Yury1001 1470 26.03.12 15:20 Сейчас в теме
Зачётно, помнится на 7-ке так некоторые алгоритмы выносил чтобы править без выгона пользователей.
31. electronik 26.03.12 17:18 Сейчас в теме
32. AlexO 135 29.03.12 14:20 Сейчас в теме
Я не уловил всеобщего восхищения.
Если вся суть статьи - избавится от перегрузок 1с при отладке, то, например, для меня это не актуально - я сохраняю, переключаюсь в Предприятие, нахожу и открываю обработку в Предприятии - столько же времени, сколько идет запуск 1с:Предприятия из отладчика.
Если автор ответит внятно - поставлю плюс за просто улучшенный и автоматизированный код запуска внешней обработки "из кода".
Он нужен, но не в данной ситуации.
33. boggonzikov 339 29.03.12 22:48 Сейчас в теме
(32) AlexO,
Рекомендую внимательно прочитать публикацию, подумать, потом снова подумать, если не воскликнули алилуя снова подумать, не думая выполнить приведённый пример... и воскликнуть "алилуя". Поставить плюс или же минус.
34. dymkis 07.04.12 00:25 Сейчас в теме
Автор молодец хотя бы потому, что акцентировал внимание на возможности сэкономить время, которого и так катастрофически не хватает.
35. papami 55 10.04.12 09:19 Сейчас в теме
Отличная идея. Берем на вооружение!
36. i132 122 28.04.12 19:48 Сейчас в теме
Еще одна хитрость при отладке обрабток данных -- создать отчет который отслеживает измененние данных.
Пример: http://infostart.ru/public/98910/ -- Достаточно при создании объекта подключить обработчик ЛогИзменений.РегистрироватьИзменения(Док), момент/место когда объект записывают отчет найдет сам.
Когда обработка завершена вызвать отчет изменений.
boggonzikov; +1 Ответить
Оставьте свое сообщение