gifts2017

Простая отладка внешних обработок

Опубликовал Денис Vvv (EvilDoc) в раздел Программирование - Практика программирования

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

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

НачатьОтладку = ОбщегоНазначения.ЭтоСсылка(ТипЗнч("123"));

По пунктам:

1. Добавляем код вызова функции из общего модуля в начало выполнения кода внешней обработки

При запуске внешней обработки или печатной формы (из справочника внешние обработки) 1С создает временный файл с обработкой, чтобы до него добраться в конфигураторе нам нужно перейти в неё (обработку) откуда-то из конфигурации.

2. Ставим точку останова в общем модуле ОбщегоНазначения перед выходом из функции ЭтоСсылка

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

3. Запускаем обработку


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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Василий Казьмин (awk) 22.10.13 18:16
Круто! А изменения внесенные в обработку то же сами погрузятся или все равно нужно выгружать-загружать?

Может все-таки допилить хранилище внешних обработок на предмет наличия отладки?
2. Денис Vvv (EvilDoc) 22.10.13 21:49
я же писал - в помощь самым маленьким =)
3. Евгений Сосна (pumbaE) 22.10.13 23:48
4. Андрей Акулов (DrAku1a) 23.10.13 03:08
Для клиент-серверной базы, нужно чтобы процедура в общем модуле выполнялась на стороне клиента или сервер был переведен в режим отладки, иначе на точке останова этого останова не произойдет.
5. Александр Лапшин (zfilin) 23.10.13 05:38
(1) awk, А не надо вносить изменения. Явно только для отладки.
Конечно, если что-то долго писать и отлаживать, то не удобно. А если по-быстрому посмотреть "что делается", то пойдет.
6. Михаил Афанасьев (mikmike) 23.10.13 06:22
Это не панацея на все случаи жизни, но как еще один вариант - очень даже подойдет.
7. Николай (knigula) 23.10.13 07:42
Отличный вариант по-быстрому глянуть, что происходит внутри обработки.
8. Александр Гыдилика (Gida) 23.10.13 07:49
Очень неудобное решение! во-первых необходимо снимать конфигурацию с поддержки, что не всегда допустимо
во-вторых - гораздо проще в самой обработке вначале процедуры запихнуть какую-то ошибку в попытке, а в конфигураторе поставить останавливать по ошибке, таким образом меняете только саму обработку и больше ничего ;)
9. tixis1c tixis1c (qwed557) 23.10.13 08:39
(8) Gida, а зачем снимать с поддержки, вызывай любой существующий модуль и все. А по самой статье бред полный, что трудно выгрузить и посмотреть что делает обработка, еще и если дописывать придется то лишние телодвижеия получаются
10. Денис Vvv (EvilDoc) 23.10.13 09:16
(9) Сохранить изменения, обновить в справочнике внешних обработок - это как минимум 2 нажатия мышкой, не большая проблема, капля времени. Все же поможет проверить получение параметров, к примеру, что невозможно при методе рисования формы и выбора объекта в поле ввода.
(8) Внимательней читайте, ничего снимать с потдержки не надо =)
11. Евгений Сосна (pumbaE) 23.10.13 10:15
Почему-то 1Сники не используют всех возможностей конфигуратора... Я для отладки пользуюсь установкой параметров запуска, вызова исключения и остановки по ошибке.

Прикрепленные файлы:
NeviD; AndrewVVS; elian; CatMix; German; +5 1 Ответить 2
12. Владимир Руднев (rwn_driver) 23.10.13 11:59
В принципе проблемы отладки внешних обработок решаются через выгрузку в файл и запуск через "Файл-Открыть". Если обработка связана с каким-то документом или справочником, то достаточно ввести реквизит с нужным типом и вывести его на форму (для выбора), а в саму обработку встроить проверку получения параметра (для установки значения этого реквизита при вызове обработки из документа/справочника).
AJlEKCA; moreZ; +2 Ответить 3
13. Евгений Сосна (pumbaE) 23.10.13 12:31
(12) rwn_driver,
Для тех же печатных форм, обработок табличных частей и прочих внешних обработок будет удобно вести отладку таким образом, проверяя сразу взаимодействие с базой, а не рисовать форму обработки и открывать ее непосредственно
14. Fomix (fomix) 23.10.13 15:48
(11) pumbaE, Попробовал использовать для отладки доп.параметр как показано у автора на рисунке.
Ну,во-первых, для 8.2, чтобы отловить данный параметр, надо указывать в строке доп.параметров "/C debug;". Во-вторых, подключенную внешнюю обработку открыть для отладки форму обработки в конфигураторе таким образом не получилось! Возможно таким образом можно отлаживать только подключенные внешние печатные формы. Не пробовал... Хотя для этого можно ипользовать и более изящный способ!
15. Евгений Сосна (pumbaE) 23.10.13 16:17
(14) fomix,
1. попробуйте вместо "ПараметрыСеанса" указать "ПараметрЗапуска" .
Если (НЕ ПустаяСтрока(ПараметрЗапуска)) И (Найти(ПараметрЗапуска, "debug;") > 0) Тогда
  лСтрокаИсключения = "debugMode";
  ВызватьИсключение лСтрокаИсключения;
