Посмотрел статью, подумал - зачем так сложно? :)
Если ваша обработка может просто стартовать с диска D:\ПроведениеДокументов.epf
так и стартуйте ее с диска и отлаживайте
В чем профит запихивания во внешние обработки ?
А проблема отладки внешних обработок в том, что они свои настройки хранят в базе.
Ее вы этим финтом не решаете
(2) (3)
Есть такая малость... Те параметры, которые передает этой самой обработке источник)) Через файл\открыть вы их не получите, разве что сами где-нибудь забьете. Кроме этого сама отладка ведется именно по контексту - открыл объект которому назначена обработка и выполняю команду... И сразу торможусь в конфигураторе на точке останова.И вижу весь отладочный контекст. Захотел - для одного объекта команду выполнил, захотел - для другого. ничего не перевыбирая, ничего не переписывая, а сразу. Больше возможностей для проверки.
Обращу ваше внимание на тему статьи - "Отладка дополнительных обработок БСП", а не просто внешних обработок. О профите от помещения в внешние обработки речи не идет. Если изначально делаем назначаемую\глобальную обработку для БСП - так будет проще отлаживать, чем через файл\открыть.
(5) Не проще. Создание обработки, это циклический процесс: Открыть, начать отладку, внести изменения, сохранить и переоткрыть заново.
Для быстрой и качественной отладки делается по одному шаблону для каждого вида (отчёт, заполнение ТЧ и т.д.) и всё. Можно вести разработку для обработок на БСП точно так же, как если бы разрабатывалась обычная обработка или обычный отчёт.
Для быстрой и качественной отладки делается по одному шаблону для каждого вида (отчёт, заполнение ТЧ и т.д.) и всё. Можно вести разработку для обработок на БСП точно так же, как если бы разрабатывалась обычная обработка или обычный отчёт.
Мне надоело что-то кому-то доказывать)) Если смотрели видео \ пробовали сами этот подход - то профит должен быть очевиден. Если не делали этого - то попробуйте. Ну, или работайте как вам больше нравится) В конце концов, если кому-то кажется правильным работать эмулируя окружение - это его дело.
(29) Не надо доказывать. Терпите, ведь это по сути "барахолка". Видео, это для многих круто, но не для всех. Проще говоря в работе видео никогда вообще не смотрю. Поэтому приходится как-то по косвенным признакам пытаться догадываться.
По поводу окружения не понял. Ведь в шаблонах создаёшь это самое окружение в виде параметров.
Вы просто не понимаете разницу между внешними обработками и дополнительными обработками. Каким образов вы думаете отлаживать сохраненные параметры у прикрепленной обработки запуская его как внешний, а?
Метод хороший, для отладки внешних печатных форм - то, что нужно. Позволяет цеплять обработку к нужному объекту без всяких дополнительных ухищрений. Подходит и для серверного метода, и для клиентского.
Если в подключаемой обработке есть форма с командными кнопками, то отладчик не заходит в процедуры формы. Видимо, ваш код необходимо выполнять до захода в форму.
(7) надо понимать, откуда форма открывается. Тут ведь происходит точечная отладка - т.е. конкретный метод выполняем через внешнюю обработку. Ну переопределите открытие формы - в ПриОткрытии подключайте внешнюю обработку, открывайте ее форму, от исходной отказывайтесь. Все аналогично.
(8) а как быть если внешняя обработка заполнения таб. части с вызовом клиентского метода с формы?
Получить форму для обращения к экспортной процедуре "ВыполнитьКоманду" внешней обработки можно только в толстом клиенте. И получается что в этом варианте исполнения ваш метод не исполнить никак правильно?
(72) "Получить форму для обращения к экспортной процедуре "ВыполнитьКоманду" внешней обработки можно только в толстом клиенте. И получается что в этом варианте исполнения ваш метод не исполнить никак правильно?" - кстати, не уверен. Можно вроде и на тонком извратиться, только зачем? Соблюдайте негласные базовые правила - отделяйте основную логику от интерактива, и не будет возникать таких вопросов.
(74) "кстати, не уверен. Можно вроде и на тонком извратиться" - может и можно но в доступности ВнешниеОбработкиМенеджер
ПолучитьФорму только Толстый клиент, а по поводу соблюдать негласные правила... я же приводил пример общего модуля стандартных подсистем - т.е. так работают 99% всех типовых конфигураций и речь напомню об обработки заполнения таблицы формы - т.е. в конце концов мы работаем именно с интерфейсной частью. Так что тут все правила соблюдены.
Да и не об этом речь - смысл вопроса в том что перехватить исполнение кода по вашей методе мы можем только в модуле объекта и никак иначе - вот что я хотел уточнить, и как понял это именно так.
В инструментах разработчика в вариантах Расширение и Подсистема есть инструмент "Отладка внешних обработок БСП". Он позволяет отлаживать внешние отчеты и обработки из справочника БСП в натуральном виде в заданном каталоге с минимумом манимпуляций.
(9) Обнаружил, что в БСП 2.4 изменился внутренний механизм работы с внутренними событиями. На нем я не нашел как заставить работать инструмент "Отладка внешних обработок БСП" из ИР (перенаправлять создание внешних обработок в файлы).
(9)
это очень хороший инструмент, но отладка работает в том случае, если инструменты разработчика внедрены в конфигурацию (это ответ разработчика инструментов)
(23) Использовать эту возможность можно не только при внедрении в конфигурацию (вариант Подсистема), но и при подключении расширения конфигурации (вариант Расширение). А вот вариант Портативный действительно не позволяет использовать эту возможность. Я кстати есть разработчик подсистемы "Инструменты разработчика".
Опубликована новая версия универсального отладчика доп. обработок https://infostart.ru/public/916110 Это развитие метода, использованного в нашей более старой публикации, который позаимствовал (9)
я обычно создаю форму, создаю на ней реквизиты и поля для требуемых параметров. Отлаживаю потом переписываю на работу как доп. обработки.
немного это времени занимает.
(13) я понимаю) Но я против вашего, и делюсь этим) Поскольку сам проходил этот этап - и могу сказать, что это "идеальный газ". Отладка по контексту помогает выявить большое количество ошибок, о которых вы и не узнаете если будете все параметры эмулировать через отладочную форму. Конечно, все еще от конфы зависит, от ситуации. Но лично у меня скорость\качество разработки улучшились.
(16) Я имею в виду что запуск обработки \ отчета происходит по пользовательскому событию. Вы будете открывать обработку в режиме предприятия, забивать параметры, нажимать на кнопку. Я буду открывать документ, вызывать команду из его формы - все также, как делает пользователь. При этом мне не понадобится перезапускать 1С, или переоткрывать инициализирующую форму - у меня есть одна команда, например для заполнения табличной части. Я вызываю ее, при этом всю разработку веду в внешней обработке.
Спасибо в моей задаче этот метод помог. Но единственно что нужно сохранить обработку на общем ресурсе который одинаково доступен как серверу так и отладчику с клиентом. если они разнесены на разные машины то путь к обработке должен быть через \\ , а если на одной то можно как в примере. Важно чтобы предприятие и конфигуратор открывали обработку с одним и тем-же путем.
что то я не понял , как отладить не Печатную форму , а обработку заполнения ТЧ
и не понял зачем так тода извращаться если таким же способом можно Универсальную создать ? с выбором файла ?
и не понял зачем так тода извращаться если таким же способом можно Универсальную создать ? с выбором файла ?
Смотрите видео.. Все по аналогии. Профит:
- не надо делать лишних интерфейсов - работаем, повторяя пользовательский сценарий в 1С
- не надо эмулировать окружение (забивать параметры на форму)
- не надо использовать вспомогательные обработчики для отладки - я ими попользовался, и скорее бы такой подход назвал извращением, чем этот
(36)
в видео у вас Печатная форма , и процедура Печать в модуле обработки
у меня обработка ТЧ документа ,
в СведенияОВнешнейОбработке описана команда открытия допформы и все действия в модуле формы уже
не понятно куда в таком случае добавлять код который у вас в процедуре Печать добавляется ?
(38)вот к примеру эта обработка
https://infostart.ru/public/561065/ если надо могу её вам скинуть
вызывается форма , где указываются параметры , из формы они переносятся в документ
код в модуле обработки :
Функция СведенияОВнешнейОбработке() Экспорт
Назначения = Новый Массив ;
Назначения.Добавить("Документ.ТабельУчетаРабочегоВремени") ;
ПараметрыРегистрации = Новый Структура ;
ПараметрыРегистрации.Вставить("Вид","ЗаполнениеОбъекта");
ПараметрыРегистрации.Вставить("Назначение",Назначения);
ПараметрыРегистрации.Вставить("Наименование","Заполнить Сводно");
ПараметрыРегистрации.Вставить("Версия","1.0");
ПараметрыРегистрации.Вставить("Информация","Дополнительная обработка табличной части табеля");
ПараметрыРегистрации.Вставить("БезопасныйРежим",Ложь); ///--отладка
Команды = ПолучитьТаблицуКоманд() ;
ДобавитьКоманду(Команды, "Заполнить сводно","ЗаполнитьДокумент","ОткрытиеФормы",Истина,) ;
ПараметрыРегистрации.Вставить("Команды",Команды) ;
Возврат ПараметрыРегистрации;
КонецФункции
Как я думал - обвал по архитектуре. Таблицу необходимо заполнять на сервере. Саму таблицу - в табличную часть, заполняем ее на сервере, на клиенте отражаем результат заполнения. Серверный метод можно отладить, используя данный подход. Предупреждая вопросы - переносить алгоритм заполнения на сервер надо не ради отладки, а ради соблюдения ИТС, см. например Минимизация кода, выполняемого на клиенте.
Саму форму теоретически отладить можно, для этого надо сделать метод экспортным и переопределить открытие формы, открыв форму внешней обработки - однако у меня ни разу такой потребности не возникало.
(40)
как таблицу на сервере ? форма документа открыта на клиенте , зачем её на сервере заполнять
или я не понимаю что то ?
почитал по ссылке , там про сложные алгоритмы и ресурсы компа , это не важно абсолютно в моём случае
- затем, что работа с таблицей формы в большинстве случаев может породить неявные вызовы сервера. Во-вторых - в принципе при разработке надо стремиться к тому чтобы на форме был только интерактив, весь служебный интерфейс необходимо разрабатывать на сервере -> в модуле объекта. Вы же совместили интерфейс с самим алгоритмом.
К сожалению, все обычно руководствуются правилом "что разрешено - то не запрещено". Почитайте статьи про рефакторинг, на ИС, возможно придете к этим-же выводам.
Не хочу здесь проводить код-ревью вашей обработки, много писать придется. Да вам оно, думаю и не надо)
(42)скорей всего и не надо , до управляемых форм все было отлично
как на эту ерунду (клиент/сервер) перешли так всё по другому стало ... а многим оно и не нужно
а я прикладные задачи решаю а не глобальные ...
и как вы заметили , кода прибавляется , зачем непонятно , когда тут простейшие алгоритмы
спасибо , может почитаю чего нибудь в этом направлении
а у вас есть пример любой обработки с этим кодом ? поделитесь пожалуйста .
(37) Отладить как клиентские так и серверные вызовы, достаточно перед самым запуском подключаемой команды открыть вашу обработку через "Файл->Открыть", потом закрыть и запустить команду. Всё выполнение будет передано этой обработке из файла (имя обработки, естественно, должно совпадать с именем объекта из справочника ДополнительныеОтчетыИОбработки). Версия БСП - 2.4.5.31
(37) Отладить как клиентские так и серверные вызовы, достаточно перед самым запуском подключаемой команды открыть вашу обработку через "Файл->Открыть", потом закрыть и запустить команду. Всё выполнение будет передано этой обработке из файла (имя обработки, естественно, должно совпадать с именем объекта из справочника ДополнительныеОтчетыИОбработки). Версия БСП - 2.4.5.31
(55) Двоичные данные внешней обработки из файла должны полностью совпадать с двоичными данными из справочника. Поэтому при каждом изменении в файле, нужно загружать его в справочник.
Когда вы открываете файл обработки через меню Файл-Открыть, вы регистрируете ее Имя и, видимо, хеш-сумму, причем её ИспользуемоеИмяФайла - это файловый путь. Кода запускается команда подключенной обработки с таким же именем, проверяется ее хеш-сумма, и если она не совпадает, то ИспользуемоеИмяФайла заменяется на путь во временном хранилище, но если совпадает, ИспользуемоеИмяФайла не меняется и команда может быть отлажена в файле.
(56) Я насколько понял - вы говорите о обработке, которая после первого запуска создает 1С в временном файле. Она - да, существует до закрытия программы. Только это не отладка будет, а боль сплошная.
Метод прикольный, спору нет. Но только не работает у меня:
База на сервере, все сделал как в примере - отладка фоновых заданий, параметр запуска. На точки останова не тормозиться и все тут. Сообщения если оставлять, все выводит в правильном порядке. подскажите что еще попробовать можно
База на сервере, все сделал как в примере - отладка фоновых заданий, параметр запуска. На точки останова не тормозиться и все тут. Сообщения если оставлять, все выводит в правильном порядке. подскажите что еще попробовать можно
Отладка \ Подключение \ Подключенные предметы отладки - должны при запуске базы автоматически светится две строки. Тонкий клиент \ Сервер. Это есть?
(46) Да, есть. Платформа 8.3.10.2580. Еще один факт: пробую печатать - отладка не запускается. Следом открываю обработку через файл - открыть, нажимаю кнопку и ТОЖЕ НЕ ПОПАДАЮ В ОТЛАДКУ. В конфигураторе ставлю пробел, сохраняю, открываю - появляется отладка.
то есть смысл в том, что если нажать кнопку печать, то отладка отваливается от этого файла...?
обработка лежит на сетевом диске, он доступен ото всюду. путь тоже правильно написан
(47) Поставил точку останова в общем модуле, в который обращается моя обработка, поскольку точки останова в самой обработине не работали. И воуаля, мы зашли туда, F11, и выходим снова в обработку. Но только открылось другое окно (которое слева на картинке)
Как я понял проблемы была в букве сетевого диска и пути к обработке. Я открыл вот такую обработку N:\\*** а через общий модуль открылась обработка вот с таким путем \\192.168****\
Как я понял проблемы была в букве сетевого диска и пути к обработке. Я открыл вот такую обработку N:\\*** а через общий модуль открылась обработка вот с таким путем \\192.168****\
{ВнешняяОбработка.СчетЗаказКлиентаВнешнийКирсановаТЕСТ.МодульОбъекта(49)}: Ошибка при вызове метода контекста (Создать)
обр = ВнешниеОбработки.Создать(Адрес, БезопасныйРежим());
по причине:
Ошибка подключения внешних метаданных
по причине:
Каталог не обнаружен 'E:\1\Тест.epf'
все сделал по инструкции, пробовал несколько раз менять адрес каталога
Уточните, пожалуйста, следующие моменты:
- вариант работает на клиент-серверном варианте?
- конфигуратор должен быть открыт на той же машине, где работает сервер предприятия 1С?
Я попробовал использовать сетевую папку которая доступна с сервера и клиента, путь одинаковый, но точка остановки не срабатывает.
Для варианта вызова ТипКомандыВызовКлиентскогоМетода() видимо отдельно придумывать нужно что-то, т.к. создать обработку на клиенте невозможно.
(62) Везде работает, все равно где открыт конфигуратор. Про вызов клиентского - видимо, да, не сталкивался до сих пор, соотв. не было нужды что-то изобретать. Но вообще - возможно, в режиме толстого клиента УФ. Да и на тонком возможно, только гемора чуть побольше.
На каком релизе платформы работает?
Пробую на 8.3.12.1469
Условие
Если Адрес <> ЭтотОбъект.ИспользуемоеИмяФайла
выполняется всегда, так как свойство ЭтотОбъект.ИспользуемоеИмяФайла содержит темпоральное имя в виде
"e1cib/tempstorage/186306aa-905d-4790-bf3d-de9944665b4c"
из за этого возникает бесконечный рекурсивный вызов процедуры
Очень интересная статья. Спасибо автору. Видео раз 5 посмотрел. Вопрос такой, а если нет процедуры печать, если это не внешняя печатная форма, а внешняя обработка без печати, как делать в этом случае? как отлаживать?
(82) ну так ставьте точку останова в любой вызываемой функции/событии, какая в принципе разница то.
но боюсь, если у вас этот вопрос возникает - то вам надо углубить базовые знания информатики/программирования.
(85) она здесь используется только потому что это доп. обработка, подключаемая через подсистему БСП. Если включен безопасный режим, платформа запрещает использование внешних ресурсов, и ничего не выйдет.
Если такого метода нет - значит нет БСП, либо внешняя обработка не через БСП работает. И надо иным способом это предусмотреть. Для начала просто попробовать запустить, если ошибок нет - все ок. Но навряд-ли кто-то в своей нетленке будет им пользоваться.
Удалось попасть в экспортную процедуру ВыполнитьКоманду(Идентификатор, ПараметрыВыполнения)
, правда не сразу вышло, но в результате остановился по точке в этой процедуре. Спасибо за статью.
Добрый день!
А отладка заполнения ТЧ будет так работать?
Вот ошибка - Метод объекта не обнаружен (ЗаполнитьТЧ)
{ВнешняяОбработка.ЗаполнениеОтчетаПроизводстваЗаСмену.Форма.Форма.Форма(341)}: Обр.ЗаполнитьТЧ(пер);
Код находится в форме, которая есть для заполнения ТЧ, в ней описана команда(не клиенте). Из неё эту функцию и вызываю.
&НаСервере
Функция ЗаполнитьТЧ(Док)
//Адрес = "C:\Users\***\Заполнение отчета производства 201208_006.epf";
//обр = ВнешниеОбработки.Создать(Адрес, БезопасныйРежим());
//Обр.ЗаполнитьТЧ(Док);
//Возврат Истина;
ПОпытка
Об = РеквизитФормыВЗначение("Объект");
(88) Любой серверный метод так можно отладить. Только:
- путь к обработке должен быть доступен с сервера
- в конфигураторе надо открывать обработку по тому же пути. Бывает что путь указывают как сетевой адрес, напр. \\101.20.99.4\Шара\МояОбработка.epf, а открывают из сетевого диска напр. z:\МояОбработка.epf - так не взлетит, открывать надо тот же адрес
- безопасный режим должен быть выключен
(91) Путь тут нормальный. Во время загрузки не находит ЗаполнитьТЧ(Док) почему-то. Что я тут не верно сделал? Эта функция вызывается с формы клиента из функции
(93) я так понимаю, метод у вас на форме расположен. А чтобы это все сработало он должен быть экспортным в модуле объекта. Его там нет, и 1С закономерно на это ругается.
Подскажите начинающему, как по этому методу отладить обработку с обращением к пользователю?
В СведенияОВнешнейОбработке() у меня следующие параметры:
Вид = "ЗаполнениеОбъекта";
КомандаИспользование = "ВызовКлиентскогоМетода";
Соответственно вызывается экспортная процедура ВыполнитьКоманду() из модуля формы внешней обработки.
Я столкнулся с проблемой - моя внешняя обработка в результате выполнения кода водвешивает пользовательский режим. Надо отладить, ваш бы метод мне мог бы очень помочь...
(89) именно на клиенте метод не отладите, см. куда он потом на сервер стучится, там и работайте. Либо используйте расширение ИР (http://devtool1c.ucoz.ru/) - там отлаживается целиком вся обработка, и таких проблем не возникает.
(94) На том же сайте \ в расширении есть справка, все довольно просто и последовательно. Начните с команды "Отладка внешних обработок БСП (ИР)", только запускайтесь в толстом УФ клиенте. Дальше все интуитивно
(92) С бедой худо бедно разобрался. ) Спасибо.
Теперь попробую "ВызовСерверногоМетода" с вашим методом отладки...
Ссылка, на ИР у меня не открывается (404 ошибка). Есть какой-то секрет?