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

20.03.12

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ОтладкаКода
.epf 5,10Kb
108
108 Скачать (1 SM) Купить за 1 850 руб.

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


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

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

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

Вот пример

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

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

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

 

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

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

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

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

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

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

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

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

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

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


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

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

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

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

 

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


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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Попытка

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

    Исключение

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

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

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

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

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

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

    Попытка

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

    Исключение

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

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

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

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

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

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

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


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

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



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

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



См. также

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

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

12000 руб.

02.09.2020    171733    960    403    

924

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14290    108    46    

108

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27258    96    48    

137

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

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

22200 руб.

06.10.2023    17264    43    15    

75

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

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

15000 руб.

10.11.2023    11888    45    27    

67

SALE! %

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

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

4800 3840 руб.

14.01.2013    191170    1152    0    

920

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1114    2    0    

5

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

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

5000 руб.

07.02.2018    104115    244    100    

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

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

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

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

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

В правилах конвертации прописать вызывы функциий из обработоки.
после отладки-изменний обработки -не забыть загрузить изменненную обработку.
sergb1979; +1 Ответить
13. sergb1979 21.03.12 13:33 Сейчас в теме
(12) i132, Вот это я и хотел понять, просто не четко выразился.
14. Арчибальд 2709 21.03.12 14:24 Сейчас в теме
Я противник такого подхода. Свою позицию изложил в 49-м комменте к http://infostart.ru/public/121283/
15. boggonzikov 343 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 745 23.03.12 11:15 Сейчас в теме
(14) Арчибальд, Программирование - это процесс внесения ошибок, тестирование - процесс нахождения , а отладка - процесс их исправления. Тут не важны инструменты, тут важен процесс. Используешь ты отладчик или строишь в уме поведение программы - ты все равно занимаешься отладкой. А если бы я не встречал в 1С недокументированное поведение (1С 7.7 функция Окр(Число, Точность, Способ) какой способ не ставил, округляло одинаково), то наверное согласился бы, что ум лучше (просто он иногда незаменим).

(0) Вся статья - это идея что не перезагружая 1С отлаживать быстрее? Если так, то статью надо переписывать, а то за деревьями леса не видно.
CratosX; boggonzikov; Арчибальд; +3 Ответить
26. Арчибальд 2709 23.03.12 11:54 Сейчас в теме
(25)
просто он иногда незаменим
Зачет!
(23) Вот именно.
16. fromon 21.03.12 16:05 Сейчас в теме
Полезная фишка, беру на вооружение!
19. fixin 4277 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 1472 26.03.12 15:20 Сейчас в теме
Зачётно, помнится на 7-ке так некоторые алгоритмы выносил чтобы править без выгона пользователей.
31. electronik 26.03.12 17:18 Сейчас в теме
32. AlexO 136 29.03.12 14:20 Сейчас в теме
Я не уловил всеобщего восхищения.
Если вся суть статьи - избавится от перегрузок 1с при отладке, то, например, для меня это не актуально - я сохраняю, переключаюсь в Предприятие, нахожу и открываю обработку в Предприятии - столько же времени, сколько идет запуск 1с:Предприятия из отладчика.
Если автор ответит внятно - поставлю плюс за просто улучшенный и автоматизированный код запуска внешней обработки "из кода".
Он нужен, но не в данной ситуации.
33. boggonzikov 343 29.03.12 22:48 Сейчас в теме
(32) AlexO,
Рекомендую внимательно прочитать публикацию, подумать, потом снова подумать, если не воскликнули алилуя снова подумать, не думая выполнить приведённый пример... и воскликнуть "алилуя". Поставить плюс или же минус.
34. dymkis 07.04.12 00:25 Сейчас в теме
Автор молодец хотя бы потому, что акцентировал внимание на возможности сэкономить время, которого и так катастрофически не хватает.
35. papami 56 10.04.12 09:19 Сейчас в теме
Отличная идея. Берем на вооружение!
36. i132 123 28.04.12 19:48 Сейчас в теме
Еще одна хитрость при отладке обрабток данных -- создать отчет который отслеживает измененние данных.
Пример: http://infostart.ru/public/98910/ -- Достаточно при создании объекта подключить обработчик ЛогИзменений.РегистрироватьИзменения(Док), момент/место когда объект записывают отчет найдет сам.
Когда обработка завершена вызвать отчет изменений.
boggonzikov; +1 Ответить
37. programmer_87 20.09.24 14:04 Сейчас в теме
Классная идея! Автору большое спасибо!!
Оставьте свое сообщение