КонецЕсли;
...Показать Скрыть

2. В параметры запуска передается в режиме запуска Отладки, т.е. запускаете по F5 . Этот метод не подходит если хотите к чужому сеансу подключиться.
16. Денис Vvv (EvilDoc) 23.10.13 17:07
(15) Интересный способ, посмотрю на досуге =) Спасибо за интересный вариант
17. Петр (peterxx) 24.10.13 08:09
Для обработок - нормально. Для печатных форм лучше взять себе за правило создавать форму со ссылкой на обрабатываемый объект на ней. Дело минуты. И не нужно будет плясок с бубнами.
Designer1C; vladir; +2 Ответить 1
18. Марина Чирина (chmv) 24.10.13 08:55
Неправильное решение. Есть отладчики печатных форм
19. Евгений Сосна (pumbaE) 24.10.13 09:47
(17) peterxx, ссылочный объект составного типа - запаришься выбирать во время отладки.
(18) обязательно, только Отладчики печатных форм, отладчики заполнения ТЧ и т.д.
20. Денис Vvv (EvilDoc) 24.10.13 09:53
(18) Чего это неправильное? Вполне удобное. А про отладчики я ни чего не слышал. Статья ориентирована на "самых маленьких" чтобы упростить им их нелегкую долю. А мы с вами и без отладки напишем все что надо
21. Алексей Новиков (Новиков) 24.10.13 10:00
(14) fomix,
подключенную внешнюю обработку открыть для отладки форму обработки в конфигураторе таким образом не получилось!


Просто это фича. От одного релиза платформы к другому поведение платформы меняется. В каком то релизе этот трюк срабатывает, в каком-то - нет. В свое время, вдоволь помучавшись с отладкой (видимо как и автор), я юзал обработки отладки от Поручика. Потом, были какие-то и там сложности, но какие - не вспомню с лету. Сейчас совсем сурово отлаживаю - рисую форму и отткуда уже дергаю методы вызова из БСП. Так и отлаживаю в последнее время. Но Поручику за его помогалки все равно спасиба!
22. Марина Чирина (chmv) 25.10.13 09:46
Поищи отладчики на этом форуме. Очень удобно
23. Владимир Руднев (rwn_driver) 25.10.13 11:02
(12) rwn_driver,
А что нужно "рисовать"? Просто создать основную форму и вывести на неё единственный реквизит (с набором нужных типов) для выбора.
24. Павел Колмаков (Stim213) 28.10.13 12:12
как правило, для отладки достаточно добавить код, вызывающий ошибку, например
Выполнить("абра-кадабра") и включить в отладке остановку по ошибке.
1С сама откроет временный файл и отладка будет именно на этой строке. Которую, кстати, вы можете разместить непосредственно перед участком, который хотите отладить.
NeviD; RodinMax; veiuper; nickperel; Liily; LexSeIch; america2013; Rokov; pumbaE; CeHbKA; cleaner_it; +11 1 Ответить 2
25. Арсений Прялкин (CeHbKA) 29.10.13 09:56
(24) тоже пользуюсь методом ошибки :) но автор, всёравно, молодец ;)
26. Денис Vvv (EvilDoc) 29.10.13 10:28
(25) Спасибо =) Делюсь своим метобом просто =) Прост в исполнении и для понимания =)
27. m b (mbm) 31.10.13 00:03
Добавлю свои пять копеек ...

При разработке внешних печатных форм сразу в конец добавляю две строчки типа:

//СсылкаНаОбъект = Документы.РеализацияТоваровУслуг.ПолучитьФормуВыбора().ОткрытьМодально();
//Печать().Показать();

Подчеркнутое - поменяйте на нужное.
Если нужно отладить - достаточно раскомментарить эти строки и запустить как обычную обработку.
28. Денис Vvv (EvilDoc) 22.11.13 14:42
А что за метод ошибки? Просвятите плиз. Не в курсе просто. Из сообщений не понял ни чего
Анатолий50; +1 Ответить 1
29. mikhailovaew (mikhailovaew) 05.12.13 16:22
(28) имеется в виду то, что описано в посте (24) - засунуть явно ошибочное выражение в попытку-исключение.
30. Денис Vvv (EvilDoc) 06.12.13 10:21
31. Елена Смирнова (smielka) 23.12.14 22:42
32. Алекс Ю (AlexO) 16.03.15 09:51
(11) pumbaE,
Почему-то 1Сники не используют всех возможностей конфигуратора
Это не "возможность", это - фича, особеность работы конфигуратора.
(12) rwn_driver,
В принципе проблемы отладки внешних обработок решаются через выгрузку в файл и запуск через "Файл-Открыть".
Не всегда, и, тем более, не "в принципе". В УФ может отработать, а может - не отработать. Как недоплатформа 8.2-8.3 "захочет".
33. Олег Дмитров (baracuda) 03.07.15 16:38
Пробую САБЖ на 8.3.6. че то не получается, ничего не изменилось с тех пор??

