Отладка подключаемых обработок

Программирование - Практика программирования

139
На самом деле для этого не нужно ни изменять конфигурацию, ни пользоваться вспомогательной обработкой-отладчиком.. Все просто :)

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

Как показывает практика, этот метод хорош везде - в любой конфигурации, с любыми вызываевыми отчетами \ обработками..

Если работаете на серверной базе:

  • должна быть включена отладка сервера
  • кроме этого добавляем в предмет отладки фоновые задания (Конфигуратор => Отладка\Подключение\Автоматическое подключение\ поставить флаг "Фоновые задания")
  • а еще лучше так не делать, а воспользоваться параметром запуска "РежимОтладки" (Конфигуратор => Сервис\ Запуск 1С предприятия \ Основные \ ПараметрЗапуска, см. документацию к БСП Приложение 3. Доступные параметры запуска приложения) - тогда вызов доп. обработки не будет выполняться в фоне, что для отладки проще и лучше.

upd. 04.08.2018

Сегодня отлаживал получение настроек дополнительной обработки, и ее надо было несколько раз перезагружать в справочник, соотв. каждый раз комментировать вызовы неудобно. Придумал как упростить этот момент)

Процедура ОтлаживаемаяПроцедура(Параметр1, Параметр2 = Неопределено) Экспорт
	Адрес = "D:\Projects\МояОбработка.epf";
	Если Адрес <> ЭтотОбъект.ИспользуемоеИмяФайла Тогда
		обр = ВнешниеОбработки.Создать(Адрес, БезопасныйРежим());
		ЗаполнитьЗначенияСвойств(обр, ЭтотОбъект);
		обр.ОтлаживаемаяПроцедура(Параметр1, Параметр2);
		Возврат; 		
	КонецЕсли; 

    //...код...
КонецПроцедуры

 

139

См. также

Комментарии
Сортировка: Древо
1. davdykin 17 04.01.17 20:57 Сейчас в теме
Спасибо, познавательно.
2. capitan 624 07.01.17 12:41 Сейчас в теме
Посмотрел статью, подумал - зачем так сложно? :)
Если ваша обработка может просто стартовать с диска D:\ПроведениеДокументов.epf
так и стартуйте ее с диска и отлаживайте
В чем профит запихивания во внешние обработки ?

А проблема отладки внешних обработок в том, что они свои настройки хранят в базе.
Ее вы этим финтом не решаете
Isakov_Artem; ybatiaev; Alex_E; +3 2 Ответить
4. unichkin 989 07.01.17 23:06 Сейчас в теме
(2) (3)
Есть такая малость... Те параметры, которые передает этой самой обработке источник)) Через файл\открыть вы их не получите, разве что сами где-нибудь забьете. Кроме этого сама отладка ведется именно по контексту - открыл объект которому назначена обработка и выполняю команду... И сразу торможусь в конфигураторе на точке останова.И вижу весь отладочный контекст. Захотел - для одного объекта команду выполнил, захотел - для другого. ничего не перевыбирая, ничего не переписывая, а сразу. Больше возможностей для проверки.
yojeeg; Volchock; +2 Ответить
5. unichkin 989 07.01.17 23:07 Сейчас в теме
(2)
В чем профит запихивания во внешние обработки ?

Обращу ваше внимание на тему статьи - "Отладка дополнительных обработок БСП", а не просто внешних обработок. О профите от помещения в внешние обработки речи не идет. Если изначально делаем назначаемую\глобальную обработку для БСП - так будет проще отлаживать, чем через файл\открыть.
akor77; yojeeg; +2 Ответить
28. strange2007 132 27.02.18 04:44 Сейчас в теме
(5) Не проще. Создание обработки, это циклический процесс: Открыть, начать отладку, внести изменения, сохранить и переоткрыть заново.
Для быстрой и качественной отладки делается по одному шаблону для каждого вида (отчёт, заполнение ТЧ и т.д.) и всё. Можно вести разработку для обработок на БСП точно так же, как если бы разрабатывалась обычная обработка или обычный отчёт.
29. unichkin 989 27.02.18 10:26 Сейчас в теме
(28)
Для быстрой и качественной отладки делается по одному шаблону для каждого вида (отчёт, заполнение ТЧ и т.д.) и всё. Можно вести разработку для обработок на БСП точно так же, как если бы разрабатывалась обычная обработка или обычный отчёт.

Мне надоело что-то кому-то доказывать)) Если смотрели видео \ пробовали сами этот подход - то профит должен быть очевиден. Если не делали этого - то попробуйте. Ну, или работайте как вам больше нравится) В конце концов, если кому-то кажется правильным работать эмулируя окружение - это его дело.
30. strange2007 132 27.02.18 10:59 Сейчас в теме
(29) Не надо доказывать. Терпите, ведь это по сути "барахолка". Видео, это для многих круто, но не для всех. Проще говоря в работе видео никогда вообще не смотрю. Поэтому приходится как-то по косвенным признакам пытаться догадываться.
По поводу окружения не понял. Ведь в шаблонах создаёшь это самое окружение в виде параметров.
52. kadild 01.06.18 18:44 Сейчас в теме
(2)
так и стартуйте ее с диска и отлаживайте
Вы просто не понимаете разницу между внешними обработками и дополнительными обработками. Каким образов вы думаете отлаживать сохраненные параметры у прикрепленной обработки запуская его как внешний, а?
3. Alex_E 1832 07.01.17 13:17 Сейчас в теме
Всё, что можно запустить через Файл - Открыть отлаживается тупо и без выкрутасов.....
klaus38; docerman; strange2007; red80; user599011_nusmancrb; +5 Ответить
6. ok521 21 12.01.17 17:33 Сейчас в теме
Метод хороший, для отладки внешних печатных форм - то, что нужно. Позволяет цеплять обработку к нужному объекту без всяких дополнительных ухищрений. Подходит и для серверного метода, и для клиентского.
user627612_petroa; ni032mas; nagaitseff; +3 Ответить
7. pas 52 16.01.17 13:44 Сейчас в теме
Если в подключаемой обработке есть форма с командными кнопками, то отладчик не заходит в процедуры формы. Видимо, ваш код необходимо выполнять до захода в форму.
8. unichkin 989 18.01.17 15:57 Сейчас в теме
(7) надо понимать, откуда форма открывается. Тут ведь происходит точечная отладка - т.е. конкретный метод выполняем через внешнюю обработку. Ну переопределите открытие формы - в ПриОткрытии подключайте внешнюю обработку, открывайте ее форму, от исходной отказывайтесь. Все аналогично.
9. tormozit 4767 05.10.17 09:04 Сейчас в теме
В инструментах разработчика в вариантах Расширение и Подсистема есть инструмент "Отладка внешних обработок БСП". Он позволяет отлаживать внешние отчеты и обработки из справочника БСП в натуральном виде в заданном каталоге с минимумом манимпуляций.
Прикрепленные файлы:
mikeA; papche; kote; корум; unichkin; +5 Ответить
10. tormozit 4767 14.11.17 16:20 Сейчас в теме
(9) Обнаружил, что в БСП 2.4 изменился внутренний механизм работы с внутренними событиями. На нем я не нашел как заставить работать инструмент "Отладка внешних обработок БСП" из ИР (перенаправлять создание внешних обработок в файлы).
23. nagaitseff 21 20.02.18 12:13 Сейчас в теме
(9)
это очень хороший инструмент, но отладка работает в том случае, если инструменты разработчика внедрены в конфигурацию (это ответ разработчика инструментов)
24. tormozit 4767 20.02.18 13:03 Сейчас в теме
(23) Использовать эту возможность можно не только при внедрении в конфигурацию (вариант Подсистема), но и при подключении расширения конфигурации (вариант Расширение). А вот вариант Портативный действительно не позволяет использовать эту возможность. Я кстати есть разработчик подсистемы "Инструменты разработчика".
25. nagaitseff 21 20.02.18 14:58 Сейчас в теме
(24) Спасибо, про расширение не знал. Буду пользоваться. Инструмент то незаменимый!
11. binx 08.12.17 10:02 Сейчас в теме
я обычно создаю форму, создаю на ней реквизиты и поля для требуемых параметров. Отлаживаю потом переписываю на работу как доп. обработки.
немного это времени занимает.
ybatiaev; +1 Ответить
12. unichkin 989 08.12.17 15:31 Сейчас в теме
(11)
немного это времени занимает

- много. И оно не надо. При таком подходе вы лишены контекста разработки, отладка идет от эмуляции окружения.
kadild; kote; +2 Ответить
53. kadild 01.06.18 18:45 Сейчас в теме
(11) Чего?? Делать кучу телодвижений вместо пару строчек для вас не занимает много времени?))
13. binx 08.12.17 18:51 Сейчас в теме
контекста разработки я себя не лишаю, и время набить несколько параметров не проблема.
я не против вашего метода. Я делюсь своим.
14. unichkin 989 08.12.17 22:21 Сейчас в теме
(13) я понимаю) Но я против вашего, и делюсь этим) Поскольку сам проходил этот этап - и могу сказать, что это "идеальный газ". Отладка по контексту помогает выявить большое количество ошибок, о которых вы и не узнаете если будете все параметры эмулировать через отладочную форму. Конечно, все еще от конфы зависит, от ситуации. Но лично у меня скорость\качество разработки улучшились.
15. binx 09.12.17 10:59 Сейчас в теме
вопрос, ваш метод будет работать в клиент-серверном варианте?
17. unichkin 989 09.12.17 14:03 Сейчас в теме
16. binx 09.12.17 11:00 Сейчас в теме
И о каком контексте вы все время говорите кроме передаваемых в обработку параметров?
18. unichkin 989 09.12.17 14:07 Сейчас в теме
(16) Я имею в виду что запуск обработки \ отчета происходит по пользовательскому событию. Вы будете открывать обработку в режиме предприятия, забивать параметры, нажимать на кнопку. Я буду открывать документ, вызывать команду из его формы - все также, как делает пользователь. При этом мне не понадобится перезапускать 1С, или переоткрывать инициализирующую форму - у меня есть одна команда, например для заполнения табличной части. Я вызываю ее, при этом всю разработку веду в внешней обработке.
31. strange2007 132 27.02.18 11:00 Сейчас в теме
(18) один раз выбираю во внешней обработке нужный документ, ввожу имя ТЧ и всё, хоть запереоткрывайся, ничего выбирать не надо.
19. binx 09.12.17 17:48 Сейчас в теме
в клиент серверном варианте кто должна лежать обработка?
20. unichkin 989 09.12.17 20:35 Сейчас в теме
В каталоге, доступном пользователю 1С. На локальной машине с этим проблем обычно не возникает, если разнесены - сделайте шару.
21. johnnyshut23 09.12.17 22:30 Сейчас в теме
22. bsturtle 166 19.02.18 19:01 Сейчас в теме
Красиво, просто и понятно. спасибо. Будем использовать
26. kkv90 51 22.02.18 12:00 Сейчас в теме
27. spezc 484 26.02.18 12:46 Сейчас в теме
32. Gorec17 28.02.18 16:22 Сейчас в теме
33. it@contlog.ru 12.03.18 11:14 Сейчас в теме
Спасибо в моей задаче этот метод помог. Но единственно что нужно сохранить обработку на общем ресурсе который одинаково доступен как серверу так и отладчику с клиентом. если они разнесены на разные машины то путь к обработке должен быть через \\ , а если на одной то можно как в примере. Важно чтобы предприятие и конфигуратор открывали обработку с одним и тем-же путем.
34. unichkin 989 12.03.18 18:07 Сейчас в теме
(33) ну да, это мне кажется прозрачный момент
35. ccserg 54 19.03.18 15:04 Сейчас в теме
что то я не понял , как отладить не Печатную форму , а обработку заполнения ТЧ
и не понял зачем так тода извращаться если таким же способом можно Универсальную создать ? с выбором файла ?
36. unichkin 989 19.03.18 15:57 Сейчас в теме
(35)
и не понял зачем так тода извращаться если таким же способом можно Универсальную создать ? с выбором файла ?

Смотрите видео.. Все по аналогии. Профит:
- не надо делать лишних интерфейсов - работаем, повторяя пользовательский сценарий в 1С
- не надо эмулировать окружение (забивать параметры на форму)
- не надо использовать вспомогательные обработчики для отладки - я ими попользовался, и скорее бы такой подход назвал извращением, чем этот
37. ccserg 54 19.03.18 19:03 Сейчас в теме
(36)
в видео у вас Печатная форма , и процедура Печать в модуле обработки
у меня обработка ТЧ документа ,
в СведенияОВнешнейОбработке описана команда открытия допформы и все действия в модуле формы уже
не понятно куда в таком случае добавлять код который у вас в процедуре Печать добавляется ?
38. unichkin 989 19.03.18 21:45 Сейчас в теме
(37)
не понятно куда в таком случае добавлять код который у вас в процедуре Печать добавляется ?

Дайте пример? Вообще, по-идее на форме должен быть только интерактив, а основные действия - в модуле объекта.
39. ccserg 54 20.03.18 06:58 Сейчас в теме
(38)вот к примеру эта обработка
https://infostart.ru/public/561065/
если надо могу её вам скинуть
вызывается форма , где указываются параметры , из формы они переносятся в документ
код в модуле обработки :
Функция СведенияОВнешнейОбработке() Экспорт
	Назначения = Новый Массив ;
	Назначения.Добавить("Документ.ТабельУчетаРабочегоВремени") ;
	
	ПараметрыРегистрации = Новый Структура ;
	ПараметрыРегистрации.Вставить("Вид","ЗаполнениеОбъекта");
	ПараметрыРегистрации.Вставить("Назначение",Назначения);
	ПараметрыРегистрации.Вставить("Наименование","Заполнить Сводно");
	ПараметрыРегистрации.Вставить("Версия","1.0");
	ПараметрыРегистрации.Вставить("Информация","Дополнительная обработка табличной части табеля");
	ПараметрыРегистрации.Вставить("БезопасныйРежим",Ложь); ///--отладка

	
	Команды = ПолучитьТаблицуКоманд() ;
	ДобавитьКоманду(Команды, "Заполнить сводно","ЗаполнитьДокумент","ОткрытиеФормы",Истина,) ;
	

	ПараметрыРегистрации.Вставить("Команды",Команды) ;
	

	Возврат ПараметрыРегистрации;

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

Показать

остальной код в уже в форме
40. unichkin 989 20.03.18 11:52 Сейчас в теме
(39)
ОткрытиеФормы

Как я думал - обвал по архитектуре. Таблицу необходимо заполнять на сервере. Саму таблицу - в табличную часть, заполняем ее на сервере, на клиенте отражаем результат заполнения. Серверный метод можно отладить, используя данный подход. Предупреждая вопросы - переносить алгоритм заполнения на сервер надо не ради отладки, а ради соблюдения ИТС, см. например Минимизация кода, выполняемого на клиенте.
Саму форму теоретически отладить можно, для этого надо сделать метод экспортным и переопределить открытие формы, открыв форму внешней обработки - однако у меня ни разу такой потребности не возникало.
41. ccserg 54 20.03.18 11:58 Сейчас в теме
(40)
как таблицу на сервере ? форма документа открыта на клиенте , зачем её на сервере заполнять
или я не понимаю что то ?
почитал по ссылке , там про сложные алгоритмы и ресурсы компа , это не важно абсолютно в моём случае
42. unichkin 989 20.03.18 12:21 Сейчас в теме
(41)
зачем её на сервере заполнять

- затем, что работа с таблицей формы в большинстве случаев может породить неявные вызовы сервера. Во-вторых - в принципе при разработке надо стремиться к тому чтобы на форме был только интерактив, весь служебный интерфейс необходимо разрабатывать на сервере -> в модуле объекта. Вы же совместили интерфейс с самим алгоритмом.
К сожалению, все обычно руководствуются правилом "что разрешено - то не запрещено". Почитайте статьи про рефакторинг, на ИС, возможно придете к этим-же выводам.
Не хочу здесь проводить код-ревью вашей обработки, много писать придется. Да вам оно, думаю и не надо)
43. ccserg 54 20.03.18 12:53 Сейчас в теме
(42)скорей всего и не надо , до управляемых форм все было отлично
как на эту ерунду (клиент/сервер) перешли так всё по другому стало ... а многим оно и не нужно
а я прикладные задачи решаю а не глобальные ...
и как вы заметили , кода прибавляется , зачем непонятно , когда тут простейшие алгоритмы
спасибо , может почитаю чего нибудь в этом направлении

а у вас есть пример любой обработки с этим кодом ? поделитесь пожалуйста .
44. unichkin 989 20.03.18 14:16 Сейчас в теме
(43) Посмотрите примеры в БСП, вот демка для заполнения контрагентов
Прикрепленные файлы:
_ДемоЗаполнениеКонтрагентов.epf
54. SlavaKron 02.06.18 04:21 Сейчас в теме
(37) Отладить как клиентские так и серверные вызовы, достаточно перед самым запуском подключаемой команды открыть вашу обработку через "Файл->Открыть", потом закрыть и запустить команду. Всё выполнение будет передано этой обработке из файла (имя обработки, естественно, должно совпадать с именем объекта из справочника ДополнительныеОтчетыИОбработки). Версия БСП - 2.4.5.31
55. unichkin 989 02.06.18 16:16 Сейчас в теме
(54)
(37) Отладить как клиентские так и серверные вызовы, достаточно перед самым запуском подключаемой команды открыть вашу обработку через "Файл->Открыть", потом закрыть и запустить команду. Всё выполнение будет передано этой обработке из файла (имя обработки, естественно, должно совпадать с именем объекта из справочника ДополнительныеОтчетыИОбработки). Версия БСП - 2.4.5.31

Что-то не выходит у меня..
56. SlavaKron 02.06.18 17:41 Сейчас в теме
(55) Двоичные данные внешней обработки из файла должны полностью совпадать с двоичными данными из справочника. Поэтому при каждом изменении в файле, нужно загружать его в справочник.
Когда вы открываете файл обработки через меню Файл-Открыть, вы регистрируете ее Имя и, видимо, хеш-сумму, причем её ИспользуемоеИмяФайла - это файловый путь. Кода запускается команда подключенной обработки с таким же именем, проверяется ее хеш-сумма, и если она не совпадает, то ИспользуемоеИмяФайла заменяется на путь во временном хранилище, но если совпадает, ИспользуемоеИмяФайла не меняется и команда может быть отлажена в файле.
58. unichkin 989 03.06.18 00:28 Сейчас в теме
(56) Я насколько понял - вы говорите о обработке, которая после первого запуска создает 1С в временном файле. Она - да, существует до закрытия программы. Только это не отладка будет, а боль сплошная.
45. fanast2 18.04.18 13:47 Сейчас в теме
Метод прикольный, спору нет. Но только не работает у меня:

База на сервере, все сделал как в примере - отладка фоновых заданий, параметр запуска. На точки останова не тормозиться и все тут. Сообщения если оставлять, все выводит в правильном порядке. подскажите что еще попробовать можно
46. unichkin 989 18.04.18 16:06 Сейчас в теме
(45)
База на сервере, все сделал как в примере - отладка фоновых заданий, параметр запуска. На точки останова не тормозиться и все тут. Сообщения если оставлять, все выводит в правильном порядке. подскажите что еще попробовать можно

Отладка \ Подключение \ Подключенные предметы отладки - должны при запуске базы автоматически светится две строки. Тонкий клиент \ Сервер. Это есть?
47. fanast2 19.04.18 04:51 Сейчас в теме
(46) Да, есть. Платформа 8.3.10.2580. Еще один факт: пробую печатать - отладка не запускается. Следом открываю обработку через файл - открыть, нажимаю кнопку и ТОЖЕ НЕ ПОПАДАЮ В ОТЛАДКУ. В конфигураторе ставлю пробел, сохраняю, открываю - появляется отладка.
то есть смысл в том, что если нажать кнопку печать, то отладка отваливается от этого файла...?

обработка лежит на сетевом диске, он доступен ото всюду. путь тоже правильно написан
48. fanast2 19.04.18 05:26 Сейчас в теме
(47) Поставил точку останова в общем модуле, в который обращается моя обработка, поскольку точки останова в самой обработине не работали. И воуаля, мы зашли туда, F11, и выходим снова в обработку. Но только открылось другое окно (которое слева на картинке)

Как я понял проблемы была в букве сетевого диска и пути к обработке. Я открыл вот такую обработку N:\\*** а через общий модуль открылась обработка вот с таким путем \\192.168****\
Прикрепленные файлы:
49. unichkin 989 19.04.18 11:49 Сейчас в теме
(48)
Как я понял проблемы была в букве сетевого диска и пути к обработке. Я открыл вот такую обработку N:\\*** а через общий модуль открылась обработка вот с таким путем \\192.168****\

А, да, есть такое. Пути должны быть одинаковые.
50. ivamailh 31.05.18 17:45 Сейчас в теме
Отличное видео. Все сработало. Спасибо!
51. user705522_constantin_h 7 31.05.18 20:32 Сейчас в теме
57. pavelyar 02.06.18 18:04 Сейчас в теме
59. vpaoli 24 13.07.18 16:47 Сейчас в теме
ваше кино на ютубе не открывается. битая ссылка. хотя бы картинку добавили. ничего понять невозможно в такой статье.
60. user705522_constantin_h 7 13.07.18 17:27 Сейчас в теме
(59)У меня открылось https://www.youtube.com/watch?time_continue=21&v=5ffBzFNOSeM.
Проблемы с вашим интернетом.
61. vpaoli 24 13.07.18 17:54 Сейчас в теме
сорри.
это на моей работе ограничивают досступ к ютуб
Оставьте свое сообщение