В справочнике снешние обработки теперь появилась к кнопка ОТЛАДКА. Как ей пользоваться?
34. Олег Дмитров (baracuda) 04.07.15 11:53
Пожалуй вот самый оптимальный вариант, если САБЖ не подходит.
http://www.obrabotki.com/otladka-bsp-1s/
35. Денис Vvv (EvilDoc) 06.07.15 00:05
8.3.6 - проверил - работает. Соответственно нужна либо клиентская процедура в общем модуле, либо файловая база либо сервер 1с в режиме отладки (-debug)
36. Владимир Рютин (VovkaPutin) 21.07.15 11:45
Люди, делайте проще:

Поставить во внешней печатной форме в конце вызова любой функции/процедуры любого Общего модуля Точку остановки, нажать F11 после остановки на ней.

Так платформа сама откроет отладку внешки. И это без необходимости писать "ВызватьИсключение", ставить остановки по ошибке и т. д...
37. Денис Vvv (EvilDoc) 06.08.15 21:18
(36) VovkaPutin, я о том же - только я не предлагаю искать функцию общего модуля - я предлагаю ее вызвать.
Ну и еще - если отладка на сервере не включена то все это только для клиентских функций обработки и в клиентской общем модуле ;)
38. Фантаев Сегрей (serg1983) 20.08.15 10:51
не работает ни одно ни другое.Подскажите пожалуйста для чего нужен режим отладки во в дополнительной обработке
39. Денис Vvv (EvilDoc) 21.08.15 16:13
(38) serg1983, Работает) У вас сервер в редиме отладки?
Поп оводу БСПшного механизма отладки внешних обработок - не подскажу - пока не доводилось сталкиваться
40. Фантаев Сегрей (serg1983) 25.08.15 13:23
Не совсем понимаю "сервер в режиме отладки". Ноутбук платформа 1с 8.3.5.1443 Конфигурация "Бухгалтерия предприятия 3.0" базовая. При остановке на ошибке останавливается на модуле конфигурации где открывает форму внешней обработке. В саму внешнюю обработку ни как не хочет вставать. Пробовал как в процедуре НаСервере так и НаКлиенте.
41. Денис Vvv (EvilDoc) 25.08.15 17:33
(40) serg1983, база файловая/серверная?
42. Денис Vvv (EvilDoc) 25.08.15 17:37
Ни когда неработал с базовой. Вы попадаете отладчиком в общий модуль? Шаг отладки делаемнажатием f11 (не f10). Сложно угадать почему у вас не получается - у меня все работает
43. lara (КРТЩ) 24.09.15 18:34
у меня не работает. то есть не заходит в обработку. пичаль
44. lara (КРТЩ) 24.09.15 18:35
(42) EvilDoc, ERP2.0 на выходе из процедуры F11 не попадает в обработку.
45. Денис Vvv (EvilDoc) 24.09.15 23:27
(44) КРТЩ, Можно подробнее? Файловая/серверная, сервер в режиме отладки или нет?
Какую процедуру и в каком общем модуле используете? Завтра днем проверю - только у меня ERP 2.1
46. lara (КРТЩ) 25.09.15 12:37
(45) EvilDoc, подробнее файловая 1С:ERP Управление предприятием 2.0 (2.0.10.115)
1С:Предприятие 8.3 (8.3.6.2152)
клиент без разницы
процедура ОМ ОбщегоНазначения ЭтоСсылка()
47. Дмитрий Петренко (WITUM) 01.10.15 12:45
1С:Предприятие 8.3 (8.3.6.2152)
тоже не работает метод

Останавливается в Функции общего назначения, нажимаю F11 ..... обработка проходит в обычном режиме
Не делает шага, не останавливается, а просто продолжает отработку.
48. Семён Павлюков (7OH) 09.02.16 18:05
Если я верно понимаю, то на платформе ниже 8.3.7 шагнуть из отладчика на клиенте внутрь внешнего файла на сервере невозможно (в виду того, что файл находится на другом компе).
UPSoft; zavyzka; +2 Ответить
49. Владимир Командровский (Wefast) 13.09.16 16:30
Что то я не пойму как мне отдалить внешнюю печатную форму для управляемых форм.
Где мне вызвать общий модуль, если никакой формы нет. А какой либо ф-ии события в модуле объекта нет.
50. Сергей Крайнов (ccserg) 18.10.16 14:03
чот нифига не работает у меня
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа